From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B5BE1A04FD for ; Wed, 22 Jun 2022 08:02:15 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8ADAD4282A; Wed, 22 Jun 2022 08:02:14 +0200 (CEST) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80072.outbound.protection.outlook.com [40.107.8.72]) by mails.dpdk.org (Postfix) with ESMTP id 7785C40151; Tue, 21 Jun 2022 09:16:45 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c79wClyWLypJXLnyeQoH0070tCcQqsPpwYKKtDL0zN1noTFu4fhopVpaioF4DCpf4d1VoMzIC5f9GyByPGdAtXwQVwYtfpHS/klM3QxIQ4lF+jXXpoJhUdPL8hqLDP6uXfWkjkJUZllFjp+AL4FE25CYYe/ljkL08x8MCr150Mid/9CMtmDJL17j+hLVb3WJ4hSZbZbidKoSjkjQnQLaEz1B69WYBQUlIvMMEixb4dIewdv9Zdn4NiI462URE/ypqn/g/G81BFC6fMdwhZ7sthVI8gXICYH32NUWyPhHCG/CIGdKQ425mKRpbNuTu9Mgb7TtWIUMf+3qZMuIXWXnzw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hbKbQNfqoQWBvZa3Z9GU3ecmKJLE7C9w/uY1A1IhDso=; b=cfTri76TOMtjVoxtk5fhLeUkj4r+1nK1uhD8TyULW1UK+e2BwBiYd6rmx889AfKNJblVTgyxhX5NX0syczTWLzl1AO+vYngiQPAG7mLP2LqrelxwdfW2Jsv+CxpmJy76r9aDbWBLX+zBvS3Vr7KEYSbyESF93EmyIP3yko4BCiFvIEG8/JSwnvGkdCyML5FTGFXCyY4p3iJ4jEhgkkEVQLo37jh3Qa3X6D/eBSPKNF5SWKusBzv/wdfmT+lJjUkAu+QuWRLT0CHPanv6Ml761AUDhT0zVBpDuOxsAup96NNd790sas9l8CO/xZBnl0u5+EDujv14Fz7jtC1IXcc0wQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ericsson.com; dmarc=pass action=none header.from=ericsson.com; dkim=pass header.d=ericsson.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hbKbQNfqoQWBvZa3Z9GU3ecmKJLE7C9w/uY1A1IhDso=; b=vRj3eSxhmBP+ud5kTvjauQ4URM933o1iK1eq/mXV1JOZucgvVknju/7WSr2CMo4hYBLVh6W2Ss0v5UwUQhUEsAig/lyJRrYJWp5+VTgB55URz5iNSczDTep7dq8+oshXW8kgKTa1qnKJ1tuFHrdaRhcdEPqN3B5CAq4jnnFWmms= Received: from AM8PR07MB7666.eurprd07.prod.outlook.com (2603:10a6:20b:240::23) by PA4PR07MB8887.eurprd07.prod.outlook.com (2603:10a6:102:268::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5373.9; Tue, 21 Jun 2022 07:16:44 +0000 Received: from AM8PR07MB7666.eurprd07.prod.outlook.com ([fe80::188:e139:774e:cea1]) by AM8PR07MB7666.eurprd07.prod.outlook.com ([fe80::188:e139:774e:cea1%7]) with mapi id 15.20.5373.015; Tue, 21 Jun 2022 07:16:44 +0000 From: Emil Berg To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= CC: "stable@dpdk.org" , "bugzilla@dpdk.org" , "hofors@lysator.liu.se" , "olivier.matz@6wind.com" , "dev@dpdk.org" Subject: RE: [PATCH] net: fix checksum with unaligned buffer Thread-Topic: [PATCH] net: fix checksum with unaligned buffer Thread-Index: AQHYgiaa5HfwvbWOiEyQ5g/wygBtSq1TTuaAgATMtJCAAAQg8IABVuVg Date: Tue, 21 Jun 2022 07:16:44 +0000 Message-ID: References: <98CBD80474FA8B44BF855DF32C47DC35D87139@smartserver.smartshare.dk> <20220617084505.62071-1-mb@smartsharesystems.com> <98CBD80474FA8B44BF855DF32C47DC35D8713A@smartserver.smartshare.dk> <98CBD80474FA8B44BF855DF32C47DC35D87141@smartserver.smartshare.dk> In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35D87141@smartserver.smartshare.dk> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ericsson.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: fdd47001-4f1f-48d9-03dd-08da5355fefc x-ms-traffictypediagnostic: PA4PR07MB8887:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: iMuVcQASX5z6oU/MVi771PPhmC53dVDjKyoYPehrKtKOCmJYu2qf9DpHuiWMWQcEpaSPeqZS5nMInTXeJao//jPBu+lkHS8Fi5vbS5HpnJgj/wVYlEyu90UPylnLboEUKlN81kRZrNlHiD2wI3AySMUkADkfTJ1yLGcoOEMCAwD1vMM2yeUC908kMfggLpeuELikJ+MkX/JywDVtTLK7KrVGq6cdGWD9FhJF2zpOVYhN2TGvT7wPmUsb/Z9kr+QAVuMMdU+cca+3/N75cIoUIsMKA6WQod7y9pNf/y7iL024SXpiHbEU6QofZdHfS6ywn1L+tQtJh5ImpTxW8AKgwR0ds+6yDMpwfLXGn0lpCTHStWgNUCQtS4CZ9TEkOoNDlTaCPPl24cEty8Y4oVIX3rNYh2v5MBqDXllKZp0ufRzULCfkacBDkXh5d6NYWBjfoP+wlExwaeOfpvNr85y1Bq1wN1B2jO7HBwrP7aovHj2SAn7HoIkCeS+k8uMfp488TJMNRxVfO23ZCimBO8fjJShx9Y+s2/LVdZhf6h3hV783I2Xr++uNfXkmLq43tjrZ55EjIP5Sy+mYCpX4By6Q9HKRBMu/16TkS1PP7exMCSUGdH+O8qG2nIa480z8tO+Rr2QsuxudGHoh2el0O0QJK8aLSA/mn0d9DUOD1p7ACSGi7t79usyHp21Qn2cdQDYXR9xg5x2EQqfoezWqBPBn6TaPVcWLssGc59zET97veYehtVOHIM5MLypdHuBHZm4s x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM8PR07MB7666.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(39860400002)(366004)(376002)(346002)(396003)(136003)(9686003)(33656002)(186003)(83380400001)(8936002)(6506007)(7696005)(55016003)(44832011)(26005)(53546011)(2906002)(5660300002)(66446008)(86362001)(66946007)(76116006)(478600001)(66556008)(122000001)(4326008)(38070700005)(82960400001)(71200400001)(8676002)(64756008)(41300700001)(38100700002)(316002)(52536014)(66476007)(6916009)(54906003)(66574015); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SW9hN0xmU2NNdkkzbFlDV2pWb1ZQVmlvdlVicThPM2poM2FSUFk3Tkp5dTBj?= =?utf-8?B?TVp3VWsxR09hT2UvSWpyQkNsN2hCM2VPZndFazJ1TWg0VUtweEs1WE5kV2Zn?= =?utf-8?B?M0htWTVqaFo1ZUNsYi8vcUpGYjR1eTZQeFRLVlVoVjEwUVlQOW1UWmkxOEJE?= =?utf-8?B?Qmt2a1N4Z1A0eXVUdUdUc2hrNDQ4ZkZVQlNQcUVPN1dxdXJFSVBnWnlFV1E3?= =?utf-8?B?UDVpcmdIUHYyRkdFa0c1eVI3TUw4NUFqYlhBN0JMallNY2svajRpWDNNVzZw?= =?utf-8?B?NTJNMnEycnFkVjlLOVVBRUZDMEVlR2FvVm4vV2hwcTRobDBaM3VZalFRVEZD?= =?utf-8?B?cGcrQW1VWkJvSW9DOE5PdEFiWUxFa0FOTDlyZWE5aVc1UUxoeHIwTE9NYjVY?= =?utf-8?B?akpyVGJGMjRWL2x6eld4RGNHajhOY053UTcwZ2NzZmtPZzUvTVNaQzEzZkRl?= =?utf-8?B?Z3Y4eElKL2Q4OUxpeUhuMVlJUHdZbjE5OWt4Y2NJTkoxK3R2eTQwVUUrYys5?= =?utf-8?B?MWxDZmpCOVBXSVRFbnZ1RUNodDNJWVhaLzk5WDFJQklISExKZU1jb25TSWpR?= =?utf-8?B?QkMzcC9hUkpWWWFobnA2RzNLUnVpSTROeHR3dldBTWhxNzM4ZWsvYytzYXoy?= =?utf-8?B?K1NTbDNNRWh4cENVS1pOa09YTXp3QXpqUS9jWEdtbVZzZEcycDFiVDVaOVd5?= =?utf-8?B?d1JiRFdUTk9SeU5qTFJrN2JTdEhiSzFRWE5ya0sxbHJCSTJJZTZNZ2YyVWhJ?= =?utf-8?B?dFJOcHNvMktDZlJlZUJ0VEV1d2s5UXpjRjJJdEV4ZjFTd2NGcEM4Z3hOMXRB?= =?utf-8?B?RU90WkxyS2dqS1RCSmpJQk9KV2ZvQUM2NDBPclVOZUo2SDZET2twYjYvR1hz?= =?utf-8?B?ZkJPN0krUGZYTHpSNkxDMFVGNDExV0M4aytXZUQ3dk4wTWFwZDdQRWVPa0Zo?= =?utf-8?B?dUhNZVh0ak5BUFZ2TTc5a1c3OE1OdUF2eDlMNExwdHQxb1BBVmJvYVV6Qzlm?= =?utf-8?B?eEt3aWZmU3Z3cjMya0pRa3QrK2phMzNDQ2NJUFQ1bG1VYmxXcDdRQnhMWVZU?= =?utf-8?B?NThLNCsrY3NwUTJDeWJ2bWF3UWVjcVZ2UXRjTmRUZDRQRmUydVVwUGQ5VzJP?= =?utf-8?B?eCtveDlNc3BDbWZ4ZXpYVHd4TGdSVDFoMVB5S3ZhcGRmSjUrNjh2VDI0ck5I?= =?utf-8?B?R2FWMVJmb2Q5VHkzU1ByL252K0Y4eksxZzQ2WlZkUE1VRFg4ZjlNRjlEaEg3?= =?utf-8?B?THBTaWlvVURrSXpnOU9zeGFmWlpmOURrVG1INmtDcVlEREVCNEhLNXFNRDZJ?= =?utf-8?B?MHFQQ1prZzZyZXR3dVYrandzeHNLQzBYL0hocEpsZGQ5SEpQVUV3SFErY3E1?= =?utf-8?B?NHJ6QkZhK1FHVlZaMU42d3ZHMEMzWnU0SjQ4TTBhZ3VoL0Z6aUZ6elRkdnlU?= =?utf-8?B?aWRzU3V6YmQxWklpelhUaEpBcVUzU2RBd29rU291U0Fad1JuWktiVXZWU1Vz?= =?utf-8?B?RitnbEVyVGpGRFA4dEdabUplaUUzUGhXZXljWERzNFFhTy9SSjkvb1h5aXNo?= =?utf-8?B?Wit3cWkrNis4UEpCd01pUkhqUFVXK3MrL3pvMkI2TkhoZjJhVDEybW5mZjEz?= =?utf-8?B?enBTaTVEY3lRd0RoYU5mVEhBM0hxbGlURUszQ25HczJuelEzMmZzdGU3SWlz?= =?utf-8?B?SEkrM0dISEMraVNtdnNaMC9oMWdnbEg4K0x3ZzFFUG5seThSUURZWisxNWhV?= =?utf-8?B?cUt0aWhGVDBVeUZ4V3BEMGxSaWtMR3BjTHU2Yzc1RjlnOHA2aGd2TUxOVXkz?= =?utf-8?B?L1RMaXVTUWlQUXZHOXQrK2VYU1RXQTE1NnVldVJUSGwwWnJ4ZzRMZ1pveFhq?= =?utf-8?B?KzB2bTZYdHhVR093cFNtZUo5UHNLejZyWjVkN3I0eTdveTZFcmNQRGNxZnB4?= =?utf-8?B?RU1vRXlmWnhFdCtNVHQzbGVZMzVUMXdrQ21HWm5jWnF6dFF0b2tNbndLSC96?= =?utf-8?B?WndpWjIreUxyUTNpWjM3UHJqd0FRN3NjRUljTHJOQWZQemxHUE9uWTBmSjZI?= =?utf-8?B?NmtVSFVsUTVyVHZaRFFpR2V6RHdZQS9WSFBEbEdLMzBsMlRaTStyZTdFS0Zv?= =?utf-8?B?bG00S04xQVNXMHQwcDJqQXRvenROSUVEZUFMYXVRTDh0U3J0OWRPWmNUMUFz?= =?utf-8?B?dHBwQk5VMnA0QTN2dlU1bzRkaFpmcXh3VHRtVUlhbGY1anFFenV3U1JZRCtt?= =?utf-8?B?ZU1tVWdZU0xYSG1wTGdLL2puSlpXMTN0blRtRVJSK056cTJxaFdZVExPMU9J?= =?utf-8?B?anhRVEJhcVdWcXFGRVJoTXZWWE5GNG9IQkhmVlc0MHVwYUMrK2dNZz09?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM8PR07MB7666.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fdd47001-4f1f-48d9-03dd-08da5355fefc X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Jun 2022 07:16:44.0976 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 8Bz5hXiAZPGXOF/N9GZlJP5XmFymiTbwuyyM3Sz8gcOfnSqQ6TWQnkhUYqj4p9YaCjOY/zO1ubKh1gTzJe7dYA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR07MB8887 X-Mailman-Approved-At: Wed, 22 Jun 2022 08:02:13 +0200 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTW9ydGVuIEJyw7hydXAg PG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gU2VudDogZGVuIDIwIGp1bmkgMjAyMiAxMjo1 OA0KPiBUbzogRW1pbCBCZXJnIDxlbWlsLmJlcmdAZXJpY3Nzb24uY29tPg0KPiBDYzogc3RhYmxl QGRwZGsub3JnOyBidWd6aWxsYUBkcGRrLm9yZzsgaG9mb3JzQGx5c2F0b3IubGl1LnNlOw0KPiBv bGl2aWVyLm1hdHpANndpbmQuY29tOyBkZXZAZHBkay5vcmcNCj4gU3ViamVjdDogUkU6IFtQQVRD SF0gbmV0OiBmaXggY2hlY2tzdW0gd2l0aCB1bmFsaWduZWQgYnVmZmVyDQo+IA0KPiA+IEZyb206 IEVtaWwgQmVyZyBbbWFpbHRvOmVtaWwuYmVyZ0Blcmljc3Nvbi5jb21dDQo+ID4gU2VudDogTW9u ZGF5LCAyMCBKdW5lIDIwMjIgMTIuMzgNCj4gPg0KPiA+ID4gRnJvbTogTW9ydGVuIEJyw7hydXAg PG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gPiA+IFNlbnQ6IGRlbiAxNyBqdW5pIDIwMjIg MTE6MDcNCj4gPiA+DQo+ID4gPiA+IEZyb206IE1vcnRlbiBCcsO4cnVwIFttYWlsdG86bWJAc21h cnRzaGFyZXN5c3RlbXMuY29tXQ0KPiA+ID4gPiBTZW50OiBGcmlkYXksIDE3IEp1bmUgMjAyMiAx MC40NQ0KPiA+ID4gPg0KPiA+ID4gPiBXaXRoIHRoaXMgcGF0Y2gsIHRoZSBjaGVja3N1bSBjYW4g YmUgY2FsY3VsYXRlZCBvbiBhbiB1bmxpZ25lZA0KPiA+ID4gPiBwYXJ0DQo+ID4gb2YNCj4gPiA+ ID4gYSBwYWNrZXQgYnVmZmVyLg0KPiA+ID4gPiBJLmUuIHRoZSBidWYgcGFyYW1ldGVyIGlzIG5v IGxvbmdlciByZXF1aXJlZCB0byBiZSAxNiBiaXQgYWxpZ25lZC4NCj4gPiA+ID4NCj4gPiA+ID4g VGhlIERQREsgaW52YXJpYW50IHRoYXQgcGFja2V0IGJ1ZmZlcnMgbXVzdCBiZSAxNiBiaXQgYWxp Z25lZA0KPiA+IHJlbWFpbnMNCj4gPiA+ID4gdW5jaGFuZ2VkLg0KPiA+ID4gPiBUaGlzIGludmFy aWFudCBhbHNvIGRlZmluZXMgaG93IHRvIGNhbGN1bGF0ZSB0aGUgMTYgYml0IGNoZWNrc3VtDQo+ ID4gPiA+IG9uDQo+ID4gYW4NCj4gPiA+ID4gdW5hbGlnbmVkIHBhcnQgb2YgYSBwYWNrZXQgYnVm ZmVyLg0KPiA+ID4gPg0KPiA+ID4gPiBCdWd6aWxsYSBJRDogMTAzNQ0KPiA+ID4gPiBDYzogc3Rh YmxlQGRwZGsub3JnDQo+ID4gPiA+DQo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IE1vcnRlbiBCcsO4 cnVwIDxtYkBzbWFydHNoYXJlc3lzdGVtcy5jb20+DQo+ID4gPiA+IC0tLQ0KPiA+ID4gPiAgbGli L25ldC9ydGVfaXAuaCB8IDE3ICsrKysrKysrKysrKysrKy0tDQo+ID4gPiA+ICAxIGZpbGUgY2hh bmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkNCj4gPiA+ID4NCj4gPiA+ID4g ZGlmZiAtLWdpdCBhL2xpYi9uZXQvcnRlX2lwLmggYi9saWIvbmV0L3J0ZV9pcC5oIGluZGV4DQo+ ID4gPiA+IGI1MDI0ODE2NzAuLjhlMzAxZDljMjYgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2xpYi9u ZXQvcnRlX2lwLmgNCj4gPiA+ID4gKysrIGIvbGliL25ldC9ydGVfaXAuaA0KPiA+ID4gPiBAQCAt MTYyLDkgKzE2MiwyMiBAQCBfX3J0ZV9yYXdfY2tzdW0oY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qg bGVuLA0KPiA+ID4gPiB1aW50MzJfdCBzdW0pICB7DQo+ID4gPiA+ICAJLyogZXh0ZW5kIHN0cmlj dC1hbGlhc2luZyBydWxlcyAqLw0KPiA+ID4gPiAgCXR5cGVkZWYgdWludDE2X3QgX19hdHRyaWJ1 dGVfXygoX19tYXlfYWxpYXNfXykpIHUxNl9wOw0KPiA+ID4gPiAtCWNvbnN0IHUxNl9wICp1MTZf YnVmID0gKGNvbnN0IHUxNl9wICopYnVmOw0KPiA+ID4gPiAtCWNvbnN0IHUxNl9wICplbmQgPSB1 MTZfYnVmICsgbGVuIC8gc2l6ZW9mKCp1MTZfYnVmKTsNCj4gPiA+ID4gKwljb25zdCB1MTZfcCAq dTE2X2J1ZjsNCj4gPiA+ID4gKwljb25zdCB1MTZfcCAqZW5kOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJLyogaWYgYnVmZmVyIGlzIHVuYWxpZ25lZCwga2VlcGluZyBpdCBieXRlIG9yZGVyIGluZGVw ZW5kZW50ICovDQo+ID4gPiA+ICsJaWYgKHVubGlrZWx5KCh1aW50cHRyX3QpYnVmICYgMSkpIHsN Cj4gPiA+ID4gKwkJdWludDE2X3QgZmlyc3QgPSAwOw0KPiA+ID4gPiArCQlpZiAodW5saWtlbHko bGVuID09IDApKQ0KPiA+ID4gPiArCQkJcmV0dXJuIDA7DQo+ID4gPiA+ICsJCSgodW5zaWduZWQg Y2hhciAqKSZmaXJzdClbMV0gPSAqKGNvbnN0IHVuc2lnbmVkDQo+ID4gPiBjaGFyICopYnVmOw0K PiA+ID4gPiArCQlzdW0gKz0gZmlyc3Q7DQo+ID4gPiA+ICsJCWJ1ZiA9IChjb25zdCB2b2lkICop KCh1aW50cHRyX3QpYnVmICsgMSk7DQo+ID4gPiA+ICsJCWxlbi0tOw0KPiA+ID4gPiArCX0NCj4g PiA+ID4NCj4gPiA+ID4gKwl1MTZfYnVmID0gKGNvbnN0IHUxNl9wICopYnVmOw0KPiA+ID4gPiAr CWVuZCA9IHUxNl9idWYgKyBsZW4gLyBzaXplb2YoKnUxNl9idWYpOw0KPiA+ID4gPiAgCWZvciAo OyB1MTZfYnVmICE9IGVuZDsgKyt1MTZfYnVmKQ0KPiA+ID4gPiAgCQlzdW0gKz0gKnUxNl9idWY7 DQo+ID4gPiA+DQo+ID4gPiA+IC0tDQo+ID4gPiA+IDIuMTcuMQ0KPiA+ID4NCj4gPiA+IEBFbWls LCBjYW4geW91IHBsZWFzZSB0ZXN0IHRoaXMgcGF0Y2ggd2l0aCBhbiB1bmFsaWduZWQgYnVmZmVy IG9uDQo+ID4geW91cg0KPiA+ID4gYXBwbGljYXRpb24gdG8gY29uZmlybSB0aGF0IGl0IHByb2R1 Y2VzIHRoZSBleHBlY3RlZCByZXN1bHQuDQo+ID4NCj4gPiBIaSENCj4gPg0KPiA+IEkgdGVzdGVk IHRoZSBwYXRjaC4gSXQgZG9lc24ndCBzZWVtIHRvIHByb2R1Y2UgdGhlIHNhbWUgcmVzdWx0cy4g SQ0KPiA+IHRoaW5rIHRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgYWx3YXlzIHN0YXJ0cyBzdW1taW5n IGZyb20gYW4gZXZlbg0KPiA+IGFkZHJlc3MsIHRoZSBzdW0gc2hvdWxkIGFsd2F5cyBzdGFydCBm cm9tIHRoZSBmaXJzdCBieXRlIGFjY29yZGluZyB0bw0KPiA+IHRoZSBjaGVja3N1bSBzcGVjaWZp Y2F0aW9uLiBDYW4gSSBpbnN0ZWFkIHByb3Bvc2Ugc29tZXRoaW5nIE1hdHRpYXMNCj4gPiBSw7Zu bmJsb20gc2VudCBtZT8NCj4gDQo+IEkgYXNzdW1lIHRoYXQgaXQgcHJvZHVjZXMgdGhlIHNhbWUg cmVzdWx0IHdoZW4gdGhlICJidWYiIHBhcmFtZXRlciBpcw0KPiBhbGlnbmVkPw0KPiANCj4gQW5k IHdoZW4gdGhlICJidWYiIHBhcmFtZXRlciBpcyB1bmFsaWduZWQsIEkgZG9uJ3QgZXhwZWN0IGl0 IHRvIHByb2R1Y2UgdGhlDQo+IHNhbWUgcmVzdWx0cyBhcyB0aGUgc2ltcGxlIGFsZ29yaXRobSEN Cj4gDQo+IFRoaXMgd2FzIHRoZSB3aG9sZSBwb2ludCBvZiB0aGUgcGF0Y2g6IEkgZXhwZWN0IHRo ZSBvdmVyYWxsIHBhY2tldCBidWZmZXIgdG8NCj4gYmUgMTYgYml0IGFsaWduZWQsIGFuZCB0aGUg Y2hlY2tzdW0gdG8gYmUgYSBwYXJ0aWFsIGNoZWNrc3VtIG9mIHN1Y2ggYSAxNiBiaXQNCj4gYWxp Z25lZCBwYWNrZXQgYnVmZmVyLiBXaGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgSSBhc3N1bWUg dGhhdCB0aGUgImJ1ZiIgYW5kDQo+ICJsZW4iIHBhcmFtZXRlcnMgcG9pbnQgdG8gYSBwYXJ0IG9m IHN1Y2ggYSBwYWNrZXQgYnVmZmVyLiBJZiB0aGVzZQ0KPiBleHBlY3RhdGlvbnMgYXJlIGNvcnJl Y3QsIHRoZSBzaW1wbGUgYWxnb3JpdGhtIHdpbGwgcHJvZHVjZSBpbmNvcnJlY3QgcmVzdWx0cw0K PiB3aGVuICJidWYiIGlzIHVuYWxpZ25lZC4NCj4gDQo+IEkgd2FzIGFza2luZyB5b3UgdG8gdGVz dCBpZiB0aGUgY2hlY2tzdW0gb24gdGhlIHBhY2tldCBpcyBjb3JyZWN0IHdoZW4geW91cg0KPiBh cHBsaWNhdGlvbiBtb2RpZmllcyBhbiB1bmFsaWduZWQgcGFydCBvZiB0aGUgcGFja2V0IGFuZCB1 c2VzIHRoaXMgZnVuY3Rpb24gdG8NCj4gdXBkYXRlIHRoZSBjaGVja3N1bS4NCj4gDQoNCk5vdyBJ IHVuZGVyc3RhbmQgeW91ciB1c2UgY2FzZS4gWW91ciB1c2UgY2FzZSBzZWVtcyB0byBiZSBhYm91 dCBwYXJ0aWFsIGNoZWNrc3Vtcywgb2Ygd2hpY2ggc29tZSBwYXJ0aWFsIGNoZWNrc3VtcyBtYXkg c3RhcnQgb24gdW5hbGlnbmVkIGFkZHJlc3NlcyBpbiBhbiBvdGhlcndpc2UgYWxpZ25lZCBwYWNr ZXQuIA0KDQpPdXIgdXNlIGNhc2UgaXMgYWJvdXQgY2FsY3VsYXRpbmcgdGhlIGZ1bGwgY2hlY2tz dW0gb24gYSBuZXN0ZWQgcGFja2V0LiBUaGF0IG5lc3RlZCBwYWNrZXQgbWF5IHN0YXJ0IG9uIHVu YWxpZ25lZCBhZGRyZXNzZXMuDQoNClRoZSBkaWZmZXJlbmNlIGlzIGJhc2ljYWxseSBpZiB3ZSB3 YW50IHRvIHN1bSBvdmVyIGFsaWduZWQgYWRkcmVzc2VzIG9yIG5vdCwgaGFuZGxpbmcgdGhlIGhl YWRpbmcgYW5kIHRyYWlsaW5nIGJ5dGVzIGFwcHJvcHJpYXRlbHkuDQoNCllvdXIgbWV0aG9kIGRv ZXMgbm90IHdvcmsgaW4gb3VyIGNhc2Ugc2luY2Ugd2Ugd2FudCB0byB0cmVhdCB0aGUgZmlyc3Qg dHdvIGJ5dGVzIGFzIHRoZSBmaXJzdCB3b3JkIGluIG91ciBjYXNlLiBCdXQgSSBkbyB1bmRlcnN0 YW5kIHRoYXQgYm90aCBtZXRob2RzIGFyZSB1c2VmdWwuDQoNCk5vdGUgdGhhdCB5b3VyIG1ldGhv ZCBicmVha3MgdGhlIEFQSS4gUHJldmlvdXNseSAoYXNzdW1pbmcgbm8gY3Jhc2hpbmcgZHVlIHRv IGxvdyBvcHRpbWl6YXRpb24gbGV2ZWxzLCBtb3JlIGFjY2VwdGluZyBoYXJkd2FyZSwgb3IgYSBk aWZmZXJlbnQgY29tcGlsZXIgKHZlcnNpb24pKSB0aGUgY3VycmVudCBtZXRob2Qgd291bGQgY2Fs Y3VsYXRlIHRoZSBjaGVja3N1bSBhc3N1bWluZyB0aGUgZmlyc3QgdHdvIGJ5dGVzIGlzIHRoZSBm aXJzdCB3b3JkLg0KDQo+IA0KPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiAtDQo+ID4gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gY29uc3Qgdm9pZCAqZW5kID0gUlRF X1BUUl9BREQoYnVmLCAobGVuIC8gc2l6ZW9mKHVpbnQxNl90KSkgKg0KPiA+IHNpemVvZih1aW50 MTZfdCkpOw0KPiA+DQo+ID4gZm9yICg7IGJ1ZiAhPSBlbmQ7IGJ1ZiA9IFJURV9QVFJfQUREKGJ1 Ziwgc2l6ZW9mKHVpbnQxNl90KSkpIHsNCj4gPiAgICAgdWludDE2X3QgdjsNCj4gPiAgICAgbWVt Y3B5KCZ2LCBidWYsIHNpemVvZih1aW50MTZfdCkpOw0KPiA+ICAgICBzdW0gKz0gdjsNCj4gPiB9 DQo+ID4NCj4gPiAvKiBpZiBsZW5ndGggaXMgb2RkLCBrZWVwaW5nIGl0IGJ5dGUgb3JkZXIgaW5k ZXBlbmRlbnQgKi8gaWYNCj4gPiAodW5saWtlbHkobGVuICUgMikpIHsNCj4gPiAgICAgdWludDE2 X3QgbGVmdCA9IDA7DQo+ID4gICAgICoodW5zaWduZWQgY2hhciAqKSZsZWZ0ID0gKihjb25zdCB1 bnNpZ25lZCBjaGFyICopZW5kOw0KPiA+ICAgICBzdW0gKz0gbGVmdDsNCj4gPiB9DQo+ID4gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KPiA+IC0NCj4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gPiBOb3RlIHRoYXQgdGhlIGxhc3QgYmxvY2sgaXMgdGhlIHNhbWUgYXMgYmVmb3Jl LiBBbWF6aW5nbHkgSSBzZWUgbm8NCj4gPiBtZWFzdXJhYmxlIHBlcmZvcm1hbmNlIGhpdCBmcm9t IHRoaXMgY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIG9uZQ0KPiA+ICgtTzMsIG1hcmNoPW5hdGl2 ZSkuIExvb2tpbmcgYXQgdGhlIHByZXZpb3VzIHRoZSBsb29wIGJvZHkgbWF5IGNvbXBpbGUNCj4g PiB0bw0KPiA+ICh4ODYpOg0KPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiAtDQo+ID4gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gdm1vdmRxYSAoJXJkeCksJXhtbTEN Cj4gPiB2cG1vdnp4d2QgJXhtbTEsJXhtbTANCj4gPiB2cHNybGRxICQweDgsJXhtbTEsJXhtbTEN Cj4gPiB2cG1vdnp4d2QgJXhtbTEsJXhtbTENCj4gPiB2cGFkZGQgJXhtbTEsJXhtbTAsJXhtbTAN Cj4gPiBjbXAgICAgJDB4ZiwlcmF4DQo+ID4gamJlICAgIDB4N2ZmN2EwZGZiMWE5DQo+ID4gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KPiA+IC0NCj4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gPiB3aGlsZSBNYXR0aWFzJyBtZW1jcHkgc29sdXRpb246DQo+ID4gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KPiA+IC0NCj4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Cj4gPiB2bW92ZHF1ICglcmN4KSwleW1tMA0KPiA+IGFkZCAgICAkMHgyMCwlcmN4DQo+ID4gdnBt b3Z6eHdkICV4bW0wLCV5bW0xDQo+ID4gdmV4dHJhY3RpMTI4ICQweDEsJXltbTAsJXhtbTANCj4g PiB2cG1vdnp4d2QgJXhtbTAsJXltbTANCj4gPiB2cGFkZGQgJXltbTAsJXltbTEsJXltbTANCj4g PiB2cGFkZGQgJXltbTAsJXltbTIsJXltbTINCj4gPiBjbXAgICAgJXI5LCVyY3gNCj4gPiBqbmUg ICAgMHg1NTU1NTU1NTYzODANCj4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gLQ0KPiA+IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+IFRodXMgdHdvIGV4dHJhIGluc3Ry dWN0aW9ucyBpbiB0aGUgbG9vcCwgYnV0IEkgc3VzcGVjdCBpdCBtYXkgYmUNCj4gPiBtZW1vcnkg Ym91bmQsIGxlYWRpbmcgdG8gbm8gbWVhc3VyYWJsZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlLg0K PiA+DQo+ID4gQW55IGNvbW1lbnRzPw0KPiA+DQo+ID4gL0VtaWwNCg==