From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9C309A055E; Wed, 26 Feb 2020 05:33:24 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 908641BC24; Wed, 26 Feb 2020 05:33:23 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 89F121F1C for ; Wed, 26 Feb 2020 05:33:21 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 01Q4Pgf5020202; Tue, 25 Feb 2020 20:33:20 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pfpt0818; bh=SoqgrjkvBi30WMVbq0gosFn5C1Oy/SCDfOaAUU+vM7w=; b=lwQqRjc+xdPTjXi7VX028cz3rdsOUILfX+x7dVBOoVDueRyxu2oega1hobrxmOxDYczX 9I0BHsVA23TCD5j7Wxl1GMLjADsFkykqjjHqdn8ivsQyrqhMlX3gzCVK8ETalpEWJiiA 0suJUNBn5kkl4d4XFHK70M4ThVahwskYb4geGGubngB5QBjQ26Vd9ZYru+IEN17R71rU 0+ZZbc3T7695o0MK0s2SBizooBelLJ2lH/smc83fydxWXVSWlXy9D7Kh5ppQoLtgnxWv wuYU4kpXW8SKgW7zKwYoMYeVpMZmozNve9Dq2DLMggAYgNTfPpiOPvWnw8OjXMrQvmJF Sg== Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0a-0016f401.pphosted.com with ESMTP id 2ydcm1152e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 25 Feb 2020 20:33:20 -0800 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 25 Feb 2020 20:33:19 -0800 Received: from SC-EXCH03.marvell.com (10.93.176.83) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 25 Feb 2020 20:33:18 -0800 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.102) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Tue, 25 Feb 2020 20:33:17 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oddpLhgXm5hEv3PJYof4l8YYMCVIfmQtlqjG40nbmw2ZfBNWMRhUcCOPas2ln+YPREDehpZcsehDSzHMHIBi3r++Pdk0xbSanCLEM6OIt//VLEjfA0j0iBnG9/Wbjk4wTUDBhD3ZehHD6qJR7GUZViY4RXGKYcPuZrouu1jrSU1ZJm0mg3AeCsZryVkCs+7PbzgIembLhdm6TKuIgNCaEocACj5qlycmCIn+2fnCGTT/k7q7rpVX21TSFFScrjai+0eqeacAvR/l82dZTOaas1sj0xGTQ+Ox0Eabzfa4m5jNSldQ8uSiYk0VELaR2Xp9AYuoVeUBB6lK2cqixP21eA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SoqgrjkvBi30WMVbq0gosFn5C1Oy/SCDfOaAUU+vM7w=; b=R8uD0qTTxqoMi5Hi+ynhkLt/BJ8gst5PfHtt/8Fh1lCCTPjjoZyo7RmrQ/6zEEO/tl48Nyg8QEvkDOwwvur+UXgufqH2bqDkSIgY3cIaAQjNCrEOadrhoiATT4ADAVTNOsfOtXzYy+Y3URjxldXXDYUqPtxVP+aVo7Avxt+ZLXwRLBecJFSKQYE+Fj6cbzU0iUpK/qarb7MGydIZBqUtpqYwAvQ/LSI2tI1kPAC+Yt31YluY6vQdkLlID9w0LEcj1JaKMOruvatAAjfRvGumr0G88srWV+AeZ/P1QHcQ3OO+ty7lDGt9dafJViZ96XjdYp3QbK47y5X9GqhKiQnRiQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SoqgrjkvBi30WMVbq0gosFn5C1Oy/SCDfOaAUU+vM7w=; b=QudBZOh/QxzEUQrKIbs+z0WzMtxOgMK3ZYI8d7rIDTqys2M8XIj2odNdyWCLPatujLoUbbX1oolp4yteA4C6q+zVXrxOW138QBxf79L6dzesRzz7EPVbKFlBRlwiVeeVrC50ZGD27UpiRltqFwgn7/WmXD4r1w+hM+EogApq4fQ= Received: from MN2PR18MB2877.namprd18.prod.outlook.com (2603:10b6:208:3b::26) by MN2PR18MB3263.namprd18.prod.outlook.com (2603:10b6:208:16b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2750.22; Wed, 26 Feb 2020 04:33:15 +0000 Received: from MN2PR18MB2877.namprd18.prod.outlook.com ([fe80::648f:e7fa:f95e:191b]) by MN2PR18MB2877.namprd18.prod.outlook.com ([fe80::648f:e7fa:f95e:191b%2]) with mapi id 15.20.2750.021; Wed, 26 Feb 2020 04:33:15 +0000 From: Anoob Joseph To: "Ananyev, Konstantin" , Akhil Goyal CC: Jerin Jacob Kollanukkaran , "Narayana Prasad Raju Athreya" , Ankur Dwivedi , Archana Muniganti , Tejasree Kondoj , Vamsi Krishna Attunuru , "dev@dpdk.org" , Thomas Monjalon , "Nicolau, Radu" , Lukas Bartosik Thread-Topic: [EXT] RE: [PATCH v4 12/15] examples/ipsec-secgw: add app mode worker Thread-Index: AQHV58QqHR3Wk9MZ0kGI/mrxSoMWmKgqaYWAgAFql4CAAAR/IIAAQjGAgADHghA= Date: Wed, 26 Feb 2020 04:33:15 +0000 Message-ID: References: <1580824721-21527-1-git-send-email-lbartosik@marvell.com> <1582185727-6749-1-git-send-email-lbartosik@marvell.com> <1582185727-6749-13-git-send-email-lbartosik@marvell.com> In-Reply-To: Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [14.140.231.66] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 60375344-f0ec-4d6d-2a49-08d7ba74ff2f x-ms-traffictypediagnostic: MN2PR18MB3263: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 0325F6C77B x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(396003)(39860400002)(366004)(136003)(376002)(346002)(199004)(189003)(52536014)(30864003)(66556008)(66946007)(5660300002)(86362001)(66446008)(64756008)(66476007)(33656002)(7696005)(478600001)(2906002)(8676002)(81156014)(81166006)(4326008)(8936002)(71200400001)(55236004)(6506007)(53546011)(76116006)(186003)(110136005)(54906003)(316002)(55016002)(9686003)(107886003)(26005)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR18MB3263; H:MN2PR18MB2877.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 2n8iinS7vntZgiDlEjfHcngSDOV3Czjgc/RRCHdi824mzYjLRix60N222osuZ7eqjTClCUzoer3SQp+FVk3G38KRoY75b29HXAYaWFtGtVhvhJ82hPIwnQkfKaGnRDB+6dsJzlUny/AqdXUAZBWmhW4CogP1E2EmPtjRstUl9PyBzDbDfQvROzldj80X3utp/J5JNGN6EOIRVtyNifzYnkxcbermeEhznrbgncZzzVH53eRBfOR7XaIuiDI6x6inshDarFDx4Ey2wHt/2aP29eRQ80Zys7/6A4Ow6dK3+s4bmBm+XdIz35rQQlcCi02mFbzrTUtxPczAfZOCcZiMw//Z1Pbk7MspQlp4U1KAskcT7VE8hU1YgCnypHX2nrwDN90eu3C0m17aXjQ7T5LZVXyTwEg3d7QDPa9NzKKSGbSK8O5JRZGMLNBje6n2+6Ah x-ms-exchange-antispam-messagedata: 9YFbg90rwTs5FT/OAPOGWeopsInwRb6eeRb9pYu0LCS42Yp++JH+w1BB0giQXHbW1q8I2LESuCne5EE1rFrsgOB/GG/2kAE2L6lnpvL4i+N7d1NAtcbl8tNDLloJTibch9pihRTZSB2LR0ox4MaP1Q== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 60375344-f0ec-4d6d-2a49-08d7ba74ff2f X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Feb 2020 04:33:15.4599 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: PrGfPysfThW3QdGsMBIEwSDV5uXiEyCQ376rpUIjMJ/nDJLU5xVVexSDufLj/nWt/iItUoGfUXgeCm+Z+kWWew== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR18MB3263 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-02-25_09:2020-02-25, 2020-02-25 signatures=0 Subject: Re: [dpdk-dev] [EXT] RE: [PATCH v4 12/15] examples/ipsec-secgw: add app mode worker X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgS29uc3RhbnRpbiwNCg0KUGxlYXNlIHNlZSBpbmxpbmUuDQoNClRoYW5rcywNCkFub29iDQoN Cj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQW5hbnlldiwgS29uc3RhbnRp biA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbT4NCj4gU2VudDogVHVlc2RheSwgRmVicnVh cnkgMjUsIDIwMjAgOTozNCBQTQ0KPiBUbzogQW5vb2IgSm9zZXBoIDxhbm9vYmpAbWFydmVsbC5j b20+OyBBa2hpbCBHb3lhbA0KPiA8YWtoaWwuZ295YWxAbnhwLmNvbT4NCj4gQ2M6IEplcmluIEph Y29iIEtvbGxhbnVra2FyYW4gPGplcmluakBtYXJ2ZWxsLmNvbT47IE5hcmF5YW5hIFByYXNhZCBS YWp1DQo+IEF0aHJleWEgPHBhdGhyZXlhQG1hcnZlbGwuY29tPjsgQW5rdXIgRHdpdmVkaQ0KPiA8 YWR3aXZlZGlAbWFydmVsbC5jb20+OyBBcmNoYW5hIE11bmlnYW50aSA8bWFyY2hhbmFAbWFydmVs bC5jb20+Ow0KPiBUZWphc3JlZSBLb25kb2ogPGt0ZWphc3JlZUBtYXJ2ZWxsLmNvbT47IFZhbXNp IEtyaXNobmEgQXR0dW51cnUNCj4gPHZhdHR1bnVydUBtYXJ2ZWxsLmNvbT47IGRldkBkcGRrLm9y ZzsgVGhvbWFzIE1vbmphbG9uDQo+IDx0aG9tYXNAbW9uamFsb24ubmV0PjsgTmljb2xhdSwgUmFk dSA8cmFkdS5uaWNvbGF1QGludGVsLmNvbT47IEx1a2FzDQo+IEJhcnRvc2lrIDxsYmFydG9zaWtA bWFydmVsbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbRVhUXSBSRTogW1BBVENIIHY0IDEyLzE1XSBl eGFtcGxlcy9pcHNlYy1zZWNndzogYWRkIGFwcA0KPiBtb2RlIHdvcmtlcg0KPiANCj4gPiA+ID4+ IEFkZCBhcHBsaWNhdGlvbiBpbmJvdW5kL291dGJvdW5kIHdvcmtlciB0aHJlYWQgYW5kIElQc2Vj DQo+ID4gPiA+PiBhcHBsaWNhdGlvbiBwcm9jZXNzaW5nIGNvZGUgZm9yIGV2ZW50IG1vZGUuDQo+ ID4gPiA+Pg0KPiA+ID4gPj4gRXhhbXBsZSBpcHNlYy1zZWNndyBjb21tYW5kIGluIGFwcCBtb2Rl Og0KPiA+ID4gPj4gaXBzZWMtc2VjZ3cgLXcgMDAwMjowMjowMC4wLGlwc2VjX2luX21heF9zcGk9 MTI4IC13DQo+ID4gPiA+PiAwMDAyOjAzOjAwLjAsaXBzZWNfaW5fbWF4X3NwaT0xMjggLXcgMDAw MjowZTowMC4wIC13IDAwMDI6MTA6MDAuMQ0KPiA+ID4gPj4gLS1sb2ctbGV2ZWw9OCAtYyAweDEg LS0gLVAgLXAgMHgzIC11IDB4MSAtLWNvbmZpZyAiKDEsMCwwKSwoMCwwLDApIg0KPiA+ID4gPj4g LWYgYWVzLWdjbS5jZmcgLS10cmFuc2Zlci1tb2RlIGV2ZW50IC0tZXZlbnQtc2NoZWR1bGUtdHlw ZQ0KPiA+ID4gPj4gcGFyYWxsZWwNCj4gPiA+ID4+DQo+ID4gPiA+PiBTaWduZWQtb2ZmLWJ5OiBB bm9vYiBKb3NlcGggPGFub29iakBtYXJ2ZWxsLmNvbT4NCj4gPiA+ID4+IFNpZ25lZC1vZmYtYnk6 IEFua3VyIER3aXZlZGkgPGFkd2l2ZWRpQG1hcnZlbGwuY29tPg0KPiA+ID4gPj4gU2lnbmVkLW9m Zi1ieTogTHVrYXN6IEJhcnRvc2lrIDxsYmFydG9zaWtAbWFydmVsbC5jb20+DQo+ID4gPiA+PiAt LS0NCj4gPiA+ID4NCj4gPiA+ID4gLi4uDQo+ID4gPiA+DQo+ID4gPiA+PiArc3RhdGljIGlubGlu ZSBlbnVtIHBrdF90eXBlDQo+ID4gPiA+PiArcHJvY2Vzc19pcHNlY19nZXRfcGt0X3R5cGUoc3Ry dWN0IHJ0ZV9tYnVmICpwa3QsIHVpbnQ4X3QgKipubHApIHsNCj4gPiA+ID4+ICsJc3RydWN0IHJ0 ZV9ldGhlcl9oZHIgKmV0aDsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJZXRoID0gcnRlX3BrdG1i dWZfbXRvZChwa3QsIHN0cnVjdCBydGVfZXRoZXJfaGRyICopOw0KPiA+ID4gPj4gKwlpZiAoZXRo LT5ldGhlcl90eXBlID09DQo+IHJ0ZV9jcHVfdG9fYmVfMTYoUlRFX0VUSEVSX1RZUEVfSVBWNCkp IHsNCj4gPiA+ID4+ICsJCSpubHAgPSBSVEVfUFRSX0FERChldGgsIFJURV9FVEhFUl9IRFJfTEVO ICsNCj4gPiA+ID4+ICsJCQkJb2Zmc2V0b2Yoc3RydWN0IGlwLCBpcF9wKSk7DQo+ID4gPiA+PiAr CQlpZiAoKipubHAgPT0gSVBQUk9UT19FU1ApDQo+ID4gPiA+PiArCQkJcmV0dXJuIFBLVF9UWVBF X0lQU0VDX0lQVjQ7DQo+ID4gPiA+PiArCQllbHNlDQo+ID4gPiA+PiArCQkJcmV0dXJuIFBLVF9U WVBFX1BMQUlOX0lQVjQ7DQo+ID4gPiA+PiArCX0gZWxzZSBpZiAoZXRoLT5ldGhlcl90eXBlID09 DQo+ID4gPiA+PiArcnRlX2NwdV90b19iZV8xNihSVEVfRVRIRVJfVFlQRV9JUFY2KSkNCj4gPiA+ ID4+IHsNCj4gPiA+ID4+ICsJCSpubHAgPSBSVEVfUFRSX0FERChldGgsIFJURV9FVEhFUl9IRFJf TEVOICsNCj4gPiA+ID4+ICsJCQkJb2Zmc2V0b2Yoc3RydWN0IGlwNl9oZHIsIGlwNl9ueHQpKTsN Cj4gPiA+ID4+ICsJCWlmICgqKm5scCA9PSBJUFBST1RPX0VTUCkNCj4gPiA+ID4+ICsJCQlyZXR1 cm4gUEtUX1RZUEVfSVBTRUNfSVBWNjsNCj4gPiA+ID4+ICsJCWVsc2UNCj4gPiA+ID4+ICsJCQly ZXR1cm4gUEtUX1RZUEVfUExBSU5fSVBWNjsNCj4gPiA+ID4+ICsJfQ0KPiA+ID4gPj4gKw0KPiA+ ID4gPj4gKwkvKiBVbmtub3duL1Vuc3VwcG9ydGVkIHR5cGUgKi8NCj4gPiA+ID4+ICsJcmV0dXJu IFBLVF9UWVBFX0lOVkFMSUQ7DQo+ID4gPiA+PiArfQ0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gK3N0 YXRpYyBpbmxpbmUgdm9pZA0KPiA+ID4gPj4gK3VwZGF0ZV9tYWNfYWRkcnMoc3RydWN0IHJ0ZV9t YnVmICpwa3QsIHVpbnQxNl90IHBvcnRpZCkgew0KPiA+ID4gPj4gKwlzdHJ1Y3QgcnRlX2V0aGVy X2hkciAqZXRoaGRyOw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwlldGhoZHIgPSBydGVfcGt0bWJ1 Zl9tdG9kKHBrdCwgc3RydWN0IHJ0ZV9ldGhlcl9oZHIgKik7DQo+ID4gPiA+PiArCW1lbWNweSgm ZXRoaGRyLT5zX2FkZHIsICZldGhhZGRyX3RibFtwb3J0aWRdLnNyYywNCj4gPiA+ID4+IFJURV9F VEhFUl9BRERSX0xFTik7DQo+ID4gPiA+PiArCW1lbWNweSgmZXRoaGRyLT5kX2FkZHIsICZldGhh ZGRyX3RibFtwb3J0aWRdLmRzdCwNCj4gPiA+ID4+IFJURV9FVEhFUl9BRERSX0xFTik7DQo+ID4g PiA+PiArfQ0KPiA+ID4gPj4NCj4gPiA+ID4+ICBzdGF0aWMgaW5saW5lIHZvaWQNCj4gPiA+ID4+ ICBpcHNlY19ldmVudF9wcmVfZm9yd2FyZChzdHJ1Y3QgcnRlX21idWYgKm0sIHVuc2lnbmVkIGlu dA0KPiA+ID4gPj4gcG9ydF9pZCkgQEANCj4gPiA+ID4+IC02MSw2ICsxMDEsMjkwIEBAIHByZXBh cmVfb3V0X3Nlc3Npb25zX3RibChzdHJ1Y3Qgc2FfY3R4ICpzYV9vdXQsDQo+ID4gPiA+PiAgCX0N Cj4gPiA+ID4+ICB9DQo+ID4gPiA+Pg0KPiA+ID4gPj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ID4g PiA+PiArY2hlY2tfc3Aoc3RydWN0IHNwX2N0eCAqc3AsIGNvbnN0IHVpbnQ4X3QgKm5scCwgdWlu dDMyX3QgKnNhX2lkeCkgew0KPiA+ID4gPj4gKwl1aW50MzJfdCByZXM7DQo+ID4gPiA+PiArDQo+ ID4gPiA+PiArCWlmICh1bmxpa2VseShzcCA9PSBOVUxMKSkNCj4gPiA+ID4+ICsJCXJldHVybiAw Ow0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwlydGVfYWNsX2NsYXNzaWZ5KChzdHJ1Y3QgcnRlX2Fj bF9jdHggKilzcCwgJm5scCwgJnJlcywgMSwNCj4gPiA+ID4+ICsJCQlERUZBVUxUX01BWF9DQVRF R09SSUVTKTsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJaWYgKHVubGlrZWx5KHJlcyA9PSAwKSkg ew0KPiA+ID4gPj4gKwkJLyogTm8gbWF0Y2ggKi8NCj4gPiA+ID4+ICsJCXJldHVybiAwOw0KPiA+ ID4gPj4gKwl9DQo+ID4gPiA+PiArDQo+ID4gPiA+PiArCWlmIChyZXMgPT0gRElTQ0FSRCkNCj4g PiA+ID4+ICsJCXJldHVybiAwOw0KPiA+ID4gPj4gKwllbHNlIGlmIChyZXMgPT0gQllQQVNTKSB7 DQo+ID4gPiA+PiArCQkqc2FfaWR4ID0gLTE7DQo+ID4gPiA+PiArCQlyZXR1cm4gMTsNCj4gPiA+ ID4+ICsJfQ0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwkqc2FfaWR4ID0gcmVzIC0gMTsNCj4gPiA+ ID4+ICsJcmV0dXJuIDE7DQo+ID4gPiA+PiArfQ0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gK3N0YXRp YyBpbmxpbmUgdWludDE2X3QNCj4gPiA+ID4+ICtyb3V0ZTRfcGt0KHN0cnVjdCBydGVfbWJ1ZiAq cGt0LCBzdHJ1Y3QgcnRfY3R4ICpydF9jdHgpIHsNCj4gPiA+ID4+ICsJdWludDMyX3QgZHN0X2lw Ow0KPiA+ID4gPj4gKwl1aW50MTZfdCBvZmZzZXQ7DQo+ID4gPiA+PiArCXVpbnQzMl90IGhvcDsN Cj4gPiA+ID4+ICsJaW50IHJldDsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJb2Zmc2V0ID0gUlRF X0VUSEVSX0hEUl9MRU4gKyBvZmZzZXRvZihzdHJ1Y3QgaXAsIGlwX2RzdCk7DQo+ID4gPiA+PiAr CWRzdF9pcCA9ICpydGVfcGt0bWJ1Zl9tdG9kX29mZnNldChwa3QsIHVpbnQzMl90ICosIG9mZnNl dCk7DQo+ID4gPiA+PiArCWRzdF9pcCA9IHJ0ZV9iZV90b19jcHVfMzIoZHN0X2lwKTsNCj4gPiA+ ID4+ICsNCj4gPiA+ID4+ICsJcmV0ID0gcnRlX2xwbV9sb29rdXAoKHN0cnVjdCBydGVfbHBtICop cnRfY3R4LCBkc3RfaXAsDQo+ICZob3ApOw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwlpZiAocmV0 ID09IDApIHsNCj4gPiA+ID4+ICsJCS8qIFdlIGhhdmUgYSBoaXQgKi8NCj4gPiA+ID4+ICsJCXJl dHVybiBob3A7DQo+ID4gPiA+PiArCX0NCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJLyogZWxzZSAq Lw0KPiA+ID4gPj4gKwlyZXR1cm4gUlRFX01BWF9FVEhQT1JUUzsNCj4gPiA+ID4+ICt9DQo+ID4g PiA+PiArDQo+ID4gPiA+PiArLyogVE9ETzogVG8gYmUgdGVzdGVkICovDQo+ID4gPiA+PiArc3Rh dGljIGlubGluZSB1aW50MTZfdA0KPiA+ID4gPj4gK3JvdXRlNl9wa3Qoc3RydWN0IHJ0ZV9tYnVm ICpwa3QsIHN0cnVjdCBydF9jdHggKnJ0X2N0eCkgew0KPiA+ID4gPj4gKwl1aW50OF90IGRzdF9p cFsxNl07DQo+ID4gPiA+PiArCXVpbnQ4X3QgKmlwNl9kc3Q7DQo+ID4gPiA+PiArCXVpbnQxNl90 IG9mZnNldDsNCj4gPiA+ID4+ICsJdWludDMyX3QgaG9wOw0KPiA+ID4gPj4gKwlpbnQgcmV0Ow0K PiA+ID4gPj4gKw0KPiA+ID4gPj4gKwlvZmZzZXQgPSBSVEVfRVRIRVJfSERSX0xFTiArIG9mZnNl dG9mKHN0cnVjdCBpcDZfaGRyLA0KPiBpcDZfZHN0KTsNCj4gPiA+ID4+ICsJaXA2X2RzdCA9IHJ0 ZV9wa3RtYnVmX210b2Rfb2Zmc2V0KHBrdCwgdWludDhfdCAqLCBvZmZzZXQpOw0KPiA+ID4gPj4g KwltZW1jcHkoJmRzdF9pcFswXSwgaXA2X2RzdCwgMTYpOw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4g KwlyZXQgPSBydGVfbHBtNl9sb29rdXAoKHN0cnVjdCBydGVfbHBtNiAqKXJ0X2N0eCwgZHN0X2lw LA0KPiAmaG9wKTsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJaWYgKHJldCA9PSAwKSB7DQo+ID4g PiA+PiArCQkvKiBXZSBoYXZlIGEgaGl0ICovDQo+ID4gPiA+PiArCQlyZXR1cm4gaG9wOw0KPiA+ ID4gPj4gKwl9DQo+ID4gPiA+PiArDQo+ID4gPiA+PiArCS8qIGVsc2UgKi8NCj4gPiA+ID4+ICsJ cmV0dXJuIFJURV9NQVhfRVRIUE9SVFM7DQo+ID4gPiA+PiArfQ0KPiA+ID4gPj4gKw0KPiA+ID4g Pj4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QNCj4gPiA+ID4+ICtnZXRfcm91dGUoc3RydWN0IHJ0 ZV9tYnVmICpwa3QsIHN0cnVjdCByb3V0ZV90YWJsZSAqcnQsIGVudW0NCj4gPiA+ID4+ICtwa3Rf dHlwZSB0eXBlKSB7DQo+ID4gPiA+PiArCWlmICh0eXBlID09IFBLVF9UWVBFX1BMQUlOX0lQVjQg fHwgdHlwZSA9PQ0KPiBQS1RfVFlQRV9JUFNFQ19JUFY0KQ0KPiA+ID4gPj4gKwkJcmV0dXJuIHJv dXRlNF9wa3QocGt0LCBydC0+cnQ0X2N0eCk7DQo+ID4gPiA+PiArCWVsc2UgaWYgKHR5cGUgPT0g UEtUX1RZUEVfUExBSU5fSVBWNiB8fCB0eXBlID09DQo+IFBLVF9UWVBFX0lQU0VDX0lQVjYpDQo+ ID4gPiA+PiArCQlyZXR1cm4gcm91dGU2X3BrdChwa3QsIHJ0LT5ydDZfY3R4KTsNCj4gPiA+ID4+ ICsNCj4gPiA+ID4+ICsJcmV0dXJuIFJURV9NQVhfRVRIUE9SVFM7DQo+ID4gPiA+PiArfQ0KPiA+ ID4gPg0KPiA+ID4gPiBJcyBpdCBub3QgcG9zc2libGUgdG8gdXNlIHRoZSBleGlzdGluZyBmdW5j dGlvbnMgZm9yIGZpbmRpbmcNCj4gPiA+ID4gcm91dGVzLCBjaGVja2luZw0KPiA+ID4gcGFja2V0 IHR5cGVzIGFuZCBjaGVja2luZyBzZWN1cml0eSBwb2xpY2llcy4NCj4gPiA+ID4gSXQgd2lsbCBi ZSB2ZXJ5IGRpZmZpY3VsdCB0byBtYW5hZ2UgdHdvIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3INCj4g PiA+ID4gc2FtZSB3b3JrLiBJIGNhbiBzZWUgdGhhdCB0aGUgcGt0LT5kYXRhX29mZnMgQXJlIG5v dCByZXF1aXJlZCB0bw0KPiA+ID4gPiBiZSB1cGRhdGVkIGluIHRoZSBpbmxpbmUgY2FzZSwgYnV0 IGNhbiB3ZSBzcGxpdCB0aGUgZXhpc3RpbmcNCj4gPiA+ID4gZnVuY3Rpb25zIGluIHR3byBzbyB0 aGF0IHRoZXkgY2FuDQo+ID4gPiBiZSBDYWxsZWQgaW4gdGhlIGFwcHJvcHJpYXRlIGNhc2VzLg0K PiA+ID4gPg0KPiA+ID4gPiBBcyB5b3UgaGF2ZSBzYWlkIGluIHRoZSBjb3ZlciBub3RlIGFzIHdl bGwgdG8gYWRkIGxvb2thc2lkZQ0KPiA+ID4gPiBwcm90b2NvbCBzdXBwb3J0LiBJIGFsc28gdHJp ZWQgYWRkaW5nIGl0LCBhbmQgaXQgd2lsbCBnZXQgdmVyeQ0KPiA+ID4gPiBEaWZmaWN1bHQgdG8g bWFuYWdlIHNlcGFyYXRlDQo+ID4gPiBmdW5jdGlvbnMgZm9yIHNlcGFyYXRlIGNvZGUgcGF0aHMu DQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gW0x1a2Fzel0gVGhpcyB3YXMgYWxzbyBLb25zdGFudGlu J3MgY29tbWVudCBkdXJpbmcgcmV2aWV3IG9mIG9uZSBvZg0KPiA+ID4gcHJldmlvdXMgcmV2aXNp b25zLg0KPiA+ID4gVGhlIHByZXBhcmVfb25lX3BhY2tldCgpIGFuZCBwcmVwYXJlX3R4X3BrdCgp IGRvIG11Y2ggbW9yZSB0aGFuIHdlDQo+ID4gPiBuZWVkIGFuZCBmb3IgcGVyZm9ybWFuY2UgcmVh c29ucyB3ZSBjcmFmdGVkIG5ldyBmdW5jdGlvbnMuIEZvcg0KPiA+ID4gZXhhbXBsZSwgcHJvY2Vz c19pcHNlY19nZXRfcGt0X3R5cGUgZnVuY3Rpb24gcmV0dXJucyBubHAgYW5kIHdoZXRoZXINCj4g PiA+IHBhY2tldCB0eXBlIGlzIHBsYWluIG9yIElQc2VjLiBUaGF0J3MgYWxsLiBQcmVwYXJlX29u ZV9wYWNrZXQoKQ0KPiA+ID4gcHJvY2VzcyBwYWNrZXRzIGluIGNodW5rcyBhbmQgZG9lcyBtdWNo IG1vcmUgLSBpdCBhZGp1c3RzIG1idWYgYW5kDQo+ID4gPiBwYWNrZXQgbGVuZ3RoIHRoZW4gaXQg ZGVtdWx0aXBsZXggcGFja2V0cyBpbnRvIHBsYWluIGFuZCBJUHNlYyBmbG93cw0KPiA+ID4gYW5k IGZpbmFsbHkgZG9lcyBpbmxpbmUgY2hlY2tzLiBUaGlzIGlzIHNpbWlsYXIgZm9yDQo+ID4gPiB1 cGRhdGVfbWFjX2FkZHJzKCkgdnMgcHJlcGFyZV90eF9wa3QoKSBhbmQgY2hlY2tfc3AoKSB2cw0K PiA+ID4gaW5ib3VuZF9zcF9zYSgpIHRoYXQNCj4gPiA+IHByZXBhcmVfdHhfcGt0KCkgYW5kIGlu Ym91bmRfc3Bfc2EoKSBkbyBtb3JlIHRoYXQgd2UgbmVlZCBpbiBldmVudA0KPiBtb2RlLg0KPiA+ ID4NCj4gPiA+IEkgdW5kZXJzdGFuZCB5b3VyIGNvbmNlcm4gZnJvbSB0aGUgcGVyc3BlY3RpdmUg b2YgY29kZSBtYWludGVuYW5jZQ0KPiA+ID4gYnV0IG9uIHRoZSBvdGhlciBoYW5kIHdlIGFyZSBj b25jZXJuZWQgd2l0aCBwZXJmb3JtYW5jZS4NCj4gPiA+IFRoZSBjdXJyZW50IGNvZGUgaXMgbm90 IG9wdGltaXplZCB0byBzdXBwb3J0IG11bHRpcGxlIG1vZGUNCj4gPiA+IHByb2Nlc3NpbmcgaW50 cm9kdWNlZCB3aXRoIHJ0ZV9zZWN1cml0eS4gV2UgY2FuIHdvcmsgb24gYSBjb21tb24NCj4gPiA+ IHJvdXRpbmVzIG9uY2Ugd2UgaGF2ZSBvdGhlciBtb2RlcyBhbHNvIGFkZGVkLCBzbyB0aGF0IHdl IGNhbiBjb21lIHVwDQo+ID4gPiB3aXRoIGEgYmV0dGVyIHNvbHV0aW9uIHRoYW4gd2hhdCB3ZSBo YXZlIHRvZGF5Lg0KPiA+ID4NCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICtzdGF0aWMgaW5saW5lIGlu dA0KPiA+ID4gPj4gK3Byb2Nlc3NfaXBzZWNfZXZfaW5ib3VuZChzdHJ1Y3QgaXBzZWNfY3R4ICpj dHgsIHN0cnVjdCByb3V0ZV90YWJsZQ0KPiAqcnQsDQo+ID4gPiA+PiArCQlzdHJ1Y3QgcnRlX2V2 ZW50ICpldikNCj4gPiA+ID4+ICt7DQo+ID4gPiA+PiArCXN0cnVjdCBpcHNlY19zYSAqc2EgPSBO VUxMOw0KPiA+ID4gPj4gKwlzdHJ1Y3QgcnRlX21idWYgKnBrdDsNCj4gPiA+ID4+ICsJdWludDE2 X3QgcG9ydF9pZCA9IDA7DQo+ID4gPiA+PiArCWVudW0gcGt0X3R5cGUgdHlwZTsNCj4gPiA+ID4+ ICsJdWludDMyX3Qgc2FfaWR4Ow0KPiA+ID4gPj4gKwl1aW50OF90ICpubHA7DQo+ID4gPiA+PiAr DQo+ID4gPiA+PiArCS8qIEdldCBwa3QgZnJvbSBldmVudCAqLw0KPiA+ID4gPj4gKwlwa3QgPSBl di0+bWJ1ZjsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJLyogQ2hlY2sgdGhlIHBhY2tldCB0eXBl ICovDQo+ID4gPiA+PiArCXR5cGUgPSBwcm9jZXNzX2lwc2VjX2dldF9wa3RfdHlwZShwa3QsICZu bHApOw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwlzd2l0Y2ggKHR5cGUpIHsNCj4gPiA+ID4+ICsJ Y2FzZSBQS1RfVFlQRV9QTEFJTl9JUFY0Og0KPiA+ID4gPj4gKwkJaWYgKHBrdC0+b2xfZmxhZ3Mg JiBQS1RfUlhfU0VDX09GRkxPQUQpIHsNCj4gPiA+ID4+ICsJCQlpZiAodW5saWtlbHkocGt0LT5v bF9mbGFncyAmDQo+ID4gPiA+PiArCQkJCSAgICAgUEtUX1JYX1NFQ19PRkZMT0FEX0ZBSUxFRCkp IHsNCj4gPiA+ID4+ICsJCQkJUlRFX0xPRyhFUlIsIElQU0VDLA0KPiA+ID4gPj4gKwkJCQkJIklu Ym91bmQgc2VjdXJpdHkgb2ZmbG9hZA0KPiBmYWlsZWRcbiIpOw0KPiA+ID4gPj4gKwkJCQlnb3Rv IGRyb3BfcGt0X2FuZF9leGl0Ow0KPiA+ID4gPj4gKwkJCX0NCj4gPiA+ID4+ICsJCQlzYSA9IHBr dC0+dXNlcmRhdGE7DQo+ID4gPiA+PiArCQl9DQo+ID4gPiA+PiArDQo+ID4gPiA+PiArCQkvKiBD aGVjayBpZiB3ZSBoYXZlIGEgbWF0Y2ggKi8NCj4gPiA+ID4+ICsJCWlmIChjaGVja19zcChjdHgt PnNwNF9jdHgsIG5scCwgJnNhX2lkeCkgPT0gMCkgew0KPiA+ID4gPj4gKwkJCS8qIE5vIHZhbGlk IG1hdGNoICovDQo+ID4gPiA+PiArCQkJZ290byBkcm9wX3BrdF9hbmRfZXhpdDsNCj4gPiA+ID4+ ICsJCX0NCj4gPiA+ID4+ICsJCWJyZWFrOw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwljYXNlIFBL VF9UWVBFX1BMQUlOX0lQVjY6DQo+ID4gPiA+PiArCQlpZiAocGt0LT5vbF9mbGFncyAmIFBLVF9S WF9TRUNfT0ZGTE9BRCkgew0KPiA+ID4gPj4gKwkJCWlmICh1bmxpa2VseShwa3QtPm9sX2ZsYWdz ICYNCj4gPiA+ID4+ICsJCQkJICAgICBQS1RfUlhfU0VDX09GRkxPQURfRkFJTEVEKSkgew0KPiA+ ID4gPj4gKwkJCQlSVEVfTE9HKEVSUiwgSVBTRUMsDQo+ID4gPiA+PiArCQkJCQkiSW5ib3VuZCBz ZWN1cml0eSBvZmZsb2FkDQo+IGZhaWxlZFxuIik7DQo+ID4gPiA+PiArCQkJCWdvdG8gZHJvcF9w a3RfYW5kX2V4aXQ7DQo+ID4gPiA+PiArCQkJfQ0KPiA+ID4gPj4gKwkJCXNhID0gcGt0LT51c2Vy ZGF0YTsNCj4gPiA+ID4+ICsJCX0NCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJCS8qIENoZWNrIGlm IHdlIGhhdmUgYSBtYXRjaCAqLw0KPiA+ID4gPj4gKwkJaWYgKGNoZWNrX3NwKGN0eC0+c3A2X2N0 eCwgbmxwLCAmc2FfaWR4KSA9PSAwKSB7DQo+ID4gPiA+PiArCQkJLyogTm8gdmFsaWQgbWF0Y2gg Ki8NCj4gPiA+ID4+ICsJCQlnb3RvIGRyb3BfcGt0X2FuZF9leGl0Ow0KPiA+ID4gPj4gKwkJfQ0K PiA+ID4gPj4gKwkJYnJlYWs7DQo+ID4gPiA+PiArDQo+ID4gPiA+PiArCWRlZmF1bHQ6DQo+ID4g PiA+PiArCQlSVEVfTE9HKEVSUiwgSVBTRUMsICJVbnN1cHBvcnRlZCBwYWNrZXQgdHlwZSA9DQo+ ICVkXG4iLCB0eXBlKTsNCj4gPiA+ID4+ICsJCWdvdG8gZHJvcF9wa3RfYW5kX2V4aXQ7DQo+ID4g PiA+PiArCX0NCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBo YXMgdG8gYmUgYnlwYXNzZWQgKi8NCj4gPiA+ID4+ICsJaWYgKHNhX2lkeCA9PSBCWVBBU1MpDQo+ ID4gPiA+PiArCQlnb3RvIHJvdXRlX2FuZF9zZW5kX3BrdDsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ ICsJLyogVmFsaWRhdGUgc2FfaWR4ICovDQo+ID4gPiA+PiArCWlmIChzYV9pZHggPj0gY3R4LT5z YV9jdHgtPm5iX3NhKQ0KPiA+ID4gPj4gKwkJZ290byBkcm9wX3BrdF9hbmRfZXhpdDsNCj4gPiA+ ID4+ICsNCj4gPiA+ID4+ICsJLyogRWxzZSB0aGUgcGFja2V0IGhhcyB0byBiZSBwcm90ZWN0ZWQg d2l0aCBTQSAqLw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwkvKiBJZiB0aGUgcGFja2V0IHdhcyBJ UHNlYyBwcm9jZXNzZWQsIHRoZW4gU0EgcG9pbnRlciBzaG91bGQNCj4gYmUgc2V0ICovDQo+ID4g PiA+PiArCWlmIChzYSA9PSBOVUxMKQ0KPiA+ID4gPj4gKwkJZ290byBkcm9wX3BrdF9hbmRfZXhp dDsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJLyogU1BJIG9uIHRoZSBwYWNrZXQgc2hvdWxkIG1h dGNoIHdpdGggdGhlIG9uZSBpbiBTQSAqLw0KPiA+ID4gPj4gKwlpZiAodW5saWtlbHkoc2EtPnNw aSAhPSBjdHgtPnNhX2N0eC0+c2Fbc2FfaWR4XS5zcGkpKQ0KPiA+ID4gPj4gKwkJZ290byBkcm9w X3BrdF9hbmRfZXhpdDsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICtyb3V0ZV9hbmRfc2VuZF9wa3Q6 DQo+ID4gPiA+PiArCXBvcnRfaWQgPSBnZXRfcm91dGUocGt0LCBydCwgdHlwZSk7DQo+ID4gPiA+ PiArCWlmICh1bmxpa2VseShwb3J0X2lkID09IFJURV9NQVhfRVRIUE9SVFMpKSB7DQo+ID4gPiA+ PiArCQkvKiBubyBtYXRjaCAqLw0KPiA+ID4gPj4gKwkJZ290byBkcm9wX3BrdF9hbmRfZXhpdDsN Cj4gPiA+ID4+ICsJfQ0KPiA+ID4gPj4gKwkvKiBlbHNlLCB3ZSBoYXZlIGEgbWF0Y2hpbmcgcm91 dGUgKi8NCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJLyogVXBkYXRlIG1hYyBhZGRyZXNzZXMgKi8N Cj4gPiA+ID4+ICsJdXBkYXRlX21hY19hZGRycyhwa3QsIHBvcnRfaWQpOw0KPiA+ID4gPj4gKw0K PiA+ID4gPj4gKwkvKiBVcGRhdGUgdGhlIGV2ZW50IHdpdGggdGhlIGRlc3QgcG9ydCAqLw0KPiA+ ID4gPj4gKwlpcHNlY19ldmVudF9wcmVfZm9yd2FyZChwa3QsIHBvcnRfaWQpOw0KPiA+ID4gPj4g KwlyZXR1cm4gMTsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICtkcm9wX3BrdF9hbmRfZXhpdDoNCj4g PiA+ID4+ICsJUlRFX0xPRyhFUlIsIElQU0VDLCAiSW5ib3VuZCBwYWNrZXQgZHJvcHBlZFxuIik7 DQo+ID4gPiA+PiArCXJ0ZV9wa3RtYnVmX2ZyZWUocGt0KTsNCj4gPiA+ID4+ICsJZXYtPm1idWYg PSBOVUxMOw0KPiA+ID4gPj4gKwlyZXR1cm4gMDsNCj4gPiA+ID4+ICt9DQo+ID4gPiA+PiArDQo+ ID4gPiA+PiArc3RhdGljIGlubGluZSBpbnQNCj4gPiA+ID4+ICtwcm9jZXNzX2lwc2VjX2V2X291 dGJvdW5kKHN0cnVjdCBpcHNlY19jdHggKmN0eCwgc3RydWN0DQo+IHJvdXRlX3RhYmxlICpydCwN Cj4gPiA+ID4+ICsJCXN0cnVjdCBydGVfZXZlbnQgKmV2KQ0KPiA+ID4gPj4gK3sNCj4gPiA+ID4+ ICsJc3RydWN0IHJ0ZV9pcHNlY19zZXNzaW9uICpzZXNzOw0KPiA+ID4gPj4gKwlzdHJ1Y3Qgc2Ff Y3R4ICpzYV9jdHg7DQo+ID4gPiA+PiArCXN0cnVjdCBydGVfbWJ1ZiAqcGt0Ow0KPiA+ID4gPj4g Kwl1aW50MTZfdCBwb3J0X2lkID0gMDsNCj4gPiA+ID4+ICsJc3RydWN0IGlwc2VjX3NhICpzYTsN Cj4gPiA+ID4+ICsJZW51bSBwa3RfdHlwZSB0eXBlOw0KPiA+ID4gPj4gKwl1aW50MzJfdCBzYV9p ZHg7DQo+ID4gPiA+PiArCXVpbnQ4X3QgKm5scDsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJLyog R2V0IHBrdCBmcm9tIGV2ZW50ICovDQo+ID4gPiA+PiArCXBrdCA9IGV2LT5tYnVmOw0KPiA+ID4g Pj4gKw0KPiA+ID4gPj4gKwkvKiBDaGVjayB0aGUgcGFja2V0IHR5cGUgKi8NCj4gPiA+ID4+ICsJ dHlwZSA9IHByb2Nlc3NfaXBzZWNfZ2V0X3BrdF90eXBlKHBrdCwgJm5scCk7DQo+ID4gPiA+PiAr DQo+ID4gPiA+PiArCXN3aXRjaCAodHlwZSkgew0KPiA+ID4gPj4gKwljYXNlIFBLVF9UWVBFX1BM QUlOX0lQVjQ6DQo+ID4gPiA+PiArCQkvKiBDaGVjayBpZiB3ZSBoYXZlIGEgbWF0Y2ggKi8NCj4g PiA+ID4+ICsJCWlmIChjaGVja19zcChjdHgtPnNwNF9jdHgsIG5scCwgJnNhX2lkeCkgPT0gMCkg ew0KPiA+ID4gPj4gKwkJCS8qIE5vIHZhbGlkIG1hdGNoICovDQo+ID4gPiA+PiArCQkJZ290byBk cm9wX3BrdF9hbmRfZXhpdDsNCj4gPiA+ID4+ICsJCX0NCj4gPiA+ID4+ICsJCWJyZWFrOw0KPiA+ ID4gPj4gKwljYXNlIFBLVF9UWVBFX1BMQUlOX0lQVjY6DQo+ID4gPiA+PiArCQkvKiBDaGVjayBp ZiB3ZSBoYXZlIGEgbWF0Y2ggKi8NCj4gPiA+ID4+ICsJCWlmIChjaGVja19zcChjdHgtPnNwNl9j dHgsIG5scCwgJnNhX2lkeCkgPT0gMCkgew0KPiA+ID4gPj4gKwkJCS8qIE5vIHZhbGlkIG1hdGNo ICovDQo+ID4gPiA+PiArCQkJZ290byBkcm9wX3BrdF9hbmRfZXhpdDsNCj4gPiA+ID4+ICsJCX0N Cj4gPiA+ID4+ICsJCWJyZWFrOw0KPiA+ID4gPj4gKwlkZWZhdWx0Og0KPiA+ID4gPj4gKwkJLyoN Cj4gPiA+ID4+ICsJCSAqIE9ubHkgcGxhaW4gSVB2NCAmIElQdjYgcGFja2V0cyBhcmUgYWxsb3dl ZA0KPiA+ID4gPj4gKwkJICogb24gcHJvdGVjdGVkIHBvcnQuIERyb3AgdGhlIHJlc3QuDQo+ID4g PiA+PiArCQkgKi8NCj4gPiA+ID4+ICsJCVJURV9MT0coRVJSLCBJUFNFQywgIlVuc3VwcG9ydGVk IHBhY2tldCB0eXBlID0NCj4gJWRcbiIsIHR5cGUpOw0KPiA+ID4gPj4gKwkJZ290byBkcm9wX3Br dF9hbmRfZXhpdDsNCj4gPiA+ID4+ICsJfQ0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwkvKiBDaGVj ayBpZiB0aGUgcGFja2V0IGhhcyB0byBiZSBieXBhc3NlZCAqLw0KPiA+ID4gPj4gKwlpZiAoc2Ff aWR4ID09IEJZUEFTUykgew0KPiA+ID4gPj4gKwkJcG9ydF9pZCA9IGdldF9yb3V0ZShwa3QsIHJ0 LCB0eXBlKTsNCj4gPiA+ID4+ICsJCWlmICh1bmxpa2VseShwb3J0X2lkID09IFJURV9NQVhfRVRI UE9SVFMpKSB7DQo+ID4gPiA+PiArCQkJLyogbm8gbWF0Y2ggKi8NCj4gPiA+ID4+ICsJCQlnb3Rv IGRyb3BfcGt0X2FuZF9leGl0Ow0KPiA+ID4gPj4gKwkJfQ0KPiA+ID4gPj4gKwkJLyogZWxzZSwg d2UgaGF2ZSBhIG1hdGNoaW5nIHJvdXRlICovDQo+ID4gPiA+PiArCQlnb3RvIHNlbmRfcGt0Ow0K PiA+ID4gPj4gKwl9DQo+ID4gPiA+PiArDQo+ID4gPiA+PiArCS8qIFZhbGlkYXRlIHNhX2lkeCAq Lw0KPiA+ID4gPj4gKwlpZiAoc2FfaWR4ID49IGN0eC0+c2FfY3R4LT5uYl9zYSkNCj4gPiA+ID4+ ICsJCWdvdG8gZHJvcF9wa3RfYW5kX2V4aXQ7DQo+ID4gPiA+PiArDQo+ID4gPiA+PiArCS8qIEVs c2UgdGhlIHBhY2tldCBoYXMgdG8gYmUgcHJvdGVjdGVkICovDQo+ID4gPiA+PiArDQo+ID4gPiA+ PiArCS8qIEdldCBTQSBjdHgqLw0KPiA+ID4gPj4gKwlzYV9jdHggPSBjdHgtPnNhX2N0eDsNCj4g PiA+ID4+ICsNCj4gPiA+ID4+ICsJLyogR2V0IFNBICovDQo+ID4gPiA+PiArCXNhID0gJihzYV9j dHgtPnNhW3NhX2lkeF0pOw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwkvKiBHZXQgSVBzZWMgc2Vz c2lvbiAqLw0KPiA+ID4gPj4gKwlzZXNzID0gaXBzZWNfZ2V0X3ByaW1hcnlfc2Vzc2lvbihzYSk7 DQo+ID4gPiA+PiArDQo+ID4gPiA+PiArCS8qIEFsbG93IG9ubHkgaW5saW5lIHByb3RvY29sIGZv ciBub3cgKi8NCj4gPiA+ID4+ICsJaWYgKHNlc3MtPnR5cGUgIT0NCj4gUlRFX1NFQ1VSSVRZX0FD VElPTl9UWVBFX0lOTElORV9QUk9UT0NPTCkgew0KPiA+ID4gPj4gKwkJUlRFX0xPRyhFUlIsIElQ U0VDLCAiU0EgdHlwZSBub3Qgc3VwcG9ydGVkXG4iKTsNCj4gPiA+ID4+ICsJCWdvdG8gZHJvcF9w a3RfYW5kX2V4aXQ7DQo+ID4gPiA+PiArCX0NCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJaWYgKHNl c3MtPnNlY3VyaXR5Lm9sX2ZsYWdzICYNCj4gUlRFX1NFQ1VSSVRZX1RYX09MT0FEX05FRURfTURB VEEpDQo+ID4gPiA+PiArCQlwa3QtPnVzZXJkYXRhID0gc2Vzcy0+c2VjdXJpdHkuc2VzOw0KPiA+ ID4gPj4gKw0KPiA+ID4gPj4gKwkvKiBNYXJrIHRoZSBwYWNrZXQgZm9yIFR4IHNlY3VyaXR5IG9m ZmxvYWQgKi8NCj4gPiA+ID4+ICsJcGt0LT5vbF9mbGFncyB8PSBQS1RfVFhfU0VDX09GRkxPQUQ7 DQo+ID4gPiA+PiArDQo+ID4gPiA+PiArCS8qIEdldCB0aGUgcG9ydCB0byB3aGljaCB0aGlzIHBr dCBuZWVkIHRvIGJlIHN1Ym1pdHRlZCAqLw0KPiA+ID4gPj4gKwlwb3J0X2lkID0gc2EtPnBvcnRp ZDsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICtzZW5kX3BrdDoNCj4gPiA+ID4+ICsJLyogVXBkYXRl IG1hYyBhZGRyZXNzZXMgKi8NCj4gPiA+ID4+ICsJdXBkYXRlX21hY19hZGRycyhwa3QsIHBvcnRf aWQpOw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwkvKiBVcGRhdGUgdGhlIGV2ZW50IHdpdGggdGhl IGRlc3QgcG9ydCAqLw0KPiA+ID4gPj4gKwlpcHNlY19ldmVudF9wcmVfZm9yd2FyZChwa3QsIHBv cnRfaWQpOw0KPiA+ID4gPg0KPiA+ID4gPiBIb3cgaXMgSVAgY2hlY2tzdW0gZ2V0dGluZyB1cGRh dGVkIGZvciB0aGUgcHJvY2Vzc2VkIHBhY2tldC4NCj4gPiA+ID4gSWYgdGhlIGhhcmR3YXJlIGlz IG5vdCB1cGRhdGluZyBpdCwgc2hvdWxkIHdlIGFkZCBhIGZhbGxiYWNrDQo+ID4gPiA+IG1lY2hh bmlzbSBmb3IgU1cgYmFzZWQgQ2hlY2tzdW0gdXBkYXRlLg0KPiA+ID4gPg0KPiA+ID4NCj4gPiA+ IFtMdWthc3pdIEluIGNhc2Ugb2Ygb3V0Ym91bmQgaW5saW5lIHByb3RvY29sIGNoZWNrc3VtIGhh cyB0byBiZQ0KPiA+ID4gY2FsY3VsYXRlZCBieSBIVyBhcyBmaW5hbCBwYWNrZXQgaXMgZm9ybWVk IGJ5IGNyeXB0byBkZXZpY2UuIFRoZXJlDQo+ID4gPiBpcyBubyBuZWVkIHRvIGNhbGN1bGF0ZSBp dCBpbiBTVy4NCj4gPiA+DQo+ID4gPiA+PiArCXJldHVybiAxOw0KPiA+ID4gPg0KPiA+ID4gPiBJ dCB3aWxsIGJlIGJldHRlciB0byB1c2Ugc29tZSBNQUNST1Mgd2hpbGUgcmV0dXJuaW5nIExpa2UN Cj4gPiA+ID4gI2RlZmluZSBQS1RfRk9SV0FSRCAgIDENCj4gPiA+ID4gI2RlZmluZSBQS1RfRFJP UFBFRCAgICAgMA0KPiA+ID4gPiAjZGVmaW5lIFBLVF9QT1NURUQgICAgICAgMiAgLyptYXkgYmUg Zm9yIGxvb2thc2lkZSBjYXNlcyAqLw0KPiA+ID4gPg0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gK2Ry b3BfcGt0X2FuZF9leGl0Og0KPiA+ID4gPj4gKwlSVEVfTE9HKEVSUiwgSVBTRUMsICJPdXRib3Vu ZCBwYWNrZXQgZHJvcHBlZFxuIik7DQo+ID4gPiA+PiArCXJ0ZV9wa3RtYnVmX2ZyZWUocGt0KTsN Cj4gPiA+ID4+ICsJZXYtPm1idWYgPSBOVUxMOw0KPiA+ID4gPj4gKwlyZXR1cm4gMDsNCj4gPiA+ ID4+ICt9DQo+ID4gPiA+PiArDQo+ID4gPiA+PiAgLyoNCj4gPiA+ID4+ICAgKiBFdmVudCBtb2Rl IGV4cG9zZXMgdmFyaW91cyBvcGVyYXRpbmcgbW9kZXMgZGVwZW5kaW5nIG9uIHRoZQ0KPiA+ID4g Pj4gICAqIGNhcGFiaWxpdGllcyBvZiB0aGUgZXZlbnQgZGV2aWNlIGFuZCB0aGUgb3BlcmF0aW5n IG1vZGUgQEANCj4gPiA+ID4+IC02OCw3DQo+ID4gPiA+PiArMzkyLDcgQEAgcHJlcGFyZV9vdXRf c2Vzc2lvbnNfdGJsKHN0cnVjdCBzYV9jdHggKnNhX291dCwNCj4gPiA+ID4+ICAgKi8NCj4gPiA+ ID4+DQo+ID4gPiA+PiAgLyogV29ya2VycyByZWdpc3RlcmVkICovDQo+ID4gPiA+PiAtI2RlZmlu ZSBJUFNFQ19FVkVOVE1PREVfV09SS0VSUwkJMQ0KPiA+ID4gPj4gKyNkZWZpbmUgSVBTRUNfRVZF TlRNT0RFX1dPUktFUlMJCTINCj4gPiA+ID4+DQo+ID4gPiA+PiAgLyoNCj4gPiA+ID4+ICAgKiBF dmVudCBtb2RlIHdvcmtlcg0KPiA+ID4gPj4gQEAgLTE0Niw3ICs0NzAsNyBAQA0KPiBpcHNlY193 cmtyX25vbl9idXJzdF9pbnRfcG9ydF9kcnZfbW9kZShzdHJ1Y3QNCj4gPiA+ID4+IGVoX2V2ZW50 X2xpbmtfaW5mbyAqbGlua3MsDQo+ID4gPiA+PiAgCQkJfQ0KPiA+ID4gPj4NCj4gPiA+ID4+ICAJ CQkvKiBTYXZlIHNlY3VyaXR5IHNlc3Npb24gKi8NCj4gPiA+ID4+IC0JCQlwa3QtPnVkYXRhNjQg PSAodWludDY0X3QpIHNlc3NfdGJsW3BvcnRfaWRdOw0KPiA+ID4gPj4gKwkJCXBrdC0+dXNlcmRh dGEgPSBzZXNzX3RibFtwb3J0X2lkXTsNCj4gPiA+ID4+DQo+ID4gPiA+PiAgCQkJLyogTWFyayB0 aGUgcGFja2V0IGZvciBUeCBzZWN1cml0eSBvZmZsb2FkICovDQo+ID4gPiA+PiAgCQkJcGt0LT5v bF9mbGFncyB8PSBQS1RfVFhfU0VDX09GRkxPQUQ7IEBAIC0xNjUsNg0KPiA+ID4gKzQ4OSw5NCBA QA0KPiA+ID4gPj4gaXBzZWNfd3Jrcl9ub25fYnVyc3RfaW50X3BvcnRfZHJ2X21vZGUoc3RydWN0 DQo+ID4gPiA+PiBlaF9ldmVudF9saW5rX2luZm8gKmxpbmtzLA0KPiA+ID4gPj4gIAl9DQo+ID4g PiA+PiAgfQ0KPiA+ID4gPj4NCj4gPiA+ID4+ICsvKg0KPiA+ID4gPj4gKyAqIEV2ZW50IG1vZGUg d29ya2VyDQo+ID4gPiA+PiArICogT3BlcmF0aW5nIHBhcmFtZXRlcnMgOiBub24tYnVyc3QgLSBU eCBpbnRlcm5hbCBwb3J0IC0gYXBwDQo+ID4gPiA+PiArbW9kZSAqLyBzdGF0aWMgdm9pZA0KPiA+ ID4gPj4gK2lwc2VjX3dya3Jfbm9uX2J1cnN0X2ludF9wb3J0X2FwcF9tb2RlKHN0cnVjdA0KPiA+ ID4gPj4gK2VoX2V2ZW50X2xpbmtfaW5mbyAqbGlua3MsDQo+ID4gPiA+PiArCQl1aW50OF90IG5i X2xpbmtzKQ0KPiA+ID4gPj4gK3sNCj4gPiA+ID4+ICsJc3RydWN0IGxjb3JlX2NvbmZfZXZfdHhf aW50X3BvcnRfd3JrciBsY29uZjsNCj4gPiA+ID4+ICsJdW5zaWduZWQgaW50IG5iX3J4ID0gMDsN Cj4gPiA+ID4+ICsJc3RydWN0IHJ0ZV9ldmVudCBldjsNCj4gPiA+ID4+ICsJdWludDMyX3QgbGNv cmVfaWQ7DQo+ID4gPiA+PiArCWludDMyX3Qgc29ja2V0X2lkOw0KPiA+ID4gPj4gKwlpbnQgcmV0 Ow0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwkvKiBDaGVjayBpZiB3ZSBoYXZlIGxpbmtzIHJlZ2lz dGVyZWQgZm9yIHRoaXMgbGNvcmUgKi8NCj4gPiA+ID4+ICsJaWYgKG5iX2xpbmtzID09IDApIHsN Cj4gPiA+ID4+ICsJCS8qIE5vIGxpbmtzIHJlZ2lzdGVyZWQgLSBleGl0ICovDQo+ID4gPiA+PiAr CQlyZXR1cm47DQo+ID4gPiA+PiArCX0NCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJLyogV2UgaGF2 ZSB2YWxpZCBsaW5rcyAqLw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwkvKiBHZXQgY29yZSBJRCAq Lw0KPiA+ID4gPj4gKwlsY29yZV9pZCA9IHJ0ZV9sY29yZV9pZCgpOw0KPiA+ID4gPj4gKw0KPiA+ ID4gPj4gKwkvKiBHZXQgc29ja2V0IElEICovDQo+ID4gPiA+PiArCXNvY2tldF9pZCA9IHJ0ZV9s Y29yZV90b19zb2NrZXRfaWQobGNvcmVfaWQpOw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKwkvKiBT YXZlIHJvdXRpbmcgdGFibGUgKi8NCj4gPiA+ID4+ICsJbGNvbmYucnQucnQ0X2N0eCA9IHNvY2tl dF9jdHhbc29ja2V0X2lkXS5ydF9pcDQ7DQo+ID4gPiA+PiArCWxjb25mLnJ0LnJ0Nl9jdHggPSBz b2NrZXRfY3R4W3NvY2tldF9pZF0ucnRfaXA2Ow0KPiA+ID4gPj4gKwlsY29uZi5pbmJvdW5kLnNw NF9jdHggPSBzb2NrZXRfY3R4W3NvY2tldF9pZF0uc3BfaXA0X2luOw0KPiA+ID4gPj4gKwlsY29u Zi5pbmJvdW5kLnNwNl9jdHggPSBzb2NrZXRfY3R4W3NvY2tldF9pZF0uc3BfaXA2X2luOw0KPiA+ ID4gPj4gKwlsY29uZi5pbmJvdW5kLnNhX2N0eCA9IHNvY2tldF9jdHhbc29ja2V0X2lkXS5zYV9p bjsNCj4gPiA+ID4+ICsJbGNvbmYuaW5ib3VuZC5zZXNzaW9uX3Bvb2wgPQ0KPiA+ID4gPj4gK3Nv Y2tldF9jdHhbc29ja2V0X2lkXS5zZXNzaW9uX3Bvb2w7DQo+ID4gPiA+DQo+ID4gPiA+IFNlc3Np b25fcHJpdl9wb29sIHNob3VsZCBhbHNvIGJlIGFkZGVkIGZvciBib3RoIGluYm91bmQgYW5kDQo+ ID4gPiA+IG91dGJvdW5kDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gW0x1a2Fzel0gSSB3aWxsIGFk ZCBpdCBpbiBWNS4NCj4gPg0KPiA+IFtBbm9vYl0gQWN0dWFsbHksIHdoeSBkbyBuZWVkIGJvdGgg c2Vzc2lvbl9wb29sIGFuZCBwcml2YXRlX3Bvb2w/IEkNCj4gPiB0aGluayBpdCdzIGEgcmVtbmFu dCBmcm9tIHRoZSB0aW1lIHdlIGhhZCBzZXNzaW9uIGJlaW5nIGNyZWF0ZWQgd2hlbiB0aGUNCj4g Zmlyc3QgcGFja2V0IGFycml2ZXMuDQo+ID4NCj4gPiBAS29uc3RhbnRpbiwgdGhvdWdodHM/DQo+ IA0KPiBJIHRoaW5rIHdlIGRvIG5lZWQgaXQgZm9yIGxrc2Qgc2Vzc2lvbnMuDQo+IFNlZSBjcmVh dGVfbG9va2FzaWRlX3Nlc3Npb24oKSBpbiBpcHNlYy5jDQoNCltBbm9vYl0gWW91IGFyZSByaWdo dC4gSXQgc2VlbXMgZm9yIGxvb2thc2lkZSwgd2Ugc3RpbGwgY3JlYXRlIHNlc3Npb24gb25seSB3 aGVuIGZpcnN0IHBhY2tldCBhcnJpdmVzLiBUaGUgZml4IHdhcyBkb25lIG9ubHkgZm9yIGlubGlu ZS4NCg0KU2FpZCB0aGF0LCBkbyB5b3UgdGhpbmsgd2Ugc2hvdWxkIGZpeCB0aGUgc2FtZSBmb3Ig bG9va2FzaWRlIGFzIHdlbGw/IE9mdGVuLCBzZXNzaW9uIGNyZWF0aW9uIGlzIHRyZWF0ZWQgYXMg YSBjb250cm9sIHBhdGggZW50aXR5LCBhbmQgaXBzZWMtc2VjZ3cgZG9lc24ndCBzdXBwb3J0IGNo YW5naW5nIHNlc3Npb25zIG9uIHRoZSBmbHkgYXMgd2VsbC4gQnV0IGluIGlwc2VjLXNlY2d3LCB3 ZSBjcmVhdGUgc2Vzc2lvbnMgaW4gdGhlIGRhdGEgcGF0aC4gQWxzbywgb25jZSB3ZSBkbyB0aGlz LCBib3RoIGlubGluZSAmIGxvb2thc2lkZSB3aWxsIGhhdmUgc2ltaWxhciBraW5kIG9mIHRyZWF0 bWVudCBhcyB3ZWxsLg0KDQpEbyB5b3UgdGhpbmsgdGhlcmUgaXMgYW55IHZhbHVlIGluIHJldGFp bmluZyB0aGUgY3VycmVudCBiZWhhdmlvcj8gSWYgbm90IEkgY2FuIHRha2UgdGhpcyB1cCBmb2xs b3dpbmcgdGhlIG1lcmdlLg0KIA0KPiANCj4gPg0KPiA+ID4NCj4gPiA+ID4+ICsJbGNvbmYub3V0 Ym91bmQuc3A0X2N0eCA9IHNvY2tldF9jdHhbc29ja2V0X2lkXS5zcF9pcDRfb3V0Ow0KPiA+ID4g Pj4gKwlsY29uZi5vdXRib3VuZC5zcDZfY3R4ID0gc29ja2V0X2N0eFtzb2NrZXRfaWRdLnNwX2lw Nl9vdXQ7DQo+ID4gPiA+PiArCWxjb25mLm91dGJvdW5kLnNhX2N0eCA9IHNvY2tldF9jdHhbc29j a2V0X2lkXS5zYV9vdXQ7DQo+ID4gPiA+PiArCWxjb25mLm91dGJvdW5kLnNlc3Npb25fcG9vbCA9 DQo+ID4gPiA+PiArc29ja2V0X2N0eFtzb2NrZXRfaWRdLnNlc3Npb25fcG9vbDsNCj4gPiA+ID4+ ICsNCj4gPiA+ID4+ICsJUlRFX0xPRyhJTkZPLCBJUFNFQywNCj4gPiA+ID4+ICsJCSJMYXVuY2hp bmcgZXZlbnQgbW9kZSB3b3JrZXIgKG5vbi1idXJzdCAtIFR4DQo+IGludGVybmFsIHBvcnQgLSAi DQo+ID4gPiA+PiArCQkiYXBwIG1vZGUpIG9uIGxjb3JlICVkXG4iLCBsY29yZV9pZCk7DQo+ID4g PiA+PiArDQo+ID4gPiA+PiArCS8qIENoZWNrIGlmIGl0J3Mgc2luZ2xlIGxpbmsgKi8NCj4gPiA+ ID4+ICsJaWYgKG5iX2xpbmtzICE9IDEpIHsNCj4gPiA+ID4+ICsJCVJURV9MT0coSU5GTywgSVBT RUMsDQo+ID4gPiA+PiArCQkJIk11bHRpcGxlIGxpbmtzIG5vdCBzdXBwb3J0ZWQuIFVzaW5nIGZp cnN0DQo+IGxpbmtcbiIpOw0KPiA+ID4gPj4gKwl9DQo+ID4gPiA+PiArDQo+ID4gPiA+PiArCVJU RV9MT0coSU5GTywgSVBTRUMsICIgLS0gbGNvcmVpZD0ldSBldmVudF9wb3J0X2lkPSV1XG4iLA0K PiBsY29yZV9pZCwNCj4gPiA+ID4+ICsJCWxpbmtzWzBdLmV2ZW50X3BvcnRfaWQpOw0KPiA+ID4g Pj4gKw0KPiA+ID4gPj4gKwl3aGlsZSAoIWZvcmNlX3F1aXQpIHsNCj4gPiA+ID4+ICsJCS8qIFJl YWQgcGFja2V0IGZyb20gZXZlbnQgcXVldWVzICovDQo+ID4gPiA+PiArCQluYl9yeCA9DQo+IHJ0 ZV9ldmVudF9kZXF1ZXVlX2J1cnN0KGxpbmtzWzBdLmV2ZW50ZGV2X2lkLA0KPiA+ID4gPj4gKwkJ CQlsaW5rc1swXS5ldmVudF9wb3J0X2lkLA0KPiA+ID4gPj4gKwkJCQkmZXYsICAgICAvKiBldmVu dHMgKi8NCj4gPiA+ID4+ICsJCQkJMSwgICAgICAgLyogbmJfZXZlbnRzICovDQo+ID4gPiA+PiAr CQkJCTAgICAgICAgIC8qIHRpbWVvdXRfdGlja3MgKi8pOw0KPiA+ID4gPj4gKw0KPiA+ID4gPj4g KwkJaWYgKG5iX3J4ID09IDApDQo+ID4gPiA+PiArCQkJY29udGludWU7DQo+ID4gPiA+PiArDQo+ ID4gPiA+DQo+ID4gPiA+IEV2ZW50IHR5cGUgc2hvdWxkIGJlIGNoZWNrZWQgaGVyZSBiZWZvcmUg ZGVyZWZlcmVuY2luZyBpdC4NCj4gPiA+ID4NCj4gPiA+DQo+ID4gPiBbTHVrYXN6XSBJIHdpbGwg YWRkIGV2ZW50IHR5cGUgY2hlY2sgaW4gVjUuDQo+ID4gPg0KPiA+ID4gPj4gKwkJaWYgKGlzX3Vu cHJvdGVjdGVkX3BvcnQoZXYubWJ1Zi0+cG9ydCkpDQo+ID4gPiA+PiArCQkJcmV0ID0NCj4gcHJv Y2Vzc19pcHNlY19ldl9pbmJvdW5kKCZsY29uZi5pbmJvdW5kLA0KPiA+ID4gPj4gKwkJCQkJCQkm bGNvbmYucnQsDQo+ICZldik7DQo+ID4gPiA+PiArCQllbHNlDQo+ID4gPiA+PiArCQkJcmV0ID0N Cj4gcHJvY2Vzc19pcHNlY19ldl9vdXRib3VuZCgmbGNvbmYub3V0Ym91bmQsDQo+ID4gPiA+PiAr CQkJCQkJCSZsY29uZi5ydCwNCj4gJmV2KTsNCj4gPiA+ID4+ICsJCWlmIChyZXQgIT0gMSkNCj4g PiA+ID4+ICsJCQkvKiBUaGUgcGt0IGhhcyBiZWVuIGRyb3BwZWQgKi8NCj4gPiA+ID4+ICsJCQlj b250aW51ZTsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJCS8qDQo+ID4gPiA+PiArCQkgKiBTaW5j ZSB0eCBpbnRlcm5hbCBwb3J0IGlzIGF2YWlsYWJsZSwgZXZlbnRzIGNhbiBiZQ0KPiA+ID4gPj4g KwkJICogZGlyZWN0bHkgZW5xdWV1ZWQgdG8gdGhlIGFkYXB0ZXIgYW5kIGl0IHdvdWxkIGJlDQo+ ID4gPiA+PiArCQkgKiBpbnRlcm5hbGx5IHN1Ym1pdHRlZCB0byB0aGUgZXRoIGRldmljZS4NCj4g PiA+ID4+ICsJCSAqLw0KPiA+ID4gPj4gKw0KPiAJcnRlX2V2ZW50X2V0aF90eF9hZGFwdGVyX2Vu cXVldWUobGlua3NbMF0uZXZlbnRkZXZfaWQsDQo+ID4gPiA+PiArCQkJCWxpbmtzWzBdLmV2ZW50 X3BvcnRfaWQsDQo+ID4gPiA+PiArCQkJCSZldiwJLyogZXZlbnRzICovDQo+ID4gPiA+PiArCQkJ CTEsCS8qIG5iX2V2ZW50cyAqLw0KPiA+ID4gPj4gKwkJCQkwCS8qIGZsYWdzICovKTsNCj4gPiA+ ID4+ICsJfQ0KPiA+ID4gPj4gK30NCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICBzdGF0aWMgdWludDhf dA0KPiA+ID4gPj4gIGlwc2VjX2V2ZW50bW9kZV9wb3B1bGF0ZV93cmtyX3BhcmFtcyhzdHJ1Y3QN Cj4gZWhfYXBwX3dvcmtlcl9wYXJhbXMNCj4gPiA+ID4+ICp3cmtycykNCj4gPiA+ID4+ICB7DQo+ ID4gPiA+PiBAQCAtMTgwLDYgKzU5MiwxNCBAQA0KPiBpcHNlY19ldmVudG1vZGVfcG9wdWxhdGVf d3Jrcl9wYXJhbXMoc3RydWN0DQo+ID4gPiA+PiBlaF9hcHBfd29ya2VyX3BhcmFtcyAqd3JrcnMp DQo+ID4gPiA+PiAgCXdya3ItPmNhcC5pcHNlY19tb2RlID0gRUhfSVBTRUNfTU9ERV9UWVBFX0RS SVZFUjsNCj4gPiA+ID4+ICAJd3Jrci0+d29ya2VyX3RocmVhZCA9IGlwc2VjX3dya3Jfbm9uX2J1 cnN0X2ludF9wb3J0X2Rydl9tb2RlOw0KPiA+ID4gPj4gIAl3cmtyKys7DQo+ID4gPiA+PiArCW5i X3dya3JfcGFyYW0rKzsNCj4gPiA+ID4+ICsNCj4gPiA+ID4+ICsJLyogTm9uLWJ1cnN0IC0gVHgg aW50ZXJuYWwgcG9ydCAtIGFwcCBtb2RlICovDQo+ID4gPiA+PiArCXdya3ItPmNhcC5idXJzdCA9 IEVIX1JYX1RZUEVfTk9OX0JVUlNUOw0KPiA+ID4gPj4gKwl3cmtyLT5jYXAudHhfaW50ZXJuYWxf cG9ydCA9IEVIX1RYX1RZUEVfSU5URVJOQUxfUE9SVDsNCj4gPiA+ID4+ICsJd3Jrci0+Y2FwLmlw c2VjX21vZGUgPSBFSF9JUFNFQ19NT0RFX1RZUEVfQVBQOw0KPiA+ID4gPj4gKwl3cmtyLT53b3Jr ZXJfdGhyZWFkID0NCj4gaXBzZWNfd3Jrcl9ub25fYnVyc3RfaW50X3BvcnRfYXBwX21vZGU7DQo+ ID4gPiA+PiArCW5iX3dya3JfcGFyYW0rKzsNCj4gPiA+ID4+DQo+ID4gPiA+PiAgCXJldHVybiBu Yl93cmtyX3BhcmFtOw0KPiA+ID4gPj4gIH0NCj4gPiA+ID4+IGRpZmYgLS1naXQgYS9leGFtcGxl cy9pcHNlYy1zZWNndy9pcHNlY193b3JrZXIuaA0KPiA+ID4gPj4gYi9leGFtcGxlcy9pcHNlYy0g c2VjZ3cvaXBzZWNfd29ya2VyLmggbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gPiA+ ID4+IDAwMDAwMDAuLjg3YjRmMjINCj4gPiA+ID4+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4+ICsr KyBiL2V4YW1wbGVzL2lwc2VjLXNlY2d3L2lwc2VjX3dvcmtlci5oDQo+ID4gPiA+PiBAQCAtMCww ICsxLDM1IEBADQo+ID4gPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNs YXVzZQ0KPiA+ID4gPj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBNYXJ2ZWxsIEludGVybmF0aW9u YWwgTHRkLg0KPiA+ID4gPj4gKyAqLw0KPiA+ID4gPj4gKyNpZm5kZWYgX0lQU0VDX1dPUktFUl9I Xw0KPiA+ID4gPj4gKyNkZWZpbmUgX0lQU0VDX1dPUktFUl9IXw0KPiA+ID4gPj4gKw0KPiA+ID4g Pj4gKyNpbmNsdWRlICJpcHNlYy5oIg0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gK2VudW0gcGt0X3R5 cGUgew0KPiA+ID4gPj4gKwlQS1RfVFlQRV9QTEFJTl9JUFY0ID0gMSwNCj4gPiA+ID4+ICsJUEtU X1RZUEVfSVBTRUNfSVBWNCwNCj4gPiA+ID4+ICsJUEtUX1RZUEVfUExBSU5fSVBWNiwNCj4gPiA+ ID4+ICsJUEtUX1RZUEVfSVBTRUNfSVBWNiwNCj4gPiA+ID4+ICsJUEtUX1RZUEVfSU5WQUxJRA0K PiA+ID4gPj4gK307DQo+ID4gPiA+PiArDQo+ID4gPiA+PiArc3RydWN0IHJvdXRlX3RhYmxlIHsN Cj4gPiA+ID4+ICsJc3RydWN0IHJ0X2N0eCAqcnQ0X2N0eDsNCj4gPiA+ID4+ICsJc3RydWN0IHJ0 X2N0eCAqcnQ2X2N0eDsNCj4gPiA+ID4+ICt9Ow0KPiA+ID4gPj4gKw0KPiA+ID4gPj4gKy8qDQo+ ID4gPiA+PiArICogQ29uZiByZXF1aXJlZCBieSBldmVudCBtb2RlIHdvcmtlciB3aXRoIHR4IGlu dGVybmFsIHBvcnQgICovDQo+ID4gPiA+PiArc3RydWN0IGxjb3JlX2NvbmZfZXZfdHhfaW50X3Bv cnRfd3JrciB7DQo+ID4gPiA+PiArCXN0cnVjdCBpcHNlY19jdHggaW5ib3VuZDsNCj4gPiA+ID4+ ICsJc3RydWN0IGlwc2VjX2N0eCBvdXRib3VuZDsNCj4gPiA+ID4+ICsJc3RydWN0IHJvdXRlX3Rh YmxlIHJ0Ow0KPiA+ID4gPj4gK30gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gPiA+ID4+ICsNCj4g PiA+ID4+ICt2b2lkIGlwc2VjX3BvbGxfbW9kZV93b3JrZXIodm9pZCk7DQo+ID4gPiA+PiArDQo+ ID4gPiA+PiAraW50IGlwc2VjX2xhdW5jaF9vbmVfbGNvcmUodm9pZCAqYXJncyk7DQo+ID4gPiA+ PiArDQo+ID4gPiA+PiArI2VuZGlmIC8qIF9JUFNFQ19XT1JLRVJfSF8gKi8NCj4gPiA+ID4+IC0t DQo+ID4gPiA+PiAyLjcuNA0KPiA+ID4gPg0K