From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140079.outbound.protection.outlook.com [40.107.14.79]) by dpdk.org (Postfix) with ESMTP id 354B72BDB for ; Mon, 28 Jan 2019 11:35:59 +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=S+cm9G8hePUav+bXBmq9LHaWMvZ48mnSBaQY5P6OLhs=; b=azc6abd4GW1PgeDIV57VNh6ZlU3hd0bMYzQj4/7WQTUwdwxESBe4BLPBTG/RqKBoFeEMjv6ZFAc7YGKTHsjkI9HrNM9sjkAu/mpKmBbkszYs5Grg3g2LIo4ZnGmyTzyUrcpG80tGHYlmBLVDsuwtMeLcalnuDxDXf7CZIJOT7jI= Received: from HE1PR0801MB2076.eurprd08.prod.outlook.com (10.168.95.140) by HE1PR0801MB1769.eurprd08.prod.outlook.com (10.168.150.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.31; Mon, 28 Jan 2019 10:35:56 +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; Mon, 28 Jan 2019 10:35:56 +0000 From: Ola Liljedahl To: "jerinj@marvell.com" , "mczekaj@marvell.com" , "gage.eads@intel.com" , "dev@dpdk.org" CC: "olivier.matz@6wind.com" , "stephen@networkplumber.org" , nd , "bruce.richardson@intel.com" , "arybchenko@solarflare.com" , "konstantin.ananyev@intel.com" Thread-Topic: [dpdk-dev] [PATCH v3 2/5] ring: add a non-blocking implementation Thread-Index: AQHUr0H3NsJBTf2hT0+nXGXAmKraP6W7ZOeAgABKckCAAPt7gIADjkUwgARS7wA= Date: Mon, 28 Jan 2019 10:35:55 +0000 Message-ID: <1548671766.3076.16.camel@arm.com> References: <20190115235227.14013-1-gage.eads@intel.com> <20190118152326.22686-1-gage.eads@intel.com> <20190118152326.22686-3-gage.eads@intel.com> <1548168583.31150.32.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CA46E@FMSMSX108.amr.corp.intel.com> <1548238575.31150.73.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CB6FE@FMSMSX108.amr.corp.intel.com> In-Reply-To: <9184057F7FC11744A2107296B6B8EB1E541CB6FE@FMSMSX108.amr.corp.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; HE1PR0801MB1769; 6:gbXF7qtF7PQzHZQZ5/l6kFqVQehqffazdrRBvoPeQxovlD5DVMHm4rFeRKR7WZdf6LwVSWw4kGH9DEAMiZuKeojqY3pRqfLhD7wixvuex0NkSxOTVFXT7jDnGzkz/JhKrjYs2eJBFKnU8YwnxdjPJZK6E8Uli3cjG+ixtnoBtH/rAn9WeV4ongsASiZu1tWz1TOlE258LqZjsA1Xk9Ut6Oecup5VRv8FZ0RmxBHKC+w2D30xjiSpi+67Pg4AcT7TPSG6jOWPYq02R+x9VtY5HDeVmBQtXebcr7GbYFHx5D3Xm9m0ENekfvQ24hXWqUxWT3TwENF1S/5nJX2S/nOLxpnKzxy+pcxoEosFmp+byLbb/FlKB5+eqFrp9LBbNr4FGReLoBU8o2SnBQuSA0xHR6BZc/DUkNmkkOov3L9zfQXSF5Qr1BXoGaeUC5GFFoDqlNO6N1gDaqa77PfWD2T7Fg==; 5:raEeLV+fn+tCD8aXnB4tHUNNOo6KdDk41iYL06pX97fINvmwFDtm9uNNykwZZGW1DgQ16XVguNgHeVmIGN4mpBmN02mHQAOlI0crYZeIZcKFDbBiWLJYiErJZ3/0oEpbSlU179UqwXUCnJ9m1nU5xiQ8hPRlcF9RIf/r6idzf2utvLA7XLIK1Z9q1BSiQ0g8T0nF5O9h+FH7MXZNjFfG2A==; 7:IGyUvSOmNC6TeE2jr3ZoYdAtjSVP/Lmbv78KCsxWpxlWu3bvMf5MXbMzYEhXKE3dXsZMQZe5NWJSZeG6jvayaY9Lf+oQyvkbDKn/feJ2OSrryd+NKc78GgVlozfYxLty57KDcV/wI8QSHsVTdMBYtw== x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 6349f6e3-ff93-4d8f-25d5-08d6850c62e1 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:HE1PR0801MB1769; x-ms-traffictypediagnostic: HE1PR0801MB1769: x-ld-processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 0931CB1479 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(366004)(136003)(396003)(39860400002)(189003)(199004)(52314003)(13464003)(14444005)(966005)(256004)(2501003)(4326008)(25786009)(86362001)(229853002)(8936002)(6436002)(14454004)(105586002)(478600001)(6512007)(68736007)(66066001)(106356001)(103116003)(71190400001)(6506007)(53546011)(71200400001)(53936002)(6246003)(6486002)(50226002)(72206003)(6306002)(2201001)(97736004)(54906003)(186003)(8676002)(6116002)(93886005)(30864003)(486006)(2616005)(305945005)(11346002)(446003)(81166006)(316002)(102836004)(7736002)(99286004)(36756003)(476003)(2906002)(26005)(81156014)(3846002)(76176011)(110136005)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0801MB1769; 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: sUomC5RtZJizVCj78GsQfjNdITV/wlciqnnr5etAyEWzl52vG5O9QLfwmmPs0QxbMOPvKJEnobIJCH5vAvEJ59TZUvhczY1ubDY1JeeETzMv5rlRQ/Z3MTgcu/rmdwx40YbaMNl+Igj6NsRBTZP1/xch+aJs1tgeJ36mLML6rEGMmmcRSwAwABHO818TRb1ia/ecKoeVhc1J6hUqpcKt/TzhJHbLBME6Na/qxV1BUM1X1n1SkGNSIAOF2OQhZFccqAFxZbCpel1a6hecbTykF2C5jiA5PeCM1U3419tsLIvF/IkvTzPLnGbGMMGc/oxfLJeSz6tRCugmJ7iApV1caTx9K28duS3KdwNdL5xC1rZ8KZBffQtOqaEb8YRiRImZZ1jqtCXuiG0BSd5U0OXdIL+W/QUyhXob5m8eiVc6w10= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6349f6e3-ff93-4d8f-25d5-08d6850c62e1 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jan 2019 10:35:56.2576 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1769 Subject: Re: [dpdk-dev] [PATCH v3 2/5] ring: add a non-blocking implementation 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: Mon, 28 Jan 2019 10:35:59 -0000 T24gRnJpLCAyMDE5LTAxLTI1IGF0IDE3OjIxICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0KPiAN Cj4gPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IE9sYSBMaWxq ZWRhaGwgW21haWx0bzpPbGEuTGlsamVkYWhsQGFybS5jb21dDQo+ID4gU2VudDogV2VkbmVzZGF5 LCBKYW51YXJ5IDIzLCAyMDE5IDQ6MTYgQU0NCj4gPiBUbzogRWFkcywgR2FnZSA8Z2FnZS5lYWRz QGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiA+IENjOiBvbGl2aWVyLm1hdHpANndpbmQuY29t OyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZzsgbmQNCj4gPiA8bmRAYXJtLmNvbT47IFJpY2hh cmRzb24sIEJydWNlIDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47DQo+ID4gYXJ5YmNoZW5r b0Bzb2xhcmZsYXJlLmNvbTsgQW5hbnlldiwgS29uc3RhbnRpbg0KPiA+IDxrb25zdGFudGluLmFu YW55ZXZAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2MyAy LzVdIHJpbmc6IGFkZCBhIG5vbi1ibG9ja2luZw0KPiA+IGltcGxlbWVudGF0aW9uDQo+ID4gDQo+ ID4gT24gVHVlLCAyMDE5LTAxLTIyIGF0IDIxOjMxICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0K PiA+ID4gDQo+ID4gPiBIaSBPbGEsDQo+ID4gPiANCj4gPiA+IDxzbmlwPg0KPiA+ID4gDQo+ID4g PiA+IA0KPiA+ID4gPiANCj4gPiA+ID4gPiANCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBAQCAtMzMx LDYgKzQzMywzMTkgQEAgdm9pZCBydGVfcmluZ19kdW1wKEZJTEUgKmYsIGNvbnN0IHN0cnVjdA0K PiA+ID4gPiA+IHJ0ZV9yaW5nICpyKTsNCj4gPiA+ID4gPiDCoCNlbmRpZg0KPiA+ID4gPiA+IMKg I2luY2x1ZGUgInJ0ZV9yaW5nX2dlbmVyaWNfNjQuaCINCj4gPiA+ID4gPiANCj4gPiA+ID4gPiAr LyogQGludGVybmFsIDEyOC1iaXQgc3RydWN0dXJlIHVzZWQgYnkgdGhlIG5vbi1ibG9ja2luZyBy aW5nICovDQo+ID4gPiA+ID4gK3N0cnVjdCBuYl9yaW5nX2VudHJ5IHsNCj4gPiA+ID4gPiArCXZv aWQgKnB0cjsgLyoqPCBEYXRhIHBvaW50ZXIgKi8NCj4gPiA+ID4gPiArCXVpbnQ2NF90IGNudDsg LyoqPCBNb2RpZmljYXRpb24gY291bnRlciAqLw0KPiA+ID4gPiBXaHkgbm90IG1ha2UgJ2NudCcg dWludHB0cl90PyBUaGlzIHdheSAzMi1iaXQgYXJjaGl0ZWN0dXJlcyB3aWxsDQo+ID4gPiA+IGFs c28gYmUgc3VwcG9ydGVkLiBJIHRoaW5rIHRoZXJlIGFyZSBzb21lIGNsYWltcyB0aGF0IERQREsg c3RpbGwNCj4gPiA+ID4gc3VwcG9ydHMgZS5nLg0KPiA+ID4gPiBBUk12N2ENCj4gPiA+ID4gYW5k IHBvc3NpYmx5IGFsc28gMzItYml0IHg4Nj8NCj4gPiA+IEkgY2hvc2UgYSA2NC1iaXQgbW9kaWZp Y2F0aW9uIGNvdW50ZXIgYmVjYXVzZSAocHJhY3RpY2FsbHkgc3BlYWtpbmcpDQo+ID4gPiB0aGUg QUJBIHByb2JsZW0gd2lsbCBub3Qgb2NjdXIgd2l0aCBzdWNoIGEgbGFyZ2UgY291bnRlciAtLSBk ZWZpbml0ZWx5DQo+ID4gPiBub3Qgd2l0aGluIG15IGxpZmV0aW1lLiBTZWUgdGhlICJEaXNjdXNz aW9uIiBzZWN0aW9uIG9mIHRoZSBjb21taXQNCj4gPiA+IG1lc3NhZ2UgZm9yIG1vcmUgaW5mb3Jt YXRpb24uDQo+ID4gPiANCj4gPiA+IFdpdGggYSAzMi1iaXQgY291bnRlciwgdGhlcmUgaXMgYSB2 ZXJ5ICh2ZXJ5KSBsb3cgbGlrZWxpaG9vZCBvZiBpdCwNCj4gPiA+IGJ1dCBpdCBpcyBwb3NzaWJs ZS4gUGVyc29uYWxseSwgSSBkb24ndCBmZWVsIGNvbWZvcnRhYmxlIHByb3ZpZGluZw0KPiA+ID4g c3VjaCBjb2RlLCBiZWNhdXNlIGEpIEkgZG91YnQgYWxsIHVzZXJzIHdvdWxkIHVuZGVyc3RhbmQg dGhlDQo+ID4gPiBpbXBsZW1lbnRhdGlvbiB3ZWxsIGVub3VnaCB0byBkbyB0aGUgcmlzay9yZXdh cmQgYW5hbHlzaXMsIGFuZCBiKSBzdWNoDQo+ID4gPiBhIGJ1ZyB3b3VsZCBiZSBuZWFyIGltcG9z c2libGUgdG8gcmVwcm9kdWNlIGFuZCByb290LWNhdXNlIGlmIGl0IGRpZA0KPiA+ID4gb2NjdXIu DQo+ID4gV2l0aCBhIDY0LWJpdCBjb3VudGVyIChhbmQgMzItYml0IHBvaW50ZXIpLCAzMi1iaXQg YXJjaGl0ZWN0dXJlcyAoZS5nLg0KPiA+IEFSTXY3YSBhbmQNCj4gPiBwcm9iYWJseSB4ODYgYXMg d2VsbCkgd29uJ3QgYmUgYWJsZSB0byBzdXBwb3J0IHRoaXMgYXMgdGhleSBhdCBiZXN0IHN1cHBv cnQNCj4gPiA2NC1iaXQNCj4gPiBDQVMgKEFSTXY3YSBoYXMgTERSRVhEL1NUUkVYRCkuIFNvIHlv dSBhcmUgZXNzZW50aWFsbHkgcHV0dGluZyBhIDY0LWJpdCAoYW5kDQo+ID4gMTI4LWJpdCBDQVMp IHJlcXVpcmVtZW50IG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4NCj4gPiANCj4gWWVzLCBJIGFtLiBJ IHRyaWVkIHRvIG1ha2UgdGhhdCBjbGVhciBpbiB0aGUgY292ZXIgbGV0dGVyLg0KPiANCj4gPiAN Cj4gPiA+IA0KPiA+ID4gDQo+ID4gPiA+IA0KPiA+ID4gPiANCj4gPiA+ID4gDQo+ID4gPiA+ID4g DQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gK307DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKiBU aGUgbm9uLWJsb2NraW5nIHJpbmcgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBy dGUNCj4gPiA+ID4gPiArcmluZyAoZGVyaXZlZA0KPiA+ID4gPiA+ICsgKiBmcm9tIEZyZWVCU0Qn cyBidWZyaW5nLmgpIGFuZCBpbnNwaXJlZCBieSBNaWNoYWVsIGFuZCBTY290dCdzDQo+ID4gPiA+ ID4gK25vbi1ibG9ja2luZw0KPiA+ID4gPiA+ICsgKiBjb25jdXJyZW50IHF1ZXVlLg0KPiA+ID4g PiA+ICsgKi8NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qKg0KPiA+ID4gPiA+ICsgKiBAaW50 ZXJuYWwNCj4gPiA+ID4gPiArICrCoMKgwqBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUg bm9uLWJsb2NraW5nIHJpbmcNCj4gPiA+ID4gPiArKHNpbmdsZS1wcm9kdWNlciBvbmx5KQ0KPiA+ ID4gPiA+ICsgKg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gcg0KPiA+ID4gPiA+ICsgKsKgwqDCoEEg cG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBvYmpf dGFibGUNCj4gPiA+ID4gPiArICrCoMKgwqBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiB2b2lkICog cG9pbnRlcnMgKG9iamVjdHMpLg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gbg0KPiA+ID4gPiA+ICsg KsKgwqDCoFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJvbSB0aGUg b2JqX3RhYmxlLg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4gPiArICrC oMKgwqBSVEVfUklOR19RVUVVRV9GSVhFRDrCoMKgwqDCoEVucXVldWUgYSBmaXhlZCBudW1iZXIg b2YgaXRlbXMgdG8NCj4gPiA+ID4gPiArdGhlIHJpbmcNCj4gPiA+ID4gPiArICrCoMKgwqBSVEVf UklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+ ID4gPiA+ID4gK3RvIHRoZSByaW5nDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBmcmVlX3NwYWNlDQo+ ID4gPiA+ID4gKyAqwqDCoMKgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGFmdGVyIHRoZSBl bnF1ZXVlIG9wZXJhdGlvbiBoYXMNCj4gPiA+ID4gPiArZmluaXNoZWQNCj4gPiA+ID4gPiArICog QHJldHVybg0KPiA+ID4gPiA+ICsgKsKgwqDCoEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBlbnF1 ZXVlZC4NCj4gPiA+ID4gPiArICrCoMKgwqBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9G SVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4g PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiA+ID4gK19f cnRlX3JpbmdfZG9fbmJfZW5xdWV1ZV9zcChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKiBjb25z dA0KPiA+ID4gPiA+ICpvYmpfdGFibGUsDQo+ID4gPiA+ID4gKwkJCcKgwqDCoMKgdW5zaWduZWQg aW50IG4sDQo+ID4gPiA+ID4gKwkJCcKgwqDCoMKgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlv ciBiZWhhdmlvciwNCj4gPiA+ID4gPiArCQkJwqDCoMKgwqB1bnNpZ25lZCBpbnQgKmZyZWVfc3Bh Y2UpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArCXVpbnQzMl90IGZyZWVfZW50cmllczsNCj4g PiA+ID4gPiArCXNpemVfdCBoZWFkLCBuZXh0Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCW4g PSBfX3J0ZV9yaW5nX21vdmVfcHJvZF9oZWFkXzY0KHIsIDEsIG4sIGJlaGF2aW9yLA0KPiA+ID4g PiA+ICsJCQkJCcKgJmhlYWQsICZuZXh0LA0KPiA+ID4gPiA+ICZmcmVlX2VudHJpZXMpOw0KPiA+ ID4gPiA+ICsJaWYgKG4gPT0gMCkNCj4gPiA+ID4gPiArCQlnb3RvIGVuZDsNCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKwlFTlFVRVVFX1BUUlNfTkIociwgJnJbMV0sIGhlYWQsIG9ial90YWJsZSwg bik7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJci0+cHJvZF82NC50YWlsICs9IG47DQo+ID4g PiA+IERvbid0IHdlIG5lZWQgcmVsZWFzZSBvcmRlciB3aGVuIChvciBzbXBfd21iIGJldHdlZW4p IHdyaXRpbmcgb2YgdGhlDQo+ID4gPiA+IHJpbmcgcG9pbnRlcnMgYW5kIHRoZSB1cGRhdGUgb2Yg dGFpbD8gQnkgdXBkYXRpbmcgdGhlIHRhaWwgcG9pbnRlciwNCj4gPiA+ID4gd2UgYXJlIHN5bmNo cm9uaXNpbmcgd2l0aCBhIGNvbnN1bWVyLg0KPiA+ID4gPiANCj4gPiA+ID4gSSBwcmVmZXIgdXNp bmcgX19hdG9taWMgb3BlcmF0aW9ucyBldmVuIGZvciBsb2FkIGFuZCBzdG9yZS4gWW91IGNhbg0K PiA+ID4gPiBzZWUgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgdGhhdCBzeW5jaHJvbmlzZSB3aXRo IGVhY2ggb3RoZXIsIGUuZy4NCj4gPiA+ID4gc3RvcmUtcmVsZWFzZSB0byBzb21lIGxvY2F0aW9u IHN5bmNocm9uaXNlcyB3aXRoIGxvYWQtYWNxdWlyZSBmcm9tDQo+ID4gPiA+IHRoZSBzYW1lIGxv Y2F0aW9uLiBJZiB5b3UgZG9uJ3Qga25vdyBob3cgZGlmZmVyZW50IHRocmVhZHMNCj4gPiA+ID4g c3luY2hyb25pc2Ugd2l0aCBlYWNoIG90aGVyLCB5b3UgYXJlIHZlcnkgbGlrZWx5IHRvIG1ha2Ug bWlzdGFrZXMuDQo+ID4gPiA+IA0KPiA+ID4gWW91IGNhbiB0ZWxsIHRoaXMgY29kZSB3YXMgd3Jp dHRlbiB3aGVuIEkgdGhvdWdodCB4ODYtNjQgd2FzIHRoZSBvbmx5DQo+ID4gPiB2aWFibGUgdGFy Z2V0IDopLiBZZXMsIHlvdSBhcmUgY29ycmVjdC4NCj4gPiA+IA0KPiA+ID4gV2l0aCByZWdhcmRz IHRvIHVzaW5nIF9fYXRvbWljIGludHJpbnNpY3MsIEknbSBwbGFubmluZyBvbiB0YWtpbmcgYQ0K PiA+ID4gc2ltaWxhciBhcHByb2FjaCB0byB0aGUgZnVuY3Rpb25zIGR1cGxpY2F0ZWQgaW4gcnRl X3JpbmdfZ2VuZXJpYy5oIGFuZA0KPiA+ID4gcnRlX3JpbmdfYzExX21lbS5oOiBvbmUgdmVyc2lv biB0aGF0IHVzZXMgcnRlX2F0b21pYyBmdW5jdGlvbnMgKGFuZA0KPiA+ID4gdGh1cyBzdHJpY3Rl ciBtZW1vcnkgb3JkZXJpbmcpIGFuZCBvbmUgdGhhdCB1c2VzIF9fYXRvbWljIGludHJpbnNpY3MN Cj4gPiA+IChhbmQgdGh1cyBjYW4gYmVuZWZpdCBmcm9tIG1vcmUgcmVsYXhlZCBtZW1vcnkgb3Jk ZXJpbmcpLg0KRnJvbSBhIGNvZGUgcG9pbnQgb2YgdmlldywgSSBzdHJvbmdseSBwcmVmZXIgdGhl IGF0b21pYyBvcGVyYXRpb25zIHRvIGJlIHZpc2libGUNCmluIHRoZSB0b3AgbGV2ZWwgY29kZSwg bm90IGhpZGRlbiBpbiBzdWJyb3V0aW5lcy4gRm9yIGNvcnJlY3RuZXNzLCBpdCBpcyB2aXRhbA0K dGhhdCBtZW1vcnkgYWNjZXNzZXMgYXJlIHBlcmZvcm1lZCB3aXRoIHRoZSByZXF1aXJlZCBvcmRl cmluZyBhbmQgdGhhdCBhY3F1aXJlDQphbmQgcmVsZWFzZSBtYXRjaGVzIHVwLiBIaWRpbmcgZS5n LiBsb2FkLWFjcXVpcmUgYW5kIHN0b3JlLXJlbGVhc2UgaW4NCnN1YnJvdXRpbmVzIChpbiBhIGRp ZmZlcmVudCBmaWxlISkgbWFrZSB0aGlzIGRpZmZpY3VsdC4gVGhlcmUgaGF2ZSBhbHJlYWR5IGJl ZW4NCnN1Y2ggYnVncyBmb3VuZCBpbiBydGVfcmluZy4NCg0KPiA+IFdoYXQncyB0aGUgYWR2YW50 YWdlIG9mIGhhdmluZyB0d28gZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucz8gV2hhdCBpcyB0aGUN Cj4gPiBkaXNhZHZhbnRhZ2U/DQo+ID4gDQo+ID4gVGhlIGV4aXN0aW5nIHJpbmcgYnVmZmVyIGNv ZGUgb3JpZ2luYWxseSBoYWQgb25seSB0aGUgImxlZ2FjeSINCj4gPiBpbXBsZW1lbnRhdGlvbg0K PiA+IHdoaWNoIHdhcyBrZXB0IHdoZW4gdGhlIF9fYXRvbWljIGltcGxlbWVudGF0aW9uIHdhcyBh ZGRlZC4gVGhlIHJlYXNvbg0KPiA+IGNsYWltZWQgd2FzIHRoYXQgc29tZSBvbGRlciBjb21waWxl cnMgZm9yIHg4NiBkbyBub3Qgc3VwcG9ydCBHQ0MgX19hdG9taWMNCj4gPiBidWlsdGlucy4gQnV0 IEkgdGhvdWdodCB0aGVyZSB3YXMgY29uc2Vuc3VzIHRoYXQgbmV3IGZ1bmN0aW9uYWxpdHkgY291 bGQNCj4gPiBoYXZlDQo+ID4gb25seSBfX2F0b21pYyBpbXBsZW1lbnRhdGlvbnMuDQo+ID4gDQo+ IFdoZW4gQ09ORklHX1JURV9SSU5HX1VTRV9DMTFfTUVNX01PREVMIHdhcyBpbnRyb2R1Y2VkLCBp dCB3YXMgbGVmdCBkaXNhYmxlZA0KPiBmb3IgdGh1bmRlcnhbMV0gZm9yIHBlcmZvcm1hbmNlIHJl YXNvbnMuIEFzc3VtaW5nIHRoYXQgaGFzbid0IGNoYW5nZWQsIHRoZQ0KPiBhZHZhbnRhZ2UgdG8g aGF2aW5nIHR3byB2ZXJzaW9ucyBpcyB0byBiZXN0IHN1cHBvcnQgYWxsIG9mIERQREsncyBwbGF0 Zm9ybXMuDQo+IFRoZSBkaXNhZHZhbnRhZ2UgaXMgb2YgY291cnNlIGR1cGxpY2F0ZWQgY29kZSBh bmQgdGhlIGFkZGl0aW9uYWwgbWFpbnRlbmFuY2UNCj4gYnVyZGVuLg0KVGhlIG9ubHkgd2F5IEkg c2VlIHRoYXQgYSBDMTEgbWVtb3J5IG1vZGVsIGltcGxlbWVudGF0aW9uIGNhbiBiZSBzbG93ZXIg dGhhbg0KdXNpbmcgc21wX3dtYi9ybWIgaXMgaWYgeW91IG5lZWQgdG8gb3JkZXIgbG9hZHMgYmVm b3JlIGEgc3luY2hyb25pemluZyBzdG9yZSBhbmQNCnRoZXJlIGFyZSBhbHNvIG91dHN0YW5kaW5n IHN0b3JlcyB3aGljaCBkbyBub3QgcmVxdWlyZSBvcmRlcmluZy4gc21wX3JtYigpDQpoYW5kbGVz IHRoaXMgd2hpbGUgc3RvcmUtcmVsZWFzZSB3aWxsIGFsc28gKHVubmVjZXNzYXJpbHkpIG9yZGVy IHRob3NlDQpvdXRzdGFuZGluZyBzdG9yZXMuIFRoaXMgc2l0dWF0aW9uIG9jY3VycyBlLmcuIGlu IHJpbmcgYnVmZmVyIGRlcXVldWUgb3BlcmF0aW9ucw0Kd2hlcmUgcmluZyBzbG90cyBhcmUgcmVh ZCAoYW5kIHBvc3NpYmx5IHdyaXR0ZW4gdG8gdGhyZWFkLXByaXZhdGUgbWVtb3J5KSBiZWZvcmUN CnRoZSByaW5nIHNsb3RzIGFyZSByZWxlYXNlIChlLmcuIHVzaW5nIENBUy1yZWxlYXNlIG9yIHN0 b3JlLXJlbGVhc2UpLg0KDQpJIGltYWdpbmUgdGhhdCB0aGUgTFNVL2NhY2hlIHN1YnN5c3RlbSBv biBUaHVuZGVyWC9PQ1RFT04tVFggYWxzbyBoYXZlIHNvbWV0aGluZw0KdG8gZG8gd2l0aCB0aGlz IHByb2JsZW0uIElmIHRoZXJlIGFyZSBhIGxhcmdlIGFtb3VudHMgb2Ygc3RvcmVzIHBlbmRpbmcg aW4gdGhlDQpsb2FkL3N0b3JlIHVuaXQsIHN0b3JlLXJlbGVhc2UgbWlnaHQgaGF2ZSB0byB3YWl0 IGZvciBhIGxvbmcgdGltZSBiZWZvcmUgdGhlDQpzeW5jaHJvbml6aW5nIHN0b3JlIGNhbiBjb21w bGV0ZS4NCg0KPiANCj4gVGhhdCBzYWlkLCBpZiB0aGUgdGh1bmRlcnggbWFpbnRhaW5lcnMgYXJl IG9rIHdpdGggaXQsIEknbSBjZXJ0YWlubHkgb3BlbiB0bw0KPiBvbmx5IGRvaW5nIHRoZSBfX2F0 b21pYyB2ZXJzaW9uLiBOb3RlIHRoYXQgZXZlbiBpbiB0aGUgX19hdG9taWMgdmVyc2lvbiwgYmFz ZWQNCj4gb24gSG9ubmFwYSdzIGZpbmRpbmdzWzJdLCB1c2luZyBhIERQREstZGVmaW5lZCBydGVf YXRvbWljMTI4X2NtcHNldCgpICh3aXRoDQo+IGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHN1cHBv cnQgbWFjaGluZXMgd2l0aCB3ZWFrIGNvbnNpc3RlbmN5KSBhcHBlYXJzIHRvIGJlDQo+IGEgYmV0 dGVyIG9wdGlvbiB0aGFuIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfMTYuDQpfX2F0b21pY19j b21wYXJlX2V4Y2hhbmdlXzE2KCkgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgbG9jay1mcmVlLiBJ dCBpcyBub3QNCmxvY2stZnJlZSBvbiBBUk0vQUFyY2g2NCBhbmQgdGhlIHN1cHBvcnQgaW4gR0ND IGlzIGZvcm1hbGx5IGJyb2tlbiAoY2FuJ3QgdXNlDQpjbXBleGNoZzE2YiB0byBpbXBsZW1lbnQg X19hdG9taWNfbG9hZF8xNikuDQoNClNvIHllcywgSSB0aGluayBEUERLIHdpbGwgaGF2ZSB0byBk ZWZpbmUgYW5kIGltcGxlbWVudCB0aGUgMTI4LWJpdCBhdG9taWMNCmNvbXBhcmUgYW5kIGV4Y2hh bmdlIG9wZXJhdGlvbiAod2hhdGV2ZXIgaXQgd2lsbCBiZSBjYWxsZWQpLiBGb3IgY29tcGF0aWJp bGl0eQ0Kd2l0aCBBUk12OC4wLCB3ZSBjYW4ndCByZXF1aXJlIHRoZSAib2xkIiB2YWx1ZSByZXR1 cm5lZCBieSBhIGZhaWxlZCBjb21wYXJlLQ0KZXhjaGFuZ2Ugb3BlcmF0aW9uIHRvIGJlIHJlYWQg YXRvbWljYWxseSAoTERYUCBkb2VzIG5vdCBndWFyYW50ZWVkIGF0b21pY2l0eSBieQ0KaXRzZWxm KS4gQnV0IHRoaXMgaXMgc2VsZG9tIGEgcHJvYmxlbSwgbWFueSBkZXNpZ25zIHJlYWQgdGhlIG1l bW9yeSBsb2NhdGlvbg0KdXNpbmcgdHdvIHNlcGFyYXRlIDY0LWJpdCBsb2FkcyAoc28gbm90IGF0 b21pYykgYW55d2F5LCBpdCBpcyBhIHN1Y2Nlc3NmdWwNCmF0b21pYyBjb21wYXJlIGV4Y2hhbmdl IG9wZXJhdGlvbiB3aGljaCBwcm92aWRlcyBhdG9taWNpdHkuDQoNCj4gDQo+IEkgY291bGRuJ3Qg ZmluZCB0aGUgZGlzY3Vzc2lvbiBhYm91dCBuZXcgZnVuY3Rpb25hbGl0eSB1c2luZyBfX2F0b21p YyBnb2luZw0KPiBmb3J3YXJkIC0tIGNhbiB5b3Ugc2VuZCBhIGxpbms/DQo+IA0KPiBbMV0gaHR0 cHM6Ly9tYWlscy5kcGRrLm9yZy9hcmNoaXZlcy9kZXYvMjAxNy1EZWNlbWJlci8wODI4NTMuaHRt bA0KPiBbMl3CoGh0dHA6Ly9tYWlscy5kcGRrLm9yZy9hcmNoaXZlcy9kZXYvMjAxOS1KYW51YXJ5 LzEyNDAwMi5odG1sDQo+IA0KPiA+IA0KPiA+IERvZXMgdGhlIG5vbi1ibG9ja2luZyByaW5nIGJ1 ZmZlciBpbXBsZW1lbnRhdGlvbiBoYXZlIHRvIHN1cHBvcnQgdGhlc2Ugb2xkZXINCj4gPiBjb21w aWxlcnM/IFdpbGwgdGhlIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgdGhlc2Ugb2xkZXIgY29t cGlsZXIgYmUNCj4gPiB1cGRhdGVkIHRvDQo+ID4gdXRpbGlzZSB0aGUgbm9uLWJsb2NraW5nIHJp bmcgYnVmZmVyPw0KPiA+IA0KPiAoU2VlIGFib3ZlIC0tIGNvbXBpbGVyIHZlcnNpb25zIHdhc24n dCBhIGNvbnNpZGVyYXRpb24gaGVyZS4pDQo+IA0KPiA+IA0KPiA+ID4gDQo+ID4gPiANCj4gPiA+ ID4gDQo+ID4gPiA+IA0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArZW5kOg0KPiA+ID4gPiA+ICsJaWYgKGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4gPiA+ID4g PiArCQkqZnJlZV9zcGFjZSA9IGZyZWVfZW50cmllcyAtIG47DQo+ID4gPiA+ID4gKwlyZXR1cm4g bjsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4g KyAqIEBpbnRlcm5hbA0KPiA+ID4gPiA+ICsgKsKgwqDCoEVucXVldWUgc2V2ZXJhbCBvYmplY3Rz IG9uIHRoZSBub24tYmxvY2tpbmcgcmluZw0KPiA+ID4gPiA+ICsobXVsdGktcHJvZHVjZXINCj4g PiA+ID4gPiArc2FmZSkNCj4gPiA+ID4gPiArICoNCj4gPiA+ID4gPiArICogQHBhcmFtIHINCj4g PiA+ID4gPiArICrCoMKgwqBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ID4g PiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gPiA+ID4gKyAqwqDCoMKgQSBwb2ludGVyIHRv IGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4gPiA+ID4gPiArICogQHBh cmFtIG4NCj4gPiA+ID4gPiArICrCoMKgwqBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWRkIGlu IHRoZSByaW5nIGZyb20gdGhlIG9ial90YWJsZS4NCj4gPiA+ID4gPiArICogQHBhcmFtIGJlaGF2 aW9yDQo+ID4gPiA+ID4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfRklYRUQ6wqDCoMKgwqBFbnF1 ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIHRvDQo+ID4gPiA+ID4gK3RoZSByaW5nDQo+ID4g PiA+ID4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IEVucXVldWUgYXMgbWFueSBp dGVtcyBhcyBwb3NzaWJsZQ0KPiA+ID4gPiA+ICt0byB0aGUgcmluZw0KPiA+ID4gPiA+ICsgKiBA cGFyYW0gZnJlZV9zcGFjZQ0KPiA+ID4gPiA+ICsgKsKgwqDCoHJldHVybnMgdGhlIGFtb3VudCBv ZiBzcGFjZSBhZnRlciB0aGUgZW5xdWV1ZSBvcGVyYXRpb24gaGFzDQo+ID4gPiA+ID4gK2Zpbmlz aGVkDQo+ID4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gPiArICrCoMKgwqBBY3R1YWwgbnVt YmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gPiA+ID4gKyAqwqDCoMKgSWYgYmVoYXZpb3Ig PT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiA+ ID4gPiArICovDQo+ID4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVk IGludA0KPiA+ID4gPiA+ICtfX3J0ZV9yaW5nX2RvX25iX2VucXVldWVfbXAoc3RydWN0IHJ0ZV9y aW5nICpyLCB2b2lkICogY29uc3QNCj4gPiAqb2JqX3RhYmxlLA0KPiA+ID4gDQo+ID4gPiA+IA0K PiA+ID4gPiA+IA0KPiA+ID4gPiA+ICsJCQnCoMKgwqDCoHVuc2lnbmVkIGludCBuLA0KPiA+ID4g PiA+ICsJCQnCoMKgwqDCoGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ ID4gPiA+ID4gKwkJCcKgwqDCoMKgdW5zaWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiA+ID4gPiA+ ICt7DQo+ID4gPiA+ID4gKyNpZiAhZGVmaW5lZChSVEVfQVJDSF9YODZfNjQpIHx8ICFkZWZpbmVk KEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkpDQo+ID4gPiA+ID4gKwlSVEVfU0VUX1VTRUQocik7DQo+ ID4gPiA+ID4gKwlSVEVfU0VUX1VTRUQob2JqX3RhYmxlKTsNCj4gPiA+ID4gPiArCVJURV9TRVRf VVNFRChuKTsNCj4gPiA+ID4gPiArCVJURV9TRVRfVVNFRChiZWhhdmlvcik7DQo+ID4gPiA+ID4g KwlSVEVfU0VUX1VTRUQoZnJlZV9zcGFjZSk7DQo+ID4gPiA+ID4gKyNpZm5kZWYgQUxMT1dfRVhQ RVJJTUVOVEFMX0FQSQ0KPiA+ID4gPiA+ICsJcHJpbnRmKCJbJXMoKV0gUklOR19GX05CIHJlcXVp cmVzIGFuIGV4cGVyaW1lbnRhbCBBUEkuIg0KPiA+ID4gPiA+ICsJwqDCoMKgwqDCoMKgwqAiIFJl Y29tcGlsZSB3aXRoIEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkgdG8gdXNlIGl0LlxuIg0KPiA+ID4g PiA+ICsJwqDCoMKgwqDCoMKgwqAsIF9fZnVuY19fKTsNCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4g PiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ID4gKyNpZiBkZWZp bmVkKFJURV9BUkNIX1g4Nl82NCkgJiYgZGVmaW5lZChBTExPV19FWFBFUklNRU5UQUxfQVBJKQ0K PiA+ID4gPiA+ICsJc2l6ZV90IGhlYWQsIG5leHQsIHRhaWw7DQo+ID4gPiA+ID4gKwl1aW50MzJf dCBmcmVlX2VudHJpZXM7DQo+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKwluID0gX19ydGVfcmluZ19tb3ZlX3Byb2RfaGVhZF82NChyLCAwLCBuLCBi ZWhhdmlvciwNCj4gPiA+ID4gPiArCQkJCQnCoCZoZWFkLCAmbmV4dCwNCj4gPiA+ID4gPiAmZnJl ZV9lbnRyaWVzKTsNCj4gPiA+ID4gPiArCWlmIChuID09IDApDQo+ID4gPiA+ID4gKwkJZ290byBl bmQ7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG47IC8qIGkgaW5j cmVtZW50ZWQgaWYgZW5xdWV1ZSBzdWNjZWVkcyAqLykgew0KPiA+ID4gPiA+ICsJCXN0cnVjdCBu Yl9yaW5nX2VudHJ5IG9sZF92YWx1ZSwgbmV3X3ZhbHVlOw0KPiA+ID4gPiA+ICsJCXN0cnVjdCBu Yl9yaW5nX2VudHJ5ICpyaW5nX3B0cjsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkJLyogRW5x dWV1ZSB0byB0aGUgdGFpbCBlbnRyeS4gSWYgYW5vdGhlciB0aHJlYWQgd2lucw0KPiA+ID4gPiA+ IHRoZQ0KPiA+ID4gPiA+IHJhY2UsDQo+ID4gPiA+ID4gKwkJwqAqIHJldHJ5IHdpdGggdGhlIG5l dyB0YWlsLg0KPiA+ID4gPiA+ICsJCcKgKi8NCj4gPiA+ID4gPiArCQl0YWlsID0gci0+cHJvZF82 NC50YWlsOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCQlyaW5nX3B0ciA9ICYoKHN0cnVjdCBu Yl9yaW5nX2VudHJ5ICopJnJbMV0pW3RhaWwgJiByLQ0KPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4g PiBtYXNrXTsNCj4gPiA+ID4gVGhpcyBpcyBhbiB1Z2x5IGV4cHJlc3Npb24gYW5kIGNhc3QuIEFs c28gSSB0aGluayBpdCBpcyB1bm5lY2Vzc2FyeS4NCj4gPiA+ID4gV2hhdCdzIHByZXZlbnRpbmcg dGhpcyBmcm9tIGJlaW5nIHdyaXR0ZW4gd2l0aG91dCBhIGNhc3Q/IFBlcmhhcHMNCj4gPiA+ID4g dGhlIHJpbmcgYXJyYXkgbmVlZHMgdG8gYmUgYSB1bmlvbiBvZiAidm9pZCAqIiBhbmQgc3RydWN0 DQo+ID4gPiA+IG5iX3JpbmdfZW50cnk/DQo+ID4gPiBUaGUgY2FzdCBpcyBuZWNlc3NhcnkgZm9y IHRoZSBjb3JyZWN0IHBvaW50ZXIgYXJpdGhtZXRpYyAobGV0DQo+ID4gPiAidWludHB0cl90IGJh c2UgPT0gJnJbMV0iKToNCj4gPiBZZXMgSSBrbm93IHRoZSBDIGxhbmd1YWdlLg0KPiA+IA0KPiA+ ID4gDQo+ID4gPiAtIFdpdGggY2FzdDogcmluZ19wdHIgPSBiYXNlICsgc2l6ZW9mKHN0cnVjdCBu Yl9yaW5nX2VudHJ5KSAqICh0YWlsICYNCj4gPiA+IHItDQo+ID4gPiA+IA0KPiA+ID4gPiBtYXNr KTsNCj4gPiA+IC0gVy9vIGNhc3Q6IHJpbmdfcHRyID0gYmFzZSArIHNpemVvZihzdHJ1Y3QgcnRl X3JpbmcpICogKHRhaWwgJg0KPiA+ID4gci0+bWFzayk7DQo+ID4gPiANCj4gPiA+IEZXSVcsIHRo aXMgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgaXMgZG9uZSB3aXRoIHRoZSBzZWNvbmQgYXJn dW1lbnQNCj4gPiA+ICgmclsxXSkgdG8gRU5RVUVVRV9QVFJTIGFuZCBERVFVRVVFX1BUUlMsIGJ1 dCB0aGVyZSBpdCdzIHNwbGl0IGFjcm9zcw0KPiA+ID4gbXVsdGlwbGUgbGluZXMgb2YgY29kZS4g VGhlIGVxdWl2YWxlbnQgaGVyZSB3b3VsZCBiZToNCj4gPiA+IA0KPiA+ID4gc3RydWN0IG5iX3Jp bmdfZW50cnkgKnJpbmdfYmFzZSA9IChzdHJ1Y3QgbmJfcmluZ19lbnRyeSopJnJbMV07DQo+ID4g PiByaW5nX3B0ciA9IHJpbmdfYmFzZVt0YWlsICYgci0+bWFza107DQo+ID4gPiANCj4gPiA+IFdo aWNoIGlzIG1vcmUgbGVnaWJsZSwgSSB0aGluay4NCj4gPiBUaGUgUlRFIHJpbmcgYnVmZmVyIGNv ZGUgaXMgbm90IHZlcnkgbGVnaWJsZSB0byBzdGFydCB3aXRoLg0KPiA+IA0KPiA+ID4gDQo+ID4g PiANCj4gPiA+IFRoZXJlIGlzIG5vIHJpbmcgYXJyYXkgc3RydWN0dXJlIGluIHdoaWNoIHRvIGFk ZCBhIHVuaW9uOyB0aGUgcmluZw0KPiA+ID4gYXJyYXkgaXMgYSBjb250aWd1b3VzIGNodW5rIG9m IG1lbW9yeSB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MgYWZ0ZXINCj4gPiA+IHRoZSBlbmQgb2Yg YSBzdHJ1Y3QgcnRlX3JpbmcuIFdlIGludGVycHJldCB0aGUgbWVtb3J5IHRoZXJlIGFjY29yZGlu Zw0KPiA+ID4gdG8gdGhlIHJpbmcgZW50cnkgZGF0YSB0eXBlICh2b2lkICogZm9yIHJlZ3VsYXIg cmluZ3MgYW5kIHN0cnVjdA0KPiA+ID4gbmJfcmluZ19lbnRyeSBmb3INCj4gPiBub24tYmxvY2tp bmcgcmluZ3MpLg0KPiA+IE15IHdvcnJ5IGlzIHRoYXQgd2UgYXJlIGFidXNpbmcgdGhlIEMgbGFu Z3VhZ2UgYW5kIGNyZWF0aW5nIGEgbW9uc3RlciBvZg0KPiA+IGZyYWdpbGUgQyBjb2RlIHRoYXQg d2lsbCBiZSBtb3JlIGFuZCBtb3JlIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kIGFuZCB0bw0KPiA+ IG1haW50YWluLiBBdCBzb21lIHBvaW50IHlvdSBoYXZlIHRvIHRoaW5rIHRoZSBxdWVzdGlvbiAi QXJlIHdlIGRvaW5nIHRoZQ0KPiA+IHJpZ2h0DQo+ID4gdGhpbmc/Ii4NCj4gPiANCj4gSSdtIG5v dCBhd2FyZSBvZiBhbnkgZnJhZ2lsaXR5L21haW50YWluYWJpbGl0eSBpc3N1ZXMgaW4gdGhlIHJp bmcgY29kZSAodGhvdWdoDQo+IHBlcmhhcHMgdGhlIG1haW50YWluZXJzIGhhdmUgYSBkaWZmZXJl bnQgdmlldyEpLCBhbmQgcGVyc29uYWxseSBJIGZpbmQgdGhlDQo+IGNvZGUgZmFpcmx5IGxlZ2li bGUuIElmIHlvdSBoYXZlIGEgc3BlY2lmaWMgc3VnZ2VzdGlvbiwgSSdsbCBsb29rIGludG8NCj4g aW5jb3Jwb3JhdGluZyBpdC4NCj4gDQo+IFRoYW5rcywNCj4gR2FnZQ0KPiANCj4gPC9zbmlwPg0K LS0gDQpPbGEgTGlsamVkYWhsLCBOZXR3b3JraW5nIFN5c3RlbSBBcmNoaXRlY3QsIEFybQ0KUGhv bmUgKzQ2NzA2ODY2MzczLCBTa3lwZSBvbGEubGlsamVkYWhsDQoNCg==