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 2CB52A2EFC for ; Mon, 14 Oct 2019 12:19:34 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A8D161C122; Mon, 14 Oct 2019 12:19:33 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150084.outbound.protection.outlook.com [40.107.15.84]) by dpdk.org (Postfix) with ESMTP id C407E1C11C for ; Mon, 14 Oct 2019 12:19:31 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fcGqiEjEwvBgIl9JTaXAT8kNEl8Ggxy19XkwmHJ0qT/wOEKQwd4fVUf0Lpm6ViS+jcINDbXz7Rk6OR9nmRA1DJPLFLl9WkESjjKNtPOYTZEof4GZmt9p/0isKKA5G6IFVhZLwi0Zo+7daB2/N+v6518K4d9rMFUCegx5KdxqT4Zwn3t5/i+GJdHIsdN63aQGDXfwYqUET37E1d7OmIcN6pLP7sDcWIxJrgBNofu6eE4conkm1bwelrW9dKNltKTUpptN+SdR9Id6JEUQ5H0S2+0pBVSa+twDqXti0x58q/aehrik7Fg6w0MAloINfhdooiWOhuaAVYI5N+BIuQwz+Q== 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=QlWSYsfbd4+iJoXUb/kkVYDuKWn9LnVB/3pM/u0o/2U=; b=d/tHPXLZJjnbcDif8FyGz7IJnM9bXrcb0MR+N6/ei55fkxbEk+tr2C5vA9dksL5fvQJyldaPDg+vekY8VqXU3geJE1z7PKFXzaMbqM7AKo74Oy6UcOcbZz7Eu2Z61/JpJtFlqx5LNcs4X1HWLJJGtQEWDOU+crumAkOBGqj8+03t6oBAjM67xKnZsel7GhOnCSL1xi1BOKwteGaUJQVi3J7M/cB0QwqO/RbWYgthdOu0YFoWodnWpTdCyAnVLlBTZosP2bzgpniTqTrzOPUMADtaYDbd0vtnjAY9XIZXO9471TA/RxqpjMTPTiWQFstMvwhYExtxaMQLKYAbyVop+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QlWSYsfbd4+iJoXUb/kkVYDuKWn9LnVB/3pM/u0o/2U=; b=Dce4Pz6iOkxKpGsq8HElxbM3q56rt5Q/tO30oQvmrY3QjPF5usTNy8og2sMBu3gdlpQGH3Vam/6bjwmu5k6DTaiYbDL2WpvU0lB26Iy9Rgz/1SI0184eXgxEOeFNgwMMhRqFNQEW9o8b0+QH+h3dvUfcEPUqFHd35VdJa3U51Zg= Received: from AM4PR05MB3425.eurprd05.prod.outlook.com (10.171.190.15) by AM4PR05MB3411.eurprd05.prod.outlook.com (10.171.190.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.16; Mon, 14 Oct 2019 10:19:30 +0000 Received: from AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::70a7:a312:cbc6:d178]) by AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::70a7:a312:cbc6:d178%7]) with mapi id 15.20.2347.021; Mon, 14 Oct 2019 10:19:30 +0000 From: Ori Kam To: Andrew Rybchenko , Thomas Monjalon , Ferruh Yigit CC: "dev@dpdk.org" , "jingjing.wu@intel.com" , "stephen@networkplumber.org" Thread-Topic: [PATCH v2 01/14] ethdev: add support for hairpin queue Thread-Index: AQHVffMHybYyw5O7WEitZ70VVWVWEKdUVOhAgAWVJwCAAAlN4A== Date: Mon, 14 Oct 2019 10:19:30 +0000 Message-ID: References: <1569479349-36962-1-git-send-email-orika@mellanox.com> <1570218855-73478-1-git-send-email-orika@mellanox.com> <1570218855-73478-2-git-send-email-orika@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=orika@mellanox.com; x-originating-ip: [185.175.35.255] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7a5ca2e2-b9be-4866-c899-08d7508ffffa x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: AM4PR05MB3411: x-ms-exchange-purlcount: 1 x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-forefront-prvs: 01901B3451 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(376002)(346002)(396003)(39850400004)(366004)(136003)(199004)(189003)(51444003)(13464003)(6436002)(55016002)(3846002)(305945005)(81166006)(33656002)(86362001)(4326008)(7696005)(7736002)(8936002)(76176011)(110136005)(81156014)(6116002)(99286004)(9686003)(6306002)(6246003)(229853002)(8676002)(316002)(30864003)(54906003)(74316002)(76116006)(6506007)(66946007)(66476007)(66556008)(966005)(446003)(11346002)(66446008)(64756008)(14454004)(102836004)(186003)(26005)(71200400001)(486006)(476003)(2906002)(5660300002)(14444005)(25786009)(256004)(45080400002)(71190400001)(52536014)(66066001)(478600001)(53546011)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3411; H:AM4PR05MB3425.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: TPwd6OBaBrD9MdZ4oyfbQpWPj7bSLO3pTJuJ7gVM7ZJU+PhChVw1Pp76NfFZwtvUj079ECmRI4KmL1akjwCNSq7lJ8INwSN/Y6g1Cx08+QipAVoPibDliP9OdkD5Lb/KU4dFsJs855CHk+ueHqP3jQ2Or6KaDpEODpnO798mlR+HaXQ0V4tIF5phABJZ8ItgYuxku5TeDhMk8hAqNCwwg1SM4T9+UGG3sifmnMtrAFwiM/9IprghBz4UY7cxfkygdjc49wJz88fRcsLCtvhQlUSl+oayt1pt7wpFbQY3+adh7rtl5WPqI7ro4hrmfTqSom3QHAUW9trP2alFMFbAHwJKhhrxJCkuGaA7aN4YMTQbgKCOJN4JmCBW2OmPxIVDTqNZbcRlbHHYgajN5+nMru4un9tAx8Pvydtyip3z5Aeu9g9SciTbdMnqXWG6COojK6t8d0yqGIZUoBW9FyAKFQ== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a5ca2e2-b9be-4866-c899-08d7508ffffa X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Oct 2019 10:19:30.0795 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: KEjZgkI0Bn9LGQq+gHqVQWyu+I29vPE2OwMCClV8NLG+sJjJMf6+BVohZ2xTBkz3JH3a1fOlfks5awJ9EkH85w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3411 Subject: Re: [dpdk-dev] [PATCH v2 01/14] ethdev: add support for hairpin queue 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" VGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzLA0KDQpJIHdpbGwgc3RhcnQgd29ya2luZyBvbiBWMw0K DQpPcmkNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBbmRyZXcgUnli Y2hlbmtvIDxhcnliY2hlbmtvQHNvbGFyZmxhcmUuY29tPg0KPiBTZW50OiBNb25kYXksIE9jdG9i ZXIgMTQsIDIwMTkgMTI6MzcgUE0NCj4gVG86IE9yaSBLYW0gPG9yaWthQG1lbGxhbm94LmNvbT47 IFRob21hcyBNb25qYWxvbg0KPiA8dGhvbWFzQG1vbmphbG9uLm5ldD47IEZlcnJ1aCBZaWdpdCA8 ZmVycnVoLnlpZ2l0QGludGVsLmNvbT4NCj4gQ2M6IGRldkBkcGRrLm9yZzsgamluZ2ppbmcud3VA aW50ZWwuY29tOyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZw0KPiBTdWJqZWN0OiBSZTogW1BB VENIIHYyIDAxLzE0XSBldGhkZXY6IGFkZCBzdXBwb3J0IGZvciBoYWlycGluIHF1ZXVlDQo+IA0K PiBIaSBPcmksDQo+IA0KPiBzZWUgbXkgYW5zd2VycyBiZWxvdy4NCj4gDQo+IE9uIDEwLzExLzE5 IDEyOjA3IEFNLCBPcmkgS2FtIHdyb3RlOg0KPiA+IEhpIEFuZHJldywNCj4gPg0KPiA+IFRoYW5r cyBmb3IgeW91ciBjb21tZW50cywNCj4gPg0KPiA+IFBTQiwNCj4gPiBPcmkNCj4gPg0KPiA+PiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBBbmRyZXcgUnliY2hlbmtvIDxh cnliY2hlbmtvQHNvbGFyZmxhcmUuY29tPg0KPiA+PiBTZW50OiBUdWVzZGF5LCBPY3RvYmVyIDgs IDIwMTkgNzoxMSBQTQ0KPiA+PiBUbzogT3JpIEthbSA8b3Jpa2FAbWVsbGFub3guY29tPjsgVGhv bWFzIE1vbmphbG9uDQo+ID4+IDx0aG9tYXNAbW9uamFsb24ubmV0PjsgRmVycnVoIFlpZ2l0IDxm ZXJydWgueWlnaXRAaW50ZWwuY29tPg0KPiA+PiBDYzogZGV2QGRwZGsub3JnOyBqaW5namluZy53 dUBpbnRlbC5jb207IHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnDQo+ID4+IFN1YmplY3Q6IFJl OiBbUEFUQ0ggdjIgMDEvMTRdIGV0aGRldjogYWRkIHN1cHBvcnQgZm9yIGhhaXJwaW4gcXVldWUN Cj4gPj4NCj4gPj4gSGkgT3JpLA0KPiA+Pg0KPiA+PiB0aGFua3MgZm9yIHVwZGF0ZWQgdmVyc2lv bi4gU2VlIG15IG5vdGVzIGJlbG93Lg0KPiA+Pg0KPiA+PiBUaGVyZSBhcmUgZmV3IHN0eWxlIG5v dGVzIGFib3V0IGxpbmUgYnJlYWtzIHdoaWNoIGFyZSBub3QgZGVmaW5lZCBpbg0KPiA+PiBjb2Rp bmcgc3R5bGUuIE9mIGNvdXJzZSwgaXQgbWF5IGJlIGlnbm9yZWQuDQo+ID4+DQo+ID4gSSB3aWxs IGZpeCB3aGF0IEkgY2FuLg0KPiA+DQo+ID4+IE9uIDEwLzQvMTkgMTA6NTQgUE0sIE9yaSBLYW0g d3JvdGU6DQo+ID4+PiBUaGlzIGNvbW1pdCBpbnRyb2R1Y2UgaGFpcnBpbiBxdWV1ZSB0eXBlLg0K PiA+Pj4NCj4gPj4+IFRoZSBoYWlycGluIHF1ZXVlIGluIGJ1aWxkIGZyb20gUnggcXVldWUgYmlu ZGVkIHRvIFR4IHF1ZXVlLg0KPiA+Pj4gSXQgaXMgdXNlZCB0byBvZmZsb2FkIHRyYWZmaWMgY29t aW5nIGZyb20gdGhlIHdpcmUgYW5kIHJlZGlyZWN0IGl0IGJhY2sNCj4gPj4+IHRvIHRoZSB3aXJl Lg0KPiA+Pj4NCj4gPj4+IFRoZXJlIGFyZSAzIG5ldyBmdW5jdGlvbnM6DQo+ID4+PiAtIHJ0ZV9l dGhfZGV2X2hhaXJwaW5fY2FwYWJpbGl0eV9nZXQNCj4gPj4+IC0gcnRlX2V0aF9yeF9oYWlycGlu X3F1ZXVlX3NldHVwDQo+ID4+PiAtIHJ0ZV9ldGhfdHhfaGFpcnBpbl9xdWV1ZV9zZXR1cA0KPiA+ Pj4NCj4gPj4+IEluIG9yZGVyIHRvIHVzZSB0aGUgcXVldWUsIHRoZXJlIGlzIGEgbmVlZCB0byBj cmVhdGUgcnRlX2Zsb3cNCj4gPj4+IHdpdGggcXVldWUgLyBSU1MgYWN0aW9uIHRoYXQgdGFyZ2V0 cyBvbmUgb3IgbW9yZSBvZiB0aGUgUnggcXVldWVzLg0KPiA+Pj4NCj4gPj4+IFNpZ25lZC1vZmYt Ynk6IE9yaSBLYW0gPG9yaWthQG1lbGxhbm94LmNvbT4NCj4gPj4gcnRlX2V0aF9kZXZfW3J0XXhf cXVldWVfc3RvcCgpIHNob3VsZCByZXR1cm4gZXJyb3IgaWYgdXNlZCBmb3IgaGFpcnBpbg0KPiA+ PiBxdWV1ZS4NCj4gPj4gUmlnaHQgbm93IHJ0ZV9ldGhfZGV2X1tydF14X3F1ZXVlX3N0YXJ0KCkg d2lsbCByZXR1cm4gMC4gTm90IHN1cmUgYWJvdXQgaXQuDQo+ID4+IFdoYXQgYWJvdXQgcnRlX2V0 aF9yeF9xdWV1ZV9pbmZvX2dldCgpIGFuZCBydGVfZXRoX3R4X3F1ZXVlX2luZm9fZ2V0KCk/DQo+ ID4+IEFueSBvdGhlciBSeC9UeCBxdWV1ZSBmdW5jdGlvbnM/DQo+ID4+DQo+ID4gSSB3aWxsIGFk ZCBlcnJvciB0byBib3RoIGZ1bmN0aW9ucyAoVHgvUngpDQo+ID4gSSBkb24ndCBzZWUgYW55IG90 aGVyIGZ1bmN0aW9uIChvbmx5IHRoZSBpbmZvX2dldCBhbmQgcXVldWVfc3RvcCkNCj4gPg0KPiA+ Pj4gLS0tDQo+ID4+PiBWMjoNCj4gPj4+ICAgIC0gdXBkYXRlIGFjY29yZGluZyB0byBNTCBjb21t ZW50cy4NCj4gPj4+DQo+ID4+PiAtLS0NCj4gPj4+ICAgIGxpYi9saWJydGVfZXRoZGV2L3J0ZV9l dGhkZXYuYyAgICAgICAgICAgfCAyMTQNCj4gPj4gKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLQ0KPiA+Pj4gICAgbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oICAgICAgICAgICB8 IDEyNiArKysrKysrKysrKysrKysrKysNCj4gPj4+ICAgIGxpYi9saWJydGVfZXRoZGV2L3J0ZV9l dGhkZXZfY29yZS5oICAgICAgfCAgMjcgKysrLQ0KPiA+Pj4gICAgbGliL2xpYnJ0ZV9ldGhkZXYv cnRlX2V0aGRldl92ZXJzaW9uLm1hcCB8ICAgNSArDQo+ID4+PiAgICA0IGZpbGVzIGNoYW5nZWQs IDM2OCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQ0KPiA+Pj4NCj4gPj4+IGRpZmYgLS1n aXQgYS9saWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2LmMgYi9saWIvbGlicnRlX2V0aGRldi9y dGVfZXRoZGV2LmMNCj4gPj4+IGluZGV4IGFmODIzNjAuLmVlOGFmNDIgMTAwNjQ0DQo+ID4+PiAt LS0gYS9saWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2LmMNCj4gPj4+ICsrKyBiL2xpYi9saWJy dGVfZXRoZGV2L3J0ZV9ldGhkZXYuYw0KPiA+Pj4gQEAgLTE3NTIsMTIgKzE3NTIsMTAyIEBAIHN0 cnVjdCBydGVfZXRoX2RldiAqDQo+ID4+PiAgICAJCWlmICghZGV2LT5kYXRhLT5taW5fcnhfYnVm X3NpemUgfHwNCj4gPj4+ICAgIAkJICAgIGRldi0+ZGF0YS0+bWluX3J4X2J1Zl9zaXplID4gbWJw X2J1Zl9zaXplKQ0KPiA+Pj4gICAgCQkJZGV2LT5kYXRhLT5taW5fcnhfYnVmX3NpemUgPSBtYnBf YnVmX3NpemU7DQo+ID4+PiArCQlpZiAoZGV2LT5kYXRhLT5yeF9xdWV1ZV9zdGF0ZVtyeF9xdWV1 ZV9pZF0gPT0NCj4gPj4+ICsJCSAgICBSVEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU4pDQo+ID4+ PiArCQkJZGV2LT5kYXRhLT5yeF9xdWV1ZV9zdGF0ZVtyeF9xdWV1ZV9pZF0gPQ0KPiA+Pj4gKwkJ CQlSVEVfRVRIX1FVRVVFX1NUQVRFX1NUT1BQRUQ7DQo+ID4+IEkgZG9uJ3QgdW5kZXJzdGFuZCBp dC4gV2h5IGlzIHJ0ZV9ldGhfcnhfcXVldWVfc2V0dXAoKSBjaGFuZ2VkPw0KPiA+Pg0KPiA+IFRo aXMgd2FzIGRvbmUgc28gdXNlciBjYW4gcmVzZXQgdGhlIHF1ZXVlIGJhY2sgdG8gbm9ybWFsIHF1 ZXVlLg0KPiANCj4gSSB0aGluayBpdCBzaG91bGQgYmUgZG9uZSBpbiBxdWV1ZSByZWxlYXNlLg0K PiANCj4gPj4+ICAgIAl9DQo+ID4+Pg0KPiA+Pj4gICAgCXJldHVybiBldGhfZXJyKHBvcnRfaWQs IHJldCk7DQo+ID4+PiAgICB9DQo+ID4+Pg0KPiA+Pj4gICAgaW50DQo+ID4+PiArcnRlX2V0aF9y eF9oYWlycGluX3F1ZXVlX3NldHVwKHVpbnQxNl90IHBvcnRfaWQsIHVpbnQxNl90IHJ4X3F1ZXVl X2lkLA0KPiA+Pj4gKwkJCSAgICAgICB1aW50MTZfdCBuYl9yeF9kZXNjLA0KPiA+Pj4gKwkJCSAg ICAgICBjb25zdCBzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NvbmYgKmNvbmYpDQo+ID4+PiArew0K PiA+Pj4gKwlpbnQgcmV0Ow0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldjsNCj4gPj4+ ICsJc3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9jYXAgY2FwOw0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX2V0 aF9kZXZfaW5mbyBkZXZfaW5mbzsNCj4gPj4+ICsJdm9pZCAqKnJ4cTsNCj4gPj4+ICsJaW50IGk7 DQo+ID4+PiArCWludCBjb3VudCA9IDA7DQo+ID4+PiArDQo+ID4+PiArCVJURV9FVEhfVkFMSURf UE9SVElEX09SX0VSUl9SRVQocG9ydF9pZCwgLUVJTlZBTCk7DQo+ID4+PiArDQo+ID4+PiArCWRl diA9ICZydGVfZXRoX2RldmljZXNbcG9ydF9pZF07DQo+ID4+PiArCWlmIChyeF9xdWV1ZV9pZCA+ PSBkZXYtPmRhdGEtPm5iX3J4X3F1ZXVlcykgew0KPiA+Pj4gKwkJUlRFX0VUSERFVl9MT0coRVJS LCAiSW52YWxpZCBSWCBxdWV1ZV9pZD0ldVxuIiwNCj4gPj4gcnhfcXVldWVfaWQpOw0KPiA+Pj4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4+PiArCX0NCj4gPj4+ICsJUlRFX0ZVTkNfUFRSX09SX0VS Ul9SRVQoKmRldi0+ZGV2X29wcy0+ZGV2X2luZm9zX2dldCwgLQ0KPiA+PiBFTk9UU1VQKTsNCj4g Pj4+ICsJUlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29wcy0+aGFpcnBpbl9jYXBf Z2V0LA0KPiA+Pj4gKwkJCQktRU5PVFNVUCk7DQo+ID4+PiArCVJURV9GVU5DX1BUUl9PUl9FUlJf UkVUKCpkZXYtPmRldl9vcHMtDQo+ID4+PiByeF9oYWlycGluX3F1ZXVlX3NldHVwLA0KPiA+Pj4g KwkJCQktRU5PVFNVUCk7DQo+ID4+PiArCXJ0ZV9ldGhfZGV2X2hhaXJwaW5fY2FwYWJpbGl0eV9n ZXQocG9ydF9pZCwgJmNhcCk7DQo+ID4+IFJldHVybiB2YWx1ZSBzaG91bGQgYmUgY2hlY2tlZC4g SXQgbWFrZXPCoCBoYWlycGluX2NhcF9nZXQgY2hlY2sgYWJvdmUNCj4gPj4gdW5uZWNlc3Nhcnku DQo+ID4+DQo+ID4gSSB3aWxsIGFkZCBhIGNoZWNrLg0KPiA+DQo+ID4+PiArCS8qIFVzZSBkZWZh dWx0IHNwZWNpZmllZCBieSBkcml2ZXIsIGlmIG5iX3J4X2Rlc2MgaXMgemVybyAqLw0KPiA+Pj4g KwlpZiAobmJfcnhfZGVzYyA9PSAwKQ0KPiA+Pj4gKwkJbmJfcnhfZGVzYyA9IGNhcC5tYXhfbmJf ZGVzYzsNCj4gPj4+ICsJaWYgKG5iX3J4X2Rlc2MgPiBjYXAubWF4X25iX2Rlc2MpIHsNCj4gPj4+ ICsJCVJURV9FVEhERVZfTE9HKEVSUiwNCj4gPj4+ICsJCQkgICAgICAgIkludmFsaWQgdmFsdWUg Zm9yIG5iX3J4X2Rlc2MoPSVodSksIHNob3VsZCBiZTogIg0KPiA+Pj4gKwkJCSAgICAgICAiPD0g JWh1IiwgbmJfcnhfZGVzYywgY2FwLm1heF9uYl9kZXNjKTsNCj4gPj4+ICsJCXJldHVybiAtRUlO VkFMOw0KPiA+Pj4gKwl9DQo+ID4+PiArCXJldCA9IHJ0ZV9ldGhfZGV2X2luZm9fZ2V0KHBvcnRf aWQsICZkZXZfaW5mbyk7DQo+ID4+PiArCWlmIChyZXQgIT0gMCkNCj4gPj4+ICsJCXJldHVybiBy ZXQ7DQo+ID4+PiArCWlmIChkZXYtPmRhdGEtPmRldl9zdGFydGVkICYmDQo+ID4+PiArCQkhKGRl dl9pbmZvLmRldl9jYXBhICYNCj4gPj4+ICsJCSAgUlRFX0VUSF9ERVZfQ0FQQV9SVU5USU1FX1JY X1FVRVVFX1NFVFVQKSkNCj4gPj4+ICsJCXJldHVybiAtRUJVU1k7DQo+ID4+PiArCWlmIChkZXYt PmRhdGEtPmRldl9zdGFydGVkICYmDQo+ID4+PiArCQkoZGV2LT5kYXRhLT5yeF9xdWV1ZV9zdGF0 ZVtyeF9xdWV1ZV9pZF0gIT0NCj4gPj4+ICsJCSBSVEVfRVRIX1FVRVVFX1NUQVRFX1NUT1BQRUQp KQ0KPiA+Pj4gKwkJcmV0dXJuIC1FQlVTWTsNCj4gPj4+ICsJaWYgKGNvbmYtPnBlZXJfbiA+IGNh cC5tYXhfcnhfMl90eCkgew0KPiA+Pj4gKwkJUlRFX0VUSERFVl9MT0coRVJSLA0KPiA+Pj4gKwkJ CSAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3IgbnVtYmVyIG9mIHBlZXJzKD0laHUpLCAiDQo+ID4+ PiArCQkJICAgICAgICJzaG91bGQgYmU6IDw9ICVodSIsIGNvbmYtPnBlZXJfbiwNCj4gPj4+ICsJ CQkgICAgICAgY2FwLm1heF9yeF8yX3R4KTsNCj4gPj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ Pj4gKwl9DQo+ID4+PiArCWlmIChjb25mLT5wZWVyX24gPT0gMCkgew0KPiA+Pj4gKwkJUlRFX0VU SERFVl9MT0coRVJSLA0KPiA+Pj4gKwkJCSAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3IgbnVtYmVy IG9mIHBlZXJzKD0laHUpLCAiDQo+ID4+PiArCQkJICAgICAgICJzaG91bGQgYmU6ID4gMCIsIGNv bmYtPnBlZXJfbik7DQo+ID4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPj4+ICsJfQ0KPiA+Pj4g KwlpZiAoY2FwLm1heF9uX3F1ZXVlcyAhPSAtMSkgew0KPiA+Pj4gKwkJZm9yIChpID0gMDsgaSA8 IGRldi0+ZGF0YS0+bmJfcnhfcXVldWVzOyBpKyspIHsNCj4gPj4+ICsJCQlpZiAoZGV2LT5kYXRh LT5yeF9xdWV1ZV9zdGF0ZVtpXSA9PQ0KPiA+Pj4gKwkJCSAgICBSVEVfRVRIX1FVRVVFX1NUQVRF X0hBSVJQSU4pDQo+ID4+PiArCQkJCWNvdW50Kys7DQo+ID4+PiArCQl9DQo+ID4+PiArCQlpZiAo Y291bnQgPiBjYXAubWF4X25fcXVldWVzKSB7DQo+ID4+PiArCQkJUlRFX0VUSERFVl9MT0coRVJS LA0KPiA+Pj4gKwkJCQkgICAgICAgIlRvIG1hbnkgUnggaGFpcnBpbiBxdWV1ZXMgJWQiLCBjb3Vu dCk7DQo+ID4+PiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4+PiArCQl9DQo+ID4+PiArCX0NCj4g Pj4+ICsJcnhxID0gZGV2LT5kYXRhLT5yeF9xdWV1ZXM7DQo+ID4+PiArCWlmIChyeHFbcnhfcXVl dWVfaWRdKSB7DQo+ID4+IFBsZWFzZSwgY29tcGFyZSB3aXRoIE5VTEwgKEkga25vdyB0aGF0IHJ0 ZV9ldGhfcnhfcXVldWVfc2V0dXAoKSBkb2VzDQo+ID4+IGxpa2UgYWJvdmUpLg0KPiA+Pg0KPiA+ IE8uSy4gSSB3aWxsIGNoYW5nZSwgYnV0IG1heSBJIGFzayB3aHk/IElmIGluIHRoZSBydGVfZXRo X3J4X3F1ZXVlX3NldHVwDQo+IGZ1bmN0aW9uIGl0IGlzIHdyaXR0ZW4gdGhlIHNhbWUgd2F5LA0K PiA+IHdoeSBkbyB5b3Ugd2FudCB0aGlzIGNoYW5nZT8NCj4gDQo+IGh0dHBzOi8vZXVyMDMuc2Fm ZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRmRvYy5kcGRr Lg0KPiBvcmclMkZndWlkZXMlMkZjb250cmlidXRpbmclMkZjb2Rpbmdfc3R5bGUuaHRtbCUyM251 bGwtDQo+IHBvaW50ZXJzJmFtcDtkYXRhPTAyJTdDMDElN0NvcmlrYSU0MG1lbGxhbm94LmNvbSU3 QzAyMmNkOTUzOTY0ZjRhMg0KPiAwZDUwNTA4ZDc1MDhhMjU5ZiU3Q2E2NTI5NzFjN2QyZTRkOWJh NmE0ZDE0OTI1NmY0NjFiJTdDMCU3QzAlN0MNCj4gNjM3MDY2NDI2NTg0MDI5NjI5JmFtcDtzZGF0 YT1JQk9vNkF5VEduNERpTkxIQkNDNU1id0prUnVxZHNHcWRybA0KPiB2bTB4UzlWdyUzRCZhbXA7 cmVzZXJ2ZWQ9MA0KPiANCg0KDQpUaGFua3MsDQoNCj4gPj4+ICsJCVJURV9GVU5DX1BUUl9PUl9F UlJfUkVUKCpkZXYtPmRldl9vcHMtDQo+ID4+PiByeF9xdWV1ZV9yZWxlYXNlLA0KPiA+Pj4gKwkJ CQkJLUVOT1RTVVApOw0KPiA+Pj4gKwkJKCpkZXYtPmRldl9vcHMtPnJ4X3F1ZXVlX3JlbGVhc2Up KHJ4cVtyeF9xdWV1ZV9pZF0pOw0KPiA+Pj4gKwkJcnhxW3J4X3F1ZXVlX2lkXSA9IE5VTEw7DQo+ ID4+PiArCX0NCj4gPj4+ICsJcmV0ID0gKCpkZXYtPmRldl9vcHMtPnJ4X2hhaXJwaW5fcXVldWVf c2V0dXApKGRldiwgcnhfcXVldWVfaWQsDQo+ID4+PiArCQkJCQkJICAgICAgbmJfcnhfZGVzYywg Y29uZik7DQo+ID4+PiArCWlmICghcmV0KQ0KPiA+PiBQbGVhc2UsIGNvbXBhcmUgd2l0aCAwDQo+ ID4+DQo+ID4gV2lsbCBkbywgYnV0IGFnYWluIGp1c3QgZm9yIG15IGtub3dsZWRnZSB3aHk/DQo+ IA0KPiBodHRwczovL2V1cjAzLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9 aHR0cHMlM0ElMkYlMkZkb2MuZHBkay4NCj4gb3JnJTJGZ3VpZGVzJTJGY29udHJpYnV0aW5nJTJG Y29kaW5nX3N0eWxlLmh0bWwlMjNmdW5jdGlvbi0NCj4gY2FsbHMmYW1wO2RhdGE9MDIlN0MwMSU3 Q29yaWthJTQwbWVsbGFub3guY29tJTdDMDIyY2Q5NTM5NjRmNGEyMGQ1DQo+IDA1MDhkNzUwOGEy NTlmJTdDYTY1Mjk3MWM3ZDJlNGQ5YmE2YTRkMTQ5MjU2ZjQ2MWIlN0MwJTdDMCU3QzYzNw0KPiAw NjY0MjY1ODQwMjk2MjkmYW1wO3NkYXRhPUc4WnhFV0ZGc3Yxa0xXYzZMN3NLVDhPNkNTaUJjajVa dXdRcW1LDQo+IDBRNm5ZJTNEJmFtcDtyZXNlcnZlZD0wDQo+IA0KDQpUaGFua3MsDQoNCj4gPj4+ ICsJCWRldi0+ZGF0YS0+cnhfcXVldWVfc3RhdGVbcnhfcXVldWVfaWRdID0NCj4gPj4+ICsJCQlS VEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU47DQo+ID4+PiArCXJldHVybiBldGhfZXJyKHBvcnRf aWQsIHJldCk7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK2ludA0KPiA+Pj4gICAgcnRlX2V0 aF90eF9xdWV1ZV9zZXR1cCh1aW50MTZfdCBwb3J0X2lkLCB1aW50MTZfdCB0eF9xdWV1ZV9pZCwN Cj4gPj4+ICAgIAkJICAgICAgIHVpbnQxNl90IG5iX3R4X2Rlc2MsIHVuc2lnbmVkIGludCBzb2Nr ZXRfaWQsDQo+ID4+PiAgICAJCSAgICAgICBjb25zdCBzdHJ1Y3QgcnRlX2V0aF90eGNvbmYgKnR4 X2NvbmYpDQo+ID4+PiBAQCAtMTg1MSw5ICsxOTQxLDk3IEBAIHN0cnVjdCBydGVfZXRoX2RldiAq DQo+ID4+PiAgICAJCQlfX2Z1bmNfXyk7DQo+ID4+PiAgICAJCXJldHVybiAtRUlOVkFMOw0KPiA+ Pj4gICAgCX0NCj4gPj4+ICsJcmV0ID0gKCpkZXYtPmRldl9vcHMtPnR4X3F1ZXVlX3NldHVwKShk ZXYsIHR4X3F1ZXVlX2lkLCBuYl90eF9kZXNjLA0KPiA+Pj4gKwkJCQkJICAgICAgc29ja2V0X2lk LCAmbG9jYWxfY29uZik7DQo+ID4+PiArCWlmICghcmV0KQ0KPiA+Pj4gKwkJaWYgKGRldi0+ZGF0 YS0+dHhfcXVldWVfc3RhdGVbdHhfcXVldWVfaWRdID09DQo+ID4+PiArCQkgICAgUlRFX0VUSF9R VUVVRV9TVEFURV9IQUlSUElOKQ0KPiA+Pj4gKwkJCWRldi0+ZGF0YS0+dHhfcXVldWVfc3RhdGVb dHhfcXVldWVfaWRdID0NCj4gPj4+ICsJCQkJUlRFX0VUSF9RVUVVRV9TVEFURV9TVE9QUEVEOw0K PiA+PiBXaHkgaXMgaXQgY2hhbmdlZD8NCj4gPj4NCj4gPiBMaWtlIGluIHRoZSBSeCB0byBlbmFi bGUgc3dpdGNoaW5nIGJhY2sgdG8gbm9ybWFsIHF1ZXVlLg0KPiA+DQo+ID4+PiArCXJldHVybiBl dGhfZXJyKHBvcnRfaWQsIHJldCk7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK2ludA0KPiA+ Pj4gK3J0ZV9ldGhfdHhfaGFpcnBpbl9xdWV1ZV9zZXR1cCh1aW50MTZfdCBwb3J0X2lkLCB1aW50 MTZfdCB0eF9xdWV1ZV9pZCwNCj4gPj4+ICsJCQkgICAgICAgdWludDE2X3QgbmJfdHhfZGVzYywN Cj4gPj4+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9jb25mICpjb25m KQ0KPiA+Pj4gK3sNCj4gPj4+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXY7DQo+ID4+PiArCXN0 cnVjdCBydGVfZXRoX2hhaXJwaW5fY2FwIGNhcDsNCj4gPj4+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2 X2luZm8gZGV2X2luZm87DQo+ID4+PiArCXZvaWQgKip0eHE7DQo+ID4+PiArCWludCBpOw0KPiA+ Pj4gKwlpbnQgY291bnQgPSAwOw0KPiA+Pj4gKwlpbnQgcmV0Ow0KPiA+Pj4NCj4gPj4+IC0JcmV0 dXJuIGV0aF9lcnIocG9ydF9pZCwgKCpkZXYtPmRldl9vcHMtPnR4X3F1ZXVlX3NldHVwKShkZXYs DQo+ID4+PiAtCQkgICAgICAgdHhfcXVldWVfaWQsIG5iX3R4X2Rlc2MsIHNvY2tldF9pZCwgJmxv Y2FsX2NvbmYpKTsNCj4gPj4+ICsJUlRFX0VUSF9WQUxJRF9QT1JUSURfT1JfRVJSX1JFVChwb3J0 X2lkLCAtRUlOVkFMKTsNCj4gPj4+ICsJZGV2ID0gJnJ0ZV9ldGhfZGV2aWNlc1twb3J0X2lkXTsN Cj4gPj4+ICsJaWYgKHR4X3F1ZXVlX2lkID49IGRldi0+ZGF0YS0+bmJfdHhfcXVldWVzKSB7DQo+ ID4+PiArCQlSVEVfRVRIREVWX0xPRyhFUlIsICJJbnZhbGlkIFRYIHF1ZXVlX2lkPSV1XG4iLA0K PiA+PiB0eF9xdWV1ZV9pZCk7DQo+ID4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPj4+ICsJfQ0K PiA+Pj4gKwlSVEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgqZGV2LT5kZXZfb3BzLT5kZXZfaW5mb3Nf Z2V0LCAtDQo+ID4+IEVOT1RTVVApOw0KPiA+Pj4gKwlSVEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgq ZGV2LT5kZXZfb3BzLT5oYWlycGluX2NhcF9nZXQsDQo+ID4+PiArCQkJCS1FTk9UU1VQKTsNCj4g Pj4+ICsJUlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29wcy0NCj4gPj4+IHR4X2hh aXJwaW5fcXVldWVfc2V0dXAsDQo+ID4+PiArCQkJCS1FTk9UU1VQKTsNCj4gPj4+ICsJcnRlX2V0 aF9kZXZfaW5mb19nZXQocG9ydF9pZCwgJmRldl9pbmZvKTsNCj4gPj4gcmV0dXJuIHZhbHVlIHNo b3VsZCBiZSBjaGVja2VkLg0KPiA+Pg0KPiA+Pj4gKwlydGVfZXRoX2Rldl9oYWlycGluX2NhcGFi aWxpdHlfZ2V0KHBvcnRfaWQsICZjYXApOw0KPiA+PiBDaGVjayByZXR1cm4gdmFsdWUgYW5kIHlv dSBjYW4gcmVseSBvbsKgIGhhaXJwaW5fY2FwX2dldCBjaGVjayBpbnNpZGUuDQo+ID4+DQo+ID4g U2FtZSBhcyBhYm92ZSBJIHdpbGwgYWRkIGEgY2hlY2sgYnV0IEknbSBub3Qgc3VyZSBJIHVuZGVy c3RhbmQgdGhlIHNlY29uZA0KPiBwYXJ0DQo+ID4gSnVzdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0 YW5kLCB5b3UgYXJlIHRhbGtpbmcgYWJvdXQgdGhhdCBpZiBJIGRvbid0IGNoZWNrDQo+ID4gdGhl IHJldHVybiB2YWx1ZSBJJ20gbm90IGFsbG93ZWQgdG8gY2hlY2sgdGhlIGNhcCByaWdodD8NCj4g DQo+IEl0IGlzIGFib3V0IGRldl9vcHMtPmhhaXJwaW5fY2FwX2dldCB2cyBOVUxMIGNoZWNrLg0K PiBJdCBpcyBjaGVja2VkIGluc2lkZSBydGVfZXRoX2Rldl9oYWlycGluX2NhcGFiaWxpdHlfZ2V0 KCkgYW5kIHdlIHNob3VsZA0KPiBub3QgZHVwbGljYXRlIHRoZSBjaGVjayBhYm92ZS4NCj4gDQoN Ck8uSy4NCg0KPiA+Pj4gKwkvKiBVc2UgZGVmYXVsdCBzcGVjaWZpZWQgYnkgZHJpdmVyLCBpZiBu Yl90eF9kZXNjIGlzIHplcm8gKi8NCj4gPj4+ICsJaWYgKG5iX3R4X2Rlc2MgPT0gMCkNCj4gPj4+ ICsJCW5iX3R4X2Rlc2MgPSBjYXAubWF4X25iX2Rlc2M7DQo+ID4+PiArCWlmIChuYl90eF9kZXNj ID4gY2FwLm1heF9uYl9kZXNjKSB7DQo+ID4+PiArCQlSVEVfRVRIREVWX0xPRyhFUlIsDQo+ID4+ PiArCQkJICAgICAgICJJbnZhbGlkIHZhbHVlIGZvciBuYl90eF9kZXNjKD0laHUpLCBzaG91bGQg YmU6ICINCj4gPj4+ICsJCQkgICAgICAgIjw9ICVodSIsIG5iX3R4X2Rlc2MsIGNhcC5tYXhfbmJf ZGVzYyk7DQo+ID4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKwlpZiAo Y29uZi0+cGVlcl9uID4gY2FwLm1heF90eF8yX3J4KSB7DQo+ID4+PiArCQlSVEVfRVRIREVWX0xP RyhFUlIsDQo+ID4+PiArCQkJICAgICAgICJJbnZhbGlkIHZhbHVlIGZvciBudW1iZXIgb2YgcGVl cnMoPSVodSksICINCj4gPj4+ICsJCQkgICAgICAgInNob3VsZCBiZTogPD0gJWh1IiwgY29uZi0+ cGVlcl9uLA0KPiA+Pj4gKwkJCSAgICAgICBjYXAubWF4X3R4XzJfcngpOw0KPiA+Pj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4+PiArCX0NCj4gPj4+ICsJaWYgKGNvbmYtPnBlZXJfbiA9PSAwKSB7 DQo+ID4+PiArCQlSVEVfRVRIREVWX0xPRyhFUlIsDQo+ID4+PiArCQkJICAgICAgICJJbnZhbGlk IHZhbHVlIGZvciBudW1iZXIgb2YgcGVlcnMoPSVodSksICINCj4gPj4+ICsJCQkgICAgICAgInNo b3VsZCBiZTogPiAwIiwgY29uZi0+cGVlcl9uKTsNCj4gPj4+ICsJCXJldHVybiAtRUlOVkFMOw0K PiA+Pj4gKwl9DQo+ID4+PiArCWlmIChjYXAubWF4X25fcXVldWVzICE9IC0xKSB7DQo+ID4+PiAr CQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5kYXRhLT5uYl90eF9xdWV1ZXM7IGkrKykgew0KPiA+Pj4g KwkJCWlmIChkZXYtPmRhdGEtPnR4X3F1ZXVlX3N0YXRlW2ldID09DQo+ID4+PiArCQkJICAgIFJU RV9FVEhfUVVFVUVfU1RBVEVfSEFJUlBJTikNCj4gPj4+ICsJCQkJY291bnQrKzsNCj4gPj4+ICsJ CX0NCj4gPj4+ICsJCWlmIChjb3VudCA+IGNhcC5tYXhfbl9xdWV1ZXMpIHsNCj4gPj4+ICsJCQlS VEVfRVRIREVWX0xPRyhFUlIsDQo+ID4+PiArCQkJCSAgICAgICAiVG8gbWFueSBSeCBoYWlycGlu IHF1ZXVlcyAlZCIsIGNvdW50KTsNCj4gPj4+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPj4+ICsJ CX0NCj4gPj4+ICsJfQ0KPiA+Pj4gKwlpZiAoZGV2LT5kYXRhLT5kZXZfc3RhcnRlZCAmJg0KPiA+ Pj4gKwkJIShkZXZfaW5mby5kZXZfY2FwYSAmDQo+ID4+PiArCQkgIFJURV9FVEhfREVWX0NBUEFf UlVOVElNRV9UWF9RVUVVRV9TRVRVUCkpDQo+ID4+PiArCQlyZXR1cm4gLUVCVVNZOw0KPiA+Pj4g KwlpZiAoZGV2LT5kYXRhLT5kZXZfc3RhcnRlZCAmJg0KPiA+Pj4gKwkJKGRldi0+ZGF0YS0+dHhf cXVldWVfc3RhdGVbdHhfcXVldWVfaWRdICE9DQo+ID4+PiArCQkgUlRFX0VUSF9RVUVVRV9TVEFU RV9TVE9QUEVEKSkNCj4gPj4+ICsJCXJldHVybiAtRUJVU1k7DQo+ID4+PiArCXR4cSA9IGRldi0+ ZGF0YS0+dHhfcXVldWVzOw0KPiA+Pj4gKwlpZiAodHhxW3R4X3F1ZXVlX2lkXSkgew0KPiA+PiBQ bGVhc2UsIGNvbXBhcmUgd2l0aCBOVUxMDQo+ID4+DQo+ID4gTy5LLg0KPiA+DQo+ID4+PiArCQlS VEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgqZGV2LT5kZXZfb3BzLQ0KPiA+Pj4gdHhfcXVldWVfcmVs ZWFzZSwNCj4gPj4+ICsJCQkJCS1FTk9UU1VQKTsNCj4gPj4+ICsJCSgqZGV2LT5kZXZfb3BzLT50 eF9xdWV1ZV9yZWxlYXNlKSh0eHFbdHhfcXVldWVfaWRdKTsNCj4gPj4+ICsJCXR4cVt0eF9xdWV1 ZV9pZF0gPSBOVUxMOw0KPiA+Pj4gKwl9DQo+ID4+PiArCXJldCA9ICgqZGV2LT5kZXZfb3BzLT50 eF9oYWlycGluX3F1ZXVlX3NldHVwKQ0KPiA+Pj4gKwkJKGRldiwgdHhfcXVldWVfaWQsIG5iX3R4 X2Rlc2MsIGNvbmYpOw0KPiA+Pj4gKwlpZiAoIXJldCkNCj4gPj4gUGxlYXNlLCBjb21wYXJlIHdp dGggMA0KPiA+Pg0KPiA+IE8uSy4NCj4gPg0KPiA+Pj4gKwkJZGV2LT5kYXRhLT50eF9xdWV1ZV9z dGF0ZVt0eF9xdWV1ZV9pZF0gPQ0KPiA+Pj4gKwkJCVJURV9FVEhfUVVFVUVfU1RBVEVfSEFJUlBJ TjsNCj4gPj4+ICsJcmV0dXJuIGV0aF9lcnIocG9ydF9pZCwgcmV0KTsNCj4gPj4+ICAgIH0NCj4g Pj4+DQo+ID4+PiAgICB2b2lkDQo+ID4+PiBAQCAtMzk4MSwxMiArNDE1OSwyMCBAQCBpbnQgcnRl X2V0aF9zZXRfcXVldWVfcmF0ZV9saW1pdCh1aW50MTZfdA0KPiA+PiBwb3J0X2lkLCB1aW50MTZf dCBxdWV1ZV9pZHgsDQo+ID4+PiAgICAJcnRlX2Vycm5vID0gRU5PVFNVUDsNCj4gPj4+ICAgIAly ZXR1cm4gTlVMTDsNCj4gPj4+ICAgICNlbmRpZg0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXYg KmRldjsNCj4gPj4+ICsNCj4gPj4+ICAgIAkvKiBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzICovDQo+ ID4+PiAgICAJaWYgKCFydGVfZXRoX2Rldl9pc192YWxpZF9wb3J0KHBvcnRfaWQpIHx8IGZuID09 IE5VTEwgfHwNCj4gPj4+ICAgIAkJICAgIHF1ZXVlX2lkID49IHJ0ZV9ldGhfZGV2aWNlc1twb3J0 X2lkXS5kYXRhLT5uYl9yeF9xdWV1ZXMpIHsNCj4gPj4+ICAgIAkJcnRlX2Vycm5vID0gRUlOVkFM Ow0KPiA+Pj4gICAgCQlyZXR1cm4gTlVMTDsNCj4gPj4+ICAgIAl9DQo+ID4+PiArCWRldiA9ICZy dGVfZXRoX2RldmljZXNbcG9ydF9pZF07DQo+ID4+PiArCWlmIChkZXYtPmRhdGEtPnJ4X3F1ZXVl X3N0YXRlW3F1ZXVlX2lkXSA9PQ0KPiA+Pj4gKwkgICAgUlRFX0VUSF9RVUVVRV9TVEFURV9IQUlS UElOKSB7DQo+ID4+IEl0IGxvb2tzIGxpa2UgbGluZSBicmVhayBpcyBub3QgcmVxdWlyZWQgYWJv dmUuIEp1c3QgdG8gbWFrZSBjb2RlIGEgYml0DQo+ID4+IHNob3J0ZXIuDQo+ID4+DQo+ID4gV2ls bCBmaXggaWYgcG9zc2libGUuDQo+ID4NCj4gPj4+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4g Pj4+ICsJCXJldHVybiBOVUxMOw0KPiA+Pj4gKwl9DQo+ID4+PiAgICAJc3RydWN0IHJ0ZV9ldGhf cnh0eF9jYWxsYmFjayAqY2IgPSBydGVfem1hbGxvYyhOVUxMLCBzaXplb2YoKmNiKSwgMCk7DQo+ ID4+Pg0KPiA+Pj4gICAgCWlmIChjYiA9PSBOVUxMKSB7DQo+ID4+PiBAQCAtNDA1OCw2ICs0MjQ0 LDggQEAgaW50IHJ0ZV9ldGhfc2V0X3F1ZXVlX3JhdGVfbGltaXQodWludDE2X3QNCj4gcG9ydF9p ZCwNCj4gPj4gdWludDE2X3QgcXVldWVfaWR4LA0KPiA+Pj4gICAgCXJ0ZV9lcnJubyA9IEVOT1RT VVA7DQo+ID4+PiAgICAJcmV0dXJuIE5VTEw7DQo+ID4+PiAgICAjZW5kaWYNCj4gPj4+ICsJc3Ry dWN0IHJ0ZV9ldGhfZGV2ICpkZXY7DQo+ID4+PiArDQo+ID4+PiAgICAJLyogY2hlY2sgaW5wdXQg cGFyYW1ldGVycyAqLw0KPiA+Pj4gICAgCWlmICghcnRlX2V0aF9kZXZfaXNfdmFsaWRfcG9ydChw b3J0X2lkKSB8fCBmbiA9PSBOVUxMIHx8DQo+ID4+PiAgICAJCSAgICBxdWV1ZV9pZCA+PSBydGVf ZXRoX2RldmljZXNbcG9ydF9pZF0uZGF0YS0+bmJfdHhfcXVldWVzKSB7DQo+ID4+PiBAQCAtNDA2 NSw2ICs0MjUzLDEzIEBAIGludCBydGVfZXRoX3NldF9xdWV1ZV9yYXRlX2xpbWl0KHVpbnQxNl90 DQo+ID4+IHBvcnRfaWQsIHVpbnQxNl90IHF1ZXVlX2lkeCwNCj4gPj4+ICAgIAkJcmV0dXJuIE5V TEw7DQo+ID4+PiAgICAJfQ0KPiA+Pj4NCj4gPj4+ICsJZGV2ID0gJnJ0ZV9ldGhfZGV2aWNlc1tw b3J0X2lkXTsNCj4gPj4+ICsJaWYgKGRldi0+ZGF0YS0+dHhfcXVldWVfc3RhdGVbcXVldWVfaWRd ID09DQo+ID4+PiArCSAgICBSVEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU4pIHsNCj4gPj4gSXQg bG9va3MgbGlrZSBsaW5lIGJyZWFrIGlzIG5vdCByZXF1aXJlZCBhYm92ZS4gSnVzdCB0byBtYWtl IGNvZGUgYSBiaXQNCj4gPj4gc2hvcnRlci4NCj4gPj4NCj4gPiBXaWxsIGZpeC4NCj4gPg0KPiA+ Pj4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+Pj4gKwkJcmV0dXJuIE5VTEw7DQo+ID4+PiAr CX0NCj4gPj4+ICsNCj4gPj4+ICAgIAlzdHJ1Y3QgcnRlX2V0aF9yeHR4X2NhbGxiYWNrICpjYiA9 IHJ0ZV96bWFsbG9jKE5VTEwsIHNpemVvZigqY2IpLCAwKTsNCj4gPj4+DQo+ID4+PiAgICAJaWYg KGNiID09IE5VTEwpIHsNCj4gPj4+IEBAIC00NTEwLDYgKzQ3MDUsMjEgQEAgaW50IHJ0ZV9ldGhf c2V0X3F1ZXVlX3JhdGVfbGltaXQodWludDE2X3QNCj4gPj4gcG9ydF9pZCwgdWludDE2X3QgcXVl dWVfaWR4LA0KPiA+Pj4gICAgfQ0KPiA+Pj4NCj4gPj4+ICAgIGludA0KPiA+Pj4gK3J0ZV9ldGhf ZGV2X2hhaXJwaW5fY2FwYWJpbGl0eV9nZXQodWludDE2X3QgcG9ydF9pZCwNCj4gPj4+ICsJCQkJ ICAgc3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9jYXAgKmNhcCkNCj4gPj4+ICt7DQo+ID4+PiArCXN0 cnVjdCBydGVfZXRoX2RldiAqZGV2Ow0KPiA+Pj4gKw0KPiA+Pj4gKwlSVEVfRVRIX1ZBTElEX1BP UlRJRF9PUl9FUlJfUkVUKHBvcnRfaWQsIC1FSU5WQUwpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlkZXYg PSAmcnRlX2V0aF9kZXZpY2VzW3BvcnRfaWRdOw0KPiA+Pj4gKwlSVEVfRlVOQ19QVFJfT1JfRVJS X1JFVCgqZGV2LT5kZXZfb3BzLT5oYWlycGluX2NhcF9nZXQsDQo+ID4+PiArCQkJCS1FTk9UU1VQ KTsNCj4gPj4gSSB0aGluayBpdCB3b3VsZCBiZSB1c2VmdWwgdG8gbWVtc2V0KCkgY2FwIHdpdGgg MCB0byBiZSBzdXJlIHRoYXQgaXQgaXMNCj4gPj4gaW5pdGlhbGl6ZWQuDQo+ID4+DQo+ID4gTy5L IGJ1dCBpZiB3ZSBmb2xsb3cgeW91ciBjb21tZW50cyBmcm9tIGFib3ZlLCB0aGUgcmVzdWx0IGlz IG5vdCB2YWxpZCBpZiB3ZQ0KPiByZXR1cm4NCj4gPiBlcnJvciwgc28gaXQgaXMgbm90IGEgbXVz dCwgYnV0IGxpa2UgSSBzYWlkIEkgZG9uJ3QgY2FyZSB0byBhZGQgaXQuDQo+ID4NCj4gPj4+ICsJ cmV0dXJuIGV0aF9lcnIocG9ydF9pZCwgKCpkZXYtPmRldl9vcHMtPmhhaXJwaW5fY2FwX2dldCkN Cj4gPj4+ICsJCSAgICAgICAoZGV2LCBjYXApKTsNCj4gPj4NCj4gPj4gUGxlYXNlLCBjb25zaWRl ciB0byBhdm9pZCBsaW5lIGJyZWFrcyBhYm92ZSB0byBtYWtlIGNvZGUgYSBiaXQgc2hvcnRlci4N Cj4gPj4gT2YgY291cnNlLCBpdCBzaG91bGQgbm90IGV4Y2VlZCBsaW5lIGxlbmd0aCBsaW1pdC4N Cj4gPj4NCj4gPiBXaWxsIGNoZWNrLg0KPiA+DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK2lu dA0KPiA+Pj4gICAgcnRlX2V0aF9kZXZfcG9vbF9vcHNfc3VwcG9ydGVkKHVpbnQxNl90IHBvcnRf aWQsIGNvbnN0IGNoYXIgKnBvb2wpDQo+ID4+PiAgICB7DQo+ID4+PiAgICAJc3RydWN0IHJ0ZV9l dGhfZGV2ICpkZXY7DQo+ID4+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0 aGRldi5oIGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oDQo+ID4+PiBpbmRleCBkOTM3 ZmI0Li4yOWRjZmVhIDEwMDY0NA0KPiA+Pj4gLS0tIGEvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0 aGRldi5oDQo+ID4+PiArKysgYi9saWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2LmgNCj4gPj4+ IEBAIC04MDQsNiArODA0LDQ2IEBAIHN0cnVjdCBydGVfZXRoX3R4Y29uZiB7DQo+ID4+PiAgICB9 Ow0KPiA+Pj4NCj4gPj4+ICAgIC8qKg0KPiA+Pj4gKyAqIEB3YXJuaW5nDQo+ID4+PiArICogQGIg RVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVkLCB3aXRob3V0 IHByaW9yDQo+ID4+IG5vdGljZQ0KPiA+Pj4gKyAqDQo+ID4+PiArICogQSBzdHJ1Y3R1cmUgdXNl ZCB0byByZXR1cm4gdGhlIGhhaXJwaW4gY2FwYWJpbGl0aWVzIHRoYXQgYXJlIHN1cHBvcnRkLg0K PiA+PiBzdXBwb3J0ZCAtPiBzdXBwb3J0ZWQNCj4gPj4NCj4gPiBXaWxsIGZpeC4NCj4gPg0KPiA+ Pj4gKyAqLw0KPiA+Pj4gK3N0cnVjdCBydGVfZXRoX2hhaXJwaW5fY2FwIHsNCj4gPj4+ICsJaW50 MTZfdCBtYXhfbl9xdWV1ZXM7DQo+ID4+PiArCS8qKjwgVGhlIG1heCBudW1iZXIgb2YgaGFpcnBp biBxdWV1ZXNpLiAtMSBubyBsaW1pdC4gKi8NCj4gPj4gSSdtIG5vdCBzdXJlIHRoYXQgSSBsaWtl IHR5cGUgZGlmZmVyZW5jZSBmcm9tIG1heF9yeF9xdWV1ZXMgaGVyZS4NCj4gPj4gSSB0aGluayBp dCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIHVpbnQxNl90LiBJIHdvdWxkIHNheSB0aGVyZSBpcyBw b2ludA0KPiA+PiB0byBoaWdobGlnaHQgbm8gbGltaXQgKGZpcnN0IG9mIGFsbCBJJ20gbm90IHN1 cmUgdGhhdCBpdCBtYWtlcyBzZW5zZSwNCj4gPj4gc2Vjb25kLCBVSU5UMTZfTUFYIHdpbGwgb2J2 aW91c2x5IGRvIHRoZSBqb2IgaW4gdWludDE2X3QuDQo+ID4+DQo+ID4+IElzIGl0IGJvdGggUngg YW5kIFR4Pw0KPiA+Pg0KPiA+Pj4gKwlpbnQxNl90IG1heF9yeF8yX3R4Ow0KPiA+Pj4gKwkvKio8 IE1heCBudW1iZXIgb2YgUnggcXVldWVzIHRvIGJlIGNvbm5lY3RlZCB0byBvbmUgVHggcXVldWUu ICovDQo+ID4+PiArCWludDE2X3QgbWF4X3R4XzJfcng7DQo+ID4+PiArCS8qKjwgTWF4IG51bWJl ciBvZiBUeCBxdWV1ZXMgdG8gYmUgY29ubmVjdGVkIHRvIG9uZSBSeCBxdWV1ZS4gKi8NCj4gPj4g SSB3b3VsZCBwcmVmZXIgdG8gaGF2ZSB1aW50MTZfdCBoZXJlIGFzIHdlbGwuIE1haW5seSBmb3Ig Y29uc2lzdGVuY3kuDQo+ID4+DQo+ID4gQWdyZWUsIHdpbGwgZml4LA0KPiA+DQo+ID4+PiArCXVp bnQxNl90IG1heF9uYl9kZXNjOyAvKio8IFRoZSBtYXggbnVtIG9mIGRlc2NyaXB0b3JzLiAqLw0K PiA+PiBJcyBpdCBjb21tb24gZm9yIFJ4IGFuZCBUeD8gV2hhdCBhYm91dCBtaW4/DQo+ID4+DQo+ ID4gSSB0aGluayBtaW4gaXMgYWx3YXlzIDEsIGJ5ICBkZWZpbml0aW9uLg0KPiANCj4gT0sNCj4g DQo+ID4+PiArfTsNCj4gPj4+ICsNCj4gPj4+ICsjZGVmaW5lIFJURV9FVEhfTUFYX0hBSVJQSU5f UEVFUlMgMzINCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgKiBAd2FybmluZw0KPiA+Pj4g KyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwg d2l0aG91dCBwcmlvcg0KPiA+PiBub3RpY2UNCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIEEgc3RydWN0 dXJlIHVzZWQgdG8gaG9sZCBoYWlycGluIHBlZXIgZGF0YS4NCj4gPj4+ICsgKi8NCj4gPj4+ICtz dHJ1Y3QgcnRlX2V0aF9oYWlycGluX3BlZXIgew0KPiA+Pj4gKwl1aW50MTZfdCBwb3J0OyAvKio8 IFBlZXIgcG9ydC4gKi8NCj4gPj4+ICsJdWludDE2X3QgcXVldWU7IC8qKjwgUGVlciBxdWV1ZS4g Ki8NCj4gPj4+ICt9Ow0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAqIEB3YXJuaW5nDQo+ ID4+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1v dmVkLCB3aXRob3V0IHByaW9yDQo+ID4+IG5vdGljZQ0KPiA+Pj4gKyAqDQo+ID4+PiArICogQSBz dHJ1Y3R1cmUgdXNlZCB0byBjb25maWd1cmUgaGFpcnBpbiBiaW5kaW5nLg0KPiA+PiBJdCBzaG91 bGQgYmUgZXhwbGFpbmVkIHdoYXQgaGFwcGVucyBpZiBSeCBxdWV1ZSBoYXMgbWFueSBUeCBxdWV1 ZXMuDQo+ID4+IElzIHBhY2tldCBkdXBsaWNhdGVkPyBPciBkaXN0cmlidXRlZD8NCj4gPj4NCj4g PiBMaWtlIHdlIHNhaWQgYmVmb3JlLCBJIGRvbid0IGtub3cgaXQgZGVwZW5kcyBvbiB0aGUgTmlj Lg0KPiA+IEluIGNhc2Ugb2YgTWVsbGFub3ggd2UgZG9uJ3Qgc3VwcG9ydCAxIHRvIG1hbnkuDQo+ IA0KPiBJIHNlZSwgYnV0IHdoYXQgYXBwbGljYXRpb24gc2hvdWxkIGV4cGVjdD8NCg0KSSB0aGlu ayB0aGF0IHdoZW4gc29tZSBOaWMgc3VwcG9ydHMgc3VjaCBjb25uZWN0aW9uLCBpdCBzaG91bGQg YWRkIGluIHRoZSBjYXBhYmlsaXRpZXMgDQpvciBpbiBkb2N1bWVudGF0aW9uIHRoZSBleHBlY3Rl ZCByZXN1bHRzLiANClBlcnNvbmFsbHkgSSB0aGluayB0aGF0IHRoZSBjb21tb24gdXNlIGNhc2Ug d2lsbCBiZSBkaXN0cmlidXRlZCAoUlNTIG9uIHRoZSBUeCkgYnV0IGl0IGlzIG9ubHkgDQpteSBw ZXJzb25hbCB0aGlua2luZywgeW91ciBxdWVzdGlvbiB3aWxsIGJlIGFuc3dlcmVkIHdoZW4gc29t ZW9uZSB3aWxsIGltcGxlbWVudCBpdC4NCiANCj4gDQo+ID4+PiArICovDQo+ID4+PiArc3RydWN0 IHJ0ZV9ldGhfaGFpcnBpbl9jb25mIHsNCj4gPj4+ICsJdWludDE2X3QgcGVlcl9uOyAvKio8IFRo ZSBudW1iZXIgb2YgcGVlcnMuICovDQo+ID4+PiArCXN0cnVjdCBydGVfZXRoX2hhaXJwaW5fcGVl ciBwZWVyc1tSVEVfRVRIX01BWF9IQUlSUElOX1BFRVJTXTsNCj4gPj4+ICt9Ow0KPiA+Pj4gKw0K PiA+Pj4gKy8qKg0KPiA+Pj4gICAgICogQSBzdHJ1Y3R1cmUgY29udGFpbnMgaW5mb3JtYXRpb24g YWJvdXQgSFcgZGVzY3JpcHRvciByaW5nIGxpbWl0YXRpb25zLg0KPiA+Pj4gICAgICovDQo+ID4+ PiAgICBzdHJ1Y3QgcnRlX2V0aF9kZXNjX2xpbSB7DQo+ID4+PiBAQCAtMTA4MCw2ICsxMTIwLDgg QEAgc3RydWN0IHJ0ZV9ldGhfY29uZiB7DQo+ID4+PiAgICAvKio8IERldmljZSBzdXBwb3J0cyBS eCBxdWV1ZSBzZXR1cCBhZnRlciBkZXZpY2Ugc3RhcnRlZCovDQo+ID4+PiAgICAjZGVmaW5lIFJU RV9FVEhfREVWX0NBUEFfUlVOVElNRV9UWF9RVUVVRV9TRVRVUCAweDAwMDAwMDAyDQo+ID4+PiAg ICAvKio8IERldmljZSBzdXBwb3J0cyBUeCBxdWV1ZSBzZXR1cCBhZnRlciBkZXZpY2Ugc3RhcnRl ZCovDQo+ID4+PiArI2RlZmluZSBSVEVfRVRIX0RFVl9DQVBBX0hBSVJQSU5fU1VQUE9SVCAweDAw MDAwMDA0DQo+ID4+PiArLyoqPCBEZXZpY2Ugc3VwcG9ydHMgaGFpcnBpbiBxdWV1ZXMuICovDQo+ ID4+IERvIHdlIHJlYWxseSBuZWVkIGl0PyBJc24ndCBydGVfZXRoX2Rldl9oYWlycGluX2NhcGFi aWxpdHlfZ2V0KCkgcmV0dXJuaW5nDQo+ID4+IC1FTk9UU1VQIHN1ZmZpY2llbnQ/DQo+ID4+DQo+ ID4gSSBhZ3JlZSB3aXRoIHlvdSwgYnV0IG15IHRoaW5raW5nIHdhcyB0aGF0IHVzaW5nIHRoZSBj YXAgdGhlIGFwcGxpY2F0aW9uDQo+ID4gY2FuIGF2b2lkIGNhbGxpbmcgdG8gZnVuY3Rpb24gdGhh dCB3aWxsIGZhaWwuDQo+ID4gSWYgeW91IGFwcHJvdmUgSSB3aWxsIHJlbW92ZSB0aGlzIGNhcC4N Cj4gDQo+IFJ1bnRpbWUgc2V0dXAgZmxhZ3MgYXJlIHJlcXVpcmVkIHNpbmNlIHRoZXNlIGZ1bmN0 aW9ucyBhcmUgYWx3YXlzDQo+IHN1cHBvcnRlZCwgYnV0IGl0IGlzIG5vdCBhbHdheSBwb3NzaWJs ZSB0byB1c2UgdGhlc2UgZnVuY3Rpb24gd2hlbg0KPiBkZXZpY2UgaXMgc3RhcnRlZC4gSW4gdGhp cyBjYXNlIEkgdGhpbmsgdGhlcmUgaXMgbm8gbmVjZXNzaXR5IHRvIGFkZA0KPiB0aGUgY2FwYWJp bGl0eSBzaW5jZSB3ZSBoYXZlIG5vIHNpbWlsYXIgY2FwcyBmb3IgYW55dGhpbmcgZWxzZS4NCj4g DQoNCk8uSy4gd2lsbCByZW1vdmUgaXQuDQoNCj4gPj4+ICAgIC8qDQo+ID4+PiAgICAgKiBJZiBu ZXcgVHggb2ZmbG9hZCBjYXBhYmlsaXRpZXMgYXJlIGRlZmluZWQsIHRoZXkgYWxzbyBtdXN0IGJl DQo+ID4+PiBAQCAtMTI3Nyw2ICsxMzE5LDcgQEAgc3RydWN0IHJ0ZV9ldGhfZGNiX2luZm8gew0K PiA+Pj4gICAgICovDQo+ID4+PiAgICAjZGVmaW5lIFJURV9FVEhfUVVFVUVfU1RBVEVfU1RPUFBF RCAwDQo+ID4+PiAgICAjZGVmaW5lIFJURV9FVEhfUVVFVUVfU1RBVEVfU1RBUlRFRCAxDQo+ID4+ PiArI2RlZmluZSBSVEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU4gMg0KPiA+Pj4NCj4gPj4+ICAg ICNkZWZpbmUgUlRFX0VUSF9BTEwgUlRFX01BWF9FVEhQT1JUUw0KPiA+Pj4NCj4gPj4+IEBAIC0x NzcxLDYgKzE4MTQsMzQgQEAgaW50IHJ0ZV9ldGhfcnhfcXVldWVfc2V0dXAodWludDE2X3QgcG9y dF9pZCwNCj4gPj4gdWludDE2X3QgcnhfcXVldWVfaWQsDQo+ID4+PiAgICAJCXN0cnVjdCBydGVf bWVtcG9vbCAqbWJfcG9vbCk7DQo+ID4+Pg0KPiA+Pj4gICAgLyoqDQo+ID4+PiArICogQHdhcm5p bmcNCj4gPj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJl IHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gPj4gbm90aWNlDQo+ID4+PiArICoNCj4gPj4+ICsg KiBBbGxvY2F0ZSBhbmQgc2V0IHVwIGEgaGFpcnBpbiByZWNlaXZlIHF1ZXVlIGZvciBhbiBFdGhl cm5ldCBkZXZpY2UuDQo+ID4+PiArICoNCj4gPj4+ICsgKiBUaGUgZnVuY3Rpb24gc2V0IHVwIHRo ZSBzZWxlY3RlZCBxdWV1ZSB0byBiZSB1c2VkIGluIGhhaXJwaW4uDQo+ID4+PiArICoNCj4gPj4+ ICsgKiBAcGFyYW0gcG9ydF9pZA0KPiA+Pj4gKyAqICAgVGhlIHBvcnQgaWRlbnRpZmllciBvZiB0 aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+Pj4gKyAqIEBwYXJhbSByeF9xdWV1ZV9pZA0KPiA+Pj4g KyAqICAgVGhlIGluZGV4IG9mIHRoZSByZWNlaXZlIHF1ZXVlIHRvIHNldCB1cC4NCj4gPj4+ICsg KiAgIFRoZSB2YWx1ZSBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCwgbmJfcnhfcXVldWUgLSAxXSBw cmV2aW91c2x5DQo+IHN1cHBsaWVkDQo+ID4+PiArICogICB0byBydGVfZXRoX2Rldl9jb25maWd1 cmUoKS4NCj4gPj4+ICsgKiBAcGFyYW0gbmJfcnhfZGVzYw0KPiA+Pj4gKyAqICAgVGhlIG51bWJl ciBvZiByZWNlaXZlIGRlc2NyaXB0b3JzIHRvIGFsbG9jYXRlIGZvciB0aGUgcmVjZWl2ZSByaW5n Lg0KPiA+PiBJcyBpdCBhbGxvd3MgdG8gc3BlY2lmeSAwIHRvIHBpY2sgZHJpdmVyIHJlY29tbWVu ZGVkIHZhbHVlPw0KPiA+Pg0KPiA+IFllcywgKGFzc3VtaW5nIHlvdSBhcmUgdGFsa2luZyBhYm91 dCB0aGUgbmJfcnhfZGVzYykNCj4gDQo+IFBsZWFzZSwgaGlnaGxpZ2h0IGl0IGluIHRoZSBkZXNj cmlwdGlvbi4NCj4gDQoNCk8uSy4NCg0KW25pcF0NCg0KVGhhbmtzLA0KT3JpDQo=