From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50079.outbound.protection.outlook.com [40.107.5.79]) by dpdk.org (Postfix) with ESMTP id 789441B129 for ; Tue, 29 Jan 2019 13:56:53 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1QokF/KLGKegNE+nOOs0FQJPYA8s7dX0rsK9+BdcY4=; b=CnKJyR8KYexD4FFDFNzQsyBj3MIPL/Pi7OXP4uoJem1lw/SmHvPXvmTAjH3TYDZuVxYqgwWG1eU6KTDnn5m4zBKhqrMWnPG/qxZb4HAaDwy9dgkJLfabI5i1p1cVn2esJT4tNuP5h3R+sI2+I5Hviw/NUScfLtfmwmv0IYL3oeo= Received: from HE1PR0801MB2076.eurprd08.prod.outlook.com (10.168.95.140) by HE1PR0801MB1609.eurprd08.prod.outlook.com (10.167.191.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1558.17; Tue, 29 Jan 2019 12:56:50 +0000 Received: from HE1PR0801MB2076.eurprd08.prod.outlook.com ([fe80::f5e3:70fc:e834:3c42]) by HE1PR0801MB2076.eurprd08.prod.outlook.com ([fe80::f5e3:70fc:e834:3c42%3]) with mapi id 15.20.1558.023; Tue, 29 Jan 2019 12:56:50 +0000 From: Ola Liljedahl To: "gage.eads@intel.com" , "dev@dpdk.org" CC: "jerinj@marvell.com" , "mczekaj@marvell.com" , nd , "bruce.richardson@intel.com" , "konstantin.ananyev@intel.com" , "stephen@networkplumber.org" , "olivier.matz@6wind.com" , "arybchenko@solarflare.com" Thread-Topic: [PATCH v4 1/5] ring: add 64-bit headtail structure Thread-Index: AQHUtzVnU7XLRrw54EefrByXaLP1HqXGNdWA Date: Tue, 29 Jan 2019 12:56:50 +0000 Message-ID: <1548766621.3135.26.camel@arm.com> References: <20190118152326.22686-1-gage.eads@intel.com> <20190128181407.32739-1-gage.eads@intel.com> <20190128181407.32739-2-gage.eads@intel.com> In-Reply-To: <20190128181407.32739-2-gage.eads@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.18.5.2-0ubuntu3.2 authentication-results: spf=none (sender IP is ) smtp.mailfrom=Ola.Liljedahl@arm.com; x-originating-ip: [217.140.96.140] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; HE1PR0801MB1609; 6:IYZoZF9Kgg1pvwYOSLOUJnLEVR7wcKJIm5RYvJBBxWlQol3fUxH4wYNZ4xCwPVcUNgUQSIM4WpHXfZ0opRacUUuv/i2iCGiDrFWowu1TYT7vYxN8Jy/8q09D1ZCQtzO/afJvXzSPld73TcZ+ab+vq2oz9xRL2CoRR5Tx/y3oEbxXRO/l0Jae3+G8VAnElY+7WiCmbsjAeNa7UOxkQYK33+4d/hBfewOzsqRPxJF0tMyo177nsZbSkHumcJBY4EJqXNQKAmD188TfectF+lN/4Rfj7EEQRRyGQ3MdCYlBbT3bGV1C4k4GB4Ux0LgeJ//P9HS44ClCH/aSuy6RZHKIK8L7tVb+4Sc0gDfXep9gumek3+AWGcodJxddJZKwlztMlbHh4QL72I+Ki9pRRv8lw2SoTXv6hMU81AL/52WkV9c4UWu5zoPA/IFbicTjMHuI5d8+TFM+qM9/SMTjGesLGQ==; 5:Nr7PvsfibiRV5qC2Y83RUaDTGOZXWPye4L9itd2veZzQjLnGX3/4F47KgSidi6Kg/igdNV1sECXaockrE8ZUFD3JUyhiDIxs6bv2qutgNB+akQGJWf4V3FPHKkKRuPAii+9nZg+uoPZChXiqgxiPnu6shkMuPdLDuuR9m/E3L2cOEOb1wAr/rnfwvtTxuVDBdhZ9hMD4xkrK5wpa7RgrWA==; 7:SPHlkhac9+9SXQSgckDWaC/vYzc/qfbdAvf6Xx+2IG/plWSk+CeQLIIzK/pSj9i7SC+ZSGhs7vA0nnK8ejjhhuY7K6zYktYaA2M2Ga0375uJqjH31AGGXIyXApXkEMjxDz9dLDESyO+pq18r5x6ZiQ== x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: fcdc74cb-f898-4ec4-ce17-08d685e93c20 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4618075)(2017052603328)(7153060)(7193020); SRVR:HE1PR0801MB1609; x-ms-traffictypediagnostic: HE1PR0801MB1609: x-ld-processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 093290AD39 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(366004)(136003)(376002)(396003)(189003)(199004)(110136005)(66066001)(25786009)(50226002)(68736007)(54906003)(446003)(97736004)(6512007)(316002)(8936002)(186003)(6436002)(2906002)(86362001)(71200400001)(14444005)(11346002)(256004)(53936002)(4744004)(478600001)(71190400001)(4326008)(26005)(81166006)(81156014)(72206003)(103116003)(8676002)(76176011)(476003)(36756003)(7736002)(2501003)(6246003)(229853002)(105586002)(99286004)(6116002)(3846002)(2616005)(102836004)(106356001)(6506007)(486006)(14454004)(305945005)(6486002)(30864003)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0801MB1609; H:HE1PR0801MB2076.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: ezbHt46+PMYhhovFOCPSRwKO2omjfNM7perRSd5wNwwIAqMSyJOqOHjH0O73ZlaRBzNict1QdKwmhfGFecYDHWiDQtCaZpi5QJ4uktk9tnnMK043WrXlXAg8MKnidzLH6IlNH3Ryn6ipkF1lGu6+IVOir/7CSND5fD348BoaN2Mi7HmEKwU5o/tjNMLhfN3fwQVF3oGx2AC9z6YQR5mKkZVB4eOCf5dli1nn07utkiFZZMOzARSC0e0F28Nzp/umHIaMFevp6N+WsJNPFDS4y39icUQHL/iejBulIgnrW71Mj5WNUJjl9f9uAaqRM2CX5bLWXm8vZ+bxQKZzrrk68vpVzYJLdfJXsV5CbYwYdJwrmAWWeBxVQu3hISmzG40NpmH4pGcZkC2LpNDNBB/EqSej5tYNsLcFA2LqwaL4Bqo= Content-Type: text/plain; charset="utf-8" Content-ID: <11E254F58C00A1479A7B447797D86037@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: fcdc74cb-f898-4ec4-ce17-08d685e93c20 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jan 2019 12:56:50.0739 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1609 Subject: Re: [dpdk-dev] [PATCH v4 1/5] ring: add 64-bit headtail structure 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: , X-List-Received-Date: Tue, 29 Jan 2019 12:56:53 -0000 T24gTW9uLCAyMDE5LTAxLTI4IGF0IDEyOjE0IC0wNjAwLCBHYWdlIEVhZHMgd3JvdGU6DQo+IDY0 LWJpdCBoZWFkIGFuZCB0YWlsIGluZGV4IHdpZHRocyBncmVhdGx5IGluY3JlYXNlcyB0aGUgdGlt ZSBpdCB0YWtlcyBmb3INCj4gdGhlbSB0byB3cmFwLWFyb3VuZCAod2l0aCBjdXJyZW50IENQVSBz cGVlZHMsIGl0IHdvbid0IGhhcHBlbiB3aXRoaW4gdGhlDQo+IGF1dGhvcidzIGxpZmV0aW1lKS4g VGhpcyBpcyBmdW5kYW1lbnRhbCB0byBhdm9pZGluZyB0aGUgQUJBIHByb2JsZW0gLS0gaW4NCj4g d2hpY2ggYSB0aHJlYWQgbWlzdGFrZXMgcmVhZGluZyB0aGUgc2FtZSB0YWlsIGluZGV4IGluIHR3 byBhY2Nlc3NlcyB0byBtZWFuDQo+IHRoYXQgdGhlIHJpbmcgd2FzIG5vdCBtb2RpZmllZCBpbiB0 aGUgaW50ZXJ2ZW5pbmcgdGltZSAtLSBpbiB0aGUgdXBjb21pbmcNCj4gbm9uLWJsb2NraW5nIHJp bmcgaW1wbGVtZW50YXRpb24uIFVzaW5nIGEgNjQtYml0IGluZGV4IG1ha2VzIHRoZQ0KPiBwb3Nz aWJpbGl0eSBvZiB0aGlzIG9jY3VycmluZyBlZmZlY3RpdmVseSB6ZXJvLg0KSnVzdCBhbiBvYnNl cnZhdGlvbi4NClRoZSBmb2xsb3dpbmcgaW52YXJpYW50IGhvbGRzICh1c2luZyByaW5nX3NpemUg aW5zdGVhZCBvZiBtYXNrKToNCuKIgCBpbmRleDogcmluZ1tpbmRleCAlIHJpbmdfc2l6ZV0uaW5k ZXggJSByaW5nX3NpemUgPT0gaW5kZXggJSByaW5nX3NpemUNCmkuZS4gdGhlIE4gKE49bG9nMiBy aW5nIHNpemUpIGxzYiBvZiByaW5nW10uaW5kZXggd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgKGZv ciBhDQpzcGVjaWZpYyBzbG90KSBzbyBzZXJ2ZSBubyBwdXJwb3NlLg0KDQpUaGlzIG1lYW5zIHdl IGRvbid0IGhhdmUgdG8gc3RvcmUgdGhlIHdob2xlIGluZGV4IGluIGVhY2ggc2xvdCwgaXQgaXMg ZW5vdWdoIHRvDQpzdG9yZSAiaW5kZXggLyByaW5nX3NpemUiICh3aGljaCBJIGNhbGwgdGhlIGxh cCBjb3VudGVyKS4gVGhpcyBjb3VsZCBiZSB1c2VmdWwNCmZvciBhbiBpbXBsZW1lbnRhdGlvbiBm b3IgMzItYml0IHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IDY0LWJpdCBDQVMgKHRvIHdyaXRlDQp0 aGUgc2xvdCBwdHIgJiBpbmRleCAobGFwIGNvdW50ZXIpIGF0b21pY2FsbHkpIGFuZCB1c2VzIDY0 LWJpdCBoZWFkICYgdGFpbA0KaW5kZXhlcyAodG8gYXZvaWQgdGhlIHF1aWNrIHdyYXAgYXJvdW5k IHlvdSB3b3VsZCBoYXZlIHdpdGggMzItYml0IHJpbmcNCmluZGV4ZXMpLg0KDQpTbw0KcmluZ1tp bmRleCAlIHJpbmdfc2l6ZV0ubGFwID0gaW5kZXggLyByaW5nX3NpemU7DQoNCkFuIGltcGxlbWVu dGF0aW9uIGNvdWxkIG9mIGNvdXJzZSB1c2UgYml0d2lzZS1hbmQgaW5zdGVhZCBvZiBtb2R1bG8g YW5kIGJpdHdpc2UtDQpyaWdodCBzaGlmdCBpbnN0ZWFkIG9mIGRpdmlzaW9uLiBUaGUgMi1sb2dh cml0bSBvZiByaW5nX3NpemUgc2hvdWxkIGFsc28gYmUgcHJlLQ0KY2FsY3VjYXRlZCBhbmQgc3Rv cmVkIGluIHRoZSByaW5nIGJ1ZmZlciBtZXRhZGF0YS4NCg0KLS0gT2xhDQoNCj4gDQo+IFRoaXMg Y29tbWl0IHBsYWNlcyB0aGUgbmV3IHByb2R1Y2VyIGFuZCBjb25zdW1lciBzdHJ1Y3R1cmVzIGlu IHRoZSBzYW1lDQo+IGxvY2F0aW9uIGluIHN0cnVjdCBydGVfcmluZyBhcyB0aGVpciAzMi1iaXQg Y291bnRlcnBhcnRzLiBTaW5jZSB0aGUgMzItYml0DQo+IHZlcnNpb25zIGFyZSBwYWRkZWQgb3V0 IHRvIGEgY2FjaGUgbGluZSwgdGhlcmUgaXMgc3BhY2UgZm9yIHRoZSBuZXcNCj4gc3RydWN0dXJl IHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBsYXlvdXQgb2Ygc3RydWN0IHJ0ZV9yaW5nLiBUaHVzLCB0 aGUgQUJJIGlzDQo+IHByZXNlcnZlZC4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEdhZ2UgRWFkcyA8 Z2FnZS5lYWRzQGludGVsLmNvbT4NCj4gLS0tDQo+IMKgbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5n LmjCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIzICsrKysrLQ0KPiDCoGxpYi9saWJydGVfcmluZy9y dGVfcmluZ19jMTFfbWVtLmggfCAxNTMNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKw0KPiDCoGxpYi9saWJydGVfcmluZy9ydGVfcmluZ19nZW5lcmljLmggfCAxMzkgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+IMKgMyBmaWxlcyBjaGFuZ2VkLCAzMTIg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9saWIvbGli cnRlX3JpbmcvcnRlX3JpbmcuaCBiL2xpYi9saWJydGVfcmluZy9ydGVfcmluZy5oDQo+IGluZGV4 IGFmNTQ0NGE5Zi4uMDBkZmI1Yjg1IDEwMDY0NA0KPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRl X3JpbmcuaA0KPiArKysgYi9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmcuaA0KPiBAQCAtMSw2ICsx LDYgQEANCj4gwqAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+IMKg ICoNCj4gLSAqIENvcHlyaWdodCAoYykgMjAxMC0yMDE3IEludGVsIENvcnBvcmF0aW9uDQo+ICsg KiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbg0KPiDCoCAqIENvcHly aWdodCAoYykgMjAwNy0yMDA5IEtpcCBNYWN5IGttYWN5QGZyZWVic2Qub3JnDQo+IMKgICogQWxs IHJpZ2h0cyByZXNlcnZlZC4NCj4gwqAgKiBEZXJpdmVkIGZyb20gRnJlZUJTRCdzIGJ1ZnJpbmcu aA0KPiBAQCAtNzAsNiArNzAsMTUgQEAgc3RydWN0IHJ0ZV9yaW5nX2hlYWR0YWlsIHsNCj4gwqAJ dWludDMyX3Qgc2luZ2xlO8KgwqDCoMKgwqDCoMKgwqDCoC8qKjwgVHJ1ZSBpZiBzaW5nbGUgcHJv ZC9jb25zICovDQo+IMKgfTsNCj4gwqANCj4gKy8qIDY0LWJpdCB2ZXJzaW9uIG9mIHJ0ZV9yaW5n X2hlYWR0YWlsLCBmb3IgdXNlIGJ5IHJpbmdzIHRoYXQgbmVlZCB0byBhdm9pZA0KPiArICogaGVh ZC90YWlsIHdyYXAtYXJvdW5kLg0KPiArICovDQo+ICtzdHJ1Y3QgcnRlX3JpbmdfaGVhZHRhaWxf NjQgew0KPiArCXZvbGF0aWxlIHVpbnQ2NF90IGhlYWQ7wqDCoC8qKjwgUHJvZC9jb25zdW1lciBo ZWFkLiAqLw0KPiArCXZvbGF0aWxlIHVpbnQ2NF90IHRhaWw7wqDCoC8qKjwgUHJvZC9jb25zdW1l ciB0YWlsLiAqLw0KPiArCXVpbnQzMl90IHNpbmdsZTvCoMKgwqDCoMKgwqDCoC8qKjwgVHJ1ZSBp ZiBzaW5nbGUgcHJvZC9jb25zICovDQo+ICt9Ow0KPiArDQo+IMKgLyoqDQo+IMKgICogQW4gUlRF IHJpbmcgc3RydWN0dXJlLg0KPiDCoCAqDQo+IEBAIC05NywxMSArMTA2LDE5IEBAIHN0cnVjdCBy dGVfcmluZyB7DQo+IMKgCWNoYXIgcGFkMCBfX3J0ZV9jYWNoZV9hbGlnbmVkOyAvKio8IGVtcHR5 IGNhY2hlIGxpbmUgKi8NCj4gwqANCj4gwqAJLyoqIFJpbmcgcHJvZHVjZXIgc3RhdHVzLiAqLw0K PiAtCXN0cnVjdCBydGVfcmluZ19oZWFkdGFpbCBwcm9kIF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ ICsJUlRFX1NURF9DMTENCj4gKwl1bmlvbiB7DQo+ICsJCXN0cnVjdCBydGVfcmluZ19oZWFkdGFp bCBwcm9kIF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ICsJCXN0cnVjdCBydGVfcmluZ19oZWFkdGFp bF82NCBwcm9kXzY0IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ICsJfTsNCj4gwqAJY2hhciBwYWQx IF9fcnRlX2NhY2hlX2FsaWduZWQ7IC8qKjwgZW1wdHkgY2FjaGUgbGluZSAqLw0KPiDCoA0KPiDC oAkvKiogUmluZyBjb25zdW1lciBzdGF0dXMuICovDQo+IC0Jc3RydWN0IHJ0ZV9yaW5nX2hlYWR0 YWlsIGNvbnMgX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gKwlSVEVfU1REX0MxMQ0KPiArCXVuaW9u IHsNCj4gKwkJc3RydWN0IHJ0ZV9yaW5nX2hlYWR0YWlsIGNvbnMgX19ydGVfY2FjaGVfYWxpZ25l ZDsNCj4gKwkJc3RydWN0IHJ0ZV9yaW5nX2hlYWR0YWlsXzY0IGNvbnNfNjQgX19ydGVfY2FjaGVf YWxpZ25lZDsNCj4gKwl9Ow0KPiDCoAljaGFyIHBhZDIgX19ydGVfY2FjaGVfYWxpZ25lZDsgLyoq PCBlbXB0eSBjYWNoZSBsaW5lICovDQo+IMKgfTsNCj4gwqANCj4gZGlmZiAtLWdpdCBhL2xpYi9s aWJydGVfcmluZy9ydGVfcmluZ19jMTFfbWVtLmgNCj4gYi9saWIvbGlicnRlX3JpbmcvcnRlX3Jp bmdfYzExX21lbS5oDQo+IGluZGV4IDBmYjczYTMzNy4uNDdhY2Q0YzdjIDEwMDY0NA0KPiAtLS0g YS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfYzExX21lbS5oDQo+ICsrKyBiL2xpYi9saWJydGVf cmluZy9ydGVfcmluZ19jMTFfbWVtLmgNCj4gQEAgLTE3OCw0ICsxNzgsMTU3IEBAIF9fcnRlX3Jp bmdfbW92ZV9jb25zX2hlYWQoc3RydWN0IHJ0ZV9yaW5nICpyLCBpbnQgaXNfc2MsDQo+IMKgCXJl dHVybiBuOw0KPiDCoH0NCj4gwqANCj4gKy8qKg0KPiArICogQGludGVybmFsIFRoaXMgZnVuY3Rp b24gdXBkYXRlcyB0aGUgcHJvZHVjZXIgaGVhZCBmb3IgZW5xdWV1ZSB1c2luZw0KPiArICoJwqDC oMKgwqDCoDY0LWJpdCBoZWFkL3RhaWwgdmFsdWVzLg0KPiArICoNCj4gKyAqIEBwYXJhbSByDQo+ ICsgKsKgwqDCoEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUNCj4gKyAqIEBwYXJhbSBp c19zcA0KPiArICrCoMKgwqBJbmRpY2F0ZXMgd2hldGhlciBtdWx0aS1wcm9kdWNlciBwYXRoIGlz IG5lZWRlZCBvciBub3QNCj4gKyAqIEBwYXJhbSBuDQo+ICsgKsKgwqDCoFRoZSBudW1iZXIgb2Yg ZWxlbWVudHMgd2Ugd2lsbCB3YW50IHRvIGVucXVldWUsIGkuZS4gaG93IGZhciBzaG91bGQgdGhl DQo+ICsgKsKgwqDCoGhlYWQgYmUgbW92ZWQNCj4gKyAqIEBwYXJhbSBiZWhhdmlvcg0KPiArICrC oMKgwqBSVEVfUklOR19RVUVVRV9GSVhFRDrCoMKgwqDCoEVucXVldWUgYSBmaXhlZCBudW1iZXIg b2YgaXRlbXMgZnJvbSBhIHJpbmcNCj4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6 IEVucXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZSBmcm9tIHJpbmcNCj4gKyAqIEBwYXJh bSBvbGRfaGVhZA0KPiArICrCoMKgwqBSZXR1cm5zIGhlYWQgdmFsdWUgYXMgaXQgd2FzIGJlZm9y ZSB0aGUgbW92ZSwgaS5lLiB3aGVyZSBlbnF1ZXVlIHN0YXJ0cw0KPiArICogQHBhcmFtIG5ld19o ZWFkDQo+ICsgKsKgwqDCoFJldHVybnMgdGhlIGN1cnJlbnQvbmV3IGhlYWQgdmFsdWUgaS5lLiB3 aGVyZSBlbnF1ZXVlIGZpbmlzaGVzDQo+ICsgKiBAcGFyYW0gZnJlZV9lbnRyaWVzDQo+ICsgKsKg wqDCoFJldHVybnMgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIGluIHRoZSByaW5nIEJFRk9SRSBo ZWFkIHdhcyBtb3ZlZA0KPiArICogQHJldHVybg0KPiArICrCoMKgwqBBY3R1YWwgbnVtYmVyIG9m IG9iamVjdHMgZW5xdWV1ZWQuDQo+ICsgKsKgwqDCoElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FV RVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ICsgKi8NCj4gK3N0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiArX19ydGVfcmluZ19tb3ZlX3Byb2Rf aGVhZF82NChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHVuc2lnbmVkIGludCBpc19zcCwNCj4gKwkJdW5z aWduZWQgaW50IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ICsJ CXVpbnQ2NF90ICpvbGRfaGVhZCwgdWludDY0X3QgKm5ld19oZWFkLA0KPiArCQl1aW50MzJfdCAq ZnJlZV9lbnRyaWVzKQ0KPiArew0KPiArCWNvbnN0IHVpbnQzMl90IGNhcGFjaXR5ID0gci0+Y2Fw YWNpdHk7DQo+ICsJdWludDY0X3QgY29uc190YWlsOw0KPiArCXVuc2lnbmVkIGludCBtYXggPSBu Ow0KPiArCWludCBzdWNjZXNzOw0KPiArDQo+ICsJKm9sZF9oZWFkID0gX19hdG9taWNfbG9hZF9u KCZyLT5wcm9kXzY0LmhlYWQsIF9fQVRPTUlDX1JFTEFYRUQpOw0KPiArCWRvIHsNCj4gKwkJLyog UmVzZXQgbiB0byB0aGUgaW5pdGlhbCBidXJzdCBjb3VudCAqLw0KPiArCQluID0gbWF4Ow0KPiAr DQo+ICsJCS8qIEVuc3VyZSB0aGUgaGVhZCBpcyByZWFkIGJlZm9yZSB0YWlsICovDQo+ICsJCV9f YXRvbWljX3RocmVhZF9mZW5jZShfX0FUT01JQ19BQ1FVSVJFKTsNCj4gKw0KPiArCQkvKiBsb2Fk LWFjcXVpcmUgc3luY2hyb25pemUgd2l0aCBzdG9yZS1yZWxlYXNlIG9mIGh0LT50YWlsDQo+ICsJ CcKgKiBpbiB1cGRhdGVfdGFpbC4NCj4gKwkJwqAqLw0KPiArCQljb25zX3RhaWwgPSBfX2F0b21p Y19sb2FkX24oJnItPmNvbnNfNjQudGFpbCwNCj4gKwkJCQkJX19BVE9NSUNfQUNRVUlSRSk7DQo+ ICsNCj4gKwkJLyogVGhlIHN1YnRyYWN0aW9uIGlzIGRvbmUgYmV0d2VlbiB0d28gdW5zaWduZWQg MzJiaXRzIHZhbHVlDQo+ICsJCcKgKiAodGhlIHJlc3VsdCBpcyBhbHdheXMgbW9kdWxvIDMyIGJp dHMgZXZlbiBpZiB3ZSBoYXZlDQo+ICsJCcKgKiAqb2xkX2hlYWQgPiBjb25zX3RhaWwpLiBTbyAn ZnJlZV9lbnRyaWVzJyBpcyBhbHdheXMNCj4gYmV0d2VlbiAwDQo+ICsJCcKgKiBhbmQgY2FwYWNp dHkgKHdoaWNoIGlzIDwgc2l6ZSkuDQo+ICsJCcKgKi8NCj4gKwkJKmZyZWVfZW50cmllcyA9IChj YXBhY2l0eSArIGNvbnNfdGFpbCAtICpvbGRfaGVhZCk7DQo+ICsNCj4gKwkJLyogY2hlY2sgdGhh dCB3ZSBoYXZlIGVub3VnaCByb29tIGluIHJpbmcgKi8NCj4gKwkJaWYgKHVubGlrZWx5KG4gPiAq ZnJlZV9lbnRyaWVzKSkNCj4gKwkJCW4gPSAoYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklY RUQpID8NCj4gKwkJCQkJMCA6ICpmcmVlX2VudHJpZXM7DQo+ICsNCj4gKwkJaWYgKG4gPT0gMCkN Cj4gKwkJCXJldHVybiAwOw0KPiArDQo+ICsJCSpuZXdfaGVhZCA9ICpvbGRfaGVhZCArIG47DQo+ ICsJCWlmIChpc19zcCkNCj4gKwkJCXItPnByb2RfNjQuaGVhZCA9ICpuZXdfaGVhZCwgc3VjY2Vz cyA9IDE7DQo+ICsJCWVsc2UNCj4gKwkJCS8qIG9uIGZhaWx1cmUsICpvbGRfaGVhZCBpcyB1cGRh dGVkICovDQo+ICsJCQlzdWNjZXNzID0gX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uKCZyLQ0K PiA+cHJvZF82NC5oZWFkLA0KPiArCQkJCQlvbGRfaGVhZCwgKm5ld19oZWFkLA0KPiArCQkJCQkw LCBfX0FUT01JQ19SRUxBWEVELA0KPiArCQkJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gKwl9IHdo aWxlICh1bmxpa2VseShzdWNjZXNzID09IDApKTsNCj4gKwlyZXR1cm4gbjsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgKiBAaW50ZXJuYWwgVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBjb25zdW1l ciBoZWFkIGZvciBkZXF1ZXVlIHVzaW5nDQo+ICsgKgnCoMKgwqDCoMKgNjQtYml0IGhlYWQvdGFp bCB2YWx1ZXMuDQo+ICsgKg0KPiArICogQHBhcmFtIHINCj4gKyAqwqDCoMKgQSBwb2ludGVyIHRv IHRoZSByaW5nIHN0cnVjdHVyZQ0KPiArICogQHBhcmFtIGlzX3NjDQo+ICsgKsKgwqDCoEluZGlj YXRlcyB3aGV0aGVyIG11bHRpLWNvbnN1bWVyIHBhdGggaXMgbmVlZGVkIG9yIG5vdA0KPiArICog QHBhcmFtIG4NCj4gKyAqwqDCoMKgVGhlIG51bWJlciBvZiBlbGVtZW50cyB3ZSB3aWxsIHdhbnQg dG8gZW5xdWV1ZSwgaS5lLiBob3cgZmFyIHNob3VsZCB0aGUNCj4gKyAqwqDCoMKgaGVhZCBiZSBt b3ZlZA0KPiArICogQHBhcmFtIGJlaGF2aW9yDQo+ICsgKsKgwqDCoFJURV9SSU5HX1FVRVVFX0ZJ WEVEOsKgwqDCoMKgRGVxdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcyBmcm9tIGEgcmluZw0K PiArICrCoMKgwqBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRGVxdWV1ZSBhcyBtYW55IGl0ZW1z IGFzIHBvc3NpYmxlIGZyb20gcmluZw0KPiArICogQHBhcmFtIG9sZF9oZWFkDQo+ICsgKsKgwqDC oFJldHVybnMgaGVhZCB2YWx1ZSBhcyBpdCB3YXMgYmVmb3JlIHRoZSBtb3ZlLCBpLmUuIHdoZXJl IGRlcXVldWUgc3RhcnRzDQo+ICsgKiBAcGFyYW0gbmV3X2hlYWQNCj4gKyAqwqDCoMKgUmV0dXJu cyB0aGUgY3VycmVudC9uZXcgaGVhZCB2YWx1ZSBpLmUuIHdoZXJlIGRlcXVldWUgZmluaXNoZXMN Cj4gKyAqIEBwYXJhbSBlbnRyaWVzDQo+ICsgKsKgwqDCoFJldHVybnMgdGhlIG51bWJlciBvZiBl bnRyaWVzIGluIHRoZSByaW5nIEJFRk9SRSBoZWFkIHdhcyBtb3ZlZA0KPiArICogQHJldHVybg0K PiArICrCoMKgwqAtIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBkZXF1ZXVlZC4NCj4gKyAqwqDC oMKgwqDCoElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUg MCBvciBuIG9ubHkuDQo+ICsgKi8NCj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2ln bmVkIGludA0KPiArX19ydGVfcmluZ19tb3ZlX2NvbnNfaGVhZF82NChzdHJ1Y3QgcnRlX3Jpbmcg KnIsIHVuc2lnbmVkIGludCBpc19zYywNCj4gKwkJdW5zaWduZWQgaW50IG4sIGVudW0gcnRlX3Jp bmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ICsJCXVpbnQ2NF90ICpvbGRfaGVhZCwgdWlu dDY0X3QgKm5ld19oZWFkLA0KPiArCQl1aW50MzJfdCAqZW50cmllcykNCj4gK3sNCj4gKwl1bnNp Z25lZCBpbnQgbWF4ID0gbjsNCj4gKwl1aW50NjRfdCBwcm9kX3RhaWw7DQo+ICsJaW50IHN1Y2Nl c3M7DQo+ICsNCj4gKwkvKiBtb3ZlIGNvbnMuaGVhZCBhdG9taWNhbGx5ICovDQo+ICsJKm9sZF9o ZWFkID0gX19hdG9taWNfbG9hZF9uKCZyLT5jb25zXzY0LmhlYWQsIF9fQVRPTUlDX1JFTEFYRUQp Ow0KPiArCWRvIHsNCj4gKwkJLyogUmVzdG9yZSBuIGFzIGl0IG1heSBjaGFuZ2UgZXZlcnkgbG9v cCAqLw0KPiArCQluID0gbWF4Ow0KPiArDQo+ICsJCS8qIEVuc3VyZSB0aGUgaGVhZCBpcyByZWFk IGJlZm9yZSB0YWlsICovDQo+ICsJCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FUT01JQ19BQ1FV SVJFKTsNCj4gKw0KPiArCQkvKiB0aGlzIGxvYWQtYWNxdWlyZSBzeW5jaHJvbml6ZSB3aXRoIHN0 b3JlLXJlbGVhc2Ugb2YgaHQtDQo+ID50YWlsDQo+ICsJCcKgKiBpbiB1cGRhdGVfdGFpbC4NCj4g KwkJwqAqLw0KPiArCQlwcm9kX3RhaWwgPSBfX2F0b21pY19sb2FkX24oJnItPnByb2RfNjQudGFp bCwNCj4gKwkJCQkJX19BVE9NSUNfQUNRVUlSRSk7DQo+ICsNCj4gKwkJLyogVGhlIHN1YnRyYWN0 aW9uIGlzIGRvbmUgYmV0d2VlbiB0d28gdW5zaWduZWQgMzJiaXRzIHZhbHVlDQo+ICsJCcKgKiAo dGhlIHJlc3VsdCBpcyBhbHdheXMgbW9kdWxvIDMyIGJpdHMgZXZlbiBpZiB3ZSBoYXZlDQo+ICsJ CcKgKiBjb25zX2hlYWQgPiBwcm9kX3RhaWwpLiBTbyAnZW50cmllcycgaXMgYWx3YXlzIGJldHdl ZW4gMA0KPiArCQnCoCogYW5kIHNpemUocmluZyktMS4NCj4gKwkJwqAqLw0KPiArCQkqZW50cmll cyA9IChwcm9kX3RhaWwgLSAqb2xkX2hlYWQpOw0KPiArDQo+ICsJCS8qIFNldCB0aGUgYWN0dWFs IGVudHJpZXMgZm9yIGRlcXVldWUgKi8NCj4gKwkJaWYgKG4gPiAqZW50cmllcykNCj4gKwkJCW4g PSAoYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQpID8gMCA6DQo+ICplbnRyaWVzOw0K PiArDQo+ICsJCWlmICh1bmxpa2VseShuID09IDApKQ0KPiArCQkJcmV0dXJuIDA7DQo+ICsNCj4g KwkJKm5ld19oZWFkID0gKm9sZF9oZWFkICsgbjsNCj4gKwkJaWYgKGlzX3NjKQ0KPiArCQkJci0+ Y29uc182NC5oZWFkID0gKm5ld19oZWFkLCBzdWNjZXNzID0gMTsNCj4gKwkJZWxzZQ0KPiArCQkJ Lyogb24gZmFpbHVyZSwgKm9sZF9oZWFkIHdpbGwgYmUgdXBkYXRlZCAqLw0KPiArCQkJc3VjY2Vz cyA9IF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfbigmci0NCj4gPmNvbnNfNjQuaGVhZCwNCj4g KwkJCQkJCQlvbGRfaGVhZCwgKm5ld19oZWFkLA0KPiArCQkJCQkJCTAsIF9fQVRPTUlDX1JFTEFY RUQsDQo+ICsJCQkJCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ICsJfSB3aGlsZSAodW5saWtlbHko c3VjY2VzcyA9PSAwKSk7DQo+ICsJcmV0dXJuIG47DQo+ICt9DQo+ICsNCj4gwqAjZW5kaWYgLyog X1JURV9SSU5HX0MxMV9NRU1fSF8gKi8NCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9y dGVfcmluZ19nZW5lcmljLmgNCj4gYi9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfZ2VuZXJpYy5o DQo+IGluZGV4IGVhN2RiZTViOS4uMjE1OGUwOTJhIDEwMDY0NA0KPiAtLS0gYS9saWIvbGlicnRl X3JpbmcvcnRlX3JpbmdfZ2VuZXJpYy5oDQo+ICsrKyBiL2xpYi9saWJydGVfcmluZy9ydGVfcmlu Z19nZW5lcmljLmgNCj4gQEAgLTE2Nyw0ICsxNjcsMTQzIEBAIF9fcnRlX3JpbmdfbW92ZV9jb25z X2hlYWQoc3RydWN0IHJ0ZV9yaW5nICpyLCB1bnNpZ25lZA0KPiBpbnQgaXNfc2MsDQo+IMKgCXJl dHVybiBuOw0KPiDCoH0NCj4gwqANCj4gKy8qKg0KPiArICogQGludGVybmFsIFRoaXMgZnVuY3Rp b24gdXBkYXRlcyB0aGUgcHJvZHVjZXIgaGVhZCBmb3IgZW5xdWV1ZSB1c2luZw0KPiArICoJwqDC oMKgwqDCoDY0LWJpdCBoZWFkL3RhaWwgdmFsdWVzLg0KPiArICoNCj4gKyAqIEBwYXJhbSByDQo+ ICsgKsKgwqDCoEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUNCj4gKyAqIEBwYXJhbSBp c19zcA0KPiArICrCoMKgwqBJbmRpY2F0ZXMgd2hldGhlciBtdWx0aS1wcm9kdWNlciBwYXRoIGlz IG5lZWRlZCBvciBub3QNCj4gKyAqIEBwYXJhbSBuDQo+ICsgKsKgwqDCoFRoZSBudW1iZXIgb2Yg ZWxlbWVudHMgd2Ugd2lsbCB3YW50IHRvIGVucXVldWUsIGkuZS4gaG93IGZhciBzaG91bGQgdGhl DQo+ICsgKsKgwqDCoGhlYWQgYmUgbW92ZWQNCj4gKyAqIEBwYXJhbSBiZWhhdmlvcg0KPiArICrC oMKgwqBSVEVfUklOR19RVUVVRV9GSVhFRDrCoMKgwqDCoEVucXVldWUgYSBmaXhlZCBudW1iZXIg b2YgaXRlbXMgZnJvbSBhIHJpbmcNCj4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6 IEVucXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZSBmcm9tIHJpbmcNCj4gKyAqIEBwYXJh bSBvbGRfaGVhZA0KPiArICrCoMKgwqBSZXR1cm5zIGhlYWQgdmFsdWUgYXMgaXQgd2FzIGJlZm9y ZSB0aGUgbW92ZSwgaS5lLiB3aGVyZSBlbnF1ZXVlIHN0YXJ0cw0KPiArICogQHBhcmFtIG5ld19o ZWFkDQo+ICsgKsKgwqDCoFJldHVybnMgdGhlIGN1cnJlbnQvbmV3IGhlYWQgdmFsdWUgaS5lLiB3 aGVyZSBlbnF1ZXVlIGZpbmlzaGVzDQo+ICsgKiBAcGFyYW0gZnJlZV9lbnRyaWVzDQo+ICsgKsKg wqDCoFJldHVybnMgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIGluIHRoZSByaW5nIEJFRk9SRSBo ZWFkIHdhcyBtb3ZlZA0KPiArICogQHJldHVybg0KPiArICrCoMKgwqBBY3R1YWwgbnVtYmVyIG9m IG9iamVjdHMgZW5xdWV1ZWQuDQo+ICsgKsKgwqDCoElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FV RVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ICsgKi8NCj4gK3N0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiArX19ydGVfcmluZ19tb3ZlX3Byb2Rf aGVhZF82NChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHVuc2lnbmVkIGludCBpc19zcCwNCj4gKwkJdW5z aWduZWQgaW50IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ICsJ CXVpbnQ2NF90ICpvbGRfaGVhZCwgdWludDY0X3QgKm5ld19oZWFkLA0KPiArCQl1aW50MzJfdCAq ZnJlZV9lbnRyaWVzKQ0KPiArew0KPiArCWNvbnN0IHVpbnQzMl90IGNhcGFjaXR5ID0gci0+Y2Fw YWNpdHk7DQo+ICsJdW5zaWduZWQgaW50IG1heCA9IG47DQo+ICsJaW50IHN1Y2Nlc3M7DQo+ICsN Cj4gKwlkbyB7DQo+ICsJCS8qIFJlc2V0IG4gdG8gdGhlIGluaXRpYWwgYnVyc3QgY291bnQgKi8N Cj4gKwkJbiA9IG1heDsNCj4gKw0KPiArCQkqb2xkX2hlYWQgPSByLT5wcm9kXzY0LmhlYWQ7DQo+ ICsNCj4gKwkJLyogYWRkIHJtYiBiYXJyaWVyIHRvIGF2b2lkIGxvYWQvbG9hZCByZW9yZGVyIGlu IHdlYWsNCj4gKwkJwqAqIG1lbW9yeSBtb2RlbC4gSXQgaXMgbm9vcCBvbiB4ODYNCj4gKwkJwqAq Lw0KPiArCQlydGVfc21wX3JtYigpOw0KPiArDQo+ICsJCS8qDQo+ICsJCcKgKsKgwqBUaGUgc3Vi dHJhY3Rpb24gaXMgZG9uZSBiZXR3ZWVuIHR3byB1bnNpZ25lZCA2NGJpdHMgdmFsdWUNCj4gKwkJ wqAqICh0aGUgcmVzdWx0IGlzIGFsd2F5cyBtb2R1bG8gNjQgYml0cyBldmVuIGlmIHdlIGhhdmUN Cj4gKwkJwqAqICpvbGRfaGVhZCA+IGNvbnNfdGFpbCkuIFNvICdmcmVlX2VudHJpZXMnIGlzIGFs d2F5cw0KPiBiZXR3ZWVuIDANCj4gKwkJwqAqIGFuZCBjYXBhY2l0eSAod2hpY2ggaXMgPCBzaXpl KS4NCj4gKwkJwqAqLw0KPiArCQkqZnJlZV9lbnRyaWVzID0gKGNhcGFjaXR5ICsgci0+Y29uc182 NC50YWlsIC0gKm9sZF9oZWFkKTsNCj4gKw0KPiArCQkvKiBjaGVjayB0aGF0IHdlIGhhdmUgZW5v dWdoIHJvb20gaW4gcmluZyAqLw0KPiArCQlpZiAodW5saWtlbHkobiA+ICpmcmVlX2VudHJpZXMp KQ0KPiArCQkJbiA9IChiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCkgPw0KPiArCQkJ CQkwIDogKmZyZWVfZW50cmllczsNCj4gKw0KPiArCQlpZiAobiA9PSAwKQ0KPiArCQkJcmV0dXJu IDA7DQo+ICsNCj4gKwkJKm5ld19oZWFkID0gKm9sZF9oZWFkICsgbjsNCj4gKwkJaWYgKGlzX3Nw KQ0KPiArCQkJci0+cHJvZF82NC5oZWFkID0gKm5ld19oZWFkLCBzdWNjZXNzID0gMTsNCj4gKwkJ ZWxzZQ0KPiArCQkJc3VjY2VzcyA9IHJ0ZV9hdG9taWM2NF9jbXBzZXQoJnItPnByb2RfNjQuaGVh ZCwNCj4gKwkJCQkJKm9sZF9oZWFkLCAqbmV3X2hlYWQpOw0KPiArCX0gd2hpbGUgKHVubGlrZWx5 KHN1Y2Nlc3MgPT0gMCkpOw0KPiArCXJldHVybiBuOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAq IEBpbnRlcm5hbCBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGNvbnN1bWVyIGhlYWQgZm9yIGRl cXVldWUgdXNpbmcNCj4gKyAqCcKgwqDCoMKgwqA2NC1iaXQgaGVhZC90YWlsIHZhbHVlcy4NCj4g KyAqDQo+ICsgKiBAcGFyYW0gcg0KPiArICrCoMKgwqBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3Ry dWN0dXJlDQo+ICsgKiBAcGFyYW0gaXNfc2MNCj4gKyAqwqDCoMKgSW5kaWNhdGVzIHdoZXRoZXIg bXVsdGktY29uc3VtZXIgcGF0aCBpcyBuZWVkZWQgb3Igbm90DQo+ICsgKiBAcGFyYW0gbg0KPiAr ICrCoMKgwqBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHdlIHdpbGwgd2FudCB0byBlbnF1ZXVlLCBp LmUuIGhvdyBmYXIgc2hvdWxkIHRoZQ0KPiArICrCoMKgwqBoZWFkIGJlIG1vdmVkDQo+ICsgKiBA cGFyYW0gYmVoYXZpb3INCj4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfRklYRUQ6wqDCoMKgwqBE ZXF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYSByaW5nDQo+ICsgKsKgwqDCoFJU RV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBEZXF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2libGUg ZnJvbSByaW5nDQo+ICsgKiBAcGFyYW0gb2xkX2hlYWQNCj4gKyAqwqDCoMKgUmV0dXJucyBoZWFk IHZhbHVlIGFzIGl0IHdhcyBiZWZvcmUgdGhlIG1vdmUsIGkuZS4gd2hlcmUgZGVxdWV1ZSBzdGFy dHMNCj4gKyAqIEBwYXJhbSBuZXdfaGVhZA0KPiArICrCoMKgwqBSZXR1cm5zIHRoZSBjdXJyZW50 L25ldyBoZWFkIHZhbHVlIGkuZS4gd2hlcmUgZGVxdWV1ZSBmaW5pc2hlcw0KPiArICogQHBhcmFt IGVudHJpZXMNCj4gKyAqwqDCoMKgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhl IHJpbmcgQkVGT1JFIGhlYWQgd2FzIG1vdmVkDQo+ICsgKiBAcmV0dXJuDQo+ICsgKsKgwqDCoC0g QWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGRlcXVldWVkLg0KPiArICrCoMKgwqDCoMKgSWYgYmVo YXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4N Cj4gKyAqLw0KPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ICtf X3J0ZV9yaW5nX21vdmVfY29uc19oZWFkXzY0KHN0cnVjdCBydGVfcmluZyAqciwgdW5zaWduZWQg aW50IGlzX3NjLA0KPiArCQl1bnNpZ25lZCBpbnQgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhh dmlvciBiZWhhdmlvciwNCj4gKwkJdWludDY0X3QgKm9sZF9oZWFkLCB1aW50NjRfdCAqbmV3X2hl YWQsDQo+ICsJCXVpbnQzMl90ICplbnRyaWVzKQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBtYXgg PSBuOw0KPiArCWludCBzdWNjZXNzOw0KPiArDQo+ICsJZG8gew0KPiArCQkvKiBSZXN0b3JlIG4g YXMgaXQgbWF5IGNoYW5nZSBldmVyeSBsb29wICovDQo+ICsJCW4gPSBtYXg7DQo+ICsNCj4gKwkJ Km9sZF9oZWFkID0gci0+Y29uc182NC5oZWFkOw0KPiArDQo+ICsJCS8qIGFkZCBybWIgYmFycmll ciB0byBhdm9pZCBsb2FkL2xvYWQgcmVvcmRlciBpbiB3ZWFrDQo+ICsJCcKgKiBtZW1vcnkgbW9k ZWwuIEl0IGlzIG5vb3Agb24geDg2DQo+ICsJCcKgKi8NCj4gKwkJcnRlX3NtcF9ybWIoKTsNCj4g Kw0KPiArCQkvKiBUaGUgc3VidHJhY3Rpb24gaXMgZG9uZSBiZXR3ZWVuIHR3byB1bnNpZ25lZCA2 NGJpdHMgdmFsdWUNCj4gKwkJwqAqICh0aGUgcmVzdWx0IGlzIGFsd2F5cyBtb2R1bG8gNjQgYml0 cyBldmVuIGlmIHdlIGhhdmUNCj4gKwkJwqAqIGNvbnNfaGVhZCA+IHByb2RfdGFpbCkuIFNvICdl bnRyaWVzJyBpcyBhbHdheXMgYmV0d2VlbiAwDQo+ICsJCcKgKiBhbmQgc2l6ZShyaW5nKS0xLg0K PiArCQnCoCovDQo+ICsJCSplbnRyaWVzID0gKHItPnByb2RfNjQudGFpbCAtICpvbGRfaGVhZCk7 DQo+ICsNCj4gKwkJLyogU2V0IHRoZSBhY3R1YWwgZW50cmllcyBmb3IgZGVxdWV1ZSAqLw0KPiAr CQlpZiAobiA+ICplbnRyaWVzKQ0KPiArCQkJbiA9IChiZWhhdmlvciA9PSBSVEVfUklOR19RVUVV RV9GSVhFRCkgPyAwIDoNCj4gKmVudHJpZXM7DQo+ICsNCj4gKwkJaWYgKHVubGlrZWx5KG4gPT0g MCkpDQo+ICsJCQlyZXR1cm4gMDsNCj4gKw0KPiArCQkqbmV3X2hlYWQgPSAqb2xkX2hlYWQgKyBu Ow0KPiArCQlpZiAoaXNfc2MpDQo+ICsJCQlyLT5jb25zXzY0LmhlYWQgPSAqbmV3X2hlYWQsIHN1 Y2Nlc3MgPSAxOw0KPiArCQllbHNlDQo+ICsJCQlzdWNjZXNzID0gcnRlX2F0b21pYzY0X2NtcHNl dCgmci0+Y29uc182NC5oZWFkLA0KPiArCQkJCQkqb2xkX2hlYWQsICpuZXdfaGVhZCk7DQo+ICsJ fSB3aGlsZSAodW5saWtlbHkoc3VjY2VzcyA9PSAwKSk7DQo+ICsJcmV0dXJuIG47DQo+ICt9DQo+ ICsNCj4gwqAjZW5kaWYgLyogX1JURV9SSU5HX0dFTkVSSUNfSF8gKi8NCi0tIA0KT2xhIExpbGpl ZGFobCwgTmV0d29ya2luZyBTeXN0ZW0gQXJjaGl0ZWN0LCBBcm0NClBob25lICs0NjcwNjg2NjM3 MywgU2t5cGUgb2xhLmxpbGplZGFobA0KDQo=