From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AFACBC04AB3 for ; Mon, 27 May 2019 19:40:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 65C9A20859 for ; Mon, 27 May 2019 19:40:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=darbyshire-bryant.me.uk header.i=@darbyshire-bryant.me.uk header.b="lcR2MA1d" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727134AbfE0Tkc (ORCPT ); Mon, 27 May 2019 15:40:32 -0400 Received: from mail-eopbgr60089.outbound.protection.outlook.com ([40.107.6.89]:19888 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726801AbfE0Tkb (ORCPT ); Mon, 27 May 2019 15:40:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=darbyshire-bryant.me.uk; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0J6+FxJeWYyAROXCOoy3ld2qKPFCBP4sgJrnH5+PSKs=; b=lcR2MA1dtxE0Z09cfSOD/QViY2ezzuB+zGsHUY+UGGKD/wxF6c3P+F5Y98ZCJhIlXb8uo9rhf4sylOKHeD2J2m+bZ1EFGbtcw2qPVp6cZ91MAR+7Tcl25VElzO9Li6LTAZNydcI0qg0PgNUxz7AHAHiY3IWDFl0iutE8tQEro1c= Received: from VI1PR0302MB2750.eurprd03.prod.outlook.com (10.171.106.21) by VI1PR0302MB2592.eurprd03.prod.outlook.com (10.171.108.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1922.16; Mon, 27 May 2019 19:40:07 +0000 Received: from VI1PR0302MB2750.eurprd03.prod.outlook.com ([fe80::603a:6eb9:2073:bde4]) by VI1PR0302MB2750.eurprd03.prod.outlook.com ([fe80::603a:6eb9:2073:bde4%5]) with mapi id 15.20.1922.021; Mon, 27 May 2019 19:40:07 +0000 From: Kevin 'ldir' Darbyshire-Bryant To: =?utf-8?B?VG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2Vu?= CC: "netdev@vger.kernel.org" Subject: Re: [PATCH net-next v5] net: sched: Introduce act_ctinfo action Thread-Topic: [PATCH net-next v5] net: sched: Introduce act_ctinfo action Thread-Index: AQHVFH3Pu3V1wO3o7ki3ThCMKllReaZ/HfQAgABBCAA= Date: Mon, 27 May 2019 19:40:07 +0000 Message-ID: <4F2278CE-5197-43FF-B3D5-AF443088D73F@darbyshire-bryant.me.uk> References: <87h89kx74q.fsf@toke.dk> <20190527111716.94736-1-ldir@darbyshire-bryant.me.uk> <8736kzyk53.fsf@toke.dk> In-Reply-To: <8736kzyk53.fsf@toke.dk> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=ldir@darbyshire-bryant.me.uk; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2a02:c7f:1268:6500::dc83] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 93b826a9-3c8a-4b84-8abc-08d6e2db1f66 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7027125)(7023125)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:VI1PR0302MB2592; x-ms-traffictypediagnostic: VI1PR0302MB2592: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 0050CEFE70 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(136003)(376002)(396003)(366004)(39830400003)(189003)(199004)(53946003)(66574012)(508600001)(6512007)(25786009)(82746002)(256004)(66476007)(64756008)(73956011)(6116002)(83716004)(71190400001)(71200400001)(91956017)(76116006)(14444005)(30864003)(7520500002)(66946007)(476003)(6436002)(2616005)(66556008)(4326008)(66446008)(6486002)(14454004)(446003)(74482002)(2906002)(11346002)(229853002)(53936002)(486006)(53546011)(7736002)(46003)(86362001)(76176011)(33656002)(68736007)(8936002)(8676002)(81156014)(81166006)(99286004)(186003)(305945005)(6916009)(316002)(6246003)(5660300002)(6506007)(102836004)(36756003)(579004)(559001);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0302MB2592;H:VI1PR0302MB2750.eurprd03.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: darbyshire-bryant.me.uk does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: lM1AmeLYAf9rZaAj7CSD//eYtMfkhbwu5Sd7zf3wt2txadsRrgrSNs79hIGBjC6fObtmkJ9CJXyFiIy3z6zstp1OjvIqNJks6iLFkcemj4bF4/CdujWZvKPKHZYHF8Ck3b04Z0s0lbIwyTofDDF0KaMeNeRGrzWYyDE/yg3kx6iOu0p1QLsrR8AlPdme8ARv6kufPos1e5vDdGGF2wy9RpNd+qqMdgE5TSZw96zK8MuYPZBhdIom2/E7znbUo0naN0PY8tmz9h6YZkBj3hXMMsXYk/cKQ9k27FCe4nX+agcHAU9jKPfPZjLE2oc0xNciQw27cFd8+TngO0nzhglfG7t/yQdOaCM4WCcwaP1R5m/YSxOOOZe9t3JImClrW2Ta7SwEpHL89pojnWJqFhbqLlRUdu7nSK0iQ05F4ixYGx0= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: darbyshire-bryant.me.uk X-MS-Exchange-CrossTenant-Network-Message-Id: 93b826a9-3c8a-4b84-8abc-08d6e2db1f66 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 May 2019 19:40:07.0291 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9151708b-c553-406f-8e56-694f435154a4 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: kevin@darbyshire-bryant.me.uk X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0302MB2592 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org SSBoYXZlIHRvIGNhbGwgaXQgYSBkYXkuICBJIGhhdmUgbm8gaWRlYSB3aHkgdGhlIHBhdGNoZXMg YXJlIGJlY29taW5nIGNvcnJ1cHQgYW5kIGhlbmNlIGhvdyB0byBmaXggaXQsIGl04oCZcyBwcm9i YWJseSBzb21ldGhpbmcgQXBwbGUgaGFzIGRvbmUgdG8gZ2l0LCBvciBtYXliZSBNUyB0byBteSBl bWFpbCBzZXJ2ZXIuDQoNClNhZGx5IEkgYWxzbyB0aGluayB0aGF0IHRoZSBvbmx5IHdheSB0aGlz IHBhdGNoL2Z1bmN0aW9uYWxpdHkgd2lsbCBldmVyIGJlIGFjY2VwdGFibGUgaXMgaWYgc29tZW9u ZSBlbHNlIHdyaXRlcyBpdCwgd2hlcmUgdGhleSBvciB0aGVpciBjb21wYW55IGNhbiB0YWtlIHRo ZSBjcmVkaXQvYmxhbWUuDQoNCkkgdHJpZWQgdmVyeSBoYXJkIHRvIGFwcHJvYWNoIHRoZSBwcm9j ZXNzIG9mIHVwc3RyZWFtIHN1Ym1pc3Npb24gaW4gYSBwb3NpdGl2ZSB3YXksIHNlZWtpbmcgYWR2 aWNlICYgZ3VpZGFuY2UgaW4gdGhlIGZvcm0gb2YgUkZDIHBhdGNoZXMsIG1hbnkgcm91bmRzIGxh dGVyIEkgZmVlbCB0aGV54oCZcmUgZnVydGhlciBhd2F5IGZyb20gYWNjZXB0YW5jZSB0aGFuIGV2 ZXIuICBDbGVhcmx5IGl0IGlzIG5vdCBkZXNpcmVkIGZ1bmN0aW9uYWxpdHkvY29kZSBvdGhlcndp c2UgaXQgd291bGQgaGF2ZSBiZWVuIHdyaXR0ZW4gYnkgbm93IGFuZCBJIGNhbm5vdCBmYWNlIGFu b3RoZXIgMyByb3VuZHMgb2YgdGhlIHNhbWUgdGhpbmcgZm9yIGFjdF9jdGluZm8gdXNlciBzcGFj ZSwgdGhlIHhfdGFibGVzL25mX3RhYmxlcyBrZXJuZWwgaGVscGVyIHRvIHN0b3JlIHRoZSBEU0NQ IGluIHRoZSBmaXJzdCBwbGFjZSBhbmQgdGhlIHVzZXIgc3BhY2UgY29kZSB0byBoYW5kbGUgdGhh dC4NCg0KQXMgYSByYW5rIG91dHNpZGVyLCBhbWF0ZXVyIGNvZGVyIEkgc2hhbGwgbGVhdmUgaXQg dGhhdCBJ4oCZdmUgZm91bmQgdGhlIHByb2Nlc3MgY29tcGxldGVseSBkaXNjb3VyYWdpbmcuICBU aGUgcHJvZmVzc2lvbmFscyBhcmUgb2YgY291cnNlIHBhaWQgdG8gZGVhbCB3aXRoIHRoaXMuDQoN Cg0KPiBPbiAyNyBNYXkgMjAxOSwgYXQgMTY6NDcsIFRva2UgSMO4aWxhbmQtSsO4cmdlbnNlbiA8 dG9rZUByZWRoYXQuY29tPiB3cm90ZToNCj4gDQo+IEtldmluICdsZGlyJyBEYXJieXNoaXJlLUJy eWFudCA8bGRpckBkYXJieXNoaXJlLWJyeWFudC5tZS51az4gd3JpdGVzOg0KPiANCj4+IGN0aW5m byBpcyBhIG5ldyB0YyBmaWx0ZXIgYWN0aW9uIG1vZHVsZS4gIEl0IGlzIGRlc2lnbmVkIHRvIHJl c3RvcmUNCj4+IGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBmaXJld2FsbCBjb25udHJhY2sgbWFy a3MgdG8gb3RoZXIgcGFja2V0IGZpZWxkcw0KPj4gYW5kIGlzIHR5cGljYWxseSB1c2VkIG9uIHBh Y2tldCBpbmdyZXNzIHBhdGhzLiAgQXQgcHJlc2VudCBpdCBoYXMgdHdvDQo+PiBpbmRlcGVuZGVu dCBzdWItZnVuY3Rpb25zIG9yIG9wZXJhdGluZyBtb2RlcywgRFNDUCByZXN0b3JhdGlvbiBtb2Rl ICYNCj4+IHNrYiBtYXJrIHJlc3RvcmF0aW9uIG1vZGUuDQo+PiANCj4+IFRoZSBEU0NQIHJlc3Rv cmUgbW9kZToNCj4+IA0KPj4gVGhpcyBtb2RlIGNvcGllcyBEU0NQIHZhbHVlcyB0aGF0IGhhdmUg YmVlbiBwbGFjZWQgaW4gdGhlIGZpcmV3YWxsDQo+PiBjb25udHJhY2sgbWFyayBiYWNrIGludG8g dGhlIElQdjQvdjYgZGlmZnNlcnYgZmllbGRzIG9mIHJlbGV2YW50DQo+PiBwYWNrZXRzLg0KPj4g DQo+PiBUaGUgRFNDUCByZXN0b3JhdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGFuZCBoYXMgYmVl biBmb3VuZCB1c2VmdWwgZm9yDQo+PiByZXN0b3JpbmcgaW5ncmVzcyBjbGFzc2lmaWNhdGlvbnMg YmFzZWQgb24gZWdyZXNzIGNsYXNzaWZpY2F0aW9ucyBhY3Jvc3MNCj4+IGxpbmtzIHRoYXQgYmxl YWNoIG9yIG90aGVyd2lzZSBjaGFuZ2UgRFNDUCwgdHlwaWNhbGx5IGhvbWUgSVNQIEludGVybmV0 DQo+PiBsaW5rcy4gIFJlc3RvcmluZyBEU0NQIG9uIGluZ3Jlc3Mgb24gdGhlIFdBTiBsaW5rIGFs bG93cyBxZGlzY3Mgc3VjaCBhcw0KPj4gYnV0IGJ5IG5vIG1lYW5zIGxpbWl0ZWQgdG8gQ0FLRSB0 byBzaGFwZSBpbmJvdW5kIHBhY2tldHMgYWNjb3JkaW5nIHRvDQo+PiBwb2xpY2llcyB0aGF0IGFy ZSBlYXNpZXIgdG8gc2V0ICYgbWFyayBvbiBlZ3Jlc3MuDQo+PiANCj4+IEluZ3Jlc3MgY2xhc3Np ZmljYXRpb24gaXMgdHJhZGl0aW9uYWxseSBhIGNoYWxsZW5naW5nIHRhc2sgc2luY2UNCj4+IGlw dGFibGVzIHJ1bGVzIGhhdmVuJ3QgeWV0IHJ1biBhbmQgdGMgZmlsdGVyL2VCUEYgcHJvZ3JhbXMg YXJlIHByZS1OQVQNCj4+IGxvb2t1cHMsIGhlbmNlIGFyZSB1bmFibGUgdG8gc2VlIGludGVybmFs IElQdjQgYWRkcmVzc2VzIGFzIHVzZWQgb24gdGhlDQo+PiB0eXBpY2FsIGhvbWUgbWFzcXVlcmFk aW5nIGdhdGV3YXkuICBUaHVzIG1hcmtpbmcgdGhlIGNvbm5lY3Rpb24gaW4gc29tZQ0KPj4gbWFu bmVyIG9uIGVncmVzcyBmb3IgbGF0ZXIgcmVzdG9yYXRpb24gb2YgY2xhc3NpZmljYXRpb24gb24g aW5ncmVzcyBpcw0KPj4gZWFzaWVyIHRvIGltcGxlbWVudC4NCj4+IA0KPj4gUGFyYW1ldGVycyBy ZWxhdGVkIHRvIERTQ1AgcmVzdG9yZSBtb2RlOg0KPj4gDQo+PiBkc2NwbWFzayAtIGEgMzIgYml0 IG1hc2sgb2YgNiBjb250aWd1b3VzIGJpdHMgYW5kIGluZGljYXRlIGJpdHMgb2YgdGhlDQo+PiBj b25udHJhY2sgbWFyayBmaWVsZCBjb250YWluIHRoZSBEU0NQIHZhbHVlIHRvIGJlIHJlc3RvcmVk Lg0KPj4gDQo+PiBzdGF0ZW1hc2sgLSBhIDMyIGJpdCBtYXNrIG9mICh1c3VhbGx5KSAxIGJpdCBs ZW5ndGgsIG91dHNpZGUgdGhlIGFyZWENCj4+IHNwZWNpZmllZCBieSBkc2NwbWFzay4gIFRoaXMg cmVwcmVzZW50cyBhIGNvbmRpdGlvbmFsIG9wZXJhdGlvbiBmbGFnDQo+PiB3aGVyZWJ5IHRoZSBE U0NQIGlzIG9ubHkgcmVzdG9yZWQgaWYgdGhlIGZsYWcgaXMgc2V0LiAgVGhpcyBpcyB1c2VmdWwg dG8NCj4+IGltcGxlbWVudCBhICdvbmUgc2hvdCcgaXB0YWJsZXMgYmFzZWQgY2xhc3NpZmljYXRp b24gd2hlcmUgdGhlDQo+PiAnY29tcGxpY2F0ZWQnIGlwdGFibGVzIHJ1bGVzIGFyZSBvbmx5IHJ1 biBvbmNlIHRvIGNsYXNzaWZ5IHRoZQ0KPj4gY29ubmVjdGlvbiBvbiBpbml0aWFsIChlZ3Jlc3Mp IHBhY2tldCBhbmQgc3Vic2VxdWVudCBwYWNrZXRzIGFyZSBhbGwNCj4+IG1hcmtlZC9yZXN0b3Jl ZCB3aXRoIHRoZSBzYW1lIERTQ1AuICBBIG1hc2sgb2YgemVybyBkaXNhYmxlcyB0aGUNCj4+IGNv bmRpdGlvbmFsIGJlaGF2aW91ciBpZS4gdGhlIGNvbm50cmFjayBtYXJrIERTQ1AgYml0cyBhcmUg YWx3YXlzDQo+PiByZXN0b3JlZCB0byB0aGUgaXAgZGlmZnNlcnYgZmllbGQgKGFzc3VtaW5nIHRo ZSBjb25udHJhY2sgZW50cnkgaXMgZm91bmQNCj4+ICYgdGhlIHNrYiBpcyBhbiBpcHY0L2lwdjYg dHlwZSkNCj4+IA0KPj4gZS5nLiBkc2NwbWFzayAweGZjMDAwMDAwIHN0YXRlbWFzayAweDAxMDAw MDAwDQo+PiANCj4+IHwtLS0tMHhGQy0tLS1jb25udHJhY2sgbWFyay0tLS0wMDAwMDAtLS18DQo+ PiB8IEJpdHMgMzEtMjYgfCBiaXQgMjUgfCBiaXQyNCB8fn5+IEJpdCAwfA0KPj4gfCBEU0NQICAg ICAgIHwgdW51c2VkIHwgZmxhZyAgfHVudXNlZCAgIHwNCj4+IHwtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLTB4MDEtLS0wMDAwMDAtLS18DQo+PiAgICAgIHwgICAgICAgICAgICAgICAgICAgfA0KPj4g ICAgICB8ICAgICAgICAgICAgICAgICAgIHwNCj4+ICAgICAgLS0tfCAgICAgICAgICAgICBDb25k aXRpb25hbCBmbGFnDQo+PiAgICAgICAgIHYgICAgICAgICAgICAgb25seSByZXN0b3JlIGlmIHNl dA0KPj4gfC1pcCBkaWZmc2Vydi18DQo+PiB8IDYgYml0cyAgICAgIHwNCj4+IHwtLS0tLS0tLS0t LS0tfA0KPj4gDQo+PiBUaGUgc2tiIG1hcmsgcmVzdG9yZSBtb2RlIChjcG1hcmspOg0KPj4gDQo+ PiBUaGlzIG1vZGUgY29waWVzIHRoZSBmaXJld2FsbCBjb25udHJhY2sgbWFyayB0byB0aGUgc2ti J3MgbWFyayBmaWVsZC4NCj4+IEl0IGlzIGNvbXBsZXRlbHkgdGhlIGZ1bmN0aW9uYWwgZXF1aXZh bGVudCBvZiB0aGUgZXhpc3RpbmcgYWN0X2Nvbm5tYXJrDQo+PiBhY3Rpb24gd2l0aCB0aGUgYWRk aXRpb25hbCBmZWF0dXJlIG9mIGJlaW5nIGFibGUgdG8gYXBwbHkgYSBtYXNrIHRvIHRoZQ0KPj4g cmVzdG9yZWQgdmFsdWUuDQo+PiANCj4+IFBhcmFtZXRlcnMgcmVsYXRlZCB0byBza2IgbWFyayBy ZXN0b3JlIG1vZGU6DQo+PiANCj4+IG1hc2sgLSBhIDMyIGJpdCBtYXNrIGFwcGxpZWQgdG8gdGhl IGZpcmV3YWxsIGNvbm50cmFjayBtYXJrIHRvIG1hc2sgb3V0DQo+PiBiaXRzIHVud2FudGVkIGZv ciByZXN0b3JhdGlvbi4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVyZSB0aGUgY29ubnRyYWNrDQo+ PiBtYXJrIGlzIGJlaW5nIHVzZWQgZm9yIGRpZmZlcmVudCBwdXJwb3NlcyBieSBkaWZmZXJlbnQg YXBwbGljYXRpb25zLiAgSWYNCj4+IG5vdCBzcGVjaWZpZWQgYW5kIGJ5IGRlZmF1bHQgdGhlIHdo b2xlIG1hcmsgZmllbGQgaXMgY29waWVkIChpLmUuDQo+PiBkZWZhdWx0IG1hc2sgb2YgMHhmZmZm ZmZmZikNCj4+IA0KPj4gZS5nLiBtYXNrIDB4MDBmZmZmZmYgdG8gbWFzayBvdXQgdGhlIHRvcCA4 IGJpdHMgYmVpbmcgdXNlZCBieSB0aGUNCj4+IGFmb3JlbWVudGlvbmVkIERTQ1AgcmVzdG9yZSBt b2RlLg0KPj4gDQo+PiB8LS0tLTB4MDAtLS0tY29ubnRyYWNrIG1hcmstLS0tZmZmZmZmLS0tfA0K Pj4gfCBCaXRzIDMxLTI0IHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4+IHwgRFNDUCAm IGZsYWd8ICAgICAgc29tZSB2YWx1ZSBoZXJlICAgICB8DQo+PiB8LS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KPj4gCQkJfA0KPj4gCQkJfA0KPj4gCQkJdg0KPj4gfC0t LS0tLS0tLS0tLXNrYiBtYXJrLS0tLS0tLS0tLS0tLS0tLS0tLXwNCj4+IHwgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+PiB8ICB6ZXJvZWQgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgfA0KPj4gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLXwNCj4+IA0KPj4gT3ZlcmFsbCBwYXJhbWV0ZXJzOg0KPj4gDQo+PiB6b25lIC0gY29ubnRy YWNrIHpvbmUNCj4+IA0KPj4gY29udHJvbCAtIGFjdGlvbiByZWxhdGVkIGNvbnRyb2wgKHJlY2xh c3NpZnkgfCBwaXBlIHwgZHJvcCB8IGNvbnRpbnVlIHwNCj4+IG9rIHwgZ290byBjaGFpbiA8Q0hB SU5fSU5ERVg+KQ0KPj4gDQo+PiBNb2RlIHNwZWNpZmljIHZhbHVlcyBhcmUgcGFzc2VkIGFzIHBh cmFtZXRlciBzdHJ1Y3R1cmVzIGFjcm9zcyBuZXRsaW5rLg0KPj4gU2ltaWxhcmx5IHN0YXRpc3Rp Y3MgaW5kaWNhdGluZyBEU0NQICYgc2tiIG1hcmsgcmVzdG9yYXRpb24gY291bnRzIGFyZQ0KPj4g YWxzbyByZXR1cm5lZCB2aWEgbmV0bGluay4NCj4+IA0KPj4gU2lnbmVkLW9mZi1ieTogS2V2aW4g RGFyYnlzaGlyZS1CcnlhbnQgPGxkaXJAZGFyYnlzaGlyZS1icnlhbnQubWUudWs+DQo+IA0KPiBJ IGxpa2UgdGhlIG5ldyBjb21taXQgbWVzc2FnZSEgOikNCj4gDQo+PiAtLS0NCj4+IHYyIC0gYWRk IGVxdWl2YWxlbnQgY29ubm1hcmsgZnVuY3Rpb25hbGl0eSB3aXRoIGFuIGVuaGFuY2VtZW50DQo+ PiAgICB0byBhY2NlcHQgYSBtYXNrDQo+PiAgICBwYXNzIHN0YXRpc3RpY3MgZm9yIGVhY2ggc3Vi LWZ1bmN0aW9uIGFzIGluZGl2aWR1YWwgbmV0bGluaw0KPj4gICAgYXR0cmlidXRlcyBhbmQgc3Rv cCAoYWIpdXNpbmcgb3ZlcmxpbWl0cywgZHJvcHMNCj4+ICAgIHVwZGF0ZSB0aGUgdGVzdGluZyBj b25maWcgY29ycmVjdGx5DQo+PiB2MyAtIGZpeCBhIGxpY2Vuc2luZyBzaWxseSAmIHRpZHkgdXAg R1BMIGJvaWxlcnBsYXRlDQo+PiB2NCAtIGRyb3Agc3RyYXkgY29weSBwYXN0ZSBpbmxpbmUNCj4+ ICAgIHJldmVyc2UgY2hyaXN0bWFzIHRyZWUgbG9jYWwgdmFycw0KPj4gdjUgLSByZWJhc2Ugb24g bmV0LW5leHQvbWFzdGVyIG5vdCBuZXQvbWFzdGVyIGJ5IG1pc3Rha2UgLSBkb2ghIG5vdw0KPj4g ICAgIGFwcGxpZXMhDQo+IA0KPiBTdGlsbCBnZXR0aW5nIGVycm9ycyBmcm9tICdnaXQgYW0nIGZv ciB5b3VyIGVtYWlsLiBJdCBoZWxwcyB0byBhZGQNCj4gLS1pZ25vcmUtd2hpdGVzcGFjZSwgYnV0 IHRoZW4gSSBnZXQgXk0gbGluZSBlbmRpbmdzIGluIHRoZSByZXN1bHRpbmcNCj4gZmlsZS4uLg0K PiANCj4+ICAgICByZW5hbWUgY29ubm1hcmsgdG8gY3BtYXJrLg0KPj4gICAgIGFsd2F5cyB1c2Ug c3RydWN0dXJlcyBhY3Jvc3MgbmV0bGluayB0byBwYXNzIHBhcmFtZXRlcnMuDQo+PiAgICAgcmV3 b3JrIGNvbW1pdCBtZXNzYWdlIHRvIGNsYXJpZnkgbW9kZXMgJiBhcHBsaWNhYmxlIHBhcmFtZXRl cnMNCj4+ICAgICB3aXRob3V0IGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdXNlcnNwYWNlIHN5bnRh eC4NCj4+ICAgICByZXN0cmljdCBkc2NwbWFzayBwYXJhbWV0ZXIgdG8gNiBjb250aWd1b3VzIGJp dHMgb25seSBpbnN0ZWFkDQo+PiAgICAgb2YgPj02IGNvbnRpZ3VvdXMgYml0cy4NCj4+ICAgICBy ZS1vcmRlciBuZXRsaW5rIFRMViB2YWx1ZXMgaW50byBmdW5jdGlvbmFsIGdyb3VwaW5ncy4NCj4+ IA0KPj4gaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2N0aW5mby5oICAgICAgICAgICAgfCAgMjggKysN Cj4+IGluY2x1ZGUvdWFwaS9saW51eC9wa3RfY2xzLmggICAgICAgICAgICAgIHwgICAxICsNCj4+ IGluY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfY3RpbmZvLmggICAgIHwgIDUyICsrKw0KPj4g bmV0L3NjaGVkL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKw0KPj4gbmV0 L3NjaGVkL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKw0KPj4gbmV0L3Nj aGVkL2FjdF9jdGluZm8uYyAgICAgICAgICAgICAgICAgICAgfCA0MTUgKysrKysrKysrKysrKysr KysrKysrKw0KPj4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy9jb25maWcgfCAg IDEgKw0KPj4gNyBmaWxlcyBjaGFuZ2VkLCA1MTUgaW5zZXJ0aW9ucygrKQ0KPj4gY3JlYXRlIG1v ZGUgMTAwNjQ0IGluY2x1ZGUvbmV0L3RjX2FjdC90Y19jdGluZm8uaA0KPj4gY3JlYXRlIG1vZGUg MTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfY3RpbmZvLmgNCj4+IGNyZWF0ZSBt b2RlIDEwMDY0NCBuZXQvc2NoZWQvYWN0X2N0aW5mby5jDQo+PiANCj4+IGRpZmYgLS1naXQgYS9p bmNsdWRlL25ldC90Y19hY3QvdGNfY3RpbmZvLmggYi9pbmNsdWRlL25ldC90Y19hY3QvdGNfY3Rp bmZvLmgNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmQ2 YTY4ODU3MTY3Mg0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvaW5jbHVkZS9uZXQvdGNfYWN0 L3RjX2N0aW5mby5oDQo+PiBAQCAtMCwwICsxLDI4IEBADQo+PiArLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4+ICsjaWZuZGVmIF9fTkVUX1RDX0NUSU5GT19IDQo+PiAr I2RlZmluZSBfX05FVF9UQ19DVElORk9fSA0KPj4gKw0KPj4gKyNpbmNsdWRlIDxuZXQvYWN0X2Fw aS5oPg0KPj4gKw0KPj4gK3N0cnVjdCB0Y2ZfY3RpbmZvX3BhcmFtcyB7DQo+PiArCXN0cnVjdCBy Y3VfaGVhZCByY3U7DQo+PiArCXN0cnVjdCBuZXQgKm5ldDsNCj4+ICsJdTMyIGRzY3BtYXNrOw0K Pj4gKwl1MzIgZHNjcHN0YXRlbWFzazsNCj4+ICsJdTMyIGNwbWFya21hc2s7DQo+PiArCXUxNiB6 b25lOw0KPj4gKwl1OCBtb2RlOw0KPj4gKwl1OCBkc2NwbWFza3NoaWZ0Ow0KPj4gK307DQo+PiAr DQo+PiArc3RydWN0IHRjZl9jdGluZm8gew0KPj4gKwlzdHJ1Y3QgdGNfYWN0aW9uIGNvbW1vbjsN Cj4+ICsJc3RydWN0IHRjZl9jdGluZm9fcGFyYW1zIF9fcmN1ICpwYXJhbXM7DQo+PiArCXU2NCBz dGF0c19kc2NwX3NldDsNCj4+ICsJdTY0IHN0YXRzX2RzY3BfZXJyb3I7DQo+PiArCXU2NCBzdGF0 c19jcG1hcmtfc2V0Ow0KPj4gK307DQo+PiArDQo+PiArI2RlZmluZSB0b19jdGluZm8oYSkgKChz dHJ1Y3QgdGNmX2N0aW5mbyAqKWEpDQo+PiArDQo+PiArI2VuZGlmIC8qIF9fTkVUX1RDX0NUSU5G T19IICovDQo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9jbHMuaCBiL2lu Y2x1ZGUvdWFwaS9saW51eC9wa3RfY2xzLmgNCj4+IGluZGV4IDUxYTA0OTZmNzhlYS4uYTkzNjgw ZmM0YmZhIDEwMDY0NA0KPj4gLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9jbHMuaA0KPj4g KysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9jbHMuaA0KPj4gQEAgLTEwNSw2ICsxMDUsNyBA QCBlbnVtIHRjYV9pZCB7DQo+PiAJVENBX0lEX0lGRSA9IFRDQV9BQ1RfSUZFLA0KPj4gCVRDQV9J RF9TQU1QTEUgPSBUQ0FfQUNUX1NBTVBMRSwNCj4+IAkvKiBvdGhlciBhY3Rpb25zIGdvIGhlcmUg Ki8NCj4+ICsJVENBX0lEX0NUSU5GTywNCj4+IAlfX1RDQV9JRF9NQVggPSAyNTUNCj4+IH07DQo+ PiANCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2N0aW5mby5o IGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19jdGluZm8uaA0KPj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNDhjNDBmNjU3NTc1DQo+PiAtLS0gL2Rl di9udWxsDQo+PiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2N0aW5mby5oDQo+ PiBAQCAtMCwwICsxLDUyIEBADQo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi8NCj4+ICsjaWZuZGVmIF9fVUFQSV9UQ19DVElO Rk9fSA0KPj4gKyNkZWZpbmUgX19VQVBJX1RDX0NUSU5GT19IDQo+PiArDQo+PiArI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4NCj4+ICsNCj4+ ICtzdHJ1Y3QgdGNfY3RpbmZvIHsNCj4+ICsJdGNfZ2VuOw0KPj4gK307DQo+PiArDQo+PiArc3Ry dWN0IHRjX2N0aW5mb19kc2NwIHsNCj4+ICsJX191MzIgbWFzazsNCj4+ICsJX191MzIgc3RhdGVt YXNrOw0KPj4gK307DQo+PiArDQo+PiArc3RydWN0IHRjX2N0aW5mb19jcG1hcmsgew0KPj4gKwlf X3UzMiBtYXNrOw0KPj4gK307DQo+PiArDQo+PiArc3RydWN0IHRjX2N0aW5mb19zdGF0c19kc2Nw IHsNCj4+ICsJX191NjQgc2V0Ow0KPj4gKwlfX3U2NCBlcnJvcjsNCj4+ICt9Ow0KPj4gKw0KPj4g K3N0cnVjdCB0Y19jdGluZm9fc3RhdHNfY3BtYXJrIHsNCj4+ICsJX191NjQgc2V0Ow0KPj4gK307 DQo+IA0KPiBVZ2gsIG5vLCBzaW5nbGUtZW50cnkgc3RydWN0cyBhcmUgbm90IGFuIGltcHJvdmVt ZW50LCBzb3JyeS4NCj4gDQo+IEkgZ2V0IHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBkZXNjcmlwdGl2 ZSBuYW1lcywgYnV0IHlvdSBhbHJlYWR5IGdldCB0aGF0DQo+IGZyb20gdGhlIG5ldGxpbmsgdHlw ZSBuYW1lcy4gQmVzaWRlcywgJ21hc2snIGFuZCAnc3RhdGVtYXNrJyBhcmUgbm90DQo+IHJlYWxs eSBkZXBlbmRlbnQgYW55d2F5OyAnc3RhdGVtYXNrJyBjb3VsZCByZWFzb25hYmx5IGJlIHVuc2V0 IHdpdGggbm8NCj4gZWZmZWN0IG9uIHRoZSBtYXNrIHZhbHVlLCBubz8NCj4gDQo+PiArZW51bSB7 DQo+PiArCVRDQV9DVElORk9fVU5TUEVDLA0KPj4gKwlUQ0FfQ1RJTkZPX1BBRCwNCj4+ICsJVENB X0NUSU5GT19UTSwNCj4+ICsJVENBX0NUSU5GT19BQ1QsDQo+PiArCVRDQV9DVElORk9fWk9ORSwN Cj4+ICsJVENBX0NUSU5GT19QQVJNU19EU0NQLA0KPj4gKwlUQ0FfQ1RJTkZPX1BBUk1TX0NQTUFS SywNCj4+ICsJVENBX0NUSU5GT19NT0RFX0RTQ1AsDQo+PiArCVRDQV9DVElORk9fTU9ERV9DUE1B UkssDQo+PiArCVRDQV9DVElORk9fU1RBVFNfRFNDUCwNCj4+ICsJVENBX0NUSU5GT19TVEFUU19D UE1BUkssDQo+PiArCV9fVENBX0NUSU5GT19NQVgNCj4+ICt9Ow0KPj4gKw0KPj4gKyNkZWZpbmUg VENBX0NUSU5GT19NQVggKF9fVENBX0NUSU5GT19NQVggLSAxKQ0KPj4gKw0KPj4gK2VudW0gew0K Pj4gKwlDVElORk9fTU9ERV9EU0NQCT0gQklUKDApLA0KPj4gKwlDVElORk9fTU9ERV9DUE1BUksJ PSBCSVQoMSkNCj4+ICt9Ow0KPj4gKw0KPj4gKyNlbmRpZg0KPj4gZGlmZiAtLWdpdCBhL25ldC9z Y2hlZC9LY29uZmlnIGIvbmV0L3NjaGVkL0tjb25maWcNCj4+IGluZGV4IDJjNzJkOTVjMzA1MC4u ZDEwNGY3ZWUyNmM3IDEwMDY0NA0KPj4gLS0tIGEvbmV0L3NjaGVkL0tjb25maWcNCj4+ICsrKyBi L25ldC9zY2hlZC9LY29uZmlnDQo+PiBAQCAtODc3LDYgKzg3NywyMyBAQCBjb25maWcgTkVUX0FD VF9DT05OTUFSSw0KPj4gCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29z ZSBNIGhlcmU6IHRoZQ0KPj4gCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9jb25ubWFyay4N Cj4+IA0KPj4gK2NvbmZpZyBORVRfQUNUX0NUSU5GTw0KPj4gKyAgICAgICAgdHJpc3RhdGUgIk5l dGZpbHRlciBDb25uZWN0aW9uIE1hcmsgQWN0aW9ucyINCj4+ICsgICAgICAgIGRlcGVuZHMgb24g TkVUX0NMU19BQ1QgJiYgTkVURklMVEVSICYmIElQX05GX0lQVEFCTEVTDQo+PiArICAgICAgICBk ZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyAmJiBORl9DT05OVFJBQ0tfTUFSSw0KPj4gKyAgICAgICAg aGVscA0KPj4gKwkgIFNheSBZIGhlcmUgdG8gYWxsb3cgdHJhbnNmZXIgb2YgYSBjb25ubWFyayBz dG9yZWQgaW5mb3JtYXRpb24uDQo+PiArCSAgQ3VycmVudCBhY3Rpb25zIHRyYW5zZmVyIGNvbm5t YXJrIHN0b3JlZCBEU0NQIGludG8NCj4+ICsJICBpcHY0L3Y2IGRpZmZzZXJ2IGFuZC9vciB0byB0 cmFuc2ZlciBjb25ubWFyayB0byBwYWNrZXQNCj4+ICsJICBtYXJrLiAgQm90aCBhcmUgdXNlZnVs IGZvciByZXN0b3JpbmcgZWdyZXNzIGJhc2VkIG1hcmtzDQo+PiArCSAgYmFjayBvbnRvIGluZ3Jl c3MgY29ubmVjdGlvbnMgZm9yIHFkaXNjIHByaW9yaXR5IG1hcHBpbmcNCj4+ICsJICBwdXJwb3Nl cy4NCj4+ICsNCj4+ICsJICBJZiB1bnN1cmUsIHNheSBOLg0KPj4gKw0KPj4gKwkgIFRvIGNvbXBp bGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUNCj4+ICsJICBtb2R1 bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0aW5mby4NCj4+ICsNCj4+IGNvbmZpZyBORVRfQUNUX1NL Qk1PRA0KPj4gICAgICAgICB0cmlzdGF0ZSAic2tiIGRhdGEgbW9kaWZpY2F0aW9uIGFjdGlvbiIN Cj4+ICAgICAgICAgZGVwZW5kcyBvbiBORVRfQ0xTX0FDVA0KPj4gZGlmZiAtLWdpdCBhL25ldC9z Y2hlZC9NYWtlZmlsZSBiL25ldC9zY2hlZC9NYWtlZmlsZQ0KPj4gaW5kZXggOGE0MDQzMWQ3YjVj Li5kNTRiZmNiZDc5ODEgMTAwNjQ0DQo+PiAtLS0gYS9uZXQvc2NoZWQvTWFrZWZpbGUNCj4+ICsr KyBiL25ldC9zY2hlZC9NYWtlZmlsZQ0KPj4gQEAgLTIxLDYgKzIxLDcgQEAgb2JqLSQoQ09ORklH X05FVF9BQ1RfQ1NVTSkJKz0gYWN0X2NzdW0ubw0KPj4gb2JqLSQoQ09ORklHX05FVF9BQ1RfVkxB TikJKz0gYWN0X3ZsYW4ubw0KPj4gb2JqLSQoQ09ORklHX05FVF9BQ1RfQlBGKQkrPSBhY3RfYnBm Lm8NCj4+IG9iai0kKENPTkZJR19ORVRfQUNUX0NPTk5NQVJLKQkrPSBhY3RfY29ubm1hcmsubw0K Pj4gK29iai0kKENPTkZJR19ORVRfQUNUX0NUSU5GTykJKz0gYWN0X2N0aW5mby5vDQo+PiBvYmot JChDT05GSUdfTkVUX0FDVF9TS0JNT0QpCSs9IGFjdF9za2Jtb2Qubw0KPj4gb2JqLSQoQ09ORklH X05FVF9BQ1RfSUZFKQkrPSBhY3RfaWZlLm8NCj4+IG9iai0kKENPTkZJR19ORVRfSUZFX1NLQk1B UkspCSs9IGFjdF9tZXRhX21hcmsubw0KPj4gZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3Rp bmZvLmMgYi9uZXQvc2NoZWQvYWN0X2N0aW5mby5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lZmNiN2UwYjU0OTENCj4+IC0tLSAvZGV2L251bGwNCj4+ ICsrKyBiL25ldC9zY2hlZC9hY3RfY3RpbmZvLmMNCj4+IEBAIC0wLDAgKzEsNDE1IEBADQo+PiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQo+PiArLyogbmV0L3NjaGVkL2Fj dF9jdGluZm8uYyAgbmV0ZmlsdGVyIGN0aW5mbyBjb25ubWFyayBhY3Rpb25zDQo+PiArICoNCj4+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTkgS2V2aW4gRGFyYnlzaGlyZS1CcnlhbnQgPGxkaXJAZGFy YnlzaGlyZS1icnlhbnQubWUudWs+DQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+PiArI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4NCj4+ICsjaW5jbHVk ZSA8bGludXgvcnRuZXRsaW5rLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4NCj4+ ICsjaW5jbHVkZSA8bGludXgvaXAuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvaXB2Ni5oPg0KPj4g KyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPg0KPj4gKyNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+ DQo+PiArI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+DQo+PiArI2luY2x1ZGUgPG5ldC9wa3RfY2xz Lmg+DQo+PiArI2luY2x1ZGUgPHVhcGkvbGludXgvdGNfYWN0L3RjX2N0aW5mby5oPg0KPj4gKyNp bmNsdWRlIDxuZXQvdGNfYWN0L3RjX2N0aW5mby5oPg0KPj4gKw0KPj4gKyNpbmNsdWRlIDxuZXQv bmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPg0KPj4gKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25m X2Nvbm50cmFja19jb3JlLmg+DQo+PiArI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRy YWNrX2VjYWNoZS5oPg0KPj4gKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196 b25lcy5oPg0KPj4gKw0KPj4gK3N0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZv X29wczsNCj4+ICtzdGF0aWMgdW5zaWduZWQgaW50IGN0aW5mb19uZXRfaWQ7DQo+PiArDQo+PiAr c3RhdGljIHZvaWQgdGNmX2N0aW5mb19kc2NwX3NldChzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVj dCB0Y2ZfY3RpbmZvICpjYSwNCj4+ICsJCQkJc3RydWN0IHRjZl9jdGluZm9fcGFyYW1zICpjcCwN Cj4+ICsJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHdsZW4sIGludCBwcm90bykNCj4+ICt7 DQo+PiArCXU4IGRzY3AsIG5ld2RzY3A7DQo+PiArDQo+PiArCW5ld2RzY3AgPSAoKChjdC0+bWFy ayAmIGNwLT5kc2NwbWFzaykgPj4gY3AtPmRzY3BtYXNrc2hpZnQpIDw8IDIpICYNCj4+ICsJCSAg ICAgfklORVRfRUNOX01BU0s7DQo+PiArDQo+PiArCXN3aXRjaCAocHJvdG8pIHsNCj4+ICsJY2Fz ZSBORlBST1RPX0lQVjQ6DQo+PiArCQlkc2NwID0gaXB2NF9nZXRfZHNmaWVsZChpcF9oZHIoc2ti KSkgJiB+SU5FVF9FQ05fTUFTSzsNCj4+ICsJCWlmIChkc2NwICE9IG5ld2RzY3ApIHsNCj4+ICsJ CQlpZiAobGlrZWx5KCFza2JfdHJ5X21ha2Vfd3JpdGFibGUoc2tiLCB3bGVuKSkpIHsNCj4+ICsJ CQkJaXB2NF9jaGFuZ2VfZHNmaWVsZChpcF9oZHIoc2tiKSwNCj4+ICsJCQkJCQkgICAgSU5FVF9F Q05fTUFTSywNCj4+ICsJCQkJCQkgICAgbmV3ZHNjcCk7DQo+PiArCQkJCWNhLT5zdGF0c19kc2Nw X3NldCsrOw0KPj4gKwkJCX0gZWxzZSB7DQo+PiArCQkJCWNhLT5zdGF0c19kc2NwX2Vycm9yKys7 DQo+PiArCQkJfQ0KPj4gKwkJfQ0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgTkZQUk9UT19JUFY2 Og0KPj4gKwkJZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXB2Nl9oZHIoc2tiKSkgJiB+SU5FVF9F Q05fTUFTSzsNCj4+ICsJCWlmIChkc2NwICE9IG5ld2RzY3ApIHsNCj4+ICsJCQlpZiAobGlrZWx5 KCFza2JfdHJ5X21ha2Vfd3JpdGFibGUoc2tiLCB3bGVuKSkpIHsNCj4+ICsJCQkJaXB2Nl9jaGFu Z2VfZHNmaWVsZChpcHY2X2hkcihza2IpLA0KPj4gKwkJCQkJCSAgICBJTkVUX0VDTl9NQVNLLA0K Pj4gKwkJCQkJCSAgICBuZXdkc2NwKTsNCj4+ICsJCQkJY2EtPnN0YXRzX2RzY3Bfc2V0Kys7DQo+ PiArCQkJfSBlbHNlIHsNCj4+ICsJCQkJY2EtPnN0YXRzX2RzY3BfZXJyb3IrKzsNCj4+ICsJCQl9 DQo+PiArCQl9DQo+PiArCQlicmVhazsNCj4+ICsJZGVmYXVsdDoNCj4+ICsJCWJyZWFrOw0KPj4g Kwl9DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIHRjZl9jdGluZm9fY3BtYXJrX3NldChz dHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCB0Y2ZfY3RpbmZvICpjYSwNCj4+ICsJCQkJICBzdHJ1 Y3QgdGNmX2N0aW5mb19wYXJhbXMgKmNwLA0KPj4gKwkJCQkgIHN0cnVjdCBza19idWZmICpza2Ip DQo+PiArew0KPj4gKwljYS0+c3RhdHNfY3BtYXJrX3NldCsrOw0KPj4gKwlza2ItPm1hcmsgPSBj dC0+bWFyayAmIGNwLT5jcG1hcmttYXNrOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IHRj Zl9jdGluZm9fYWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24g KmEsDQo+PiArCQkJICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKQ0KPj4gK3sNCj4+ICsJY29uc3Qg c3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICp0aGFzaCA9IE5VTEw7DQo+PiArCXN0cnVj dCB0Y2ZfY3RpbmZvICpjYSA9IHRvX2N0aW5mbyhhKTsNCj4+ICsJc3RydWN0IG5mX2Nvbm50cmFj a190dXBsZSB0dXBsZTsNCj4+ICsJc3RydWN0IG5mX2Nvbm50cmFja196b25lIHpvbmU7DQo+PiAr CWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOw0KPj4gKwlzdHJ1Y3QgdGNmX2N0aW5mb19w YXJhbXMgKmNwOw0KPj4gKwlzdHJ1Y3QgbmZfY29ubiAqY3Q7DQo+PiArCWludCBwcm90bywgd2xl bjsNCj4+ICsJaW50IGFjdGlvbjsNCj4+ICsNCj4+ICsJY3AgPSByY3VfZGVyZWZlcmVuY2VfYmgo Y2EtPnBhcmFtcyk7DQo+PiArDQo+PiArCXRjZl9sYXN0dXNlX3VwZGF0ZSgmY2EtPnRjZl90bSk7 DQo+PiArCWJzdGF0c191cGRhdGUoJmNhLT50Y2ZfYnN0YXRzLCBza2IpOw0KPj4gKwlhY3Rpb24g PSBSRUFEX09OQ0UoY2EtPnRjZl9hY3Rpb24pOw0KPj4gKw0KPj4gKwl3bGVuID0gc2tiX25ldHdv cmtfb2Zmc2V0KHNrYik7DQo+PiArCWlmICh0Y19za2JfcHJvdG9jb2woc2tiKSA9PSBodG9ucyhF VEhfUF9JUCkpIHsNCj4+ICsJCXdsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7DQo+PiArCQlp ZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB3bGVuKSkNCj4+ICsJCQlnb3RvIG91dDsNCj4+ICsNCj4+ ICsJCXByb3RvID0gTkZQUk9UT19JUFY0Ow0KPj4gKwl9IGVsc2UgaWYgKHRjX3NrYl9wcm90b2Nv bChza2IpID09IGh0b25zKEVUSF9QX0lQVjYpKSB7DQo+PiArCQl3bGVuICs9IHNpemVvZihzdHJ1 Y3QgaXB2Nmhkcik7DQo+PiArCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB3bGVuKSkNCj4+ICsJ CQlnb3RvIG91dDsNCj4+ICsNCj4+ICsJCXByb3RvID0gTkZQUk9UT19JUFY2Ow0KPj4gKwl9IGVs c2Ugew0KPj4gKwkJZ290byBvdXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJY3QgPSBuZl9jdF9nZXQo c2tiLCAmY3RpbmZvKTsNCj4+ICsJaWYgKCFjdCkgeyAvKiBsb29rIGhhcmRlciwgdXN1YWxseSBp bmdyZXNzICovDQo+PiArCQlpZiAoIW5mX2N0X2dldF90dXBsZXByKHNrYiwgc2tiX25ldHdvcmtf b2Zmc2V0KHNrYiksDQo+PiArCQkJCSAgICAgICBwcm90bywgY3AtPm5ldCwgJnR1cGxlKSkNCj4+ ICsJCQlnb3RvIG91dDsNCj4+ICsJCXpvbmUuaWQgPSBjcC0+em9uZTsNCj4+ICsJCXpvbmUuZGly ID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjsNCj4+ICsNCj4+ICsJCXRoYXNoID0gbmZfY29ubnRy YWNrX2ZpbmRfZ2V0KGNwLT5uZXQsICZ6b25lLCAmdHVwbGUpOw0KPj4gKwkJaWYgKCF0aGFzaCkN Cj4+ICsJCQlnb3RvIG91dDsNCj4+ICsNCj4+ICsJCWN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0 cmFjayh0aGFzaCk7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKGNwLT5tb2RlICYgQ1RJTkZPX01P REVfRFNDUCkNCj4+ICsJCWlmICghY3AtPmRzY3BzdGF0ZW1hc2sgfHwgKGN0LT5tYXJrICYgY3At PmRzY3BzdGF0ZW1hc2spKQ0KPj4gKwkJCXRjZl9jdGluZm9fZHNjcF9zZXQoY3QsIGNhLCBjcCwg c2tiLCB3bGVuLCBwcm90byk7DQo+PiArDQo+PiArCWlmIChjcC0+bW9kZSAmIENUSU5GT19NT0RF X0NQTUFSSykNCj4+ICsJCXRjZl9jdGluZm9fY3BtYXJrX3NldChjdCwgY2EsIGNwLCBza2IpOw0K Pj4gKw0KPj4gKwlpZiAodGhhc2gpDQo+PiArCQluZl9jdF9wdXQoY3QpOw0KPj4gK291dDoNCj4+ ICsJcmV0dXJuIGFjdGlvbjsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBu bGFfcG9saWN5IGN0aW5mb19wb2xpY3lbVENBX0NUSU5GT19NQVggKyAxXSA9IHsNCj4+ICsJW1RD QV9DVElORk9fQUNUXQkgID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y19jdGluZm8pIH0sDQo+ PiArCVtUQ0FfQ1RJTkZPX1pPTkVdCSAgPSB7IC50eXBlID0gTkxBX1UxNiB9LA0KPj4gKwlbVENB X0NUSU5GT19QQVJNU19EU0NQXSAgID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y19jdGluZm9f ZHNjcCkgfSwNCj4+ICsJW1RDQV9DVElORk9fUEFSTVNfQ1BNQVJLXSA9IHsgLmxlbiA9IHNpemVv ZihzdHJ1Y3QgdGNfY3RpbmZvX2NwbWFyaykgfSwNCj4gDQo+IFRoZSBvcGFxdWUgc3RydWN0cyBt ZWFuIHRoYXQgeW91J2xsIGFjdHVhbGx5IGdldCAqbGVzcyogbmV0bGluayB2YWxpZGF0aW9uLg0K PiANCj4+ICsJW1RDQV9DVElORk9fTU9ERV9EU0NQXSAgICA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9 LA0KPj4gKwlbVENBX0NUSU5GT19NT0RFX0NQTUFSS10gID0geyAudHlwZSA9IE5MQV9GTEFHIH0s DQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgaW50IHRjZl9jdGluZm9faW5pdChzdHJ1Y3QgbmV0 ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwNCj4+ICsJCQkgICBzdHJ1Y3QgbmxhdHRyICplc3Qs IHN0cnVjdCB0Y19hY3Rpb24gKiphLA0KPj4gKwkJCSAgIGludCBvdnIsIGludCBiaW5kLCBib29s IHJ0bmxfaGVsZCwNCj4+ICsJCQkgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwNCj4+ICsJCQkgICBz dHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spDQo+PiArew0KPj4gKwlzdHJ1Y3QgdGNfYWN0 aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGN0aW5mb19uZXRfaWQpOw0KPj4gKwlzdHJ1 Y3QgdGNfY3RpbmZvX2NwbWFyayAqY3BtYXJrcGFybSA9IE5VTEw7DQo+PiArCXN0cnVjdCBubGF0 dHIgKnRiW1RDQV9DVElORk9fTUFYICsgMV07DQo+PiArCXN0cnVjdCB0Y2ZfY3RpbmZvX3BhcmFt cyAqY3BfbmV3Ow0KPj4gKwlzdHJ1Y3QgdGNmX2NoYWluICpnb3RvX2NoID0gTlVMTDsNCj4+ICsJ c3RydWN0IHRjX2N0aW5mb19kc2NwICpkc2NwcGFybTsNCj4+ICsJc3RydWN0IHRjZl9jdGluZm8g KmNpOw0KPj4gKwlzdHJ1Y3QgdGNfY3RpbmZvICphY3RwYXJtOw0KPj4gKwlpbnQgcmV0ID0gMCwg ZXJyLCBpOw0KPj4gKw0KPj4gKwlpZiAoIW5sYSkNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4g Kw0KPj4gKwllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBUQ0FfQ1RJTkZPX01BWCwgbmxhLCBj dGluZm9fcG9saWN5LCBOVUxMKTsNCj4+ICsJaWYgKGVyciA8IDApDQo+PiArCQlyZXR1cm4gZXJy Ow0KPj4gKw0KPj4gKwlpZiAoIXRiW1RDQV9DVElORk9fQUNUXSkNCj4+ICsJCXJldHVybiAtRUlO VkFMOw0KPj4gKw0KPj4gKwlpZiAodGJbVENBX0NUSU5GT19NT0RFX0RTQ1BdICYmICF0YltUQ0Ff Q1RJTkZPX1BBUk1TX0RTQ1BdKQ0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArCWlm ICh0YltUQ0FfQ1RJTkZPX1BBUk1TX0NQTUFSS10pDQo+PiArCQljcG1hcmtwYXJtID0gbmxhX2Rh dGEodGJbVENBX0NUSU5GT19QQVJNU19DUE1BUktdKTsNCj4+ICsNCj4+ICsJZHNjcHBhcm0gPSBu bGFfZGF0YSh0YltUQ0FfQ1RJTkZPX1BBUk1TX0RTQ1BdKTsNCj4+ICsJYWN0cGFybSA9IG5sYV9k YXRhKHRiW1RDQV9DVElORk9fQUNUXSk7DQo+PiArDQo+PiArCWlmIChkc2NwcGFybSkgew0KPiAN Cj4gVGhpcyBpcyBicm9rZW47IHlvdSBuZWVkIHRvIGNoZWNrIGlmIHRiW1RDQV9DVElORk9fUEFS TVNfRFNDUF0gaXMgTlVMTA0KPiAqYmVmb3JlKiBjYWxsaW5nIG5sYV9kYXRhIG9uIGl0LiBUaGUg Y2hlY2sgYWZ0ZXJ3YXJkcyB3aWxsIG5vdCBmYWlsLCBhcw0KPiBubGFfZGF0YSgpIGFkZHMgYSBj b25zdGFudCB2YWx1ZSB0byB0aGUgMC1wb2ludGVyLg0KPiANCj4gTWF5YmUganVzdCBtb3ZlIHRo aXMgd2hvbGUgdmFsaWRhdGlvbiBpbnRvIHRoZQ0KPiANCj4gaWYodGJbVENBX0NUSU5GT19NT0RF X0RTQ1BdKQ0KPiANCj4gY2hlY2s/DQo+IA0KPj4gKwkJLyogbmVlZCBjb250aWd1b3VzIDYgYml0 IG1hc2sgKi8NCj4+ICsJCWkgPSBkc2NwcGFybS0+bWFzayA/IF9fZmZzKGRzY3BwYXJtLT5tYXNr KSA6IDA7DQo+PiArCQlpZiAoKH4wICYgKGRzY3BwYXJtLT5tYXNrID4+IGkpKSAhPSAweDNmKQ0K Pj4gKwkJCXJldHVybiAtRUlOVkFMOw0KPj4gKwkJLyogbWFzayAmIHN0YXRlbWFzayBtdXN0IG5v dCBvdmVybGFwICovDQo+PiArCQlpZiAoZHNjcHBhcm0tPm1hc2sgJiBkc2NwcGFybS0+c3RhdGVt YXNrKQ0KPj4gKwkJCXJldHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiArDQo+PiArCS8qIGRvbmUg dGhlIHZhbGlkYXRpb246bm93IHRvIHRoZSBhY3R1YWwgYWN0aW9uIGFsbG9jYXRpb24gKi8NCj4+ ICsJZXJyID0gdGNmX2lkcl9jaGVja19hbGxvYyh0biwgJmFjdHBhcm0tPmluZGV4LCBhLCBiaW5k KTsNCj4+ICsJaWYgKCFlcnIpIHsNCj4+ICsJCXJldCA9IHRjZl9pZHJfY3JlYXRlKHRuLCBhY3Rw YXJtLT5pbmRleCwgZXN0LCBhLA0KPj4gKwkJCQkgICAgICZhY3RfY3RpbmZvX29wcywgYmluZCwg ZmFsc2UpOw0KPj4gKwkJaWYgKHJldCkgew0KPj4gKwkJCXRjZl9pZHJfY2xlYW51cCh0biwgYWN0 cGFybS0+aW5kZXgpOw0KPj4gKwkJCXJldHVybiByZXQ7DQo+PiArCQl9DQo+PiArCX0gZWxzZSBp ZiAoZXJyID4gMCkgew0KPj4gKwkJaWYgKGJpbmQpIC8qIGRvbid0IG92ZXJyaWRlIGRlZmF1bHRz ICovDQo+PiArCQkJcmV0dXJuIDA7DQo+PiArCQlpZiAoIW92cikgew0KPj4gKwkJCXRjZl9pZHJf cmVsZWFzZSgqYSwgYmluZCk7DQo+PiArCQkJcmV0dXJuIC1FRVhJU1Q7DQo+PiArCQl9DQo+PiAr CX0gZWxzZSB7DQo+PiArCQlyZXR1cm4gZXJyOw0KPj4gKwl9DQo+PiArDQo+PiArCWVyciA9IHRj Zl9hY3Rpb25fY2hlY2tfY3RybGFjdChhY3RwYXJtLT5hY3Rpb24sIHRwLCAmZ290b19jaCwgZXh0 YWNrKTsNCj4+ICsJaWYgKGVyciA8IDApDQo+PiArCQlnb3RvIHJlbGVhc2VfaWRyOw0KPj4gKw0K Pj4gKwljaSA9IHRvX2N0aW5mbygqYSk7DQo+PiArDQo+PiArCWNwX25ldyA9IGt6YWxsb2Moc2l6 ZW9mKCpjcF9uZXcpLCBHRlBfS0VSTkVMKTsNCj4+ICsJaWYgKHVubGlrZWx5KCFjcF9uZXcpKSB7 DQo+PiArCQllcnIgPSAtRU5PTUVNOw0KPj4gKwkJZ290byBwdXRfY2hhaW47DQo+PiArCX0NCj4+ ICsNCj4+ICsJY3BfbmV3LT5uZXQgPSBuZXQ7DQo+PiArCWNwX25ldy0+em9uZSA9IHRiW1RDQV9D VElORk9fWk9ORV0gPw0KPj4gKwkJCW5sYV9nZXRfdTE2KHRiW1RDQV9DVElORk9fWk9ORV0pIDog MDsNCj4+ICsJaWYgKGRzY3BwYXJtKSB7DQo+PiArCQljcF9uZXctPmRzY3BtYXNrID0gZHNjcHBh cm0tPm1hc2s7DQo+PiArCQljcF9uZXctPmRzY3BtYXNrc2hpZnQgPSBjcF9uZXctPmRzY3BtYXNr ID8NCj4+ICsJCQkJX19mZnMoY3BfbmV3LT5kc2NwbWFzaykgOiAwOw0KPj4gKwkJY3BfbmV3LT5k c2Nwc3RhdGVtYXNrID0gZHNjcHBhcm0tPnN0YXRlbWFzazsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlp ZiAoY3BtYXJrcGFybSkNCj4+ICsJCWNwX25ldy0+Y3BtYXJrbWFzayA9IGNwbWFya3Bhcm0tPm1h c2s7DQo+PiArCWVsc2UNCj4+ICsJCWNwX25ldy0+Y3BtYXJrbWFzayA9IH4wOw0KPj4gKw0KPj4g KwlpZiAodGJbVENBX0NUSU5GT19NT0RFX0RTQ1BdKQ0KPj4gKwkJY3BfbmV3LT5tb2RlIHw9IENU SU5GT19NT0RFX0RTQ1A7DQo+PiArCWVsc2UNCj4+ICsJCWNwX25ldy0+bW9kZSAmPSB+Q1RJTkZP X01PREVfRFNDUDsNCj4+ICsNCj4+ICsJaWYgKHRiW1RDQV9DVElORk9fTU9ERV9DUE1BUktdKQ0K Pj4gKwkJY3BfbmV3LT5tb2RlIHw9IENUSU5GT19NT0RFX0NQTUFSSzsNCj4+ICsJZWxzZQ0KPj4g KwkJY3BfbmV3LT5tb2RlICY9IH5DVElORk9fTU9ERV9DUE1BUks7DQo+PiArDQo+PiArCXNwaW5f bG9ja19iaCgmY2ktPnRjZl9sb2NrKTsNCj4+ICsJZ290b19jaCA9IHRjZl9hY3Rpb25fc2V0X2N0 cmxhY3QoKmEsIGFjdHBhcm0tPmFjdGlvbiwgZ290b19jaCk7DQo+PiArCXJjdV9zd2FwX3Byb3Rl Y3RlZChjaS0+cGFyYW1zLCBjcF9uZXcsDQo+PiArCQkJICAgbG9ja2RlcF9pc19oZWxkKCZjaS0+ dGNmX2xvY2spKTsNCj4+ICsJc3Bpbl91bmxvY2tfYmgoJmNpLT50Y2ZfbG9jayk7DQo+PiArDQo+ PiArCWlmIChnb3RvX2NoKQ0KPj4gKwkJdGNmX2NoYWluX3B1dF9ieV9hY3QoZ290b19jaCk7DQo+ PiArCWlmIChjcF9uZXcpDQo+PiArCQlrZnJlZV9yY3UoY3BfbmV3LCByY3UpOw0KPj4gKw0KPj4g KwlpZiAocmV0ID09IEFDVF9QX0NSRUFURUQpDQo+PiArCQl0Y2ZfaWRyX2luc2VydCh0biwgKmEp Ow0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gK3B1dF9jaGFpbjoNCj4+ICsJaWYg KGdvdG9fY2gpDQo+PiArCQl0Y2ZfY2hhaW5fcHV0X2J5X2FjdChnb3RvX2NoKTsNCj4+ICtyZWxl YXNlX2lkcjoNCj4+ICsJdGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTsNCj4+ICsJcmV0dXJuIGVy cjsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCB0Y2ZfY3RpbmZvX2R1bXAoc3RydWN0IHNr X2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwNCj4+ICsJCQkgICBpbnQgYmluZCwgaW50 IHJlZikNCj4+ICt7DQo+PiArCXN0cnVjdCB0Y2ZfY3RpbmZvICpjaSA9IHRvX2N0aW5mbyhhKTsN Cj4+ICsJc3RydWN0IHRjX2N0aW5mbyBvcHQgPSB7DQo+PiArCQkuaW5kZXggICA9IGNpLT50Y2Zf aW5kZXgsDQo+PiArCQkucmVmY250ICA9IHJlZmNvdW50X3JlYWQoJmNpLT50Y2ZfcmVmY250KSAt IHJlZiwNCj4+ICsJCS5iaW5kY250ID0gYXRvbWljX3JlYWQoJmNpLT50Y2ZfYmluZGNudCkgLSBi aW5kLA0KPj4gKwl9Ow0KPj4gKwlzdHJ1Y3QgdGNfY3RpbmZvX3N0YXRzX2NwbWFyayBjcG1hcmtz dGF0czsNCj4+ICsJdW5zaWduZWQgY2hhciAqYiA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsNCj4+ ICsJc3RydWN0IHRjX2N0aW5mb19zdGF0c19kc2NwIGRzY3BzdGF0czsNCj4+ICsJc3RydWN0IHRj X2N0aW5mb19jcG1hcmsgY3BtYXJrcGFybTsNCj4+ICsJc3RydWN0IHRjX2N0aW5mb19kc2NwIGRz Y3BwYXJtOw0KPj4gKwlzdHJ1Y3QgdGNmX2N0aW5mb19wYXJhbXMgKmNwOw0KPj4gKwlzdHJ1Y3Qg dGNmX3QgdDsNCj4+ICsNCj4+ICsJc3Bpbl9sb2NrX2JoKCZjaS0+dGNmX2xvY2spOw0KPj4gKwlj cCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY2ktPnBhcmFtcywNCj4+ICsJCQkJICAgICAg IGxvY2tkZXBfaXNfaGVsZCgmY2ktPnRjZl9sb2NrKSk7DQo+PiArCW9wdC5hY3Rpb24gPSBjaS0+ dGNmX2FjdGlvbjsNCj4+ICsNCj4+ICsJaWYgKG5sYV9wdXQoc2tiLCBUQ0FfQ1RJTkZPX0FDVCwg c2l6ZW9mKG9wdCksICZvcHQpKQ0KPj4gKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+PiArDQo+ PiArCWlmIChjcC0+bW9kZSAmIENUSU5GT19NT0RFX0RTQ1ApIHsNCj4+ICsJCWRzY3BwYXJtLm1h c2sgPSBjcC0+ZHNjcG1hc2s7DQo+PiArCQlkc2NwcGFybS5zdGF0ZW1hc2sgPSBjcC0+ZHNjcHN0 YXRlbWFzazsNCj4+ICsJCWlmIChubGFfcHV0KHNrYiwgVENBX0NUSU5GT19QQVJNU19EU0NQLCBz aXplb2YoZHNjcHBhcm0pLA0KPj4gKwkJCSAgICAmZHNjcHBhcm0pKQ0KPj4gKwkJCWdvdG8gbmxh X3B1dF9mYWlsdXJlOw0KPj4gKw0KPj4gKwkJaWYgKG5sYV9wdXRfZmxhZyhza2IsIFRDQV9DVElO Rk9fTU9ERV9EU0NQKSkNCj4+ICsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4+ICsNCj4+ICsJ CWRzY3BzdGF0cy5lcnJvciA9IGNpLT5zdGF0c19kc2NwX2Vycm9yOw0KPj4gKwkJZHNjcHN0YXRz LnNldCA9IGNpLT5zdGF0c19kc2NwX3NldDsNCj4+ICsJCWlmIChubGFfcHV0KHNrYiwgVENBX0NU SU5GT19TVEFUU19EU0NQLCBzaXplb2YoZHNjcHN0YXRzKSwNCj4+ICsJCQkgICAgJmRzY3BzdGF0 cykpDQo+PiArCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYg KGNwLT5tb2RlICYgQ1RJTkZPX01PREVfQ1BNQVJLKSB7DQo+PiArCQljcG1hcmtwYXJtLm1hc2sg PSBjcC0+Y3BtYXJrbWFzazsNCj4+ICsJCWlmIChubGFfcHV0KHNrYiwgVENBX0NUSU5GT19QQVJN U19DUE1BUkssIHNpemVvZihjcG1hcmtwYXJtKSwNCj4+ICsJCQkgICAgJmNwbWFya3Bhcm0pKQ0K Pj4gKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPj4gKw0KPj4gKwkJaWYgKG5sYV9wdXRfZmxh Zyhza2IsIFRDQV9DVElORk9fTU9ERV9DUE1BUkspKQ0KPj4gKwkJCWdvdG8gbmxhX3B1dF9mYWls dXJlOw0KPj4gKw0KPj4gKwkJY3BtYXJrc3RhdHMuc2V0ID0gY2ktPnN0YXRzX2NwbWFya19zZXQ7 DQo+PiArCQlpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBUQ0FfQ1RJTkZPX1NUQVRTX0NQTUFS SywNCj4+ICsJCQkJICAgICAgY2ktPnN0YXRzX2NwbWFya19zZXQsIFRDQV9DVElORk9fUEFEKSkN Cj4+ICsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4+ICsJfQ0KPiANCj4gSSB0aGluayB5b3Ug c2hvdWxkIGR1bXAgYWxsIHRoZSBzdGF0aXN0aWNzIG5vIG1hdHRlciB0aGUgY29uZmlndXJhdGlv bi4NCj4gVGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgYmUgY2hhbmdlZCBhdCBydW4tdGltZSwgaW4g d2hpY2ggY2FzZSB0aGUgdXNlcg0KPiB3aWxsIHByb2JhYmx5IHN0aWxsIHdhbnQgdG8gc2VlIHRo ZSBvbGQgc3RhdHMgZnJvbSBiZWZvcmUgdGhlIGNoYW5nZS4NCj4gDQo+PiArCWlmIChjcC0+em9u ZSkgew0KPj4gKwkJaWYgKG5sYV9wdXRfdTE2KHNrYiwgVENBX0NUSU5GT19aT05FLCBjcC0+em9u ZSkpDQo+PiArCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+PiArCX0NCj4gDQo+IFRoZSBkZWZh dWx0IHpvbmUgaXMgJzAnLCBzbyB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhIHpvbmUgc2V0LiBJLmUu LCBkb24ndA0KPiBsZWF2ZSBvdXQgdGhlIGF0dHJpYnV0ZSBlbnRpcmVseSBoZXJlLCBqdXN0IGFk ZCBpdCB3aXRoIGEgMC12YWx1ZS4NCj4gDQo+PiArDQo+PiArCXRjZl90bV9kdW1wKCZ0LCAmY2kt PnRjZl90bSk7DQo+PiArCWlmIChubGFfcHV0XzY0Yml0KHNrYiwgVENBX0NUSU5GT19UTSwgc2l6 ZW9mKHQpLCAmdCwgVENBX0NUSU5GT19QQUQpKQ0KPj4gKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7 DQo+PiArDQo+PiArCXNwaW5fdW5sb2NrX2JoKCZjaS0+dGNmX2xvY2spOw0KPj4gKwlyZXR1cm4g c2tiLT5sZW47DQo+PiArDQo+PiArbmxhX3B1dF9mYWlsdXJlOg0KPj4gKwlzcGluX3VubG9ja19i aCgmY2ktPnRjZl9sb2NrKTsNCj4+ICsJbmxtc2dfdHJpbShza2IsIGIpOw0KPj4gKwlyZXR1cm4g LTE7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgdGNmX2N0aW5mb193YWxrZXIoc3RydWN0 IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KPj4gKwkJCSAgICAgc3RydWN0IG5ldGxp bmtfY2FsbGJhY2sgKmNiLCBpbnQgdHlwZSwNCj4+ICsJCQkgICAgIGNvbnN0IHN0cnVjdCB0Y19h Y3Rpb25fb3BzICpvcHMsDQo+PiArCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRh Y2spDQo+PiArew0KPj4gKwlzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhu ZXQsIGN0aW5mb19uZXRfaWQpOw0KPj4gKw0KPj4gKwlyZXR1cm4gdGNmX2dlbmVyaWNfd2Fsa2Vy KHRuLCBza2IsIGNiLCB0eXBlLCBvcHMsIGV4dGFjayk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBpbnQgdGNmX2N0aW5mb19zZWFyY2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNfYWN0aW9u ICoqYSwgdTMyIGluZGV4KQ0KPj4gK3sNCj4+ICsJc3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0g bmV0X2dlbmVyaWMobmV0LCBjdGluZm9fbmV0X2lkKTsNCj4+ICsNCj4+ICsJcmV0dXJuIHRjZl9p ZHJfc2VhcmNoKHRuLCBhLCBpbmRleCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBzdHJ1Y3Qg dGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHsNCj4+ICsJLmtpbmQJPSAiY3RpbmZvIiwN Cj4+ICsJLmlkCT0gVENBX0lEX0NUSU5GTywNCj4+ICsJLm93bmVyCT0gVEhJU19NT0RVTEUsDQo+ PiArCS5hY3QJPSB0Y2ZfY3RpbmZvX2FjdCwNCj4+ICsJLmR1bXAJPSB0Y2ZfY3RpbmZvX2R1bXAs DQo+PiArCS5pbml0CT0gdGNmX2N0aW5mb19pbml0LA0KPj4gKwkud2Fsawk9IHRjZl9jdGluZm9f d2Fsa2VyLA0KPj4gKwkubG9va3VwCT0gdGNmX2N0aW5mb19zZWFyY2gsDQo+PiArCS5zaXplCT0g c2l6ZW9mKHN0cnVjdCB0Y2ZfY3RpbmZvKSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBfX25l dF9pbml0IGludCBjdGluZm9faW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQ0KPj4gK3sNCj4+ICsJ c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBjdGluZm9fbmV0X2lk KTsNCj4+ICsNCj4+ICsJcmV0dXJuIHRjX2FjdGlvbl9uZXRfaW5pdCh0biwgJmFjdF9jdGluZm9f b3BzKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgX19uZXRfZXhpdCBjdGluZm9fZXhp dF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpDQo+PiArew0KPj4gKwl0Y19hY3Rpb25f bmV0X2V4aXQobmV0X2xpc3QsIGN0aW5mb19uZXRfaWQpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGN0aW5mb19uZXRfb3BzID0gew0KPj4gKwkuaW5p dAkJPSBjdGluZm9faW5pdF9uZXQsDQo+PiArCS5leGl0X2JhdGNoCT0gY3RpbmZvX2V4aXRfbmV0 LA0KPj4gKwkuaWQJCT0gJmN0aW5mb19uZXRfaWQsDQo+PiArCS5zaXplCQk9IHNpemVvZihzdHJ1 Y3QgdGNfYWN0aW9uX25ldCksDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgaW50IF9faW5pdCBj dGluZm9faW5pdF9tb2R1bGUodm9pZCkNCj4+ICt7DQo+PiArCXJldHVybiB0Y2ZfcmVnaXN0ZXJf YWN0aW9uKCZhY3RfY3RpbmZvX29wcywgJmN0aW5mb19uZXRfb3BzKTsNCj4+ICt9DQo+PiArDQo+ PiArc3RhdGljIHZvaWQgX19leGl0IGN0aW5mb19jbGVhbnVwX21vZHVsZSh2b2lkKQ0KPj4gK3sN Cj4+ICsJdGNmX3VucmVnaXN0ZXJfYWN0aW9uKCZhY3RfY3RpbmZvX29wcywgJmN0aW5mb19uZXRf b3BzKTsNCj4+ICt9DQo+PiArDQo+PiArbW9kdWxlX2luaXQoY3RpbmZvX2luaXRfbW9kdWxlKTsN Cj4+ICttb2R1bGVfZXhpdChjdGluZm9fY2xlYW51cF9tb2R1bGUpOw0KPj4gK01PRFVMRV9BVVRI T1IoIktldmluIERhcmJ5c2hpcmUtQnJ5YW50IDxsZGlyQGRhcmJ5c2hpcmUtYnJ5YW50Lm1lLnVr PiIpOw0KPj4gK01PRFVMRV9ERVNDUklQVElPTigiQ29ubmVjdGlvbiB0cmFja2luZyBtYXJrIGFj dGlvbnMiKTsNCj4+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+PiBkaWZmIC0tZ2l0IGEvdG9v bHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy9jb25maWcgYi90b29scy90ZXN0aW5nL3Nl bGZ0ZXN0cy90Yy10ZXN0aW5nL2NvbmZpZw0KPj4gaW5kZXggMjAzMzAyMDY1NDU4Li5iMjM1ZWZk NTUzNjcgMTAwNjQ0DQo+PiAtLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5n L2NvbmZpZw0KPj4gKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy9jb25m aWcNCj4+IEBAIC0zOCw2ICszOCw3IEBAIENPTkZJR19ORVRfQUNUX0NTVU09bQ0KPj4gQ09ORklH X05FVF9BQ1RfVkxBTj1tDQo+PiBDT05GSUdfTkVUX0FDVF9CUEY9bQ0KPj4gQ09ORklHX05FVF9B Q1RfQ09OTk1BUks9bQ0KPj4gK0NPTkZJR19ORVRfQUNUX0NUSU5GTz1tDQo+PiBDT05GSUdfTkVU X0FDVF9TS0JNT0Q9bQ0KPj4gQ09ORklHX05FVF9BQ1RfSUZFPW0NCj4+IENPTkZJR19ORVRfQUNU X1RVTk5FTF9LRVk9bQ0KPj4gLS0gDQo+PiAyLjIwLjEgKEFwcGxlIEdpdC0xMTcpDQoNCg0K