From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752448AbeAJUGa (ORCPT + 1 other); Wed, 10 Jan 2018 15:06:30 -0500 Received: from mail-co1nam03on0071.outbound.protection.outlook.com ([104.47.40.71]:18976 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752316AbeAJUGZ (ORCPT ); Wed, 10 Jan 2018 15:06:25 -0500 From: Jolly Shah To: Philippe Ombredanne CC: Michael Turquette , Stephen Boyd , Michal Simek , "linux-clk@vger.kernel.org" , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , LKML , Rajan Vaja , Tejas Patel , "Shubhrajyoti Datta" Subject: RE: [RFC PATCH 2/2] drivers: clk: Add ZynqMP clock driver Thread-Topic: [RFC PATCH 2/2] drivers: clk: Add ZynqMP clock driver Thread-Index: AQHTiM5mCOmYYj3RIke2Ub0isz5VDKNrf+mAgAIKeVA= Date: Wed, 10 Jan 2018 20:06:18 +0000 Message-ID: References: <1515449797-5629-1-git-send-email-jollys@xilinx.com> <1515449797-5629-3-git-send-email-jollys@xilinx.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=JOLLYS@xilinx.com; x-originating-ip: [73.162.184.228] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;DM5PR0201MB3494;7:5aLyXb4s03VObcSjOwDK2ad2xooV0dY+evkYoP6deP13B4TapwZ+3adNaHxJ/9G2NxxmtWiGOMC76/4F1DrJ511VH2GDy0fL/x7spvS7W0T2b8LGjAULF4C6YraZbNK/F9Q++8HyTi2vvaiY7nu+KalWHUpJ3HwK1biaRMVyC84bCnDRsAy2J0+kb3CtS8HU5VEDsk5FC5v7viBZQY76883f7n+sXgCMefvrZRgYgHz8auUV+BfRTov8EQfnRVrx x-ms-exchange-antispam-srfa-diagnostics: SSOS;SSOR; x-forefront-antispam-report: SFV:SKI;SCL:-1;SFV:NSPM;SFS:(10009020)(396003)(39860400002)(346002)(366004)(39380400002)(376002)(189003)(199004)(13464003)(24454002)(97736004)(106356001)(7696005)(16200700003)(68736007)(3280700002)(3660700001)(478600001)(2900100001)(7736002)(3846002)(9686003)(25786009)(66066001)(305945005)(105586002)(76176011)(99286004)(53936002)(55016002)(74316002)(6116002)(53946003)(86362001)(54906003)(5660300001)(2906002)(14454004)(6506007)(107886003)(229853002)(6916009)(33656002)(6436002)(72206003)(8936002)(8676002)(81156014)(5250100002)(316002)(4326008)(102836004)(81166006)(59450400001)(53546011)(6246003)(2950100002)(217873001)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR0201MB3494;H:DM2PR0201MB0767.namprd02.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: e2357c50-1f01-4e69-9e7f-08d558659cb6 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(3008032)(2017052603307)(7153060)(7193020);SRVR:DM5PR0201MB3494; x-ms-traffictypediagnostic: DM5PR0201MB3494: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(9452136761055)(258649278758335)(192813158149592); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040470)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231023)(944501075)(93006095)(93001095)(6055026)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123564045)(20161123558120)(6072148)(201708071742011);SRVR:DM5PR0201MB3494;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:DM5PR0201MB3494; x-forefront-prvs: 0548586081 x-microsoft-antispam-message-info: qaLQkoO6Nn3cpr9mRqSpLM1+mIoLf2IB7Gig8zqg+wKd+kVfTWo/ggW9SD1QtBH0KkhKaG1M83nItVMPukrsOA== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: e2357c50-1f01-4e69-9e7f-08d558659cb6 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Jan 2018 20:06:18.4448 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0201MB3494 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: VGhhbmtzIFBoaWxpcHBlIGZvciByZXZpZXcuDQpXaWxsIGZpeCBhbGwgU1BEWCB0YWdzIGluIG5l eHQgdmVyc2lvbi4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBQaGls aXBwZSBPbWJyZWRhbm5lIFttYWlsdG86cG9tYnJlZGFubmVAbmV4Yi5jb21dDQo+IFNlbnQ6IFR1 ZXNkYXksIEphbnVhcnkgMDksIDIwMTggNDo1MyBBTQ0KPiBUbzogSm9sbHkgU2hhaCA8Sk9MTFlT QHhpbGlueC5jb20+DQo+IENjOiBNaWNoYWVsIFR1cnF1ZXR0ZSA8bXR1cnF1ZXR0ZUBiYXlsaWJy ZS5jb20+OyBTdGVwaGVuIEJveWQNCj4gPHNib3lkQGNvZGVhdXJvcmEub3JnPjsgTWljaGFsIFNp bWVrIDxtaWNoYWwuc2ltZWtAeGlsaW54LmNvbT47IGxpbnV4LQ0KPiBjbGtAdmdlci5rZXJuZWwu b3JnOyBtb2RlcmF0ZWQgbGlzdDpBUk0vRlJFRVNDQUxFIElNWCAvIE1YQyBBUk0NCj4gQVJDSElU RUNUVVJFIDxsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc+OyBMS01MIDxsaW51 eC0NCj4ga2VybmVsQHZnZXIua2VybmVsLm9yZz47IEpvbGx5IFNoYWggPEpPTExZU0B4aWxpbngu Y29tPjsgUmFqYW4gVmFqYQ0KPiA8UkFKQU5WQHhpbGlueC5jb20+OyBUZWphcyBQYXRlbCA8VEVK QVNQQHhpbGlueC5jb20+OyBTaHViaHJhanlvdGkgRGF0dGENCj4gPHNodWJocmFqQHhpbGlueC5j b20+DQo+IFN1YmplY3Q6IFJlOiBbUkZDIFBBVENIIDIvMl0gZHJpdmVyczogY2xrOiBBZGQgWnlu cU1QIGNsb2NrIGRyaXZlcg0KPiANCj4gSm9sbHksDQo+IA0KPiBPbiBNb24sIEphbiA4LCAyMDE4 IGF0IDExOjE2IFBNLCBKb2xseSBTaGFoIDxqb2xseS5zaGFoQHhpbGlueC5jb20+IHdyb3RlOg0K PiA+IFRoaXMgcGF0Y2ggYWRkcyBDQ0YgY29tcGxpYW50IGNsb2NrIGRyaXZlciBmb3IgWnlucU1Q Lg0KPiA+IENsb2NrIGRyaXZlciBxdWVyaWVzIHN1cHBvcnRlZCBjbG9jayBpbmZvcm1hdGlvbiBm cm9tDQo+ID4gZmlybXdhcmUgYW5kIHJlZ2l0ZXJzIHBsbCBhbmQgb3V0cHV0IGNsb2NrcyB3aXRo IENDRi4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEpvbGx5IFNoYWggPGpvbGx5c0B4aWxpbngu Y29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFJhamFuIFZhamEgPHJhamFudkB4aWxpbnguY29tPg0K PiA+IFNpZ25lZC1vZmYtYnk6IFRlamFzIFBhdGVsIDx0ZWphc3BAeGlsaW54LmNvbT4NCj4gPiBT aWduZWQtb2ZmLWJ5OiBTaHViaHJhanlvdGkgRGF0dGEgPHNodWJocmFqeW90aS5kYXR0YUB4aWxp bnguY29tPg0KPiA+IC0tLQ0KPiANCj4gPHNuaXA+DQo+IA0KPiANCj4gPiAgLi4uL2RldmljZXRy ZWUvYmluZGluZ3MvY2xvY2svenlucV9tcHNvYy50eHQgICAgICAgfCAxNjMgKysrKysNCj4gPiAg ZHJpdmVycy9jbGsvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg Kw0KPiA+ICBkcml2ZXJzL2Nsay9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArDQo+ID4gIGRyaXZlcnMvY2xrL3p5bnFtcC9LY29uZmlnICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICA4ICsNCj4gPiAgZHJpdmVycy9jbGsvenlucW1wL01ha2VmaWxlICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDMgKw0KPiA+ICBkcml2ZXJzL2Nsay96eW5xbXAvY2xrLWdh dGUtenlucW1wLmMgICAgICAgICAgICAgICB8IDE1OCArKysrKw0KPiA+ICBkcml2ZXJzL2Nsay96 eW5xbXAvY2xrLW11eC16eW5xbXAuYyAgICAgICAgICAgICAgICB8IDE5MCArKysrKysNCj4gPiAg ZHJpdmVycy9jbGsvenlucW1wL2Nsa2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3MDcg KysrKysrKysrKysrKysrKysrKysrDQo+ID4gIGRyaXZlcnMvY2xrL3p5bnFtcC9kaXZpZGVyLmMg ICAgICAgICAgICAgICAgICAgICAgIHwgMjM5ICsrKysrKysNCj4gPiAgZHJpdmVycy9jbGsvenlu cW1wL3BsbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzODQgKysrKysrKysrKysNCj4g PiAgaW5jbHVkZS9saW51eC9jbGsvenlucW1wLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAg NDYgKysNCj4gPiAgMTEgZmlsZXMgY2hhbmdlZCwgMTkwMCBpbnNlcnRpb25zKCspDQo+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NA0KPiBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xv Y2svenlucV9tcHNvYy50eHQNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL3p5 bnFtcC9LY29uZmlnDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2Nsay96eW5xbXAv TWFrZWZpbGUNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL3p5bnFtcC9jbGst Z2F0ZS16eW5xbXAuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jbGsvenlucW1w L2Nsay1tdXgtenlucW1wLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL3p5 bnFtcC9jbGtjLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL3p5bnFtcC9k aXZpZGVyLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL3p5bnFtcC9wbGwu Yw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9jbGsvenlucW1wLmgNCj4g Pg0KPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xv Y2svenlucV9tcHNvYy50eHQNCj4gYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mv Y2xvY2svenlucV9tcHNvYy50eHQNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4 IDAwMDAwMDAuLjkwNjFiNTcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3p5bnFfbXBzb2MudHh0DQo+ID4gQEAgLTAs MCArMSwxNjMgQEANCj4gPiArRGV2aWNlIFRyZWUgQ2xvY2sgYmluZGluZ3MgZm9yIHRoZSBaeW5x IFVsdHJhc2NhbGUrIE1QU29DDQo+ID4gKw0KPiA+ICtUaGUgWnlucSBVbHRyYXNjYWxlKyBNUFNv QyBoYXMgc2V2ZXJhbCBkaWZmZXJlbnQgY2xrIHByb3ZpZGVycywNCj4gPiArZWFjaCB3aXRoIHRo ZXJlIG93biBiaW5kaW5ncy4NCj4gPiArVGhlIHB1cnBvc2Ugb2YgdGhpcyBkb2N1bWVudCBpcyB0 byBkb2N1bWVudCB0aGVpciB1c2FnZS4NCj4gPiArDQo+ID4gK1NlZSBjbG9ja19iaW5kaW5ncy50 eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGdlbmVyaWMgY2xvY2sgYmluZGluZ3MuDQo+ ID4gKw0KPiA+ICs9PSBDbG9jayBDb250cm9sbGVyID09DQo+ID4gK1RoZSBjbG9jayBjb250cm9s bGVyIGlzIGEgbG9naWNhbCBhYnN0cmFjdGlvbiBvZiBaeW5xIFVsdHJhc2NhbGUrIE1QU29DIGNs b2NrDQo+ID4gK3RyZWUuIEl0IHJlYWRzIHJlcXVpcmVkIGlucHV0IGNsb2NrIGZyZXF1ZW5jaWVz IGZyb20gdGhlIGRldmljZXRyZWUgYW5kIGFjdHMNCj4gPiArYXMgY2xvY2sgcHJvdmlkZXIgZm9y IGFsbCBjbG9jayBjb25zdW1lcnMgb2YgUFMgY2xvY2tzLg0KPiA+ICsNCj4gPiArUmVxdWlyZWQg cHJvcGVydGllczoNCj4gPiArIC0gI2Nsb2NrLWNlbGxzIDogTXVzdCBiZSAxDQo+ID4gKyAtIGNv bXBhdGlibGUgOiAieGxueCx6eW5xbXAtY2xrYyINCj4gPiArIC0gY2xvY2tzIDogbGlzdCBvZiBj bG9jayBzcGVjaWZpZXJzIHdoaWNoIGFyZSBleHRlcm5hbCBpbnB1dCBjbG9ja3MgdG8gdGhlDQo+ ID4gKyAgICAgICAgICAgZ2l2ZW4gY2xvY2sgY29udHJvbGxlci4gUGxlYXNlIHJlZmVyIHRoZSBu ZXh0IHNlY3Rpb24gdG8gZmluZA0KPiA+ICsgICAgICAgICAgIHRoZSBpbnB1dCBjbG9ja3MgZm9y IGEgZ2l2ZW4gY29udHJvbGxlci4NCj4gPiArIC0gY2xvY2stbmFtZXMgOiBsaXN0IG9mIG5hbWVz IG9mIGNsb2NrcyB3aGljaCBhcmUgZXh0ZXJhbCBpbnB1dCBjbG9ja3MgdG8gdGhlDQo+ID4gKyAg ICAgICAgICAgICAgICBnaXZlbiBjbG9jayBjb250cm9sbGVyLiBQbGVhc2UgcmVmZXIgdG8gdGhl IGNsb2NrIGJpbmRpbmdzDQo+ID4gKyAgICAgICAgICAgICAgICBmb3IgbW9yZSBkZXRhaWxzDQo+ ID4gKw0KPiA+ICtJbnB1dCBjbG9ja3MgZm9yIHp5bnFtcCBVbHRyYXNjYWxlKyBjbG9jayBjb250 cm9sbGVyOg0KPiA+ICtUaGUgWnlucSBVbHRyYVNjYWxlKyBNUFNvQyBoYXMgb25lIHByaW1hcnkg YW5kIGZvdXIgYWx0ZXJuYXRpdmUgcmVmZXJlbmNlDQo+IGNsb2NrDQo+ID4gK2lucHV0cy4NCj4g PiArVGhlc2UgcmVxdWlyZWQgY2xvY2sgaW5wdXRzIGFyZSB0aGUNCj4gPiArIC0gcHNzX3JlZl9j bGsgKFBTIHJlZmVyZW5jZSBjbG9jaykNCj4gPiArIC0gdmlkZW9fY2xrIChyZWZlcmVuY2UgY2xv Y2sgZm9yIHZpZGVvIHN5c3RlbSApDQo+ID4gKyAtIHBzc19hbHRfcmVmX2NsayAoYWx0ZXJuYXRp dmUgUFMgcmVmZXJlbmNlIGNsb2NrKQ0KPiA+ICsgLSBhdXhfcmVmX2Nsaw0KPiA+ICsgLSBndF9j cnhfcmVmX2NsayAodHJhbnNjZWl2ZXIgcmVmZXJlbmNlIGNsb2NrKQ0KPiA+ICsNCj4gPiArVGhl IGZvbGxvd2luZyBzdHJpbmdzIGFyZSBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHRoZSAnY2xvY2st bmFtZXMnIHByb3BlcnR5DQo+IGluDQo+ID4gK29yZGVyIHRvIHByb3ZpZGUgYW4gb3B0aW9uYWwg KEUpTUlPIGNsb2NrIHNvdXJjZS4NCj4gPiArIC0gc3dkdDBfZXh0X2Nsaw0KPiA+ICsgLSBzd2R0 MV9leHRfY2xrDQo+ID4gKyAtIGdlbTBfZW1pb19jbGsNCj4gPiArIC0gZ2VtMV9lbWlvX2Nsaw0K PiA+ICsgLSBnZW0yX2VtaW9fY2xrDQo+ID4gKyAtIGdlbTNfZW1pb19jbGsNCj4gPiArIC0gbWlv X2Nsa19YWCAgICAgICAgICAjIHdpdGggWFggPSAwMC4uNzcNCj4gPiArIC0gbWlvX2Nsa181MF9v cl81MSAgICAjZm9yIHRoZSBtdXggY2xvY2sgdG8gZ2VtIHRzdSBmcm9tIDUwIG9yIDUxDQo+ID4g Kw0KPiA+ICsNCj4gPiArT3V0cHV0IGNsb2NrcyBmb3IgenlucW1wIFVsdHJhc2NhbGUrIGNsb2Nr IGNvbnRyb2xsZXI6DQo+ID4gK091dHB1dCBjbG9ja3MgYXJlIHJlZ2lzdGVyZWQgYmFzZWQgb24g Y2xvY2sgaW5mb3JtYXRpb24gcmVjZWl2ZWQgZnJvbQ0KPiBmaXJtd2FyZS4NCj4gPiArT3V0cHV0 IGNsb2NrIGluZGV4ZXMgYXJlIG1lbnRpb25lZCBiZWxvdzoNCj4gPiArDQo+ID4gK0Nsb2NrIElE OiAgICAgIE91dHB1dCBjbG9jayBuYW1lOg0KPiA+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQo+ID4gKzAgICAgICAgICAgICAgIGlvcGxsDQo+ID4gKzEgICAgICAgICAg ICAgIHJwbGwNCj4gPiArMiAgICAgICAgICAgICAgYXBsbA0KPiA+ICszICAgICAgICAgICAgICBk cGxsDQo+ID4gKzQgICAgICAgICAgICAgIHZwbGwNCj4gPiArNSAgICAgICAgICAgICAgaW9wbGxf dG9fZnBkDQo+ID4gKzYgICAgICAgICAgICAgIHJwbGxfdG9fZnBkDQo+ID4gKzcgICAgICAgICAg ICAgIGFwbGxfdG9fbHBkDQo+ID4gKzggICAgICAgICAgICAgIGRwbGxfdG9fbHBkDQo+ID4gKzkg ICAgICAgICAgICAgIHZwbGxfdG9fbHBkDQo+ID4gKzEwICAgICAgICAgICAgIGFjcHUNCj4gPiAr MTEgICAgICAgICAgICAgYWNwdV9oYWxmDQo+ID4gKzEyICAgICAgICAgICAgIGRiZl9mcGQNCj4g PiArMTMgICAgICAgICAgICAgZGJmX2xwZA0KPiA+ICsxNCAgICAgICAgICAgICBkYmdfdHJhY2UN Cj4gPiArMTUgICAgICAgICAgICAgZGJnX3RzdG1wDQo+ID4gKzE2ICAgICAgICAgICAgIGRwX3Zp ZGVvX3JlZg0KPiA+ICsxNyAgICAgICAgICAgICBkcF9hdWRpb19yZWYNCj4gPiArMTggICAgICAg ICAgICAgZHBfc3RjX3JlZg0KPiA+ICsxOSAgICAgICAgICAgICBnZG1hX3JlZg0KPiA+ICsyMCAg ICAgICAgICAgICBkcGRtYV9yZWYNCj4gPiArMjEgICAgICAgICAgICAgZGRyX3JlZg0KPiA+ICsy MiAgICAgICAgICAgICBzYXRhX3JlZg0KPiA+ICsyMyAgICAgICAgICAgICBwY2llX3JlZg0KPiA+ ICsyNCAgICAgICAgICAgICBncHVfcmVmDQo+ID4gKzI1ICAgICAgICAgICAgIGdwdV9wcDBfcmVm DQo+ID4gKzI2ICAgICAgICAgICAgIGdwdV9wcDFfcmVmDQo+ID4gKzI3ICAgICAgICAgICAgIHRv cHN3X21haW4NCj4gPiArMjggICAgICAgICAgICAgdG9wc3dfbHNidXMNCj4gPiArMjkgICAgICAg ICAgICAgZ3RncmVmMF9yZWYNCj4gPiArMzAgICAgICAgICAgICAgbHBkX3N3aXRjaA0KPiA+ICsz MSAgICAgICAgICAgICBscGRfbHNidXMNCj4gPiArMzIgICAgICAgICAgICAgdXNiMF9idXNfcmVm DQo+ID4gKzMzICAgICAgICAgICAgIHVzYjFfYnVzX3JlZg0KPiA+ICszNCAgICAgICAgICAgICB1 c2IzX2R1YWxfcmVmDQo+ID4gKzM1ICAgICAgICAgICAgIHVzYjANCj4gPiArMzYgICAgICAgICAg ICAgdXNiMQ0KPiA+ICszNyAgICAgICAgICAgICBjcHVfcjUNCj4gPiArMzggICAgICAgICAgICAg Y3B1X3I1X2NvcmUNCj4gPiArMzkgICAgICAgICAgICAgY3N1X3NwYg0KPiA+ICs0MCAgICAgICAg ICAgICBjc3VfcGxsDQo+ID4gKzQxICAgICAgICAgICAgIHBjYXANCj4gPiArNDIgICAgICAgICAg ICAgaW91X3N3aXRjaA0KPiA+ICs0MyAgICAgICAgICAgICBnZW1fdHN1X3JlZg0KPiA+ICs0NCAg ICAgICAgICAgICBnZW1fdHN1DQo+ID4gKzQ1ICAgICAgICAgICAgIGdlbTBfcmVmDQo+ID4gKzQ2 ICAgICAgICAgICAgIGdlbTFfcmVmDQo+ID4gKzQ3ICAgICAgICAgICAgIGdlbTJfcmVmDQo+ID4g KzQ4ICAgICAgICAgICAgIGdlbTNfcmVmDQo+ID4gKzQ5ICAgICAgICAgICAgIGdlbTBfdHgNCj4g PiArNTAgICAgICAgICAgICAgZ2VtMV90eA0KPiA+ICs1MSAgICAgICAgICAgICBnZW0yX3R4DQo+ ID4gKzUyICAgICAgICAgICAgIGdlbTNfdHgNCj4gPiArNTMgICAgICAgICAgICAgcXNwaV9yZWYN Cj4gPiArNTQgICAgICAgICAgICAgc2RpbzBfcmVmDQo+ID4gKzU1ICAgICAgICAgICAgIHNkaW8x X3JlZg0KPiA+ICs1NiAgICAgICAgICAgICB1YXJ0MF9yZWYNCj4gPiArNTcgICAgICAgICAgICAg dWFydDFfcmVmDQo+ID4gKzU4ICAgICAgICAgICAgIHNwaTBfcmVmDQo+ID4gKzU5ICAgICAgICAg ICAgIHNwaTFfcmVmDQo+ID4gKzYwICAgICAgICAgICAgIG5hbmRfcmVmDQo+ID4gKzYxICAgICAg ICAgICAgIGkyYzBfcmVmDQo+ID4gKzYyICAgICAgICAgICAgIGkyYzFfcmVmDQo+ID4gKzYzICAg ICAgICAgICAgIGNhbjBfcmVmDQo+ID4gKzY0ICAgICAgICAgICAgIGNhbjFfcmVmDQo+ID4gKzY1 ICAgICAgICAgICAgIGNhbjANCj4gPiArNjYgICAgICAgICAgICAgY2FuMQ0KPiA+ICs2NyAgICAg ICAgICAgICBkbGxfcmVmDQo+ID4gKzY4ICAgICAgICAgICAgIGFkbWFfcmVmDQo+ID4gKzY5ICAg ICAgICAgICAgIHRpbWVzdGFtcF9yZWYNCj4gPiArNzAgICAgICAgICAgICAgYW1zX3JlZg0KPiA+ ICs3MSAgICAgICAgICAgICBwbDBfcmVmDQo+ID4gKzcyICAgICAgICAgICAgIHBsMV9yZWYNCj4g PiArNzMgICAgICAgICAgICAgcGwyX3JlZg0KPiA+ICs3NCAgICAgICAgICAgICBwbDNfcmVmDQo+ ID4gKzc1ICAgICAgICAgICAgIHdkdA0KPiA+ICs3NiAgICAgICAgICAgICBpb3BsbF9pbnQNCj4g PiArNzcgICAgICAgICAgICAgaW9wbGxfcHJlX3NyYw0KPiA+ICs3OCAgICAgICAgICAgICBpb3Bs bF9oYWxmDQo+ID4gKzc5ICAgICAgICAgICAgIGlvcGxsX2ludF9tdXgNCj4gPiArODAgICAgICAg ICAgICAgaW9wbGxfcG9zdF9zcmMNCj4gPiArODEgICAgICAgICAgICAgcnBsbF9pbnQNCj4gPiAr ODIgICAgICAgICAgICAgcnBsbF9wcmVfc3JjDQo+ID4gKzgzICAgICAgICAgICAgIHJwbGxfaGFs Zg0KPiA+ICs4NCAgICAgICAgICAgICBycGxsX2ludF9tdXgNCj4gPiArODUgICAgICAgICAgICAg cnBsbF9wb3N0X3NyYw0KPiA+ICs4NiAgICAgICAgICAgICBhcGxsX2ludA0KPiA+ICs4NyAgICAg ICAgICAgICBhcGxsX3ByZV9zcmMNCj4gPiArODggICAgICAgICAgICAgYXBsbF9oYWxmDQo+ID4g Kzg5ICAgICAgICAgICAgIGFwbGxfaW50X211eA0KPiA+ICs5MCAgICAgICAgICAgICBhcGxsX3Bv c3Rfc3JjDQo+ID4gKzkxICAgICAgICAgICAgIGRwbGxfaW50DQo+ID4gKzkyICAgICAgICAgICAg IGRwbGxfcHJlX3NyYw0KPiA+ICs5MyAgICAgICAgICAgICBkcGxsX2hhbGYNCj4gPiArOTQgICAg ICAgICAgICAgZHBsbF9pbnRfbXV4DQo+ID4gKzk1ICAgICAgICAgICAgIGRwbGxfcG9zdF9zcmMN Cj4gPiArOTYgICAgICAgICAgICAgdnBsbF9pbnQNCj4gPiArOTcgICAgICAgICAgICAgdnBsbF9w cmVfc3JjDQo+ID4gKzk4ICAgICAgICAgICAgIHZwbGxfaGFsZg0KPiA+ICs5OSAgICAgICAgICAg ICB2cGxsX2ludF9tdXgNCj4gPiArMTAwICAgICAgICAgICAgdnBsbF9wb3N0X3NyYw0KPiA+ICsx MDEgICAgICAgICAgICBjYW4wX21pbw0KPiA+ICsxMDIgICAgICAgICAgICBjYW4xX21pbw0KPiA+ ICsNCj4gPiArRXhhbXBsZToNCj4gPiArDQo+ID4gK2Nsa2M6IGNsa2NAZmY1ZTAwMjAgew0KPiA+ ICsgICAgICAgI2Nsb2NrLWNlbGxzID0gPDE+Ow0KPiA+ICsgICAgICAgY29tcGF0aWJsZSA9ICJ4 bG54LHp5bnFtcC1jbGtjIjsNCj4gPiArICAgICAgIGNsb2NrcyA9IDwmcHNzX3JlZl9jbGs+LCA8 JnZpZGVvX2Nsaz4sIDwmcHNzX2FsdF9yZWZfY2xrPiwNCj4gPCZhdXhfcmVmX2Nsaz4sIDwmZ3Rf Y3J4X3JlZl9jbGs+Ow0KPiA+ICsgICAgICAgY2xvY2stbmFtZXMgPSAicHNzX3JlZl9jbGsiLCAi dmlkZW9fY2xrIiwNCj4gInBzc19hbHRfcmVmX2NsayIsImF1eF9yZWZfY2xrIiwgImd0X2NyeF9y ZWZfY2xrIg0KPiA+ICt9Ow0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9LY29uZmlnIGIv ZHJpdmVycy9jbGsvS2NvbmZpZw0KPiA+IGluZGV4IDFjNGUxYWEuLjUyNmY0ZjUgMTAwNjQ0DQo+ ID4gLS0tIGEvZHJpdmVycy9jbGsvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvY2xrL0tjb25m aWcNCj4gPiBAQCAtMjM5LDYgKzIzOSw3IEBAIHNvdXJjZSAiZHJpdmVycy9jbGsvc2Ftc3VuZy9L Y29uZmlnIg0KPiA+ICBzb3VyY2UgImRyaXZlcnMvY2xrL3N1bnhpLW5nL0tjb25maWciDQo+ID4g IHNvdXJjZSAiZHJpdmVycy9jbGsvdGVncmEvS2NvbmZpZyINCj4gPiAgc291cmNlICJkcml2ZXJz L2Nsay90aS9LY29uZmlnIg0KPiA+ICtzb3VyY2UgImRyaXZlcnMvY2xrL3p5bnFtcC9LY29uZmln Ig0KPiA+ICBzb3VyY2UgImRyaXZlcnMvY2xrL3VuaXBoaWVyL0tjb25maWciDQo+ID4NCj4gPiAg ZW5kbWVudQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9NYWtlZmlsZSBiL2RyaXZlcnMv Y2xrL01ha2VmaWxlDQo+ID4gaW5kZXggZjdmNzYxYi4uZDczMjhiNCAxMDA2NDQNCj4gPiAtLS0g YS9kcml2ZXJzL2Nsay9NYWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvY2xrL01ha2VmaWxlDQo+ ID4gQEAgLTk4LDMgKzk4LDQgQEAgb2JqLSQoQ09ORklHX1g4NikgICAgICAgICAgICAgICAgICAg ICArPSB4ODYvDQo+ID4gIGVuZGlmDQo+ID4gIG9iai0kKENPTkZJR19BUkNIX1pYKSAgICAgICAg ICAgICAgICAgICs9IHp0ZS8NCj4gPiAgb2JqLSQoQ09ORklHX0FSQ0hfWllOUSkgICAgICAgICAg ICAgICAgICAgICAgICArPSB6eW5xLw0KPiA+ICtvYmotJChDT05GSUdfQ09NTU9OX0NMS19aWU5R TVApICAgICAgICAgKz0genlucW1wLw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay96eW5x bXAvS2NvbmZpZyBiL2RyaXZlcnMvY2xrL3p5bnFtcC9LY29uZmlnDQo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi5hNmQ1NGU5DQo+ID4gLS0tIC9kZXYvbnVsbA0K PiA+ICsrKyBiL2RyaXZlcnMvY2xrL3p5bnFtcC9LY29uZmlnDQo+ID4gQEAgLTAsMCArMSw4IEBA DQo+ID4gK2NvbmZpZyBDT01NT05fQ0xLX1pZTlFNUA0KPiA+ICsgICAgICAgYm9vbCAiU3VwcG9y dCBmb3IgWGlsaW54IFp5bnFNUCBVbHRyYXNjYWxlKyBjbG9jayBjb250cm9sbGVycyINCj4gPiAr ICAgICAgIGRlcGVuZHMgb24gT0YNCj4gPiArICAgICAgIGRlcGVuZHMgb24gQVJDSF9aWU5RTVAg fHwgQ09NUElMRV9URVNUDQo+ID4gKyAgICAgICBoZWxwDQo+ID4gKyAgICAgICAgIFN1cHBvcnQg Zm9yIHRoZSBaeW5xbXAgVWx0cmFzY2FsZSBjbG9jayBjb250cm9sbGVyLg0KPiA+ICsgICAgICAg ICBJdCBoYXMgYSBkZXBlbmRlbmN5IG9uIHRoZSBQTVUgZmlybXdhcmUuDQo+ID4gKyAgICAgICAg IFNheSBZIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgY2xvY2sgc3VwcG9ydA0KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2Nsay96eW5xbXAvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsay96eW5xbXAvTWFr ZWZpbGUNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjdkNTBm N2ENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9jbGsvenlucW1wL01ha2Vm aWxlDQo+ID4gQEAgLTAsMCArMSwzIEBADQo+ID4gKyMgWnlucSBVbHRyYXNjYWxlKyBNUFNvQyBj bG9jayBzcGVjaWZpYyBNYWtlZmlsZQ0KPiA+ICsNCj4gPiArb2JqLSQoQ09ORklHX0FSQ0hfWllO UU1QKSAgICAgICs9IHBsbC5vIGNsay1nYXRlLXp5bnFtcC5vIGRpdmlkZXIubyBjbGstDQo+IG11 eC16eW5xbXAubyBjbGtjLm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvenlucW1wL2Ns ay1nYXRlLXp5bnFtcC5jIGIvZHJpdmVycy9jbGsvenlucW1wL2Nsay0NCj4gZ2F0ZS16eW5xbXAu Yw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uNDVlZWVkOA0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL2Nsay96eW5xbXAvY2xrLWdhdGUt enlucW1wLmMNCj4gPiBAQCAtMCwwICsxLDE1OCBAQA0KPiA+ICsvKg0KPiA+ICsgKiBaeW5xIFVs dHJhU2NhbGUrIE1QU29DIGNsb2NrIGNvbnRyb2xsZXINCj4gPiArICoNCj4gPiArICogIENvcHly aWdodCAoQykgMjAxNi0yMDE3IFhpbGlueA0KPiA+ICsgKg0KPiA+ICsgKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogICAgIEdQTC0yLjArDQo+IA0KPiBUaGlzIHRhZyBzaG91bGQgYmUgb24gdGhl IGZpc3QgbGluZSB0aGlzIHdheToNCj4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjArDQo+IA0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvY2xrL3p5bnFtcC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9pby5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9zdHJpbmcuaD4NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1Y3QgY2xrX2dhdGUgLSBn YXRpbmcgY2xvY2sNCj4gPiArICoNCj4gPiArICogQGh3OiAgICAgICAgaGFuZGxlIGJldHdlZW4g Y29tbW9uIGFuZCBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmZhY2VzDQo+ID4gKyAqIEBmbGFnczog ICAgIGhhcmR3YXJlLXNwZWNpZmljIGZsYWdzDQo+ID4gKyAqIEBjbGtfaWQ6ICAgIElkIG9mIGNs b2NrDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgenlucW1wX2Nsa19nYXRlIHsNCj4gPiArICAgICAg IHN0cnVjdCBjbGtfaHcgaHc7DQo+ID4gKyAgICAgICB1OCBmbGFnczsNCj4gPiArICAgICAgIHUz MiBjbGtfaWQ7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZGVmaW5lIHRvX3p5bnFtcF9jbGtfZ2F0 ZShfaHcpIGNvbnRhaW5lcl9vZihfaHcsIHN0cnVjdA0KPiB6eW5xbXBfY2xrX2dhdGUsIGh3KQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHp5bnFtcF9jbGtfZ2F0ZV9lbmFibGUgLSBFbmFibGUg Y2xvY2sNCj4gPiArICogQGh3OiBoYW5kbGUgYmV0d2VlbiBjb21tb24gYW5kIGhhcmR3YXJlLXNw ZWNpZmljIGludGVyZmFjZXMNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIGFsd2F5cw0KPiA+ ICsgKi8NCj4gPiArc3RhdGljIGludCB6eW5xbXBfY2xrX2dhdGVfZW5hYmxlKHN0cnVjdCBjbGtf aHcgKmh3KQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgenlucW1wX2Nsa19nYXRlICpnYXRl ID0gdG9fenlucW1wX2Nsa19nYXRlKGh3KTsNCj4gPiArICAgICAgIGNvbnN0IGNoYXIgKmNsa19u YW1lID0gY2xrX2h3X2dldF9uYW1lKGh3KTsNCj4gPiArICAgICAgIHUzMiBjbGtfaWQgPSBnYXRl LT5jbGtfaWQ7DQo+ID4gKyAgICAgICBpbnQgcmV0ID0gMDsNCj4gPiArICAgICAgIGNvbnN0IHN0 cnVjdCB6eW5xbXBfZWVtaV9vcHMgKmVlbWlfb3BzID0gZ2V0X2VlbWlfb3BzKCk7DQo+ID4gKw0K PiA+ICsgICAgICAgaWYgKCFlZW1pX29wcyB8fCAhZWVtaV9vcHMtPmNsb2NrX2VuYWJsZSkNCj4g PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsNCj4gPiArDQo+ID4gKyAgICAgICByZXQg PSBlZW1pX29wcy0+Y2xvY2tfZW5hYmxlKGNsa19pZCk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYg KHJldCkNCj4gPiArICAgICAgICAgICAgICAgcHJfd2Fybl9vbmNlKCIlcygpIGNsb2NrIGVuYWJs ZWQgZmFpbGVkIGZvciAlcywgcmV0ID0gJWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2Z1bmNfXywgY2xrX25hbWUsIHJldCk7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIHp5bnFtcF9jbGtfZ2F0ZV9k aXNhYmxlIC0gRGlzYWJsZSBjbG9jaw0KPiA+ICsgKiBAaHc6IGhhbmRsZSBiZXR3ZWVuIGNvbW1v biBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgaW50ZXJmYWNlcw0KPiA+ICsgKi8NCj4gPiArc3RhdGlj IHZvaWQgenlucW1wX2Nsa19nYXRlX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpDQo+ID4gK3sN Cj4gPiArICAgICAgIHN0cnVjdCB6eW5xbXBfY2xrX2dhdGUgKmdhdGUgPSB0b196eW5xbXBfY2xr X2dhdGUoaHcpOw0KPiA+ICsgICAgICAgY29uc3QgY2hhciAqY2xrX25hbWUgPSBjbGtfaHdfZ2V0 X25hbWUoaHcpOw0KPiA+ICsgICAgICAgdTMyIGNsa19pZCA9IGdhdGUtPmNsa19pZDsNCj4gPiAr ICAgICAgIGludCByZXQgPSAwOw0KPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHp5bnFtcF9lZW1p X29wcyAqZWVtaV9vcHMgPSBnZXRfZWVtaV9vcHMoKTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAo IWVlbWlfb3BzIHx8ICFlZW1pX29wcy0+Y2xvY2tfZGlzYWJsZSkNCj4gPiArICAgICAgICAgICAg ICAgcmV0dXJuOw0KPiA+ICsNCj4gPiArICAgICAgIHJldCA9IGVlbWlfb3BzLT5jbG9ja19kaXNh YmxlKGNsa19pZCk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAg ICAgICAgcHJfd2Fybl9vbmNlKCIlcygpIGNsb2NrIGRpc2FibGUgZmFpbGVkIGZvciAlcywgcmV0 ID0gJWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgY2xr X25hbWUsIHJldCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB6eW5xbXBfY2xr X2dhdGVfaXNfZW5hYmxlIC0gQ2hlY2sgY2xvY2sgc3RhdGUNCj4gPiArICogQGh3OiBoYW5kbGUg YmV0d2VlbiBjb21tb24gYW5kIGhhcmR3YXJlLXNwZWNpZmljIGludGVyZmFjZXMNCj4gPiArICoN Cj4gPiArICogUmV0dXJuOiAxIGlmIGVuYWJsZWQNCj4gPiArICogICAgICAgICAwIGlmIGRpc2Fi bGVkDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHp5bnFtcF9jbGtfZ2F0ZV9pc19lbmFibGVk KHN0cnVjdCBjbGtfaHcgKmh3KQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgenlucW1wX2Ns a19nYXRlICpnYXRlID0gdG9fenlucW1wX2Nsa19nYXRlKGh3KTsNCj4gPiArICAgICAgIGNvbnN0 IGNoYXIgKmNsa19uYW1lID0gY2xrX2h3X2dldF9uYW1lKGh3KTsNCj4gPiArICAgICAgIHUzMiBj bGtfaWQgPSBnYXRlLT5jbGtfaWQ7DQo+ID4gKyAgICAgICBpbnQgc3RhdGUsIHJldDsNCj4gPiAr ICAgICAgIGNvbnN0IHN0cnVjdCB6eW5xbXBfZWVtaV9vcHMgKmVlbWlfb3BzID0gZ2V0X2VlbWlf b3BzKCk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKCFlZW1pX29wcyB8fCAhZWVtaV9vcHMtPmNs b2NrX2dldHN0YXRlKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4g KyAgICAgICByZXQgPSBlZW1pX29wcy0+Y2xvY2tfZ2V0c3RhdGUoY2xrX2lkLCAmc3RhdGUpOw0K PiA+ICsgICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgICAgcHJfd2Fybl9vbmNlKCIl cygpIGNsb2NrIGdldCBzdGF0ZSBmYWlsZWQgZm9yICVzLCByZXQgPSAlZFxuIiwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBjbGtfbmFtZSwgcmV0KTsNCj4gPiAr DQo+ID4gKyAgICAgICByZXR1cm4gc3RhdGUgPyAxIDogMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr Y29uc3Qgc3RydWN0IGNsa19vcHMgenlucW1wX2Nsa19nYXRlX29wcyA9IHsNCj4gPiArICAgICAg IC5lbmFibGUgPSB6eW5xbXBfY2xrX2dhdGVfZW5hYmxlLA0KPiA+ICsgICAgICAgLmRpc2FibGUg PSB6eW5xbXBfY2xrX2dhdGVfZGlzYWJsZSwNCj4gPiArICAgICAgIC5pc19lbmFibGVkID0genlu cW1wX2Nsa19nYXRlX2lzX2VuYWJsZWQsDQo+ID4gK307DQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BM KHp5bnFtcF9jbGtfZ2F0ZV9vcHMpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHp5bnFtcF9j bGtfcmVnaXN0ZXJfZ2F0ZSAtIHJlZ2lzdGVyIGEgZ2F0ZSBjbG9jayB3aXRoIHRoZSBjbG9jayBm cmFtZXdvcmsNCj4gPiArICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBj bG9jaw0KPiA+ICsgKiBAbmFtZTogbmFtZSBvZiB0aGlzIGNsb2NrDQo+ID4gKyAqIEBjbGtfaWQ6 IElkIG9mIHRoaXMgY2xvY2sNCj4gPiArICogQHBhcmVudHM6IG5hbWUgb2YgdGhpcyBjbG9jaydz IHBhcmVudHMNCj4gPiArICogQG51bV9wYXJlbnRzOiBudW1iZXIgb2YgcGFyZW50cw0KPiA+ICsg KiBAZmxhZ3M6IGZyYW1ld29yay1zcGVjaWZpYyBmbGFncyBmb3IgdGhpcyBjbG9jaw0KPiA+ICsg KiBAY2xrX2dhdGVfZmxhZ3M6IGdhdGUtc3BlY2lmaWMgZmxhZ3MgZm9yIHRoaXMgY2xvY2sNCj4g PiArICoNCj4gPiArICogUmV0dXJuOiBjbG9jayBoYW5kbGUgb2YgdGhlIHJlZ2lzdGVyZWQgY2xv Y2sgZ2F0ZQ0KPiA+ICsgKi8NCj4gPiArc3RydWN0IGNsayAqenlucW1wX2Nsa19yZWdpc3Rlcl9n YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGNsa19pZCwgY29uc3QgY2hhciAqIGNvbnN0 ICpwYXJlbnRzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBu dW1fcGFyZW50cywgdW5zaWduZWQgbG9uZyBmbGFncywNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdTggY2xrX2dhdGVfZmxhZ3MpDQo+ID4gK3sNCj4gPiArICAgICAg IHN0cnVjdCB6eW5xbXBfY2xrX2dhdGUgKmdhdGU7DQo+ID4gKyAgICAgICBzdHJ1Y3QgY2xrICpj bGs7DQo+ID4gKyAgICAgICBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Ow0KPiA+ICsNCj4gPiAr ICAgICAgIC8qIGFsbG9jYXRlIHRoZSBnYXRlICovDQo+ID4gKyAgICAgICBnYXRlID0ga3phbGxv YyhzaXplb2YoKmdhdGUpLCBHRlBfS0VSTkVMKTsNCj4gPiArICAgICAgIGlmICghZ2F0ZSkNCj4g PiArICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ID4gKw0KPiA+ICsg ICAgICAgaW5pdC5uYW1lID0gbmFtZTsNCj4gPiArICAgICAgIGluaXQub3BzID0gJnp5bnFtcF9j bGtfZ2F0ZV9vcHM7DQo+ID4gKyAgICAgICBpbml0LmZsYWdzID0gZmxhZ3M7DQo+ID4gKyAgICAg ICBpbml0LnBhcmVudF9uYW1lcyA9IHBhcmVudHM7DQo+ID4gKyAgICAgICBpbml0Lm51bV9wYXJl bnRzID0gbnVtX3BhcmVudHM7DQo+ID4gKw0KPiA+ICsgICAgICAgLyogc3RydWN0IGNsa19nYXRl IGFzc2lnbm1lbnRzICovDQo+ID4gKyAgICAgICBnYXRlLT5mbGFncyA9IGNsa19nYXRlX2ZsYWdz Ow0KPiA+ICsgICAgICAgZ2F0ZS0+aHcuaW5pdCA9ICZpbml0Ow0KPiA+ICsgICAgICAgZ2F0ZS0+ Y2xrX2lkID0gY2xrX2lkOw0KPiA+ICsNCj4gPiArICAgICAgIGNsayA9IGNsa19yZWdpc3Rlcihk ZXYsICZnYXRlLT5odyk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKElTX0VSUihjbGspKQ0KPiA+ ICsgICAgICAgICAgICAgICBrZnJlZShnYXRlKTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4g Y2xrOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3p5bnFtcC9jbGstbXV4 LXp5bnFtcC5jIGIvZHJpdmVycy9jbGsvenlucW1wL2Nsay0NCj4gbXV4LXp5bnFtcC5jDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi5lZTM2MjQ0DQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvY2xrL3p5bnFtcC9jbGstbXV4LXp5bnFtcC5j DQo+ID4gQEAgLTAsMCArMSwxOTAgQEANCj4gPiArLyoNCj4gPiArICogWnlucSBVbHRyYVNjYWxl KyBNUFNvQyBtdXgNCj4gPiArICoNCj4gPiArICogIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IFhp bGlueA0KPiA+ICsgKg0KPiA+ICsgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogICAgIEdQTC0y LjArDQo+IA0KPiBUaGlzIHRhZyBzaG91bGQgYmUgb24gdGhlIGZpc3QgbGluZSB0aGlzIHdheToN Cj4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQo+IA0KPiA+ICsgKi8NCj4g PiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L2Nsay96eW5xbXAuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogRE9DOiBi YXNpYyBhZGp1c3RhYmxlIG11bHRpcGxleGVyIGNsb2NrIHRoYXQgY2Fubm90IGdhdGUNCj4gPiAr ICoNCj4gPiArICogVHJhaXRzIG9mIHRoaXMgY2xvY2s6DQo+ID4gKyAqIHByZXBhcmUgLSBjbGtf cHJlcGFyZSBvbmx5IGVuc3VyZXMgdGhhdCBwYXJlbnRzIGFyZSBwcmVwYXJlZA0KPiA+ICsgKiBl bmFibGUgLSBjbGtfZW5hYmxlIG9ubHkgZW5zdXJlcyB0aGF0IHBhcmVudHMgYXJlIGVuYWJsZWQN Cj4gPiArICogcmF0ZSAtIHJhdGUgaXMgb25seSBhZmZlY3RlZCBieSBwYXJlbnQgc3dpdGNoaW5n LiAgTm8gY2xrX3NldF9yYXRlIHN1cHBvcnQNCj4gPiArICogcGFyZW50IC0gcGFyZW50IGlzIGFk anVzdGFibGUgdGhyb3VnaCBjbGtfc2V0X3BhcmVudA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiBzdHJ1Y3QgenlucW1wX2Nsa19tdXggLSBtdWx0aXBsZXhlciBjbG9jaw0KPiA+ ICsgKg0KPiA+ICsgKiBAaHc6IGhhbmRsZSBiZXR3ZWVuIGNvbW1vbiBhbmQgaGFyZHdhcmUtc3Bl Y2lmaWMgaW50ZXJmYWNlcw0KPiA+ICsgKiBAZmxhZ3M6IGhhcmR3YXJlLXNwZWNpZmljIGZsYWdz DQo+ID4gKyAqIEBjbGtfaWQ6IElkIG9mIGNsb2NrDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3Qgenlu cW1wX2Nsa19tdXggew0KPiA+ICsgICAgICAgc3RydWN0IGNsa19odyBodzsNCj4gPiArICAgICAg IHU4IGZsYWdzOw0KPiA+ICsgICAgICAgdTMyIGNsa19pZDsNCj4gPiArfTsNCj4gPiArDQo+ID4g KyNkZWZpbmUgdG9fenlucW1wX2Nsa19tdXgoX2h3KSBjb250YWluZXJfb2YoX2h3LCBzdHJ1Y3QN Cj4genlucW1wX2Nsa19tdXgsIGh3KQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHp5bnFtcF9j bGtfbXV4X2dldF9wYXJlbnQgLSBHZXQgcGFyZW50IG9mIGNsb2NrDQo+ID4gKyAqIEBodzogaGFu ZGxlIGJldHdlZW4gY29tbW9uIGFuZCBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmZhY2VzDQo+ID4g KyAqDQo+ID4gKyAqIFJldHVybjogUGFyZW50IGluZGV4DQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMg dTggenlucW1wX2Nsa19tdXhfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodykNCj4gPiArew0K PiA+ICsgICAgICAgc3RydWN0IHp5bnFtcF9jbGtfbXV4ICptdXggPSB0b196eW5xbXBfY2xrX211 eChodyk7DQo+ID4gKyAgICAgICBjb25zdCBjaGFyICpjbGtfbmFtZSA9IGNsa19od19nZXRfbmFt ZShodyk7DQo+ID4gKyAgICAgICB1MzIgY2xrX2lkID0gbXV4LT5jbGtfaWQ7DQo+ID4gKyAgICAg ICB1MzIgdmFsOw0KPiA+ICsgICAgICAgaW50IHJldDsNCj4gPiArICAgICAgIGNvbnN0IHN0cnVj dCB6eW5xbXBfZWVtaV9vcHMgKmVlbWlfb3BzID0gZ2V0X2VlbWlfb3BzKCk7DQo+ID4gKw0KPiA+ ICsgICAgICAgaWYgKCFlZW1pX29wcyB8fCAhZWVtaV9vcHMtPmNsb2NrX2dldHBhcmVudCkNCj4g PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsNCj4gPiArDQo+ID4gKyAgICAgICByZXQg PSBlZW1pX29wcy0+Y2xvY2tfZ2V0cGFyZW50KGNsa19pZCwgJnZhbCk7DQo+ID4gKw0KPiA+ICsg ICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgICAgcHJfd2Fybl9vbmNlKCIlcygpIGdl dHBhcmVudCBmYWlsZWQgZm9yIGNsb2NrOiAlcywgcmV0ID0gJWRcbiIsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgY2xrX25hbWUsIHJldCk7DQo+ID4gKw0KPiA+ ICsgICAgICAgaWYgKHZhbCAmJiAobXV4LT5mbGFncyAmIENMS19NVVhfSU5ERVhfQklUKSkNCj4g PiArICAgICAgICAgICAgICAgdmFsID0gZmZzKHZhbCkgLSAxOw0KPiA+ICsNCj4gPiArICAgICAg IGlmICh2YWwgJiYgKG11eC0+ZmxhZ3MgJiBDTEtfTVVYX0lOREVYX09ORSkpDQo+ID4gKyAgICAg ICAgICAgICAgIHZhbC0tOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiB2YWw7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB6eW5xbXBfY2xrX211eF9zZXRfcGFyZW50IC0gU2V0 IHBhcmVudCBvZiBjbG9jaw0KPiA+ICsgKiBAaHc6IGhhbmRsZSBiZXR3ZWVuIGNvbW1vbiBhbmQg aGFyZHdhcmUtc3BlY2lmaWMgaW50ZXJmYWNlcw0KPiA+ICsgKiBAaW5kZXg6IFBhcmVudCBpbmRl eA0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgYWx3YXlzDQo+ID4gKyAqLw0KPiA+ICtzdGF0 aWMgaW50IHp5bnFtcF9jbGtfbXV4X3NldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHU4IGlu ZGV4KQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgenlucW1wX2Nsa19tdXggKm11eCA9IHRv X3p5bnFtcF9jbGtfbXV4KGh3KTsNCj4gPiArICAgICAgIGNvbnN0IGNoYXIgKmNsa19uYW1lID0g Y2xrX2h3X2dldF9uYW1lKGh3KTsNCj4gPiArICAgICAgIHUzMiBjbGtfaWQgPSBtdXgtPmNsa19p ZDsNCj4gPiArICAgICAgIGludCByZXQ7DQo+ID4gKyAgICAgICBjb25zdCBzdHJ1Y3QgenlucW1w X2VlbWlfb3BzICplZW1pX29wcyA9IGdldF9lZW1pX29wcygpOw0KPiA+ICsNCj4gPiArICAgICAg IGlmICghZWVtaV9vcHMgfHwgIWVlbWlfb3BzLT5jbG9ja19zZXRwYXJlbnQpDQo+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiAtRU5YSU87DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKG11eC0+Zmxh Z3MgJiBDTEtfTVVYX0lOREVYX0JJVCkNCj4gPiArICAgICAgICAgICAgICAgaW5kZXggPSAxIDw8 IGluZGV4Ow0KPiA+ICsNCj4gPiArICAgICAgIGlmIChtdXgtPmZsYWdzICYgQ0xLX01VWF9JTkRF WF9PTkUpDQo+ID4gKyAgICAgICAgICAgICAgIGluZGV4Kys7DQo+ID4gKw0KPiA+ICsgICAgICAg cmV0ID0gZWVtaV9vcHMtPmNsb2NrX3NldHBhcmVudChjbGtfaWQsIGluZGV4KTsNCj4gPiArDQo+ ID4gKyAgICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgICBwcl93YXJuX29uY2UoIiVz KCkgc2V0IHBhcmVudCBmYWlsZWQgZm9yIGNsb2NrOiAlcywgcmV0ID0gJWRcbiIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgY2xrX25hbWUsIHJldCk7DQo+ID4g Kw0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2NvbnN0IHN0cnVj dCBjbGtfb3BzIHp5bnFtcF9jbGtfbXV4X29wcyA9IHsNCj4gPiArICAgICAgIC5nZXRfcGFyZW50 ID0genlucW1wX2Nsa19tdXhfZ2V0X3BhcmVudCwNCj4gPiArICAgICAgIC5zZXRfcGFyZW50ID0g enlucW1wX2Nsa19tdXhfc2V0X3BhcmVudCwNCj4gPiArICAgICAgIC5kZXRlcm1pbmVfcmF0ZSA9 IF9fY2xrX211eF9kZXRlcm1pbmVfcmF0ZSwNCj4gPiArfTsNCj4gPiArRVhQT1JUX1NZTUJPTF9H UEwoenlucW1wX2Nsa19tdXhfb3BzKTsNCj4gPiArDQo+ID4gK2NvbnN0IHN0cnVjdCBjbGtfb3Bz IHp5bnFtcF9jbGtfbXV4X3JvX29wcyA9IHsNCj4gPiArICAgICAgIC5nZXRfcGFyZW50ID0genlu cW1wX2Nsa19tdXhfZ2V0X3BhcmVudCwNCj4gPiArfTsNCj4gPiArRVhQT1JUX1NZTUJPTF9HUEwo enlucW1wX2Nsa19tdXhfcm9fb3BzKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB6eW5xbXBf Y2xrX3JlZ2lzdGVyX211eF90YWJsZSAtIHJlZ2lzdGVyIGEgbXV4IHRhYmxlIHdpdGggdGhlIGNs b2NrDQo+IGZyYW1ld29yaw0KPiA+ICsgKiBAZGV2OiBkZXZpY2UgdGhhdCBpcyByZWdpc3Rlcmlu ZyB0aGlzIGNsb2NrDQo+ID4gKyAqIEBuYW1lOiBuYW1lIG9mIHRoaXMgY2xvY2sNCj4gPiArICog QGNsa19pZDogSWQgb2YgdGhpcyBjbG9jaw0KPiA+ICsgKiBAcGFyZW50X25hbWVzOiBuYW1lIG9m IHRoaXMgY2xvY2sncyBwYXJlbnRzDQo+ID4gKyAqIEBudW1fcGFyZW50czogbnVtYmVyIG9mIHBh cmVudHMNCj4gPiArICogQGZsYWdzOiBmcmFtZXdvcmstc3BlY2lmaWMgZmxhZ3MgZm9yIHRoaXMg Y2xvY2sNCj4gPiArICogQGNsa19tdXhfZmxhZ3M6IG11eC1zcGVjaWZpYyBmbGFncyBmb3IgdGhp cyBjbG9jaw0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IGNsb2NrIGhhbmRsZSBvZiB0aGUgcmVn aXN0ZXJlZCBjbG9jayBtdXgNCj4gPiArICovDQo+ID4gK3N0cnVjdCBjbGsgKnp5bnFtcF9jbGtf cmVnaXN0ZXJfbXV4X3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhcg0KPiAqbmFt ZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgY2xr X2lkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKiBjb25zdCAqcGFyZW50X25hbWVzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHU4IG51bV9wYXJlbnRzLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY2xrX211eF9mbGFncykNCj4g PiArew0KPiA+ICsgICAgICAgc3RydWN0IHp5bnFtcF9jbGtfbXV4ICptdXg7DQo+ID4gKyAgICAg ICBzdHJ1Y3QgY2xrICpjbGs7DQo+ID4gKyAgICAgICBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0 Ow0KPiA+ICsNCj4gPiArICAgICAgIC8qIGFsbG9jYXRlIHRoZSBtdXggKi8NCj4gPiArICAgICAg IG11eCA9IGt6YWxsb2Moc2l6ZW9mKCptdXgpLCBHRlBfS0VSTkVMKTsNCj4gPiArICAgICAgIGlm ICghbXV4KQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4g PiArDQo+ID4gKyAgICAgICBpbml0Lm5hbWUgPSBuYW1lOw0KPiA+ICsgICAgICAgaWYgKGNsa19t dXhfZmxhZ3MgJiBDTEtfTVVYX1JFQURfT05MWSkNCj4gPiArICAgICAgICAgICAgICAgaW5pdC5v cHMgPSAmenlucW1wX2Nsa19tdXhfcm9fb3BzOw0KPiA+ICsgICAgICAgZWxzZQ0KPiA+ICsgICAg ICAgICAgICAgICBpbml0Lm9wcyA9ICZ6eW5xbXBfY2xrX211eF9vcHM7DQo+ID4gKyAgICAgICBp bml0LmZsYWdzID0gZmxhZ3M7DQo+ID4gKyAgICAgICBpbml0LnBhcmVudF9uYW1lcyA9IHBhcmVu dF9uYW1lczsNCj4gPiArICAgICAgIGluaXQubnVtX3BhcmVudHMgPSBudW1fcGFyZW50czsNCj4g PiArDQo+ID4gKyAgICAgICAvKiBzdHJ1Y3QgY2xrX211eCBhc3NpZ25tZW50cyAqLw0KPiA+ICsg ICAgICAgbXV4LT5mbGFncyA9IGNsa19tdXhfZmxhZ3M7DQo+ID4gKyAgICAgICBtdXgtPmh3Lmlu aXQgPSAmaW5pdDsNCj4gPiArICAgICAgIG11eC0+Y2xrX2lkID0gY2xrX2lkOw0KPiA+ICsNCj4g PiArICAgICAgIGNsayA9IGNsa19yZWdpc3RlcihkZXYsICZtdXgtPmh3KTsNCj4gPiArDQo+ID4g KyAgICAgICBpZiAoSVNfRVJSKGNsaykpDQo+ID4gKyAgICAgICAgICAgICAgIGtmcmVlKG11eCk7 DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIGNsazsNCj4gPiArfQ0KPiA+ICtFWFBPUlRfU1lN Qk9MX0dQTCh6eW5xbXBfY2xrX3JlZ2lzdGVyX211eF90YWJsZSk7DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogenlucW1wX2Nsa19yZWdpc3Rlcl9tdXggLSByZWdpc3RlciBhIG11eCBjbG9jayB3 aXRoIHRoZSBjbG9jayBmcmFtZXdvcmsNCj4gPiArICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVn aXN0ZXJpbmcgdGhpcyBjbG9jaw0KPiA+ICsgKiBAbmFtZTogbmFtZSBvZiB0aGlzIGNsb2NrDQo+ ID4gKyAqIEBjbGtfaWQ6IElkIG9mIHRoaXMgY2xvY2sNCj4gPiArICogQHBhcmVudF9uYW1lczog bmFtZSBvZiB0aGlzIGNsb2NrJ3MgcGFyZW50cw0KPiA+ICsgKiBAbnVtX3BhcmVudHM6IG51bWJl ciBvZiBwYXJlbnRzDQo+ID4gKyAqIEBmbGFnczogZnJhbWV3b3JrLXNwZWNpZmljIGZsYWdzIGZv ciB0aGlzIGNsb2NrDQo+ID4gKyAqIEBjbGtfbXV4X2ZsYWdzOiBtdXgtc3BlY2lmaWMgZmxhZ3Mg Zm9yIHRoaXMgY2xvY2sNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiBjbG9jayBoYW5kbGUgb2Yg dGhlIHJlZ2lzdGVyZWQgY2xvY2sgbXV4DQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgY2xrICp6eW5x bXBfY2xrX3JlZ2lzdGVyX211eChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGNsa19pZCwgY29u c3QgY2hhciAqKnBhcmVudF9uYW1lcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1OCBudW1fcGFyZW50cywgdW5zaWduZWQgbG9uZyBmbGFncywNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjbGtfbXV4X2ZsYWdzKQ0KPiA+ICt7DQo+ ID4gKyAgICAgICByZXR1cm4genlucW1wX2Nsa19yZWdpc3Rlcl9tdXhfdGFibGUoZGV2LCBuYW1l LCBjbGtfaWQsIHBhcmVudF9uYW1lcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBudW1fcGFyZW50cywgZmxhZ3MsIGNsa19tdXhfZmxhZ3MpOw0KPiA+ ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKHp5bnFtcF9jbGtfcmVnaXN0ZXJfbXV4KTsNCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvenlucW1wL2Nsa2MuYyBiL2RyaXZlcnMvY2xrL3p5 bnFtcC9jbGtjLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAu LjM2YmYxYzENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9jbGsvenlucW1w L2Nsa2MuYw0KPiA+IEBAIC0wLDAgKzEsNzA3IEBADQo+ID4gKy8qDQo+ID4gKyAqIFp5bnEgVWx0 cmFTY2FsZSsgTVBTb0MgY2xvY2sgY29udHJvbGxlcg0KPiA+ICsgKg0KPiA+ICsgKiAgQ29weXJp Z2h0IChDKSAyMDE2LTIwMTcgWGlsaW54DQo+ID4gKyAqDQo+ID4gKyAqIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiAgICAgR1BMLTIuMCsNCj4gDQo+IFRoaXMgdGFnIHNob3VsZCBiZSBvbiB0aGUg ZmlzdCBsaW5lIHRoaXMgd2F5Og0KPiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCsNCj4gDQo+ID4gKyAqDQo+ID4gKyAqIEJhc2VkIG9uIGRyaXZlcnMvY2xrL3p5bnEvY2xrYy5j DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsvenlu cW1wLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv b2YuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPg0KPiA+ICsNCj4g PiArI2RlZmluZSBNQVhfUEFSRU5UICAgICAgICAgICAgICAgICAgICAgMTAwDQo+ID4gKyNkZWZp bmUgTUFYX05PREVTICAgICAgICAgICAgICAgICAgICAgIDYNCj4gPiArI2RlZmluZSBNQVhfTkFN RV9MRU4gICAgICAgICAgICAgICAgICAgNTANCj4gPiArI2RlZmluZSBNQVhfQ0xPQ0sgICAgICAg ICAgICAgICAgICAgICAgMzAwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENMS19JTklUX0VOQUJMRV9T SElGVCAgICAgICAgICAgMQ0KPiA+ICsjZGVmaW5lIENMS19UWVBFX1NISUZUICAgICAgICAgICAg ICAgICAgMg0KPiA+ICsNCj4gPiArI2RlZmluZSBQTV9BUElfUEFZTE9BRF9MRU4gICAgICAgICAg ICAgMw0KPiA+ICsNCj4gPiArI2RlZmluZSBOQV9QQVJFTlQgICAgICAgICAgICAgICAgICAgICAg LTENCj4gPiArI2RlZmluZSBEVU1NWV9QQVJFTlQgICAgICAgICAgICAgICAgICAgLTINCj4gPiAr DQo+ID4gKyNkZWZpbmUgQ0xLX1RZUEVfRklFTERfTEVOICAgICAgICAgICAgIDQNCj4gPiArI2Rl ZmluZSBDTEtfVE9QT0xPR1lfTk9ERV9PRkZTRVQgICAgICAgMTYNCj4gPiArI2RlZmluZSBOT0RF U19QRVJfUkVTUCAgICAgICAgICAgICAgICAgMw0KPiA+ICsNCj4gPiArI2RlZmluZSBDTEtfVFlQ RV9GSUVMRF9NQVNLICAgICAgICAgICAgMHhGDQo+ID4gKyNkZWZpbmUgQ0xLX0ZMQUdfRklFTERf U0hJRlQgICAgICAgICAgIDgNCj4gPiArI2RlZmluZSBDTEtfRkxBR19GSUVMRF9NQVNLICAgICAg ICAgICAgMHgzRkZGDQo+ID4gKyNkZWZpbmUgQ0xLX1RZUEVfRkxBR19GSUVMRF9TSElGVCAgICAg IDI0DQo+ID4gKyNkZWZpbmUgQ0xLX1RZUEVfRkxBR19GSUVMRF9NQVNLICAgICAgIDB4RkYNCj4g PiArDQo+ID4gKyNkZWZpbmUgQ0xLX1BBUkVOVFNfSURfTEVOICAgICAgICAgICAgICAxNg0KPiA+ ICsjZGVmaW5lIENMS19QQVJFTlRTX0lEX01BU0sgICAgICAgICAgICAweEZGRkYNCj4gPiArDQo+ ID4gKy8qIEZsYWdzIGZvciBwYXJlbnRzICovDQo+ID4gKyNkZWZpbmUgUEFSRU5UX0NMS19TRUxG ICAgICAgICAgICAgICAgICAgICAgICAgMA0KPiA+ICsjZGVmaW5lIFBBUkVOVF9DTEtfTk9ERTEg ICAgICAgICAgICAgICAxDQo+ID4gKyNkZWZpbmUgUEFSRU5UX0NMS19OT0RFMiAgICAgICAgICAg ICAgIDINCj4gPiArI2RlZmluZSBQQVJFTlRfQ0xLX05PREUzICAgICAgICAgICAgICAgMw0KPiA+ ICsjZGVmaW5lIFBBUkVOVF9DTEtfTk9ERTQgICAgICAgICAgICAgICA0DQo+ID4gKyNkZWZpbmUg UEFSRU5UX0NMS19FWFRFUk5BTCAgICAgICAgICAgIDUNCj4gPiArDQo+ID4gKyNkZWZpbmUgRU5E X09GX0NMS19OQU1FICAgICAgICAgICAgICAgICAgICAgICAgIkVORF9PRl9DTEsiDQo+ID4gKyNk ZWZpbmUgUkVTRVJWRURfQ0xLX05BTUUgICAgICAgICAgICAgICIiDQo+ID4gKw0KPiA+ICsjZGVm aW5lIENMS19WQUxJRF9NQVNLICAgICAgICAgICAgICAgICAweDENCj4gPiArI2RlZmluZSBDTEtf SU5JVF9FTkFCTEVfTUFTSyAgICAgICAgICAgKDB4MSA8PCBDTEtfSU5JVF9FTkFCTEVfU0hJRlQp DQo+ID4gKw0KPiA+ICtlbnVtIGNsa190eXBlIHsNCj4gPiArICAgICAgIENMS19UWVBFX09VVFBV VCwNCj4gPiArICAgICAgIENMS19UWVBFX0VYVEVSTkFMLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAqIHN0cnVjdCBjbG9ja19wYXJlbnQgLSBTdHJ1Y3R1cmUgZm9yIHBhcmVudCBv ZiBjbG9jaw0KPiA+ICsgKiBAaWQ6ICAgICAgICBQYXJlbnQgY2xvY2sgSUQNCj4gPiArICogQGZs YWc6IFBhcmVudCBmbGFncw0KPiA+ICsgKi8NCj4gPiArc3RydWN0IGNsb2NrX3BhcmVudCB7DQo+ ID4gKyAgICAgICBjaGFyIG5hbWVbTUFYX05BTUVfTEVOXTsNCj4gPiArICAgICAgIGludCBpZDsN Cj4gPiArICAgICAgIHUzMiBmbGFnOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IHN0cnVjdCBjbG9ja190b3BvbG9neSAtIFN0cnVjdHVyZSBmb3IgdG9wb2xvZ3kgb2YgY2xvY2sN Cj4gPiArICogQHR5cGU6IFR5cGUgb2YgdG9wb2xvZ3kNCj4gPiArICogQGZsYWc6IFRvcG9sb2d5 IGZsYWdzDQo+ID4gKyAqIEB0eXBlX2ZsYWc6IFRvcG9sb2d5IHR5cGUgc3BlY2lmaWMgZmxhZw0K PiA+ICsgKi8NCj4gPiArc3RydWN0IGNsb2NrX3RvcG9sb2d5IHsNCj4gPiArICAgICAgIHUzMiB0 eXBlOw0KPiA+ICsgICAgICAgdTMyIGZsYWc7DQo+ID4gKyAgICAgICB1MzIgdHlwZV9mbGFnOw0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0cnVjdCB6eW5xbXBfY2xvY2sgLSBT dHJ1Y3R1cmUgZm9yIGNsb2NrDQo+ID4gKyAqIEBjbGtfbmFtZTogQ2xvY2sgbmFtZQ0KPiA+ICsg KiBAdmFsaWQ6IFZhbGlkaXR5IGZsYWcgb2YgY2xvY2sNCj4gPiArICogQGluaXRfZW5hYmxlOiBp bml0X2VuYWJsZSBmbGFnIG9mIGNsb2NrDQo+ID4gKyAqIEB0b3BvbG9neTogc3RydWN0dXJlIG9m IHRvcG9sb2d5IG9mIGNsb2NrDQo+ID4gKyAqIEBudW1fbm9kZTogTnVtYmVyIG9mIG5vZGVzIHBy ZXNlbnQgaW4gdG9wb2xvZ3kNCj4gPiArICogQHBhcmVudDogc3RydWN0dXJlIG9mIHBhcmVudCBv ZiBjbG9jaw0KPiA+ICsgKiBAbnVtX3BhcmVudHM6IE51bWJlciBvZiBwYXJlbnRzIG9mIGNsb2Nr DQo+ID4gKyAqIEB0eXBlOiBUeXBlIG9mIGNsb2NrDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3Qgenlu cW1wX2Nsb2NrIHsNCj4gPiArICAgICAgIGNoYXIgY2xrX25hbWVbTUFYX05BTUVfTEVOXTsNCj4g PiArICAgICAgIHUzMiB2YWxpZDsNCj4gPiArICAgICAgIHUzMiBpbml0X2VuYWJsZTsNCj4gPiAr ICAgICAgIGVudW0gY2xrX3R5cGUgdHlwZTsNCj4gPiArICAgICAgIHN0cnVjdCBjbG9ja190b3Bv bG9neSBub2RlW01BWF9OT0RFU107DQo+ID4gKyAgICAgICB1MzIgbnVtX25vZGVzOw0KPiA+ICsg ICAgICAgc3RydWN0IGNsb2NrX3BhcmVudCBwYXJlbnRbTUFYX1BBUkVOVF07DQo+ID4gKyAgICAg ICB1MzIgbnVtX3BhcmVudHM7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgY2hh ciBjbGtfdHlwZV9wb3N0Zml4W11bMTBdID0gew0KPiA+ICsgICAgICAgW1RZUEVfSU5WQUxJRF0g PSAiIiwNCj4gPiArICAgICAgIFtUWVBFX01VWF0gPSAiX211eCIsDQo+ID4gKyAgICAgICBbVFlQ RV9HQVRFXSA9ICIiLA0KPiA+ICsgICAgICAgW1RZUEVfRElWMV0gPSAiX2RpdjEiLA0KPiA+ICsg ICAgICAgW1RZUEVfRElWMl0gPSAiX2RpdjIiLA0KPiA+ICsgICAgICAgW1RZUEVfRklYRURGQUNU T1JdID0gIl9mZiIsDQo+ID4gKyAgICAgICBbVFlQRV9QTExdID0gIiINCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBzdHJ1Y3QgenlucW1wX2Nsb2NrIGNsb2NrW01BWF9DTE9DS107DQo+ID4g K3N0YXRpYyBzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSB6eW5xbXBfY2xrX2RhdGE7DQo+ID4gK3N0 YXRpYyBzdHJ1Y3QgY2xrICp6eW5xbXBfY2xrc1tNQVhfQ0xPQ0tdOw0KPiA+ICtzdGF0aWMgdW5z aWduZWQgaW50IGNsb2NrX21heF9pZHg7DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgenlucW1w X2VlbWlfb3BzICplZW1pX29wczsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBpc192YWxpZF9j bG9jayAtIENoZWNrIHdoZXRoZXIgY2xvY2sgaXMgdmFsaWQgb3Igbm90DQo+ID4gKyAqIEBjbGtf aWQ6IENsb2NrIEluZGV4DQo+ID4gKyAqIEB2YWxpZDogMTogaWYgY2xvY2sgaXMgdmFsaWQNCj4g PiArICogICAgICAgICAwOiBpbnZhbGlkIGNsb2NrDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjog MCBTdWNjZXNzDQo+ID4gKyAqICAgICAgICAgRXJyb3IgY29kZTogRmFpbHVyZQ0KPiA+ICsgKi8N Cj4gPiArc3RhdGljIGludCBpc192YWxpZF9jbG9jayh1MzIgY2xrX2lkLCB1MzIgKnZhbGlkKQ0K PiA+ICt7DQo+ID4gKyAgICAgICBpZiAoY2xrX2lkIDwgMCB8fCBjbGtfaWQgPiBjbG9ja19tYXhf aWR4KQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ID4gKyAg ICAgICAqdmFsaWQgPSBjbG9ja1tjbGtfaWRdLnZhbGlkOw0KPiA+ICsNCj4gPiArICAgICAgIHJl dHVybiAqdmFsaWQgPyAwIDogLUVJTlZBTDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAqIHp5bnFtcF9nZXRfY2xvY2tfbmFtZSAtIEdldCBuYW1lIG9mIGNsb2NrIGZyb20gY2xvY2sg aW5kZXgNCj4gPiArICogQGNsa19pZDogQ2xvY2sgaW5kZXgNCj4gPiArICogQGNsa19uYW1lOiBO YW1lIG9mIGNsb2NrDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMDogU3VjY2Vzcw0KPiA+ICsg KiAgICAgICAgIEVycm9yIGNvZGU6IGZhaWx1cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQg enlucW1wX2dldF9jbG9ja19uYW1lKHUzMiBjbGtfaWQsIGNoYXIgKmNsa19uYW1lKQ0KPiA+ICt7 DQo+ID4gKyAgICAgICBpbnQgcmV0Ow0KPiA+ICsgICAgICAgdTMyIHZhbGlkOw0KPiA+ICsNCj4g PiArICAgICAgIHJldCA9IGlzX3ZhbGlkX2Nsb2NrKGNsa19pZCwgJnZhbGlkKTsNCj4gPiArICAg ICAgIGlmICghcmV0ICYmIHZhbGlkKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHN0cm5jcHkoY2xr X25hbWUsIGNsb2NrW2Nsa19pZF0uY2xrX25hbWUsIE1BWF9OQU1FX0xFTik7DQo+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAg ICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIGdldF9jbG9ja190eXBlIC0gR2V0IHR5cGUgb2YgY2xvY2sNCj4gPiArICogQGNs a19pZDogQ2xvY2sgSW5kZXgNCj4gPiArICogQHR5cGU6IENsb2NrIHR5cGU6IENMS19UWVBFX09V VFBVVCBvciBDTEtfVFlQRV9FWFRFUk5BTA0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDA6IFN1 Y2Nlc3MNCj4gPiArICogICAgICAgICBFcnJvciBjb2RlOiBmYWlsdXJlDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgaW50IGdldF9jbG9ja190eXBlKHUzMiBjbGtfaWQsIHUzMiAqdHlwZSkNCj4gPiAr ew0KPiA+ICsgICAgICAgaW50IHJldDsNCj4gPiArICAgICAgIHUzMiB2YWxpZDsNCj4gPiArDQo+ ID4gKyAgICAgICByZXQgPSBpc192YWxpZF9jbG9jayhjbGtfaWQsICZ2YWxpZCk7DQo+ID4gKyAg ICAgICBpZiAoIXJldCAmJiB2YWxpZCkgew0KPiA+ICsgICAgICAgICAgICAgICAqdHlwZSA9IGNs b2NrW2Nsa19pZF0udHlwZTsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICAg ICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlucW1wX3BtX2Nsb2NrX2dl dF9uYW1lIC0gR2V0IHRoZSBuYW1lIG9mIGNsb2NrIGZvciBnaXZlbiBpZA0KPiA+ICsgKiBAY2xv Y2tfaWQ6IElEIG9mIHRoZSBjbG9jayB0byBiZSBxdWVyaWVkDQo+ID4gKyAqIEBuYW1lOiBOYW1l IG9mIGdpdmVuIGNsb2NrDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0 byBnZXQgbmFtZSBvZiBjbG9jayBzcGVjaWZpZWQgYnkgZ2l2ZW4NCj4gPiArICogY2xvY2sgSUQu DQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogUmV0dXJucyBzdGF0dXMsIGluIGNhc2Ugb2YgZXJy b3IgbmFtZSB3b3VsZCBiZSAwLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB6eW5xbXBfcG1f Y2xvY2tfZ2V0X25hbWUodTMyIGNsb2NrX2lkLCBjaGFyICpuYW1lKQ0KPiA+ICt7DQo+ID4gKyAg ICAgICBzdHJ1Y3QgenlucW1wX3BtX3F1ZXJ5X2RhdGEgcWRhdGEgPSB7MH07DQo+ID4gKyAgICAg ICB1MzIgcmV0X3BheWxvYWRbUEFZTE9BRF9BUkdfQ05UXTsNCj4gPiArDQo+ID4gKyAgICAgICBx ZGF0YS5xaWQgPSBQTV9RSURfQ0xPQ0tfR0VUX05BTUU7DQo+ID4gKyAgICAgICBxZGF0YS5hcmcx ID0gY2xvY2tfaWQ7DQo+ID4gKw0KPiA+ICsgICAgICAgZWVtaV9vcHMtPnF1ZXJ5X2RhdGEocWRh dGEsIHJldF9wYXlsb2FkKTsNCj4gPiArICAgICAgIG1lbWNweShuYW1lLCByZXRfcGF5bG9hZCwg Q0xLX0dFVF9OQU1FX1JFU1BfTEVOKTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHp5bnFtcF9wbV9jbG9ja19nZXRfdG9wb2xv Z3kgLSBHZXQgdGhlIHRvcG9sb2d5IG9mIGNsb2NrIGZvciBnaXZlbiBpZA0KPiA+ICsgKiBAY2xv Y2tfaWQ6IElEIG9mIHRoZSBjbG9jayB0byBiZSBxdWVyaWVkDQo+ID4gKyAqIEBpbmRleDogTm9k ZSBpbmRleCBvZiBjbG9jayB0b3BvbG9neQ0KPiA+ICsgKiBAdG9wb2xvZ3k6IEJ1ZmZlciB0byBz dG9yZSBub2RlcyBpbiB0b3BvbG9neSBhbmQgZmxhZ3MNCj4gPiArICoNCj4gPiArICogVGhpcyBm dW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0b3BvbG9neSBpbmZvcm1hdGlvbiBmb3IgdGhlIGNsb2Nr DQo+ID4gKyAqIHNwZWNpZmllZCBieSBnaXZlbiBjbG9jayBJRC4NCj4gPiArICoNCj4gPiArICog VGhpcyBBUEkgd2lsbCByZXR1cm4gMyBub2RlIG9mIHRvcG9sb2d5IHdpdGggYSBzaW5nbGUgcmVz cG9uc2UuIFRvIGdldA0KPiA+ICsgKiBvdGhlciBub2RlcywgbWFzdGVyIHNob3VsZCBjYWxsIHNh bWUgQVBJIGluIGxvb3Agd2l0aCBuZXcNCj4gPiArICogaW5kZXggdGlsbCBlcnJvciBpcyByZXR1 cm5lZC4gRS5nIEZpcnN0IGNhbGwgc2hvdWxkIGhhdmUNCj4gPiArICogaW5kZXggMCB3aGljaCB3 aWxsIHJldHVybiBub2RlcyAwLDEgYW5kIDIuIE5leHQgY2FsbCwgaW5kZXgNCj4gPiArICogc2hv dWxkIGJlIDMgd2hpY2ggd2lsbCByZXR1cm4gbm9kZXMgMyw0IGFuZCA1IGFuZCBzbyBvbi4NCj4g PiArICoNCj4gPiArICogUmV0dXJuOiBSZXR1cm5zIHN0YXR1cywgZWl0aGVyIHN1Y2Nlc3Mgb3Ig ZXJyb3IrcmVhc29uLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB6eW5xbXBfcG1fY2xvY2tf Z2V0X3RvcG9sb2d5KHUzMiBjbG9ja19pZCwgdTMyIGluZGV4LCB1MzINCj4gKnRvcG9sb2d5KQ0K PiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgenlucW1wX3BtX3F1ZXJ5X2RhdGEgcWRhdGEgPSB7 MH07DQo+ID4gKyAgICAgICB1MzIgcmV0X3BheWxvYWRbUEFZTE9BRF9BUkdfQ05UXTsNCj4gPiAr DQo+ID4gKyAgICAgICBxZGF0YS5xaWQgPSBQTV9RSURfQ0xPQ0tfR0VUX1RPUE9MT0dZOw0KPiA+ ICsgICAgICAgcWRhdGEuYXJnMSA9IGNsb2NrX2lkOw0KPiA+ICsgICAgICAgcWRhdGEuYXJnMiA9 IGluZGV4Ow0KPiA+ICsNCj4gPiArICAgICAgIGVlbWlfb3BzLT5xdWVyeV9kYXRhKHFkYXRhLCBy ZXRfcGF5bG9hZCk7DQo+ID4gKyAgICAgICBtZW1jcHkodG9wb2xvZ3ksICZyZXRfcGF5bG9hZFsx XSwNCj4gQ0xLX0dFVF9UT1BPTE9HWV9SRVNQX1dPUkRTICogNCk7DQo+ID4gKw0KPiA+ICsgICAg ICAgcmV0dXJuIHp5bnFtcF9wbV9yZXRfY29kZSgoZW51bSBwbV9yZXRfc3RhdHVzKXJldF9wYXls b2FkWzBdKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHp5bnFtcF9wbV9jbG9j a19nZXRfZml4ZWRmYWN0b3JfcGFyYW1zIC0gR2V0IHRoZSBjbG9jaydzIGZpeGVkIGZhY3Rvcg0K PiA+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy cyBmb3IgZml4ZWQgY2xvY2sNCj4gPiArICogQGNsb2NrX2lkOiBDbG9jayBJRA0KPiA+ICsgKiBA bXVsOiBNdWx0aXBsaWNhdGlvbiB2YWx1ZQ0KPiA+ICsgKiBAZGl2OiBEaXZpc29yIHZhbHVlDQo+ ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgZml4ZWQgZmFjdG9y IHBhcmFtZWVycyBmb3IgdGhlIGZpeGVkDQo+ID4gKyAqIGNsb2NrLiBUaGlzIEFQSSBpcyBhcHBs aWNhdGlvbiBvbmx5IGZvciB0aGUgZml4ZWQgY2xvY2suDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVy bjogUmV0dXJucyBzdGF0dXMsIGVpdGhlciBzdWNjZXNzIG9yIGVycm9yK3JlYXNvbi4NCj4gPiAr ICovDQo+ID4gK3N0YXRpYyBpbnQgenlucW1wX3BtX2Nsb2NrX2dldF9maXhlZGZhY3Rvcl9wYXJh bXModTMyIGNsb2NrX2lkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdTMyICptdWwsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1MzIgKmRpdikNCj4gPiArew0KPiA+ICsgICAgICAgc3Ry dWN0IHp5bnFtcF9wbV9xdWVyeV9kYXRhIHFkYXRhID0gezB9Ow0KPiA+ICsgICAgICAgdTMyIHJl dF9wYXlsb2FkW1BBWUxPQURfQVJHX0NOVF07DQo+ID4gKw0KPiA+ICsgICAgICAgcWRhdGEucWlk ID0gUE1fUUlEX0NMT0NLX0dFVF9GSVhFREZBQ1RPUl9QQVJBTVM7DQo+ID4gKyAgICAgICBxZGF0 YS5hcmcxID0gY2xvY2tfaWQ7DQo+ID4gKw0KPiA+ICsgICAgICAgZWVtaV9vcHMtPnF1ZXJ5X2Rh dGEocWRhdGEsIHJldF9wYXlsb2FkKTsNCj4gPiArICAgICAgICptdWwgPSByZXRfcGF5bG9hZFsx XTsNCj4gPiArICAgICAgICpkaXYgPSByZXRfcGF5bG9hZFsyXTsNCj4gPiArDQo+ID4gKyAgICAg ICByZXR1cm4genlucW1wX3BtX3JldF9jb2RlKChlbnVtIHBtX3JldF9zdGF0dXMpcmV0X3BheWxv YWRbMF0pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlucW1wX3BtX2Nsb2Nr X2dldF9wYXJlbnRzIC0gR2V0IHRoZSBmaXJzdCAzIHBhcmVudHMgb2YgY2xvY2sgZm9yIGdpdmVu DQo+IGlkDQo+ID4gKyAqIEBjbG9ja19pZDogQ2xvY2sgSUQNCj4gPiArICogQGluZGV4OiBQYXJl bnQgaW5kZXgNCj4gPiArICogQHBhcmVudHM6IDMgcGFyZW50cyBvZiB0aGUgZ2l2ZW4gY2xvY2sN Cj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCAzIHBhcmVudHMg Zm9yIHRoZSBjbG9jayBzcGVjaWZpZWQgYnkNCj4gPiArICogZ2l2ZW4gY2xvY2sgSUQuDQo+ID4g KyAqDQo+ID4gKyAqIFRoaXMgQVBJIHdpbGwgcmV0dXJuIDMgcGFyZW50cyB3aXRoIGEgc2luZ2xl IHJlc3BvbnNlLiBUbyBnZXQNCj4gPiArICogb3RoZXIgcGFyZW50cywgbWFzdGVyIHNob3VsZCBj YWxsIHNhbWUgQVBJIGluIGxvb3Agd2l0aCBuZXcNCj4gPiArICogcGFyZW50IGluZGV4IHRpbGwg ZXJyb3IgaXMgcmV0dXJuZWQuIEUuZyBGaXJzdCBjYWxsIHNob3VsZCBoYXZlDQo+ID4gKyAqIGlu ZGV4IDAgd2hpY2ggd2lsbCByZXR1cm4gcGFyZW50cyAwLDEgYW5kIDIuIE5leHQgY2FsbCwgaW5k ZXgNCj4gPiArICogc2hvdWxkIGJlIDMgd2hpY2ggd2lsbCByZXR1cm4gcGFyZW50IDMsNCBhbmQg NSBhbmQgc28gb24uDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogUmV0dXJucyBzdGF0dXMsIGVp dGhlciBzdWNjZXNzIG9yIGVycm9yK3JlYXNvbi4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQg enlucW1wX3BtX2Nsb2NrX2dldF9wYXJlbnRzKHUzMiBjbG9ja19pZCwgdTMyIGluZGV4LCB1MzIN Cj4gKnBhcmVudHMpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCB6eW5xbXBfcG1fcXVlcnlf ZGF0YSBxZGF0YSA9IHswfTsNCj4gPiArICAgICAgIHUzMiByZXRfcGF5bG9hZFtQQVlMT0FEX0FS R19DTlRdOw0KPiA+ICsNCj4gPiArICAgICAgIHFkYXRhLnFpZCA9IFBNX1FJRF9DTE9DS19HRVRf UEFSRU5UUzsNCj4gPiArICAgICAgIHFkYXRhLmFyZzEgPSBjbG9ja19pZDsNCj4gPiArICAgICAg IHFkYXRhLmFyZzIgPSBpbmRleDsNCj4gPiArDQo+ID4gKyAgICAgICBlZW1pX29wcy0+cXVlcnlf ZGF0YShxZGF0YSwgcmV0X3BheWxvYWQpOw0KPiA+ICsgICAgICAgbWVtY3B5KHBhcmVudHMsICZy ZXRfcGF5bG9hZFsxXSwgQ0xLX0dFVF9QQVJFTlRTX1JFU1BfV09SRFMgKg0KPiA0KTsNCj4gPiAr DQo+ID4gKyAgICAgICByZXR1cm4genlucW1wX3BtX3JldF9jb2RlKChlbnVtIHBtX3JldF9zdGF0 dXMpcmV0X3BheWxvYWRbMF0pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlu cW1wX3BtX2Nsb2NrX2dldF9hdHRyaWJ1dGVzIC0gR2V0IHRoZSBhdHRyaWJ1dGVzIG9mIGNsb2Nr IGZvciBnaXZlbiBpZA0KPiA+ICsgKiBAY2xvY2tfaWQ6IENsb2NrIElEDQo+ID4gKyAqIEBhdHRy aWJ1dGVzOiBDbG9jayBhdHRyaWJ1dGVzDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24g aXMgdXNlZCB0byBnZXQgY2xvY2sncyBhdHRyaWJ1dGVzKGUuZy4gdmFsaWQsIGNsb2NrIHR5cGUs IGV0YykuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogUmV0dXJucyBzdGF0dXMsIGVpdGhlciBz dWNjZXNzIG9yIGVycm9yK3JlYXNvbi4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgenlucW1w X3BtX2Nsb2NrX2dldF9hdHRyaWJ1dGVzKHUzMiBjbG9ja19pZCwgdTMyICphdHRyKQ0KPiA+ICt7 DQo+ID4gKyAgICAgICBzdHJ1Y3QgenlucW1wX3BtX3F1ZXJ5X2RhdGEgcWRhdGEgPSB7MH07DQo+ ID4gKyAgICAgICB1MzIgcmV0X3BheWxvYWRbUEFZTE9BRF9BUkdfQ05UXTsNCj4gPiArDQo+ID4g KyAgICAgICBxZGF0YS5xaWQgPSBQTV9RSURfQ0xPQ0tfR0VUX0FUVFJJQlVURVM7DQo+ID4gKyAg ICAgICBxZGF0YS5hcmcxID0gY2xvY2tfaWQ7DQo+ID4gKw0KPiA+ICsgICAgICAgZWVtaV9vcHMt PnF1ZXJ5X2RhdGEocWRhdGEsIHJldF9wYXlsb2FkKTsNCj4gPiArICAgICAgIG1lbWNweShhdHRy LCAmcmV0X3BheWxvYWRbMV0sIENMS19HRVRfQVRUUl9SRVNQX1dPUkRTICogNCk7DQo+ID4gKw0K PiA+ICsgICAgICAgcmV0dXJuIHp5bnFtcF9wbV9yZXRfY29kZSgoZW51bSBwbV9yZXRfc3RhdHVz KXJldF9wYXlsb2FkWzBdKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGNsb2Nr X2dldF90b3BvbG9neTogR2V0IHRvcG9sb2d5IG9mIGNsb2NrIGZyb20gZmlybXdhcmUgdXNpbmcg UE1fQVBJDQo+ID4gKyAqIEBjbGtfaWQ6IENsb2NrIEluZGV4DQo+ID4gKyAqIEBjbGtfdG9wb2xv Z3k6IFN0cnVjdHVyZSBvZiBjbG9jayB0b3BvbG9neQ0KPiA+ICsgKiBAbnVtX25vZGVzOiBudW1i ZXIgb2Ygbm9kZXMNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwOiBTdWNjZXNzDQo+ID4gKyAq ICAgICAgICAgRXJyb3IgQ29kZTogRmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBj bG9ja19nZXRfdG9wb2xvZ3kodTMyIGNsa19pZCwgc3RydWN0IGNsb2NrX3RvcG9sb2d5DQo+ICpj bGtfdG9wb2xvZ3ksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpudW1f bm9kZXMpDQo+ID4gK3sNCj4gPiArICAgICAgIGludCBqLCBrID0gMCwgcmV0Ow0KPiA+ICsgICAg ICAgdTMyIHBtX3Jlc3BbUE1fQVBJX1BBWUxPQURfTEVOXSA9IHswfTsNCj4gPiArDQo+ID4gKyAg ICAgICAqbnVtX25vZGVzID0gMDsNCj4gPiArICAgICAgIGZvciAoaiA9IDA7IGogPD0gTUFYX05P REVTOyBqICs9IDMpIHsNCj4gPiArICAgICAgICAgICAgICAgcmV0ID0genlucW1wX3BtX2Nsb2Nr X2dldF90b3BvbG9neShjbGtfaWQsIGosIHBtX3Jlc3ApOw0KPiA+ICsgICAgICAgICAgICAgICBp ZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAg ICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBQTV9BUElfUEFZTE9BRF9MRU47IGsrKykgew0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHBtX3Jlc3Bba10gJiBDTEtfVFlQRV9G SUVMRF9NQVNLKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9u ZTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjbGtfdG9wb2xvZ3lbKm51bV9ub2Rlc10u dHlwZSA9IHBtX3Jlc3Bba10gJg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ0xLX1RZUEVfRklFTERfTUFTSzsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBjbGtfdG9wb2xvZ3lbKm51bV9ub2Rlc10uZmxhZyA9DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbV9yZXNwW2tdID4+IENMS19G TEFHX0ZJRUxEX1NISUZUKSAmDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENMS19GTEFHX0ZJRUxEX01BU0s7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg Y2xrX3RvcG9sb2d5WypudW1fbm9kZXNdLnR5cGVfZmxhZyA9DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocG1fcmVzcFtrXSA+PiBDTEtfVFlQRV9GTEFHX0ZJRUxEX1NISUZU KSAmDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEtfVFlQRV9GTEFHX0ZJ RUxEX01BU0s7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgKCpudW1fbm9kZXMpKys7DQo+ ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0NCj4gPiArZG9uZToNCj4gPiArICAg ICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogY2xvY2tfZ2V0 X3BhcmVudHM6IEdldCBwYXJlbnRzIGluZm8gZnJvbSBmaXJtd2FyZSB1c2luZyBQTV9BUEkNCj4g PiArICogQGNsa19pZDogQ2xvY2sgSW5kZXgNCj4gPiArICogQHBhcmVudDogU3RydWN0dXJlIG9m IHBhcmVudCBpbmZvcm1hdGlvbg0KPiA+ICsgKiBAbnVtX3BhcmVudHM6IFRvdGFsIG51bWJlciBv ZiBwYXJlbnRzDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMDogU3VjY2Vzcw0KPiA+ICsgKiAg ICAgICAgIEVycm9yIGNvZGU6IEZhaWx1cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgY2xv Y2tfZ2V0X3BhcmVudHModTMyIGNsa19pZCwgc3RydWN0IGNsb2NrX3BhcmVudCAqcGFyZW50cywN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqbnVtX3BhcmVudHMpDQo+ID4g K3sNCj4gPiArICAgICAgIGludCBqID0gMCwgaywgcmV0LCB0b3RhbF9wYXJlbnRzID0gMDsNCj4g PiArICAgICAgIHUzMiBwbV9yZXNwW1BNX0FQSV9QQVlMT0FEX0xFTl0gPSB7MH07DQo+ID4gKw0K PiA+ICsgICAgICAgZG8gew0KPiA+ICsgICAgICAgICAgICAgICAvKiBHZXQgcGFyZW50cyBmcm9t IGZpcm13YXJlICovDQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IHp5bnFtcF9wbV9jbG9ja19n ZXRfcGFyZW50cyhjbGtfaWQsIGosIHBtX3Jlc3ApOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAo cmV0KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgUE1fQVBJX1BBWUxPQURfTEVOOyBrKysp IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAocG1fcmVzcFtrXSA9PSAodTMyKU5B X1BBUkVOVCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm51bV9wYXJl bnRzID0gdG90YWxfcGFyZW50czsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAwOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgcGFyZW50c1trICsgal0uaWQgPSBwbV9yZXNwW2tdICYgQ0xL X1BBUkVOVFNfSURfTUFTSzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50 c1trICsgal0uaWQgPT0gRFVNTVlfUEFSRU5UKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJuY3B5KHBhcmVudHNbayArIGpdLm5hbWUsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdW1teV9uYW1lIiwgTUFYX05BTUVfTEVOKTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudHNbayArIGpdLmZsYWcg PSAwOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzW2sgKyBqXS5mbGFnID0gcG1fcmVzcFtrXSA+ Pg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ0xLX1BBUkVOVFNfSURfTEVOOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHp5bnFtcF9nZXRfY2xvY2tfbmFtZShwYXJlbnRzW2sgKyBqXS5pZCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGFyZW50c1trICsgal0ubmFtZSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9wYXJlbnRzKys7DQo+ID4gKyAgICAgICAgICAg ICAgIH0NCj4gPiArICAgICAgICAgICAgICAgaiArPSBQTV9BUElfUEFZTE9BRF9MRU47DQo+ID4g KyAgICAgICB9IHdoaWxlICh0b3RhbF9wYXJlbnRzIDw9IE1BWF9QQVJFTlQpOw0KPiA+ICsgICAg ICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBnZXRfcGFyZW50 X2xpc3Q6IENyZWF0ZSBsaXN0IG9mIHBhcmVudHMgbmFtZQ0KPiA+ICsgKiBAbnA6ICAgICAgICAg ICAgICAgIERldmljZSBub2RlDQo+ID4gKyAqIEBjbGtfaWQ6IENsb2NrIEluZGV4DQo+ID4gKyAq IEBwYXJlbnRfbGlzdCBMaXN0IG9mIHBhcmVudCdzIG5hbWUNCj4gPiArICogQG51bV9wYXJlbnRz OiBUb3RhbCBudW1iZXIgb2YgcGFyZW50cw0KPiA+ICsgKg0KPiA+ICsgIyBSZXR1cm46IDA6IFN1 Y2Nlc3MNCj4gPiArICogICAgICAgICBFcnJvciBjb2RlOiBGYWlsdXJlDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgaW50IGdldF9wYXJlbnRfbGlzdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1MzIg Y2xrX2lkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipwYXJl bnRfbGlzdCwgdTMyICpudW1fcGFyZW50cykNCj4gPiArew0KPiA+ICsgICAgICAgaW50IGkgPSAw LCByZXQ7DQo+ID4gKyAgICAgICB1MzIgdG90YWxfcGFyZW50cyA9IGNsb2NrW2Nsa19pZF0ubnVt X3BhcmVudHM7DQo+ID4gKyAgICAgICBzdHJ1Y3QgY2xvY2tfdG9wb2xvZ3kgKmNsa19ub2RlczsN Cj4gPiArICAgICAgIHN0cnVjdCBjbG9ja19wYXJlbnQgKnBhcmVudHM7DQo+ID4gKw0KPiA+ICsg ICAgICAgY2xrX25vZGVzID0gY2xvY2tbY2xrX2lkXS5ub2RlOw0KPiA+ICsgICAgICAgcGFyZW50 cyA9IGNsb2NrW2Nsa19pZF0ucGFyZW50Ow0KPiA+ICsNCj4gPiArICAgICAgIGZvciAoaSA9IDA7 IGkgPCB0b3RhbF9wYXJlbnRzOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgICAgaWYgKCFwYXJl bnRzW2ldLmZsYWcpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfbGlzdFtp XSA9IHBhcmVudHNbaV0ubmFtZTsNCj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJl bnRzW2ldLmZsYWcgPT0gUEFSRU5UX0NMS19FWFRFUk5BTCkgew0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIHJldCA9IG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwgImNsb2NrLW5hbWVz IiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFyZW50c1tpXS5uYW1lKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAo cmV0IDwgMCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm5jcHkocGFy ZW50c1tpXS5uYW1lLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiZHVtbXlfbmFtZSIsIE1BWF9OQU1FX0xFTik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgcGFyZW50X2xpc3RbaV0gPSBwYXJlbnRzW2ldLm5hbWU7DQo+ID4gKyAgICAgICAgICAgICAg IH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0KHBhcmVudHNbaV0u bmFtZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX3R5cGVfcG9zdGZp eFtjbGtfbm9kZXNbcGFyZW50c1tpXS5mbGFnIC0gMV0uDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHR5cGVdKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRf bGlzdFtpXSA9IHBhcmVudHNbaV0ubmFtZTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsg ICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICpudW1fcGFyZW50cyA9IHRvdGFsX3BhcmVudHM7 DQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IHp5bnFtcF9yZWdpc3Rlcl9jbGtfdG9wb2xvZ3k6IFJlZ2lzdGVyIGNsb2NrIHRvcG9sb2d5DQo+ ID4gKyAqIEBjbGtfaWQ6IENsb2NrIEluZGV4DQo+ID4gKyAqIEBjbGtfbmFtZTogQ2xvY2sgTmFt ZQ0KPiA+ICsgKiBAbnVtX3BhcmVudHM6IFRvdGFsIG51bWJlciBvZiBwYXJlbnRzDQo+ID4gKyAq IEBwYXJlbnRfbmFtZXM6IExpc3Qgb2YgcGFyZW50cyBuYW1lDQo+ID4gKyAqDQo+ID4gKyAqIFJl dHVybjogMDogU3VjY2Vzcw0KPiA+ICsgKiAgICAgICAgIEVycm9yIGNvZGU6IEZhaWx1cmUNCj4g PiArICovDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgY2xrICp6eW5xbXBfcmVnaXN0ZXJfY2xrX3RvcG9s b2d5KGludCBjbGtfaWQsIGNoYXIgKmNsa19uYW1lLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcGFyZW50cywNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqcGFy ZW50X25hbWVzKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBpbnQgaiwgcmV0Ow0KPiA+ICsgICAgICAg dTMyIG51bV9ub2RlcywgbXVsdCwgZGl2Ow0KPiA+ICsgICAgICAgY2hhciAqY2xrX291dCA9IE5V TEw7DQo+ID4gKyAgICAgICBzdHJ1Y3QgY2xvY2tfdG9wb2xvZ3kgKm5vZGVzOw0KPiA+ICsgICAg ICAgc3RydWN0IGNsayAqY2xrID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgICAgICBub2RlcyA9IGNs b2NrW2Nsa19pZF0ubm9kZTsNCj4gPiArICAgICAgIG51bV9ub2RlcyA9IGNsb2NrW2Nsa19pZF0u bnVtX25vZGVzOw0KPiA+ICsNCj4gPiArICAgICAgIGZvciAoaiA9IDA7IGogPCBudW1fbm9kZXM7 IGorKykgew0KPiA+ICsgICAgICAgICAgICAgICBpZiAoaiAhPSAobnVtX25vZGVzIC0gMSkpIHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjbGtfb3V0ID0ga2FzcHJpbnRmKEdGUF9LRVJO RUwsICIlcyVzIiwgY2xrX25hbWUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjbGtfdHlwZV9wb3N0Zml4W25vZGVzW2pdLnR5cGVdKTsNCj4gPiArICAg ICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjbGtfb3V0 ID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcyIsIGNsa19uYW1lKTsNCj4gPiArICAgICAgICAg ICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc3dpdGNoIChub2Rlc1tqXS50eXBl KSB7DQo+ID4gKyAgICAgICAgICAgICAgIGNhc2UgVFlQRV9NVVg6DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgY2xrID0genlucW1wX2Nsa19yZWdpc3Rlcl9tdXgoTlVMTCwgY2xrX291dCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjbGtfaWQsIHBhcmVudF9uYW1lcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcGFyZW50cywNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1tqXS5mbGFnLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5vZGVzW2pdLnR5cGVfZmxhZyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 DQo+ID4gKyAgICAgICAgICAgICAgIGNhc2UgVFlQRV9QTEw6DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgY2xrID0gY2xrX3JlZ2lzdGVyX3p5bnFtcF9wbGwoY2xrX291dCwgY2xrX2lkLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhcmVudF9uYW1lcywgMSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBub2Rlc1tqXS5mbGFnKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBUWVBFX0ZJWEVERkFDVE9S Og0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHp5bnFtcF9wbV9jbG9ja19nZXRf Zml4ZWRmYWN0b3JfcGFyYW1zKGNsa19pZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXVsdCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZGl2KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjbGsgPSBjbGtf cmVnaXN0ZXJfZml4ZWRfZmFjdG9yKE5VTEwsIGNsa19vdXQsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfbmFtZXNbMF0s DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBub2Rlc1tqXS5mbGFnLCBtdWx0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2KTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBUWVBFX0RJVjE6DQo+ID4g KyAgICAgICAgICAgICAgIGNhc2UgVFlQRV9ESVYyOg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGNsayA9IHp5bnFtcF9jbGtfcmVnaXN0ZXJfZGl2aWRlcihOVUxMLCBjbGtfb3V0LCBjbGtf aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5vZGVzW2pdLnR5cGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF9uYW1lcywgMSwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k ZXNbal0uZmxhZywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbm9kZXNbal0udHlwZV9mbGFnKTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBUWVBFX0dBVEU6DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY2xrID0genlucW1wX2Nsa19yZWdpc3Rlcl9nYXRl KE5VTEwsIGNsa19vdXQsIGNsa19pZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X25hbWVzLCAxLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1tqXS5m bGFnLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBub2Rlc1tqXS50eXBlX2ZsYWcpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIHByX2VycigiJXMoKSBVbmtub3duIHRvcG9sb2d5IGZvciAlc1xuIiwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGNsa19vdXQpOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4g KyAgICAgICAgICAgICAgIGlmIChJU19FUlIoY2xrKSkNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBwcl93YXJuX29uY2UoIiVzKCkgJXMgcmVnaXN0ZXIgZmFpbCB3aXRoICVsZFxuIiwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGNsa19uYW1l LCBQVFJfRVJSKGNsaykpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgcGFyZW50X25hbWVz WzBdID0gY2xrX291dDsNCj4gPiArICAgICAgIH0NCj4gPiArICAgICAgIGtmcmVlKGNsa19vdXQp Ow0KPiA+ICsgICAgICAgcmV0dXJuIGNsazsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAqIHp5bnFtcF9yZWdpc3Rlcl9jbG9ja3M6IFJlZ2lzdGVyIGNsb2Nrcw0KPiA+ICsgKiBAbnA6 IERldmljZSBub2RlDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMDogU3VjY2Vzcw0KPiA+ICsg KiAgICAgICAgIEVycm9yIGNvZGU6IGZhaWx1cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQg enlucW1wX3JlZ2lzdGVyX2Nsb2NrcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQ0KPiA+ICt7DQo+ ID4gKyAgICAgICBpbnQgcmV0Ow0KPiA+ICsgICAgICAgdTMyIGksIHRvdGFsX3BhcmVudHMgPSAw LCB0eXBlID0gMDsNCj4gPiArICAgICAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lc1tNQVhfUEFS RU5UXTsNCj4gPiArDQo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2xvY2tfbWF4X2lkeDsg aSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGNoYXIgY2xrX25hbWVbTUFYX05BTUVfTEVOXTsN Cj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIC8qIGdldCBjbG9jayBuYW1lLCBjb250aW51ZSB0 byBuZXh0IGNsb2NrIGlmIG5hbWUgbm90IGZvdW5kICovDQo+ID4gKyAgICAgICAgICAgICAgIGlm ICh6eW5xbXBfZ2V0X2Nsb2NrX25hbWUoaSwgY2xrX25hbWUpKQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgLyogQ2hlY2sg aWYgY2xvY2sgaXMgdmFsaWQgYW5kIG91dHB1dCBjbG9jay4NCj4gPiArICAgICAgICAgICAgICAg ICogRG8gbm90IHJlZ2l0ZXIgaW52YWxpZCBvciBleHRlcm5hbCBjbG9jay4NCj4gPiArICAgICAg ICAgICAgICAgICovDQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGdldF9jbG9ja190eXBlKGks ICZ0eXBlKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHJldCB8fCB0eXBlICE9IENMS19UWVBF X09VVFBVVCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICAgIC8qIEdldCBwYXJlbnRzIG9mIGNsb2NrKi8NCj4gPiArICAgICAg ICAgICAgICAgaWYgKGdldF9wYXJlbnRfbGlzdChucCwgaSwgcGFyZW50X25hbWVzLCAmdG90YWxf cGFyZW50cykpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBXQVJOX09OQ0UoMSwgIk5v IHBhcmVudHMgZm91bmQgZm9yICVzXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjbG9ja1tpXS5jbGtfbmFtZSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg Y29udGludWU7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICAgIHp5bnFtcF9jbGtzW2ldID0genlucW1wX3JlZ2lzdGVyX2Nsa190b3BvbG9neShpLCBjbGtf bmFtZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRvdGFsX3BhcmVudHMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfbmFtZXMpOw0K PiA+ICsNCj4gPiArICAgICAgICAgICAgICAgLyogRW5hYmxlIGNsb2NrIGlmIGluaXRfZW5hYmxl IGZsYWcgaXMgMSAqLw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoY2xvY2tbaV0uaW5pdF9lbmFi bGUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY2xrX3ByZXBhcmVfZW5hYmxlKHp5bnFt cF9jbGtzW2ldKTsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBmb3IgKGkgPSAw OyBpIDwgY2xvY2tfbWF4X2lkeDsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChJU19F UlIoenlucW1wX2Nsa3NbaV0pKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcHJfZXJy KCJaeW5xIFVsdHJhc2NhbGUrIE1QU29DIGNsayAlczogcmVnaXN0ZXIgZmFpbGVkIHdpdGgNCj4g JWxkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja1tpXS5jbGtf bmFtZSwgUFRSX0VSUih6eW5xbXBfY2xrc1tpXSkpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIFdBUk5fT04oMSk7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0NCj4g PiArICAgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlu cW1wX2dldF9jbG9ja19pbmZvIC0gR2V0IGNsb2NrIGluZm9ybWF0aW9uIGZyb20gZmlybXdhcmUg dXNpbmcNCj4gUE1fQVBJDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCB6eW5xbXBfZ2V0X2Ns b2NrX2luZm8odm9pZCkNCj4gPiArew0KPiA+ICsgICAgICAgaW50IGksIHJldDsNCj4gPiArICAg ICAgIHUzMiBhdHRyLCB0eXBlID0gMDsNCj4gPiArDQo+ID4gKyAgICAgICBtZW1zZXQoY2xvY2ss IDAsIHNpemVvZihjbG9jaykpOw0KPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9DTE9D SzsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHp5bnFtcF9wbV9jbG9ja19nZXRfbmFtZShp LCBjbG9ja1tpXS5jbGtfbmFtZSk7DQo+ID4gKyAgICAgICAgICAgICAgIGlmICghc3RybmNtcChj bG9ja1tpXS5jbGtfbmFtZSwgRU5EX09GX0NMS19OQU1FLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTUFYX05BTUVfTEVOKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGNsb2NrX21heF9pZHggPSBpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K PiA+ICsgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKGNsb2NrW2ldLmNsa19uYW1l LCBSRVNFUlZFRF9DTEtfTkFNRSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBNQVhfTkFNRV9MRU4pKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHJl dCA9IHp5bnFtcF9wbV9jbG9ja19nZXRfYXR0cmlidXRlcyhpLCAmYXR0cik7DQo+ID4gKyAgICAg ICAgICAgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBjbG9ja1tpXS52YWxpZCA9IGF0dHIgJiBDTEtf VkFMSURfTUFTSzsNCj4gPiArICAgICAgICAgICAgICAgY2xvY2tbaV0uaW5pdF9lbmFibGUgPSAh IShhdHRyICYgQ0xLX0lOSVRfRU5BQkxFX01BU0spOw0KPiA+ICsgICAgICAgICAgICAgICBjbG9j a1tpXS50eXBlID0gYXR0ciA+PiBDTEtfVFlQRV9TSElGVCA/IENMS19UWVBFX0VYVEVSTkFMIDoN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENMS19UWVBFX09VVFBVVDsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAv KiBHZXQgdG9wb2xvZ3kgb2YgYWxsIGNsb2NrICovDQo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBp IDwgY2xvY2tfbWF4X2lkeDsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGdldF9j bG9ja190eXBlKGksICZ0eXBlKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHJldCB8fCB0eXBl ICE9IENMS19UWVBFX09VVFBVVCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGNsb2NrX2dldF90b3BvbG9neShp LCBjbG9ja1tpXS5ub2RlLCAmY2xvY2tbaV0ubnVtX25vZGVzKTsNCj4gPiArICAgICAgICAgICAg ICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiAr DQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGNsb2NrX2dldF9wYXJlbnRzKGksIGNsb2NrW2ld LnBhcmVudCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNs b2NrW2ldLm51bV9wYXJlbnRzKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHJldCkNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgIH0NCj4gPiArfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHp5bnFtcF9jbGtfc2V0dXAgLSAgU2V0dXAgdGhlIGNs b2NrIGZyYW1ld29yayBhbmQgcmVnaXN0ZXIgY2xvY2tzDQo+ID4gKyAqIEBucDogRGV2aWNlIG5v ZGUNCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIF9faW5pdCB6eW5xbXBfY2xrX3NldHVwKHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnApDQo+ID4gK3sNCj4gPiArICAgICAgIGludCBpZHg7DQo+ID4g Kw0KPiA+ICsgICAgICAgaWR4ID0gb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKG5wLCAiY2xvY2st bmFtZXMiLCAicHNzX3JlZl9jbGsiKTsNCj4gPiArICAgICAgIGlmIChpZHggPCAwKSB7DQo+ID4g KyAgICAgICAgICAgICAgIHByX2VycigicHNzX3JlZl9jbGsgbm90IHByb3ZpZGVkXG4iKTsNCj4g PiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgaWR4 ID0gb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKG5wLCAiY2xvY2stbmFtZXMiLCAidmlkZW9fY2xr Iik7DQo+ID4gKyAgICAgICBpZiAoaWR4IDwgMCkgew0KPiA+ICsgICAgICAgICAgICAgICBwcl9l cnIoInZpZGVvX2NsayBub3QgcHJvdmlkZWRcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1 cm47DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICAgICBpZHggPSBvZl9wcm9wZXJ0eV9tYXRjaF9z dHJpbmcobnAsICJjbG9jay1uYW1lcyIsICJwc3NfYWx0X3JlZl9jbGsiKTsNCj4gPiArICAgICAg IGlmIChpZHggPCAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHByX2VycigicHNzX2FsdF9yZWZf Y2xrIG5vdCBwcm92aWRlZFxuIik7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gPiAr ICAgICAgIH0NCj4gPiArICAgICAgIGlkeCA9IG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwg ImNsb2NrLW5hbWVzIiwgImF1eF9yZWZfY2xrIik7DQo+ID4gKyAgICAgICBpZiAoaWR4IDwgMCkg ew0KPiA+ICsgICAgICAgICAgICAgICBwcl9lcnIoImF1eF9yZWZfY2xrIG5vdCBwcm92aWRlZFxu Iik7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gPiArICAgICAgIH0NCj4gPiArICAg ICAgIGlkeCA9IG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwgImNsb2NrLW5hbWVzIiwgImd0 X2NyeF9yZWZfY2xrIik7DQo+ID4gKyAgICAgICBpZiAoaWR4IDwgMCkgew0KPiA+ICsgICAgICAg ICAgICAgICBwcl9lcnIoImF1eF9yZWZfY2xrIG5vdCBwcm92aWRlZFxuIik7DQo+ID4gKyAgICAg ICAgICAgICAgIHJldHVybjsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICB6eW5x bXBfZ2V0X2Nsb2NrX2luZm8oKTsNCj4gPiArICAgICAgIHp5bnFtcF9yZWdpc3Rlcl9jbG9ja3Mo bnApOw0KPiA+ICsNCj4gPiArICAgICAgIHp5bnFtcF9jbGtfZGF0YS5jbGtzID0genlucW1wX2Ns a3M7DQo+ID4gKyAgICAgICB6eW5xbXBfY2xrX2RhdGEuY2xrX251bSA9IGNsb2NrX21heF9pZHg7 DQo+ID4gKyAgICAgICBvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX29uZWNlbGxf Z2V0LCAmenlucW1wX2Nsa19kYXRhKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IHp5bnFtcF9jbG9ja19pbml0IC0gIEluaXRpYWxpemUgenlucW1wIGNsb2Nrcw0KPiA+ICsgKg0K PiA+ICsgKiBSZXR1cm46IDAgYWx3YXlzDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IF9faW5p dCB6eW5xbXBfY2xvY2tfaW5pdCh2b2lkKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wOw0KPiA+ICsNCj4gPiArICAgICAgIG5wID0gb2ZfZmluZF9jb21wYXRpYmxl X25vZGUoTlVMTCwgTlVMTCwgInhsbngsenlucW1wLWNsa2MiKTsNCj4gPiArICAgICAgIGlmICgh bnApIHsNCj4gPiArICAgICAgICAgICAgICAgcHJfZXJyKCIlczogY2xrYyBub2RlIG5vdCBmb3Vu ZFxuIiwgX19mdW5jX18pOw0KPiA+ICsgICAgICAgICAgICAgICBvZl9ub2RlX3B1dChucCk7DQo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICAgIGVlbWlfb3BzID0gZ2V0X2VlbWlfb3BzKCk7DQo+ID4gKyAgICAgICBpZiAoIWVlbWlf b3BzIHx8ICFlZW1pX29wcy0+cXVlcnlfZGF0YSkgew0KPiA+ICsgICAgICAgICAgICAgICBwcl9l cnIoIiVzOiBjbGsgZGF0YSBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsNCj4gPiArICAgICAgICAg ICAgICAgb2Zfbm9kZV9wdXQobnApOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4g PiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICB6eW5xbXBfY2xrX3NldHVwKG5wKTsNCj4g PiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICthcmNoX2luaXRjYWxsKHp5 bnFtcF9jbG9ja19pbml0KTsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvenlucW1wL2Rp dmlkZXIuYyBiL2RyaXZlcnMvY2xrL3p5bnFtcC9kaXZpZGVyLmMNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjFhMTQ3M2MNCj4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gKysrIGIvZHJpdmVycy9jbGsvenlucW1wL2RpdmlkZXIuYw0KPiA+IEBAIC0wLDAgKzEsMjM5 IEBADQo+ID4gKy8qDQo+ID4gKyAqIFp5bnEgVWx0cmFTY2FsZSsgTVBTb0MgRGl2aWRlciBzdXBw b3J0DQo+ID4gKyAqDQo+ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBYaWxpbngNCj4g PiArICoNCj4gPiArICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICAgICBHUEwtMi4wKw0KPiAN Cj4gU2FtZSBhcyBhYm92ZTogVGhpcyB0YWcgc2hvdWxkIGJlIG9uIHRoZSBmaXN0IGxpbmUgdGhp cyB3YXk6DQo+IC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KPiANCj4gPiAr ICoNCj4gPiArICogQWRqdXN0YWJsZSBkaXZpZGVyIGNsb2NrIGltcGxlbWVudGF0aW9uDQo+ID4g KyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvY2xrLXByb3ZpZGVyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsvenlucW1wLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9l cnIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvbG9nMi5oPg0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogRE9DOiBiYXNpYyBhZGp1c3RhYmxl IGRpdmlkZXIgY2xvY2sgdGhhdCBjYW5ub3QgZ2F0ZQ0KPiA+ICsgKg0KPiA+ICsgKiBUcmFpdHMg b2YgdGhpcyBjbG9jazoNCj4gPiArICogcHJlcGFyZSAtIGNsa19wcmVwYXJlIG9ubHkgZW5zdXJl cyB0aGF0IHBhcmVudHMgYXJlIHByZXBhcmVkDQo+ID4gKyAqIGVuYWJsZSAtIGNsa19lbmFibGUg b25seSBlbnN1cmVzIHRoYXQgcGFyZW50cyBhcmUgZW5hYmxlZA0KPiA+ICsgKiByYXRlIC0gcmF0 ZSBpcyBhZGp1c3RhYmxlLiAgY2xrLT5yYXRlID0gY2VpbGluZyhwYXJlbnQtPnJhdGUgLyBkaXZp c29yKQ0KPiA+ICsgKiBwYXJlbnQgLSBmaXhlZCBwYXJlbnQuICBObyBjbGtfc2V0X3BhcmVudCBz dXBwb3J0DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSB0b196eW5xbXBfY2xrX2Rpdmlk ZXIoX2h3KSAgICAgICAgICAgICBcDQo+ID4gKyAgICAgICBjb250YWluZXJfb2YoX2h3LCBzdHJ1 Y3QgenlucW1wX2Nsa19kaXZpZGVyLCBodykNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1 Y3QgenlucW1wX2Nsa19kaXZpZGVyIC0gYWRqdXN0YWJsZSBkaXZpZGVyIGNsb2NrDQo+ID4gKyAq DQo+ID4gKyAqIEBodzogICAgICAgIGhhbmRsZSBiZXR3ZWVuIGNvbW1vbiBhbmQgaGFyZHdhcmUt c3BlY2lmaWMgaW50ZXJmYWNlcw0KPiA+ICsgKiBAZmxhZ3M6IEhhcmR3YXJlIHNwZWNpZmljIGZs YWdzDQo+ID4gKyAqIEBjbGtfaWQ6IElkIG9mIGNsb2NrDQo+ID4gKyAqIEBkaXZfdHlwZTogZGl2 aXNvciB0eXBlIChUWVBFX0RJVjEgb3IgVFlQRV9ESVYyKQ0KPiA+ICsgKi8NCj4gPiArc3RydWN0 IHp5bnFtcF9jbGtfZGl2aWRlciB7DQo+ID4gKyAgICAgICBzdHJ1Y3QgY2xrX2h3IGh3Ow0KPiA+ ICsgICAgICAgdTggZmxhZ3M7DQo+ID4gKyAgICAgICB1MzIgY2xrX2lkOw0KPiA+ICsgICAgICAg dTMyIGRpdl90eXBlOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCB6eW5xbXBfZGl2 aWRlcl9nZXRfdmFsKHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUsIHVuc2lnbmVkIGxvbmcNCj4g cmF0ZSkNCj4gPiArew0KPiA+ICsgICAgICAgcmV0dXJuIERJVl9ST1VORF9VUF9VTEwoKHU2NClw YXJlbnRfcmF0ZSwgcmF0ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBs b25nIHp5bnFtcF9jbGtfZGl2aWRlcl9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHp5bnFt cF9jbGtfZGl2aWRlciAqZGl2aWRlciA9IHRvX3p5bnFtcF9jbGtfZGl2aWRlcihodyk7DQo+ID4g KyAgICAgICBjb25zdCBjaGFyICpjbGtfbmFtZSA9IGNsa19od19nZXRfbmFtZShodyk7DQo+ID4g KyAgICAgICB1MzIgY2xrX2lkID0gZGl2aWRlci0+Y2xrX2lkOw0KPiA+ICsgICAgICAgdTMyIGRp dl90eXBlID0gZGl2aWRlci0+ZGl2X3R5cGU7DQo+ID4gKyAgICAgICB1MzIgZGl2LCB2YWx1ZTsN Cj4gPiArICAgICAgIGludCByZXQ7DQo+ID4gKyAgICAgICBjb25zdCBzdHJ1Y3QgenlucW1wX2Vl bWlfb3BzICplZW1pX29wcyA9IGdldF9lZW1pX29wcygpOw0KPiA+ICsNCj4gPiArICAgICAgIGlm ICghZWVtaV9vcHMgfHwgIWVlbWlfb3BzLT5jbG9ja19nZXRkaXZpZGVyKQ0KPiA+ICsgICAgICAg ICAgICAgICByZXR1cm4gLUVOWElPOw0KPiA+ICsNCj4gPiArICAgICAgIHJldCA9IGVlbWlfb3Bz LT5jbG9ja19nZXRkaXZpZGVyKGNsa19pZCwgJmRpdik7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYg KHJldCkNCj4gPiArICAgICAgICAgICAgICAgcHJfd2Fybl9vbmNlKCIlcygpIGdldCBkaXZpZGVy IGZhaWxlZCBmb3IgJXMsIHJldCA9ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19mdW5jX18sIGNsa19uYW1lLCByZXQpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChk aXZfdHlwZSA9PSBUWVBFX0RJVjEpDQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gZGl2ICYg MHhGRkZGOw0KPiA+ICsgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IChk aXYgPj4gMTYpICYgMHhGRkZGOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiB6eW5xbXBfZGl2 aWRlcl9nZXRfdmFsKCh1NjQpcGFyZW50X3JhdGUsIHZhbHVlKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGxvbmcgenlucW1wX2Nsa19kaXZpZGVyX3JvdW5kX3JhdGUoc3RydWN0IGNsa19o dyAqaHcsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyByYXRlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgKnByYXRlKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3Qg enlucW1wX2Nsa19kaXZpZGVyICpkaXZpZGVyID0gdG9fenlucW1wX2Nsa19kaXZpZGVyKGh3KTsN Cj4gPiArICAgICAgIGNvbnN0IGNoYXIgKmNsa19uYW1lID0gY2xrX2h3X2dldF9uYW1lKGh3KTsN Cj4gPiArICAgICAgIHUzMiBjbGtfaWQgPSBkaXZpZGVyLT5jbGtfaWQ7DQo+ID4gKyAgICAgICB1 MzIgZGl2X3R5cGUgPSBkaXZpZGVyLT5kaXZfdHlwZTsNCj4gPiArICAgICAgIHUzMiBiZXN0ZGl2 Ow0KPiA+ICsgICAgICAgaW50IHJldDsNCj4gPiArICAgICAgIGNvbnN0IHN0cnVjdCB6eW5xbXBf ZWVtaV9vcHMgKmVlbWlfb3BzID0gZ2V0X2VlbWlfb3BzKCk7DQo+ID4gKw0KPiA+ICsgICAgICAg aWYgKCFlZW1pX29wcyB8fCAhZWVtaV9vcHMtPmNsb2NrX2dldGRpdmlkZXIpDQo+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiAtRU5YSU87DQo+ID4gKw0KPiA+ICsgICAgICAgLyogaWYgcmVhZCBv bmx5LCBqdXN0IHJldHVybiBjdXJyZW50IHZhbHVlICovDQo+ID4gKyAgICAgICBpZiAoZGl2aWRl ci0+ZmxhZ3MgJiBDTEtfRElWSURFUl9SRUFEX09OTFkpIHsNCj4gPiArICAgICAgICAgICAgICAg cmV0ID0gZWVtaV9vcHMtPmNsb2NrX2dldGRpdmlkZXIoY2xrX2lkLCAmYmVzdGRpdik7DQo+ID4g Kw0KPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIHByX3dhcm5fb25jZSgiJXMoKSBnZXQgZGl2aWRlciBmYWlsZWQgZm9yICVzLCByZXQgPSAl ZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18s IGNsa19uYW1lLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoZGl2X3R5cGUgPT0gVFlQ RV9ESVYxKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJlc3RkaXYgPSBiZXN0ZGl2ICYg MHhGRkZGOw0KPiA+ICsgICAgICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgYmVzdGRpdiAgPSAoYmVzdGRpdiA+PiAxNikgJiAweEZGRkY7DQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgICByZXR1cm4gRElWX1JPVU5EX1VQX1VMTCgodTY0KSpwcmF0ZSwgYmVzdGRp dik7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgYmVzdGRpdiA9IHp5bnFtcF9k aXZpZGVyX2dldF92YWwoKnByYXRlLCByYXRlKTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoKGNs a19od19nZXRfZmxhZ3MoaHcpICYgQ0xLX1NFVF9SQVRFX1BBUkVOVCkgJiYNCj4gPiArICAgICAg ICAgICAoKGNsa19od19nZXRfZmxhZ3MoaHcpICYgQ0xLX0ZSQUMpKSkNCj4gPiArICAgICAgICAg ICAgICAgYmVzdGRpdiA9IHJhdGUgJSAqcHJhdGUgPyAxIDogYmVzdGRpdjsNCj4gPiArICAgICAg ICpwcmF0ZSA9IHJhdGUgKiBiZXN0ZGl2Ow0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiByYXRl Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlucW1wX2Nsa19kaXZpZGVyX3Nl dF9yYXRlIC0gU2V0IHJhdGUgb2YgZGl2aWRlciBjbG9jaw0KPiA+ICsgKiBAaHc6ICAgICAgICBo YW5kbGUgYmV0d2VlbiBjb21tb24gYW5kIGhhcmR3YXJlLXNwZWNpZmljIGludGVyZmFjZXMNCj4g PiArICogQHJhdGU6IHJhdGUgb2YgY2xvY2sgdG8gYmUgc2V0DQo+ID4gKyAqIEBwYXJlbnRfcmF0 ZTogcmF0ZSBvZiBwYXJlbnQgY2xvY2sNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIGFsd2F5 cw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB6eW5xbXBfY2xrX2RpdmlkZXJfc2V0X3JhdGUo c3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQ0KPiA+ ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgenlucW1wX2Nsa19kaXZpZGVyICpkaXZpZGVyID0gdG9f enlucW1wX2Nsa19kaXZpZGVyKGh3KTsNCj4gPiArICAgICAgIGNvbnN0IGNoYXIgKmNsa19uYW1l ID0gY2xrX2h3X2dldF9uYW1lKGh3KTsNCj4gPiArICAgICAgIHUzMiBjbGtfaWQgPSBkaXZpZGVy LT5jbGtfaWQ7DQo+ID4gKyAgICAgICB1MzIgZGl2X3R5cGUgPSBkaXZpZGVyLT5kaXZfdHlwZTsN Cj4gPiArICAgICAgIHUzMiB2YWx1ZSwgZGl2Ow0KPiA+ICsgICAgICAgaW50IHJldDsNCj4gPiAr ICAgICAgIGNvbnN0IHN0cnVjdCB6eW5xbXBfZWVtaV9vcHMgKmVlbWlfb3BzID0gZ2V0X2VlbWlf b3BzKCk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKCFlZW1pX29wcyB8fCAhZWVtaV9vcHMtPmNs b2NrX3NldGRpdmlkZXIpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5YSU87DQo+ID4g Kw0KPiA+ICsgICAgICAgdmFsdWUgPSB6eW5xbXBfZGl2aWRlcl9nZXRfdmFsKHBhcmVudF9yYXRl LCByYXRlKTsNCj4gPiArICAgICAgIGlmIChkaXZfdHlwZSA9PSBUWVBFX0RJVjEpIHsNCj4gPiAr ICAgICAgICAgICAgICAgZGl2ID0gdmFsdWUgJiAweEZGRkY7DQo+ID4gKyAgICAgICAgICAgICAg IGRpdiB8PSAoKHUxNiktMSkgPDwgMTY7DQo+ID4gKyAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAg ICAgICAgICAgICBkaXYgPSAoKHUxNiktMSk7DQo+ID4gKyAgICAgICAgICAgICAgIGRpdiB8PSB2 YWx1ZSA8PCAxNjsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXQgPSBlZW1p X29wcy0+Y2xvY2tfc2V0ZGl2aWRlcihjbGtfaWQsIGRpdik7DQo+ID4gKw0KPiA+ICsgICAgICAg aWYgKHJldCkNCj4gPiArICAgICAgICAgICAgICAgcHJfd2Fybl9vbmNlKCIlcygpIHNldCBkaXZp ZGVyIGZhaWxlZCBmb3IgJXMsIHJldCA9ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19mdW5jX18sIGNsa19uYW1lLCByZXQpOw0KPiA+ICsNCj4gPiArICAgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMg enlucW1wX2Nsa19kaXZpZGVyX29wcyA9IHsNCj4gPiArICAgICAgIC5yZWNhbGNfcmF0ZSA9IHp5 bnFtcF9jbGtfZGl2aWRlcl9yZWNhbGNfcmF0ZSwNCj4gPiArICAgICAgIC5yb3VuZF9yYXRlID0g enlucW1wX2Nsa19kaXZpZGVyX3JvdW5kX3JhdGUsDQo+ID4gKyAgICAgICAuc2V0X3JhdGUgPSB6 eW5xbXBfY2xrX2RpdmlkZXJfc2V0X3JhdGUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICogX3JlZ2lzdGVyX2RpdmlkZXIgLSByZWdpc3RlciBhIGRpdmlkZXIgY2xvY2sNCj4gPiAr ICogQGRldjogZGV2aWNlIHJlZ2lzdGVyaW5nIHRoaXMgY2xvY2sNCj4gPiArICogQG5hbWU6IG5h bWUgb2YgdGhpcyBjbG9jaw0KPiA+ICsgKiBAY2xrX2lkOiBJZCBvZiBjbG9jaw0KPiA+ICsgKiBA ZGl2X3R5cGU6IFR5cGUgb2YgZGl2aXNvcg0KPiA+ICsgKiBAcGFyZW50czogbmFtZSBvZiBjbG9j aydzIHBhcmVudHMNCj4gPiArICogQG51bV9wYXJlbnRzOiBudW1iZXIgb2YgcGFyZW50cw0KPiA+ ICsgKiBAZmxhZ3M6IGZyYW1ld29yay1zcGVjaWZpYyBmbGFncw0KPiA+ICsgKiBAY2xrX2Rpdmlk ZXJfZmxhZ3M6IGRpdmlkZXItc3BlY2lmaWMgZmxhZ3MgZm9yIHRoaXMgY2xvY2sNCj4gPiArICoN Cj4gPiArICogUmV0dXJuOiBoYW5kbGUgdG8gcmVnaXN0ZXJlZCBjbG9jayBkaXZpZGVyDQo+ID4g KyAqLw0KPiA+ICtzdGF0aWMgc3RydWN0IGNsayAqX3JlZ2lzdGVyX2RpdmlkZXIoc3RydWN0IGRl dmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1MzIgY2xrX2lkLCB1MzIgZGl2X3R5cGUsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqcGFyZW50cywNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggbnVtX3BhcmVudHMsIHVu c2lnbmVkIGxvbmcgZmxhZ3MsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHU4IGNsa19kaXZpZGVyX2ZsYWdzKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgenlu cW1wX2Nsa19kaXZpZGVyICpkaXY7DQo+ID4gKyAgICAgICBzdHJ1Y3QgY2xrICpjbGs7DQo+ID4g KyAgICAgICBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Ow0KPiA+ICsNCj4gPiArICAgICAgIC8q IGFsbG9jYXRlIHRoZSBkaXZpZGVyICovDQo+ID4gKyAgICAgICBkaXYgPSBremFsbG9jKHNpemVv ZigqZGl2KSwgR0ZQX0tFUk5FTCk7DQo+ID4gKyAgICAgICBpZiAoIWRpdikNCj4gPiArICAgICAg ICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ID4gKw0KPiA+ICsgICAgICAgaW5p dC5uYW1lID0gbmFtZTsNCj4gPiArICAgICAgIGluaXQub3BzID0gJnp5bnFtcF9jbGtfZGl2aWRl cl9vcHM7DQo+ID4gKyAgICAgICBpbml0LmZsYWdzID0gZmxhZ3M7DQo+ID4gKyAgICAgICBpbml0 LnBhcmVudF9uYW1lcyA9IHBhcmVudHM7DQo+ID4gKyAgICAgICBpbml0Lm51bV9wYXJlbnRzID0g bnVtX3BhcmVudHM7DQo+ID4gKw0KPiA+ICsgICAgICAgLyogc3RydWN0IGNsa19kaXZpZGVyIGFz c2lnbm1lbnRzICovDQo+ID4gKyAgICAgICBkaXYtPmZsYWdzID0gY2xrX2RpdmlkZXJfZmxhZ3M7 DQo+ID4gKyAgICAgICBkaXYtPmh3LmluaXQgPSAmaW5pdDsNCj4gPiArICAgICAgIGRpdi0+Y2xr X2lkID0gY2xrX2lkOw0KPiA+ICsgICAgICAgZGl2LT5kaXZfdHlwZSA9IGRpdl90eXBlOw0KPiA+ ICsNCj4gPiArICAgICAgIC8qIHJlZ2lzdGVyIHRoZSBjbG9jayAqLw0KPiA+ICsgICAgICAgY2xr ID0gY2xrX3JlZ2lzdGVyKGRldiwgJmRpdi0+aHcpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChJ U19FUlIoY2xrKSkNCj4gPiArICAgICAgICAgICAgICAga2ZyZWUoZGl2KTsNCj4gPiArDQo+ID4g KyAgICAgICByZXR1cm4gY2xrOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlu cW1wX2Nsa19yZWdpc3Rlcl9kaXZpZGVyIC0gcmVnaXN0ZXIgYSBkaXZpZGVyIGNsb2NrDQo+ID4g KyAqIEBkZXY6IGRldmljZSByZWdpc3RlcmluZyB0aGlzIGNsb2NrDQo+ID4gKyAqIEBuYW1lOiBu YW1lIG9mIHRoaXMgY2xvY2sNCj4gPiArICogQGNsa19pZDogSWQgb2YgY2xvY2sNCj4gPiArICog QGRpdl90eXBlOiBUeXBlIG9mIGRpdmlzb3INCj4gPiArICogQHBhcmVudHM6IG5hbWUgb2YgY2xv Y2sncyBwYXJlbnRzDQo+ID4gKyAqIEBudW1fcGFyZW50czogbnVtYmVyIG9mIHBhcmVudHMNCj4g PiArICogQGZsYWdzOiBmcmFtZXdvcmstc3BlY2lmaWMgZmxhZ3MNCj4gPiArICogQGNsa19kaXZp ZGVyX2ZsYWdzOiBkaXZpZGVyLXNwZWNpZmljIGZsYWdzIGZvciB0aGlzIGNsb2NrDQo+ID4gKyAq DQo+ID4gKyAqIFJldHVybjogaGFuZGxlIHRvIHJlZ2lzdGVyZWQgY2xvY2sgZGl2aWRlcg0KPiA+ ICsgKi8NCj4gPiArc3RydWN0IGNsayAqenlucW1wX2Nsa19yZWdpc3Rlcl9kaXZpZGVyKHN0cnVj dCBkZXZpY2UgKmRldiwgY29uc3QgY2hhcg0KPiAqbmFtZSwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGNsa19pZCwgdTMyIGRpdl90eXBlLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogY29uc3Qg KnBhcmVudHMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4 IG51bV9wYXJlbnRzLCB1bnNpZ25lZCBsb25nIGZsYWdzLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1OCBjbGtfZGl2aWRlcl9mbGFncykNCj4gPiArew0KPiA+ ICsgICAgICAgcmV0dXJuIF9yZWdpc3Rlcl9kaXZpZGVyKGRldiwgbmFtZSwgY2xrX2lkLCBkaXZf dHlwZSwgcGFyZW50cywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1f cGFyZW50cywgZmxhZ3MsIGNsa19kaXZpZGVyX2ZsYWdzKTsNCj4gPiArfQ0KPiA+ICtFWFBPUlRf U1lNQk9MX0dQTCh6eW5xbXBfY2xrX3JlZ2lzdGVyX2RpdmlkZXIpOw0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2Nsay96eW5xbXAvcGxsLmMgYi9kcml2ZXJzL2Nsay96eW5xbXAvcGxsLmMNCj4g PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjc1ZGVmMjENCj4gPiAt LS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9jbGsvenlucW1wL3BsbC5jDQo+ID4gQEAg LTAsMCArMSwzODQgQEANCj4gPiArLyoNCj4gPiArICogWnlucSBVbHRyYVNjYWxlKyBNUFNvQyBQ TEwgZHJpdmVyDQo+ID4gKyAqDQo+ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBYaWxp bngNCj4gPiArICoNCj4gPiArICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICAgICBHUEwtMi4w Kw0KPiANCj4gU2FtZSBhcyBhYm92ZTogVGhpcyB0YWcgc2hvdWxkIGJlIG9uIHRoZSBmaXN0IGxp bmUgdGhpcyB3YXk6DQo+IC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KPiAN Cj4gPiArICovDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L2Nsay96eW5xbXAuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1Y3QgenlucW1wX3BsbCAtIFN0cnVjdHVyZSBm b3IgUExMIGNsb2NrDQo+ID4gKyAqIEBodzogICAgICAgICAgICAgICAgSGFuZGxlIGJldHdlZW4g Y29tbW9uIGFuZCBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmZhY2VzDQo+ID4gKyAqIEBjbGtfaWQ6 ICAgIFBMTCBjbG9jayBJRA0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHp5bnFtcF9wbGwgew0KPiA+ ICsgICAgICAgc3RydWN0IGNsa19odyBodzsNCj4gPiArICAgICAgIHUzMiBjbGtfaWQ7DQo+ID4g K307DQo+ID4gKw0KPiA+ICsjZGVmaW5lIHRvX3p5bnFtcF9wbGwoX2h3KSAgICAgY29udGFpbmVy X29mKF9odywgc3RydWN0IHp5bnFtcF9wbGwsIGh3KQ0KPiA+ICsNCj4gPiArLyogUmVnaXN0ZXIg Yml0ZmllbGQgZGVmaW5lcyAqLw0KPiA+ICsjZGVmaW5lIFBMTENUUkxfRkJESVZfTUFTSyAgICAg MHg3ZjAwDQo+ID4gKyNkZWZpbmUgUExMQ1RSTF9GQkRJVl9TSElGVCAgICA4DQo+ID4gKyNkZWZp bmUgUExMQ1RSTF9CUF9NQVNLICAgICAgICAgICAgICAgIEJJVCgzKQ0KPiA+ICsjZGVmaW5lIFBM TENUUkxfRElWMl9NQVNLICAgICAgQklUKDE2KQ0KPiA+ICsjZGVmaW5lIFBMTENUUkxfUkVTRVRf TUFTSyAgICAgMQ0KPiA+ICsjZGVmaW5lIFBMTENUUkxfUkVTRVRfVkFMICAgICAgMQ0KPiA+ICsj ZGVmaW5lIFBMTF9TVEFUVVNfTE9DS0VEICAgICAgMQ0KPiA+ICsjZGVmaW5lIFBMTENUUkxfUkVT RVRfU0hJRlQgICAgMA0KPiA+ICsjZGVmaW5lIFBMTENUUkxfRElWMl9TSElGVCAgICAgMTYNCj4g PiArDQo+ID4gKyNkZWZpbmUgUExMX0ZCRElWX01JTiAgMjUNCj4gPiArI2RlZmluZSBQTExfRkJE SVZfTUFYICAxMjUNCj4gPiArDQo+ID4gKyNkZWZpbmUgUFNfUExMX1ZDT19NSU4gMTUwMDAwMDAw MA0KPiA+ICsjZGVmaW5lIFBTX1BMTF9WQ09fTUFYIDMwMDAwMDAwMDBVTA0KPiA+ICsNCj4gPiAr ZW51bSBwbGxfbW9kZSB7DQo+ID4gKyAgICAgICBQTExfTU9ERV9JTlQsDQo+ID4gKyAgICAgICBQ TExfTU9ERV9GUkFDLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArI2RlZmluZSBGUkFDX09GRlNFVCAw eDgNCj4gPiArI2RlZmluZSBQTExGQ0ZHX0ZSQUNfRU4gICAgICAgIEJJVCgzMSkNCj4gPiArI2Rl ZmluZSBGUkFDX0RJViAgMHgxMDAwMCAgLyogMl4xNiAqLw0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAqIHBsbF9nZXRfbW9kZSAtIEdldCBtb2RlIG9mIFBMTA0KPiA+ICsgKiBAaHc6IEhhbmRsZSBi ZXR3ZWVuIGNvbW1vbiBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgaW50ZXJmYWNlcw0KPiA+ICsgKg0K PiA+ICsgKiBSZXR1cm46IE1vZGUgb2YgUExMDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW5saW5l IGVudW0gcGxsX21vZGUgcGxsX2dldF9tb2RlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KPiA+ICt7DQo+ ID4gKyAgICAgICBzdHJ1Y3QgenlucW1wX3BsbCAqY2xrID0gdG9fenlucW1wX3BsbChodyk7DQo+ ID4gKyAgICAgICB1MzIgY2xrX2lkID0gY2xrLT5jbGtfaWQ7DQo+ID4gKyAgICAgICBjb25zdCBj aGFyICpjbGtfbmFtZSA9IGNsa19od19nZXRfbmFtZShodyk7DQo+ID4gKyAgICAgICB1MzIgcmV0 X3BheWxvYWRbUEFZTE9BRF9BUkdfQ05UXTsNCj4gPiArICAgICAgIGludCByZXQ7DQo+ID4gKyAg ICAgICBjb25zdCBzdHJ1Y3QgenlucW1wX2VlbWlfb3BzICplZW1pX29wcyA9IGdldF9lZW1pX29w cygpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghZWVtaV9vcHMgfHwgIWVlbWlfb3BzLT5pb2N0 bCkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsNCj4gPiArDQo+ID4gKyAgICAg ICByZXQgPSBlZW1pX29wcy0+aW9jdGwoMCwgSU9DVExfR0VUX1BMTF9GUkFDX01PREUsIGNsa19p ZCwgMCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRfcGF5bG9hZCk7DQo+ ID4gKyAgICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgICBwcl93YXJuX29uY2UoIiVz KCkgUExMIGdldCBmcmFjIG1vZGUgZmFpbGVkIGZvciAlcywgcmV0ID0gJWRcbiIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgY2xrX25hbWUsIHJldCk7DQo+ID4g Kw0KPiA+ICsgICAgICAgcmV0dXJuIHJldF9wYXlsb2FkWzFdOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogcGxsX3NldF9tb2RlIC0gU2V0IHRoZSBQTEwgbW9kZQ0KPiA+ICsgKiBA aHc6ICAgICAgICAgICAgICAgIEhhbmRsZSBiZXR3ZWVuIGNvbW1vbiBhbmQgaGFyZHdhcmUtc3Bl Y2lmaWMgaW50ZXJmYWNlcw0KPiA+ICsgKiBAb246ICAgICAgICAgICAgICAgIEZsYWcgdG8gZGV0 ZXJtaW5lIHRoZSBtb2RlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgcGxsX3Nl dF9tb2RlKHN0cnVjdCBjbGtfaHcgKmh3LCBib29sIG9uKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBz dHJ1Y3QgenlucW1wX3BsbCAqY2xrID0gdG9fenlucW1wX3BsbChodyk7DQo+ID4gKyAgICAgICB1 MzIgY2xrX2lkID0gY2xrLT5jbGtfaWQ7DQo+ID4gKyAgICAgICBjb25zdCBjaGFyICpjbGtfbmFt ZSA9IGNsa19od19nZXRfbmFtZShodyk7DQo+ID4gKyAgICAgICBpbnQgcmV0Ow0KPiA+ICsgICAg ICAgdTMyIG1vZGU7DQo+ID4gKyAgICAgICBjb25zdCBzdHJ1Y3QgenlucW1wX2VlbWlfb3BzICpl ZW1pX29wcyA9IGdldF9lZW1pX29wcygpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghZWVtaV9v cHMgfHwgIWVlbWlfb3BzLT5pb2N0bCkgew0KPiA+ICsgICAgICAgICAgICAgICBwcl93YXJuX29u Y2UoImVlbWlfb3BzIG5vdCBmb3VuZFxuIik7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsN Cj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBpZiAob24pDQo+ID4gKyAgICAgICAg ICAgICAgIG1vZGUgPSBQTExfTU9ERV9GUkFDOw0KPiA+ICsgICAgICAgZWxzZQ0KPiA+ICsgICAg ICAgICAgICAgICBtb2RlID0gUExMX01PREVfSU5UOw0KPiA+ICsNCj4gPiArICAgICAgIHJldCA9 IGVlbWlfb3BzLT5pb2N0bCgwLCBJT0NUTF9TRVRfUExMX0ZSQUNfTU9ERSwgY2xrX2lkLCBtb2Rl LA0KPiBOVUxMKTsNCj4gPiArICAgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgIHBy X3dhcm5fb25jZSgiJXMoKSBQTEwgc2V0IGZyYWMgbW9kZSBmYWlsZWQgZm9yICVzLCByZXQgPSAl ZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBjbGtfbmFt ZSwgcmV0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHp5bnFtcF9wbGxfcm91 bmRfcmF0ZSAtIFJvdW5kIGEgY2xvY2sgZnJlcXVlbmN5DQo+ID4gKyAqIEBodzogICAgICAgICAg ICAgICAgSGFuZGxlIGJldHdlZW4gY29tbW9uIGFuZCBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmZh Y2VzDQo+ID4gKyAqIEByYXRlOiAgICAgIERlc2lyZWQgY2xvY2sgZnJlcXVlbmN5DQo+ID4gKyAq IEBwcmF0ZTogICAgIENsb2NrIGZyZXF1ZW5jeSBvZiBwYXJlbnQgY2xvY2sNCj4gPiArICoNCj4g PiArICogUmV0dXJuOiAgICAgRnJlcXVlbmN5IGNsb3Nlc3QgdG8gQHJhdGUgdGhlIGhhcmR3YXJl IGNhbiBnZW5lcmF0ZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGxvbmcgenlucW1wX3BsbF9yb3Vu ZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnByYXRlKQ0KPiA+ICt7 DQo+ID4gKyAgICAgICB1MzIgZmJkaXY7DQo+ID4gKyAgICAgICBsb25nIHJhdGVfZGl2LCBmOw0K PiA+ICsNCj4gPiArICAgICAgIC8qIEVuYWJsZSB0aGUgZnJhY3Rpb25hbCBtb2RlIGlmIG5lZWRl ZCAqLw0KPiA+ICsgICAgICAgcmF0ZV9kaXYgPSAoKHJhdGUgKiBGUkFDX0RJVikgLyAqcHJhdGUp Ow0KPiA+ICsgICAgICAgZiA9IHJhdGVfZGl2ICUgRlJBQ19ESVY7DQo+ID4gKyAgICAgICBwbGxf c2V0X21vZGUoaHcsICEhZik7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKHBsbF9nZXRfbW9kZSho dykgPT0gUExMX01PREVfRlJBQykgew0KPiA+ICsgICAgICAgICAgICAgICBpZiAocmF0ZSA+IFBT X1BMTF9WQ09fTUFYKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZmJkaXYgPSByYXRl IC8gUFNfUExMX1ZDT19NQVg7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmF0ZSA9IHJh dGUgLyAoZmJkaXYgKyAxKTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAg ICAgICBpZiAocmF0ZSA8IFBTX1BMTF9WQ09fTUlOKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgZmJkaXYgPSBESVZfUk9VTkRfVVAoUFNfUExMX1ZDT19NSU4sIHJhdGUpOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIHJhdGUgPSByYXRlICogZmJkaXY7DQo+ID4gKyAgICAgICAg ICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJhdGU7DQo+ID4gKyAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgZmJkaXYgPSBESVZfUk9VTkRfQ0xPU0VTVChyYXRlLCAqcHJh dGUpOw0KPiA+ICsgICAgICAgZmJkaXYgPSBjbGFtcF90KHUzMiwgZmJkaXYsIFBMTF9GQkRJVl9N SU4sIFBMTF9GQkRJVl9NQVgpOw0KPiA+ICsgICAgICAgcmV0dXJuICpwcmF0ZSAqIGZiZGl2Ow0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlucW1wX3BsbF9yZWNhbGNfcmF0ZSAt IFJlY2FsY3VsYXRlIGNsb2NrIGZyZXF1ZW5jeQ0KPiA+ICsgKiBAaHc6ICAgICAgICAgICAgICAg ICAgICAgICAgSGFuZGxlIGJldHdlZW4gY29tbW9uIGFuZCBoYXJkd2FyZS1zcGVjaWZpYw0KPiBp bnRlcmZhY2VzDQo+ID4gKyAqIEBwYXJlbnRfcmF0ZTogICAgICAgQ2xvY2sgZnJlcXVlbmN5IG9m IHBhcmVudCBjbG9jaw0KPiA+ICsgKiBSZXR1cm46ICAgICAgICAgICAgIEN1cnJlbnQgY2xvY2sg ZnJlcXVlbmN5DQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyB6eW5xbXBfcGxs X3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCj4gPiAr ew0KPiA+ICsgICAgICAgc3RydWN0IHp5bnFtcF9wbGwgKmNsayA9IHRvX3p5bnFtcF9wbGwoaHcp Ow0KPiA+ICsgICAgICAgdTMyIGNsa19pZCA9IGNsay0+Y2xrX2lkOw0KPiA+ICsgICAgICAgY29u c3QgY2hhciAqY2xrX25hbWUgPSBjbGtfaHdfZ2V0X25hbWUoaHcpOw0KPiA+ICsgICAgICAgdTMy IGZiZGl2LCBkYXRhOw0KPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyByYXRlLCBmcmFjOw0KPiA+ ICsgICAgICAgdTMyIHJldF9wYXlsb2FkW1BBWUxPQURfQVJHX0NOVF07DQo+ID4gKyAgICAgICBp bnQgcmV0Ow0KPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHp5bnFtcF9lZW1pX29wcyAqZWVtaV9v cHMgPSBnZXRfZWVtaV9vcHMoKTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIWVlbWlfb3BzIHx8 ICFlZW1pX29wcy0+Y2xvY2tfZ2V0ZGl2aWRlcikNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJu IDA7DQo+ID4gKw0KPiA+ICsgICAgICAgLyoNCj4gPiArICAgICAgICAqIG1ha2VzIHByb2JhYmx5 IHNlbnNlIHRvIHJlZHVuZGFudGx5IHNhdmUgZmJkaXYgaW4gdGhlIHN0cnVjdA0KPiA+ICsgICAg ICAgICogenlucW1wX3BsbCB0byBzYXZlIHRoZSBJTyBhY2Nlc3MuDQo+ID4gKyAgICAgICAgKi8N Cj4gPiArICAgICAgIHJldCA9IGVlbWlfb3BzLT5jbG9ja19nZXRkaXZpZGVyKGNsa19pZCwgJmZi ZGl2KTsNCj4gPiArICAgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgIHByX3dhcm5f b25jZSgiJXMoKSBnZXQgZGl2aWRlciBmYWlsZWQgZm9yICVzLCByZXQgPSAlZFxuIiwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBjbGtfbmFtZSwgcmV0KTsNCj4g PiArDQo+ID4gKyAgICAgICByYXRlID0gIHBhcmVudF9yYXRlICogZmJkaXY7DQo+ID4gKyAgICAg ICBpZiAocGxsX2dldF9tb2RlKGh3KSA9PSBQTExfTU9ERV9GUkFDKSB7DQo+ID4gKyAgICAgICAg ICAgICAgIGVlbWlfb3BzLT5pb2N0bCgwLCBJT0NUTF9HRVRfUExMX0ZSQUNfREFUQSwgY2xrX2lk LCAwLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0X3BheWxvYWQpOw0K PiA+ICsgICAgICAgICAgICAgICBkYXRhID0gcmV0X3BheWxvYWRbMV07DQo+ID4gKyAgICAgICAg ICAgICAgIGZyYWMgPSAocGFyZW50X3JhdGUgKiBkYXRhKSAvIEZSQUNfRElWOw0KPiA+ICsgICAg ICAgICAgICAgICByYXRlID0gcmF0ZSArIGZyYWM7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgICAgcmV0dXJuIHJhdGU7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB6 eW5xbXBfcGxsX3NldF9yYXRlIC0gU2V0IHJhdGUgb2YgUExMDQo+ID4gKyAqIEBodzogICAgICAg ICAgICAgICAgICAgICAgICBIYW5kbGUgYmV0d2VlbiBjb21tb24gYW5kIGhhcmR3YXJlLXNwZWNp ZmljDQo+IGludGVyZmFjZXMNCj4gPiArICogQHJhdGU6ICAgICAgICAgICAgICBGcmVxdWVuY3kg b2YgY2xvY2sgdG8gYmUgc2V0DQo+ID4gKyAqIEBwYXJlbnRfcmF0ZTogICAgICAgQ2xvY2sgZnJl cXVlbmN5IG9mIHBhcmVudCBjbG9jaw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB6eW5xbXBf cGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUp DQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCB6eW5xbXBfcGxsICpjbGsgPSB0b196eW5xbXBf cGxsKGh3KTsNCj4gPiArICAgICAgIHUzMiBjbGtfaWQgPSBjbGstPmNsa19pZDsNCj4gPiArICAg ICAgIGNvbnN0IGNoYXIgKmNsa19uYW1lID0gY2xrX2h3X2dldF9uYW1lKGh3KTsNCj4gPiArICAg ICAgIHUzMiBmYmRpdiwgZGF0YTsNCj4gPiArICAgICAgIGxvbmcgcmF0ZV9kaXYsIGZyYWMsIG0s IGY7DQo+ID4gKyAgICAgICBpbnQgcmV0Ow0KPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHp5bnFt cF9lZW1pX29wcyAqZWVtaV9vcHMgPSBnZXRfZWVtaV9vcHMoKTsNCj4gPiArDQo+ID4gKyAgICAg ICBpZiAoIWVlbWlfb3BzIHx8ICFlZW1pX29wcy0+Y2xvY2tfc2V0ZGl2aWRlcikNCj4gPiArICAg ICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAocGxsX2dl dF9tb2RlKGh3KSA9PSBQTExfTU9ERV9GUkFDKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBjaGlsZHJlbjsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIC8qDQo+ID4gKyAg ICAgICAgICAgICAgICAqIFdlJ3JlIHJ1bm5pbmcgb24gYSBaeW5xTVAgY29tcGF0aWJsZSBtYWNo aW5lLCBtYWtlIHN1cmUgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAqIFZQTEwgb25seSBoYXMg b25lIGNoaWxkLg0KPiA+ICsgICAgICAgICAgICAgICAgKi8NCj4gPiArICAgICAgICAgICAgICAg Y2hpbGRyZW4gPSBjbGtfZ2V0X2NoaWxkcmVuKCJ2cGxsIik7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgICAvKiBBY2NvdW50IGZvciB2cGxsX3RvX2xwZCBhbmQgZHBfdmlkZW9fcmVmICovDQo+ ID4gKyAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbiA+IDIpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgV0FSTigxLCAiVHdvIGRldmljZXMgYXJlIHVzaW5nIHZwbGwgd2hpY2ggaXMgZm9y YmlkZGVuXG4iKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHJhdGVfZGl2ID0gKChyYXRl ICogRlJBQ19ESVYpIC8gcGFyZW50X3JhdGUpOw0KPiA+ICsgICAgICAgICAgICAgICBtID0gcmF0 ZV9kaXYgLyBGUkFDX0RJVjsNCj4gPiArICAgICAgICAgICAgICAgZiA9IHJhdGVfZGl2ICUgRlJB Q19ESVY7DQo+ID4gKyAgICAgICAgICAgICAgIG0gPSBjbGFtcF90KHUzMiwgbSwgKFBMTF9GQkRJ Vl9NSU4pLCAoUExMX0ZCRElWX01BWCkpOw0KPiA+ICsgICAgICAgICAgICAgICByYXRlID0gcGFy ZW50X3JhdGUgKiBtOw0KPiA+ICsgICAgICAgICAgICAgICBmcmFjID0gKHBhcmVudF9yYXRlICog ZikgLyBGUkFDX0RJVjsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGVlbWlfb3Bz LT5jbG9ja19zZXRkaXZpZGVyKGNsa19pZCwgbSk7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChy ZXQpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcHJfd2Fybl9vbmNlKCIlcygpIHNldCBk aXZpZGVyIGZhaWxlZCBmb3IgJXMsIHJldCA9ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgY2xrX25hbWUsIHJldCk7DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgICBkYXRhID0gKEZSQUNfRElWICogZikgLyBGUkFDX0RJVjsNCj4gPiAr ICAgICAgICAgICAgICAgZWVtaV9vcHMtPmlvY3RsKDAsIElPQ1RMX1NFVF9QTExfRlJBQ19EQVRB LCBjbGtfaWQsIGRhdGEsIE5VTEwpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJu IChyYXRlICsgZnJhYyk7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgZmJkaXYg PSBESVZfUk9VTkRfQ0xPU0VTVChyYXRlLCBwYXJlbnRfcmF0ZSk7DQo+ID4gKyAgICAgICBmYmRp diA9IGNsYW1wX3QodTMyLCBmYmRpdiwgUExMX0ZCRElWX01JTiwgUExMX0ZCRElWX01BWCk7DQo+ ID4gKyAgICAgICByZXQgPSBlZW1pX29wcy0+Y2xvY2tfc2V0ZGl2aWRlcihjbGtfaWQsIGZiZGl2 KTsNCj4gPiArICAgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgIHByX3dhcm5fb25j ZSgiJXMoKSBzZXQgZGl2aWRlciBmYWlsZWQgZm9yICVzLCByZXQgPSAlZFxuIiwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBjbGtfbmFtZSwgcmV0KTsNCj4gPiAr DQo+ID4gKyAgICAgICByZXR1cm4gcGFyZW50X3JhdGUgKiBmYmRpdjsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIHp5bnFtcF9wbGxfaXNfZW5hYmxlZCAtIENoZWNrIGlmIGEgY2xv Y2sgaXMgZW5hYmxlZA0KPiA+ICsgKiBAaHc6ICAgICAgICAgICAgICAgIEhhbmRsZSBiZXR3ZWVu IGNvbW1vbiBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgaW50ZXJmYWNlcw0KPiA+ICsgKg0KPiA+ICsg KiBSZXR1cm46ICAgICAxIGlmIHRoZSBjbG9jayBpcyBlbmFibGVkLCAwIG90aGVyd2lzZQ0KPiA+ ICsgKi8NCj4gPiArc3RhdGljIGludCB6eW5xbXBfcGxsX2lzX2VuYWJsZWQoc3RydWN0IGNsa19o dyAqaHcpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCB6eW5xbXBfcGxsICpjbGsgPSB0b196 eW5xbXBfcGxsKGh3KTsNCj4gPiArICAgICAgIGNvbnN0IGNoYXIgKmNsa19uYW1lID0gY2xrX2h3 X2dldF9uYW1lKGh3KTsNCj4gPiArICAgICAgIHUzMiBjbGtfaWQgPSBjbGstPmNsa19pZDsNCj4g PiArICAgICAgIHVuc2lnbmVkIGludCBzdGF0ZTsNCj4gPiArICAgICAgIGludCByZXQ7DQo+ID4g KyAgICAgICBjb25zdCBzdHJ1Y3QgenlucW1wX2VlbWlfb3BzICplZW1pX29wcyA9IGdldF9lZW1p X29wcygpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghZWVtaV9vcHMgfHwgIWVlbWlfb3BzLT5j bG9ja19nZXRzdGF0ZSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ ICsgICAgICAgcmV0ID0gZWVtaV9vcHMtPmNsb2NrX2dldHN0YXRlKGNsa19pZCwgJnN0YXRlKTsN Cj4gPiArICAgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgIHByX3dhcm5fb25jZSgi JXMoKSBjbG9jayBnZXQgc3RhdGUgZmFpbGVkIGZvciAlcywgcmV0ID0gJWRcbiIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgY2xrX25hbWUsIHJldCk7DQo+ID4g Kw0KPiA+ICsgICAgICAgcmV0dXJuIHN0YXRlID8gMSA6IDA7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgKiB6eW5xbXBfcGxsX2VuYWJsZSAtIEVuYWJsZSBjbG9jaw0KPiA+ICsgKiBA aHc6ICAgICAgICAgICAgICAgIEhhbmRsZSBiZXR3ZWVuIGNvbW1vbiBhbmQgaGFyZHdhcmUtc3Bl Y2lmaWMgaW50ZXJmYWNlcw0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46ICAgICAwIGFsd2F5cw0K PiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB6eW5xbXBfcGxsX2VuYWJsZShzdHJ1Y3QgY2xrX2h3 ICpodykNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHp5bnFtcF9wbGwgKmNsayA9IHRvX3p5 bnFtcF9wbGwoaHcpOw0KPiA+ICsgICAgICAgY29uc3QgY2hhciAqY2xrX25hbWUgPSBjbGtfaHdf Z2V0X25hbWUoaHcpOw0KPiA+ICsgICAgICAgdTMyIGNsa19pZCA9IGNsay0+Y2xrX2lkOw0KPiA+ ICsgICAgICAgaW50IHJldDsNCj4gPiArICAgICAgIGNvbnN0IHN0cnVjdCB6eW5xbXBfZWVtaV9v cHMgKmVlbWlfb3BzID0gZ2V0X2VlbWlfb3BzKCk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKCFl ZW1pX29wcyB8fCAhZWVtaV9vcHMtPmNsb2NrX2VuYWJsZSkNCj4gPiArICAgICAgICAgICAgICAg cmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKHp5bnFtcF9wbGxfaXNfZW5hYmxlZCho dykpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICAgIHBy X2luZm8oIlBMTDogZW5hYmxlXG4iKTsNCj4gPiArDQo+ID4gKyAgICAgICByZXQgPSBlZW1pX29w cy0+Y2xvY2tfZW5hYmxlKGNsa19pZCk7DQo+ID4gKyAgICAgICBpZiAocmV0KQ0KPiA+ICsgICAg ICAgICAgICAgICBwcl93YXJuX29uY2UoIiVzKCkgY2xvY2sgZW5hYmxlIGZhaWxlZCBmb3IgJXMs IHJldCA9ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18s IGNsa19uYW1lLCByZXQpOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlucW1wX3BsbF9kaXNhYmxlIC0gRGlzYWJsZSBjbG9j aw0KPiA+ICsgKiBAaHc6ICAgICAgICAgICAgICAgIEhhbmRsZSBiZXR3ZWVuIGNvbW1vbiBhbmQg aGFyZHdhcmUtc3BlY2lmaWMgaW50ZXJmYWNlcw0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArc3Rh dGljIHZvaWQgenlucW1wX3BsbF9kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KPiA+ICt7DQo+ ID4gKyAgICAgICBzdHJ1Y3QgenlucW1wX3BsbCAqY2xrID0gdG9fenlucW1wX3BsbChodyk7DQo+ ID4gKyAgICAgICBjb25zdCBjaGFyICpjbGtfbmFtZSA9IGNsa19od19nZXRfbmFtZShodyk7DQo+ ID4gKyAgICAgICB1MzIgY2xrX2lkID0gY2xrLT5jbGtfaWQ7DQo+ID4gKyAgICAgICBpbnQgcmV0 Ow0KPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHp5bnFtcF9lZW1pX29wcyAqZWVtaV9vcHMgPSBn ZXRfZWVtaV9vcHMoKTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIWVlbWlfb3BzIHx8ICFlZW1p X29wcy0+Y2xvY2tfZGlzYWJsZSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsN Cj4gPiArICAgICAgIGlmICghenlucW1wX3BsbF9pc19lbmFibGVkKGh3KSkNCj4gPiArICAgICAg ICAgICAgICAgcmV0dXJuOw0KPiA+ICsNCj4gPiArICAgICAgIHByX2luZm8oIlBMTDogc2h1dGRv d25cbiIpOw0KPiA+ICsNCj4gPiArICAgICAgIHJldCA9IGVlbWlfb3BzLT5jbG9ja19kaXNhYmxl KGNsa19pZCk7DQo+ID4gKyAgICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgICBwcl93 YXJuX29uY2UoIiVzKCkgY2xvY2sgZGlzYWJsZSBmYWlsZWQgZm9yICVzLCByZXQgPSAlZFxuIiwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBjbGtfbmFtZSwgcmV0 KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHp5bnFt cF9wbGxfb3BzID0gew0KPiA+ICsgICAgICAgLmVuYWJsZSA9IHp5bnFtcF9wbGxfZW5hYmxlLA0K PiA+ICsgICAgICAgLmRpc2FibGUgPSB6eW5xbXBfcGxsX2Rpc2FibGUsDQo+ID4gKyAgICAgICAu aXNfZW5hYmxlZCA9IHp5bnFtcF9wbGxfaXNfZW5hYmxlZCwNCj4gPiArICAgICAgIC5yb3VuZF9y YXRlID0genlucW1wX3BsbF9yb3VuZF9yYXRlLA0KPiA+ICsgICAgICAgLnJlY2FsY19yYXRlID0g enlucW1wX3BsbF9yZWNhbGNfcmF0ZSwNCj4gPiArICAgICAgIC5zZXRfcmF0ZSA9IHp5bnFtcF9w bGxfc2V0X3JhdGUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogY2xrX3JlZ2lz dGVyX3p5bnFtcF9wbGwgLSBSZWdpc3RlciBQTEwgd2l0aCB0aGUgY2xvY2sgZnJhbWV3b3JrDQo+ ID4gKyAqIEBuYW1lOiAgICAgIFBMTCBuYW1lDQo+ID4gKyAqIEBmbGFnOiAgICAgIFBMTCBmbGFn cw0KPiA+ICsgKiBAcGFyZW50czogICBQYXJlbnQgY2xvY2sgbmFtZXMNCj4gPiArICogQG51bV9w YXJlbnRzOk51bWJlciBvZiBwYXJlbnRzDQo+ID4gKyAqIEBwbGxfY3RybDogIFBvaW50ZXIgdG8g UExMIGNvbnRyb2wgcmVnaXN0ZXINCj4gPiArICogQHBsbF9zdGF0dXM6ICAgICAgICBQb2ludGVy IHRvIFBMTCBzdGF0dXMgcmVnaXN0ZXINCj4gPiArICogQGxvY2tfaW5kZXg6ICAgICAgICBCaXQg aW5kZXggdG8gdGhpcyBQTEwncyBsb2NrIHN0YXR1cyBiaXQgaW4gQHBsbF9zdGF0dXMNCj4gPiAr ICoNCj4gPiArICogUmV0dXJuOiAgICAgSGFuZGxlIHRvIHRoZSByZWdpc3RlcmVkIGNsb2NrDQo+ ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgY2xrICpjbGtfcmVnaXN0ZXJfenlucW1wX3BsbChjb25zdCBj aGFyICpuYW1lLCB1MzIgY2xrX2lkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqcGFyZW50cywNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1OCBudW1fcGFyZW50cywgdW5zaWduZWQgbG9uZyBmbGFnKQ0K PiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgenlucW1wX3BsbCAqcGxsOw0KPiA+ICsgICAgICAg c3RydWN0IGNsayAqY2xrOw0KPiA+ICsgICAgICAgc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsN Cj4gPiArICAgICAgIGludCBzdGF0dXM7DQo+ID4gKw0KPiA+ICsgICAgICAgaW5pdC5uYW1lID0g bmFtZTsNCj4gPiArICAgICAgIGluaXQub3BzID0gJnp5bnFtcF9wbGxfb3BzOw0KPiA+ICsgICAg ICAgaW5pdC5mbGFncyA9IGZsYWc7DQo+ID4gKyAgICAgICBpbml0LnBhcmVudF9uYW1lcyA9IHBh cmVudHM7DQo+ID4gKyAgICAgICBpbml0Lm51bV9wYXJlbnRzID0gbnVtX3BhcmVudHM7DQo+ID4g Kw0KPiA+ICsgICAgICAgcGxsID0ga21hbGxvYyhzaXplb2YoKnBsbCksIEdGUF9LRVJORUwpOw0K PiA+ICsgICAgICAgaWYgKCFwbGwpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRS KC1FTk9NRU0pOw0KPiA+ICsNCj4gPiArICAgICAgIC8qIFBvcHVsYXRlIHRoZSBzdHJ1Y3QgKi8N Cj4gPiArICAgICAgIHBsbC0+aHcuaW5pdCA9ICZpbml0Ow0KPiA+ICsgICAgICAgcGxsLT5jbGtf aWQgPSBjbGtfaWQ7DQo+ID4gKw0KPiA+ICsgICAgICAgY2xrID0gY2xrX3JlZ2lzdGVyKE5VTEws ICZwbGwtPmh3KTsNCj4gPiArICAgICAgIGlmIChXQVJOX09OKElTX0VSUihjbGspKSkNCj4gPiAr ICAgICAgICAgICAgICAga2ZyZWUocGxsKTsNCj4gPiArDQo+ID4gKyAgICAgICBzdGF0dXMgPSBj bGtfc2V0X3JhdGVfcmFuZ2UoY2xrLCBQU19QTExfVkNPX01JTiwgUFNfUExMX1ZDT19NQVgpOw0K PiA+ICsgICAgICAgaWYgKHN0YXR1cyA8IDApDQo+ID4gKyAgICAgICAgICAgICAgIHByX2Vycigi JXM6RVJST1IgY2xrX3NldF9yYXRlX3JhbmdlIGZhaWxlZCAlZFxuIiwgbmFtZSwgc3RhdHVzKTsN Cj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gY2xrOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvbGludXgvY2xrL3p5bnFtcC5oIGIvaW5jbHVkZS9saW51eC9jbGsvenlucW1wLmgN Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjAyNGViZjgNCj4g PiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvaW5jbHVkZS9saW51eC9jbGsvenlucW1wLmgNCj4g PiBAQCAtMCwwICsxLDQ2IEBADQo+ID4gKy8qDQo+ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYt MjAxNyBYaWxpbngNCj4gPiArICoNCj4gPiArICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICAg ICBHUEwtMi4wKw0KPiA+ICsgKi8NCj4gDQo+IFRoaXMgdGFnIHNob3VsZCBiZSBvbiB0aGUgZmlz dCBsaW5lIHRoaXMgd2F5Og0KPiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsg Ki8NCj4gDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9fTElOVVhfQ0xLX1pZTlFNUF9IXw0KPiA+ICsj ZGVmaW5lIF9fTElOVVhfQ0xLX1pZTlFNUF9IXw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4 L3NwaW5sb2NrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS94aWxpbngvenlucW1w L2Zpcm13YXJlLmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIENMS19GUkFDICAgICAgIEJJVCgxMykg LyogaGFzIGEgZnJhY3Rpb25hbCBwYXJlbnQgKi8NCj4gPiArDQo+ID4gK3N0cnVjdCBkZXZpY2U7 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgY2xrICpjbGtfcmVnaXN0ZXJfenlucW1wX3BsbChjb25zdCBj aGFyICpuYW1lLCB1MzIgY2xrX2lkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqcGFyZW50LCB1OCBudW1fcGFyZW50cywNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWcpOw0K PiA+ICsNCj4gPiArc3RydWN0IGNsayAqenlucW1wX2Nsa19yZWdpc3Rlcl9nYXRlKHN0cnVjdCBk ZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdTMyIGNsa19pZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICpwYXJlbnRfbmFtZSwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggbnVtX3BhcmVudHMsIHVuc2lnbmVkIGxv bmcgZmxhZ3MsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNs a19nYXRlX2ZsYWdzKTsNCj4gPiArDQo+ID4gK3N0cnVjdCBjbGsgKnp5bnFtcF9jbGtfcmVnaXN0 ZXJfZGl2aWRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXINCj4gKm5hbWUsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBjbGtfaWQsIHUzMiBk aXZfdHlwZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqIGNvbnN0ICpwYXJlbnRfbmFtZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdTggbnVtX3BhcmVudHMsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNsa19kaXZpZGVyX2ZsYWdzKTsNCj4g PiArDQo+ID4gK3N0cnVjdCBjbGsgKnp5bnFtcF9jbGtfcmVnaXN0ZXJfbXV4KHN0cnVjdCBkZXZp Y2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1MzIgY2xrX2lkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKipwYXJlbnRfbmFtZXMsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdTggbnVtX3BhcmVudHMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY2xrX211eF9mbGFncyk7 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgY2xrICp6eW5xbXBfY2xrX3JlZ2lzdGVyX211eF90YWJsZShz dHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXINCj4gKm5hbWUsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGNsa19pZCwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogY29uc3QgKnBhcmVu dF9uYW1lcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 OCBudW1fcGFyZW50cywgdW5zaWduZWQgbG9uZyBmbGFncywNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjbGtfbXV4X2ZsYWdzKTsNCj4gPiArDQo+ID4g KyNlbmRpZg0KPiA+IC0tDQo+ID4gMi43LjQNCj4gPg0KPiANCj4gDQo+IC0tDQo+IENvcmRpYWxs eQ0KPiBQaGlsaXBwZSBPbWJyZWRhbm5lDQo=