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 34CEAA3168 for ; Wed, 16 Oct 2019 21:36:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 320881E986; Wed, 16 Oct 2019 21:36:21 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20052.outbound.protection.outlook.com [40.107.2.52]) by dpdk.org (Postfix) with ESMTP id 914AB1BF5C for ; Wed, 16 Oct 2019 21:36:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cDR8HtVEiO725ewAKU4rQcHz/A4MUt3UtgaiYnCvOmel0wJdDgaE6m+DaPYpJCOIWpKO1URwgA2TtrYAGu1jURgXdtPp9Y9S1bZ00Q1B5jtUAUZpZTctvWzTtI0W9zffVgEPxSl0rcEWVVH4V3AM7Wj86rVOlXOVqrhgEe/2IBtaot9niALcJvGB/2CGJ43EJXTcMJeKqzgr7HFC4pLd2lDN8ktuosc99IThPWKOXLIszSAGiiS2rhnpq5PIzpG4X/B/okZG9IJP0WGG30oel+L2ZeGAvKlTCGErskgXPBAmDay+Capc8GKHfv6D1lg9seQz8UEOIwpNkiSXizc7cg== 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=dScN4oDtnmY3enBkDdPVL4XBTzsBmx9rpImMJcsrPa0=; b=aGy0scfax85M2Hs3JTwTY6nFXpw7KJjtHVYN/FZp2fvnYY2tsvhCk3TJU+dHUmA8WO3L8pPRp6PVbT5QQLLkf9feyQoGLNR+wuSWLZgvpO2los2vP85TPa9U0yZw95tLBgx6bWAvkgxB/KBQG7x5ohW4KQP1eFO1seASqzDMEFVb+Pz/Y54zijf2QmsdWnJKuwzub/fWll+CiEk3Lfd3g/KQ5fPE8CSp9UxzJowbTdMBdv+avtmjPkDSzNvYqGOj8SKFkZaxiebaGLnPVtLHrjl+7UeAiqZyyR8/bz5R3dDHt4LRWb8jE0KS9BhSqtcglKL63pCZ1EjXoVydS2Nblw== 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=dScN4oDtnmY3enBkDdPVL4XBTzsBmx9rpImMJcsrPa0=; b=bNKdEEL/cCaE/XZoaVBHZ7FeNnQotUZjlALsfsg+gShTZ0Cx8Hny/z5C5ASZd6LdVEEE9BWl6DRKU3Z/BdPB88vAbYkzqntT6ukic0vsoUbFyb2Cj7L0npOaXb2ThJurQRDGiZkr4NmbNK6BAt0JvhbuXZnww0YYFFMnuR1xq9c= Received: from AM4PR05MB3425.eurprd05.prod.outlook.com (10.171.190.15) by AM4PR05MB3427.eurprd05.prod.outlook.com (10.171.187.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.16; Wed, 16 Oct 2019 19:36:17 +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.023; Wed, 16 Oct 2019 19:36:17 +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 v3 01/14] ethdev: add support for hairpin queue Thread-Index: AQHVg0EFdV7RFuo1iUeRtdiuElhER6ddnYWg Date: Wed, 16 Oct 2019 19:36:17 +0000 Message-ID: References: <1569479349-36962-1-git-send-email-orika@mellanox.com> <1571130263-120863-1-git-send-email-orika@mellanox.com> <1571130263-120863-2-git-send-email-orika@mellanox.com> <21993a52-3033-bf42-2041-0c50519ee5d1@solarflare.com> In-Reply-To: <21993a52-3033-bf42-2041-0c50519ee5d1@solarflare.com> 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: a3406e04-c654-4211-a360-08d752701d09 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: AM4PR05MB3427: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5236; x-forefront-prvs: 0192E812EC x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(376002)(366004)(346002)(39860400002)(396003)(136003)(52314003)(199004)(189003)(13464003)(110136005)(86362001)(446003)(6506007)(476003)(478600001)(99286004)(55016002)(7736002)(2906002)(9686003)(52536014)(229853002)(3846002)(6436002)(486006)(11346002)(186003)(8936002)(305945005)(6116002)(54906003)(76176011)(26005)(102836004)(4326008)(53546011)(66066001)(8676002)(81156014)(81166006)(33656002)(7696005)(14444005)(6246003)(256004)(76116006)(71200400001)(14454004)(71190400001)(66946007)(66446008)(66556008)(66476007)(64756008)(30864003)(25786009)(5660300002)(74316002)(316002)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3427; 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: O+YLs4FnhoQNFjh9J9bT9XFg57MYT9ommT93RApJFB8ZvnHsdhM9fD8D/qzauOI6fNvEm6Iup8NOmz9mW7mnWPPioGD/VUou31PweU52eLwf0Qi0oZM3ntL6/MlKoesUOBtE65wC4lRBnH6/qbGWOgw9YecoqQIlpkup6nKt1x47cSxSpg2a9eVOq6tKCXK7kbckMvyFoVEq/cs1gn0u+RMS9htfsWPDmw3bU/+h3v0WKAKBGfUeGytcCVfChfOfanhI2Gv/DAhyZayOqjdAAYXm0mW5T71u/2JN55qWC9axPpFA+2WyKBeHDD0L/tE9RNh8lSFB1k2MsjrZ5a8DJrU0ZEKNz1v0WR2JuPlIYff//IADdvkx8sg1mOCA6YKfT2I2EH7e9piFrKenUo9Nezsi7jXcTadfOsnkdqTLV00= 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: a3406e04-c654-4211-a360-08d752701d09 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Oct 2019 19:36:17.1121 (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: nfP2bjvMkR6cwGSioGP7WpN729U2DzD1HvHpS/slUJlsT1i9rNXyGlu1c9+icL6Uqv15TfZvK3N+crJ2dXeCXA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3427 Subject: Re: [dpdk-dev] [PATCH v3 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" SGkgQW5kcmV3LA0KDQpUaGFua3MgYWdhaW4gZm9yIHlvdXIgdGltZS4NCg0KUFNCLCANCk9yaQ0K DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQW5kcmV3IFJ5YmNoZW5r byA8YXJ5YmNoZW5rb0Bzb2xhcmZsYXJlLmNvbT4NCj4gU2VudDogVHVlc2RheSwgT2N0b2JlciAx NSwgMjAxOSAxOjEyIFBNDQo+IFRvOiBPcmkgS2FtIDxvcmlrYUBtZWxsYW5veC5jb20+OyBUaG9t YXMgTW9uamFsb24NCj4gPHRob21hc0Btb25qYWxvbi5uZXQ+OyBGZXJydWggWWlnaXQgPGZlcnJ1 aC55aWdpdEBpbnRlbC5jb20+DQo+IENjOiBkZXZAZHBkay5vcmc7IGppbmdqaW5nLnd1QGludGVs LmNvbTsgc3RlcGhlbkBuZXR3b3JrcGx1bWJlci5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2 MyAwMS8xNF0gZXRoZGV2OiBhZGQgc3VwcG9ydCBmb3IgaGFpcnBpbiBxdWV1ZQ0KPiANCj4gSGkg T3JpLA0KPiANCj4gT24gMTAvMTUvMTkgMTI6MDQgUE0sIE9yaSBLYW0gd3JvdGU6DQo+ID4gVGhp cyBjb21taXQgaW50cm9kdWNlIGhhaXJwaW4gcXVldWUgdHlwZS4NCj4gPg0KPiA+IFRoZSBoYWly cGluIHF1ZXVlIGluIGJ1aWxkIGZyb20gUnggcXVldWUgYmluZGVkIHRvIFR4IHF1ZXVlLg0KPiA+ IEl0IGlzIHVzZWQgdG8gb2ZmbG9hZCB0cmFmZmljIGNvbWluZyBmcm9tIHRoZSB3aXJlIGFuZCBy ZWRpcmVjdCBpdCBiYWNrDQo+ID4gdG8gdGhlIHdpcmUuDQo+ID4NCj4gPiBUaGVyZSBhcmUgMyBu ZXcgZnVuY3Rpb25zOg0KPiA+IC0gcnRlX2V0aF9kZXZfaGFpcnBpbl9jYXBhYmlsaXR5X2dldA0K PiA+IC0gcnRlX2V0aF9yeF9oYWlycGluX3F1ZXVlX3NldHVwDQo+ID4gLSBydGVfZXRoX3R4X2hh aXJwaW5fcXVldWVfc2V0dXANCj4gPg0KPiA+IEluIG9yZGVyIHRvIHVzZSB0aGUgcXVldWUsIHRo ZXJlIGlzIGEgbmVlZCB0byBjcmVhdGUgcnRlX2Zsb3cNCj4gPiB3aXRoIHF1ZXVlIC8gUlNTIGFj dGlvbiB0aGF0IHRhcmdldHMgb25lIG9yIG1vcmUgb2YgdGhlIFJ4IHF1ZXVlcy4NCj4gPg0KPiA+ IFNpZ25lZC1vZmYtYnk6IE9yaSBLYW0gPG9yaWthQG1lbGxhbm94LmNvbT4NCj4gPg0KPiA+IC0t LQ0KPiA+IFYzOg0KPiA+ICAgLSB1cGRhdGUgYWNjb3JkaW5nIHRvIE1MIGNvbW1lbnRzLg0KPiA+ DQo+ID4gVjI6DQo+ID4gICAtIHVwZGF0ZSBhY2NvcmRpbmcgdG8gTUwgY29tbWVudHMuDQo+ID4N Cj4gPiAtLS0NCj4gPiAgIGxpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXYuYyAgICAgICAgICAg fCAyNjANCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiA+ICAgbGliL2xpYnJ0 ZV9ldGhkZXYvcnRlX2V0aGRldi5oICAgICAgICAgICB8IDE0MyArKysrKysrKysrKysrKysrLQ0K PiA+ICAgbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldl9jb3JlLmggICAgICB8ICAyNyArKyst DQo+ID4gICBsaWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2X3ZlcnNpb24ubWFwIHwgICA1ICsN Cj4gPiAgIDQgZmlsZXMgY2hhbmdlZCwgNDIyIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygt KQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXYuYyBi L2xpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXYuYw0KPiA+IGluZGV4IGFmODIzNjAuLjIyYTk3 ZGUgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5jDQo+ID4g KysrIGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5jDQo+ID4gQEAgLTkwNCwxMCArOTA0 LDE5IEBAIHN0cnVjdCBydGVfZXRoX2RldiAqDQo+ID4NCj4gPiAgIAlSVEVfRlVOQ19QVFJfT1Jf RVJSX1JFVCgqZGV2LT5kZXZfb3BzLT5yeF9xdWV1ZV9zdGFydCwgLQ0KPiBFTk9UU1VQKTsNCj4g Pg0KPiA+IC0JaWYgKGRldi0+ZGF0YS0+cnhfcXVldWVfc3RhdGVbcnhfcXVldWVfaWRdICE9DQo+ IFJURV9FVEhfUVVFVUVfU1RBVEVfU1RPUFBFRCkgew0KPiA+IC0JCVJURV9FVEhERVZfTE9HKElO Rk8sDQo+ID4gLQkJCSJRdWV1ZSAlIlBSSXUxNiIgb2YgZGV2aWNlIHdpdGggcG9ydF9pZD0lIlBS SXUxNiINCj4gYWxyZWFkeSBzdGFydGVkXG4iLA0KPiA+ICsJaWYgKGRldi0+ZGF0YS0+cnhfcXVl dWVfc3RhdGVbcnhfcXVldWVfaWRdID09DQo+ID4gKwkgICAgUlRFX0VUSF9RVUVVRV9TVEFURV9I QUlSUElOKSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coSU5GTywgIlF1ZXVlICUiUFJJdTE2IiBv ZiBkZXZpY2Ugd2l0aCAiDQo+ID4gKwkJCSJwb3J0X2lkPSUiUFJJdTE2IiBpcyBoYWlycGluIHF1 ZXVlXG4iLA0KPiA+ICAgCQkJcnhfcXVldWVfaWQsIHBvcnRfaWQpOw0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChkZXYtPmRhdGEtPnJ4X3F1ZXVlX3N0 YXRlW3J4X3F1ZXVlX2lkXSA9PQ0KPiA+ICsJICAgIFJURV9FVEhfUVVFVUVfU1RBVEVfU1RBUlRF RCkgew0KPiA+ICsJCVJURV9FVEhERVZfTE9HKElORk8sICJRdWV1ZSAlIlBSSXUxNiIgb2YgZGV2 aWNlIHdpdGggIg0KPiA+ICsJCQkicG9ydF9pZD0lIlBSSXUxNiIgYWxyZWFkeSBzdGFydGVkXG4i LCByeF9xdWV1ZV9pZCwNCj4gPiArCQkJcG9ydF9pZCk7DQo+ID4gICAJCXJldHVybiAwOw0KPiA+ ICAgCX0NCj4gPg0KPiANCj4gWW91IHNob3VsZCBub3QgdG91Y2ggZXhpc3RpbmcgY29kZSBoZXJl LiBZZXMsIGxpbmUgaXMgbG9uZ2VyIHRoYW4gODANCj4gc3ltYm9scywNCj4gYnV0IGZpeGluZyBj b2RkaW5nIHN0eWxlIGlzIGEgc2VwYXJhdGUgdGhpbmcuDQo+IA0KDQpUaGUgY29kZSBzdHlsZSB3 YXMgZG9uZSBzaW5jZSBJIG5lZWRlZCB0byBjaGFuZ2UgdGhlIGlmIHN0YXRlbWVudCBmcm9tDQpv cmlnaW5hbCBvbmUgdGhhdCB3YXMgIT0gc3RvcHBlZCB0byA9PSBzdGFydGVkLiBCdXQgSWYgeW91 IHByZWZlciBJIGNhbiB1bmRvIHRoaXMgY2hhbmdlLg0KDQo+IEFsc28gZm9ybWF0IHN0cmluZyBz aG91bGQgbm90IGJlIHNwbGl0IGludG8gbWFueSBsaW5lcyBzaW5jZSBpdA0KPiBtYWtlcyBpdCBo YXJkIHRvIHVzZSBncmVwIHRvIGZpbmQgaXQgaW4gc291cmNlcyAoaS5lLiB3aGVuIHlvdQ0KPiBz ZWUgaXQgaW4gbG9uZ3MgYW5kIHdvdWxkIGxpa2UgdG8gZmluZCBjb3JyZXNwb25kaW5nIGxpbmUg aW4NCj4gc291cmNlcykuDQo+IA0KDQpPLksgYnkgbWUsIEknbSB1c2VkIHRvIG1seDUgd2hlcmUg bGluZSBsZW5ndGggaXMgdGhlIG1vcmUgaW1wb3J0YW50IHRoaW5nLg0KDQo+IFtzbmlwXQ0KPiAN Cj4gPiBAQCAtMTc1OCw2ICsxNzkxLDkyIEBAIHN0cnVjdCBydGVfZXRoX2RldiAqDQo+ID4gICB9 DQo+ID4NCj4gPiAgIGludA0KPiA+ICtydGVfZXRoX3J4X2hhaXJwaW5fcXVldWVfc2V0dXAodWlu dDE2X3QgcG9ydF9pZCwgdWludDE2X3QgcnhfcXVldWVfaWQsDQo+ID4gKwkJCSAgICAgICB1aW50 MTZfdCBuYl9yeF9kZXNjLA0KPiA+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9ldGhfaGFp cnBpbl9jb25mICpjb25mKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJc3RydWN0IHJ0 ZV9ldGhfZGV2ICpkZXY7DQo+ID4gKwlzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NhcCBjYXA7DQo+ ID4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXZfaW5mbyBkZXZfaW5mbzsNCj4gPiArCXZvaWQgKipyeHE7 DQo+ID4gKwlpbnQgaTsNCj4gPiArCWludCBjb3VudCA9IDA7DQo+ID4gKw0KPiA+ICsJUlRFX0VU SF9WQUxJRF9QT1JUSURfT1JfRVJSX1JFVChwb3J0X2lkLCAtRUlOVkFMKTsNCj4gPiArDQo+ID4g KwlkZXYgPSAmcnRlX2V0aF9kZXZpY2VzW3BvcnRfaWRdOw0KPiA+ICsJaWYgKHJ4X3F1ZXVlX2lk ID49IGRldi0+ZGF0YS0+bmJfcnhfcXVldWVzKSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coRVJS LCAiSW52YWxpZCBSWCBxdWV1ZV9pZD0ldVxuIiwNCj4gcnhfcXVldWVfaWQpOw0KPiA+ICsJCXJl dHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsJcmV0ID0gcnRlX2V0aF9kZXZfaGFpcnBpbl9j YXBhYmlsaXR5X2dldChwb3J0X2lkLCAmY2FwKTsNCj4gPiArCWlmIChyZXQgIT0gMCkNCj4gPiAr CQlyZXR1cm4gcmV0Ow0KPiA+ICsJUlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29w cy0+ZGV2X2luZm9zX2dldCwgLQ0KPiBFTk9UU1VQKTsNCj4gDQo+IFRoZXJlIGlzIG5vdCBuZWNl c3NpdHkgdG8gY2hlY2sgdGhlIHBvaW50ZXIgaGVyZSwgc2luY2UgaXQgaXMgY2hlY2tlZA0KPiBp bnNpZGUgcnRlX2V0aF9kZXZfaW5mb19nZXQoKSBhbmQgZXJyb3IgaXMgcmV0dXJuZWQuDQo+IA0K DQpPLksuDQoNCj4gPiArCVJURV9GVU5DX1BUUl9PUl9FUlJfUkVUKCpkZXYtPmRldl9vcHMtDQo+ ID5yeF9oYWlycGluX3F1ZXVlX3NldHVwLA0KPiA+ICsJCQkJLUVOT1RTVVApOw0KPiA+ICsJLyog VXNlIGRlZmF1bHQgc3BlY2lmaWVkIGJ5IGRyaXZlciwgaWYgbmJfcnhfZGVzYyBpcyB6ZXJvICov DQo+ID4gKwlpZiAobmJfcnhfZGVzYyA9PSAwKQ0KPiA+ICsJCW5iX3J4X2Rlc2MgPSBjYXAubWF4 X25iX2Rlc2M7DQo+ID4gKwlpZiAobmJfcnhfZGVzYyA+IGNhcC5tYXhfbmJfZGVzYykgew0KPiA+ ICsJCVJURV9FVEhERVZfTE9HKEVSUiwNCj4gPiArCQkJICAgICAgICJJbnZhbGlkIHZhbHVlIGZv ciBuYl9yeF9kZXNjKD0laHUpLCBzaG91bGQgYmU6ICINCj4gPiArCQkJICAgICAgICI8PSAlaHUi LCBuYl9yeF9kZXNjLCBjYXAubWF4X25iX2Rlc2MpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0K PiA+ICsJfQ0KPiA+ICsJcmV0ID0gcnRlX2V0aF9kZXZfaW5mb19nZXQocG9ydF9pZCwgJmRldl9p bmZvKTsNCj4gPiArCWlmIChyZXQgIT0gMCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJaWYg KGRldi0+ZGF0YS0+ZGV2X3N0YXJ0ZWQgJiYNCj4gPiArCQkhKGRldl9pbmZvLmRldl9jYXBhICYN Cj4gPiArCQkgIFJURV9FVEhfREVWX0NBUEFfUlVOVElNRV9SWF9RVUVVRV9TRVRVUCkpDQo+ID4g KwkJcmV0dXJuIC1FQlVTWTsNCj4gPiArCWlmIChkZXYtPmRhdGEtPmRldl9zdGFydGVkICYmDQo+ ID4gKwkJKGRldi0+ZGF0YS0+cnhfcXVldWVfc3RhdGVbcnhfcXVldWVfaWRdICE9DQo+ID4gKwkJ IFJURV9FVEhfUVVFVUVfU1RBVEVfU1RPUFBFRCkpDQo+ID4gKwkJcmV0dXJuIC1FQlVTWTsNCj4g DQo+IEFzIEkgdW5kZXJzdGFuZCBpdCBkb2VzIG5vdCBhbGxvdyB0byBjaGFuZ2UgaGFpcnBpbiBx dWV1ZSBzZXR1cA0KPiBieSBjYWxsaW5nIHNldHVwIG9uY2UgYWdpYW4uDQo+IA0KDQpJIHdpbGwg cmVwbGFjZSBib3RoIGFib3ZlIGlmIGNhc2VzIHRvIHJldHVybiBlcnJvciBpZiBkZXYgaXMgc3Rh cnRlZC4gU2luY2Ugd2UgY2FuJ3Qgc3VwcG9ydCANCmhhaXJwaW4gY2hhbmdlIHdoZW4gZGV2aWNl IGlzIHdvcmtpbmcuDQoNCj4gPiArCWlmIChjb25mLT5wZWVyX24gPiBjYXAubWF4X3J4XzJfdHgp IHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhFUlIsDQo+ID4gKwkJCSAgICAgICAiSW52YWxpZCB2 YWx1ZSBmb3IgbnVtYmVyIG9mIHBlZXJzKD0laHUpLCAiDQo+ID4gKwkJCSAgICAgICAic2hvdWxk IGJlOiA8PSAlaHUiLCBjb25mLT5wZWVyX24sDQo+ID4gKwkJCSAgICAgICBjYXAubWF4X3J4XzJf dHgpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKGNvbmYtPnBl ZXJfbiA9PSAwKSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coRVJSLA0KPiA+ICsJCQkgICAgICAg IkludmFsaWQgdmFsdWUgZm9yIG51bWJlciBvZiBwZWVycyg9JWh1KSwgIg0KPiA+ICsJCQkgICAg ICAgInNob3VsZCBiZTogPiAwIiwgY29uZi0+cGVlcl9uKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gPiArCX0NCj4gPiArCWlmIChjYXAubWF4X25fcXVldWVzICE9IFVJTlQxNl9NQVgpIHsN Cj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5kYXRhLT5uYl9yeF9xdWV1ZXM7IGkrKykgew0K PiA+ICsJCQlpZiAoZGV2LT5kYXRhLT5yeF9xdWV1ZV9zdGF0ZVtpXSA9PQ0KPiA+ICsJCQkgICAg UlRFX0VUSF9RVUVVRV9TVEFURV9IQUlSUElOKQ0KPiA+ICsJCQkJY291bnQrKzsNCj4gPiArCQl9 DQo+ID4gKwkJaWYgKGNvdW50ID4gY2FwLm1heF9uX3F1ZXVlcykgew0KPiA+ICsJCQlSVEVfRVRI REVWX0xPRyhFUlIsDQo+ID4gKwkJCQkgICAgICAgIlRvIG1hbnkgUnggaGFpcnBpbiBxdWV1ZXMg JWQiLCBjb3VudCk7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4gPiArCX0N Cj4gPiArCXJ4cSA9IGRldi0+ZGF0YS0+cnhfcXVldWVzOw0KPiA+ICsJaWYgKHJ4cVtyeF9xdWV1 ZV9pZF0gIT0gTlVMTCkgew0KPiA+ICsJCVJURV9GVU5DX1BUUl9PUl9FUlJfUkVUKCpkZXYtPmRl dl9vcHMtDQo+ID5yeF9xdWV1ZV9yZWxlYXNlLA0KPiA+ICsJCQkJCS1FTk9UU1VQKTsNCj4gPiAr CQkoKmRldi0+ZGV2X29wcy0+cnhfcXVldWVfcmVsZWFzZSkocnhxW3J4X3F1ZXVlX2lkXSk7DQo+ ID4gKwkJcnhxW3J4X3F1ZXVlX2lkXSA9IE5VTEw7DQo+ID4gKwl9DQo+ID4gKwlyZXQgPSAoKmRl di0+ZGV2X29wcy0+cnhfaGFpcnBpbl9xdWV1ZV9zZXR1cCkoZGV2LCByeF9xdWV1ZV9pZCwNCj4g PiArCQkJCQkJICAgICAgbmJfcnhfZGVzYywgY29uZik7DQo+ID4gKwlpZiAocmV0ID09IDApDQo+ ID4gKwkJZGV2LT5kYXRhLT5yeF9xdWV1ZV9zdGF0ZVtyeF9xdWV1ZV9pZF0gPQ0KPiA+ICsJCQlS VEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU47DQo+ID4gKwlyZXR1cm4gZXRoX2Vycihwb3J0X2lk LCByZXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQNCj4gPiAgIHJ0ZV9ldGhfdHhfcXVldWVf c2V0dXAodWludDE2X3QgcG9ydF9pZCwgdWludDE2X3QgdHhfcXVldWVfaWQsDQo+ID4gICAJCSAg ICAgICB1aW50MTZfdCBuYl90eF9kZXNjLCB1bnNpZ25lZCBpbnQgc29ja2V0X2lkLA0KPiA+ICAg CQkgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9ldGhfdHhjb25mICp0eF9jb25mKQ0KPiA+IEBAIC0x ODUxLDkgKzE5NzAsOTIgQEAgc3RydWN0IHJ0ZV9ldGhfZGV2ICoNCj4gPiAgIAkJCV9fZnVuY19f KTsNCj4gPiAgIAkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gICAJfQ0KPiA+ICsJcmV0ID0gKCpkZXYt PmRldl9vcHMtPnR4X3F1ZXVlX3NldHVwKShkZXYsIHR4X3F1ZXVlX2lkLCBuYl90eF9kZXNjLA0K PiA+ICsJCQkJCSAgICAgIHNvY2tldF9pZCwgJmxvY2FsX2NvbmYpOw0KPiA+ICsJcmV0dXJuIGV0 aF9lcnIocG9ydF9pZCwgcmV0KTsNCj4gPiArfQ0KPiANCj4gVW5yZWxhdGVkIGNoYW5nZQ0KPiAN Cg0KTy5LLiB3aWxsIHJlbW92ZS4NCg0KPiA+DQo+ID4gLQlyZXR1cm4gZXRoX2Vycihwb3J0X2lk LCAoKmRldi0+ZGV2X29wcy0+dHhfcXVldWVfc2V0dXApKGRldiwNCj4gPiAtCQkgICAgICAgdHhf cXVldWVfaWQsIG5iX3R4X2Rlc2MsIHNvY2tldF9pZCwgJmxvY2FsX2NvbmYpKTsNCj4gPiAraW50 DQo+ID4gK3J0ZV9ldGhfdHhfaGFpcnBpbl9xdWV1ZV9zZXR1cCh1aW50MTZfdCBwb3J0X2lkLCB1 aW50MTZfdCB0eF9xdWV1ZV9pZCwNCj4gPiArCQkJICAgICAgIHVpbnQxNl90IG5iX3R4X2Rlc2Ms DQo+ID4gKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NvbmYgKmNvbmYp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBydGVfZXRoX2RldiAqZGV2Ow0KPiA+ICsJc3RydWN0IHJ0 ZV9ldGhfaGFpcnBpbl9jYXAgY2FwOw0KPiA+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2X2luZm8gZGV2 X2luZm87DQo+ID4gKwl2b2lkICoqdHhxOw0KPiA+ICsJaW50IGk7DQo+ID4gKwlpbnQgY291bnQg PSAwOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlSVEVfRVRIX1ZBTElEX1BPUlRJRF9P Ul9FUlJfUkVUKHBvcnRfaWQsIC1FSU5WQUwpOw0KPiA+ICsJZGV2ID0gJnJ0ZV9ldGhfZGV2aWNl c1twb3J0X2lkXTsNCj4gPiArCWlmICh0eF9xdWV1ZV9pZCA+PSBkZXYtPmRhdGEtPm5iX3R4X3F1 ZXVlcykgew0KPiA+ICsJCVJURV9FVEhERVZfTE9HKEVSUiwgIkludmFsaWQgVFggcXVldWVfaWQ9 JXVcbiIsDQo+IHR4X3F1ZXVlX2lkKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0N Cj4gPiArCXJldCA9IHJ0ZV9ldGhfZGV2X2hhaXJwaW5fY2FwYWJpbGl0eV9nZXQocG9ydF9pZCwg JmNhcCk7DQo+ID4gKwlpZiAocmV0ICE9IDApDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCVJU RV9GVU5DX1BUUl9PUl9FUlJfUkVUKCpkZXYtPmRldl9vcHMtPmRldl9pbmZvc19nZXQsIC0NCj4g RU5PVFNVUCk7DQo+IA0KPiBUaGVyZSBpcyBub3QgbmVjZXNzaXR5IHRvIGNoZWNrIHRoZSBwb2lu dGVyIGhlcmUsIHNpbmNlIGl0IGlzIGNoZWNrZWQNCj4gaW5zaWRlIHJ0ZV9ldGhfZGV2X2luZm9f Z2V0KCkgYW5kIGVycm9yIGlzIHJldHVybmVkLg0KPiANCg0KTy5LLiB3aWxsIHJlbW92ZSBmdW5j dGlvbiBjYWxsLg0KDQo+ID4gKwlSVEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgqZGV2LT5kZXZfb3Bz LQ0KPiA+dHhfaGFpcnBpbl9xdWV1ZV9zZXR1cCwNCj4gPiArCQkJCS1FTk9UU1VQKTsNCj4gPiAr CXJ0ZV9ldGhfZGV2X2luZm9fZ2V0KHBvcnRfaWQsICZkZXZfaW5mbyk7DQo+IA0KPiANCj4gUGxl YXNlLCBjaGVjayByZXR1cm4gc3RhdHVzLg0KPiANCg0KU3VyZSwgd2lsbCBhZGQgY2hlY2suDQoN Cj4gPiArCS8qIFVzZSBkZWZhdWx0IHNwZWNpZmllZCBieSBkcml2ZXIsIGlmIG5iX3R4X2Rlc2Mg aXMgemVybyAqLw0KPiA+ICsJaWYgKG5iX3R4X2Rlc2MgPT0gMCkNCj4gPiArCQluYl90eF9kZXNj ID0gY2FwLm1heF9uYl9kZXNjOw0KPiA+ICsJaWYgKG5iX3R4X2Rlc2MgPiBjYXAubWF4X25iX2Rl c2MpIHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhFUlIsDQo+ID4gKwkJCSAgICAgICAiSW52YWxp ZCB2YWx1ZSBmb3IgbmJfdHhfZGVzYyg9JWh1KSwgc2hvdWxkIGJlOiAiDQo+ID4gKwkJCSAgICAg ICAiPD0gJWh1IiwgbmJfdHhfZGVzYywgY2FwLm1heF9uYl9kZXNjKTsNCj4gPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gPiArCX0NCj4gPiArCWlmIChjb25mLT5wZWVyX24gPiBjYXAubWF4X3R4XzJf cngpIHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhFUlIsDQo+ID4gKwkJCSAgICAgICAiSW52YWxp ZCB2YWx1ZSBmb3IgbnVtYmVyIG9mIHBlZXJzKD0laHUpLCAiDQo+ID4gKwkJCSAgICAgICAic2hv dWxkIGJlOiA8PSAlaHUiLCBjb25mLT5wZWVyX24sDQo+ID4gKwkJCSAgICAgICBjYXAubWF4X3R4 XzJfcngpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKGNvbmYt PnBlZXJfbiA9PSAwKSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coRVJSLA0KPiA+ICsJCQkgICAg ICAgIkludmFsaWQgdmFsdWUgZm9yIG51bWJlciBvZiBwZWVycyg9JWh1KSwgIg0KPiA+ICsJCQkg ICAgICAgInNob3VsZCBiZTogPiAwIiwgY29uZi0+cGVlcl9uKTsNCj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gPiArCX0NCj4gPiArCWlmIChjYXAubWF4X25fcXVldWVzICE9IFVJTlQxNl9NQVgp IHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5kYXRhLT5uYl90eF9xdWV1ZXM7IGkrKykg ew0KPiA+ICsJCQlpZiAoZGV2LT5kYXRhLT50eF9xdWV1ZV9zdGF0ZVtpXSA9PQ0KPiA+ICsJCQkg ICAgUlRFX0VUSF9RVUVVRV9TVEFURV9IQUlSUElOKQ0KPiA+ICsJCQkJY291bnQrKzsNCj4gPiAr CQl9DQo+ID4gKwkJaWYgKGNvdW50ID4gY2FwLm1heF9uX3F1ZXVlcykgew0KPiA+ICsJCQlSVEVf RVRIREVWX0xPRyhFUlIsDQo+ID4gKwkJCQkgICAgICAgIlRvIG1hbnkgUnggaGFpcnBpbiBxdWV1 ZXMgJWQiLCBjb3VudCk7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4gPiAr CX0NCj4gDQo+IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgb3JkZXIgb2YgY2hlY2tzIGRpZmZlciBh Ym92ZSBhbmQgaGVyZS4NCj4gDQoNCldpbGwgYWxpZ24gdGhlIG9yZGVyLg0KDQo+ID4gKwlpZiAo ZGV2LT5kYXRhLT5kZXZfc3RhcnRlZCAmJg0KPiA+ICsJCSEoZGV2X2luZm8uZGV2X2NhcGEgJg0K PiA+ICsJCSAgUlRFX0VUSF9ERVZfQ0FQQV9SVU5USU1FX1RYX1FVRVVFX1NFVFVQKSkNCj4gPiAr CQlyZXR1cm4gLUVCVVNZOw0KPiA+ICsJaWYgKGRldi0+ZGF0YS0+ZGV2X3N0YXJ0ZWQgJiYNCj4g PiArCQkoZGV2LT5kYXRhLT50eF9xdWV1ZV9zdGF0ZVt0eF9xdWV1ZV9pZF0gIT0NCj4gPiArCQkg UlRFX0VUSF9RVUVVRV9TVEFURV9TVE9QUEVEKSkNCj4gPiArCQlyZXR1cm4gLUVCVVNZOw0KPiAN Cj4gQXMgSSB1bmRlcnN0YW5kIGl0IGRvZXMgbm90IGFsbG93IHRvIGNoYW5nZSBoYWlycGluIHF1 ZXVlIHNldHVwDQo+IGJ5IGNhbGxpbmcgc2V0dXAgb25jZSBhZ2lhbi4NCj4gDQoNCkxpa2UgYWJv dmUgSSB3aWxsIGNoZWNrIG9ubHkgaWYgZGV2aWNlIGlzIHN0YXJ0ZWQsIHNpbmNlIHdlIGNhbid0 IHVwZGF0ZSBoYWlycGluIHF1ZXVlDQp3aGlsZSBkZXZpY2UgaXMgc3RhcnRlZC4NCg0KPiA+ICsJ dHhxID0gZGV2LT5kYXRhLT50eF9xdWV1ZXM7DQo+ID4gKwlpZiAodHhxW3R4X3F1ZXVlX2lkXSAh PSBOVUxMKSB7DQo+ID4gKwkJUlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29wcy0N Cj4gPnR4X3F1ZXVlX3JlbGVhc2UsDQo+ID4gKwkJCQkJLUVOT1RTVVApOw0KPiA+ICsJCSgqZGV2 LT5kZXZfb3BzLT50eF9xdWV1ZV9yZWxlYXNlKSh0eHFbdHhfcXVldWVfaWRdKTsNCj4gPiArCQl0 eHFbdHhfcXVldWVfaWRdID0gTlVMTDsNCj4gPiArCX0NCj4gPiArCXJldCA9ICgqZGV2LT5kZXZf b3BzLT50eF9oYWlycGluX3F1ZXVlX3NldHVwKQ0KPiA+ICsJCShkZXYsIHR4X3F1ZXVlX2lkLCBu Yl90eF9kZXNjLCBjb25mKTsNCj4gPiArCWlmIChyZXQgPT0gMCkNCj4gPiArCQlkZXYtPmRhdGEt PnR4X3F1ZXVlX3N0YXRlW3R4X3F1ZXVlX2lkXSA9DQo+ID4gKwkJCVJURV9FVEhfUVVFVUVfU1RB VEVfSEFJUlBJTjsNCj4gPiArCXJldHVybiBldGhfZXJyKHBvcnRfaWQsIHJldCk7DQo+ID4gICB9 DQo+ID4NCj4gPiAgIHZvaWQNCj4gDQo+IFtzbmlwXQ0KPiANCj4gPiBkaWZmIC0tZ2l0IGEvbGli L2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oIGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRl di5oDQo+ID4gaW5kZXggZDkzN2ZiNC4uNTE4NDNjMSAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbGli cnRlX2V0aGRldi9ydGVfZXRoZGV2LmgNCj4gPiArKysgYi9saWIvbGlicnRlX2V0aGRldi9ydGVf ZXRoZGV2LmgNCj4gDQo+IFtzbmlwXQ0KPiANCj4gPiBAQCAtMTI3Nyw2ICsxMzE3LDcgQEAgc3Ry dWN0IHJ0ZV9ldGhfZGNiX2luZm8gew0KPiA+ICAgICovDQo+ID4gICAjZGVmaW5lIFJURV9FVEhf UVVFVUVfU1RBVEVfU1RPUFBFRCAwDQo+ID4gICAjZGVmaW5lIFJURV9FVEhfUVVFVUVfU1RBVEVf U1RBUlRFRCAxDQo+ID4gKyNkZWZpbmUgUlRFX0VUSF9RVUVVRV9TVEFURV9IQUlSUElOIDINCj4g DQo+IFNlZSBteSBub3RlcyBiZWxvdy4NCj4gQWxzbywgbWF5IGJlIG91dCBvZiBzY29wZSBvZiB0 aGUgcmV2aWV3LCBidXQNCj4gSSdkIG1vdmUgdGhlc2UgZGVmaW5lcyBvdXQgb2YgcHVibGljIGhl YWRlciB0byBydGVfZXRoZGV2X2RyaXZlci5oDQo+IGluIGEgc2VwYXJhdGUgcGF0Y2guDQo+DQoN Ck8uSy4gSSB3aWxsIGFkZCBhIGNvbW1pdCB0byBtb3ZlIHRoZW0uDQogDQo+ID4gICAjZGVmaW5l IFJURV9FVEhfQUxMIFJURV9NQVhfRVRIUE9SVFMNCj4gPg0KPiA+IEBAIC0xNzcxLDYgKzE4MTIs MzYgQEAgaW50IHJ0ZV9ldGhfcnhfcXVldWVfc2V0dXAodWludDE2X3QgcG9ydF9pZCwNCj4gdWlu dDE2X3QgcnhfcXVldWVfaWQsDQo+ID4gICAJCXN0cnVjdCBydGVfbWVtcG9vbCAqbWJfcG9vbCk7 DQo+ID4NCj4gPiAgIC8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5U QUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4g bm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIEFsbG9jYXRlIGFuZCBzZXQgdXAgYSBoYWlycGluIHJl Y2VpdmUgcXVldWUgZm9yIGFuIEV0aGVybmV0IGRldmljZS4NCj4gPiArICoNCj4gPiArICogVGhl IGZ1bmN0aW9uIHNldCB1cCB0aGUgc2VsZWN0ZWQgcXVldWUgdG8gYmUgdXNlZCBpbiBoYWlycGlu Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gcG9ydF9pZA0KPiA+ICsgKiAgIFRoZSBwb3J0IGlk ZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtIHJ4X3F1ZXVl X2lkDQo+ID4gKyAqICAgVGhlIGluZGV4IG9mIHRoZSByZWNlaXZlIHF1ZXVlIHRvIHNldCB1cC4N Cj4gPiArICogICBUaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIG5iX3J4X3F1ZXVl IC0gMV0gcHJldmlvdXNseSBzdXBwbGllZA0KPiA+ICsgKiAgIHRvIHJ0ZV9ldGhfZGV2X2NvbmZp Z3VyZSgpLg0KPiA+ICsgKiBAcGFyYW0gbmJfcnhfZGVzYw0KPiA+ICsgKiAgIFRoZSBudW1iZXIg b2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyB0byBhbGxvY2F0ZSBmb3IgdGhlIHJlY2VpdmUgcmluZy4N Cj4gPiArICogICAwIG1lYW5zIHRoZSBQTUQgd2lsbCB1c2UgZGVmYXVsdCB2YWx1ZS4NCj4gPiAr ICogQHBhcmFtIGNvbmYNCj4gPiArICogICBUaGUgcG9pbnRlciB0byB0aGUgaGFpcnBpbiBjb25m aWd1cmF0aW9uLg0KPiANCj4gVGhlcmUgaXMgZW1wdHkgbGluZSBiZXR3ZWVuIHBhcmFtZXRlcnMg YW5kIHJldHVybiBkZXNjcmlwdGlvbiBiZWxvdywNCj4gYnV0IGl0IGlzIG1pc3NpbmcgaGVyZS4g SXQgc2hvdWxkIGJlIHRoZSBzYW1lIGluIGJvdGggcGxhY2VzIGFuZCBJJ2QNCj4gcHJlZmVyIHRv IGhhdmUgZW1wdHkgbGluZSB0byBtYWtlIGl0IGVhc2llciB0byByZWFkLg0KPiANCg0KVGhpcyBp cyB0aGUgaG93IHRoZSBydGVfZXRoX2Rldl9pbmZvX2dldCBsb29rcyBsaWtlLiBKdXN0IGZvbGxv d2luZyB5b3VyIHJlcXVlc3Qg8J+Yig0KSSB0aGluayB0aGUgZW1wdHkgbGluZSBpcyBiZXR0ZXIg c28gSSB3aWxsIGFkZCBpdC4NCg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgLSAoMCkgaWYg c3VjY2Vzc2Z1bC4NCj4gPiArICogICAtICgtRU5PVFNVUCkgaWYgaGFyZHdhcmUgZG9lc24ndCBz dXBwb3J0Lg0KPiA+ICsgKiAgIC0gKC1FSU5WQUwpIGlmIGJhZCBwYXJhbWV0ZXIuDQo+ID4gKyAq ICAgLSAoLUVOT01FTSkgaWYgdW5hYmxlIHRvIGFsbG9jYXRlIHRoZSByZXNvdXJjZXMuDQo+ID4g KyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAraW50IHJ0ZV9ldGhfcnhfaGFpcnBp bl9xdWV1ZV9zZXR1cA0KPiA+ICsJKHVpbnQxNl90IHBvcnRfaWQsIHVpbnQxNl90IHJ4X3F1ZXVl X2lkLCB1aW50MTZfdCBuYl9yeF9kZXNjLA0KPiA+ICsJIGNvbnN0IHN0cnVjdCBydGVfZXRoX2hh aXJwaW5fY29uZiAqY29uZik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAgICAqIEFsbG9jYXRlIGFu ZCBzZXQgdXAgYSB0cmFuc21pdCBxdWV1ZSBmb3IgYW4gRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICAg ICoNCj4gPiAgICAqIEBwYXJhbSBwb3J0X2lkDQo+ID4gQEAgLTE4MjMsNiArMTg5NCwzNSBAQCBp bnQgcnRlX2V0aF90eF9xdWV1ZV9zZXR1cCh1aW50MTZfdCBwb3J0X2lkLA0KPiB1aW50MTZfdCB0 eF9xdWV1ZV9pZCwNCj4gPiAgIAkJY29uc3Qgc3RydWN0IHJ0ZV9ldGhfdHhjb25mICp0eF9jb25m KTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1F TlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dCBwcmlvcg0K PiBub3RpY2UNCj4gPiArICoNCj4gPiArICogQWxsb2NhdGUgYW5kIHNldCB1cCBhIHRyYW5zbWl0 IGhhaXJwaW4gcXVldWUgZm9yIGFuIEV0aGVybmV0IGRldmljZS4NCj4gPiArICoNCj4gPiArICog QHBhcmFtIHBvcnRfaWQNCj4gPiArICogICBUaGUgcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhl cm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbSB0eF9xdWV1ZV9pZA0KPiA+ICsgKiAgIFRoZSBp bmRleCBvZiB0aGUgdHJhbnNtaXQgcXVldWUgdG8gc2V0IHVwLg0KPiA+ICsgKiAgIFRoZSB2YWx1 ZSBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCwgbmJfdHhfcXVldWUgLSAxXSBwcmV2aW91c2x5IHN1 cHBsaWVkDQo+ID4gKyAqICAgdG8gcnRlX2V0aF9kZXZfY29uZmlndXJlKCkuDQo+ID4gKyAqIEBw YXJhbSBuYl90eF9kZXNjDQo+ID4gKyAqICAgVGhlIG51bWJlciBvZiB0cmFuc21pdCBkZXNjcmlw dG9ycyB0byBhbGxvY2F0ZSBmb3IgdGhlIHRyYW5zbWl0IHJpbmcuDQo+ID4gKyAqICAgMCB0byBz ZXQgZGVmYXVsdCBQTUQgdmFsdWUuDQo+ID4gKyAqIEBwYXJhbSBjb25mDQo+ID4gKyAqICAgVGhl IGhhaXJwaW4gY29uZmlndXJhdGlvbi4NCj4gPiArICoNCj4gPiArICogQHJldHVybg0KPiA+ICsg KiAgIC0gKDApIGlmIHN1Y2Nlc3NmdWwuDQo+ID4gKyAqICAgLSAoLUVOT1RTVVApIGlmIGhhcmR3 YXJlIGRvZXNuJ3Qgc3VwcG9ydC4NCj4gPiArICogICAtICgtRUlOVkFMKSBpZiBiYWQgcGFyYW1l dGVyLg0KPiA+ICsgKiAgIC0gKC1FTk9NRU0pIGlmIHVuYWJsZSB0byBhbGxvY2F0ZSB0aGUgcmVz b3VyY2VzLg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK2ludCBydGVf ZXRoX3R4X2hhaXJwaW5fcXVldWVfc2V0dXANCj4gPiArCSh1aW50MTZfdCBwb3J0X2lkLCB1aW50 MTZfdCB0eF9xdWV1ZV9pZCwgdWludDE2X3QgbmJfdHhfZGVzYywNCj4gPiArCSBjb25zdCBzdHJ1 Y3QgcnRlX2V0aF9oYWlycGluX2NvbmYgKmNvbmYpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gICAg KiBSZXR1cm4gdGhlIE5VTUEgc29ja2V0IHRvIHdoaWNoIGFuIEV0aGVybmV0IGRldmljZSBpcyBj b25uZWN0ZWQNCj4gPiAgICAqDQo+ID4gICAgKiBAcGFyYW0gcG9ydF9pZA0KPiANCj4gW3NuaXBd DQo+IA0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2X2NvcmUu aA0KPiBiL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXZfY29yZS5oDQo+ID4gaW5kZXggZGNi NWFlNi4uZWY0NmU3MSAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbGlicnRlX2V0aGRldi9ydGVfZXRo ZGV2X2NvcmUuaA0KPiA+ICsrKyBiL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXZfY29yZS5o DQo+ID4gQEAgLTI1MCw2ICsyNTAsMTIgQEAgdHlwZWRlZiBpbnQgKCpldGhfcnhfcXVldWVfc2V0 dXBfdCkoc3RydWN0DQo+IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ID4gICAJCQkJICAgIHN0cnVjdCBy dGVfbWVtcG9vbCAqbWJfcG9vbCk7DQo+ID4gICAvKio8IEBpbnRlcm5hbCBTZXQgdXAgYSByZWNl aXZlIHF1ZXVlIG9mIGFuIEV0aGVybmV0IGRldmljZS4gKi8NCj4gPg0KPiA+ICt0eXBlZGVmIGlu dCAoKmV0aF9yeF9oYWlycGluX3F1ZXVlX3NldHVwX3QpDQo+ID4gKwkoc3RydWN0IHJ0ZV9ldGhf ZGV2ICpkZXYsIHVpbnQxNl90IHJ4X3F1ZXVlX2lkLA0KPiA+ICsJIHVpbnQxNl90IG5iX3J4X2Rl c2MsDQo+ID4gKwkgY29uc3Qgc3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9jb25mICpjb25mKTsNCj4g PiArLyoqPCBAaW50ZXJuYWwgU2V0IHVwIGEgcmVjZWl2ZSBoYWlycGluIHF1ZXVlIG9mIGFuIEV0 aGVybmV0IGRldmljZS4gKi8NCj4gPiArDQo+IA0KPiBQbGVhc2UsIHdyaXRlIGRvd24gZnVsbCBk ZXNjcmlwdGlvbiBzaW1pbGFyIHRvIGV0aF9wcm9taXNjdW91c19lbmFibGVfdA0KPiBiZWZvcmUg dGhlIHR5cGVkZWYuIERvbid0IGZvcmdvdCBhYm91dCByZXR1cm4gdmFsdWVzIGxpc3RpbmcuDQo+ IA0KDQpPLksuIHdpbGwgYWRkIGRlc2NyaXB0aW9uLg0KDQo+ID4gICB0eXBlZGVmIGludCAoKmV0 aF90eF9xdWV1ZV9zZXR1cF90KShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gPiAgIAkJCQkg ICAgdWludDE2X3QgdHhfcXVldWVfaWQsDQo+ID4gICAJCQkJICAgIHVpbnQxNl90IG5iX3R4X2Rl c2MsDQo+ID4gQEAgLTI1Nyw2ICsyNjMsMTIgQEAgdHlwZWRlZiBpbnQgKCpldGhfdHhfcXVldWVf c2V0dXBfdCkoc3RydWN0DQo+IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ID4gICAJCQkJICAgIGNvbnN0 IHN0cnVjdCBydGVfZXRoX3R4Y29uZiAqdHhfY29uZik7DQo+ID4gICAvKio8IEBpbnRlcm5hbCBT ZXR1cCBhIHRyYW5zbWl0IHF1ZXVlIG9mIGFuIEV0aGVybmV0IGRldmljZS4gKi8NCj4gPg0KPiA+ ICt0eXBlZGVmIGludCAoKmV0aF90eF9oYWlycGluX3F1ZXVlX3NldHVwX3QpDQo+ID4gKwkoc3Ry dWN0IHJ0ZV9ldGhfZGV2ICpkZXYsIHVpbnQxNl90IHR4X3F1ZXVlX2lkLA0KPiA+ICsJIHVpbnQx Nl90IG5iX3R4X2Rlc2MsDQo+ID4gKwkgY29uc3Qgc3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9jb25m ICpoYWlycGluX2NvbmYpOw0KPiA+ICsvKio8IEBpbnRlcm5hbCBTZXR1cCBhIHRyYW5zbWl0IGhh aXJwaW4gcXVldWUgb2YgYW4gRXRoZXJuZXQgZGV2aWNlLiAqLw0KPiA+ICsNCj4gDQo+IA0KPiBQ bGVhc2UsIHdyaXRlIGRvd24gZnVsbCBkZXNjcmlwdGlvbiBzaW1pbGFyIHRvIGV0aF9wcm9taXNj dW91c19lbmFibGVfdA0KPiBiZWZvcmUgdGhlIHR5cGVkZWYuIERvbid0IGZvcmdvdCBhYm91dCBy ZXR1cm4gdmFsdWVzIGxpc3RpbmcuDQo+IA0KTy5LLiB3aWxsIGFkZCBkZXNjcmlwdGlvbi4NCg0K PiA+ICAgdHlwZWRlZiBpbnQgKCpldGhfcnhfZW5hYmxlX2ludHJfdCkoc3RydWN0IHJ0ZV9ldGhf ZGV2ICpkZXYsDQo+ID4gICAJCQkJICAgIHVpbnQxNl90IHJ4X3F1ZXVlX2lkKTsNCj4gPiAgIC8q KjwgQGludGVybmFsIEVuYWJsZSBpbnRlcnJ1cHQgb2YgYSByZWNlaXZlIHF1ZXVlIG9mIGFuIEV0 aGVybmV0IGRldmljZS4gKi8NCj4gPiBAQCAtNTA1LDYgKzUxNywxMCBAQCB0eXBlZGVmIGludCAo KmV0aF9wb29sX29wc19zdXBwb3J0ZWRfdCkoc3RydWN0DQo+IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ ID4gICAJCQkJCQljb25zdCBjaGFyICpwb29sKTsNCj4gPiAgIC8qKjwgQGludGVybmFsIFRlc3Qg aWYgYSBwb3J0IHN1cHBvcnRzIHNwZWNpZmljIG1lbXBvb2wgb3BzICovDQo+ID4NCj4gPiArdHlw ZWRlZiBpbnQgKCpldGhfaGFpcnBpbl9jYXBfZ2V0X3QpKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2 LA0KPiA+ICsJCQkJICAgICBzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NhcCAqY2FwKTsNCj4gPiAr LyoqPCBAaW50ZXJuYWwgZ2V0IHRoZSBoYWlycGluIGNhcGFiaWxpdGllcy4gKi8NCj4gPiArDQo+ IA0KPiBQbGVhc2UsIHdyaXRlIGRvd24gZnVsbCBkZXNjcmlwdGlvbiBzaW1pbGFyIHRvIGV0aF9w cm9taXNjdW91c19lbmFibGVfdA0KPiBiZWZvcmUgdGhlIHR5cGVkZWYuIERvbid0IGZvcmdvdCBh Ym91dCByZXR1cm4gdmFsdWVzIGxpc3RpbmcuDQo+DQoNCk8uSy4gd2lsbCBhZGQgZGVzY3JpcHRp b24uDQoNCiANCj4gSWYgeW91IHJlb3JkZXIgZnVuY3Rpb25zIGFzIHN1Z2dlc3RlZCBiZWxvdywg aGFpcnBpbiBxdWV1ZSBzZXR1cA0KPiB0eXBlZGVmcyBzaG91bGQgYmUgZGVmaWVuZCBoZXJlLg0K PiANCj4gPiAgIC8qKg0KPiA+ICAgICogQGludGVybmFsIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcg dGhlIGZ1bmN0aW9ucyBleHBvcnRlZCBieSBhbiBFdGhlcm5ldA0KPiBkcml2ZXIuDQo+ID4gICAg Ki8NCj4gPiBAQCAtNTU3LDYgKzU3Myw4IEBAIHN0cnVjdCBldGhfZGV2X29wcyB7DQo+ID4gICAJ ZXRoX3F1ZXVlX3N0YXJ0X3QgICAgICAgICAgdHhfcXVldWVfc3RhcnQ7LyoqPCBTdGFydCBUWCBm b3IgYSBxdWV1ZS4gKi8NCj4gPiAgIAlldGhfcXVldWVfc3RvcF90ICAgICAgICAgICB0eF9xdWV1 ZV9zdG9wOyAvKio8IFN0b3AgVFggZm9yIGEgcXVldWUuICovDQo+ID4gICAJZXRoX3J4X3F1ZXVl X3NldHVwX3QgICAgICAgcnhfcXVldWVfc2V0dXA7LyoqPCBTZXQgdXAgZGV2aWNlIFJYDQo+IHF1 ZXVlLiAqLw0KPiA+ICsJZXRoX3J4X2hhaXJwaW5fcXVldWVfc2V0dXBfdCByeF9oYWlycGluX3F1 ZXVlX3NldHVwOw0KPiA+ICsJLyoqPCBTZXQgdXAgZGV2aWNlIFJYIGhhaXJwaW4gcXVldWUuICov DQo+ID4gICAJZXRoX3F1ZXVlX3JlbGVhc2VfdCAgICAgICAgcnhfcXVldWVfcmVsZWFzZTsgLyoq PCBSZWxlYXNlIFJYIHF1ZXVlLg0KPiAqLw0KPiA+ICAgCWV0aF9yeF9xdWV1ZV9jb3VudF90ICAg ICAgIHJ4X3F1ZXVlX2NvdW50Ow0KPiA+ICAgCS8qKjwgR2V0IHRoZSBudW1iZXIgb2YgdXNlZCBS WCBkZXNjcmlwdG9ycy4gKi8NCj4gPiBAQCAtNTY4LDYgKzU4Niw4IEBAIHN0cnVjdCBldGhfZGV2 X29wcyB7DQo+ID4gICAJZXRoX3J4X2VuYWJsZV9pbnRyX3QgICAgICAgcnhfcXVldWVfaW50cl9l bmFibGU7ICAvKio8IEVuYWJsZSBSeCBxdWV1ZQ0KPiBpbnRlcnJ1cHQuICovDQo+ID4gICAJZXRo X3J4X2Rpc2FibGVfaW50cl90ICAgICAgcnhfcXVldWVfaW50cl9kaXNhYmxlOyAvKio8IERpc2Fi bGUgUnggcXVldWUNCj4gaW50ZXJydXB0LiAqLw0KPiA+ICAgCWV0aF90eF9xdWV1ZV9zZXR1cF90 ICAgICAgIHR4X3F1ZXVlX3NldHVwOy8qKjwgU2V0IHVwIGRldmljZSBUWA0KPiBxdWV1ZS4gKi8N Cj4gPiArCWV0aF90eF9oYWlycGluX3F1ZXVlX3NldHVwX3QgdHhfaGFpcnBpbl9xdWV1ZV9zZXR1 cDsNCj4gPiArCS8qKjwgU2V0IHVwIGRldmljZSBUWCBoYWlycGluIHF1ZXVlLiAqLw0KPiA+ICAg CWV0aF9xdWV1ZV9yZWxlYXNlX3QgICAgICAgIHR4X3F1ZXVlX3JlbGVhc2U7IC8qKjwgUmVsZWFz ZSBUWCBxdWV1ZS4gKi8NCj4gPiAgIAlldGhfdHhfZG9uZV9jbGVhbnVwX3QgICAgICB0eF9kb25l X2NsZWFudXA7LyoqPCBGcmVlIHR4IHJpbmcgbWJ1ZnMgKi8NCj4gPg0KPiA+IEBAIC02MzksNiAr NjU5LDkgQEAgc3RydWN0IGV0aF9kZXZfb3BzIHsNCj4gPg0KPiA+ICAgCWV0aF9wb29sX29wc19z dXBwb3J0ZWRfdCBwb29sX29wc19zdXBwb3J0ZWQ7DQo+ID4gICAJLyoqPCBUZXN0IGlmIGEgcG9y dCBzdXBwb3J0cyBzcGVjaWZpYyBtZW1wb29sIG9wcyAqLw0KPiA+ICsNCj4gPiArCWV0aF9oYWly cGluX2NhcF9nZXRfdCBoYWlycGluX2NhcF9nZXQ7DQo+ID4gKwkvKio8IFJldHVybnMgdGhlIGhh aXJwaW4gY2FwYWJpbGl0aWVzLiAqLw0KPiANCj4gTWF5IEkgc3VnZ2VzdCB0byBwdXQgaGFpcnBp biBxdWV1ZSBzZXR1cCBmdW5jdGlvbnMgaGVyZS4NCj4gSXQgd2lsbCBncm91cCBoYWlycGluIHJl bGF0ZWQgZnVuY3Rpb25zIGhlcmUuDQo+IA0KDQpJIGRvbid0IGNhcmUsIGJvdGggbWFrZXMgc2Vu c2UgdG8gbWUgKGdyb3VwIHRoZSBzZXR1cCBmdW5jdGlvbiBvciBncm91cCB0aGUgaGFpcnBpbiBm dW5jdGlvbikNCkJ1dCBJIHdpbGwgZm9sbG93IHlvdXIgc3VnZ2VzdGlvbi4NCg0KPiA+ICAgfTsN Cj4gPg0KPiA+ICAgLyoqDQo+ID4gQEAgLTc0Niw5ICs3NjksOSBAQCBzdHJ1Y3QgcnRlX2V0aF9k ZXZfZGF0YSB7DQo+ID4gICAJCWRldl9zdGFydGVkIDogMSwgICAvKio8IERldmljZSBzdGF0ZTog U1RBUlRFRCgxKSAvIFNUT1BQRUQoMCkuDQo+ICovDQo+ID4gICAJCWxybyAgICAgICAgIDogMTsg ICAvKio8IFJYIExSTyBpcyBPTigxKSAvIE9GRigwKSAqLw0KPiA+ICAgCXVpbnQ4X3QgcnhfcXVl dWVfc3RhdGVbUlRFX01BWF9RVUVVRVNfUEVSX1BPUlRdOw0KPiA+IC0JCQkvKio8IFF1ZXVlcyBz dGF0ZTogU1RBUlRFRCgxKSAvIFNUT1BQRUQoMCkuICovDQo+ID4gKwkJLyoqPCBRdWV1ZXMgc3Rh dGU6IEhBSVJQSU4oMikgLyBTVEFSVEVEKDEpIC8gU1RPUFBFRCgwKS4gKi8NCj4gPiAgIAl1aW50 OF90IHR4X3F1ZXVlX3N0YXRlW1JURV9NQVhfUVVFVUVTX1BFUl9QT1JUXTsNCj4gPiAtCQkJLyoq PCBRdWV1ZXMgc3RhdGU6IFNUQVJURUQoMSkgLyBTVE9QUEVEKDApLiAqLw0KPiA+ICsJCS8qKjwg UXVldWVzIHN0YXRlOiBIQUlSUElOKDIpIFNUQVJURUQoMSkgLyBTVE9QUEVEKDApLiAqLw0KPiAN Cj4gLyBpcyBtaXNzaW5nIGFib3ZlIGFmdGVyIEhBSVJQSU4oMikuDQo+IEluIGZhY3QgdGhlcmUg aXMgbm8gcG9pbnQgdG8gZHVwbGljYXRlIHZhbHVlcyBpbiBwYXJlbnRoZXNpcywgYnV0IGl0IGlz DQo+IG91dCBvZiBzY29wZSBvZiB0aGUgcmV2aWV3Lg0KPiANCg0KSSB3aWxsIGFkZCB0aGUgbWlz c2luZyAvDQoNCj4gSSdtIG5vdCAxMDAlIGhhcHB5IHRoYXQgaXQgbWFrZXMgaW1wb3NzaWJsZSB0 byBtYXJrIGhhaXJwaW4gcXVldWVzDQo+IGFzIHN0YXJ0ZWQvc3RvcHBlZC4gSXQgaXMgbm90IHRo YXQgaW1wb3J0YW50IHJpZ2h0IG5vdywgYnV0IG1heSBiZSBpdCBpcw0KPiBiZXR0ZXIgdG8gdXNl IHN0YXRlIGFzIGJpdCBmaWVsZC4gQml0IDAgLSBzdG9wcGVkL3N0YXJ0ZWQsDQo+IGJpdCAxIC0g cmVndWxhci9oYWlycGluLiBBbnl3YXksIGl0IGlzIGludGVybmFsIGludGVyZmFjZS4NCj4gDQoN CllvdXIgaWRlYSBpcyB2ZXJ5IG5pY2UsIGJ1dCB0aGVyZSBhcmUgc29tZSB0aGluZ3MgdG8gY29u c2lkZXIuDQpGb3IgZXhhbXBsZSBpZiBjb252ZXJ0ZWQgdG8gYml0cyBpdCB3aWxsIHRha2UgbW9y ZSBtZW1vcnkuDQpXZSBjYW4ganVzdCBpdCBpcyBmbGFncyBmb3IgdGhlIFU4IGJ1dCB0aGlzIHdp bGwgbWVhbiB0aGF0IHdlIGNvdWxkIGhhdmUgDQpib3RoIGhhaXJwaW4gYW5kIHN0b3BwZWQgLyBz dGFydGVkIGluIHRoZSBzYW1lIHRpbWUuIFdoaWNoIEknbSBub3Qgc3VyZSBpZiANCml0IGlzIGdv b2Qgb3IgYmFkLiBMaWtlIHlvdSBzYXkgaXQgaXMgaW50ZXJuYWwgc28gbGV0J3Mga2VlcCB0aGUg Y3VycmVudCBpbXBsZW1lbnRhdGlvbiwNCmFuZCBkaXNjdXNzIHlvdXIgaWRlYSBhZnRlciB0aGlz IHBhdGNoIHNldCwgYW5kIGFmdGVyIHdlIHdpbGwgc2VlIGhvdyB0aGUgY29tbXVuaXR5IHVzZXMg DQp0aGUgaGFpcnBpbiBmZWF0dXJlLiBJcyB0aGF0IE8uSy4gZm9yIHlvdT8NCg0KIA0KDQo+IFtz bmlwXQ0KDQo=