From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id 366D5235 for ; Tue, 31 Jul 2018 16:57:25 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 31 Jul 2018 07:57:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,427,1526367600"; d="scan'208";a="60932169" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga007.jf.intel.com with ESMTP; 31 Jul 2018 07:57:24 -0700 Received: from fmsmsx117.amr.corp.intel.com ([169.254.3.3]) by fmsmsx104.amr.corp.intel.com ([169.254.3.114]) with mapi id 14.03.0319.002; Tue, 31 Jul 2018 07:57:24 -0700 From: "Wiles, Keith" To: "Fu, Qiaobin" CC: "Wang, Yipeng1" , "Richardson, Bruce" , "De Lara Guarch, Pablo" , "dev@dpdk.org" , "michel@digirati.com.br" , "Doucette, Cody, Joseph" , "Gobriel, Sameh" , "Tai, Charlie" Thread-Topic: [dpdk-dev] [PATCH] hash table: add a bucket iterator function Thread-Index: AQHUJpuIvVZn3TGPwk+UdIhd8WkN66SmpQeAgAHFNVCAAOfaAIAAk50A Date: Tue, 31 Jul 2018 14:57:23 +0000 Message-ID: References: <20180728174851.46422-1-qiaobinf@bu.edu> <5CCC4983-8B4F-480B-B6E1-3A01806BC416@intel.com> <7E249D4F-3CAA-4EDB-936D-4DFAEA55F0D8@bu.edu> In-Reply-To: <7E249D4F-3CAA-4EDB-936D-4DFAEA55F0D8@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.255.230.74] Content-Type: text/plain; charset="utf-8" Content-ID: <9486AD646D23844CB6C215CFE9FE0EE5@intel.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH] hash table: add a bucket iterator function 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, 31 Jul 2018 14:57:26 -0000 DQoNCj4gT24gSnVsIDMxLCAyMDE4LCBhdCAxOjA5IEFNLCBGdSwgUWlhb2JpbiA8cWlhb2JpbmZA YnUuZWR1PiB3cm90ZToNCj4gDQo+IEhpIFlpcGVuZywNCj4gDQo+IFRoYW5rcyBmb3IgdGhlIGZl ZWRiYWNrcyENCj4gDQo+PiBPbiBKdWwgMzAsIDIwMTgsIGF0IDQ6MjQgUE0sIFdhbmcsIFlpcGVu ZzEgPHlpcGVuZzEud2FuZ0BpbnRlbC5jb20+IHdyb3RlOg0KPj4gDQo+PiBIaSwgUWlhb2Jpbiwg DQo+PiANCj4+IFRoYW5rcyBmb3IgdGhlIHBhdGNoLiBJZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5 IHlvdXIgdXNlIGNhc2UgaXMgdG8gdXNlIGhhc2ggdGFibGUgYXMgYSAiY2FjaGUiIHRoYXQgbmV3 IGVudHJpZXMgc2hvdWxkIGV2aWN0IHN0YWxlIG9uZXMgYXV0b21hdGljYWxseS4gQ291bGQgeW91 IGJlIG1vcmUgc3BlY2lmaWMgb24geW91ciB1c2Ugc2NlbmFyaW9zIHNvIHRoYXQgSSBjYW4gaGF2 ZSBtb3JlIGNvbnRleHQ/IA0KPj4gDQo+IA0KPiBBY3R1YWxseSwgd2UgZGlkbuKAmXQgdXNlIGhh c2ggdGFibGUgYXMgYSDigJxjYWNoZeKAnSwgYW5kIHRoZXJlIGlzIG5vIGF1dG9tYXRpb24gdG8g ZXZpY3Qgc3RhbGUgb25lcy4gSW5zdGVhZCwgdGhlIGZ1bmN0aW9ucnRlX2hhc2hfYnVja2V0X2l0 ZXJhdGUoKSBhbGxvd3MgdGhlIGNhbGxlcnMgdG8gaXRlcmF0ZSBvdmVyIHRoZSBoYXNoIHRhYmxl IGluIGFuIGluY3JlbWVudGFsIHdheSwgaS5lLiwgb25lIGJ1Y2tldCBieSBhbm90aGVyIGJ1Y2tl dCwgc28gdGhhdCB0aGUgY2FsbGVyIGRvZXNu4oCZdCBoYXZlIHRvIGl0ZXJhdGUgb3ZlciB0aGUg d2hvbGUgaGFzaCB0YWJsZSBpbiBvbmUgdGltZS4gVGhpcyB3YXkgY2FuIGF2b2lkIGNyZWF0aW5n IGhpY2N1cHMgYW5kIGFjaGlldmUgYmV0dGVyIGNhY2hlIHBlcmZvcm1hbmNlLiBPbmUgcG9zc2li bGUgdXNlIHNjZW5hcmlvIGlzIHdoZW4gRERvUyBhdHRhY2tzIGhhcHBlbiwgb25lIG1heSB3YW50 IHRvIHRha2UgbW9yZSBDUFUgdGltZSB0byBwcm9jZXNzIHRoZSBwYWNrZXRzLCB0aHVzIGl0ZXJh dGluZyBvdmVyIHRoZSBoYXNoIHRhYmxlIGluY3JlbWVudGFsbHkgaXMgZGVzaXJhYmxlLg0KDQpJ IGRvIG5vdCBzZWUgdGhpcyBhcyBhIGNhY2hlLCBidXQgb25seSBhIHdheSB0byBpdGVyYXRlIG92 ZXIgdGhlIGhhc2ggdGFibGUuDQoNCj4gDQo+PiBXZSBhcmUgYWN0dWFsbHkgd29ya2luZyBvbiBh biBleHRlbmRhYmxlIHZlcnNpb24gb2YgcnRlX2hhc2ggd2hpY2ggd2lsbCBsaW5rIGV4dHJhIGJ1 Y2tldHMgdG8gY3VycmVudCB0YWJsZSBpZiB0aGUgdGFibGUgaXMgZnVsbC4gQXMgbG9uZyBhcyB0 aGUgdGFibGUgaXMgc2l6ZWQgYXBwcm9wcmlhdGVseSwgdGhlcmUgd2lsbCBiZSBubyBjb25mbGlj dCBpc3N1ZXMgdGh1cyB5b3UgZG9u4oCZdCBuZWVkIHRvIHJlcGxhY2Ugb2xkIGVudHJpZXMuIFdp bGwgdGhpcyBzb2x2ZSB5b3VyIGlzc3VlPyBBbHNvLCBpZiB0aGUg4oCcY2FjaGXigJ0gbW9kZSBp cyB3aGF0IHlvdSB3YW50LCB3ZSBoYXZlIHRoZSBtZW1iZXJzaGlwIGxpYnJhcnkg4oCccnRlX21l bWJlcuKAnS4gSXMgaXQgYXBwbGljYWJsZSB0byB5b3VyIGNhc2U/IA0KPiANCj4gSSBhZ3JlZSB0 aGF0IGFkZGluZyBleHRyYSBidWNrZXRzIHRvIGN1cnJlbnQgdGFibGUgd2hlbiB0aGUgdGFibGUg aXMgZnVsbCBjYW4gYWxsZXZpYXRlIHRoaXMgc2NlbmFyaW8uIEluZGVlZCwgd2UgYWxzbyBjb25z aWRlcmVkIHRoaXMgc29sdXRpb24gYmVmb3JlIGNvbWluZyB1cCBvdXIgcHJvcG9zZWQgc29sdXRp b24uIEhvd2V2ZXIsIGl04oCZcyBzdGlsbCBoaWdobHkgZGVzaXJhYmxlIHRvIGhhdmUgYSBidWNr ZXQgaXRlcmF0b3IgZnVuY3Rpb24uIENvbnNpZGVyaW5nIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUg bWFjaGluZeKAmXMgbWVtb3J5IGlzIGxpbWl0ZWQgYW5kIGNhbm5vdCBhbHdheXMgYWxsb2NhdGUg bmV3IG1lbW9yeSB0byB0aGUgaGFzaCB0YWJsZSAoZS5nLiwgRERvUyBhdHRhY2tzLCBzd2l0Y2gg bWVhc3VyZW1lbnQgdGFza3MsIGV0Yy4pLCBhIHNvbHV0aW9uIGlzIHRvIGFsbG93IHRoZSBjYWxs ZXJzIGV2aWN0IHNvbWUgbGVzcyBpbXBvcnRhbnQgKHRoZSBjcml0ZXJpYSBmb3IgdGhlIGV2aWN0 aW9uIGlzIGJhc2VkIG9uIHRoZSBjYWxsZXLigJlzIG5lZWRzKSBlbnRyaWVzLg0KPiANCj4gSW5k ZWVkLCB3ZSBkb27igJl0IGhhdmUgdGhlIOKAnGNhY2hl4oCdIG1vZGUsIG91ciBpbXBsZW1lbnRh dGlvbiBpcyBhIHdheSB0byBhY2hpZXZlIGJldHRlciBjYWNoZSBwZXJmb3JtYW5jZS4gU28sIHRo ZSBydGVfbWVtYmVyIHdvbuKAmXQgaGVscCBoZXJlLg0KPiANCj4+IA0KPj4gdy5yLnQuIHRoZSBw YXRjaCBzZXQgeW91IHByb3Bvc2VkLCBteSBjb25jZXJuIGlzIHRoYXQgdGhlIG5ldyBBUEkgd2ls bCBleHBvc2UgdG9vIG11Y2ggaW50ZXJuYWxzIHRvIHRoZSB1c2VyLCBlLmcuIHRoZSBidWNrZXQv ZW50cmllcyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gRXhw b3NpbmcgaW50ZXJuYWwgc3RydWN0dXJlcyB3b3VsZCBwcmV2ZW50IGltcHJvdmluZyB0aGUgaW1w bGVtZW50YXRpb24gZG93biB0aGUgcm9hZCB1bmxlc3Mgd2Uga2VlcCBjaGFuZ2luZyBBUEkgd2hp Y2ggaXMgbm90IHJlY29tbWVuZGVkLiAgDQo+PiANCj4gDQo+IFRoZSBmdW5jdGlvbnMgd2UgYWRk IGhlcmUgZ2l2ZSBhIHdheSBmb3IgdGhlIGNhbGxlcnMgdG8gaXRlcmF0ZSBvdmVyIHRoZSBzcGVj aWZpYyBidWNrZXQsIHdoaWNoIHBvdGVudGlhbGx5IGNvbnRhaW5zIHRoZSBlbnRyeS4gVGhlc2Ug ZnVuY3Rpb25zIGNhbiBiZSBtYWRlIGdlbmVyYWwgZW5vdWdoIHRvIGFsbG93IGNhbGxlcnMgdG8g aGV1cmlzdGljYWxseSBldmljdCBzb21lIGVudHJpZXMsIGFuZCBhZGQgdGhlIG5ldyBvbmVzIHRv IHRoZSBoYXNoIHRhYmxlLiBPdGhlcndpc2UsIHRoZXJlIGlzIG5vIHdheSB0byBldmljdCBzb21l IGxlc3MgaW1wb3J0YW50IGVudHJpZXMuDQoNCldlIGhhdmUgbWFueSBvdGhlciBpdGVyYXRvcnMg aW4gRFBESyBhbmQgdGhpcyBvbmUgaXMgbm8gZGlmZmVyZW50LiBJZiB3ZSBjYW4gaGlkZSB0aGUg aW50ZXJuYWxzLCB0aGVuIGl0IHdvdWxkIGJlIGdvb2QuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBz aG91bGQgbm90IGV4cG9zZSBhbnkgaW50ZXJuYWxzIG9ubHkgdGhlIHZhbHVlIGluIHRoZSBoYXNo IHRhYmxlLCB3aGljaCBJIGJlbGlldmUgaXMgZG8ganVzdCB0aGF0LCByaWdodD8NCg0KPiANCj4g SG9wZSB0aGlzIGNsYXJpZmllcyB0aGUgcGF0Y2guDQo+IA0KPiBCZXN0LA0KPiBRaWFvYmluDQo+ IA0KPj4gDQo+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+PiBGcm9tOiBkZXYgW21h aWx0bzpkZXYtYm91bmNlc0BkcGRrLm9yZ10gT24gQmVoYWxmIE9mIFdpbGVzLCBLZWl0aA0KPj4+ IFNlbnQ6IFN1bmRheSwgSnVseSAyOSwgMjAxOCA2OjE3IEFNDQo+Pj4gVG86IFFpYW9iaW4gRnUg PHFpYW9iaW5mQGJ1LmVkdT4NCj4+PiBDYzogUmljaGFyZHNvbiwgQnJ1Y2UgPGJydWNlLnJpY2hh cmRzb25AaW50ZWwuY29tPjsgRGUgTGFyYSBHdWFyY2gsIFBhYmxvIDxwYWJsby5kZS5sYXJhLmd1 YXJjaEBpbnRlbC5jb20+OyBkZXZAZHBkay5vcmc7DQo+Pj4gbWljaGVsQGRpZ2lyYXRpLmNvbS5i cjsgZG91Y2V0dGVAYnUuZWR1DQo+Pj4gU3ViamVjdDogUmU6IFtkcGRrLWRldl0gW1BBVENIXSBo YXNoIHRhYmxlOiBhZGQgYSBidWNrZXQgaXRlcmF0b3IgZnVuY3Rpb24NCj4+PiANCj4+PiANCj4+ PiANCj4+Pj4gT24gSnVsIDI4LCAyMDE4LCBhdCAxMjo0OCBQTSwgUWlhb2JpbiBGdSA8cWlhb2Jp bmZAYnUuZWR1PiB3cm90ZToNCj4+Pj4gDQo+Pj4+IEZ1bmN0aW9uIHJ0ZV9oYXNoX2J1Y2tldF9p dGVyYXRlKCkgZW5hYmxlcyBjYWxsZXJzIHRvDQo+Pj4+IGluY3JlbWVudGFsbHkgaXRlcmF0ZSBv dmVyIHRoZSBoYXNoIHRhYmxlIGJ1Y2tldCBieSBidWNrZXQsDQo+Pj4+IHNvIHRoYXQgaXQgY2Fu IGF2b2lkIGNyZWF0aW5nIGhpY2N1cHMgYW5kIHRocmFzaGluZyB0aGUgY2FjaGUNCj4+Pj4gb2Yg dGhlIHByb2Nlc3Nvci4NCj4+Pj4gDQo+Pj4+IFRoaXMgcGF0Y2ggbWFpbmx5IGRlYWxzIHdpdGgg Y2FzZXMgaW4gd2hpY2gNCj4+Pj4gdGhlIGhhc2ggdGFibGUgaXMgZnVsbCBhbmQgb25lIG5lZWRz IHRvIGRlY2lkZSBpZiB0aGUgaW5jb21pbmcNCj4+Pj4gZW50cnkgaXMgbW9yZSB2YWx1YWJsZSB0 aGFuIHRoZSBlbnRyaWVzIGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUuDQo+Pj4+IA0KPj4+PiBT aWduZWQtb2ZmLWJ5OiBRaWFvYmluIEZ1IDxxaWFvYmluZkBidS5lZHU+DQo+Pj4+IFJldmlld2Vk LWJ5OiBDb2R5IERvdWNldHRlIDxkb3VjZXR0ZUBidS5lZHU+DQo+Pj4+IFJldmlld2VkLWJ5OiBN aWNoZWwgTWFjaGFkbyA8bWljaGVsQGRpZ2lyYXRpLmNvbS5icj4NCj4+Pj4gLS0tDQo+Pj4+IGxp Yi9saWJydGVfaGFzaC9ydGVfY3Vja29vX2hhc2guYyAgICB8IDYwICsrKysrKysrKysrKysrKysr KysrKysrKysNCj4+Pj4gbGliL2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoLmggICAgICAgICAgIHwgNjYg KysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPj4+PiBsaWIvbGlicnRlX2hhc2gvcnRlX2hh c2hfdmVyc2lvbi5tYXAgfCAgNCArKw0KPj4+PiAzIGZpbGVzIGNoYW5nZWQsIDEzMCBpbnNlcnRp b25zKCspDQo+Pj4+IA0KPj4+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9jdWNr b29faGFzaC5jIGIvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9jdWNrb29faGFzaC5jDQo+Pj4+IGluZGV4 IGEwNzU0M2EyOS4uMmI5MGYzNTkzIDEwMDY0NA0KPj4+PiAtLS0gYS9saWIvbGlicnRlX2hhc2gv cnRlX2N1Y2tvb19oYXNoLmMNCj4+Pj4gKysrIGIvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9jdWNrb29f aGFzaC5jDQo+Pj4+IEBAIC0xMTYwLDMgKzExNjAsNjMgQEAgcnRlX2hhc2hfaXRlcmF0ZShjb25z dCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0IHZvaWQgKiprZXksIHZvaWQgKipkYXRhLCB1aW50 MzINCj4+Pj4gDQo+Pj4+IAlyZXR1cm4gcG9zaXRpb24gLSAxOw0KPj4+PiB9DQo+Pj4+ICsNCj4+ Pj4gK2ludA0KPj4+PiArcnRlX2hhc2hfZ2V0X251bV9idWNrZXRzKHN0cnVjdCBydGVfaGFzaCAq aCkNCj4+Pj4gK3sNCj4+Pj4gKwlSRVRVUk5fSUZfVFJVRSgoaCA9PSBOVUxMKSwgLUVJTlZBTCk7 DQo+Pj4+ICsJcmV0dXJuIGgtPm51bV9idWNrZXRzOw0KPj4+PiArfQ0KPj4+PiArDQo+Pj4+ICt1 aW50MzJfdA0KPj4+PiArcnRlX2hhc2hfZ2V0X3ByaW1hcnlfYnVja2V0KGNvbnN0IHN0cnVjdCBy dGVfaGFzaCAqaCwgaGFzaF9zaWdfdCBzaWcpDQo+Pj4+ICt7DQo+Pj4+ICsJcmV0dXJuIHNpZyAm IGgtPmJ1Y2tldF9iaXRtYXNrOw0KPj4+PiArfQ0KPj4+PiArDQo+Pj4+ICt1aW50MzJfdA0KPj4+ PiArcnRlX2hhc2hfZ2V0X3NlY29uZGFyeV9idWNrZXQoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpo LCBoYXNoX3NpZ190IHNpZykNCj4+Pj4gK3sNCj4+Pj4gKwlyZXR1cm4gcnRlX2hhc2hfc2Vjb25k YXJ5X2hhc2goc2lnKSAmIGgtPmJ1Y2tldF9iaXRtYXNrOw0KPj4+PiArfQ0KPj4+IA0KPj4+IFRo ZSBhYm92ZSB0d28gZnVuY3Rpb25zIHNob3VsZCBoYXZlIHRoZSBSRVRVUk5fSUZfVFJVRSgoaCA9 PSBOVUxMKSwgLUVJTlZBTCk7IHN0YXRlbWVudHMganVzdCBsaWtlIHRoZSBmaXJzdCBvbmUuDQo+ Pj4gDQo+Pj4+ICsNCj4+Pj4gK2ludDMyX3QNCj4+Pj4gK3J0ZV9oYXNoX2J1Y2tldF9pdGVyYXRl KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwNCj4+Pj4gKwljb25zdCB2b2lkICoqa2V5LCB2b2lk ICoqZGF0YSwgdWludDMyX3QgKmJpZHgsIHVpbnQzMl90ICpuZXh0KQ0KPj4+PiArew0KPj4+PiAr CXVpbnQzMl90IHBvc2l0aW9uOw0KPj4+PiArCXN0cnVjdCBydGVfaGFzaF9rZXkgKm5leHRfa2V5 Ow0KPj4+PiArDQo+Pj4+ICsJUkVUVVJOX0lGX1RSVUUoKChoID09IE5VTEwpIHx8IChrZXkgPT0g TlVMTCkgfHwgKGRhdGEgPT0gTlVMTCkgfHwNCj4+Pj4gKwkJKGJpZHggPT0gTlVMTCkgfHwgKG5l eHQgPT0gTlVMTCkpLCAtRUlOVkFMKTsNCj4+Pj4gKw0KPj4+PiArCS8qIE91dCBvZiBib3VuZHMu ICovDQo+Pj4+ICsJaWYgKCpiaWR4ID49IGgtPm51bV9idWNrZXRzIHx8ICpuZXh0ID49IFJURV9I QVNIX0JVQ0tFVF9FTlRSSUVTKQ0KPj4+PiArCQlnb3RvIG5leHRfYnVja2V0Ow0KPj4+PiArDQo+ Pj4+ICsJLyogSWYgY3VycmVudCBwb3NpdGlvbiBpcyBlbXB0eSwgZ28gdG8gdGhlIG5leHQgb25l LiAqLw0KPj4+PiArCXdoaWxlIChoLT5idWNrZXRzWypiaWR4XS5rZXlfaWR4WypuZXh0XSA9PSBF TVBUWV9TTE9UKSB7DQo+Pj4+ICsJCSgqbmV4dCkrKzsNCj4+Pj4gKwkJLyogRW5kIG9mIGJ1Y2tl dC4gKi8NCj4+Pj4gKwkJaWYgKCpuZXh0ID49IFJURV9IQVNIX0JVQ0tFVF9FTlRSSUVTKQ0KPj4+ PiArCQkJZ290byBuZXh0X2J1Y2tldDsNCj4+Pj4gKwl9DQo+Pj4+ICsNCj4+Pj4gKwkvKiBHZXQg cG9zaXRpb24gb2YgZW50cnkgaW4ga2V5IHRhYmxlLiAqLw0KPj4+PiArCXBvc2l0aW9uID0gaC0+ YnVja2V0c1sqYmlkeF0ua2V5X2lkeFsqbmV4dF07DQo+Pj4+ICsJbmV4dF9rZXkgPSAoc3RydWN0 IHJ0ZV9oYXNoX2tleSAqKSAoKGNoYXIgKiloLT5rZXlfc3RvcmUgKw0KPj4+PiArCQkJCXBvc2l0 aW9uICogaC0+a2V5X2VudHJ5X3NpemUpOw0KPj4+PiArCS8qIFJldHVybiBrZXkgYW5kIGRhdGEu ICovDQo+Pj4+ICsJKmtleSA9IG5leHRfa2V5LT5rZXk7DQo+Pj4+ICsJKmRhdGEgPSBuZXh0X2tl eS0+cGRhdGE7DQo+Pj4+ICsNCj4+Pj4gKwkvKiBJbmNyZW1lbnQgaXRlcmF0b3IuICovDQo+Pj4+ ICsJKCpuZXh0KSsrOw0KPj4+PiArDQo+Pj4+ICsJcmV0dXJuIHBvc2l0aW9uIC0gMTsNCj4+Pj4g Kw0KPj4+PiArbmV4dF9idWNrZXQ6DQo+Pj4+ICsJKmJpZHggPSAoKmJpZHggKyAxKSA+PSBoLT5u dW1fYnVja2V0cyA/IDAgOiAqYmlkeCArIDE7DQo+Pj4+ICsJKm5leHQgPSAwOw0KPj4+IA0KPj4+ IElmIHRoaXMgaXMgYW4gZXJyb3IgY2FzZSB3aHkgYXJlIHdlIHNldHRpbmcgKm5leHQgdG8gemVy byBhbmQgaW5jcmVtZW50aW5nICpiaWR4ID8NCj4+PiBJIHdvdWxkIGV4cGVjdCB3ZSBzaG91bGQg bm90IGNoYW5nZSB0aGUgdmFsdWVzIG9uIGFuIGVycm9yIGJlY2F1c2UgdGhleSBjYW5ub3QgZGVi dWcgdGhlIHZhbHVlcyBvbiByZXR1cm4uDQo+Pj4gDQo+Pj4+ICsJcmV0dXJuIC1FTk9FTlQ7DQo+ Pj4+ICt9DQo+Pj4+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2hhc2gvcnRlX2hhc2guaCBiL2xp Yi9saWJydGVfaGFzaC9ydGVfaGFzaC5oDQo+Pj4+IGluZGV4IGY3MWNhOWZiZi4uMzI5YmY0MmQ2 IDEwMDY0NA0KPj4+PiAtLS0gYS9saWIvbGlicnRlX2hhc2gvcnRlX2hhc2guaA0KPj4+PiArKysg Yi9saWIvbGlicnRlX2hhc2gvcnRlX2hhc2guaA0KPj4+PiBAQCAtOTQsNiArOTQsMTcgQEAgcnRl X2hhc2hfY3JlYXRlKGNvbnN0IHN0cnVjdCBydGVfaGFzaF9wYXJhbWV0ZXJzICpwYXJhbXMpOw0K Pj4+PiAqLw0KPj4+PiB2b2lkIHJ0ZV9oYXNoX3NldF9jbXBfZnVuYyhzdHJ1Y3QgcnRlX2hhc2gg KmgsIHJ0ZV9oYXNoX2NtcF9lcV90IGZ1bmMpOw0KPj4+PiANCj4+Pj4gKy8qKg0KPj4+PiArICog R2V0IHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgaGFzaCB0YWJsZS4NCj4+Pj4gKyAqIEBw YXJhbSBoDQo+Pj4+ICsgKiAgIEhhc2ggdGFibGUgZm9yIHdoaWNoIHRoZSBmdW5jdGlvbiBxdWVy aWVzLg0KPj4+PiArICogQHJldHVybg0KPj4+PiArICogICBUaGUgbnVtYmVyIG9mIGJ1Y2tldHMg aW4gdGhlIGhhc2ggdGFibGUgaC4NCj4+Pj4gKyAqICAgIC0gRUlOVkFMIC0gaW52YWxpZCBwYXJh bWV0ZXIgcGFzc2VkIHRvIGZ1bmN0aW9uDQo+Pj4+ICsgKi8NCj4+Pj4gK2ludA0KPj4+IA0KPj4+ IE5lZWRzIHRvIGNoYW5nZSB0byDigJhpbnQgX19ydGVfZXhwZXJpbWVudGFs4oCZDQo+Pj4gDQo+ Pj4+ICtydGVfaGFzaF9nZXRfbnVtX2J1Y2tldHMoc3RydWN0IHJ0ZV9oYXNoICpoKTsNCj4+Pj4g Kw0KPj4+PiAvKioNCj4+Pj4gKiBGaW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgb2JqZWN0IGFu ZCByZXR1cm4gYSBwb2ludGVyIHRvIGl0Lg0KPj4+PiAqDQo+Pj4+IEBAIC0yNjEsNiArMjcyLDM0 IEBAIGludA0KPj4+PiBydGVfaGFzaF9nZXRfa2V5X3dpdGhfcG9zaXRpb24oY29uc3Qgc3RydWN0 IHJ0ZV9oYXNoICpoLCBjb25zdCBpbnQzMl90IHBvc2l0aW9uLA0KPj4+PiAJCQkgICAgICAgdm9p ZCAqKmtleSk7DQo+Pj4+IA0KPj4+PiArLyoqDQo+Pj4+ICsgKiBHZXQgdGhlIHByaW1hcnkgYnVj a2V0IGluZGV4IGdpdmVuIHRoZSBwcmVjb21wdXRlZCBoYXNoIHZhbHVlLg0KPj4+PiArICogVGhp cyBvcGVyYXRpb24gaXMgbXVsdGktdGhyZWFkIHNhZmUuDQo+Pj4+ICsgKg0KPj4+PiArICogQHBh cmFtIGgNCj4+Pj4gKyAqICAgSGFzaCB0YWJsZSB0byBnZXQgdGhlIGtleSBmcm9tLg0KPj4+PiAr ICogQHBhcmFtIHNpZw0KPj4+PiArICogICBQcmVjb21wdXRlZCBoYXNoIHZhbHVlLg0KPj4+PiAr ICogQHJldHVybg0KPj4+PiArICogICBUaGUgcHJpbWFyeSBidWNrZXQgaW5kZXguDQo+Pj4gDQo+ Pj4gQ29tbWVudCB0aGUgZXJyb3IgY2FzZSBoZXJlLg0KPj4+PiArICovDQo+Pj4+ICt1aW50MzJf dA0KPj4+IA0KPj4+IE5lZWRzIHRvIGNoYW5nZSB0byDigJh1aW50MzJfdCBfX3J0ZV9leHBlcmlt ZW50YWzigJkNCj4+Pj4gK3J0ZV9oYXNoX2dldF9wcmltYXJ5X2J1Y2tldChjb25zdCBzdHJ1Y3Qg cnRlX2hhc2ggKmgsIGhhc2hfc2lnX3Qgc2lnKTsNCj4+Pj4gKw0KPj4+PiArLyoqDQo+Pj4+ICsg KiBHZXQgdGhlIHNlY29uZGFyeSBidWNrZXQgaW5kZXggZ2l2ZW4gdGhlIHByZWNvbXB1dGVkIGhh c2ggdmFsdWUuDQo+Pj4+ICsgKiBUaGlzIG9wZXJhdGlvbiBpcyBtdWx0aS10aHJlYWQgc2FmZS4N Cj4+Pj4gKyAqDQo+Pj4+ICsgKiBAcGFyYW0gaA0KPj4+PiArICogICBIYXNoIHRhYmxlIHRvIGdl dCB0aGUga2V5IGZyb20uDQo+Pj4+ICsgKiBAcGFyYW0gc2lnDQo+Pj4+ICsgKiAgIFByZWNvbXB1 dGVkIGhhc2ggdmFsdWUuDQo+Pj4+ICsgKiBAcmV0dXJuDQo+Pj4+ICsgKiAgIFRoZSBwcmltYXJ5 IGJ1Y2tldCBpbmRleC4NCj4+PiANCj4+PiBDb21tZW50IHRoZSBlcnJvciBjYXNlIGhlcmUuDQo+ Pj4+ICsgKi8NCj4+Pj4gK3VpbnQzMl90DQo+Pj4gDQo+Pj4gTmVlZHMgdG8gY2hhbmdlIHRvIOKA mHVpbnQzMl90IF9fcnRlX2V4cGVyaW1lbnRhbOKAmQ0KPj4+PiArcnRlX2hhc2hfZ2V0X3NlY29u ZGFyeV9idWNrZXQoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBoYXNoX3NpZ190IHNpZyk7DQo+ Pj4+ICsNCj4+Pj4gLyoqDQo+Pj4+ICogRmluZCBhIGtleS12YWx1ZSBwYWlyIGluIHRoZSBoYXNo IHRhYmxlLg0KPj4+PiAqIFRoaXMgb3BlcmF0aW9uIGlzIG11bHRpLXRocmVhZCBzYWZlLg0KPj4+ PiBAQCAtNDE5LDYgKzQ1OCwzMyBAQCBydGVfaGFzaF9sb29rdXBfYnVsayhjb25zdCBzdHJ1Y3Qg cnRlX2hhc2ggKmgsIGNvbnN0IHZvaWQgKiprZXlzLA0KPj4+PiAqLw0KPj4+PiBpbnQzMl90DQo+ Pj4+IHJ0ZV9oYXNoX2l0ZXJhdGUoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lk ICoqa2V5LCB2b2lkICoqZGF0YSwgdWludDMyX3QgKm5leHQpOw0KPj4+PiArDQo+Pj4+ICsvKioN Cj4+Pj4gKyAqIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYnVja2V0cyBpbiBoYXNoIHRhYmxlLCByZXR1 cm5pbmcga2V5LXZhbHVlIHBhaXJzLg0KPj4+PiArICoNCj4+Pj4gKyAqIEBwYXJhbSBoDQo+Pj4+ ICsgKiAgIEhhc2ggdGFibGUgdG8gaXRlcmF0ZQ0KPj4+PiArICogQHBhcmFtIGtleQ0KPj4+PiAr ICogICBPdXRwdXQgY29udGFpbmluZyB0aGUga2V5IHdoZXJlIGN1cnJlbnQgaXRlcmF0b3INCj4+ Pj4gKyAqICAgd2FzIHBvaW50aW5nIGF0DQo+Pj4+ICsgKiBAcGFyYW0gZGF0YQ0KPj4+PiArICog ICBPdXRwdXQgY29udGFpbmluZyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGgga2V5Lg0KPj4+PiAr ICogICBSZXR1cm5zIE5VTEwgaWYgZGF0YSB3YXMgbm90IHN0b3JlZC4NCj4+Pj4gKyAqIEBwYXJh bSBiaWR4DQo+Pj4+ICsgKiAgIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgYnVja2V0IGluZGV4LiBT aG91bGQgYmUgMCB0byBzdGFydA0KPj4+PiArICogICBpdGVyYXRpbmcgdGhlIGhhc2ggdGFibGUu IEl0ZXJhdG9yIGlzIGluY3JlbWVudGVkIGFmdGVyDQo+Pj4+ICsgKiAgIFJURV9IQVNIX0JVQ0tF VF9FTlRSSUVTIGNhbGxzIG9mIHRoaXMgZnVuY3Rpb24uDQo+Pj4gDQo+Pj4gVGhlIHdvcmRpbmcg b2YgdGhlIGxhc3QgbGluZSBzZWVtIG9kZCB0byBtZSwgc2hvdWxkIHRoZSDigJhvZuKAmSBiZSBy ZW1vdmVkPw0KPj4+IA0KPj4+PiArICogQHBhcmFtIG5leHQNCj4+Pj4gKyAqICAgUG9pbnRlciB0 byBpdGVyYXRvci4gU2hvdWxkIGJlIDAgdG8gc3RhcnQgaXRlcmF0aW5nIHRoZSBidWNrZXQuDQo+ Pj4+ICsgKiAgIEl0ZXJhdG9yIGlzIGluY3JlbWVudGVkIGFmdGVyIGVhY2ggY2FsbCBvZiB0aGlz IGZ1bmN0aW9uLg0KPj4+PiArICogQHJldHVybg0KPj4+PiArICogICBQb3NpdGlvbiB3aGVyZSBr ZXkgd2FzIHN0b3JlZCwgaWYgc3VjY2Vzc2Z1bC4NCj4+Pj4gKyAqICAgLSAtRUlOVkFMIGlmIHRo ZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLg0KPj4+PiArICogICAtIC1FTk9FTlQgaWYgZW5kIG9m IHRoZSBidWNrZXQuDQo+Pj4+ICsgKi8NCj4+Pj4gK2ludDMyX3QNCj4+PiANCj4+PiBOZWVkcyB0 byBjaGFuZ2UgdG8g4oCYaW50MzJfdCBfX3J0ZV9leHBlcmltZW50YWzigJkgYW5kIHdoeSB1c2Ug 4oCYaW50MzJfdCcgd2hlbiBldmVyeXdoZXJlIGVsc2Ugd2UgYXJlIHVzaW5nIOKAmGludCc/DQo+ Pj4gDQo+Pj4+ICtydGVfaGFzaF9idWNrZXRfaXRlcmF0ZShjb25zdCBzdHJ1Y3QgcnRlX2hhc2gg KmgsDQo+Pj4+ICsJY29uc3Qgdm9pZCAqKmtleSwgdm9pZCAqKmRhdGEsIHVpbnQzMl90ICpiaWR4 LCB1aW50MzJfdCAqbmV4dCk7DQo+Pj4gDQo+Pj4gU2hvdWxkIGhhdmUgYSBibGFuayBsaW5lIGhl cmUgYmVmb3JlIHRoZSAjaWZkZWYuDQo+Pj4+ICNpZmRlZiBfX2NwbHVzcGx1cw0KPj4+PiB9DQo+ Pj4+ICNlbmRpZg0KPj4+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoX3Zl cnNpb24ubWFwIGIvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoX3ZlcnNpb24ubWFwDQo+Pj4+IGlu ZGV4IDUyYTI1NzZmOS4uN2Q0OGYzMmM5IDEwMDY0NA0KPj4+PiAtLS0gYS9saWIvbGlicnRlX2hh c2gvcnRlX2hhc2hfdmVyc2lvbi5tYXANCj4+Pj4gKysrIGIvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9o YXNoX3ZlcnNpb24ubWFwDQo+Pj4+IEBAIC0xNSw2ICsxNSwxMCBAQCBEUERLXzIuMCB7DQo+Pj4+ IAlydGVfaGFzaF9sb29rdXA7DQo+Pj4+IAlydGVfaGFzaF9sb29rdXBfYnVsazsNCj4+Pj4gCXJ0 ZV9oYXNoX2xvb2t1cF93aXRoX2hhc2g7DQo+Pj4+ICsJcnRlX2hhc2hfZ2V0X251bV9idWNrZXRz Ow0KPj4+PiArCXJ0ZV9oYXNoX2dldF9wcmltYXJ5X2J1Y2tldDsNCj4+Pj4gKwlydGVfaGFzaF9n ZXRfc2Vjb25kYXJ5X2J1Y2tldDsNCj4+Pj4gKwlydGVfaGFzaF9idWNrZXRfaXRlcmF0ZTsNCj4+ PiANCj4+PiBUaGVzZSBtdXN0IGJlIGFkZGVkIHRvIGEgRVhQRVJJTUVOVEFMIGNsYXVzZSBpbiB0 aGUgZmlsZSBhbmQgbGF0ZXIgeW91IGNhbiByZW1vdmUgdGhlIGV4cGVyaW1lbnRhbCBpbmRpY3Rv ci4NCj4+PiANCj4+Pj4gDQo+Pj4+IAlsb2NhbDogKjsNCj4+Pj4gfTsNCj4+Pj4gLS0NCj4+Pj4g Mi4xNy4xDQo+Pj4+IA0KPj4+IA0KPj4+IFJlZ2FyZHMsDQo+Pj4gS2VpdGgNCj4+IA0KPiANCg0K UmVnYXJkcywNCktlaXRoDQoNCg==