From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 4B3356841 for ; Sat, 28 Apr 2018 05:46:29 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Apr 2018 20:46:28 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,337,1520924400"; d="scan'208";a="45221063" Received: from pgsmsx102.gar.corp.intel.com ([10.221.44.80]) by FMSMGA003.fm.intel.com with ESMTP; 27 Apr 2018 20:46:26 -0700 Received: from pgsmsx101.gar.corp.intel.com ([169.254.1.211]) by PGSMSX102.gar.corp.intel.com ([169.254.6.245]) with mapi id 14.03.0319.002; Sat, 28 Apr 2018 11:46:25 +0800 From: "Zhao1, Wei" To: Adrien Mazarguil , "dev@dpdk.org" CC: "Peng, Yuan" , "Xu, Qian Q" , "Liu, Yu Y" , "Lu, Wenzhuo" , "Wu, Jingjing" Thread-Topic: [dpdk-dev] [PATCH v6 07/16] ethdev: flatten RSS configuration in flow API Thread-Index: AQHT3KpGpeZ5gJCHsE+8dFynsjWxuKQVihkA Date: Sat, 28 Apr 2018 03:46:24 +0000 Message-ID: References: <20180419100848.6178-1-adrien.mazarguil@6wind.com> <20180425151852.7676-1-adrien.mazarguil@6wind.com> <20180425151852.7676-8-adrien.mazarguil@6wind.com> In-Reply-To: <20180425151852.7676-8-adrien.mazarguil@6wind.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action x-originating-ip: [172.30.20.206] Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v6 07/16] ethdev: flatten RSS configuration in flow API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 28 Apr 2018 03:46:30 -0000 SGmjrEFkcmllbiBNYXphcmd1aWwNCg0KICAgICAgIFdlIGhhdmUganVzdCB1c2UgbmV3IFJDLjEg Y29kZSBvbiB0aGUgZmVhdHVyZSBvZiBmbG93IFJTUyBBUEksIGJ1dCB3ZSBmaW5kIHNvbWUgYWJu b3JtYWwgcGhlbm9tZW5vbi4NCkFmdGVyIHRoYXQgSSBjaGVjayBjb2RlIGFnYWluLCBJIGZpbmQg dGhhdCBpdCBpcyAgaW50cm9kdWNlZCBpbiB0aGlzIHBhdGNoOg0KDQpTSEEtMTogYWM4ZDIyZGUy Mzk0ZTAzYmE0YTc3ZDhmZDI0MzgxMTQ3YWFmYjFkMw0KKiBldGhkZXY6IGZsYXR0ZW4gUlNTIGNv bmZpZ3VyYXRpb24gaW4gZmxvdyBBUEkNClNpZ25lZC1vZmYtYnk6IEFkcmllbiBNYXphcmd1aWwg PGFkcmllbi5tYXphcmd1aWxANndpbmQuY29tPg0KDQoNClRoaXMgYWJub3JtYWwgcGhlbm9tZW5v biBpbmNsdWRlIGk0MGUgYW5kIGl4Z2JlIDIgTklDLCBpdCBkbyBub3QgaGFzIHRoZXNlIDIgYnVn IGJlZm9yZSBtZXJnZSB0aGlzIHBhdGNoLg0KSXQgaXMgZmlyc3QgZmluZCBvdXQgYnkgeXVhbi5w ZW5nQGludGVsLmNvbSwgIHNoZSBjYW4gdGVsbCB5b3UgaG93IHRvIHJlYXBwZWFyIHRoZXNlIGFi bm9ybWFsIHBoZW5vbWVub24gb24gUlNTIGZsb3cgQVBJLg0KDQpUaGFuayB5b3UuDQoNCg0KPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBkZXYgW21haWx0bzpkZXYtYm91bmNl c0BkcGRrLm9yZ10gT24gQmVoYWxmIE9mIEFkcmllbiBNYXphcmd1aWwNCj4gU2VudDogV2VkbmVz ZGF5LCBBcHJpbCAyNSwgMjAxOCAxMToyOCBQTQ0KPiBUbzogVGhvbWFzIE1vbmphbG9uIDx0aG9t YXNAbW9uamFsb24ubmV0PjsgWWlnaXQsIEZlcnJ1aA0KPiA8ZmVycnVoLnlpZ2l0QGludGVsLmNv bT47IGRldkBkcGRrLm9yZw0KPiBDYzogWHVlbWluZyBMaSA8eHVlbWluZ2xAbWVsbGFub3guY29t PjsgTHUsIFdlbnpodW8NCj4gPHdlbnpodW8ubHVAaW50ZWwuY29tPjsgV3UsIEppbmdqaW5nIDxq aW5namluZy53dUBpbnRlbC5jb20+OyBYaW5nLCBCZWlsZWkNCj4gPGJlaWxlaS54aW5nQGludGVs LmNvbT47IFpoYW5nLCBRaSBaIDxxaS56LnpoYW5nQGludGVsLmNvbT47IEFuYW55ZXYsDQo+IEtv bnN0YW50aW4gPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+OyBOZWxpbyBMYXJhbmplaXJv DQo+IDxuZWxpby5sYXJhbmplaXJvQDZ3aW5kLmNvbT47IFlvbmdzZW9rIEtvaCA8eXNrb2hAbWVs bGFub3guY29tPjsNCj4gQW5kcmV3IFJ5YmNoZW5rbyA8YXJ5YmNoZW5rb0Bzb2xhcmZsYXJlLmNv bT47IFBhc2NhbCBNYXpvbg0KPiA8cGFzY2FsLm1hem9uQDZ3aW5kLmNvbT47IE5pY29sYXUsIFJh ZHUgPHJhZHUubmljb2xhdUBpbnRlbC5jb20+OyBBa2hpbA0KPiBHb3lhbCA8YWtoaWwuZ295YWxA bnhwLmNvbT4NCj4gU3ViamVjdDogW2RwZGstZGV2XSBbUEFUQ0ggdjYgMDcvMTZdIGV0aGRldjog ZmxhdHRlbiBSU1MgY29uZmlndXJhdGlvbiBpbg0KPiBmbG93IEFQSQ0KPiANCj4gU2luY2UgaXRz IGluY2VwdGlvbiwgdGhlIHJ0ZV9mbG93IFJTUyBhY3Rpb24gaGFzIGJlZW4gcmVseWluZyBpbiBw YXJ0IG9uDQo+IGV4dGVybmFsIHN0cnVjdCBydGVfZXRoX3Jzc19jb25mIGZvciBjb21wYXRpYmls aXR5IHdpdGggdGhlIGxlZ2FjeSBSU1MgQVBJLg0KPiBUaGlzIHN0cnVjdHVyZSBsYWNrcyBwYXJh bWV0ZXJzIHN1Y2ggYXMgdGhlIGhhc2ggYWxnb3JpdGhtIHRvIHVzZSwgYW5kIG1vcmUNCj4gcmVj ZW50bHksIGEgbWV0aG9kIHRvIHRlbGwgd2hpY2ggbGF5ZXIgUlNTIHNob3VsZCBiZSBwZXJmb3Jt ZWQgb24gWzFdLg0KPiANCj4gR2l2ZW4gc3RydWN0IHJ0ZV9ldGhfcnNzX2NvbmYgd2lsbCBuZXZl ciBiZSBmbGV4aWJsZSBlbm91Z2ggdG8gcmVwcmVzZW50IGENCj4gY29tcGxldGUgUlNTIGNvbmZp Z3VyYXRpb24gKGUuZy4gUkVUQSB0YWJsZSksIHRoaXMgcGF0Y2ggc3VwZXJzZWRlcyBpdCBieQ0K PiBleHRlbmRpbmcgdGhlIHJ0ZV9mbG93IFJTUyBhY3Rpb24gZGlyZWN0bHkuDQo+IA0KPiBBIHN1 YnNlcXVlbnQgcGF0Y2ggd2lsbCBhZGQgYSBmaWVsZCB0byB1c2UgYSBub24tZGVmYXVsdCBSU1Mg aGFzaA0KPiBhbGdvcml0aG0uIFRvIHRoYXQgZW5kLCBhIGZpZWxkIG5hbWVkICJ0eXBlcyIgcmVw bGFjZXMgdGhlIGZpZWxkIGZvcm1lcmx5DQo+IGtub3duIGFzICJyc3NfaGYiIGFuZCBzdGFuZGlu ZyBmb3IgIlJTUyBoYXNoIGZ1bmN0aW9ucyIgYXMgaXQgd2FzDQo+IGNvbmZ1c2luZy4gQWN0dWFs IFJTUyBoYXNoIGZ1bmN0aW9uIHR5cGVzIGFyZSBkZWZpbmVkIGJ5IGVudW0NCj4gcnRlX2V0aF9o YXNoX2Z1bmN0aW9uLg0KPiANCj4gVGhpcyBwYXRjaCB1cGRhdGVzIGFsbCBQTURzIGFuZCBleGFt cGxlIGFwcGxpY2F0aW9ucyBhY2NvcmRpbmdseS4NCj4gDQo+IEl0IGJyZWFrcyBBQkkgY29tcGF0 aWJpbGl0eSBmb3IgdGhlIGZvbGxvd2luZyBwdWJsaWMgZnVuY3Rpb25zOg0KPiANCj4gLSBydGVf Zmxvd19jb3B5KCkNCj4gLSBydGVfZmxvd19jcmVhdGUoKQ0KPiAtIHJ0ZV9mbG93X3F1ZXJ5KCkN Cj4gLSBydGVfZmxvd192YWxpZGF0ZSgpDQo+IA0KPiBbMV0gY29tbWl0IDY3NmI2MDUxODJhNSAo ImRvYzogYW5ub3VuY2UgZXRoZGV2IEFQSSBjaGFuZ2UgZm9yIFJTUw0KPiAgICAgY29uZmlndXJh dGlvbiIpDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBBZHJpZW4gTWF6YXJndWlsIDxhZHJpZW4ubWF6 YXJndWlsQDZ3aW5kLmNvbT4NCj4gQWNrZWQtYnk6IEFuZHJldyBSeWJjaGVua28gPGFyeWJjaGVu a29Ac29sYXJmbGFyZS5jb20+DQo+IENjOiBYdWVtaW5nIExpIDx4dWVtaW5nbEBtZWxsYW5veC5j b20+DQo+IENjOiBGZXJydWggWWlnaXQgPGZlcnJ1aC55aWdpdEBpbnRlbC5jb20+DQo+IENjOiBU aG9tYXMgTW9uamFsb24gPHRob21hc0Btb25qYWxvbi5uZXQ+DQo+IENjOiBXZW56aHVvIEx1IDx3 ZW56aHVvLmx1QGludGVsLmNvbT4NCj4gQ2M6IEppbmdqaW5nIFd1IDxqaW5namluZy53dUBpbnRl bC5jb20+DQo+IENjOiBCZWlsZWkgWGluZyA8YmVpbGVpLnhpbmdAaW50ZWwuY29tPg0KPiBDYzog UWkgWmhhbmcgPHFpLnouemhhbmdAaW50ZWwuY29tPg0KPiBDYzogS29uc3RhbnRpbiBBbmFueWV2 IDxrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPg0KPiBDYzogTmVsaW8gTGFyYW5qZWlybyA8 bmVsaW8ubGFyYW5qZWlyb0A2d2luZC5jb20+DQo+IENjOiBZb25nc2VvayBLb2ggPHlza29oQG1l bGxhbm94LmNvbT4NCj4gQ2M6IEFuZHJldyBSeWJjaGVua28gPGFyeWJjaGVua29Ac29sYXJmbGFy ZS5jb20+DQo+IENjOiBQYXNjYWwgTWF6b24gPHBhc2NhbC5tYXpvbkA2d2luZC5jb20+DQo+IENj OiBSYWR1IE5pY29sYXUgPHJhZHUubmljb2xhdUBpbnRlbC5jb20+DQo+IENjOiBBa2hpbCBHb3lh bCA8YWtoaWwuZ295YWxAbnhwLmNvbT4NCj4gDQo+IC0tLQ0KPiANCj4gdjYgY2hhbmdlczoNCj4g DQo+IC0gRml4ZWQgUVVFVUUgYWN0aW9uIHN1cHBvcnQgaW4gbWx4NSBhY2NvcmRpbmcgdG8gTmVs aW8ncyBjb21tZW50IFsxXS4NCj4gICBUaGlzIGFjdGlvbiByZWxpZXMgb24gUlNTIHRvIHdvcmsg YW5kIGV2ZW4gdGhvdWdoIGl0IHRhcmdldHMgYSBzaW5nbGUgUngNCj4gICBxdWV1ZSwgYSBub24t TlVMTCBoYXNoIGtleSBpcyByZXF1aXJlZC4NCj4gLSBVcGRhdGVkIEFQSSBhbmQgQUJJIGNoYW5n ZXMgc2VjdGlvbnMgaW4gcmVsZWFzZSBub3Rlcy4NCj4gDQo+IFsxXSBodHRwOi8vZHBkay5vcmcv bWwvYXJjaGl2ZXMvZGV2LzIwMTgtQXByaWwvMDk4NjM1Lmh0bWwNCj4gDQo+IHYzIGNoYW5nZXM6 DQo+IA0KPiBEb2N1bWVudGF0aW9uIHVwZGF0ZSByZWdhcmRpbmcgdGhlIG1lYW5pbmcgb2YgYSAw IHZhbHVlIGZvciBSU1MgdHlwZXMgaW4NCj4gZmxvdyBydWxlcy4NCj4gDQo+IEl0IHVzZWQgdG8g aW1wbGljaXRseSBtZWFuICJubyBSU1MiIGJ1dCBpcyByZWRlZmluZWQgYXMgcmVxdWVzdGluZyBh IGtpbmQNCj4gb2YgImJlc3QtZWZmb3J0IiBtb2RlIGZyb20gUE1EcywgaS5lLiBhbnl0aGluZyBy YW5naW5nIGZyb20gZW1wdHkgdG8NCj4gYWxsLWluY2x1c2l2ZSBSU1M7IHdoYXQgbWF0dGVycyBp cyBpdCBwcm92aWRlcyBzYWZlIGRlZmF1bHRzIHRoYXQgd2lsbCB3b3JrDQo+IHJlZ2FyZGxlc3Mg b2YgUE1EIGNhcGFiaWxpdGllcy4NCj4gLS0tDQo+ICBhcHAvdGVzdC1wbWQvY21kbGluZV9mbG93 LmMgICAgICAgICAgICAgICAgIHwgIDQ4ICsrKy0tLQ0KPiAgYXBwL3Rlc3QtcG1kL2NvbmZpZy5j ICAgICAgICAgICAgICAgICAgICAgICB8ICAzOSArKy0tLQ0KPiAgZG9jL2d1aWRlcy9wcm9nX2d1 aWRlL3J0ZV9mbG93LnJzdCAgICAgICAgICB8ICAyOCArKy0tDQo+ICBkb2MvZ3VpZGVzL3JlbF9u b3Rlcy9yZWxlYXNlXzE4XzA1LnJzdCAgICAgIHwgIDEzICstDQo+ICBkb2MvZ3VpZGVzL3Rlc3Rw bWRfYXBwX3VnL3Rlc3RwbWRfZnVuY3MucnN0IHwgICA2ICstDQo+ICBkcml2ZXJzL25ldC9lMTAw MC9lMTAwMF9ldGhkZXYuaCAgICAgICAgICAgIHwgIDEzICstDQo+ICBkcml2ZXJzL25ldC9lMTAw MC9pZ2JfZXRoZGV2LmMgICAgICAgICAgICAgIHwgICA0ICstDQo+ICBkcml2ZXJzL25ldC9lMTAw MC9pZ2JfZmxvdy5jICAgICAgICAgICAgICAgIHwgIDMxICsrLS0NCj4gIGRyaXZlcnMvbmV0L2Ux MDAwL2lnYl9yeHR4LmMgICAgICAgICAgICAgICAgfCAgNTEgKysrKystDQo+ICBkcml2ZXJzL25l dC9pNDBlL2k0MGVfZXRoZGV2LmMgICAgICAgICAgICAgIHwgIDUzICsrKysrLS0NCj4gIGRyaXZl cnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuaCAgICAgICAgICAgICAgfCAgMTUgKy0NCj4gIGRyaXZl cnMvbmV0L2k0MGUvaTQwZV9mbG93LmMgICAgICAgICAgICAgICAgfCAgNDcgKysrLS0tDQo+ICBk cml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGhkZXYuYyAgICAgICAgICAgIHwgICA0ICstDQo+ICBk cml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGhkZXYuaCAgICAgICAgICAgIHwgIDEzICstDQo+ICBk cml2ZXJzL25ldC9peGdiZS9peGdiZV9mbG93LmMgICAgICAgICAgICAgIHwgIDMwICsrLS0NCj4g IGRyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3J4dHguYyAgICAgICAgICAgICAgfCAgNTEgKysrKyst DQo+ICBkcml2ZXJzL25ldC9tbHg0L21seDQuYyAgICAgICAgICAgICAgICAgICAgIHwgICAyICst DQo+ICBkcml2ZXJzL25ldC9tbHg0L21seDRfZmxvdy5jICAgICAgICAgICAgICAgIHwgIDYxICsr Ky0tLS0NCj4gIGRyaXZlcnMvbmV0L21seDQvbWx4NF9mbG93LmggICAgICAgICAgICAgICAgfCAg IDIgKy0NCj4gIGRyaXZlcnMvbmV0L21seDQvbWx4NF9yeHEuYyAgICAgICAgICAgICAgICAgfCAg IDIgKy0NCj4gIGRyaXZlcnMvbmV0L21seDQvbWx4NF9yeHR4LmggICAgICAgICAgICAgICAgfCAg IDIgKy0NCj4gIGRyaXZlcnMvbmV0L21seDUvbWx4NV9mbG93LmMgICAgICAgICAgICAgICAgfCAx OTMgKysrKysrKysrKystLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvbmV0L21seDUvbWx4NV9yeHEu YyAgICAgICAgICAgICAgICAgfCAgMjYgKy0tDQo+ICBkcml2ZXJzL25ldC9tbHg1L21seDVfcnh0 eC5oICAgICAgICAgICAgICAgIHwgIDI2ICstLQ0KPiAgZHJpdmVycy9uZXQvc2ZjL3NmY19mbG93 LmMgICAgICAgICAgICAgICAgICB8ICAyMSArKy0NCj4gIGRyaXZlcnMvbmV0L3RhcC90YXBfZmxv dy5jICAgICAgICAgICAgICAgICAgfCAgIDggKy0NCj4gIGV4YW1wbGVzL2lwc2VjLXNlY2d3L2lw c2VjLmMgICAgICAgICAgICAgICAgfCAgMTAgKy0NCj4gIGxpYi9saWJydGVfZXRoZXIvcnRlX2Zs b3cuYyAgICAgICAgICAgICAgICAgfCAgMzkgKystLS0NCj4gIGxpYi9saWJydGVfZXRoZXIvcnRl X2Zsb3cuaCAgICAgICAgICAgICAgICAgfCAgMTIgKy0NCj4gIDI5IGZpbGVzIGNoYW5nZWQsIDQ5 MiBpbnNlcnRpb25zKCspLCAzNTggZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvYXBw L3Rlc3QtcG1kL2NtZGxpbmVfZmxvdy5jIGIvYXBwL3Rlc3QtcG1kL2NtZGxpbmVfZmxvdy5jDQo+ IGluZGV4IDc5OGI3OTQ4ZC4uYzljMmMzYWQ5IDEwMDY0NA0KPiAtLS0gYS9hcHAvdGVzdC1wbWQv Y21kbGluZV9mbG93LmMNCj4gKysrIGIvYXBwL3Rlc3QtcG1kL2NtZGxpbmVfZmxvdy5jDQo+IEBA IC0xOTIsOSArMTkyLDggQEAgZW51bSBpbmRleCB7DQo+ICAvKiogU3RvcmFnZSBmb3Igc3RydWN0 IHJ0ZV9mbG93X2FjdGlvbl9yc3MgaW5jbHVkaW5nIGV4dGVybmFsIGRhdGEuICovDQo+ICBzdHJ1 Y3QgYWN0aW9uX3Jzc19kYXRhIHsNCj4gIAlzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyBjb25m Ow0KPiArCXVpbnQ4X3Qga2V5W1JTU19IQVNIX0tFWV9MRU5HVEhdOw0KPiAgCXVpbnQxNl90IHF1 ZXVlW0FDVElPTl9SU1NfUVVFVUVfTlVNXTsNCj4gLQlzdHJ1Y3QgcnRlX2V0aF9yc3NfY29uZiBy c3NfY29uZjsNCj4gLQl1aW50OF90IHJzc19rZXlbUlNTX0hBU0hfS0VZX0xFTkdUSF07DQo+ICB9 Ow0KPiANCj4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBzdWJzZXF1ZW50IHRva2VucyBhbmQgYXJn dW1lbnRzIG9uIHRoZSBzdGFjay4NCj4gKi8NCj4gQEAgLTE1ODcsNyArMTU4Niw3IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgdG9rZW4gdG9rZW5fbGlzdFtdID0gew0KPiAgCX0sDQo+ICAJW0FDVElP Tl9SU1NfVFlQRVNdID0gew0KPiAgCQkubmFtZSA9ICJ0eXBlcyIsDQo+IC0JCS5oZWxwID0gIlJT UyBoYXNoIHR5cGVzIiwNCj4gKwkJLmhlbHAgPSAic3BlY2lmaWMgUlNTIGhhc2ggdHlwZXMiLA0K PiAgCQkubmV4dCA9IE5FWFQoYWN0aW9uX3JzcywgTkVYVF9FTlRSWShBQ1RJT05fUlNTX1RZUEUp KSwNCj4gIAl9LA0KPiAgCVtBQ1RJT05fUlNTX1RZUEVdID0gew0KPiBAQCAtMTYwMiwyMSArMTYw MSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRva2VuIHRva2VuX2xpc3RbXSA9IHsNCj4gIAkJ Lm5leHQgPSBORVhUKGFjdGlvbl9yc3MsIE5FWFRfRU5UUlkoU1RSSU5HKSksDQo+ICAJCS5hcmdz ID0gQVJHUyhBUkdTX0VOVFJZX0FSQigwLCAwKSwNCj4gIAkJCSAgICAgQVJHU19FTlRSWV9BUkIN Cj4gLQkJCSAgICAgKG9mZnNldG9mKHN0cnVjdCBhY3Rpb25fcnNzX2RhdGEsIHJzc19jb25mKSAr DQo+IC0JCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgcnRlX2V0aF9yc3NfY29uZiwgcnNzX2tleV9s ZW4pLA0KPiAtCQkJICAgICAgc2l6ZW9mKCgoc3RydWN0IHJ0ZV9ldGhfcnNzX2NvbmYgKikwKS0+ DQo+IC0JCQkJICAgICByc3Nfa2V5X2xlbikpLA0KPiAtCQkJICAgICBBUkdTX0VOVFJZKHN0cnVj dCBhY3Rpb25fcnNzX2RhdGEsIHJzc19rZXkpKSwNCj4gKwkJCSAgICAgKG9mZnNldG9mKHN0cnVj dCBhY3Rpb25fcnNzX2RhdGEsIGNvbmYpICsNCj4gKwkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBy dGVfZmxvd19hY3Rpb25fcnNzLCBrZXlfbGVuKSwNCj4gKwkJCSAgICAgIHNpemVvZigoKHN0cnVj dCBydGVfZmxvd19hY3Rpb25fcnNzICopMCktPg0KPiArCQkJCSAgICAga2V5X2xlbikpLA0KPiAr CQkJICAgICBBUkdTX0VOVFJZKHN0cnVjdCBhY3Rpb25fcnNzX2RhdGEsIGtleSkpLA0KPiAgCX0s DQo+ICAJW0FDVElPTl9SU1NfS0VZX0xFTl0gPSB7DQo+ICAJCS5uYW1lID0gImtleV9sZW4iLA0K PiAgCQkuaGVscCA9ICJSU1MgaGFzaCBrZXkgbGVuZ3RoIGluIGJ5dGVzIiwNCj4gIAkJLm5leHQg PSBORVhUKGFjdGlvbl9yc3MsIE5FWFRfRU5UUlkoVU5TSUdORUQpKSwNCj4gIAkJLmFyZ3MgPSBB UkdTKEFSR1NfRU5UUllfQVJCX0JPVU5ERUQNCj4gLQkJCSAgICAgKG9mZnNldG9mKHN0cnVjdCBh Y3Rpb25fcnNzX2RhdGEsIHJzc19jb25mKSArDQo+IC0JCQkgICAgICBvZmZzZXRvZihzdHJ1Y3Qg cnRlX2V0aF9yc3NfY29uZiwgcnNzX2tleV9sZW4pLA0KPiAtCQkJICAgICAgc2l6ZW9mKCgoc3Ry dWN0IHJ0ZV9ldGhfcnNzX2NvbmYgKikwKS0+DQo+IC0JCQkJICAgICByc3Nfa2V5X2xlbiksDQo+ ICsJCQkgICAgIChvZmZzZXRvZihzdHJ1Y3QgYWN0aW9uX3Jzc19kYXRhLCBjb25mKSArDQo+ICsJ CQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3Jzcywga2V5X2xlbiksDQo+ ICsJCQkgICAgICBzaXplb2YoKChzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqKTApLT4NCj4g KwkJCQkgICAgIGtleV9sZW4pLA0KPiAgCQkJICAgICAgMCwNCj4gIAkJCSAgICAgIFJTU19IQVNI X0tFWV9MRU5HVEgpKSwNCj4gIAl9LA0KPiBAQCAtMjA3NSwyNyArMjA3NCwyNCBAQCBwYXJzZV92 Y19hY3Rpb25fcnNzKHN0cnVjdCBjb250ZXh0ICpjdHgsIGNvbnN0DQo+IHN0cnVjdCB0b2tlbiAq dG9rZW4sDQo+ICAJYWN0aW9uX3Jzc19kYXRhID0gY3R4LT5vYmplY3Q7DQo+ICAJKmFjdGlvbl9y c3NfZGF0YSA9IChzdHJ1Y3QgYWN0aW9uX3Jzc19kYXRhKXsNCj4gIAkJLmNvbmYgPSAoc3RydWN0 IHJ0ZV9mbG93X2FjdGlvbl9yc3Mpew0KPiAtCQkJLnJzc19jb25mID0gJmFjdGlvbl9yc3NfZGF0 YS0+cnNzX2NvbmYsDQo+IC0JCQkubnVtID0gUlRFX01JTihuYl9yeHEsDQo+IEFDVElPTl9SU1Nf UVVFVUVfTlVNKSwNCj4gKwkJCS50eXBlcyA9IHJzc19oZiwNCj4gKwkJCS5rZXlfbGVuID0gc2l6 ZW9mKGFjdGlvbl9yc3NfZGF0YS0+a2V5KSwNCj4gKwkJCS5xdWV1ZV9udW0gPSBSVEVfTUlOKG5i X3J4cSwNCj4gQUNUSU9OX1JTU19RVUVVRV9OVU0pLA0KPiArCQkJLmtleSA9IGFjdGlvbl9yc3Nf ZGF0YS0+a2V5LA0KPiAgCQkJLnF1ZXVlID0gYWN0aW9uX3Jzc19kYXRhLT5xdWV1ZSwNCj4gIAkJ fSwNCj4gKwkJLmtleSA9ICJ0ZXN0cG1kJ3MgZGVmYXVsdCBSU1MgaGFzaCBrZXkiLA0KPiAgCQku cXVldWUgPSB7IDAgfSwNCj4gLQkJLnJzc19jb25mID0gKHN0cnVjdCBydGVfZXRoX3Jzc19jb25m KXsNCj4gLQkJCS5yc3Nfa2V5ID0gYWN0aW9uX3Jzc19kYXRhLT5yc3Nfa2V5LA0KPiAtCQkJLnJz c19rZXlfbGVuID0gc2l6ZW9mKGFjdGlvbl9yc3NfZGF0YS0+cnNzX2tleSksDQo+IC0JCQkucnNz X2hmID0gcnNzX2hmLA0KPiAtCQl9LA0KPiAtCQkucnNzX2tleSA9ICJ0ZXN0cG1kJ3MgZGVmYXVs dCBSU1MgaGFzaCBrZXkiLA0KPiAgCX07DQo+IC0JZm9yIChpID0gMDsgaSA8IGFjdGlvbl9yc3Nf ZGF0YS0+Y29uZi5udW07ICsraSkNCj4gKwlmb3IgKGkgPSAwOyBpIDwgYWN0aW9uX3Jzc19kYXRh LT5jb25mLnF1ZXVlX251bTsgKytpKQ0KPiAgCQlhY3Rpb25fcnNzX2RhdGEtPnF1ZXVlW2ldID0g aTsNCj4gIAlpZiAoIXBvcnRfaWRfaXNfaW52YWxpZChjdHgtPnBvcnQsIERJU0FCTEVEX1dBUk4p ICYmDQo+ICAJICAgIGN0eC0+cG9ydCAhPSAocG9ydGlkX3QpUlRFX1BPUlRfQUxMKSB7DQo+ICAJ CXN0cnVjdCBydGVfZXRoX2Rldl9pbmZvIGluZm87DQo+IA0KPiAgCQlydGVfZXRoX2Rldl9pbmZv X2dldChjdHgtPnBvcnQsICZpbmZvKTsNCj4gLQkJYWN0aW9uX3Jzc19kYXRhLT5yc3NfY29uZi5y c3Nfa2V5X2xlbiA9DQo+IC0JCQlSVEVfTUlOKHNpemVvZihhY3Rpb25fcnNzX2RhdGEtPnJzc19r ZXkpLA0KPiArCQlhY3Rpb25fcnNzX2RhdGEtPmNvbmYua2V5X2xlbiA9DQo+ICsJCQlSVEVfTUlO KHNpemVvZihhY3Rpb25fcnNzX2RhdGEtPmtleSksDQo+ICAJCQkJaW5mby5oYXNoX2tleV9zaXpl KTsNCj4gIAl9DQo+ICAJYWN0aW9uLT5jb25mID0gJmFjdGlvbl9yc3NfZGF0YS0+Y29uZjsNCj4g QEAgLTIxMjMsNyArMjExOSw3IEBAIHBhcnNlX3ZjX2FjdGlvbl9yc3NfdHlwZShzdHJ1Y3QgY29u dGV4dCAqY3R4LA0KPiBjb25zdCBzdHJ1Y3QgdG9rZW4gKnRva2VuLA0KPiAgCQlyZXR1cm4gLTE7 DQo+ICAJaWYgKCEoY3R4LT5vYmpkYXRhID4+IDE2KSAmJiBjdHgtPm9iamVjdCkgew0KPiAgCQlh Y3Rpb25fcnNzX2RhdGEgPSBjdHgtPm9iamVjdDsNCj4gLQkJYWN0aW9uX3Jzc19kYXRhLT5yc3Nf Y29uZi5yc3NfaGYgPSAwOw0KPiArCQlhY3Rpb25fcnNzX2RhdGEtPmNvbmYudHlwZXMgPSAwOw0K PiAgCX0NCj4gIAlpZiAoIXN0cmNtcF9wYXJ0aWFsKCJlbmQiLCBzdHIsIGxlbikpIHsNCj4gIAkJ Y3R4LT5vYmpkYXRhICY9IDB4ZmZmZjsNCj4gQEAgLTIxNDIsNyArMjEzOCw3IEBAIHBhcnNlX3Zj X2FjdGlvbl9yc3NfdHlwZShzdHJ1Y3QgY29udGV4dCAqY3R4LA0KPiBjb25zdCBzdHJ1Y3QgdG9r ZW4gKnRva2VuLA0KPiAgCWlmICghY3R4LT5vYmplY3QpDQo+ICAJCXJldHVybiBsZW47DQo+ICAJ YWN0aW9uX3Jzc19kYXRhID0gY3R4LT5vYmplY3Q7DQo+IC0JYWN0aW9uX3Jzc19kYXRhLT5yc3Nf Y29uZi5yc3NfaGYgfD0gcnNzX3R5cGVfdGFibGVbaV0ucnNzX3R5cGU7DQo+ICsJYWN0aW9uX3Jz c19kYXRhLT5jb25mLnR5cGVzIHw9IHJzc190eXBlX3RhYmxlW2ldLnJzc190eXBlOw0KPiAgCXJl dHVybiBsZW47DQo+ICB9DQo+IA0KPiBAQCAtMjE5Miw3ICsyMTg4LDcgQEAgcGFyc2VfdmNfYWN0 aW9uX3Jzc19xdWV1ZShzdHJ1Y3QgY29udGV4dCAqY3R4LA0KPiBjb25zdCBzdHJ1Y3QgdG9rZW4g KnRva2VuLA0KPiAgCWlmICghY3R4LT5vYmplY3QpDQo+ICAJCXJldHVybiBsZW47DQo+ICAJYWN0 aW9uX3Jzc19kYXRhID0gY3R4LT5vYmplY3Q7DQo+IC0JYWN0aW9uX3Jzc19kYXRhLT5jb25mLm51 bSA9IGk7DQo+ICsJYWN0aW9uX3Jzc19kYXRhLT5jb25mLnF1ZXVlX251bSA9IGk7DQo+ICAJYWN0 aW9uX3Jzc19kYXRhLT5jb25mLnF1ZXVlID0gaSA/IGFjdGlvbl9yc3NfZGF0YS0+cXVldWUgOiBO VUxMOw0KPiAgCXJldHVybiBsZW47DQo+ICB9DQo+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1wbWQv Y29uZmlnLmMgYi9hcHAvdGVzdC1wbWQvY29uZmlnLmMNCj4gaW5kZXggZWI3YWMzMTVlLi40NzAw ZGQ2NzQgMTAwNjQ0DQo+IC0tLSBhL2FwcC90ZXN0LXBtZC9jb25maWcuYw0KPiArKysgYi9hcHAv dGVzdC1wbWQvY29uZmlnLmMNCj4gQEAgLTExMTcsNDAgKzExMTcsMjcgQEAgZmxvd19hY3Rpb25f Y29uZl9jb3B5KHZvaWQgKmJ1ZiwgY29uc3Qgc3RydWN0DQo+IHJ0ZV9mbG93X2FjdGlvbiAqYWN0 aW9uKQ0KPiAgCQlvZmYgPSAwOw0KPiAgCQlpZiAoZHN0LnJzcykNCj4gIAkJCSpkc3QucnNzID0g KHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzKXsNCj4gLQkJCQkubnVtID0gc3JjLnJzcy0+bnVt LA0KPiArCQkJCS50eXBlcyA9IHNyYy5yc3MtPnR5cGVzLA0KPiArCQkJCS5rZXlfbGVuID0gc3Jj LnJzcy0+a2V5X2xlbiwNCj4gKwkJCQkucXVldWVfbnVtID0gc3JjLnJzcy0+cXVldWVfbnVtLA0K PiAgCQkJfTsNCj4gIAkJb2ZmICs9IHNpemVvZigqc3JjLnJzcyk7DQo+IC0JCWlmIChzcmMucnNz LT5udW0pIHsNCj4gKwkJaWYgKHNyYy5yc3MtPmtleV9sZW4pIHsNCj4gIAkJCW9mZiA9IFJURV9B TElHTl9DRUlMKG9mZiwgc2l6ZW9mKGRvdWJsZSkpOw0KPiAtCQkJc2l6ZSA9IHNpemVvZigqc3Jj LnJzcy0+cXVldWUpICogc3JjLnJzcy0+bnVtOw0KPiArCQkJc2l6ZSA9IHNpemVvZigqc3JjLnJz cy0+a2V5KSAqIHNyYy5yc3MtPmtleV9sZW47DQo+ICAJCQlpZiAoZHN0LnJzcykNCj4gLQkJCQlk c3QucnNzLT5xdWV1ZSA9IG1lbWNweQ0KPiArCQkJCWRzdC5yc3MtPmtleSA9IG1lbWNweQ0KPiAg CQkJCQkoKHZvaWQgKikoKHVpbnRwdHJfdClkc3QucnNzICsgb2ZmKSwNCj4gLQkJCQkJIHNyYy5y c3MtPnF1ZXVlLCBzaXplKTsNCj4gKwkJCQkJIHNyYy5yc3MtPmtleSwgc2l6ZSk7DQo+ICAJCQlv ZmYgKz0gc2l6ZTsNCj4gIAkJfQ0KPiAtCQlvZmYgPSBSVEVfQUxJR05fQ0VJTChvZmYsIHNpemVv Zihkb3VibGUpKTsNCj4gLQkJaWYgKGRzdC5yc3MpIHsNCj4gLQkJCWRzdC5yc3MtPnJzc19jb25m ID0gKHZvaWQgKikoKHVpbnRwdHJfdClkc3QucnNzICsgb2ZmKTsNCj4gLQkJCSooc3RydWN0IHJ0 ZV9ldGhfcnNzX2NvbmYgKikodWludHB0cl90KQ0KPiAtCQkJCWRzdC5yc3MtPnJzc19jb25mID0g KHN0cnVjdA0KPiBydGVfZXRoX3Jzc19jb25mKXsNCj4gLQkJCQkucnNzX2tleV9sZW4gPSBzcmMu cnNzLT5yc3NfY29uZi0NCj4gPnJzc19rZXlfbGVuLA0KPiAtCQkJCS5yc3NfaGYgPSBzcmMucnNz LT5yc3NfY29uZi0+cnNzX2hmLA0KPiAtCQkJfTsNCj4gLQkJfQ0KPiAtCQlvZmYgKz0gc2l6ZW9m KCpzcmMucnNzLT5yc3NfY29uZik7DQo+IC0JCWlmIChzcmMucnNzLT5yc3NfY29uZi0+cnNzX2tl eV9sZW4pIHsNCj4gKwkJaWYgKHNyYy5yc3MtPnF1ZXVlX251bSkgew0KPiAgCQkJb2ZmID0gUlRF X0FMSUdOX0NFSUwob2ZmLCBzaXplb2YoZG91YmxlKSk7DQo+IC0JCQlzaXplID0gc2l6ZW9mKCpz cmMucnNzLT5yc3NfY29uZi0+cnNzX2tleSkgKg0KPiAtCQkJCXNyYy5yc3MtPnJzc19jb25mLT5y c3Nfa2V5X2xlbjsNCj4gLQkJCWlmIChkc3QucnNzKSB7DQo+IC0JCQkJKChzdHJ1Y3QgcnRlX2V0 aF9yc3NfY29uZiAqKSh1aW50cHRyX3QpDQo+IC0JCQkJIGRzdC5yc3MtPnJzc19jb25mKS0+cnNz X2tleSA9DQo+IC0JCQkJCSh2b2lkICopKCh1aW50cHRyX3QpZHN0LnJzcyArIG9mZik7DQo+IC0J CQkJbWVtY3B5KGRzdC5yc3MtPnJzc19jb25mLT5yc3Nfa2V5LA0KPiAtCQkJCSAgICAgICBzcmMu cnNzLT5yc3NfY29uZi0+cnNzX2tleSwNCj4gLQkJCQkgICAgICAgc2l6ZSk7DQo+IC0JCQl9DQo+ ICsJCQlzaXplID0gc2l6ZW9mKCpzcmMucnNzLT5xdWV1ZSkgKiBzcmMucnNzLT5xdWV1ZV9udW07 DQo+ICsJCQlpZiAoZHN0LnJzcykNCj4gKwkJCQlkc3QucnNzLT5xdWV1ZSA9IG1lbWNweQ0KPiAr CQkJCQkoKHZvaWQgKikoKHVpbnRwdHJfdClkc3QucnNzICsgb2ZmKSwNCj4gKwkJCQkJIHNyYy5y c3MtPnF1ZXVlLCBzaXplKTsNCj4gIAkJCW9mZiArPSBzaXplOw0KPiAgCQl9DQo+ICAJCXNpemUg PSBvZmY7DQo+IGRpZmYgLS1naXQgYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcnRlX2Zsb3cucnN0 DQo+IGIvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3J0ZV9mbG93LnJzdA0KPiBpbmRleCBhY2JlYWFj YmQuLmNmMjUyZWViYSAxMDA2NDQNCj4gLS0tIGEvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3J0ZV9m bG93LnJzdA0KPiArKysgYi9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcnRlX2Zsb3cucnN0DQo+IEBA IC0xMzAxLDYgKzEzMDEsMTIgQEAgQWN0aW9uOiBgYFJTU2BgDQo+ICBTaW1pbGFyIHRvIFFVRVVF LCBleGNlcHQgUlNTIGlzIGFkZGl0aW9uYWxseSBwZXJmb3JtZWQgb24gcGFja2V0cyB0byBzcHJl YWQNCj4gIHRoZW0gYW1vbmcgc2V2ZXJhbCBxdWV1ZXMgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRl ZCBwYXJhbWV0ZXJzLg0KPiANCj4gK1VubGlrZSBnbG9iYWwgUlNTIHNldHRpbmdzIHVzZWQgYnkg b3RoZXIgRFBESyBBUElzLCB1bnNldHRpbmcgdGhlIGBgdHlwZXNgYA0KPiArZmllbGQgZG9lcyBu b3QgZGlzYWJsZSBSU1MgaW4gYSBmbG93IHJ1bGUuIERvaW5nIHNvIGluc3RlYWQgcmVxdWVzdHMg c2FmZQ0KPiArdW5zcGVjaWZpZWQgImJlc3QtZWZmb3J0IiBzZXR0aW5ncyBmcm9tIHRoZSB1bmRl cmx5aW5nIFBNRCwgd2hpY2gNCj4gZGVwZW5kaW5nDQo+ICtvbiB0aGUgZmxvdyBydWxlLCBtYXkg cmVzdWx0IGluIGFueXRoaW5nIHJhbmdpbmcgZnJvbSBlbXB0eSAoc2luZ2xlIHF1ZXVlKQ0KPiAr dG8gYWxsLWluY2x1c2l2ZSBSU1MuDQo+ICsNCj4gIE5vdGU6IFJTUyBoYXNoIHJlc3VsdCBpcyBz dG9yZWQgaW4gdGhlIGBgaGFzaC5yc3NgYCBtYnVmIGZpZWxkIHdoaWNoDQo+ICBvdmVybGFwcyBg YGhhc2guZmRpci5sb2BgLiBTaW5jZSBgQWN0aW9uOiBNQVJLYF8gc2V0cyB0aGUgYGBoYXNoLmZk aXIuaGlgYA0KPiAgZmllbGQgb25seSwgYm90aCBjYW4gYmUgcmVxdWVzdGVkIHNpbXVsdGFuZW91 c2x5Lg0KPiBAQCAtMTMwOSwxNSArMTMxNSwxOSBAQCBmaWVsZCBvbmx5LCBib3RoIGNhbiBiZSBy ZXF1ZXN0ZWQgc2ltdWx0YW5lb3VzbHkuDQo+IA0KPiAgLi4gdGFibGU6OiBSU1MNCj4gDQo+IC0g ICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+IC0g ICB8IEZpZWxkICAgICAgICB8IFZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+IC0g ICArPT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rDQo+IC0g ICB8IGBgcnNzX2NvbmZgYCB8IFJTUyBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICB8DQo+IC0g ICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+IC0g ICB8IGBgbnVtYGAgICAgICB8IG51bWJlciBvZiBlbnRyaWVzIGluIGBgcXVldWVgYCB8DQo+IC0g ICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+IC0g ICB8IGBgcXVldWVgYCAgICB8IHF1ZXVlIGluZGljZXMgdG8gdXNlICAgICAgICAgICB8DQo+IC0g ICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ICsg ICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsNCj4gKyAgIHwgRmllbGQgICAgICAgICB8IFZhbHVlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfA0KPiArDQo+ICs9PT09PT09PT09PT09PT0rPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPT09PSsNCj4gKyAgIHwgYGB0eXBl c2BgICAgICB8IHNwZWNpZmljIFJTUyBoYXNoIHR5cGVzIChzZWUgYGBFVEhfUlNTXypgYCkgfA0K PiArICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rDQo+ICsgICB8IGBga2V5X2xlbmBgICAgfCBoYXNoIGtleSBsZW5ndGggaW4g Ynl0ZXMgICAgICAgICAgICAgICAgICAgIHwNCj4gKyAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiArICAgfCBgYHF1ZXVl X251bWBgIHwgbnVtYmVyIG9mIGVudHJpZXMgaW4gYGBxdWV1ZWBgICAgICAgICAgICAgICB8DQo+ ICsgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsNCj4gKyAgIHwgYGBrZXlgYCAgICAgICB8IGhhc2gga2V5ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiArICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ICsgICB8IGBgcXVldWVg YCAgICAgfCBxdWV1ZSBpbmRpY2VzIHRvIHVzZSAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4g KyAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKw0KPiANCj4gIEFjdGlvbjogYGBQRmBgDQo+ICBeXl5eXl5eXl5eXl5eXg0KPiBk aWZmIC0tZ2l0IGEvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8xOF8wNS5yc3QNCj4gYi9k b2MvZ3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzE4XzA1LnJzdA0KPiBpbmRleCBjYTE3MzQ1MGMu LmI3MDJhYzY2YSAxMDA2NDQNCj4gLS0tIGEvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8x OF8wNS5yc3QNCj4gKysrIGIvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8xOF8wNS5yc3QN Cj4gQEAgLTI1NCw2ICsyNTQsMTMgQEAgQVBJIENoYW5nZXMNCj4gICAgICBwcmVzZW50Lg0KPiAg ICAqIEM5OS1zdHlsZSBmbGV4aWJsZSBhcnJheXMgd2VyZSByZXBsYWNlZCB3aXRoIHN0YW5kYXJk IHBvaW50ZXJzIGluIFJTUw0KPiAgICAgIGFjdGlvbiBhbmQgaW4gUkFXIHBhdHRlcm4gaXRlbSBz dHJ1Y3R1cmVzIGR1ZSB0byBjb21wYXRpYmlsaXR5IGlzc3Vlcy4NCj4gKyAgKiBUaGUgUlNTIGFj dGlvbiB3YXMgbW9kaWZpZWQgdG8gbm90IHJlbHkgb24gZXh0ZXJuYWwNCj4gKyAgICBgYHN0cnVj dCBydGVfZXRoX3Jzc19jb25mYGAgYW55bW9yZSB0byBpbnN0ZWFkIGV4cG9zZSBpdHMgb3duIGFu ZCBtb3JlDQo+ICsgICAgYXBwcm9wcmlhdGVseSBuYW1lZCBjb25maWd1cmF0aW9uIGZpZWxkcyBk aXJlY3RseQ0KPiArICAgIChgYHJzc19jb25mLT5yc3Nfa2V5YGAgPT4gYGBrZXlgYCwNCj4gKyAg ICBgYHJzc19jb25mLT5yc3Nfa2V5X2xlbmBgID0+IGBga2V5X2xlbmBgLA0KPiArICAgIGBgcnNz X2NvbmYtPnJzc19oZmBgID0+IGBgdHlwZXNgYCwNCj4gKyAgICBgYG51bWBgID0+IGBgcXVldWVf bnVtYGApLg0KPiANCj4gDQo+ICBBQkkgQ2hhbmdlcw0KPiBAQCAtMzAyLDkgKzMwOSw5IEBAIEFC SSBDaGFuZ2VzDQo+ICAgIGBgcnRlX2Zsb3dfaXNvbGF0ZWBgLCBgYHJ0ZV9mbG93X3F1ZXJ5YGAg YW5kIGBgcnRlX2Zsb3dfdmFsaWRhdGVgYCwgZHVlIHRvDQo+ICAgIGNoYW5nZXMgaW4gZXJyb3Ig dHlwZSBkZWZpbml0aW9ucyAoYGBlbnVtIHJ0ZV9mbG93X2Vycm9yX3R5cGVgYCksIHJlbW92YWwN Cj4gICAgb2YgdGhlIHVudXNlZCBEVVAgYWN0aW9uIChgYGVudW0gcnRlX2Zsb3dfYWN0aW9uX3R5 cGVgYCksIG1vZGlmaWVkDQo+IC0gIGJlaGF2aW9yIGZvciBmbG93IHJ1bGUgYWN0aW9ucyAoc2Vl IEFQSSBjaGFuZ2VzKSBhbmQgcmVtb3ZhbCBvZiBDOTkNCj4gLSAgZmxleGlibGUgYXJyYXlzIGZy b20gUlNTIGFjdGlvbiAoYGBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3Jzc2BgKSBhbmQgUkFXDQo+ IC0gIHBhdHRlcm4gaXRlbSAoYGBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9yYXdgYCkuDQo+ICsgIGJl aGF2aW9yIGZvciBmbG93IHJ1bGUgYWN0aW9ucyAoc2VlIEFQSSBjaGFuZ2VzKSwgcmVtb3ZhbCBv ZiBDOTkgZmxleGlibGUNCj4gKyAgYXJyYXkgZnJvbSBSQVcgcGF0dGVybiBpdGVtIChgYHN0cnVj dCBydGVfZmxvd19pdGVtX3Jhd2BgKSBhbmQgY29tcGxldGUNCj4gKyAgcmV3b3JrIG9mIHRoZSBS U1MgYWN0aW9uIGRlZmluaXRpb24gKGBgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3NgYCkuDQo+ IA0KPiANCj4gIFJlbW92ZWQgSXRlbXMNCj4gZGlmZiAtLWdpdCBhL2RvYy9ndWlkZXMvdGVzdHBt ZF9hcHBfdWcvdGVzdHBtZF9mdW5jcy5yc3QNCj4gYi9kb2MvZ3VpZGVzL3Rlc3RwbWRfYXBwX3Vn L3Rlc3RwbWRfZnVuY3MucnN0DQo+IGluZGV4IDY4YzI4NmJkNC4uYTEyZTAyNjdhIDEwMDY0NA0K PiAtLS0gYS9kb2MvZ3VpZGVzL3Rlc3RwbWRfYXBwX3VnL3Rlc3RwbWRfZnVuY3MucnN0DQo+ICsr KyBiL2RvYy9ndWlkZXMvdGVzdHBtZF9hcHBfdWcvdGVzdHBtZF9mdW5jcy5yc3QNCj4gQEAgLTM0 MjIsOCArMzQyMiwxMCBAQCBUaGlzIHNlY3Rpb24gbGlzdHMgc3VwcG9ydGVkIGFjdGlvbnMgYW5k IHRoZWlyDQo+IGF0dHJpYnV0ZXMsIGlmIGFueS4NCj4gDQo+ICAtIGBgcnNzYGA6IHNwcmVhZCBw YWNrZXRzIGFtb25nIHNldmVyYWwgcXVldWVzLg0KPiANCj4gLSAgLSBgYHR5cGVzIFt7UlNTIGhh c2ggdHlwZX0gWy4uLl1dIGVuZGBgOiBSU1MgaGFzaCB0eXBlcywgYWxsb3dlZCB0b2tlbnMNCj4g LSAgICBhcmUgdGhlIHNhbWUgYXMgYHNldF9oYXNoX2lucHV0X3NldGBfLCBhbiBlbXB0eSBsaXN0 IG1lYW5zIG5vbmUgKDApLg0KPiArICAtIGBgdHlwZXMgW3tSU1MgaGFzaCB0eXBlfSBbLi4uXV0g ZW5kYGA6IHNwZWNpZmljIFJTUyBoYXNoIHR5cGVzLCBhbGxvd2VkDQo+ICsgICAgdG9rZW5zIGFy ZSB0aGUgc2FtZSBhcyBgc2V0X2hhc2hfaW5wdXRfc2V0YF8sIGV4Y2VwdCB0aGF0IGFuIGVtcHR5 IGxpc3QNCj4gKyAgICBkb2VzIG5vdCBkaXNhYmxlIFJTUyBidXQgaW5zdGVhZCByZXF1ZXN0cyB1 bnNwZWNpZmllZCAiYmVzdC1lZmZvcnQiDQo+ICsgICAgc2V0dGluZ3MuDQo+IA0KPiAgICAtIGBg a2V5IHtzdHJpbmd9YGA6IFJTUyBoYXNoIGtleSwgb3ZlcnJpZGVzIGBga2V5X2xlbmBgLg0KPiAN Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aGRldi5oDQo+IGIvZHJp dmVycy9uZXQvZTEwMDAvZTEwMDBfZXRoZGV2LmgNCj4gaW5kZXggNjM1NGI4OTRhLi45MDIwMDFm MzYgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aGRldi5oDQo+ICsr KyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aGRldi5oDQo+IEBAIC00LDYgKzQsMTAgQEAN Cj4gDQo+ICAjaWZuZGVmIF9FMTAwMF9FVEhERVZfSF8NCj4gICNkZWZpbmUgX0UxMDAwX0VUSERF Vl9IXw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxydGVf Zmxvdy5oPg0KPiAgI2luY2x1ZGUgPHJ0ZV90aW1lLmg+DQo+ICAjaW5jbHVkZSA8cnRlX3BjaS5o Pg0KPiANCj4gQEAgLTI3LDYgKzMxLDcgQEANCj4gICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfRVhU RU5EX1ZMQU4gICgxPDwyNikgICAgLyogRVhURU5ERUQgVkxBTiAqLw0KPiAgI2RlZmluZSBJR0Jf VkZUQV9TSVpFIDEyOA0KPiANCj4gKyNkZWZpbmUgSUdCX0hLRVlfTUFYX0lOREVYICAgICAgICAg ICAgIDEwDQo+ICAjZGVmaW5lIElHQl9NQVhfUlhfUVVFVUVfTlVNICAgICAgICAgICA4DQo+ICAj ZGVmaW5lIElHQl9NQVhfUlhfUVVFVUVfTlVNXzgyNTc2ICAgICAxNg0KPiANCj4gQEAgLTIyOSw4 ICsyMzQsOCBAQCBzdHJ1Y3QgaWdiX2V0aGVydHlwZV9maWx0ZXIgew0KPiAgfTsNCj4gDQo+ICBz dHJ1Y3QgaWdiX3J0ZV9mbG93X3Jzc19jb25mIHsNCj4gLQlzdHJ1Y3QgcnRlX2V0aF9yc3NfY29u ZiByc3NfY29uZjsgLyoqPCBSU1MgcGFyYW1ldGVycy4gKi8NCj4gLQl1aW50MTZfdCBudW07IC8q KjwgTnVtYmVyIG9mIGVudHJpZXMgaW4gcXVldWVbXS4gKi8NCj4gKwlzdHJ1Y3QgcnRlX2Zsb3df YWN0aW9uX3JzcyBjb25mOyAvKio8IFJTUyBwYXJhbWV0ZXJzLiAqLw0KPiArCXVpbnQ4X3Qga2V5 W0lHQl9IS0VZX01BWF9JTkRFWCAqIHNpemVvZih1aW50MzJfdCldOyAvKiBIYXNoIGtleS4NCj4g Ki8NCj4gIAl1aW50MTZfdCBxdWV1ZVtJR0JfTUFYX1JYX1FVRVVFX05VTV07IC8qKjwgUXVldWVz IGluZGljZXMNCj4gdG8gdXNlLiAqLw0KPiAgfTsNCj4gDQo+IEBAIC01MDEsNiArNTA2LDEwIEBA IGludCBldGhfaWdiX3N5bl9maWx0ZXJfc2V0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAg aW50IGV0aF9pZ2JfYWRkX2RlbF9mbGV4X2ZpbHRlcihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwN Cj4gIAkJCXN0cnVjdCBydGVfZXRoX2ZsZXhfZmlsdGVyICpmaWx0ZXIsDQo+ICAJCQlib29sIGFk ZCk7DQo+ICtpbnQgaWdiX3Jzc19jb25mX2luaXQoc3RydWN0IGlnYl9ydGVfZmxvd19yc3NfY29u ZiAqb3V0LA0KPiArCQkgICAgICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqaW4p Ow0KPiAraW50IGlnYl9hY3Rpb25fcnNzX3NhbWUoY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlv bl9yc3MgKmNvbXAsDQo+ICsJCQljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqd2l0 aCk7DQo+ICBpbnQgaWdiX2NvbmZpZ19yc3NfZmlsdGVyKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2 LA0KPiAgCQkJc3RydWN0IGlnYl9ydGVfZmxvd19yc3NfY29uZiAqY29uZiwNCj4gIAkJCWJvb2wg YWRkKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2lnYl9ldGhkZXYuYw0KPiBi L2RyaXZlcnMvbmV0L2UxMDAwL2lnYl9ldGhkZXYuYw0KPiBpbmRleCBjMzVjOTM1MmEuLjE0MDMz NDc3MiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvaWdiX2V0aGRldi5jDQo+ICsr KyBiL2RyaXZlcnMvbmV0L2UxMDAwL2lnYl9ldGhkZXYuYw0KPiBAQCAtNDEsOCArNDEsNiBAQA0K PiAgI2RlZmluZSBJR0JfREVGQVVMVF9UWF9IVEhSRVNIICAgICAgMQ0KPiAgI2RlZmluZSBJR0Jf REVGQVVMVF9UWF9XVEhSRVNIICAgICAgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzYpID8N Cj4gMSA6IDE2KQ0KPiANCj4gLSNkZWZpbmUgSUdCX0hLRVlfTUFYX0lOREVYIDEwDQo+IC0NCj4g IC8qIEJpdCBzaGlmdCBhbmQgbWFzayAqLw0KPiAgI2RlZmluZSBJR0JfNF9CSVRfV0lEVEggIChD SEFSX0JJVCAvIDIpDQo+ICAjZGVmaW5lIElHQl80X0JJVF9NQVNLICAgUlRFX0xFTjJNQVNLKElH Ql80X0JJVF9XSURUSCwgdWludDhfdCkNCj4gQEAgLTU2NjIsNyArNTY2MCw3IEBAIGlnYl9yc3Nf ZmlsdGVyX3Jlc3RvcmUoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpDQo+ICAJc3RydWN0IGUxMDAw X2ZpbHRlcl9pbmZvICpmaWx0ZXJfaW5mbyA9DQo+ICAJCUUxMDAwX0RFVl9QUklWQVRFX1RPX0ZJ TFRFUl9JTkZPKGRldi0+ZGF0YS0NCj4gPmRldl9wcml2YXRlKTsNCj4gDQo+IC0JaWYgKGZpbHRl cl9pbmZvLT5yc3NfaW5mby5udW0pDQo+ICsJaWYgKGZpbHRlcl9pbmZvLT5yc3NfaW5mby5jb25m LnF1ZXVlX251bSkNCj4gIAkJaWdiX2NvbmZpZ19yc3NfZmlsdGVyKGRldiwgJmZpbHRlcl9pbmZv LT5yc3NfaW5mbywgVFJVRSk7DQo+ICB9DQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv ZTEwMDAvaWdiX2Zsb3cuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2lnYl9mbG93LmMNCj4gaW5kZXgg YzBmNWI1MTkwLi44ZGM1Zjc1ZjIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2ln Yl9mbG93LmMNCj4gKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvaWdiX2Zsb3cuYw0KPiBAQCAtMTI5 Miw3ICsxMjkyLDcgQEAgaWdiX3BhcnNlX3Jzc19maWx0ZXIoc3RydWN0IHJ0ZV9ldGhfZGV2ICpk ZXYsDQo+IA0KPiAgCXJzcyA9IChjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqKWFj dC0+Y29uZjsNCj4gDQo+IC0JaWYgKCFyc3MgfHwgIXJzcy0+bnVtKSB7DQo+ICsJaWYgKCFyc3Mg fHwgIXJzcy0+cXVldWVfbnVtKSB7DQo+ICAJCXJ0ZV9mbG93X2Vycm9yX3NldChlcnJvciwgRUlO VkFMLA0KPiAgCQkJCVJURV9GTE9XX0VSUk9SX1RZUEVfQUNUSU9OLA0KPiAgCQkJCWFjdCwNCj4g QEAgLTEzMDAsNyArMTMwMCw3IEBAIGlnYl9wYXJzZV9yc3NfZmlsdGVyKHN0cnVjdCBydGVfZXRo X2RldiAqZGV2LA0KPiAgCQlyZXR1cm4gLXJ0ZV9lcnJubzsNCj4gIAl9DQo+IA0KPiAtCWZvciAo biA9IDA7IG4gPCByc3MtPm51bTsgbisrKSB7DQo+ICsJZm9yIChuID0gMDsgbiA8IHJzcy0+cXVl dWVfbnVtOyBuKyspIHsNCj4gIAkJaWYgKHJzcy0+cXVldWVbbl0gPj0gZGV2LT5kYXRhLT5uYl9y eF9xdWV1ZXMpIHsNCj4gIAkJCXJ0ZV9mbG93X2Vycm9yX3NldChlcnJvciwgRUlOVkFMLA0KPiAg CQkJCSAgIFJURV9GTE9XX0VSUk9SX1RZUEVfQUNUSU9OLA0KPiBAQCAtMTMxMCwxNCArMTMxMCwx OCBAQCBpZ2JfcGFyc2VfcnNzX2ZpbHRlcihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gIAkJ fQ0KPiAgCX0NCj4gDQo+IC0JaWYgKHJzcy0+cnNzX2NvbmYpDQo+IC0JCXJzc19jb25mLT5yc3Nf Y29uZiA9ICpyc3MtPnJzc19jb25mOw0KPiAtCWVsc2UNCj4gLQkJcnNzX2NvbmYtPnJzc19jb25m LnJzc19oZiA9IElHQl9SU1NfT0ZGTE9BRF9BTEw7DQo+IC0NCj4gLQlmb3IgKG4gPSAwOyBuIDwg cnNzLT5udW07ICsrbikNCj4gLQkJcnNzX2NvbmYtPnF1ZXVlW25dID0gcnNzLT5xdWV1ZVtuXTsN Cj4gLQlyc3NfY29uZi0+bnVtID0gcnNzLT5udW07DQo+ICsJaWYgKHJzcy0+a2V5X2xlbiAmJiBy c3MtPmtleV9sZW4gIT0gUlRFX0RJTShyc3NfY29uZi0+a2V5KSkNCj4gKwkJcmV0dXJuIHJ0ZV9m bG93X2Vycm9yX3NldA0KPiArCQkJKGVycm9yLCBFTk9UU1VQLCBSVEVfRkxPV19FUlJPUl9UWVBF X0FDVElPTiwNCj4gYWN0LA0KPiArCQkJICJSU1MgaGFzaCBrZXkgbXVzdCBiZSBleGFjdGx5IDQw IGJ5dGVzIik7DQo+ICsJaWYgKHJzcy0+cXVldWVfbnVtID4gUlRFX0RJTShyc3NfY29uZi0+cXVl dWUpKQ0KPiArCQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0DQo+ICsJCQkoZXJyb3IsIEVOT1RT VVAsIFJURV9GTE9XX0VSUk9SX1RZUEVfQUNUSU9OLA0KPiBhY3QsDQo+ICsJCQkgInRvbyBtYW55 IHF1ZXVlcyBmb3IgUlNTIGNvbnRleHQiKTsNCj4gKwlpZiAoaWdiX3Jzc19jb25mX2luaXQocnNz X2NvbmYsIHJzcykpDQo+ICsJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQNCj4gKwkJCShlcnJv ciwgRUlOVkFMLCBSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwNCj4gYWN0LA0KPiArCQkJICJS U1MgY29udGV4dCBpbml0aWFsaXphdGlvbiBmYWlsdXJlIik7DQo+IA0KPiAgCS8qIGNoZWNrIGlm IHRoZSBuZXh0IG5vdCB2b2lkIGl0ZW0gaXMgRU5EICovDQo+ICAJaW5kZXgrKzsNCj4gQEAgLTE1 MTgsOSArMTUyMiw4IEBAIGlnYl9mbG93X2NyZWF0ZShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwN Cj4gIAkJCQlQTURfRFJWX0xPRyhFUlIsICJmYWlsZWQgdG8gYWxsb2NhdGUNCj4gbWVtb3J5Iik7 DQo+ICAJCQkJZ290byBvdXQ7DQo+ICAJCQl9DQo+IC0JCQlydGVfbWVtY3B5KCZyc3NfZmlsdGVy X3B0ci0+ZmlsdGVyX2luZm8sDQo+IC0JCQkJJnJzc19jb25mLA0KPiAtCQkJCXNpemVvZihzdHJ1 Y3QgaWdiX3J0ZV9mbG93X3Jzc19jb25mKSk7DQo+ICsJCQlpZ2JfcnNzX2NvbmZfaW5pdCgmcnNz X2ZpbHRlcl9wdHItPmZpbHRlcl9pbmZvLA0KPiArCQkJCQkgICZyc3NfY29uZi5jb25mKTsNCj4g IAkJCVRBSUxRX0lOU0VSVF9UQUlMKCZpZ2JfZmlsdGVyX3Jzc19saXN0LA0KPiAgCQkJCXJzc19m aWx0ZXJfcHRyLCBlbnRyaWVzKTsNCj4gIAkJCWZsb3ctPnJ1bGUgPSByc3NfZmlsdGVyX3B0cjsN Cj4gQEAgLTE3NTcsNyArMTc2MCw3IEBAIGlnYl9jbGVhcl9yc3NfZmlsdGVyKHN0cnVjdCBydGVf ZXRoX2RldiAqZGV2KQ0KPiAgCXN0cnVjdCBlMTAwMF9maWx0ZXJfaW5mbyAqZmlsdGVyID0NCj4g IAkJRTEwMDBfREVWX1BSSVZBVEVfVE9fRklMVEVSX0lORk8oZGV2LT5kYXRhLQ0KPiA+ZGV2X3By aXZhdGUpOw0KPiANCj4gLQlpZiAoZmlsdGVyLT5yc3NfaW5mby5udW0pDQo+ICsJaWYgKGZpbHRl ci0+cnNzX2luZm8uY29uZi5xdWV1ZV9udW0pDQo+ICAJCWlnYl9jb25maWdfcnNzX2ZpbHRlcihk ZXYsICZmaWx0ZXItPnJzc19pbmZvLCBGQUxTRSk7DQo+ICB9DQo+IA0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvZTEwMDAvaWdiX3J4dHguYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2lnYl9yeHR4 LmMNCj4gaW5kZXggMzIzOTEzZjBkLi40NWJiMzQ1NWMgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMv bmV0L2UxMDAwL2lnYl9yeHR4LmMNCj4gKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvaWdiX3J4dHgu Yw0KPiBAQCAtMjg5OCwxMiArMjg5OCw0NyBAQCBpZ2JfdHhxX2luZm9fZ2V0KHN0cnVjdCBydGVf ZXRoX2RldiAqZGV2LA0KPiB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gIH0NCj4gDQo+ICBpbnQNCj4g K2lnYl9yc3NfY29uZl9pbml0KHN0cnVjdCBpZ2JfcnRlX2Zsb3dfcnNzX2NvbmYgKm91dCwNCj4g KwkJICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqaW4pDQo+ICt7DQo+ICsJaWYg KGluLT5rZXlfbGVuID4gUlRFX0RJTShvdXQtPmtleSkgfHwNCj4gKwkgICAgaW4tPnF1ZXVlX251 bSA+IFJURV9ESU0ob3V0LT5xdWV1ZSkpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCW91dC0+ Y29uZiA9IChzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3Jzcyl7DQo+ICsJCS50eXBlcyA9IGluLT50 eXBlcywNCj4gKwkJLmtleV9sZW4gPSBpbi0+a2V5X2xlbiwNCj4gKwkJLnF1ZXVlX251bSA9IGlu LT5xdWV1ZV9udW0sDQo+ICsJCS5rZXkgPSBtZW1jcHkob3V0LT5rZXksIGluLT5rZXksIGluLT5r ZXlfbGVuKSwNCj4gKwkJLnF1ZXVlID0gbWVtY3B5KG91dC0+cXVldWUsIGluLT5xdWV1ZSwNCj4g KwkJCQlzaXplb2YoKmluLT5xdWV1ZSkgKiBpbi0+cXVldWVfbnVtKSwNCj4gKwl9Ow0KPiArCXJl dHVybiAwOw0KPiArfQ0KPiArDQo+ICtpbnQNCj4gK2lnYl9hY3Rpb25fcnNzX3NhbWUoY29uc3Qg c3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgKmNvbXAsDQo+ICsJCSAgICBjb25zdCBzdHJ1Y3Qg cnRlX2Zsb3dfYWN0aW9uX3JzcyAqd2l0aCkNCj4gK3sNCj4gKwlyZXR1cm4gKGNvbXAtPnR5cGVz ID09IHdpdGgtPnR5cGVzICYmDQo+ICsJCWNvbXAtPmtleV9sZW4gPT0gd2l0aC0+a2V5X2xlbiAm Jg0KPiArCQljb21wLT5xdWV1ZV9udW0gPT0gd2l0aC0+cXVldWVfbnVtICYmDQo+ICsJCSFtZW1j bXAoY29tcC0+a2V5LCB3aXRoLT5rZXksIHdpdGgtPmtleV9sZW4pICYmDQo+ICsJCSFtZW1jbXAo Y29tcC0+cXVldWUsIHdpdGgtPnF1ZXVlLA0KPiArCQkJc2l6ZW9mKCp3aXRoLT5xdWV1ZSkgKiB3 aXRoLT5xdWV1ZV9udW0pKTsNCj4gK30NCj4gKw0KPiAraW50DQo+ICBpZ2JfY29uZmlnX3Jzc19m aWx0ZXIoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJCXN0cnVjdCBpZ2JfcnRlX2Zsb3df cnNzX2NvbmYgKmNvbmYsIGJvb2wgYWRkKQ0KPiAgew0KPiAgCXVpbnQzMl90IHNoaWZ0Ow0KPiAg CXVpbnQxNl90IGksIGo7DQo+IC0Jc3RydWN0IHJ0ZV9ldGhfcnNzX2NvbmYgcnNzX2NvbmYgPSBj b25mLT5yc3NfY29uZjsNCj4gKwlzdHJ1Y3QgcnRlX2V0aF9yc3NfY29uZiByc3NfY29uZiA9IHsN Cj4gKwkJLnJzc19rZXkgPSBjb25mLT5jb25mLmtleV9sZW4gPw0KPiArCQkJKHZvaWQgKikodWlu dHB0cl90KWNvbmYtPmNvbmYua2V5IDogTlVMTCwNCj4gKwkJLnJzc19rZXlfbGVuID0gY29uZi0+ Y29uZi5rZXlfbGVuLA0KPiArCQkucnNzX2hmID0gY29uZi0+Y29uZi50eXBlcywNCj4gKwl9Ow0K PiAgCXN0cnVjdCBlMTAwMF9maWx0ZXJfaW5mbyAqZmlsdGVyX2luZm8gPQ0KPiAgCQlFMTAwMF9E RVZfUFJJVkFURV9UT19GSUxURVJfSU5GTyhkZXYtPmRhdGEtDQo+ID5kZXZfcHJpdmF0ZSk7DQo+ ICAJc3RydWN0IGUxMDAwX2h3ICpodyA9IEUxMDAwX0RFVl9QUklWQVRFX1RPX0hXKGRldi0+ZGF0 YS0NCj4gPmRldl9wcml2YXRlKTsNCj4gQEAgLTI5MTEsOCArMjk0Niw4IEBAIGlnYl9jb25maWdf cnNzX2ZpbHRlcihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gIAlodyA9IEUxMDAwX0RFVl9Q UklWQVRFX1RPX0hXKGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGUpOw0KPiANCj4gIAlpZiAoIWFkZCkg ew0KPiAtCQlpZiAobWVtY21wKGNvbmYsICZmaWx0ZXJfaW5mby0+cnNzX2luZm8sDQo+IC0JCQlz aXplb2Yoc3RydWN0IGlnYl9ydGVfZmxvd19yc3NfY29uZikpID09IDApIHsNCj4gKwkJaWYgKGln Yl9hY3Rpb25fcnNzX3NhbWUoJmZpbHRlcl9pbmZvLT5yc3NfaW5mby5jb25mLA0KPiArCQkJCQkm Y29uZi0+Y29uZikpIHsNCj4gIAkJCWlnYl9yc3NfZGlzYWJsZShkZXYpOw0KPiAgCQkJbWVtc2V0 KCZmaWx0ZXJfaW5mby0+cnNzX2luZm8sIDAsDQo+ICAJCQkJc2l6ZW9mKHN0cnVjdCBpZ2JfcnRl X2Zsb3dfcnNzX2NvbmYpKTsNCj4gQEAgLTI5MjEsNyArMjk1Niw3IEBAIGlnYl9jb25maWdfcnNz X2ZpbHRlcihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+ ICAJfQ0KPiANCj4gLQlpZiAoZmlsdGVyX2luZm8tPnJzc19pbmZvLm51bSkNCj4gKwlpZiAoZmls dGVyX2luZm8tPnJzc19pbmZvLmNvbmYucXVldWVfbnVtKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsN Cj4gDQo+ICAJLyogRmlsbCBpbiByZWRpcmVjdGlvbiB0YWJsZS4gKi8NCj4gQEAgLTI5MzMsOSAr Mjk2OCw5IEBAIGlnYl9jb25maWdfcnNzX2ZpbHRlcihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwN Cj4gIAkJfSByZXRhOw0KPiAgCQl1aW50OF90IHFfaWR4Ow0KPiANCj4gLQkJaWYgKGogPT0gY29u Zi0+bnVtKQ0KPiArCQlpZiAoaiA9PSBjb25mLT5jb25mLnF1ZXVlX251bSkNCj4gIAkJCWogPSAw Ow0KPiAtCQlxX2lkeCA9IGNvbmYtPnF1ZXVlW2pdOw0KPiArCQlxX2lkeCA9IGNvbmYtPmNvbmYu cXVldWVbal07DQo+ICAJCXJldGEuYnl0ZXNbaSAmIDNdID0gKHVpbnQ4X3QpKHFfaWR4IDw8IHNo aWZ0KTsNCj4gIAkJaWYgKChpICYgMykgPT0gMykNCj4gIAkJCUUxMDAwX1dSSVRFX1JFRyhodywg RTEwMDBfUkVUQShpID4+IDIpLA0KPiByZXRhLmR3b3JkKTsNCj4gQEAgLTI5NTIsOCArMjk4Nyw4 IEBAIGlnYl9jb25maWdfcnNzX2ZpbHRlcihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gIAkJ cnNzX2NvbmYucnNzX2tleSA9IHJzc19pbnRlbF9rZXk7IC8qIERlZmF1bHQgaGFzaCBrZXkgKi8N Cj4gIAlpZ2JfaHdfcnNzX2hhc2hfc2V0KGh3LCAmcnNzX2NvbmYpOw0KPiANCj4gLQlydGVfbWVt Y3B5KCZmaWx0ZXJfaW5mby0+cnNzX2luZm8sDQo+IC0JCWNvbmYsIHNpemVvZihzdHJ1Y3QgaWdi X3J0ZV9mbG93X3Jzc19jb25mKSk7DQo+ICsJaWYgKGlnYl9yc3NfY29uZl9pbml0KCZmaWx0ZXJf aW5mby0+cnNzX2luZm8sICZjb25mLT5jb25mKSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+IA0K PiAgCXJldHVybiAwOw0KPiAgfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaTQwZS9pNDBl X2V0aGRldi5jIGIvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5jDQo+IGluZGV4IDc4ZjJi ZTdkYS4uNTBlNzc5MDFjIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRo ZGV2LmMNCj4gKysrIGIvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5jDQo+IEBAIC0xMSw2 ICsxMSw3IEBADQo+ICAjaW5jbHVkZSA8aW50dHlwZXMuaD4NCj4gICNpbmNsdWRlIDxhc3NlcnQu aD4NCj4gDQo+ICsjaW5jbHVkZSA8cnRlX2NvbW1vbi5oPg0KPiAgI2luY2x1ZGUgPHJ0ZV9lYWwu aD4NCj4gICNpbmNsdWRlIDxydGVfc3RyaW5nX2Zucy5oPg0KPiAgI2luY2x1ZGUgPHJ0ZV9wY2ku aD4NCj4gQEAgLTExNjUwLDcgKzExNjUxLDcgQEAgaTQwZV9yc3NfZmlsdGVyX3Jlc3RvcmUoc3Ry dWN0IGk0MGVfcGYgKnBmKQ0KPiAgew0KPiAgCXN0cnVjdCBpNDBlX3J0ZV9mbG93X3Jzc19jb25m ICpjb25mID0NCj4gIAkJCQkJJnBmLT5yc3NfaW5mbzsNCj4gLQlpZiAoY29uZi0+bnVtKQ0KPiAr CWlmIChjb25mLT5jb25mLnF1ZXVlX251bSkNCj4gIAkJaTQwZV9jb25maWdfcnNzX2ZpbHRlcihw ZiwgY29uZiwgVFJVRSk7DQo+ICB9DQo+IA0KPiBAQCAtMTIxODIsMTggKzEyMTgzLDUyIEBAIGk0 MGVfY2xvdWRfZmlsdGVyX3FpbnFfY3JlYXRlKHN0cnVjdCBpNDBlX3BmDQo+ICpwZikNCj4gIH0N Cj4gDQo+ICBpbnQNCj4gK2k0MGVfcnNzX2NvbmZfaW5pdChzdHJ1Y3QgaTQwZV9ydGVfZmxvd19y c3NfY29uZiAqb3V0LA0KPiArCQkgICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAq aW4pDQo+ICt7DQo+ICsJaWYgKGluLT5rZXlfbGVuID4gUlRFX0RJTShvdXQtPmtleSkgfHwNCj4g KwkgICAgaW4tPnF1ZXVlX251bSA+IFJURV9ESU0ob3V0LT5xdWV1ZSkpDQo+ICsJCXJldHVybiAt RUlOVkFMOw0KPiArCW91dC0+Y29uZiA9IChzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3Jzcyl7DQo+ ICsJCS50eXBlcyA9IGluLT50eXBlcywNCj4gKwkJLmtleV9sZW4gPSBpbi0+a2V5X2xlbiwNCj4g KwkJLnF1ZXVlX251bSA9IGluLT5xdWV1ZV9udW0sDQo+ICsJCS5rZXkgPSBtZW1jcHkob3V0LT5r ZXksIGluLT5rZXksIGluLT5rZXlfbGVuKSwNCj4gKwkJLnF1ZXVlID0gbWVtY3B5KG91dC0+cXVl dWUsIGluLT5xdWV1ZSwNCj4gKwkJCQlzaXplb2YoKmluLT5xdWV1ZSkgKiBpbi0+cXVldWVfbnVt KSwNCj4gKwl9Ow0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtpbnQNCj4gK2k0MGVfYWN0 aW9uX3Jzc19zYW1lKGNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzICpjb21wLA0KPiAr CQkgICAgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzICp3aXRoKQ0KPiArew0KPiAr CXJldHVybiAoY29tcC0+dHlwZXMgPT0gd2l0aC0+dHlwZXMgJiYNCj4gKwkJY29tcC0+a2V5X2xl biA9PSB3aXRoLT5rZXlfbGVuICYmDQo+ICsJCWNvbXAtPnF1ZXVlX251bSA9PSB3aXRoLT5xdWV1 ZV9udW0gJiYNCj4gKwkJIW1lbWNtcChjb21wLT5rZXksIHdpdGgtPmtleSwgd2l0aC0+a2V5X2xl bikgJiYNCj4gKwkJIW1lbWNtcChjb21wLT5xdWV1ZSwgd2l0aC0+cXVldWUsDQo+ICsJCQlzaXpl b2YoKndpdGgtPnF1ZXVlKSAqIHdpdGgtPnF1ZXVlX251bSkpOw0KPiArfQ0KPiArDQo+ICtpbnQN Cj4gIGk0MGVfY29uZmlnX3Jzc19maWx0ZXIoc3RydWN0IGk0MGVfcGYgKnBmLA0KPiAgCQlzdHJ1 Y3QgaTQwZV9ydGVfZmxvd19yc3NfY29uZiAqY29uZiwgYm9vbCBhZGQpDQo+ICB7DQo+ICAJc3Ry dWN0IGk0MGVfaHcgKmh3ID0gSTQwRV9QRl9UT19IVyhwZik7DQo+ICAJdWludDMyX3QgaSwgbHV0 ID0gMDsNCj4gIAl1aW50MTZfdCBqLCBudW07DQo+IC0Jc3RydWN0IHJ0ZV9ldGhfcnNzX2NvbmYg cnNzX2NvbmYgPSBjb25mLT5yc3NfY29uZjsNCj4gKwlzdHJ1Y3QgcnRlX2V0aF9yc3NfY29uZiBy c3NfY29uZiA9IHsNCj4gKwkJLnJzc19rZXkgPSBjb25mLT5jb25mLmtleV9sZW4gPw0KPiArCQkJ KHZvaWQgKikodWludHB0cl90KWNvbmYtPmNvbmYua2V5IDogTlVMTCwNCj4gKwkJLnJzc19rZXlf bGVuID0gY29uZi0+Y29uZi5rZXlfbGVuLA0KPiArCQkucnNzX2hmID0gY29uZi0+Y29uZi50eXBl cywNCj4gKwl9Ow0KPiAgCXN0cnVjdCBpNDBlX3J0ZV9mbG93X3Jzc19jb25mICpyc3NfaW5mbyA9 ICZwZi0+cnNzX2luZm87DQo+IA0KPiAgCWlmICghYWRkKSB7DQo+IC0JCWlmIChtZW1jbXAoY29u ZiwgcnNzX2luZm8sDQo+IC0JCQlzaXplb2Yoc3RydWN0IGk0MGVfcnRlX2Zsb3dfcnNzX2NvbmYp KSA9PSAwKSB7DQo+ICsJCWlmIChpNDBlX2FjdGlvbl9yc3Nfc2FtZSgmcnNzX2luZm8tPmNvbmYs ICZjb25mLT5jb25mKSkgew0KPiAgCQkJaTQwZV9wZl9kaXNhYmxlX3JzcyhwZik7DQo+ICAJCQlt ZW1zZXQocnNzX2luZm8sIDAsDQo+ICAJCQkJc2l6ZW9mKHN0cnVjdCBpNDBlX3J0ZV9mbG93X3Jz c19jb25mKSk7DQo+IEBAIC0xMjIwMiw3ICsxMjIzNyw3IEBAIGk0MGVfY29uZmlnX3Jzc19maWx0 ZXIoc3RydWN0IGk0MGVfcGYgKnBmLA0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gIAl9DQo+IA0K PiAtCWlmIChyc3NfaW5mby0+bnVtKQ0KPiArCWlmIChyc3NfaW5mby0+Y29uZi5xdWV1ZV9udW0p DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAkvKiBJZiBib3RoIFZNRFEgYW5kIFJTUyBl bmFibGVkLCBub3QgYWxsIG9mIFBGIHF1ZXVlcyBhcmUNCj4gY29uZmlndXJlZC4NCj4gQEAgLTEy MjEzLDcgKzEyMjQ4LDcgQEAgaTQwZV9jb25maWdfcnNzX2ZpbHRlcihzdHJ1Y3QgaTQwZV9wZiAq cGYsDQo+ICAJZWxzZQ0KPiAgCQludW0gPSBwZi0+ZGV2X2RhdGEtPm5iX3J4X3F1ZXVlczsNCj4g DQo+IC0JbnVtID0gUlRFX01JTihudW0sIGNvbmYtPm51bSk7DQo+ICsJbnVtID0gUlRFX01JTihu dW0sIGNvbmYtPmNvbmYucXVldWVfbnVtKTsNCj4gIAlQTURfRFJWX0xPRyhJTkZPLCAiTWF4IG9m IGNvbnRpZ3VvdXMgJXUgUEYgcXVldWVzIGFyZQ0KPiBjb25maWd1cmVkIiwNCj4gIAkJCW51bSk7 DQo+IA0KPiBAQCAtMTIyMjYsNyArMTIyNjEsNyBAQCBpNDBlX2NvbmZpZ19yc3NfZmlsdGVyKHN0 cnVjdCBpNDBlX3BmICpwZiwNCj4gIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGh3LT5mdW5jX2Nh cHMucnNzX3RhYmxlX3NpemU7IGkrKywgaisrKSB7DQo+ICAJCWlmIChqID09IG51bSkNCj4gIAkJ CWogPSAwOw0KPiAtCQlsdXQgPSAobHV0IDw8IDgpIHwgKGNvbmYtPnF1ZXVlW2pdICYgKCgweDEg PDwNCj4gKwkJbHV0ID0gKGx1dCA8PCA4KSB8IChjb25mLT5jb25mLnF1ZXVlW2pdICYgKCgweDEg PDwNCj4gIAkJCWh3LT5mdW5jX2NhcHMucnNzX3RhYmxlX2VudHJ5X3dpZHRoKSAtIDEpKTsNCj4g IAkJaWYgKChpICYgMykgPT0gMykNCj4gIAkJCUk0MEVfV1JJVEVfUkVHKGh3LCBJNDBFX1BGUUZf SExVVChpID4+IDIpLCBsdXQpOw0KPiBAQCAtMTIyNTEsOCArMTIyODYsOCBAQCBpNDBlX2NvbmZp Z19yc3NfZmlsdGVyKHN0cnVjdCBpNDBlX3BmICpwZiwNCj4gDQo+ICAJaTQwZV9od19yc3NfaGFz aF9zZXQocGYsICZyc3NfY29uZik7DQo+IA0KPiAtCXJ0ZV9tZW1jcHkocnNzX2luZm8sDQo+IC0J CWNvbmYsIHNpemVvZihzdHJ1Y3QgaTQwZV9ydGVfZmxvd19yc3NfY29uZikpOw0KPiArCWlmIChp NDBlX3Jzc19jb25mX2luaXQocnNzX2luZm8sICZjb25mLT5jb25mKSkNCj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+IA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvaTQwZS9pNDBlX2V0aGRldi5oDQo+IGIvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5o DQo+IGluZGV4IGQzM2IyNTVlNy4uYTA1NjlkNGFlIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25l dC9pNDBlL2k0MGVfZXRoZGV2LmgNCj4gKysrIGIvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRl di5oDQo+IEBAIC01LDE0ICs1LDE5IEBADQo+ICAjaWZuZGVmIF9JNDBFX0VUSERFVl9IXw0KPiAg I2RlZmluZSBfSTQwRV9FVEhERVZfSF8NCj4gDQo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ICsN Cj4gICNpbmNsdWRlIDxydGVfZXRoX2N0cmwuaD4NCj4gICNpbmNsdWRlIDxydGVfdGltZS5oPg0K PiAgI2luY2x1ZGUgPHJ0ZV9rdmFyZ3MuaD4NCj4gICNpbmNsdWRlIDxydGVfaGFzaC5oPg0KPiAr I2luY2x1ZGUgPHJ0ZV9mbG93Lmg+DQo+ICAjaW5jbHVkZSA8cnRlX2Zsb3dfZHJpdmVyLmg+DQo+ ICAjaW5jbHVkZSA8cnRlX3RtX2RyaXZlci5oPg0KPiAgI2luY2x1ZGUgInJ0ZV9wbWRfaTQwZS5o Ig0KPiANCj4gKyNpbmNsdWRlICJiYXNlL2k0MGVfcmVnaXN0ZXIuaCINCj4gKw0KPiAgI2RlZmlu ZSBJNDBFX1ZMQU5fVEFHX1NJWkUgICAgICAgIDQNCj4gDQo+ICAjZGVmaW5lIEk0MEVfQVFfTEVO ICAgICAgICAgICAgICAgMzINCj4gQEAgLTg3OCw5ICs4ODMsMTEgQEAgc3RydWN0IGk0MGVfY3Vz dG9taXplZF9wY3R5cGUgew0KPiAgfTsNCj4gDQo+ICBzdHJ1Y3QgaTQwZV9ydGVfZmxvd19yc3Nf Y29uZiB7DQo+IC0Jc3RydWN0IHJ0ZV9ldGhfcnNzX2NvbmYgcnNzX2NvbmY7IC8qKjwgUlNTIHBh cmFtZXRlcnMuICovDQo+ICsJc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgY29uZjsgLyoqPCBS U1MgcGFyYW1ldGVycy4gKi8NCj4gIAl1aW50MTZfdCBxdWV1ZV9yZWdpb25fY29uZjsgLyoqPCBR dWV1ZSByZWdpb24gY29uZmlnIGZsYWcgKi8NCj4gLQl1aW50MTZfdCBudW07IC8qKjwgTnVtYmVy IG9mIGVudHJpZXMgaW4gcXVldWVbXS4gKi8NCj4gKwl1aW50OF90IGtleVsoSTQwRV9WRlFGX0hL RVlfTUFYX0lOREVYID4NCj4gSTQwRV9QRlFGX0hLRVlfTUFYX0lOREVYID8NCj4gKwkJICAgICBJ NDBFX1ZGUUZfSEtFWV9NQVhfSU5ERVggOg0KPiBJNDBFX1BGUUZfSEtFWV9NQVhfSU5ERVgpICsg MSAqDQo+ICsJCSAgICBzaXplb2YodWludDMyX3QpXTsgLyogSGFzaCBrZXkuICovDQo+ICAJdWlu dDE2X3QgcXVldWVbSTQwRV9NQVhfUV9QRVJfVENdOyAvKio8IFF1ZXVlcyBpbmRpY2VzIHRvIHVz ZS4NCj4gKi8NCj4gIH07DQo+IA0KPiBAQCAtMTIxOSw2ICsxMjI2LDEwIEBAIHZvaWQgaTQwZV9p bml0X3F1ZXVlX3JlZ2lvbl9jb25mKHN0cnVjdA0KPiBydGVfZXRoX2RldiAqZGV2KTsNCj4gIHZv aWQgaTQwZV9mbGV4X3BheWxvYWRfcmVnX3NldF9kZWZhdWx0KHN0cnVjdCBpNDBlX2h3ICpodyk7 DQo+ICBpbnQgaTQwZV9zZXRfcnNzX2tleShzdHJ1Y3QgaTQwZV92c2kgKnZzaSwgdWludDhfdCAq a2V5LCB1aW50OF90IGtleV9sZW4pOw0KPiAgaW50IGk0MGVfc2V0X3Jzc19sdXQoc3RydWN0IGk0 MGVfdnNpICp2c2ksIHVpbnQ4X3QgKmx1dCwgdWludDE2X3QgbHV0X3NpemUpOw0KPiAraW50IGk0 MGVfcnNzX2NvbmZfaW5pdChzdHJ1Y3QgaTQwZV9ydGVfZmxvd19yc3NfY29uZiAqb3V0LA0KPiAr CQkgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgKmluKTsNCj4gK2ludCBp NDBlX2FjdGlvbl9yc3Nfc2FtZShjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqY29t cCwNCj4gKwkJCSBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqd2l0aCk7DQo+ICBp bnQgaTQwZV9jb25maWdfcnNzX2ZpbHRlcihzdHJ1Y3QgaTQwZV9wZiAqcGYsDQo+ICAJCXN0cnVj dCBpNDBlX3J0ZV9mbG93X3Jzc19jb25mICpjb25mLCBib29sIGFkZCk7DQo+IA0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2Zsb3cuYyBiL2RyaXZlcnMvbmV0L2k0MGUvaTQw ZV9mbG93LmMNCj4gaW5kZXggZDZmNWU5OTIzLi5lYzYyMzEwMDMgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvbmV0L2k0MGUvaTQwZV9mbG93LmMNCj4gKysrIGIvZHJpdmVycy9uZXQvaTQwZS9pNDBl X2Zsb3cuYw0KPiBAQCAtNDIyMCw3ICs0MjIwLDcgQEAgaTQwZV9mbG93X3BhcnNlX3Jzc19hY3Rp b24oc3RydWN0IHJ0ZV9ldGhfZGV2DQo+ICpkZXYsDQo+IA0KPiAgCWlmIChhY3Rpb25fZmxhZykg ew0KPiAgCQlmb3IgKG4gPSAwOyBuIDwgNjQ7IG4rKykgew0KPiAtCQkJaWYgKHJzcy0+cnNzX2Nv bmYtPnJzc19oZiAmIChoZl9iaXQgPDwgbikpIHsNCj4gKwkJCWlmIChyc3MtPnR5cGVzICYgKGhm X2JpdCA8PCBuKSkgew0KPiAgCQkJCWNvbmZfaW5mby0+cmVnaW9uWzBdLmh3X2Zsb3d0eXBlWzBd ID0gbjsNCj4gIAkJCQljb25mX2luZm8tPnJlZ2lvblswXS5mbG93dHlwZV9udW0gPSAxOw0KPiAg CQkJCWNvbmZfaW5mby0+cXVldWVfcmVnaW9uX251bWJlciA9IDE7DQo+IEBAIC00MjM2LDEyICs0 MjM2LDEyIEBAIGk0MGVfZmxvd19wYXJzZV9yc3NfYWN0aW9uKHN0cnVjdCBydGVfZXRoX2Rldg0K PiAqZGV2LA0KPiAgCSAqIHF1ZXVlIGluZGV4IGZvciB0aGlzIHBvcnQuDQo+ICAJICovDQo+ICAJ aWYgKGNvbmZfaW5mby0+cXVldWVfcmVnaW9uX251bWJlcikgew0KPiAtCQlmb3IgKGkgPSAwOyBp IDwgcnNzLT5udW07IGkrKykgew0KPiAtCQkJZm9yIChqID0gMDsgaiA8IHJzc19pbmZvLT5udW07 IGorKykgew0KPiAtCQkJCWlmIChyc3MtPnF1ZXVlW2ldID09IHJzc19pbmZvLT5xdWV1ZVtqXSkN Cj4gKwkJZm9yIChpID0gMDsgaSA8IHJzcy0+cXVldWVfbnVtOyBpKyspIHsNCj4gKwkJCWZvciAo aiA9IDA7IGogPCByc3NfaW5mby0+Y29uZi5xdWV1ZV9udW07IGorKykgew0KPiArCQkJCWlmIChy c3MtPnF1ZXVlW2ldID09IHJzc19pbmZvLT5jb25mLnF1ZXVlW2pdKQ0KPiAgCQkJCQlicmVhazsN Cj4gIAkJCX0NCj4gLQkJCWlmIChqID09IHJzc19pbmZvLT5udW0pIHsNCj4gKwkJCWlmIChqID09 IHJzc19pbmZvLT5jb25mLnF1ZXVlX251bSkgew0KPiAgCQkJCXJ0ZV9mbG93X2Vycm9yX3NldChl cnJvciwgRUlOVkFMLA0KPiAgCQkJCQlSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwNCj4gIAkJ CQkJYWN0LA0KPiBAQCAtNDI1MCw3ICs0MjUwLDcgQEAgaTQwZV9mbG93X3BhcnNlX3Jzc19hY3Rp b24oc3RydWN0IHJ0ZV9ldGhfZGV2DQo+ICpkZXYsDQo+ICAJCQl9DQo+ICAJCX0NCj4gDQo+IC0J CWZvciAoaSA9IDA7IGkgPCByc3MtPm51bSAtIDE7IGkrKykgew0KPiArCQlmb3IgKGkgPSAwOyBp IDwgcnNzLT5xdWV1ZV9udW0gLSAxOyBpKyspIHsNCj4gIAkJCWlmIChyc3MtPnF1ZXVlW2kgKyAx XSAhPSByc3MtPnF1ZXVlW2ldICsgMSkgew0KPiAgCQkJCXJ0ZV9mbG93X2Vycm9yX3NldChlcnJv ciwgRUlOVkFMLA0KPiAgCQkJCQlSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwNCj4gQEAgLTQy NjUsOCArNDI2NSw4IEBAIGk0MGVfZmxvd19wYXJzZV9yc3NfYWN0aW9uKHN0cnVjdCBydGVfZXRo X2Rldg0KPiAqZGV2LA0KPiAgCWZvciAobiA9IDA7IG4gPCBjb25mX2luZm8tPnF1ZXVlX3JlZ2lv bl9udW1iZXI7IG4rKykgew0KPiAgCQlpZiAoY29uZl9pbmZvLT5yZWdpb25bbl0udXNlcl9wcmlv cml0eV9udW0gfHwNCj4gIAkJCQljb25mX2luZm8tPnJlZ2lvbltuXS5mbG93dHlwZV9udW0pIHsN Cj4gLQkJCWlmICghKChydGVfaXNfcG93ZXJfb2ZfMihyc3MtPm51bSkpICYmDQo+IC0JCQkJCXJz cy0+bnVtIDw9IDY0KSkgew0KPiArCQkJaWYgKCEoKHJ0ZV9pc19wb3dlcl9vZl8yKHJzcy0+cXVl dWVfbnVtKSkgJiYNCj4gKwkJCQkJcnNzLT5xdWV1ZV9udW0gPD0gNjQpKSB7DQo+ICAJCQkJcnRl X2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFSU5WQUwsDQo+ICAJCQkJCVJURV9GTE9XX0VSUk9SX1RZ UEVfQUNUSU9OLA0KPiAgCQkJCQlhY3QsDQo+IEBAIC00Mjk0LDcgKzQyOTQsOCBAQCBpNDBlX2Zs b3dfcGFyc2VfcnNzX2FjdGlvbihzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4gKmRldiwNCj4gIAkJCX0N Cj4gDQo+ICAJCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9uX251bWJlcjsgaSsr KSB7DQo+IC0JCQkJaWYgKGluZm8tPnJlZ2lvbltpXS5xdWV1ZV9udW0gPT0gcnNzLT5udW0NCj4g JiYNCj4gKwkJCQlpZiAoaW5mby0+cmVnaW9uW2ldLnF1ZXVlX251bSA9PQ0KPiArCQkJCSAgICBy c3MtPnF1ZXVlX251bSAmJg0KPiAgCQkJCQlpbmZvLT5yZWdpb25baV0ucXVldWVfc3RhcnRfaW5k ZXggPT0NCj4gIAkJCQkJCXJzcy0+cXVldWVbMF0pDQo+ICAJCQkJCWJyZWFrOw0KPiBAQCAtNDMx MCw3ICs0MzExLDcgQEAgaTQwZV9mbG93X3BhcnNlX3Jzc19hY3Rpb24oc3RydWN0IHJ0ZV9ldGhf ZGV2DQo+ICpkZXYsDQo+ICAJCQkJfQ0KPiANCj4gIAkJCQlpbmZvLT5yZWdpb25baV0ucXVldWVf bnVtID0NCj4gLQkJCQkJcnNzLT5udW07DQo+ICsJCQkJCXJzcy0+cXVldWVfbnVtOw0KPiAgCQkJ CWluZm8tPnJlZ2lvbltpXS5xdWV1ZV9zdGFydF9pbmRleCA9DQo+ICAJCQkJCXJzcy0+cXVldWVb MF07DQo+ICAJCQkJaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZCA9DQo+IEBAIC00MzU2LDcgKzQz NTcsNyBAQCBpNDBlX2Zsb3dfcGFyc2VfcnNzX2FjdGlvbihzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4g KmRldiwNCj4gIAlpZiAocnNzX2NvbmZpZy0+cXVldWVfcmVnaW9uX2NvbmYpDQo+ICAJCXJldHVy biAwOw0KPiANCj4gLQlpZiAoIXJzcyB8fCAhcnNzLT5udW0pIHsNCj4gKwlpZiAoIXJzcyB8fCAh cnNzLT5xdWV1ZV9udW0pIHsNCj4gIAkJcnRlX2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFSU5WQUws DQo+ICAJCQkJUlRFX0ZMT1dfRVJST1JfVFlQRV9BQ1RJT04sDQo+ICAJCQkJYWN0LA0KPiBAQCAt NDM2NCw3ICs0MzY1LDcgQEAgaTQwZV9mbG93X3BhcnNlX3Jzc19hY3Rpb24oc3RydWN0IHJ0ZV9l dGhfZGV2DQo+ICpkZXYsDQo+ICAJCXJldHVybiAtcnRlX2Vycm5vOw0KPiAgCX0NCj4gDQo+IC0J Zm9yIChuID0gMDsgbiA8IHJzcy0+bnVtOyBuKyspIHsNCj4gKwlmb3IgKG4gPSAwOyBuIDwgcnNz LT5xdWV1ZV9udW07IG4rKykgew0KPiAgCQlpZiAocnNzLT5xdWV1ZVtuXSA+PSBkZXYtPmRhdGEt Pm5iX3J4X3F1ZXVlcykgew0KPiAgCQkJcnRlX2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFSU5WQUws DQo+ICAJCQkJICAgUlRFX0ZMT1dfRVJST1JfVFlQRV9BQ1RJT04sDQo+IEBAIC00Mzc1LDE1ICs0 Mzc2LDE5IEBAIGk0MGVfZmxvd19wYXJzZV9yc3NfYWN0aW9uKHN0cnVjdCBydGVfZXRoX2Rldg0K PiAqZGV2LA0KPiAgCX0NCj4gDQo+ICAJLyogUGFyc2UgUlNTIHJlbGF0ZWQgcGFyYW1ldGVycyBm cm9tIGNvbmZpZ3VyYXRpb24gKi8NCj4gLQlpZiAocnNzLT5yc3NfY29uZikNCj4gLQkJcnNzX2Nv bmZpZy0+cnNzX2NvbmYgPSAqcnNzLT5yc3NfY29uZjsNCj4gLQllbHNlDQo+IC0JCXJzc19jb25m aWctPnJzc19jb25mLnJzc19oZiA9DQo+IC0JCQlwZi0+YWRhcHRlci0+Zmxvd190eXBlc19tYXNr Ow0KPiArCWlmIChyc3MtPmtleV9sZW4gJiYgcnNzLT5rZXlfbGVuID4gUlRFX0RJTShyc3NfY29u ZmlnLT5rZXkpKQ0KPiArCQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0DQo+ICsJCQkoZXJyb3Is IEVOT1RTVVAsIFJURV9GTE9XX0VSUk9SX1RZUEVfQUNUSU9OLA0KPiBhY3QsDQo+ICsJCQkgIlJT UyBoYXNoIGtleSB0b28gbGFyZ2UiKTsNCj4gKwlpZiAocnNzLT5xdWV1ZV9udW0gPiBSVEVfRElN KHJzc19jb25maWctPnF1ZXVlKSkNCj4gKwkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldA0KPiAr CQkJKGVycm9yLCBFTk9UU1VQLCBSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwNCj4gYWN0LA0K PiArCQkJICJ0b28gbWFueSBxdWV1ZXMgZm9yIFJTUyBjb250ZXh0Iik7DQo+ICsJaWYgKGk0MGVf cnNzX2NvbmZfaW5pdChyc3NfY29uZmlnLCByc3MpKQ0KPiArCQlyZXR1cm4gcnRlX2Zsb3dfZXJy b3Jfc2V0DQo+ICsJCQkoZXJyb3IsIEVJTlZBTCwgUlRFX0ZMT1dfRVJST1JfVFlQRV9BQ1RJT04s DQo+IGFjdCwNCj4gKwkJCSAiUlNTIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbHVyZSIpOw0K PiANCj4gLQlmb3IgKG4gPSAwOyBuIDwgcnNzLT5udW07ICsrbikNCj4gLQkJcnNzX2NvbmZpZy0+ cXVldWVbbl0gPSByc3MtPnF1ZXVlW25dOw0KPiAtCXJzc19jb25maWctPm51bSA9IHJzcy0+bnVt Ow0KPiAgCWluZGV4Kys7DQo+IA0KPiAgCS8qIGNoZWNrIGlmIHRoZSBuZXh0IG5vdCB2b2lkIGFj dGlvbiBpcyBFTkQgKi8NCj4gQEAgLTQ5MDMsNyArNDkwOCw3IEBAIGk0MGVfZmxvd19mbHVzaF9y c3NfZmlsdGVyKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KQ0KPiANCj4gIAlyZXQgPSBpNDBlX2Zs dXNoX3F1ZXVlX3JlZ2lvbl9hbGxfY29uZihkZXYsIGh3LCBwZiwgMCk7DQo+IA0KPiAtCWlmIChy c3NfaW5mby0+bnVtKQ0KPiArCWlmIChyc3NfaW5mby0+Y29uZi5xdWV1ZV9udW0pDQo+ICAJCXJl dCA9IGk0MGVfY29uZmlnX3Jzc19maWx0ZXIocGYsIHJzc19pbmZvLCBGQUxTRSk7DQo+ICAJcmV0 dXJuIHJldDsNCj4gIH0NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0 aGRldi5jDQo+IGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRoZGV2LmMNCj4gaW5kZXggOTI0 MzQ4MDljLi5jMDBiZGFlM2QgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2Jl X2V0aGRldi5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aGRldi5jDQo+IEBA IC0xMDAsOCArMTAwLDYgQEANCj4gDQo+ICAjZGVmaW5lIElYR0JFX1FVRVVFX1NUQVRfQ09VTlRF UlMgKHNpemVvZihod19zdGF0cy0+cXByYykgLw0KPiBzaXplb2YoaHdfc3RhdHMtPnFwcmNbMF0p KQ0KPiANCj4gLSNkZWZpbmUgSVhHQkVfSEtFWV9NQVhfSU5ERVggMTANCj4gLQ0KPiAgLyogQWRk aXRpb25hbCB0aW1lc3luYyB2YWx1ZXMuICovDQo+ICAjZGVmaW5lIE5TRUNfUEVSX1NFQyAgICAg ICAgICAgICAxMDAwMDAwMDAwTA0KPiAgI2RlZmluZSBJWEdCRV9JTkNWQUxfMTBHQiAgICAgICAg MHg2NjY2NjY2Ng0KPiBAQCAtODM3MSw3ICs4MzY5LDcgQEAgaXhnYmVfcnNzX2ZpbHRlcl9yZXN0 b3JlKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KQ0KPiAgCXN0cnVjdCBpeGdiZV9maWx0ZXJfaW5m byAqZmlsdGVyX2luZm8gPQ0KPiAgCQlJWEdCRV9ERVZfUFJJVkFURV9UT19GSUxURVJfSU5GTyhk ZXYtPmRhdGEtDQo+ID5kZXZfcHJpdmF0ZSk7DQo+IA0KPiAtCWlmIChmaWx0ZXJfaW5mby0+cnNz X2luZm8ubnVtKQ0KPiArCWlmIChmaWx0ZXJfaW5mby0+cnNzX2luZm8uY29uZi5xdWV1ZV9udW0p DQo+ICAJCWl4Z2JlX2NvbmZpZ19yc3NfZmlsdGVyKGRldiwNCj4gIAkJCSZmaWx0ZXJfaW5mby0+ cnNzX2luZm8sIFRSVUUpOw0KPiAgfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUv aXhnYmVfZXRoZGV2LmgNCj4gYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGhkZXYuaA0KPiBp bmRleCA2NTUwNzc3MDAuLjk0OTFiMDNmNCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvaXhn YmUvaXhnYmVfZXRoZGV2LmgNCj4gKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRoZGV2 LmgNCj4gQEAgLTQsNiArNCw5IEBADQo+IA0KPiAgI2lmbmRlZiBfSVhHQkVfRVRIREVWX0hfDQo+ ICAjZGVmaW5lIF9JWEdCRV9FVEhERVZfSF8NCj4gKw0KPiArI2luY2x1ZGUgPHN0ZGludC5oPg0K PiArDQo+ICAjaW5jbHVkZSAiYmFzZS9peGdiZV90eXBlLmgiDQo+ICAjaW5jbHVkZSAiYmFzZS9p eGdiZV9kY2IuaCINCj4gICNpbmNsdWRlICJiYXNlL2l4Z2JlX2RjYl84MjU5OS5oIg0KPiBAQCAt MTIsNiArMTUsNyBAQA0KPiAgI2lmZGVmIFJURV9MSUJSVEVfU0VDVVJJVFkNCj4gICNpbmNsdWRl ICJpeGdiZV9pcHNlYy5oIg0KPiAgI2VuZGlmDQo+ICsjaW5jbHVkZSA8cnRlX2Zsb3cuaD4NCj4g ICNpbmNsdWRlIDxydGVfdGltZS5oPg0KPiAgI2luY2x1ZGUgPHJ0ZV9oYXNoLmg+DQo+ICAjaW5j bHVkZSA8cnRlX3BjaS5oPg0KPiBAQCAtMzksNiArNDMsNyBAQA0KPiAgI2RlZmluZSBJWEdCRV9F WFRFTkRFRF9WTEFOCSAgKHVpbnQzMl90KSgxIDw8IDI2KSAvKiBFWFRFTkRFRA0KPiBWTEFOIEVO QUJMRSAqLw0KPiAgI2RlZmluZSBJWEdCRV9WRlRBX1NJWkUgMTI4DQo+ICAjZGVmaW5lIElYR0JF X1ZMQU5fVEFHX1NJWkUgNA0KPiArI2RlZmluZSBJWEdCRV9IS0VZX01BWF9JTkRFWCAxMA0KPiAg I2RlZmluZSBJWEdCRV9NQVhfUlhfUVVFVUVfTlVNCTEyOA0KPiAgI2RlZmluZSBJWEdCRV9NQVhf SU5UUl9RVUVVRV9OVU0JMTUNCj4gICNkZWZpbmUgSVhHQkVfVk1EUV9EQ0JfTkJfUVVFVUVTICAg ICBJWEdCRV9NQVhfUlhfUVVFVUVfTlVNDQo+IEBAIC0xOTYsOCArMjAxLDggQEAgc3RydWN0IGl4 Z2JlX2h3X2ZkaXJfaW5mbyB7DQo+ICB9Ow0KPiANCj4gIHN0cnVjdCBpeGdiZV9ydGVfZmxvd19y c3NfY29uZiB7DQo+IC0Jc3RydWN0IHJ0ZV9ldGhfcnNzX2NvbmYgcnNzX2NvbmY7IC8qKjwgUlNT IHBhcmFtZXRlcnMuICovDQo+IC0JdWludDE2X3QgbnVtOyAvKio8IE51bWJlciBvZiBlbnRyaWVz IGluIHF1ZXVlW10uICovDQo+ICsJc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgY29uZjsgLyoq PCBSU1MgcGFyYW1ldGVycy4gKi8NCj4gKwl1aW50OF90IGtleVtJWEdCRV9IS0VZX01BWF9JTkRF WCAqIHNpemVvZih1aW50MzJfdCldOyAvKiBIYXNoDQo+IGtleS4gKi8NCj4gIAl1aW50MTZfdCBx dWV1ZVtJWEdCRV9NQVhfUlhfUVVFVUVfTlVNXTsgLyoqPCBRdWV1ZXMNCj4gaW5kaWNlcyB0byB1 c2UuICovDQo+ICB9Ow0KPiANCj4gQEAgLTY5Niw2ICs3MDEsMTAgQEAgdm9pZCBpeGdiZV90bV9j b25mX2luaXQoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpOw0KPiAgdm9pZCBpeGdiZV90bV9jb25m X3VuaW5pdChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldik7DQo+ICBpbnQgaXhnYmVfc2V0X3F1ZXVl X3JhdGVfbGltaXQoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsIHVpbnQxNl90DQo+IHF1ZXVlX2lk eCwNCj4gIAkJCSAgICAgICB1aW50MTZfdCB0eF9yYXRlKTsNCj4gK2ludCBpeGdiZV9yc3NfY29u Zl9pbml0KHN0cnVjdCBpeGdiZV9ydGVfZmxvd19yc3NfY29uZiAqb3V0LA0KPiArCQkJY29uc3Qg c3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgKmluKTsNCj4gK2ludCBpeGdiZV9hY3Rpb25fcnNz X3NhbWUoY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgKmNvbXAsDQo+ICsJCQkgIGNv bnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzICp3aXRoKTsNCj4gIGludCBpeGdiZV9jb25m aWdfcnNzX2ZpbHRlcihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gIAkJc3RydWN0IGl4Z2Jl X3J0ZV9mbG93X3Jzc19jb25mICpjb25mLCBib29sIGFkZCk7DQo+IA0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmxvdy5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVf Zmxvdy5jDQo+IGluZGV4IGFiZGVhYzI4Yi4uNGUzMWM3YzU2IDEwMDY0NA0KPiAtLS0gYS9kcml2 ZXJzL25ldC9peGdiZS9peGdiZV9mbG93LmMNCj4gKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhn YmVfZmxvdy5jDQo+IEBAIC0yNzYxLDcgKzI3NjEsNyBAQCBpeGdiZV9wYXJzZV9yc3NfZmlsdGVy KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiANCj4gIAlyc3MgPSAoY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2FjdGlvbl9yc3MgKilhY3QtPmNvbmY7DQo+IA0KPiAtCWlmICghcnNzIHx8ICFyc3Mt Pm51bSkgew0KPiArCWlmICghcnNzIHx8ICFyc3MtPnF1ZXVlX251bSkgew0KPiAgCQlydGVfZmxv d19lcnJvcl9zZXQoZXJyb3IsIEVJTlZBTCwNCj4gIAkJCQlSVEVfRkxPV19FUlJPUl9UWVBFX0FD VElPTiwNCj4gIAkJCQlhY3QsDQo+IEBAIC0yNzY5LDcgKzI3NjksNyBAQCBpeGdiZV9wYXJzZV9y c3NfZmlsdGVyKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAgCQlyZXR1cm4gLXJ0ZV9lcnJu bzsNCj4gIAl9DQo+IA0KPiAtCWZvciAobiA9IDA7IG4gPCByc3MtPm51bTsgbisrKSB7DQo+ICsJ Zm9yIChuID0gMDsgbiA8IHJzcy0+cXVldWVfbnVtOyBuKyspIHsNCj4gIAkJaWYgKHJzcy0+cXVl dWVbbl0gPj0gZGV2LT5kYXRhLT5uYl9yeF9xdWV1ZXMpIHsNCj4gIAkJCXJ0ZV9mbG93X2Vycm9y X3NldChlcnJvciwgRUlOVkFMLA0KPiAgCQkJCSAgIFJURV9GTE9XX0VSUk9SX1RZUEVfQUNUSU9O LA0KPiBAQCAtMjc3OCwxNCArMjc3OCwxOSBAQCBpeGdiZV9wYXJzZV9yc3NfZmlsdGVyKHN0cnVj dCBydGVfZXRoX2RldiAqZGV2LA0KPiAgCQkJcmV0dXJuIC1ydGVfZXJybm87DQo+ICAJCX0NCj4g IAl9DQo+IC0JaWYgKHJzcy0+cnNzX2NvbmYpDQo+IC0JCXJzc19jb25mLT5yc3NfY29uZiA9ICpy c3MtPnJzc19jb25mOw0KPiAtCWVsc2UNCj4gLQkJcnNzX2NvbmYtPnJzc19jb25mLnJzc19oZiA9 IElYR0JFX1JTU19PRkZMT0FEX0FMTDsNCj4gDQo+IC0JZm9yIChuID0gMDsgbiA8IHJzcy0+bnVt OyArK24pDQo+IC0JCXJzc19jb25mLT5xdWV1ZVtuXSA9IHJzcy0+cXVldWVbbl07DQo+IC0JcnNz X2NvbmYtPm51bSA9IHJzcy0+bnVtOw0KPiArCWlmIChyc3MtPmtleV9sZW4gJiYgcnNzLT5rZXlf bGVuICE9IFJURV9ESU0ocnNzX2NvbmYtPmtleSkpDQo+ICsJCXJldHVybiBydGVfZmxvd19lcnJv cl9zZXQNCj4gKwkJCShlcnJvciwgRU5PVFNVUCwgUlRFX0ZMT1dfRVJST1JfVFlQRV9BQ1RJT04s DQo+IGFjdCwNCj4gKwkJCSAiUlNTIGhhc2gga2V5IG11c3QgYmUgZXhhY3RseSA0MCBieXRlcyIp Ow0KPiArCWlmIChyc3MtPnF1ZXVlX251bSA+IFJURV9ESU0ocnNzX2NvbmYtPnF1ZXVlKSkNCj4g KwkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldA0KPiArCQkJKGVycm9yLCBFTk9UU1VQLCBSVEVf RkxPV19FUlJPUl9UWVBFX0FDVElPTiwNCj4gYWN0LA0KPiArCQkJICJ0b28gbWFueSBxdWV1ZXMg Zm9yIFJTUyBjb250ZXh0Iik7DQo+ICsJaWYgKGl4Z2JlX3Jzc19jb25mX2luaXQocnNzX2NvbmYs IHJzcykpDQo+ICsJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQNCj4gKwkJCShlcnJvciwgRUlO VkFMLCBSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwNCj4gYWN0LA0KPiArCQkJICJSU1MgY29u dGV4dCBpbml0aWFsaXphdGlvbiBmYWlsdXJlIik7DQo+IA0KPiAgCS8qIGNoZWNrIGlmIHRoZSBu ZXh0IG5vdCB2b2lkIGl0ZW0gaXMgRU5EICovDQo+ICAJYWN0ID0gbmV4dF9ub192b2lkX2FjdGlv bihhY3Rpb25zLCBhY3QpOw0KPiBAQCAtMjgzNCw3ICsyODM5LDcgQEAgaXhnYmVfY2xlYXJfcnNz X2ZpbHRlcihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikNCj4gIAlzdHJ1Y3QgaXhnYmVfZmlsdGVy X2luZm8gKmZpbHRlcl9pbmZvID0NCj4gIAkJSVhHQkVfREVWX1BSSVZBVEVfVE9fRklMVEVSX0lO Rk8oZGV2LT5kYXRhLQ0KPiA+ZGV2X3ByaXZhdGUpOw0KPiANCj4gLQlpZiAoZmlsdGVyX2luZm8t PnJzc19pbmZvLm51bSkNCj4gKwlpZiAoZmlsdGVyX2luZm8tPnJzc19pbmZvLmNvbmYucXVldWVf bnVtKQ0KPiAgCQlpeGdiZV9jb25maWdfcnNzX2ZpbHRlcihkZXYsICZmaWx0ZXJfaW5mby0+cnNz X2luZm8sIEZBTFNFKTsNCj4gIH0NCj4gDQo+IEBAIC0zMTUzLDkgKzMxNTgsOCBAQCBpeGdiZV9m bG93X2NyZWF0ZShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gIAkJCQlQTURfRFJWX0xPRyhF UlIsICJmYWlsZWQgdG8gYWxsb2NhdGUNCj4gbWVtb3J5Iik7DQo+ICAJCQkJZ290byBvdXQ7DQo+ ICAJCQl9DQo+IC0JCQlydGVfbWVtY3B5KCZyc3NfZmlsdGVyX3B0ci0+ZmlsdGVyX2luZm8sDQo+ IC0JCQkJJnJzc19jb25mLA0KPiAtCQkJCXNpemVvZihzdHJ1Y3QgaXhnYmVfcnRlX2Zsb3dfcnNz X2NvbmYpKTsNCj4gKwkJCWl4Z2JlX3Jzc19jb25mX2luaXQoJnJzc19maWx0ZXJfcHRyLT5maWx0 ZXJfaW5mbywNCj4gKwkJCQkJICAgICZyc3NfY29uZi5jb25mKTsNCj4gIAkJCVRBSUxRX0lOU0VS VF9UQUlMKCZmaWx0ZXJfcnNzX2xpc3QsDQo+ICAJCQkJcnNzX2ZpbHRlcl9wdHIsIGVudHJpZXMp Ow0KPiAgCQkJZmxvdy0+cnVsZSA9IHJzc19maWx0ZXJfcHRyOw0KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9uZXQvaXhnYmUvaXhnYmVfcnh0eC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcnh0 eC5jDQo+IGluZGV4IGFlZDNmNWE5YS4uOWZiZDdkYmQ3IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJz L25ldC9peGdiZS9peGdiZV9yeHR4LmMNCj4gKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVf cnh0eC5jDQo+IEBAIC01Njc2LDYgKzU2NzYsMzYgQEAgaXhnYmV2Zl9kZXZfcnh0eF9zdGFydChz dHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikNCj4gIH0NCj4gDQo+ICBpbnQNCj4gK2l4Z2JlX3Jzc19j b25mX2luaXQoc3RydWN0IGl4Z2JlX3J0ZV9mbG93X3Jzc19jb25mICpvdXQsDQo+ICsJCSAgICBj b25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqaW4pDQo+ICt7DQo+ICsJaWYgKGluLT5r ZXlfbGVuID4gUlRFX0RJTShvdXQtPmtleSkgfHwNCj4gKwkgICAgaW4tPnF1ZXVlX251bSA+IFJU RV9ESU0ob3V0LT5xdWV1ZSkpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCW91dC0+Y29uZiA9 IChzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3Jzcyl7DQo+ICsJCS50eXBlcyA9IGluLT50eXBlcywN Cj4gKwkJLmtleV9sZW4gPSBpbi0+a2V5X2xlbiwNCj4gKwkJLnF1ZXVlX251bSA9IGluLT5xdWV1 ZV9udW0sDQo+ICsJCS5rZXkgPSBtZW1jcHkob3V0LT5rZXksIGluLT5rZXksIGluLT5rZXlfbGVu KSwNCj4gKwkJLnF1ZXVlID0gbWVtY3B5KG91dC0+cXVldWUsIGluLT5xdWV1ZSwNCj4gKwkJCQlz aXplb2YoKmluLT5xdWV1ZSkgKiBpbi0+cXVldWVfbnVtKSwNCj4gKwl9Ow0KPiArCXJldHVybiAw Ow0KPiArfQ0KPiArDQo+ICtpbnQNCj4gK2l4Z2JlX2FjdGlvbl9yc3Nfc2FtZShjb25zdCBzdHJ1 Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqY29tcCwNCj4gKwkJICAgICAgY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2FjdGlvbl9yc3MgKndpdGgpDQo+ICt7DQo+ICsJcmV0dXJuIChjb21wLT50eXBlcyA9 PSB3aXRoLT50eXBlcyAmJg0KPiArCQljb21wLT5rZXlfbGVuID09IHdpdGgtPmtleV9sZW4gJiYN Cj4gKwkJY29tcC0+cXVldWVfbnVtID09IHdpdGgtPnF1ZXVlX251bSAmJg0KPiArCQkhbWVtY21w KGNvbXAtPmtleSwgd2l0aC0+a2V5LCB3aXRoLT5rZXlfbGVuKSAmJg0KPiArCQkhbWVtY21wKGNv bXAtPnF1ZXVlLCB3aXRoLT5xdWV1ZSwNCj4gKwkJCXNpemVvZigqd2l0aC0+cXVldWUpICogd2l0 aC0+cXVldWVfbnVtKSk7DQo+ICt9DQo+ICsNCj4gK2ludA0KPiAgaXhnYmVfY29uZmlnX3Jzc19m aWx0ZXIoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJCXN0cnVjdCBpeGdiZV9ydGVfZmxv d19yc3NfY29uZiAqY29uZiwgYm9vbCBhZGQpDQo+ICB7DQo+IEBAIC01Njg1LDcgKzU3MTUsMTIg QEAgaXhnYmVfY29uZmlnX3Jzc19maWx0ZXIoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJ dWludDE2X3QgajsNCj4gIAl1aW50MTZfdCBzcF9yZXRhX3NpemU7DQo+ICAJdWludDMyX3QgcmV0 YV9yZWc7DQo+IC0Jc3RydWN0IHJ0ZV9ldGhfcnNzX2NvbmYgcnNzX2NvbmYgPSBjb25mLT5yc3Nf Y29uZjsNCj4gKwlzdHJ1Y3QgcnRlX2V0aF9yc3NfY29uZiByc3NfY29uZiA9IHsNCj4gKwkJLnJz c19rZXkgPSBjb25mLT5jb25mLmtleV9sZW4gPw0KPiArCQkJKHZvaWQgKikodWludHB0cl90KWNv bmYtPmNvbmYua2V5IDogTlVMTCwNCj4gKwkJLnJzc19rZXlfbGVuID0gY29uZi0+Y29uZi5rZXlf bGVuLA0KPiArCQkucnNzX2hmID0gY29uZi0+Y29uZi50eXBlcywNCj4gKwl9Ow0KPiAgCXN0cnVj dCBpeGdiZV9maWx0ZXJfaW5mbyAqZmlsdGVyX2luZm8gPQ0KPiAgCQlJWEdCRV9ERVZfUFJJVkFU RV9UT19GSUxURVJfSU5GTyhkZXYtPmRhdGEtDQo+ID5kZXZfcHJpdmF0ZSk7DQo+IA0KPiBAQCAt NTY5NSw4ICs1NzMwLDggQEAgaXhnYmVfY29uZmlnX3Jzc19maWx0ZXIoc3RydWN0IHJ0ZV9ldGhf ZGV2ICpkZXYsDQo+ICAJc3BfcmV0YV9zaXplID0gaXhnYmVfcmV0YV9zaXplX2dldChody0+bWFj LnR5cGUpOw0KPiANCj4gIAlpZiAoIWFkZCkgew0KPiAtCQlpZiAobWVtY21wKGNvbmYsICZmaWx0 ZXJfaW5mby0+cnNzX2luZm8sDQo+IC0JCQlzaXplb2Yoc3RydWN0IGl4Z2JlX3J0ZV9mbG93X3Jz c19jb25mKSkgPT0gMCkgew0KPiArCQlpZiAoaXhnYmVfYWN0aW9uX3Jzc19zYW1lKCZmaWx0ZXJf aW5mby0+cnNzX2luZm8uY29uZiwNCj4gKwkJCQkJICAmY29uZi0+Y29uZikpIHsNCj4gIAkJCWl4 Z2JlX3Jzc19kaXNhYmxlKGRldik7DQo+ICAJCQltZW1zZXQoJmZpbHRlcl9pbmZvLT5yc3NfaW5m bywgMCwNCj4gIAkJCQlzaXplb2Yoc3RydWN0IGl4Z2JlX3J0ZV9mbG93X3Jzc19jb25mKSk7DQo+ IEBAIC01NzA1LDcgKzU3NDAsNyBAQCBpeGdiZV9jb25maWdfcnNzX2ZpbHRlcihzdHJ1Y3QgcnRl X2V0aF9kZXYgKmRldiwNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+ICAJfQ0KPiANCj4gLQlpZiAo ZmlsdGVyX2luZm8tPnJzc19pbmZvLm51bSkNCj4gKwlpZiAoZmlsdGVyX2luZm8tPnJzc19pbmZv LmNvbmYucXVldWVfbnVtKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gIAkvKiBGaWxsIGluIHJl ZGlyZWN0aW9uIHRhYmxlDQo+ICAJICogVGhlIGJ5dGUtc3dhcCBpcyBuZWVkZWQgYmVjYXVzZSBO SUMgcmVnaXN0ZXJzIGFyZSBpbg0KPiBAQCAtNTcxNSw5ICs1NzUwLDkgQEAgaXhnYmVfY29uZmln X3Jzc19maWx0ZXIoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJZm9yIChpID0gMCwgaiA9 IDA7IGkgPCBzcF9yZXRhX3NpemU7IGkrKywgaisrKSB7DQo+ICAJCXJldGFfcmVnID0gaXhnYmVf cmV0YV9yZWdfZ2V0KGh3LT5tYWMudHlwZSwgaSk7DQo+IA0KPiAtCQlpZiAoaiA9PSBjb25mLT5u dW0pDQo+ICsJCWlmIChqID09IGNvbmYtPmNvbmYucXVldWVfbnVtKQ0KPiAgCQkJaiA9IDA7DQo+ IC0JCXJldGEgPSAocmV0YSA8PCA4KSB8IGNvbmYtPnF1ZXVlW2pdOw0KPiArCQlyZXRhID0gKHJl dGEgPDwgOCkgfCBjb25mLT5jb25mLnF1ZXVlW2pdOw0KPiAgCQlpZiAoKGkgJiAzKSA9PSAzKQ0K PiAgCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCByZXRhX3JlZywNCj4gIAkJCQkJcnRlX2Jzd2FwMzIo cmV0YSkpOw0KPiBAQCAtNTczNCw4ICs1NzY5LDggQEAgaXhnYmVfY29uZmlnX3Jzc19maWx0ZXIo c3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJCXJzc19jb25mLnJzc19rZXkgPSByc3NfaW50 ZWxfa2V5OyAvKiBEZWZhdWx0IGhhc2gga2V5ICovDQo+ICAJaXhnYmVfaHdfcnNzX2hhc2hfc2V0 KGh3LCAmcnNzX2NvbmYpOw0KPiANCj4gLQlydGVfbWVtY3B5KCZmaWx0ZXJfaW5mby0+cnNzX2lu Zm8sDQo+IC0JCWNvbmYsIHNpemVvZihzdHJ1Y3QgaXhnYmVfcnRlX2Zsb3dfcnNzX2NvbmYpKTsN Cj4gKwlpZiAoaXhnYmVfcnNzX2NvbmZfaW5pdCgmZmlsdGVyX2luZm8tPnJzc19pbmZvLCAmY29u Zi0+Y29uZikpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAlyZXR1cm4gMDsNCj4gIH0N Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5jIGIvZHJpdmVycy9uZXQvbWx4 NC9tbHg0LmMNCj4gaW5kZXggOTM3MDc0YTRmLi4zZGQ3MmRiZjUgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvbmV0L21seDQvbWx4NC5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NC5jDQo+ IEBAIC01NzEsNyArNTcxLDcgQEAgbWx4NF9wY2lfcHJvYmUoc3RydWN0IHJ0ZV9wY2lfZHJpdmVy ICpwY2lfZHJ2LCBzdHJ1Y3QNCj4gcnRlX3BjaV9kZXZpY2UgKnBjaV9kZXYpDQo+ICAJCQkgICAg ICIgZm9yIFVEUCBSU1MgYW5kIGlubmVyIFZYTEFOIFJTUyIpOw0KPiAgCQkJLyogRmFrZSBzdXBw b3J0IGZvciBhbGwgcG9zc2libGUgUlNTIGhhc2ggZmllbGRzLiAqLw0KPiAgCQkJcHJpdi0+aHdf cnNzX3N1cCA9IH5VSU5UNjRfQygwKTsNCj4gLQkJCXByaXYtPmh3X3Jzc19zdXAgPSBtbHg0X2Nv bnZfcnNzX2hmKHByaXYsIC0xKTsNCj4gKwkJCXByaXYtPmh3X3Jzc19zdXAgPSBtbHg0X2NvbnZf cnNzX3R5cGVzKHByaXYsIC0xKTsNCj4gIAkJCS8qIEZpbHRlciBvdXQga25vd24gdW5zdXBwb3J0 ZWQgZmllbGRzLiAqLw0KPiAgCQkJcHJpdi0+aHdfcnNzX3N1cCAmPQ0KPiAgCQkJCX4odWludDY0 X3QpKElCVl9SWF9IQVNIX1NSQ19QT1JUX1VEUCB8DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9tbHg0L21seDRfZmxvdy5jIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0X2Zsb3cuYw0KPiBpbmRl eCA4ZmViNmFlMzEuLmRkODZlNGNlNyAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9t bHg0X2Zsb3cuYw0KPiArKysgYi9kcml2ZXJzL25ldC9tbHg0L21seDRfZmxvdy5jDQo+IEBAIC03 NiwyMiArNzYsMjIgQEAgc3RydWN0IG1seDRfZHJvcCB7DQo+ICB9Ow0KPiANCj4gIC8qKg0KPiAt ICogQ29udmVydCBEUERLIFJTUyBoYXNoIGZpZWxkcyB0byB0aGVpciBWZXJicyBlcXVpdmFsZW50 Lg0KPiArICogQ29udmVydCBEUERLIFJTUyBoYXNoIHR5cGVzIHRvIHRoZWlyIFZlcmJzIGVxdWl2 YWxlbnQuDQo+ICAgKg0KPiAtICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdXBwb3J0ZWQg KGRlZmF1bHQpIHNldCB3aGVuIEBwIHJzc19oZiBoYXMNCj4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0 dXJucyB0aGUgc3VwcG9ydGVkIChkZWZhdWx0KSBzZXQgd2hlbiBAcCB0eXBlcyBoYXMNCj4gICAq IHNwZWNpYWwgdmFsdWUgKHVpbnQ2NF90KS0xLg0KPiAgICoNCj4gICAqIEBwYXJhbSBwcml2DQo+ ICAgKiAgIFBvaW50ZXIgdG8gcHJpdmF0ZSBzdHJ1Y3R1cmUuDQo+IC0gKiBAcGFyYW0gcnNzX2hm DQo+IC0gKiAgIEhhc2ggZmllbGRzIGluIERQREsgZm9ybWF0IChzZWUgc3RydWN0IHJ0ZV9ldGhf cnNzX2NvbmYpLg0KPiArICogQHBhcmFtIHR5cGVzDQo+ICsgKiAgIEhhc2ggdHlwZXMgaW4gRFBE SyBmb3JtYXQgKHNlZSBzdHJ1Y3QgcnRlX2V0aF9yc3NfY29uZikuDQo+ICAgKg0KPiAgICogQHJl dHVybg0KPiAgICogICBBIHZhbGlkIFZlcmJzIFJTUyBoYXNoIGZpZWxkcyBtYXNrIGZvciBtbHg0 IG9uIHN1Y2Nlc3MsICh1aW50NjRfdCktMQ0KPiAgICogICBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJu byBpcyBzZXQuDQo+ICAgKi8NCj4gIHVpbnQ2NF90DQo+IC1tbHg0X2NvbnZfcnNzX2hmKHN0cnVj dCBwcml2ICpwcml2LCB1aW50NjRfdCByc3NfaGYpDQo+ICttbHg0X2NvbnZfcnNzX3R5cGVzKHN0 cnVjdCBwcml2ICpwcml2LCB1aW50NjRfdCB0eXBlcykNCj4gIHsNCj4gIAllbnVtIHsgSVBWNCwg SVBWNiwgVENQLCBVRFAsIH07DQo+ICAJY29uc3QgdWludDY0X3QgaW5bXSA9IHsNCj4gQEAgLTEy NiwxNyArMTI2LDE3IEBAIG1seDRfY29udl9yc3NfaGYoc3RydWN0IHByaXYgKnByaXYsIHVpbnQ2 NF90IHJzc19oZikNCj4gIAl1bnNpZ25lZCBpbnQgaTsNCj4gDQo+ICAJZm9yIChpID0gMDsgaSAh PSBSVEVfRElNKGluKTsgKytpKQ0KPiAtCQlpZiAocnNzX2hmICYgaW5baV0pIHsNCj4gLQkJCXNl ZW4gfD0gcnNzX2hmICYgaW5baV07DQo+ICsJCWlmICh0eXBlcyAmIGluW2ldKSB7DQo+ICsJCQlz ZWVuIHw9IHR5cGVzICYgaW5baV07DQo+ICAJCQljb252IHw9IG91dFtpXTsNCj4gIAkJfQ0KPiAg CWlmICgoY29udiAmIHByaXYtPmh3X3Jzc19zdXApID09IGNvbnYpIHsNCj4gLQkJaWYgKHJzc19o ZiA9PSAodWludDY0X3QpLTEpIHsNCj4gKwkJaWYgKHR5cGVzID09ICh1aW50NjRfdCktMSkgew0K PiAgCQkJLyogSW5jbHVkZSBpbm5lciBSU1MgYnkgZGVmYXVsdCBpZiBzdXBwb3J0ZWQuICovDQo+ ICAJCQljb252IHw9IHByaXYtPmh3X3Jzc19zdXAgJiBJQlZfUlhfSEFTSF9JTk5FUjsNCj4gIAkJ CXJldHVybiBjb252Ow0KPiAgCQl9DQo+IC0JCWlmICghKHJzc19oZiAmIH5zZWVuKSkNCj4gKwkJ aWYgKCEodHlwZXMgJiB+c2VlbikpDQo+ICAJCQlyZXR1cm4gY29udjsNCj4gIAl9DQo+ICAJcnRl X2Vycm5vID0gRU5PVFNVUDsNCj4gQEAgLTcxNyw3ICs3MTcsOCBAQCBtbHg0X2Zsb3dfcHJlcGFy ZShzdHJ1Y3QgcHJpdiAqcHJpdiwNCj4gIAkJc3dpdGNoIChhY3Rpb24tPnR5cGUpIHsNCj4gIAkJ CWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcXVldWUgKnF1ZXVlOw0KPiAgCQkJY29uc3Qg c3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgKnJzczsNCj4gLQkJCWNvbnN0IHN0cnVjdCBydGVf ZXRoX3Jzc19jb25mICpyc3NfY29uZjsNCj4gKwkJCWNvbnN0IHVpbnQ4X3QgKnJzc19rZXk7DQo+ ICsJCQl1aW50MzJfdCByc3Nfa2V5X2xlbjsNCj4gIAkJCXVpbnQ2NF90IGZpZWxkczsNCj4gIAkJ CXVuc2lnbmVkIGludCBpOw0KPiANCj4gQEAgLTc0Nyw1OCArNzQ4LDU2IEBAIG1seDRfZmxvd19w cmVwYXJlKHN0cnVjdCBwcml2ICpwcml2LA0KPiAgCQkJCWJyZWFrOw0KPiAgCQkJcnNzID0gYWN0 aW9uLT5jb25mOw0KPiAgCQkJLyogRGVmYXVsdCBSU1MgY29uZmlndXJhdGlvbiBpZiBub25lIGlz IHByb3ZpZGVkLiAqLw0KPiAtCQkJcnNzX2NvbmYgPQ0KPiAtCQkJCXJzcy0+cnNzX2NvbmYgPw0K PiAtCQkJCXJzcy0+cnNzX2NvbmYgOg0KPiAtCQkJCSYoc3RydWN0IHJ0ZV9ldGhfcnNzX2NvbmYp ew0KPiAtCQkJCQkucnNzX2tleSA9DQo+IG1seDRfcnNzX2hhc2hfa2V5X2RlZmF1bHQsDQo+IC0J CQkJCS5yc3Nfa2V5X2xlbiA9DQo+IE1MWDRfUlNTX0hBU0hfS0VZX1NJWkUsDQo+IC0JCQkJCS5y c3NfaGYgPSAtMSwNCj4gLQkJCQl9Ow0KPiArCQkJaWYgKHJzcy0+a2V5X2xlbikgew0KPiArCQkJ CXJzc19rZXkgPSByc3MtPmtleTsNCj4gKwkJCQlyc3Nfa2V5X2xlbiA9IHJzcy0+a2V5X2xlbjsN Cj4gKwkJCX0gZWxzZSB7DQo+ICsJCQkJcnNzX2tleSA9IG1seDRfcnNzX2hhc2hfa2V5X2RlZmF1 bHQ7DQo+ICsJCQkJcnNzX2tleV9sZW4gPSBNTFg0X1JTU19IQVNIX0tFWV9TSVpFOw0KPiArCQkJ fQ0KPiAgCQkJLyogU2FuaXR5IGNoZWNrcy4gKi8NCj4gLQkJCWZvciAoaSA9IDA7IGkgPCByc3Mt Pm51bTsgKytpKQ0KPiArCQkJZm9yIChpID0gMDsgaSA8IHJzcy0+cXVldWVfbnVtOyArK2kpDQo+ ICAJCQkJaWYgKHJzcy0+cXVldWVbaV0gPj0NCj4gIAkJCQkgICAgcHJpdi0+ZGV2LT5kYXRhLT5u Yl9yeF9xdWV1ZXMpDQo+ICAJCQkJCWJyZWFrOw0KPiAtCQkJaWYgKGkgIT0gcnNzLT5udW0pIHsN Cj4gKwkJCWlmIChpICE9IHJzcy0+cXVldWVfbnVtKSB7DQo+ICAJCQkJbXNnID0gInF1ZXVlIGlu ZGV4IHRhcmdldCBiZXlvbmQgbnVtYmVyDQo+IG9mIg0KPiAgCQkJCQkiIGNvbmZpZ3VyZWQgUngg cXVldWVzIjsNCj4gIAkJCQlnb3RvIGV4aXRfYWN0aW9uX25vdF9zdXBwb3J0ZWQ7DQo+ICAJCQl9 DQo+IC0JCQlpZiAoIXJ0ZV9pc19wb3dlcl9vZl8yKHJzcy0+bnVtKSkgew0KPiArCQkJaWYgKCFy dGVfaXNfcG93ZXJfb2ZfMihyc3MtPnF1ZXVlX251bSkpIHsNCj4gIAkJCQltc2cgPSAiZm9yIFJT UywgbWx4NCByZXF1aXJlcyB0aGUgbnVtYmVyIG9mIg0KPiAgCQkJCQkiIHF1ZXVlcyB0byBiZSBh IHBvd2VyIG9mIHR3byI7DQo+ICAJCQkJZ290byBleGl0X2FjdGlvbl9ub3Rfc3VwcG9ydGVkOw0K PiAgCQkJfQ0KPiAtCQkJaWYgKHJzc19jb25mLT5yc3Nfa2V5X2xlbiAhPQ0KPiAtCQkJICAgIHNp emVvZihmbG93LT5yc3MtPmtleSkpIHsNCj4gKwkJCWlmIChyc3Nfa2V5X2xlbiAhPSBzaXplb2Yo Zmxvdy0+cnNzLT5rZXkpKSB7DQo+ICAJCQkJbXNnID0gIm1seDQgc3VwcG9ydHMgZXhhY3RseSBv bmUgUlNTIGhhc2gNCj4ga2V5Ig0KPiAgCQkJCQkiIGxlbmd0aDogIg0KPiANCj4gCU1MWDRfU1RS X0VYUEFORChNTFg0X1JTU19IQVNIX0tFWV9TSVpFKTsNCj4gIAkJCQlnb3RvIGV4aXRfYWN0aW9u X25vdF9zdXBwb3J0ZWQ7DQo+ICAJCQl9DQo+IC0JCQlmb3IgKGkgPSAxOyBpIDwgcnNzLT5udW07 ICsraSkNCj4gKwkJCWZvciAoaSA9IDE7IGkgPCByc3MtPnF1ZXVlX251bTsgKytpKQ0KPiAgCQkJ CWlmIChyc3MtPnF1ZXVlW2ldIC0gcnNzLT5xdWV1ZVtpIC0gMV0gIT0gMSkNCj4gIAkJCQkJYnJl YWs7DQo+IC0JCQlpZiAoaSAhPSByc3MtPm51bSkgew0KPiArCQkJaWYgKGkgIT0gcnNzLT5xdWV1 ZV9udW0pIHsNCj4gIAkJCQltc2cgPSAibWx4NCByZXF1aXJlcyBSU1MgY29udGV4dHMgdG8gdXNl Ig0KPiAgCQkJCQkiIGNvbnNlY3V0aXZlIHF1ZXVlIGluZGljZXMgb25seSI7DQo+ICAJCQkJZ290 byBleGl0X2FjdGlvbl9ub3Rfc3VwcG9ydGVkOw0KPiAgCQkJfQ0KPiAtCQkJaWYgKHJzcy0+cXVl dWVbMF0gJSByc3MtPm51bSkgew0KPiArCQkJaWYgKHJzcy0+cXVldWVbMF0gJSByc3MtPnF1ZXVl X251bSkgew0KPiAgCQkJCW1zZyA9ICJtbHg0IHJlcXVpcmVzIHRoZSBmaXJzdCBxdWV1ZSBvZiBh DQo+IFJTUyINCj4gIAkJCQkJIiBjb250ZXh0IHRvIGJlIGFsaWduZWQgb24gYSBtdWx0aXBsZSIN Cj4gIAkJCQkJIiBvZiB0aGUgY29udGV4dCBzaXplIjsNCj4gIAkJCQlnb3RvIGV4aXRfYWN0aW9u X25vdF9zdXBwb3J0ZWQ7DQo+ICAJCQl9DQo+ICAJCQlydGVfZXJybm8gPSAwOw0KPiAtCQkJZmll bGRzID0gbWx4NF9jb252X3Jzc19oZihwcml2LCByc3NfY29uZi0+cnNzX2hmKTsNCj4gKwkJCWZp ZWxkcyA9IG1seDRfY29udl9yc3NfdHlwZXMocHJpdiwgcnNzLT50eXBlcyk7DQo+ICAJCQlpZiAo ZmllbGRzID09ICh1aW50NjRfdCktMSAmJiBydGVfZXJybm8pIHsNCj4gIAkJCQltc2cgPSAidW5z dXBwb3J0ZWQgUlNTIGhhc2ggdHlwZQ0KPiByZXF1ZXN0ZWQiOw0KPiAgCQkJCWdvdG8gZXhpdF9h Y3Rpb25fbm90X3N1cHBvcnRlZDsNCj4gIAkJCX0NCj4gIAkJCWZsb3ctPnJzcyA9IG1seDRfcnNz X2dldA0KPiAtCQkJCShwcml2LCBmaWVsZHMsIHJzc19jb25mLT5yc3Nfa2V5LCByc3MtPm51bSwN Cj4gKwkJCQkocHJpdiwgZmllbGRzLCByc3Nfa2V5LCByc3MtPnF1ZXVlX251bSwNCj4gIAkJCQkg cnNzLT5xdWV1ZSk7DQo+ICAJCQlpZiAoIWZsb3ctPnJzcykgew0KPiAgCQkJCW1zZyA9ICJlaXRo ZXIgaW52YWxpZCBwYXJhbWV0ZXJzIG9yIG5vdA0KPiBlbm91Z2giDQo+IEBAIC0xMjg0LDggKzEy ODMsMTAgQEAgbWx4NF9mbG93X2ludGVybmFsKHN0cnVjdCBwcml2ICpwcml2LCBzdHJ1Y3QNCj4g cnRlX2Zsb3dfZXJyb3IgKmVycm9yKQ0KPiAgCQlydGVfYWxpZ24zMnBvdzIocHJpdi0+ZGV2LT5k YXRhLT5uYl9yeF9xdWV1ZXMgKyAxKSA+PiAxOw0KPiAgCXVpbnQxNl90IHF1ZXVlW3F1ZXVlc107 DQo+ICAJc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgYWN0aW9uX3JzcyA9IHsNCj4gLQkJLnJz c19jb25mID0gTlVMTCwgLyogUmVseSBvbiBkZWZhdWx0IGZhbGxiYWNrIHNldHRpbmdzLiAqLw0K PiAtCQkubnVtID0gcXVldWVzLA0KPiArCQkudHlwZXMgPSAtMSwNCj4gKwkJLmtleV9sZW4gPSBN TFg0X1JTU19IQVNIX0tFWV9TSVpFLA0KPiArCQkucXVldWVfbnVtID0gcXVldWVzLA0KPiArCQku a2V5ID0gbWx4NF9yc3NfaGFzaF9rZXlfZGVmYXVsdCwNCj4gIAkJLnF1ZXVlID0gcXVldWUsDQo+ ICAJfTsNCj4gIAlzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uIGFjdGlvbnNbXSA9IHsNCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NF9mbG93LmggYi9kcml2ZXJzL25ldC9tbHg0L21s eDRfZmxvdy5oDQo+IGluZGV4IDRlMzg4OWU2Ny4uN2I4M2Q3NGIwIDEwMDY0NA0KPiAtLS0gYS9k cml2ZXJzL25ldC9tbHg0L21seDRfZmxvdy5oDQo+ICsrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4 NF9mbG93LmgNCj4gQEAgLTQ3LDcgKzQ3LDcgQEAgc3RydWN0IHJ0ZV9mbG93IHsNCj4gDQo+ICAv KiBtbHg0X2Zsb3cuYyAqLw0KPiANCj4gLXVpbnQ2NF90IG1seDRfY29udl9yc3NfaGYoc3RydWN0 IHByaXYgKnByaXYsIHVpbnQ2NF90IHJzc19oZik7DQo+ICt1aW50NjRfdCBtbHg0X2NvbnZfcnNz X3R5cGVzKHN0cnVjdCBwcml2ICpwcml2LCB1aW50NjRfdCByc3NfaGYpOw0KPiAgaW50IG1seDRf Zmxvd19zeW5jKHN0cnVjdCBwcml2ICpwcml2LCBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9y KTsNCj4gIHZvaWQgbWx4NF9mbG93X2NsZWFuKHN0cnVjdCBwcml2ICpwcml2KTsNCj4gIGludCBt bHg0X2ZpbHRlcl9jdHJsKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvbWx4NC9tbHg0X3J4cS5jIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0X3J4cS5j DQo+IGluZGV4IGE3YWNjMDQ3Yi4uNjVmMDk5NDIzIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25l dC9tbHg0L21seDRfcnhxLmMNCj4gKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0X3J4cS5jDQo+ IEBAIC04OCw3ICs4OCw3IEBADQo+IG1seDRfcnNzX2hhc2hfa2V5X2RlZmF1bHRbTUxYNF9SU1Nf SEFTSF9LRVlfU0laRV0gPSB7DQo+ICAgKi8NCj4gIHN0cnVjdCBtbHg0X3JzcyAqDQo+ICBtbHg0 X3Jzc19nZXQoc3RydWN0IHByaXYgKnByaXYsIHVpbnQ2NF90IGZpZWxkcywNCj4gLQkgICAgIHVp bnQ4X3Qga2V5W01MWDRfUlNTX0hBU0hfS0VZX1NJWkVdLA0KPiArCSAgICAgY29uc3QgdWludDhf dCBrZXlbTUxYNF9SU1NfSEFTSF9LRVlfU0laRV0sDQo+ICAJICAgICB1aW50MTZfdCBxdWV1ZXMs IGNvbnN0IHVpbnQxNl90IHF1ZXVlX2lkW10pDQo+ICB7DQo+ICAJc3RydWN0IG1seDRfcnNzICpy c3M7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21seDRfcnh0eC5oIGIvZHJpdmVy cy9uZXQvbWx4NC9tbHg0X3J4dHguaA0KPiBpbmRleCBiMWFmODYxMTAuLjJkZmVlOTU3ZiAxMDA2 NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0X3J4dHguaA0KPiArKysgYi9kcml2ZXJz L25ldC9tbHg0L21seDRfcnh0eC5oDQo+IEBAIC0xMjcsNyArMTI3LDcgQEAgdWludDhfdA0KPiBt bHg0X3Jzc19oYXNoX2tleV9kZWZhdWx0W01MWDRfUlNTX0hBU0hfS0VZX1NJWkVdOw0KPiAgaW50 IG1seDRfcnNzX2luaXQoc3RydWN0IHByaXYgKnByaXYpOw0KPiAgdm9pZCBtbHg0X3Jzc19kZWlu aXQoc3RydWN0IHByaXYgKnByaXYpOw0KPiAgc3RydWN0IG1seDRfcnNzICptbHg0X3Jzc19nZXQo c3RydWN0IHByaXYgKnByaXYsIHVpbnQ2NF90IGZpZWxkcywNCj4gLQkJCSAgICAgIHVpbnQ4X3Qg a2V5W01MWDRfUlNTX0hBU0hfS0VZX1NJWkVdLA0KPiArCQkJICAgICAgY29uc3QgdWludDhfdCBr ZXlbTUxYNF9SU1NfSEFTSF9LRVlfU0laRV0sDQo+ICAJCQkgICAgICB1aW50MTZfdCBxdWV1ZXMs IGNvbnN0IHVpbnQxNl90IHF1ZXVlX2lkW10pOw0KPiAgdm9pZCBtbHg0X3Jzc19wdXQoc3RydWN0 IG1seDRfcnNzICpyc3MpOw0KPiAgaW50IG1seDRfcnNzX2F0dGFjaChzdHJ1Y3QgbWx4NF9yc3Mg KnJzcyk7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvdy5jIGIvZHJp dmVycy9uZXQvbWx4NS9tbHg1X2Zsb3cuYw0KPiBpbmRleCAwYzg5YmZmNDUuLmFmODg1M2UwOSAx MDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3cuYw0KPiArKysgYi9kcml2 ZXJzL25ldC9tbHg1L21seDVfZmxvdy5jDQo+IEBAIC0yMTQsOSArMjE0LDggQEAgc3RydWN0IHJ0 ZV9mbG93IHsNCj4gIAlUQUlMUV9FTlRSWShydGVfZmxvdykgbmV4dDsgLyoqPCBQb2ludGVyIHRv IHRoZSBuZXh0IGZsb3cgc3RydWN0dXJlLg0KPiAqLw0KPiAgCXVpbnQzMl90IG1hcms6MTsgLyoq PCBTZXQgaWYgdGhlIGZsb3cgaXMgbWFya2VkLiAqLw0KPiAgCXVpbnQzMl90IGRyb3A6MTsgLyoq PCBEcm9wIHF1ZXVlLiAqLw0KPiAtCXVpbnQxNl90IHF1ZXVlc19uOyAvKio8IE51bWJlciBvZiBl bnRyaWVzIGluIHF1ZXVlW10uICovDQo+ICsJc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgcnNz X2NvbmY7IC8qKjwgUlNTIGNvbmZpZ3VyYXRpb24gKi8NCj4gIAl1aW50MTZfdCAoKnF1ZXVlcylb XTsgLyoqPCBRdWV1ZXMgaW5kZXhlcyB0byB1c2UuICovDQo+IC0Jc3RydWN0IHJ0ZV9ldGhfcnNz X2NvbmYgcnNzX2NvbmY7IC8qKjwgUlNTIGNvbmZpZ3VyYXRpb24gKi8NCj4gIAl1aW50OF90IHJz c19rZXlbNDBdOyAvKio8IGNvcHkgb2YgdGhlIFJTUyBrZXkuICovDQo+ICAJc3RydWN0IGlidl9j b3VudGVyX3NldCAqY3M7IC8qKjwgSG9sZHMgdGhlIGNvdW50ZXJzIGZvciB0aGUgcnVsZS4gKi8N Cj4gIAlzdHJ1Y3QgbWx4NV9mbG93X2NvdW50ZXJfc3RhdHMgY291bnRlcl9zdGF0czsvKio8VGhl IGNvdW50ZXINCj4gc3RhdHMuICovDQo+IEBAIC00MDYsOSArNDA1LDggQEAgc3RydWN0IG1seDVf Zmxvd19wYXJzZSB7DQo+ICAJdWludDMyX3QgbWFyazoxOyAvKio8IE1hcmsgaXMgcHJlc2VudCBp biB0aGUgZmxvdy4gKi8NCj4gIAl1aW50MzJfdCBjb3VudDoxOyAvKio8IENvdW50IGlzIHByZXNl bnQgaW4gdGhlIGZsb3cuICovDQo+ICAJdWludDMyX3QgbWFya19pZDsgLyoqPCBNYXJrIGlkZW50 aWZpZXIuICovDQo+ICsJc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9yc3MgcnNzX2NvbmY7IC8qKjwg UlNTIGNvbmZpZ3VyYXRpb24gKi8NCj4gIAl1aW50MTZfdCBxdWV1ZXNbUlRFX01BWF9RVUVVRVNf UEVSX1BPUlRdOyAvKio8IFF1ZXVlcw0KPiBpbmRleGVzIHRvIHVzZS4gKi8NCj4gLQl1aW50MTZf dCBxdWV1ZXNfbjsgLyoqPCBOdW1iZXIgb2YgZW50cmllcyBpbiBxdWV1ZVtdLiAqLw0KPiAtCXN0 cnVjdCBydGVfZXRoX3Jzc19jb25mIHJzc19jb25mOyAvKio8IFJTUyBjb25maWd1cmF0aW9uICov DQo+ICAJdWludDhfdCByc3Nfa2V5WzQwXTsgLyoqPCBjb3B5IG9mIHRoZSBSU1Mga2V5LiAqLw0K PiAgCWVudW0gaGFzaF9yeHFfdHlwZSBsYXllcjsgLyoqPCBMYXN0IHBhdHRlcm4gbGF5ZXIgZGV0 ZWN0ZWQuICovDQo+ICAJc3RydWN0IGlidl9jb3VudGVyX3NldCAqY3M7IC8qKjwgSG9sZHMgdGhl IGNvdW50ZXIgc2V0IGZvciB0aGUgcnVsZSAqLw0KPiBAQCAtNTQwLDQ3ICs1MzgsNiBAQCBtbHg1 X2Zsb3dfaXRlbV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QNCj4gcnRlX2Zsb3dfaXRlbSAqaXRlbSwN Cj4gIH0NCj4gDQo+ICAvKioNCj4gLSAqIENvcHkgdGhlIFJTUyBjb25maWd1cmF0aW9uIGZyb20g dGhlIHVzZXIgb25lcywgb2YgdGhlIHJzc19jb25mIGlzIG51bGwsDQo+IC0gKiB1c2VzIHRoZSBk cml2ZXIgb25lLg0KPiAtICoNCj4gLSAqIEBwYXJhbSBwYXJzZXINCj4gLSAqICAgSW50ZXJuYWwg cGFyc2VyIHN0cnVjdHVyZS4NCj4gLSAqIEBwYXJhbSByc3NfY29uZg0KPiAtICogICBVc2VyIFJT UyBjb25maWd1cmF0aW9uIHRvIHNhdmUuDQo+IC0gKg0KPiAtICogQHJldHVybg0KPiAtICogICAw IG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJy bm8gaXMgc2V0Lg0KPiAtICovDQo+IC1zdGF0aWMgaW50DQo+IC1tbHg1X2Zsb3dfY29udmVydF9y c3NfY29uZihzdHJ1Y3QgbWx4NV9mbG93X3BhcnNlICpwYXJzZXIsDQo+IC0JCQkgICBjb25zdCBz dHJ1Y3QgcnRlX2V0aF9yc3NfY29uZiAqcnNzX2NvbmYpDQo+IC17DQo+IC0JLyoNCj4gLQkgKiBU aGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YNCj4gLQkgKiBt bHg1X2Zsb3dfY29udmVydF9hY3Rpb25zKCkgdG8gaW5pdGlhbGl6ZSB0aGUgcGFyc2VyIHdpdGgg dGhlDQo+IC0JICogZGV2aWNlIGRlZmF1bHQgUlNTIGNvbmZpZ3VyYXRpb24uDQo+IC0JICovDQo+ IC0JaWYgKHJzc19jb25mKSB7DQo+IC0JCWlmIChyc3NfY29uZi0+cnNzX2hmICYgTUxYNV9SU1Nf SEZfTUFTSykgew0KPiAtCQkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiAtCQkJcmV0dXJuIC1ydGVf ZXJybm87DQo+IC0JCX0NCj4gLQkJaWYgKHJzc19jb25mLT5yc3Nfa2V5X2xlbiAhPSA0MCkgew0K PiAtCQkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiAtCQkJcmV0dXJuIC1ydGVfZXJybm87DQo+IC0J CX0NCj4gLQkJaWYgKHJzc19jb25mLT5yc3Nfa2V5X2xlbiAmJiByc3NfY29uZi0+cnNzX2tleSkg ew0KPiAtCQkJcGFyc2VyLT5yc3NfY29uZi5yc3Nfa2V5X2xlbiA9IHJzc19jb25mLQ0KPiA+cnNz X2tleV9sZW47DQo+IC0JCQltZW1jcHkocGFyc2VyLT5yc3Nfa2V5LCByc3NfY29uZi0+cnNzX2tl eSwNCj4gLQkJCSAgICAgICByc3NfY29uZi0+cnNzX2tleV9sZW4pOw0KPiAtCQkJcGFyc2VyLT5y c3NfY29uZi5yc3Nfa2V5ID0gcGFyc2VyLT5yc3Nfa2V5Ow0KPiAtCQl9DQo+IC0JCXBhcnNlci0+ cnNzX2NvbmYucnNzX2hmID0gcnNzX2NvbmYtPnJzc19oZjsNCj4gLQl9DQo+IC0JcmV0dXJuIDA7 DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAgICogRXh0cmFjdCBhdHRyaWJ1dGUgdG8gdGhlIHBhcnNl ci4NCj4gICAqDQo+ICAgKiBAcGFyYW1baW5dIGF0dHINCj4gQEAgLTY1MCwxNyArNjA3LDcgQEAg bWx4NV9mbG93X2NvbnZlcnRfYWN0aW9ucyhzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4gKmRldiwNCj4g IAllbnVtIHsgRkFURSA9IDEsIE1BUksgPSAyLCBDT1VOVCA9IDQsIH07DQo+ICAJdWludDMyX3Qg b3ZlcmxhcCA9IDA7DQo+ICAJc3RydWN0IHByaXYgKnByaXYgPSBkZXYtPmRhdGEtPmRldl9wcml2 YXRlOw0KPiAtCWludCByZXQ7DQo+IA0KPiAtCS8qDQo+IC0JICogQWRkIGRlZmF1bHQgUlNTIGNv bmZpZ3VyYXRpb24gbmVjZXNzYXJ5IGZvciBWZXJicyB0byBjcmVhdGUgUVANCj4gZXZlbg0KPiAt CSAqIGlmIG5vIFJTUyBpcyBuZWNlc3NhcnkuDQo+IC0JICovDQo+IC0JcmV0ID0gbWx4NV9mbG93 X2NvbnZlcnRfcnNzX2NvbmYocGFyc2VyLA0KPiAtCQkJCQkgKGNvbnN0IHN0cnVjdCBydGVfZXRo X3Jzc19jb25mICopDQo+IC0JCQkJCSAmcHJpdi0+cnNzX2NvbmYpOw0KPiAtCWlmIChyZXQpDQo+ IC0JCXJldHVybiByZXQ7DQo+ICAJZm9yICg7IGFjdGlvbnMtPnR5cGUgIT0gUlRFX0ZMT1dfQUNU SU9OX1RZUEVfRU5EOyArK2FjdGlvbnMpIHsNCj4gIAkJaWYgKGFjdGlvbnMtPnR5cGUgPT0gUlRF X0ZMT1dfQUNUSU9OX1RZUEVfVk9JRCkgew0KPiAgCQkJY29udGludWU7DQo+IEBAIC02NzksMjUg KzYyNiw1MyBAQCBtbHg1X2Zsb3dfY29udmVydF9hY3Rpb25zKHN0cnVjdCBydGVfZXRoX2Rldg0K PiAqZGV2LA0KPiAgCQkJb3ZlcmxhcCB8PSBGQVRFOw0KPiAgCQkJaWYgKCFxdWV1ZSB8fCAocXVl dWUtPmluZGV4ID4gKHByaXYtPnJ4cXNfbiAtIDEpKSkNCj4gIAkJCQlnb3RvIGV4aXRfYWN0aW9u X25vdF9zdXBwb3J0ZWQ7DQo+IC0JCQlwYXJzZXItPnF1ZXVlc19uID0gMTsNCj4gIAkJCXBhcnNl ci0+cXVldWVzWzBdID0gcXVldWUtPmluZGV4Ow0KPiArCQkJcGFyc2VyLT5yc3NfY29uZiA9IChz dHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3Jzcyl7DQo+ICsJCQkJLnF1ZXVlX251bSA9IDEsDQo+ICsJ CQkJLnF1ZXVlID0gcGFyc2VyLT5xdWV1ZXMsDQo+ICsJCQl9Ow0KPiAgCQl9IGVsc2UgaWYgKGFj dGlvbnMtPnR5cGUgPT0gUlRFX0ZMT1dfQUNUSU9OX1RZUEVfUlNTKSB7DQo+ICAJCQljb25zdCBz dHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqcnNzID0NCj4gIAkJCQkoY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2FjdGlvbl9yc3MgKikNCj4gIAkJCQlhY3Rpb25zLT5jb25mOw0KPiArCQkJY29uc3Qg dWludDhfdCAqcnNzX2tleTsNCj4gKwkJCXVpbnQzMl90IHJzc19rZXlfbGVuOw0KPiAgCQkJdWlu dDE2X3QgbjsNCj4gDQo+ICAJCQlpZiAob3ZlcmxhcCAmIEZBVEUpDQo+ICAJCQkJZ290byBleGl0 X2FjdGlvbl9vdmVybGFwOw0KPiAgCQkJb3ZlcmxhcCB8PSBGQVRFOw0KPiAtCQkJaWYgKCFyc3Mg fHwgIXJzcy0+bnVtKSB7DQo+ICsJCQlpZiAocnNzLT50eXBlcyAmIE1MWDVfUlNTX0hGX01BU0sp IHsNCj4gKwkJCQlydGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIEVJTlZBTCwNCj4gKw0KPiBSVEVf RkxPV19FUlJPUl9UWVBFX0FDVElPTiwNCj4gKwkJCQkJCSAgIGFjdGlvbnMsDQo+ICsJCQkJCQkg ICAidW5zdXBwb3J0ZWQgUlNTIHR5cGUiDQo+ICsJCQkJCQkgICAiIHJlcXVlc3RlZCIpOw0KPiAr CQkJCXJldHVybiAtcnRlX2Vycm5vOw0KPiArCQkJfQ0KPiArCQkJaWYgKHJzcy0+a2V5X2xlbikg ew0KPiArCQkJCXJzc19rZXlfbGVuID0gcnNzLT5rZXlfbGVuOw0KPiArCQkJCXJzc19rZXkgPSBy c3MtPmtleTsNCj4gKwkJCX0gZWxzZSB7DQo+ICsJCQkJcnNzX2tleV9sZW4gPSByc3NfaGFzaF9k ZWZhdWx0X2tleV9sZW47DQo+ICsJCQkJcnNzX2tleSA9IHJzc19oYXNoX2RlZmF1bHRfa2V5Ow0K PiArCQkJfQ0KPiArCQkJaWYgKHJzc19rZXlfbGVuICE9IFJURV9ESU0ocGFyc2VyLT5yc3Nfa2V5 KSkgew0KPiArCQkJCXJ0ZV9mbG93X2Vycm9yX3NldChlcnJvciwgRUlOVkFMLA0KPiArDQo+IFJU RV9GTE9XX0VSUk9SX1RZUEVfQUNUSU9OLA0KPiArCQkJCQkJICAgYWN0aW9ucywNCj4gKwkJCQkJ CSAgICJSU1MgaGFzaCBrZXkgbXVzdCBiZSINCj4gKwkJCQkJCSAgICIgZXhhY3RseSA0MCBieXRl cyBsb25nIik7DQo+ICsJCQkJcmV0dXJuIC1ydGVfZXJybm87DQo+ICsJCQl9DQo+ICsJCQlpZiAo IXJzcy0+cXVldWVfbnVtKSB7DQo+ICAJCQkJcnRlX2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFSU5W QUwsDQo+IA0KPiBSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwNCj4gIAkJCQkJCSAgIGFjdGlv bnMsDQo+ICAJCQkJCQkgICAibm8gdmFsaWQgcXVldWVzIik7DQo+ICAJCQkJcmV0dXJuIC1ydGVf ZXJybm87DQo+ICAJCQl9DQo+IC0JCQlpZiAocnNzLT5udW0gPiBSVEVfRElNKHBhcnNlci0+cXVl dWVzKSkgew0KPiArCQkJaWYgKHJzcy0+cXVldWVfbnVtID4gUlRFX0RJTShwYXJzZXItPnF1ZXVl cykpIHsNCj4gIAkJCQlydGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIEVJTlZBTCwNCj4gDQo+IFJU RV9GTE9XX0VSUk9SX1RZUEVfQUNUSU9OLA0KPiAgCQkJCQkJICAgYWN0aW9ucywNCj4gQEAgLTcw NSw3ICs2ODAsNyBAQCBtbHg1X2Zsb3dfY29udmVydF9hY3Rpb25zKHN0cnVjdCBydGVfZXRoX2Rl diAqZGV2LA0KPiAgCQkJCQkJICAgIiBjb250ZXh0Iik7DQo+ICAJCQkJcmV0dXJuIC1ydGVfZXJy bm87DQo+ICAJCQl9DQo+IC0JCQlmb3IgKG4gPSAwOyBuIDwgcnNzLT5udW07ICsrbikgew0KPiAr CQkJZm9yIChuID0gMDsgbiA8IHJzcy0+cXVldWVfbnVtOyArK24pIHsNCj4gIAkJCQlpZiAocnNz LT5xdWV1ZVtuXSA+PSBwcml2LT5yeHFzX24pIHsNCj4gIAkJCQkJcnRlX2Zsb3dfZXJyb3Jfc2V0 KGVycm9yLCBFSU5WQUwsDQo+IA0KPiBSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwNCj4gQEAg LTcxNSwxNiArNjkwLDE2IEBAIG1seDVfZmxvd19jb252ZXJ0X2FjdGlvbnMoc3RydWN0IHJ0ZV9l dGhfZGV2DQo+ICpkZXYsDQo+ICAJCQkJCXJldHVybiAtcnRlX2Vycm5vOw0KPiAgCQkJCX0NCj4g IAkJCX0NCj4gLQkJCWZvciAobiA9IDA7IG4gPCByc3MtPm51bTsgKytuKQ0KPiAtCQkJCXBhcnNl ci0+cXVldWVzW25dID0gcnNzLT5xdWV1ZVtuXTsNCj4gLQkJCXBhcnNlci0+cXVldWVzX24gPSBy c3MtPm51bTsNCj4gLQkJCWlmIChtbHg1X2Zsb3dfY29udmVydF9yc3NfY29uZihwYXJzZXIsIHJz cy0NCj4gPnJzc19jb25mKSkgew0KPiAtCQkJCXJ0ZV9mbG93X2Vycm9yX3NldChlcnJvciwgRUlO VkFMLA0KPiAtDQo+IFJURV9GTE9XX0VSUk9SX1RZUEVfQUNUSU9OLA0KPiAtCQkJCQkJICAgYWN0 aW9ucywNCj4gLQkJCQkJCSAgICJ3cm9uZyBSU1MgY29uZmlndXJhdGlvbiIpOw0KPiAtCQkJCXJl dHVybiAtcnRlX2Vycm5vOw0KPiAtCQkJfQ0KPiArCQkJcGFyc2VyLT5yc3NfY29uZiA9IChzdHJ1 Y3QgcnRlX2Zsb3dfYWN0aW9uX3Jzcyl7DQo+ICsJCQkJLnR5cGVzID0gcnNzLT50eXBlcywNCj4g KwkJCQkua2V5X2xlbiA9IHJzc19rZXlfbGVuLA0KPiArCQkJCS5xdWV1ZV9udW0gPSByc3MtPnF1 ZXVlX251bSwNCj4gKwkJCQkua2V5ID0gbWVtY3B5KHBhcnNlci0+cnNzX2tleSwgcnNzX2tleSwN Cj4gKwkJCQkJICAgICAgc2l6ZW9mKCpyc3Nfa2V5KSAqIHJzc19rZXlfbGVuKSwNCj4gKwkJCQku cXVldWUgPSBtZW1jcHkocGFyc2VyLT5xdWV1ZXMsIHJzcy0NCj4gPnF1ZXVlLA0KPiArCQkJCQkJ c2l6ZW9mKCpyc3MtPnF1ZXVlKSAqDQo+ICsJCQkJCQlyc3MtPnF1ZXVlX251bSksDQo+ICsJCQl9 Ow0KPiAgCQl9IGVsc2UgaWYgKGFjdGlvbnMtPnR5cGUgPT0gUlRFX0ZMT1dfQUNUSU9OX1RZUEVf TUFSSykNCj4gew0KPiAgCQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9tYXJrICptYXJr ID0NCj4gIAkJCQkoY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9tYXJrICopDQo+IEBAIC03 NjksNyArNzQ0LDcgQEAgbWx4NV9mbG93X2NvbnZlcnRfYWN0aW9ucyhzdHJ1Y3QgcnRlX2V0aF9k ZXYgKmRldiwNCj4gIAkJcGFyc2VyLT5kcm9wID0gMTsNCj4gIAlpZiAocGFyc2VyLT5kcm9wICYm IHBhcnNlci0+bWFyaykNCj4gIAkJcGFyc2VyLT5tYXJrID0gMDsNCj4gLQlpZiAoIXBhcnNlci0+ cXVldWVzX24gJiYgIXBhcnNlci0+ZHJvcCkgew0KPiArCWlmICghcGFyc2VyLT5yc3NfY29uZi5x dWV1ZV9udW0gJiYgIXBhcnNlci0+ZHJvcCkgew0KPiAgCQlydGVfZmxvd19lcnJvcl9zZXQoZXJy b3IsIEVOT1RTVVAsDQo+IFJURV9GTE9XX0VSUk9SX1RZUEVfSEFORExFLA0KPiAgCQkJCSAgIE5V TEwsICJubyB2YWxpZCBhY3Rpb24iKTsNCj4gIAkJcmV0dXJuIC1ydGVfZXJybm87DQo+IEBAIC05 NTEsNyArOTI2LDcgQEAgbWx4NV9mbG93X2NvbnZlcnRfZmluYWxpc2Uoc3RydWN0IG1seDVfZmxv d19wYXJzZQ0KPiAqcGFyc2VyKQ0KPiAgCXVuc2lnbmVkIGludCBpOw0KPiANCj4gIAkvKiBSZW1v dmUgYW55IG90aGVyIGZsb3cgbm90IG1hdGNoaW5nIHRoZSBwYXR0ZXJuLiAqLw0KPiAtCWlmIChw YXJzZXItPnF1ZXVlc19uID09IDEgJiYgIXBhcnNlci0+cnNzX2NvbmYucnNzX2hmKSB7DQo+ICsJ aWYgKHBhcnNlci0+cnNzX2NvbmYucXVldWVfbnVtID09IDEgJiYgIXBhcnNlci0+cnNzX2NvbmYu dHlwZXMpIHsNCj4gIAkJZm9yIChpID0gMDsgaSAhPSBoYXNoX3J4cV9pbml0X247ICsraSkgew0K PiAgCQkJaWYgKGkgPT0gSEFTSF9SWFFfRVRIKQ0KPiAgCQkJCWNvbnRpbnVlOw0KPiBAQCAtOTc5 LDcgKzk1NCw3IEBAIG1seDVfZmxvd19jb252ZXJ0X2ZpbmFsaXNlKHN0cnVjdCBtbHg1X2Zsb3df cGFyc2UNCj4gKnBhcnNlcikNCj4gIAl9DQo+ICAJLyogUmVtb3ZlIGltcG9zc2libGUgZmxvdyBh Y2NvcmRpbmcgdG8gdGhlIFJTUyBjb25maWd1cmF0aW9uLiAqLw0KPiAgCWlmIChoYXNoX3J4cV9p bml0W3BhcnNlci0+bGF5ZXJdLmRwZGtfcnNzX2hmICYNCj4gLQkgICAgcGFyc2VyLT5yc3NfY29u Zi5yc3NfaGYpIHsNCj4gKwkgICAgcGFyc2VyLT5yc3NfY29uZi50eXBlcykgew0KPiAgCQkvKiBS ZW1vdmUgYW55IG90aGVyIGZsb3cuICovDQo+ICAJCWZvciAoaSA9IGhtaW47IGkgIT0gKGhtYXgg KyAxKTsgKytpKSB7DQo+ICAJCQlpZiAoKGkgPT0gcGFyc2VyLT5sYXllcikgfHwNCj4gQEAgLTk5 MCw3ICs5NjUsNyBAQCBtbHg1X2Zsb3dfY29udmVydF9maW5hbGlzZShzdHJ1Y3QgbWx4NV9mbG93 X3BhcnNlDQo+ICpwYXJzZXIpDQo+ICAJCX0NCj4gIAl9IGVsc2UgIGlmICghcGFyc2VyLT5xdWV1 ZVtpcF0uaWJ2X2F0dHIpIHsNCj4gIAkJLyogbm8gUlNTIHBvc3NpYmxlIHdpdGggdGhlIGN1cnJl bnQgY29uZmlndXJhdGlvbi4gKi8NCj4gLQkJcGFyc2VyLT5xdWV1ZXNfbiA9IDE7DQo+ICsJCXBh cnNlci0+cnNzX2NvbmYucXVldWVfbnVtID0gMTsNCj4gIAkJcmV0dXJuOw0KPiAgCX0NCj4gIGZp bGw6DQo+IEBAIC0xMTE5LDcgKzEwOTQsNyBAQCBtbHg1X2Zsb3dfY29udmVydChzdHJ1Y3QgcnRl X2V0aF9kZXYgKmRldiwNCj4gIAkJZm9yIChpID0gMDsgaSAhPSBoYXNoX3J4cV9pbml0X247ICsr aSkgew0KPiAgCQkJdW5zaWduZWQgaW50IG9mZnNldDsNCj4gDQo+IC0JCQlpZiAoIShwYXJzZXIt PnJzc19jb25mLnJzc19oZiAmDQo+ICsJCQlpZiAoIShwYXJzZXItPnJzc19jb25mLnR5cGVzICYN Cj4gIAkJCSAgICAgIGhhc2hfcnhxX2luaXRbaV0uZHBka19yc3NfaGYpICYmDQo+ICAJCQkgICAg KGkgIT0gSEFTSF9SWFFfRVRIKSkNCj4gIAkJCQljb250aW51ZTsNCj4gQEAgLTE3ODcsMjAgKzE3 NjIsMjAgQEAgbWx4NV9mbG93X2NyZWF0ZV9hY3Rpb25fcXVldWVfcnNzKHN0cnVjdA0KPiBydGVf ZXRoX2RldiAqZGV2LA0KPiAgCQkJY29udGludWU7DQo+ICAJCWZsb3ctPmZyeHFbaV0uaHJ4cSA9 DQo+ICAJCQltbHg1X2hyeHFfZ2V0KGRldiwNCj4gLQkJCQkgICAgICBwYXJzZXItPnJzc19jb25m LnJzc19rZXksDQo+IC0JCQkJICAgICAgcGFyc2VyLT5yc3NfY29uZi5yc3Nfa2V5X2xlbiwNCj4g KwkJCQkgICAgICBwYXJzZXItPnJzc19jb25mLmtleSwNCj4gKwkJCQkgICAgICBwYXJzZXItPnJz c19jb25mLmtleV9sZW4sDQo+ICAJCQkJICAgICAgaGFzaF9maWVsZHMsDQo+IC0JCQkJICAgICAg cGFyc2VyLT5xdWV1ZXMsDQo+IC0JCQkJICAgICAgcGFyc2VyLT5xdWV1ZXNfbik7DQo+ICsJCQkJ ICAgICAgcGFyc2VyLT5yc3NfY29uZi5xdWV1ZSwNCj4gKwkJCQkgICAgICBwYXJzZXItPnJzc19j b25mLnF1ZXVlX251bSk7DQo+ICAJCWlmIChmbG93LT5mcnhxW2ldLmhyeHEpDQo+ICAJCQljb250 aW51ZTsNCj4gIAkJZmxvdy0+ZnJ4cVtpXS5ocnhxID0NCj4gIAkJCW1seDVfaHJ4cV9uZXcoZGV2 LA0KPiAtCQkJCSAgICAgIHBhcnNlci0+cnNzX2NvbmYucnNzX2tleSwNCj4gLQkJCQkgICAgICBw YXJzZXItPnJzc19jb25mLnJzc19rZXlfbGVuLA0KPiArCQkJCSAgICAgIHBhcnNlci0+cnNzX2Nv bmYua2V5LA0KPiArCQkJCSAgICAgIHBhcnNlci0+cnNzX2NvbmYua2V5X2xlbiwNCj4gIAkJCQkg ICAgICBoYXNoX2ZpZWxkcywNCj4gLQkJCQkgICAgICBwYXJzZXItPnF1ZXVlcywNCj4gLQkJCQkg ICAgICBwYXJzZXItPnF1ZXVlc19uKTsNCj4gKwkJCQkgICAgICBwYXJzZXItPnJzc19jb25mLnF1 ZXVlLA0KPiArCQkJCSAgICAgIHBhcnNlci0+cnNzX2NvbmYucXVldWVfbnVtKTsNCj4gIAkJaWYg KCFmbG93LT5mcnhxW2ldLmhyeHEpIHsNCj4gIAkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQo ZXJyb3IsIEVOT01FTSwNCj4gDQo+IFJURV9GTE9XX0VSUk9SX1RZUEVfSEFORExFLA0KPiBAQCAt MTg3MSw5ICsxODQ2LDkgQEAgbWx4NV9mbG93X2NyZWF0ZV9hY3Rpb25fcXVldWUoc3RydWN0DQo+ IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJCQkJICAgTlVMTCwgImludGVybmFsIGVycm9yIGluIGZs b3cgY3JlYXRpb24iKTsNCj4gIAkJZ290byBlcnJvcjsNCj4gIAl9DQo+IC0JZm9yIChpID0gMDsg aSAhPSBwYXJzZXItPnF1ZXVlc19uOyArK2kpIHsNCj4gKwlmb3IgKGkgPSAwOyBpICE9IHBhcnNl ci0+cnNzX2NvbmYucXVldWVfbnVtOyArK2kpIHsNCj4gIAkJc3RydWN0IG1seDVfcnhxX2RhdGEg KnEgPQ0KPiAtCQkJKCpwcml2LT5yeHFzKVtwYXJzZXItPnF1ZXVlc1tpXV07DQo+ICsJCQkoKnBy aXYtPnJ4cXMpW3BhcnNlci0+cnNzX2NvbmYucXVldWVbaV1dOw0KPiANCj4gIAkJcS0+bWFyayB8 PSBwYXJzZXItPm1hcms7DQo+ICAJfQ0KPiBAQCAtMTkzNyw3ICsxOTEyLDggQEAgbWx4NV9mbG93 X2xpc3RfY3JlYXRlKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAgCWlmIChyZXQpDQo+ICAJ CWdvdG8gZXhpdDsNCj4gIAlmbG93ID0gcnRlX2NhbGxvYyhfX2Z1bmNfXywgMSwNCj4gLQkJCSAg c2l6ZW9mKCpmbG93KSArIHBhcnNlci5xdWV1ZXNfbiAqIHNpemVvZih1aW50MTZfdCksDQo+ICsJ CQkgIHNpemVvZigqZmxvdykgKw0KPiArCQkJICBwYXJzZXIucnNzX2NvbmYucXVldWVfbnVtICog c2l6ZW9mKHVpbnQxNl90KSwNCj4gIAkJCSAgMCk7DQo+ICAJaWYgKCFmbG93KSB7DQo+ICAJCXJ0 ZV9mbG93X2Vycm9yX3NldChlcnJvciwgRU5PTUVNLA0KPiBAQCAtMTk0NiwxNSArMTkyMiwyMCBA QCBtbHg1X2Zsb3dfbGlzdF9jcmVhdGUoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJCQkJ ICAgImNhbm5vdCBhbGxvY2F0ZSBmbG93IG1lbW9yeSIpOw0KPiAgCQlyZXR1cm4gTlVMTDsNCj4g IAl9DQo+IC0JLyogQ29weSBxdWV1ZXMgY29uZmlndXJhdGlvbi4gKi8NCj4gKwkvKiBDb3B5IGNv bmZpZ3VyYXRpb24uICovDQo+ICAJZmxvdy0+cXVldWVzID0gKHVpbnQxNl90ICgqKVtdKShmbG93 ICsgMSk7DQo+IC0JbWVtY3B5KGZsb3ctPnF1ZXVlcywgcGFyc2VyLnF1ZXVlcywgcGFyc2VyLnF1 ZXVlc19uICoNCj4gc2l6ZW9mKHVpbnQxNl90KSk7DQo+IC0JZmxvdy0+cXVldWVzX24gPSBwYXJz ZXIucXVldWVzX247DQo+ICsJZmxvdy0+cnNzX2NvbmYgPSAoc3RydWN0IHJ0ZV9mbG93X2FjdGlv bl9yc3Mpew0KPiArCQkudHlwZXMgPSBwYXJzZXIucnNzX2NvbmYudHlwZXMsDQo+ICsJCS5rZXlf bGVuID0gcGFyc2VyLnJzc19jb25mLmtleV9sZW4sDQo+ICsJCS5xdWV1ZV9udW0gPSBwYXJzZXIu cnNzX2NvbmYucXVldWVfbnVtLA0KPiArCQkua2V5ID0gbWVtY3B5KGZsb3ctPnJzc19rZXksIHBh cnNlci5yc3NfY29uZi5rZXksDQo+ICsJCQkgICAgICBzaXplb2YoKnBhcnNlci5yc3NfY29uZi5r ZXkpICoNCj4gKwkJCSAgICAgIHBhcnNlci5yc3NfY29uZi5rZXlfbGVuKSwNCj4gKwkJLnF1ZXVl ID0gbWVtY3B5KGZsb3ctPnF1ZXVlcywgcGFyc2VyLnJzc19jb25mLnF1ZXVlLA0KPiArCQkJCXNp emVvZigqcGFyc2VyLnJzc19jb25mLnF1ZXVlKSAqDQo+ICsJCQkJcGFyc2VyLnJzc19jb25mLnF1 ZXVlX251bSksDQo+ICsJfTsNCj4gIAlmbG93LT5tYXJrID0gcGFyc2VyLm1hcms7DQo+IC0JLyog Q29weSBSU1MgY29uZmlndXJhdGlvbi4gKi8NCj4gLQlmbG93LT5yc3NfY29uZiA9IHBhcnNlci5y c3NfY29uZjsNCj4gLQlmbG93LT5yc3NfY29uZi5yc3Nfa2V5ID0gZmxvdy0+cnNzX2tleTsNCj4g LQltZW1jcHkoZmxvdy0+cnNzX2tleSwgcGFyc2VyLnJzc19rZXksDQo+IHBhcnNlci5yc3NfY29u Zi5yc3Nfa2V5X2xlbik7DQo+ICAJLyogZmluYWxpc2UgdGhlIGZsb3cuICovDQo+ICAJaWYgKHBh cnNlci5kcm9wKQ0KPiAgCQlyZXQgPSBtbHg1X2Zsb3dfY3JlYXRlX2FjdGlvbl9xdWV1ZV9kcm9w KGRldiwgJnBhcnNlciwNCj4gZmxvdywNCj4gQEAgLTIwMzQsNyArMjAxNSw3IEBAIG1seDVfZmxv d19saXN0X2Rlc3Ryb3koc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+IHN0cnVjdCBtbHg1X2Zs b3dzICpsaXN0LA0KPiANCj4gIAlpZiAoZmxvdy0+ZHJvcCB8fCAhZmxvdy0+bWFyaykNCj4gIAkJ Z290byBmcmVlOw0KPiAtCWZvciAoaSA9IDA7IGkgIT0gZmxvdy0+cXVldWVzX247ICsraSkgew0K PiArCWZvciAoaSA9IDA7IGkgIT0gZmxvdy0+cnNzX2NvbmYucXVldWVfbnVtOyArK2kpIHsNCj4g IAkJc3RydWN0IHJ0ZV9mbG93ICp0bXA7DQo+ICAJCWludCBtYXJrID0gMDsNCj4gDQo+IEBAIC0y MzQ0LDE5ICsyMzI1LDE5IEBAIG1seDVfZmxvd19zdGFydChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl diwgc3RydWN0DQo+IG1seDVfZmxvd3MgKmxpc3QpDQo+ICAJCQlpZiAoIWZsb3ctPmZyeHFbaV0u aWJ2X2F0dHIpDQo+ICAJCQkJY29udGludWU7DQo+ICAJCQlmbG93LT5mcnhxW2ldLmhyeHEgPQ0K PiAtCQkJCW1seDVfaHJ4cV9nZXQoZGV2LCBmbG93LT5yc3NfY29uZi5yc3Nfa2V5LA0KPiAtCQkJ CQkgICAgICBmbG93LT5yc3NfY29uZi5yc3Nfa2V5X2xlbiwNCj4gKwkJCQltbHg1X2hyeHFfZ2V0 KGRldiwgZmxvdy0+cnNzX2NvbmYua2V5LA0KPiArCQkJCQkgICAgICBmbG93LT5yc3NfY29uZi5r ZXlfbGVuLA0KPiAgCQkJCQkgICAgICBoYXNoX3J4cV9pbml0W2ldLmhhc2hfZmllbGRzLA0KPiAt CQkJCQkgICAgICAoKmZsb3ctPnF1ZXVlcyksDQo+IC0JCQkJCSAgICAgIGZsb3ctPnF1ZXVlc19u KTsNCj4gKwkJCQkJICAgICAgZmxvdy0+cnNzX2NvbmYucXVldWUsDQo+ICsJCQkJCSAgICAgIGZs b3ctPnJzc19jb25mLnF1ZXVlX251bSk7DQo+ICAJCQlpZiAoZmxvdy0+ZnJ4cVtpXS5ocnhxKQ0K PiAgCQkJCWdvdG8gZmxvd19jcmVhdGU7DQo+ICAJCQlmbG93LT5mcnhxW2ldLmhyeHEgPQ0KPiAt CQkJCW1seDVfaHJ4cV9uZXcoZGV2LCBmbG93LT5yc3NfY29uZi5yc3Nfa2V5LA0KPiAtCQkJCQkg ICAgICBmbG93LT5yc3NfY29uZi5yc3Nfa2V5X2xlbiwNCj4gKwkJCQltbHg1X2hyeHFfbmV3KGRl diwgZmxvdy0+cnNzX2NvbmYua2V5LA0KPiArCQkJCQkgICAgICBmbG93LT5yc3NfY29uZi5rZXlf bGVuLA0KPiAgCQkJCQkgICAgICBoYXNoX3J4cV9pbml0W2ldLmhhc2hfZmllbGRzLA0KPiAtCQkJ CQkgICAgICAoKmZsb3ctPnF1ZXVlcyksDQo+IC0JCQkJCSAgICAgIGZsb3ctPnF1ZXVlc19uKTsN Cj4gKwkJCQkJICAgICAgZmxvdy0+cnNzX2NvbmYucXVldWUsDQo+ICsJCQkJCSAgICAgIGZsb3ct PnJzc19jb25mLnF1ZXVlX251bSk7DQo+ICAJCQlpZiAoIWZsb3ctPmZyeHFbaV0uaHJ4cSkgew0K PiAgCQkJCURSVl9MT0coREVCVUcsDQo+ICAJCQkJCSJwb3J0ICV1IGZsb3cgJXAgY2Fubm90IGJl IGFwcGxpZWQiLA0KPiBAQCAtMjM4MCw4ICsyMzYxLDggQEAgbWx4NV9mbG93X3N0YXJ0KHN0cnVj dCBydGVfZXRoX2RldiAqZGV2LCBzdHJ1Y3QNCj4gbWx4NV9mbG93cyAqbGlzdCkNCj4gIAkJfQ0K PiAgCQlpZiAoIWZsb3ctPm1hcmspDQo+ICAJCQljb250aW51ZTsNCj4gLQkJZm9yIChpID0gMDsg aSAhPSBmbG93LT5xdWV1ZXNfbjsgKytpKQ0KPiAtCQkJKCpwcml2LT5yeHFzKVsoKmZsb3ctPnF1 ZXVlcylbaV1dLT5tYXJrID0gMTsNCj4gKwkJZm9yIChpID0gMDsgaSAhPSBmbG93LT5yc3NfY29u Zi5xdWV1ZV9udW07ICsraSkNCj4gKwkJCSgqcHJpdi0+cnhxcylbZmxvdy0+cnNzX2NvbmYucXVl dWVbaV1dLT5tYXJrID0gMTsNCj4gIAl9DQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IEBAIC0yNDU4 LDggKzI0MzksMTAgQEAgbWx4NV9jdHJsX2Zsb3dfdmxhbihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl diwNCj4gIAl9Ow0KPiAgCXVpbnQxNl90IHF1ZXVlW3ByaXYtPnJldGFfaWR4X25dOw0KPiAgCXN0 cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzIGFjdGlvbl9yc3MgPSB7DQo+IC0JCS5yc3NfY29uZiA9 ICZwcml2LT5yc3NfY29uZiwNCj4gLQkJLm51bSA9IHByaXYtPnJldGFfaWR4X24sDQo+ICsJCS50 eXBlcyA9IHByaXYtPnJzc19jb25mLnJzc19oZiwNCj4gKwkJLmtleV9sZW4gPSBwcml2LT5yc3Nf Y29uZi5yc3Nfa2V5X2xlbiwNCj4gKwkJLnF1ZXVlX251bSA9IHByaXYtPnJldGFfaWR4X24sDQo+ ICsJCS5rZXkgPSBwcml2LT5yc3NfY29uZi5yc3Nfa2V5LA0KPiAgCQkucXVldWUgPSBxdWV1ZSwN Cj4gIAl9Ow0KPiAgCXN0cnVjdCBydGVfZmxvd19hY3Rpb24gYWN0aW9uc1tdID0gew0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4cS5jIGIvZHJpdmVycy9uZXQvbWx4NS9t bHg1X3J4cS5jDQo+IGluZGV4IGVkYTNiYTNkNS4uZDJiMjVlOGU4IDEwMDY0NA0KPiAtLS0gYS9k cml2ZXJzL25ldC9tbHg1L21seDVfcnhxLmMNCj4gKysrIGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1 X3J4cS5jDQo+IEBAIC0xMjE4LDggKzEyMTgsOCBAQCBtbHg1X3J4cV92ZXJpZnkoc3RydWN0IHJ0 ZV9ldGhfZGV2ICpkZXYpDQo+ICAgKiAgIFRoZSBWZXJicyBvYmplY3QgaW5pdGlhbGlzZWQsIE5V TEwgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiAgICovDQo+ICBzdHJ1Y3QgbWx4 NV9pbmRfdGFibGVfaWJ2ICoNCj4gLW1seDVfaW5kX3RhYmxlX2lidl9uZXcoc3RydWN0IHJ0ZV9l dGhfZGV2ICpkZXYsIHVpbnQxNl90IHF1ZXVlc1tdLA0KPiAtCQkgICAgICAgdWludDE2X3QgcXVl dWVzX24pDQo+ICttbHg1X2luZF90YWJsZV9pYnZfbmV3KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2 LCBjb25zdCB1aW50MTZfdCAqcXVldWVzLA0KPiArCQkgICAgICAgdWludDMyX3QgcXVldWVzX24p DQo+ICB7DQo+ICAJc3RydWN0IHByaXYgKnByaXYgPSBkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0K PiAgCXN0cnVjdCBtbHg1X2luZF90YWJsZV9pYnYgKmluZF90Ymw7DQo+IEBAIC0xMjg2LDggKzEy ODYsOCBAQCBtbHg1X2luZF90YWJsZV9pYnZfbmV3KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0K PiB1aW50MTZfdCBxdWV1ZXNbXSwNCj4gICAqICAgQW4gaW5kaXJlY3Rpb24gdGFibGUgaWYgZm91 bmQuDQo+ICAgKi8NCj4gIHN0cnVjdCBtbHg1X2luZF90YWJsZV9pYnYgKg0KPiAtbWx4NV9pbmRf dGFibGVfaWJ2X2dldChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwgdWludDE2X3QgcXVldWVzW10s DQo+IC0JCSAgICAgICB1aW50MTZfdCBxdWV1ZXNfbikNCj4gK21seDVfaW5kX3RhYmxlX2lidl9n ZXQoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsIGNvbnN0IHVpbnQxNl90ICpxdWV1ZXMsDQo+ICsJ CSAgICAgICB1aW50MzJfdCBxdWV1ZXNfbikNCj4gIHsNCj4gIAlzdHJ1Y3QgcHJpdiAqcHJpdiA9 IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ICAJc3RydWN0IG1seDVfaW5kX3RhYmxlX2lidiAq aW5kX3RibDsNCj4gQEAgLTEzOTEsOCArMTM5MSwxMCBAQCBtbHg1X2luZF90YWJsZV9pYnZfdmVy aWZ5KHN0cnVjdCBydGVfZXRoX2Rldg0KPiAqZGV2KQ0KPiAgICogICBUaGUgVmVyYnMgb2JqZWN0 IGluaXRpYWxpc2VkLCBOVUxMIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gICAq Lw0KPiAgc3RydWN0IG1seDVfaHJ4cSAqDQo+IC1tbHg1X2hyeHFfbmV3KHN0cnVjdCBydGVfZXRo X2RldiAqZGV2LCB1aW50OF90ICpyc3Nfa2V5LCB1aW50OF90DQo+IHJzc19rZXlfbGVuLA0KPiAt CSAgICAgIHVpbnQ2NF90IGhhc2hfZmllbGRzLCB1aW50MTZfdCBxdWV1ZXNbXSwgdWludDE2X3Qg cXVldWVzX24pDQo+ICttbHg1X2hyeHFfbmV3KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAr CSAgICAgIGNvbnN0IHVpbnQ4X3QgKnJzc19rZXksIHVpbnQzMl90IHJzc19rZXlfbGVuLA0KPiAr CSAgICAgIHVpbnQ2NF90IGhhc2hfZmllbGRzLA0KPiArCSAgICAgIGNvbnN0IHVpbnQxNl90ICpx dWV1ZXMsIHVpbnQzMl90IHF1ZXVlc19uKQ0KPiAgew0KPiAgCXN0cnVjdCBwcml2ICpwcml2ID0g ZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsNCj4gIAlzdHJ1Y3QgbWx4NV9ocnhxICpocnhxOw0KPiBA QCAtMTQwOCw2ICsxNDEwLDEwIEBAIG1seDVfaHJ4cV9uZXcoc3RydWN0IHJ0ZV9ldGhfZGV2ICpk ZXYsIHVpbnQ4X3QNCj4gKnJzc19rZXksIHVpbnQ4X3QgcnNzX2tleV9sZW4sDQo+ICAJCXJ0ZV9l cnJubyA9IEVOT01FTTsNCj4gIAkJcmV0dXJuIE5VTEw7DQo+ICAJfQ0KPiArCWlmICghcnNzX2tl eV9sZW4pIHsNCj4gKwkJcnNzX2tleV9sZW4gPSByc3NfaGFzaF9kZWZhdWx0X2tleV9sZW47DQo+ ICsJCXJzc19rZXkgPSByc3NfaGFzaF9kZWZhdWx0X2tleTsNCj4gKwl9DQo+ICAJcXAgPSBtbHg1 X2dsdWUtPmNyZWF0ZV9xcF9leA0KPiAgCQkocHJpdi0+Y3R4LA0KPiAgCQkgJihzdHJ1Y3QgaWJ2 X3FwX2luaXRfYXR0cl9leCl7DQo+IEBAIC0xNDE5LDcgKzE0MjUsNyBAQCBtbHg1X2hyeHFfbmV3 KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LCB1aW50OF90DQo+ICpyc3Nfa2V5LCB1aW50OF90IHJz c19rZXlfbGVuLA0KPiAgCQkJLnJ4X2hhc2hfY29uZiA9IChzdHJ1Y3QgaWJ2X3J4X2hhc2hfY29u Zil7DQo+ICAJCQkJLnJ4X2hhc2hfZnVuY3Rpb24gPQ0KPiBJQlZfUlhfSEFTSF9GVU5DX1RPRVBM SVRaLA0KPiAgCQkJCS5yeF9oYXNoX2tleV9sZW4gPSByc3Nfa2V5X2xlbiwNCj4gLQkJCQkucnhf aGFzaF9rZXkgPSByc3Nfa2V5LA0KPiArCQkJCS5yeF9oYXNoX2tleSA9ICh2b2lkICopKHVpbnRw dHJfdClyc3Nfa2V5LA0KPiAgCQkJCS5yeF9oYXNoX2ZpZWxkc19tYXNrID0gaGFzaF9maWVsZHMs DQo+ICAJCQl9LA0KPiAgCQkJLnJ3cV9pbmRfdGJsID0gaW5kX3RibC0+aW5kX3RhYmxlLA0KPiBA QCAtMTQ2OSw4ICsxNDc1LDEwIEBAIG1seDVfaHJ4cV9uZXcoc3RydWN0IHJ0ZV9ldGhfZGV2ICpk ZXYsIHVpbnQ4X3QNCj4gKnJzc19rZXksIHVpbnQ4X3QgcnNzX2tleV9sZW4sDQo+ICAgKiAgIEFu IGhhc2ggUnggcXVldWUgb24gc3VjY2Vzcy4NCj4gICAqLw0KPiAgc3RydWN0IG1seDVfaHJ4cSAq DQo+IC1tbHg1X2hyeHFfZ2V0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LCB1aW50OF90ICpyc3Nf a2V5LCB1aW50OF90DQo+IHJzc19rZXlfbGVuLA0KPiAtCSAgICAgIHVpbnQ2NF90IGhhc2hfZmll bGRzLCB1aW50MTZfdCBxdWV1ZXNbXSwgdWludDE2X3QgcXVldWVzX24pDQo+ICttbHg1X2hyeHFf Z2V0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiArCSAgICAgIGNvbnN0IHVpbnQ4X3QgKnJz c19rZXksIHVpbnQzMl90IHJzc19rZXlfbGVuLA0KPiArCSAgICAgIHVpbnQ2NF90IGhhc2hfZmll bGRzLA0KPiArCSAgICAgIGNvbnN0IHVpbnQxNl90ICpxdWV1ZXMsIHVpbnQzMl90IHF1ZXVlc19u KQ0KPiAgew0KPiAgCXN0cnVjdCBwcml2ICpwcml2ID0gZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsN Cj4gIAlzdHJ1Y3QgbWx4NV9ocnhxICpocnhxOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv bWx4NS9tbHg1X3J4dHguaCBiL2RyaXZlcnMvbmV0L21seDUvbWx4NV9yeHR4LmgNCj4gaW5kZXgg MTRkNDQxOGQ5Li5jM2ExYWUyMTMgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L21seDUvbWx4 NV9yeHR4LmgNCj4gKysrIGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1X3J4dHguaA0KPiBAQCAtMTM0 LDcgKzEzNCw3IEBAIHN0cnVjdCBtbHg1X2luZF90YWJsZV9pYnYgew0KPiAgCUxJU1RfRU5UUlko bWx4NV9pbmRfdGFibGVfaWJ2KSBuZXh0OyAvKiBQb2ludGVyIHRvIHRoZSBuZXh0DQo+IGVsZW1l bnQuICovDQo+ICAJcnRlX2F0b21pYzMyX3QgcmVmY250OyAvKiBSZWZlcmVuY2UgY291bnRlci4g Ki8NCj4gIAlzdHJ1Y3QgaWJ2X3J3cV9pbmRfdGFibGUgKmluZF90YWJsZTsgLyoqPCBJbmRpcmVj dGlvbiB0YWJsZS4gKi8NCj4gLQl1aW50MTZfdCBxdWV1ZXNfbjsgLyoqPCBOdW1iZXIgb2YgcXVl dWVzIGluIHRoZSBsaXN0LiAqLw0KPiArCXVpbnQzMl90IHF1ZXVlc19uOyAvKio8IE51bWJlciBv ZiBxdWV1ZXMgaW4gdGhlIGxpc3QuICovDQo+ICAJdWludDE2X3QgcXVldWVzW107IC8qKjwgUXVl dWUgbGlzdC4gKi8NCj4gIH07DQo+IA0KPiBAQCAtMTQ1LDcgKzE0NSw3IEBAIHN0cnVjdCBtbHg1 X2hyeHEgew0KPiAgCXN0cnVjdCBtbHg1X2luZF90YWJsZV9pYnYgKmluZF90YWJsZTsgLyogSW5k aXJlY3Rpb24gdGFibGUuICovDQo+ICAJc3RydWN0IGlidl9xcCAqcXA7IC8qIFZlcmJzIHF1ZXVl IHBhaXIuICovDQo+ICAJdWludDY0X3QgaGFzaF9maWVsZHM7IC8qIFZlcmJzIEhhc2ggZmllbGRz LiAqLw0KPiAtCXVpbnQ4X3QgcnNzX2tleV9sZW47IC8qIEhhc2gga2V5IGxlbmd0aCBpbiBieXRl cy4gKi8NCj4gKwl1aW50MzJfdCByc3Nfa2V5X2xlbjsgLyogSGFzaCBrZXkgbGVuZ3RoIGluIGJ5 dGVzLiAqLw0KPiAgCXVpbnQ4X3QgcnNzX2tleVtdOyAvKiBIYXNoIGtleS4gKi8NCj4gIH07DQo+ IA0KPiBAQCAtMjM4LDIwICsyMzgsMjIgQEAgaW50IG1seDVfcnhxX3JlbGVhc2FibGUoc3RydWN0 IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+IHVpbnQxNl90IGlkeCk7DQo+ICBpbnQgbWx4NV9yeHFfdmVy aWZ5KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KTsNCj4gIGludCByeHFfYWxsb2NfZWx0cyhzdHJ1 Y3QgbWx4NV9yeHFfY3RybCAqcnhxX2N0cmwpOw0KPiAgc3RydWN0IG1seDVfaW5kX3RhYmxlX2li diAqbWx4NV9pbmRfdGFibGVfaWJ2X25ldyhzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4gKmRldiwNCj4g LQkJCQkJCSAgdWludDE2X3QgcXVldWVzW10sDQo+IC0JCQkJCQkgIHVpbnQxNl90IHF1ZXVlc19u KTsNCj4gKwkJCQkJCSAgY29uc3QgdWludDE2X3QgKnF1ZXVlcywNCj4gKwkJCQkJCSAgdWludDMy X3QgcXVldWVzX24pOw0KPiAgc3RydWN0IG1seDVfaW5kX3RhYmxlX2lidiAqbWx4NV9pbmRfdGFi bGVfaWJ2X2dldChzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4gKmRldiwNCj4gLQkJCQkJCSAgdWludDE2 X3QgcXVldWVzW10sDQo+IC0JCQkJCQkgIHVpbnQxNl90IHF1ZXVlc19uKTsNCj4gKwkJCQkJCSAg Y29uc3QgdWludDE2X3QgKnF1ZXVlcywNCj4gKwkJCQkJCSAgdWludDMyX3QgcXVldWVzX24pOw0K PiAgaW50IG1seDVfaW5kX3RhYmxlX2lidl9yZWxlYXNlKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2 LA0KPiAgCQkJICAgICAgIHN0cnVjdCBtbHg1X2luZF90YWJsZV9pYnYgKmluZF90YmwpOw0KPiAg aW50IG1seDVfaW5kX3RhYmxlX2lidl92ZXJpZnkoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpOw0K PiAtc3RydWN0IG1seDVfaHJ4cSAqbWx4NV9ocnhxX25ldyhzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl diwgdWludDhfdA0KPiAqcnNzX2tleSwNCj4gLQkJCQl1aW50OF90IHJzc19rZXlfbGVuLCB1aW50 NjRfdCBoYXNoX2ZpZWxkcywNCj4gLQkJCQl1aW50MTZfdCBxdWV1ZXNbXSwgdWludDE2X3QgcXVl dWVzX24pOw0KPiAtc3RydWN0IG1seDVfaHJ4cSAqbWx4NV9ocnhxX2dldChzdHJ1Y3QgcnRlX2V0 aF9kZXYgKmRldiwgdWludDhfdA0KPiAqcnNzX2tleSwNCj4gLQkJCQl1aW50OF90IHJzc19rZXlf bGVuLCB1aW50NjRfdCBoYXNoX2ZpZWxkcywNCj4gLQkJCQl1aW50MTZfdCBxdWV1ZXNbXSwgdWlu dDE2X3QgcXVldWVzX24pOw0KPiArc3RydWN0IG1seDVfaHJ4cSAqbWx4NV9ocnhxX25ldyhzdHJ1 Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gKwkJCQljb25zdCB1aW50OF90ICpyc3Nfa2V5LCB1aW50 MzJfdCByc3Nfa2V5X2xlbiwNCj4gKwkJCQl1aW50NjRfdCBoYXNoX2ZpZWxkcywNCj4gKwkJCQlj b25zdCB1aW50MTZfdCAqcXVldWVzLCB1aW50MzJfdCBxdWV1ZXNfbik7DQo+ICtzdHJ1Y3QgbWx4 NV9ocnhxICptbHg1X2hyeHFfZ2V0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiArCQkJCWNv bnN0IHVpbnQ4X3QgKnJzc19rZXksIHVpbnQzMl90IHJzc19rZXlfbGVuLA0KPiArCQkJCXVpbnQ2 NF90IGhhc2hfZmllbGRzLA0KPiArCQkJCWNvbnN0IHVpbnQxNl90ICpxdWV1ZXMsIHVpbnQzMl90 IHF1ZXVlc19uKTsNCj4gIGludCBtbHg1X2hyeHFfcmVsZWFzZShzdHJ1Y3QgcnRlX2V0aF9kZXYg KmRldiwgc3RydWN0IG1seDVfaHJ4cSAqaHhycSk7DQo+ICBpbnQgbWx4NV9ocnhxX2lidl92ZXJp Znkoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpOw0KPiAgdWludDY0X3QgbWx4NV9nZXRfcnhfcG9y dF9vZmZsb2Fkcyh2b2lkKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zZmNfZmxv dy5jIGIvZHJpdmVycy9uZXQvc2ZjL3NmY19mbG93LmMNCj4gaW5kZXggMDU2NDA1NTE1Li4xYTJj MDI5OWMgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zZmNfZmxvdy5jDQo+ICsrKyBi L2RyaXZlcnMvbmV0L3NmYy9zZmNfZmxvdy5jDQo+IEBAIC0xMjM0LDEzICsxMjM0LDExIEBAIHNm Y19mbG93X3BhcnNlX3JzcyhzdHJ1Y3Qgc2ZjX2FkYXB0ZXIgKnNhLA0KPiAgCXN0cnVjdCBzZmNf cnhxICpyeHE7DQo+ICAJdW5zaWduZWQgaW50IHJ4cV9od19pbmRleF9taW47DQo+ICAJdW5zaWdu ZWQgaW50IHJ4cV9od19pbmRleF9tYXg7DQo+IC0JY29uc3Qgc3RydWN0IHJ0ZV9ldGhfcnNzX2Nv bmYgKnJzc19jb25mID0gcnNzLT5yc3NfY29uZjsNCj4gLQl1aW50NjRfdCByc3NfaGY7DQo+IC0J dWludDhfdCAqcnNzX2tleSA9IE5VTEw7DQo+ICsJY29uc3QgdWludDhfdCAqcnNzX2tleTsNCj4g IAlzdHJ1Y3Qgc2ZjX2Zsb3dfcnNzICpzZmNfcnNzX2NvbmYgPSAmZmxvdy0+cnNzX2NvbmY7DQo+ ICAJdW5zaWduZWQgaW50IGk7DQo+IA0KPiAtCWlmIChyc3MtPm51bSA9PSAwKQ0KPiArCWlmIChy c3MtPnF1ZXVlX251bSA9PSAwKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ICAJcnhxX3N3 X2luZGV4ID0gc2EtPnJ4cV9jb3VudCAtIDE7DQo+IEBAIC0xMjQ4LDcgKzEyNDYsNyBAQCBzZmNf Zmxvd19wYXJzZV9yc3Moc3RydWN0IHNmY19hZGFwdGVyICpzYSwNCj4gIAlyeHFfaHdfaW5kZXhf bWluID0gcnhxLT5od19pbmRleDsNCj4gIAlyeHFfaHdfaW5kZXhfbWF4ID0gMDsNCj4gDQo+IC0J Zm9yIChpID0gMDsgaSA8IHJzcy0+bnVtOyArK2kpIHsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgcnNz LT5xdWV1ZV9udW07ICsraSkgew0KPiAgCQlyeHFfc3dfaW5kZXggPSByc3MtPnF1ZXVlW2ldOw0K PiANCj4gIAkJaWYgKHJ4cV9zd19pbmRleCA+PSBzYS0+cnhxX2NvdW50KQ0KPiBAQCAtMTI2Mywx NSArMTI2MSwxNCBAQCBzZmNfZmxvd19wYXJzZV9yc3Moc3RydWN0IHNmY19hZGFwdGVyICpzYSwN Cj4gIAkJCXJ4cV9od19pbmRleF9tYXggPSByeHEtPmh3X2luZGV4Ow0KPiAgCX0NCj4gDQo+IC0J cnNzX2hmID0gKHJzc19jb25mICE9IE5VTEwpID8gcnNzX2NvbmYtPnJzc19oZiA6IFNGQ19SU1Nf T0ZGTE9BRFM7DQo+IC0JaWYgKChyc3NfaGYgJiB+U0ZDX1JTU19PRkZMT0FEUykgIT0gMCkNCj4g KwlpZiAoKHJzcy0+dHlwZXMgJiB+U0ZDX1JTU19PRkZMT0FEUykgIT0gMCkNCj4gIAkJcmV0dXJu IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChyc3NfY29uZiAhPSBOVUxMKSB7DQo+IC0JCWlmIChyc3Nf Y29uZi0+cnNzX2tleV9sZW4gIT0gc2l6ZW9mKHNhLT5yc3Nfa2V5KSkNCj4gKwlpZiAocnNzLT5r ZXlfbGVuKSB7DQo+ICsJCWlmIChyc3MtPmtleV9sZW4gIT0gc2l6ZW9mKHNhLT5yc3Nfa2V5KSkN Cj4gIAkJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQkJcnNzX2tleSA9IHJzc19jb25mLT5yc3Nf a2V5Ow0KPiArCQlyc3Nfa2V5ID0gcnNzLT5rZXk7DQo+ICAJfSBlbHNlIHsNCj4gIAkJcnNzX2tl eSA9IHNhLT5yc3Nfa2V5Ow0KPiAgCX0NCj4gQEAgLTEyODAsMTEgKzEyNzcsMTEgQEAgc2ZjX2Zs b3dfcGFyc2VfcnNzKHN0cnVjdCBzZmNfYWRhcHRlciAqc2EsDQo+IA0KPiAgCXNmY19yc3NfY29u Zi0+cnhxX2h3X2luZGV4X21pbiA9IHJ4cV9od19pbmRleF9taW47DQo+ICAJc2ZjX3Jzc19jb25m LT5yeHFfaHdfaW5kZXhfbWF4ID0gcnhxX2h3X2luZGV4X21heDsNCj4gLQlzZmNfcnNzX2NvbmYt PnJzc19oYXNoX3R5cGVzID0gc2ZjX3J0ZV90b19lZnhfaGFzaF90eXBlKHJzc19oZik7DQo+ICsJ c2ZjX3Jzc19jb25mLT5yc3NfaGFzaF90eXBlcyA9IHNmY19ydGVfdG9fZWZ4X2hhc2hfdHlwZShy c3MtDQo+ID50eXBlcyk7DQo+ICAJcnRlX21lbWNweShzZmNfcnNzX2NvbmYtPnJzc19rZXksIHJz c19rZXksIHNpemVvZihzYS0+cnNzX2tleSkpOw0KPiANCj4gIAlmb3IgKGkgPSAwOyBpIDwgUlRF X0RJTShzZmNfcnNzX2NvbmYtPnJzc190YmwpOyArK2kpIHsNCj4gLQkJdW5zaWduZWQgaW50IHJ4 cV9zd19pbmRleCA9IHJzcy0+cXVldWVbaSAlIHJzcy0+bnVtXTsNCj4gKwkJdW5zaWduZWQgaW50 IHJ4cV9zd19pbmRleCA9IHJzcy0+cXVldWVbaSAlIHJzcy0NCj4gPnF1ZXVlX251bV07DQo+ICAJ CXN0cnVjdCBzZmNfcnhxICpyeHEgPSBzYS0+cnhxX2luZm9bcnhxX3N3X2luZGV4XS5yeHE7DQo+ IA0KPiAgCQlzZmNfcnNzX2NvbmYtPnJzc190YmxbaV0gPSByeHEtPmh3X2luZGV4IC0NCj4gcnhx X2h3X2luZGV4X21pbjsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RhcC90YXBfZmxvdy5j IGIvZHJpdmVycy9uZXQvdGFwL3RhcF9mbG93LmMNCj4gaW5kZXggZmUyZjk0MDEwLi42NzE0NmFh YmEgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L3RhcC90YXBfZmxvdy5jDQo+ICsrKyBiL2Ry aXZlcnMvbmV0L3RhcC90YXBfZmxvdy5jDQo+IEBAIC0xMjE1LDcgKzEyMTUsNyBAQCBwcml2X2Zs b3dfcHJvY2VzcyhzdHJ1Y3QgcG1kX2ludGVybmFscyAqcG1kLA0KPiAgCQkJCWlmIChlcnIpDQo+ ICAJCQkJCWdvdG8gZXhpdF9hY3Rpb25fbm90X3N1cHBvcnRlZDsNCj4gIAkJCX0NCj4gLQkJCWlm IChmbG93ICYmIHJzcykNCj4gKwkJCWlmIChmbG93KQ0KPiAgCQkJCWVyciA9IHJzc19hZGRfYWN0 aW9ucyhmbG93LCBwbWQsIHJzcywgZXJyb3IpOw0KPiAgCQl9IGVsc2Ugew0KPiAgCQkJZ290byBl eGl0X2FjdGlvbl9ub3Rfc3VwcG9ydGVkOw0KPiBAQCAtMjA1MCw3ICsyMDUwLDcgQEAgc3RhdGlj IGludCByc3NfYWRkX2FjdGlvbnMoc3RydWN0IHJ0ZV9mbG93ICpmbG93LA0KPiBzdHJ1Y3QgcG1k X2ludGVybmFscyAqcG1kLA0KPiAgCQkJICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcikN Cj4gIHsNCj4gIAkvKiA0MDk2IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMg Zm9yIGEgQlBGIHByb2dyYW0gKi8NCj4gLQlpbnQgaTsNCj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4g IAlpbnQgZXJyOw0KPiAgCXN0cnVjdCByc3Nfa2V5IHJzc19lbnRyeSA9IHsgLmhhc2hfZmllbGRz ID0gMCwNCj4gIAkJCQkgICAgIC5rZXlfc2l6ZSA9IDAgfTsNCj4gQEAgLTIwNjYsOCArMjA2Niw4 IEBAIHN0YXRpYyBpbnQgcnNzX2FkZF9hY3Rpb25zKHN0cnVjdCBydGVfZmxvdyAqZmxvdywNCj4g c3RydWN0IHBtZF9pbnRlcm5hbHMgKnBtZCwNCj4gIAl9DQo+IA0KPiAgCS8qIFVwZGF0ZSBSU1Mg bWFwIGVudHJ5IHdpdGggcXVldWVzICovDQo+IC0JcnNzX2VudHJ5Lm5iX3F1ZXVlcyA9IHJzcy0+ bnVtOw0KPiAtCWZvciAoaSA9IDA7IGkgPCByc3MtPm51bTsgaSsrKQ0KPiArCXJzc19lbnRyeS5u Yl9xdWV1ZXMgPSByc3MtPnF1ZXVlX251bTsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgcnNzLT5xdWV1 ZV9udW07IGkrKykNCj4gIAkJcnNzX2VudHJ5LnF1ZXVlc1tpXSA9IHJzcy0+cXVldWVbaV07DQo+ ICAJcnNzX2VudHJ5Lmhhc2hfZmllbGRzID0NCj4gIAkJKDEgPDwgSEFTSF9GSUVMRF9JUFY0X0wz X0w0KSB8ICgxIDw8DQo+IEhBU0hfRklFTERfSVBWNl9MM19MNCk7DQo+IGRpZmYgLS1naXQgYS9l eGFtcGxlcy9pcHNlYy1zZWNndy9pcHNlYy5jIGIvZXhhbXBsZXMvaXBzZWMtc2VjZ3cvaXBzZWMu Yw0KPiBpbmRleCA1OTcxOTM3Y2YuLmVlMjQ5NzM1MiAxMDA2NDQNCj4gLS0tIGEvZXhhbXBsZXMv aXBzZWMtc2VjZ3cvaXBzZWMuYw0KPiArKysgYi9leGFtcGxlcy9pcHNlYy1zZWNndy9pcHNlYy5j DQo+IEBAIC0yMDMsOSArMjAzLDEzIEBAIGNyZWF0ZV9zZXNzaW9uKHN0cnVjdCBpcHNlY19jdHgg Kmlwc2VjX2N0eCwgc3RydWN0DQo+IGlwc2VjX3NhICpzYSkNCj4gIAkJCQkgICAgIGkgPCBldGhf ZGV2LT5kYXRhLT5uYl9yeF9xdWV1ZXM7ICsraSkNCj4gIAkJCQkJaWYgKGV0aF9kZXYtPmRhdGEt PnJ4X3F1ZXVlc1tpXSkNCj4gIAkJCQkJCXF1ZXVlW2orK10gPSBpOw0KPiAtCQkJCWFjdGlvbl9y c3MucnNzX2NvbmYgPSAmcnNzX2NvbmY7DQo+IC0JCQkJYWN0aW9uX3Jzcy5udW0gPSBqOw0KPiAt CQkJCWFjdGlvbl9yc3MucXVldWUgPSBxdWV1ZTsNCj4gKwkJCQlhY3Rpb25fcnNzID0gKHN0cnVj dCBydGVfZmxvd19hY3Rpb25fcnNzKXsNCj4gKwkJCQkJLnR5cGVzID0gcnNzX2NvbmYucnNzX2hm LA0KPiArCQkJCQkua2V5X2xlbiA9IHJzc19jb25mLnJzc19rZXlfbGVuLA0KPiArCQkJCQkucXVl dWVfbnVtID0gaiwNCj4gKwkJCQkJLmtleSA9IHJzc19rZXksDQo+ICsJCQkJCS5xdWV1ZSA9IHF1 ZXVlLA0KPiArCQkJCX07DQo+ICAJCQkJcmV0ID0gcnRlX2Zsb3dfdmFsaWRhdGUoc2EtPnBvcnRp ZCwgJnNhLT5hdHRyLA0KPiAgCQkJCQkJCXNhLT5wYXR0ZXJuLCBzYS0NCj4gPmFjdGlvbiwNCj4g IAkJCQkJCQkmZXJyKTsNCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZXRoZXIvcnRlX2Zsb3cu YyBiL2xpYi9saWJydGVfZXRoZXIvcnRlX2Zsb3cuYw0KPiBpbmRleCBiYjE5ZTI4YzYuLmNjNzgx OWI2YSAxMDA2NDQNCj4gLS0tIGEvbGliL2xpYnJ0ZV9ldGhlci9ydGVfZmxvdy5jDQo+ICsrKyBi L2xpYi9saWJydGVfZXRoZXIvcnRlX2Zsb3cuYw0KPiBAQCAtMzMwLDQwICszMzAsMjcgQEAgZmxv d19hY3Rpb25fY29uZl9jb3B5KHZvaWQgKmJ1ZiwgY29uc3Qgc3RydWN0DQo+IHJ0ZV9mbG93X2Fj dGlvbiAqYWN0aW9uKQ0KPiAgCQlvZmYgPSAwOw0KPiAgCQlpZiAoZHN0LnJzcykNCj4gIAkJCSpk c3QucnNzID0gKHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzKXsNCj4gLQkJCQkubnVtID0gc3Jj LnJzcy0+bnVtLA0KPiArCQkJCS50eXBlcyA9IHNyYy5yc3MtPnR5cGVzLA0KPiArCQkJCS5rZXlf bGVuID0gc3JjLnJzcy0+a2V5X2xlbiwNCj4gKwkJCQkucXVldWVfbnVtID0gc3JjLnJzcy0+cXVl dWVfbnVtLA0KPiAgCQkJfTsNCj4gIAkJb2ZmICs9IHNpemVvZigqc3JjLnJzcyk7DQo+IC0JCWlm IChzcmMucnNzLT5udW0pIHsNCj4gKwkJaWYgKHNyYy5yc3MtPmtleV9sZW4pIHsNCj4gIAkJCW9m ZiA9IFJURV9BTElHTl9DRUlMKG9mZiwgc2l6ZW9mKGRvdWJsZSkpOw0KPiAtCQkJc2l6ZSA9IHNp emVvZigqc3JjLnJzcy0+cXVldWUpICogc3JjLnJzcy0+bnVtOw0KPiArCQkJc2l6ZSA9IHNpemVv Zigqc3JjLnJzcy0+a2V5KSAqIHNyYy5yc3MtPmtleV9sZW47DQo+ICAJCQlpZiAoZHN0LnJzcykN Cj4gLQkJCQlkc3QucnNzLT5xdWV1ZSA9IG1lbWNweQ0KPiArCQkJCWRzdC5yc3MtPmtleSA9IG1l bWNweQ0KPiAgCQkJCQkoKHZvaWQgKikoKHVpbnRwdHJfdClkc3QucnNzICsgb2ZmKSwNCj4gLQkJ CQkJIHNyYy5yc3MtPnF1ZXVlLCBzaXplKTsNCj4gKwkJCQkJIHNyYy5yc3MtPmtleSwgc2l6ZSk7 DQo+ICAJCQlvZmYgKz0gc2l6ZTsNCj4gIAkJfQ0KPiAtCQlvZmYgPSBSVEVfQUxJR05fQ0VJTChv ZmYsIHNpemVvZihkb3VibGUpKTsNCj4gLQkJaWYgKGRzdC5yc3MpIHsNCj4gLQkJCWRzdC5yc3Mt PnJzc19jb25mID0gKHZvaWQgKikoKHVpbnRwdHJfdClkc3QucnNzICsgb2ZmKTsNCj4gLQkJCSoo c3RydWN0IHJ0ZV9ldGhfcnNzX2NvbmYgKikodWludHB0cl90KQ0KPiAtCQkJCWRzdC5yc3MtPnJz c19jb25mID0gKHN0cnVjdA0KPiBydGVfZXRoX3Jzc19jb25mKXsNCj4gLQkJCQkucnNzX2tleV9s ZW4gPSBzcmMucnNzLT5yc3NfY29uZi0NCj4gPnJzc19rZXlfbGVuLA0KPiAtCQkJCS5yc3NfaGYg PSBzcmMucnNzLT5yc3NfY29uZi0+cnNzX2hmLA0KPiAtCQkJfTsNCj4gLQkJfQ0KPiAtCQlvZmYg Kz0gc2l6ZW9mKCpzcmMucnNzLT5yc3NfY29uZik7DQo+IC0JCWlmIChzcmMucnNzLT5yc3NfY29u Zi0+cnNzX2tleV9sZW4pIHsNCj4gKwkJaWYgKHNyYy5yc3MtPnF1ZXVlX251bSkgew0KPiAgCQkJ b2ZmID0gUlRFX0FMSUdOX0NFSUwob2ZmLCBzaXplb2YoZG91YmxlKSk7DQo+IC0JCQlzaXplID0g c2l6ZW9mKCpzcmMucnNzLT5yc3NfY29uZi0+cnNzX2tleSkgKg0KPiAtCQkJCXNyYy5yc3MtPnJz c19jb25mLT5yc3Nfa2V5X2xlbjsNCj4gLQkJCWlmIChkc3QucnNzKSB7DQo+IC0JCQkJKChzdHJ1 Y3QgcnRlX2V0aF9yc3NfY29uZiAqKSh1aW50cHRyX3QpDQo+IC0JCQkJIGRzdC5yc3MtPnJzc19j b25mKS0+cnNzX2tleSA9DQo+IC0JCQkJCSh2b2lkICopKCh1aW50cHRyX3QpZHN0LnJzcyArIG9m Zik7DQo+IC0JCQkJbWVtY3B5KGRzdC5yc3MtPnJzc19jb25mLT5yc3Nfa2V5LA0KPiAtCQkJCSAg ICAgICBzcmMucnNzLT5yc3NfY29uZi0+cnNzX2tleSwNCj4gLQkJCQkgICAgICAgc2l6ZSk7DQo+ IC0JCQl9DQo+ICsJCQlzaXplID0gc2l6ZW9mKCpzcmMucnNzLT5xdWV1ZSkgKiBzcmMucnNzLT5x dWV1ZV9udW07DQo+ICsJCQlpZiAoZHN0LnJzcykNCj4gKwkJCQlkc3QucnNzLT5xdWV1ZSA9IG1l bWNweQ0KPiArCQkJCQkoKHZvaWQgKikoKHVpbnRwdHJfdClkc3QucnNzICsgb2ZmKSwNCj4gKwkJ CQkJIHNyYy5yc3MtPnF1ZXVlLCBzaXplKTsNCj4gIAkJCW9mZiArPSBzaXplOw0KPiAgCQl9DQo+ ICAJCXNpemUgPSBvZmY7DQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2V0aGVyL3J0ZV9mbG93 LmggYi9saWIvbGlicnRlX2V0aGVyL3J0ZV9mbG93LmgNCj4gaW5kZXggYWQyZTU1YjhlLi5iYmM0 MDhmYTYgMTAwNjQ0DQo+IC0tLSBhL2xpYi9saWJydGVfZXRoZXIvcnRlX2Zsb3cuaA0KPiArKysg Yi9saWIvbGlicnRlX2V0aGVyL3J0ZV9mbG93LmgNCj4gQEAgLTEwMzMsMTMgKzEwMzMsMjEgQEAg c3RydWN0IHJ0ZV9mbG93X3F1ZXJ5X2NvdW50IHsNCj4gICAqIFNpbWlsYXIgdG8gUVVFVUUsIGV4 Y2VwdCBSU1MgaXMgYWRkaXRpb25hbGx5IHBlcmZvcm1lZCBvbiBwYWNrZXRzIHRvDQo+ICAgKiBz cHJlYWQgdGhlbSBhbW9uZyBzZXZlcmFsIHF1ZXVlcyBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVk IHBhcmFtZXRlcnMuDQo+ICAgKg0KPiArICogVW5saWtlIGdsb2JhbCBSU1Mgc2V0dGluZ3MgdXNl ZCBieSBvdGhlciBEUERLIEFQSXMsIHVuc2V0dGluZyB0aGUNCj4gKyAqIEBwIHR5cGVzIGZpZWxk IGRvZXMgbm90IGRpc2FibGUgUlNTIGluIGEgZmxvdyBydWxlLiBEb2luZyBzbyBpbnN0ZWFkDQo+ ICsgKiByZXF1ZXN0cyBzYWZlIHVuc3BlY2lmaWVkICJiZXN0LWVmZm9ydCIgc2V0dGluZ3MgZnJv bSB0aGUgdW5kZXJseWluZw0KPiBQTUQsDQo+ICsgKiB3aGljaCBkZXBlbmRpbmcgb24gdGhlIGZs b3cgcnVsZSwgbWF5IHJlc3VsdCBpbiBhbnl0aGluZyByYW5naW5nIGZyb20NCj4gKyAqIGVtcHR5 IChzaW5nbGUgcXVldWUpIHRvIGFsbC1pbmNsdXNpdmUgUlNTLg0KPiArICoNCj4gICAqIE5vdGU6 IFJTUyBoYXNoIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIGhhc2gucnNzIG1idWYgZmllbGQgd2hp Y2ggb3ZlcmxhcHMNCj4gICAqIGhhc2guZmRpci5sby4gU2luY2UgdGhlIE1BUksgYWN0aW9uIHNl dHMgdGhlIGhhc2guZmRpci5oaSBmaWVsZCBvbmx5LA0KPiAgICogYm90aCBjYW4gYmUgcmVxdWVz dGVkIHNpbXVsdGFuZW91c2x5Lg0KPiAgICovDQo+ICBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3Jz cyB7DQo+IC0JY29uc3Qgc3RydWN0IHJ0ZV9ldGhfcnNzX2NvbmYgKnJzc19jb25mOyAvKio8IFJT UyBwYXJhbWV0ZXJzLiAqLw0KPiAtCXVpbnQxNl90IG51bTsgLyoqPCBOdW1iZXIgb2YgZW50cmll cyBpbiBAcCBxdWV1ZS4gKi8NCj4gKwl1aW50NjRfdCB0eXBlczsgLyoqPCBTcGVjaWZpYyBSU1Mg aGFzaCB0eXBlcyAoc2VlIEVUSF9SU1NfKikuICovDQo+ICsJdWludDMyX3Qga2V5X2xlbjsgLyoq PCBIYXNoIGtleSBsZW5ndGggaW4gYnl0ZXMuICovDQo+ICsJdWludDMyX3QgcXVldWVfbnVtOyAv Kio8IE51bWJlciBvZiBlbnRyaWVzIGluIEBwIHF1ZXVlLiAqLw0KPiArCWNvbnN0IHVpbnQ4X3Qg KmtleTsgLyoqPCBIYXNoIGtleS4gKi8NCj4gIAljb25zdCB1aW50MTZfdCAqcXVldWU7IC8qKjwg UXVldWUgaW5kaWNlcyB0byB1c2UuICovDQo+ICB9Ow0KPiANCj4gLS0NCj4gMi4xMS4wDQo=