From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 54B3E430CA; Tue, 22 Aug 2023 07:43:29 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DC3F14021D; Tue, 22 Aug 2023 07:43:28 +0200 (CEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on2050.outbound.protection.outlook.com [40.107.7.50]) by mails.dpdk.org (Postfix) with ESMTP id A93B940041 for ; Tue, 22 Aug 2023 07:43:27 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Am61TyCIm/dPbpzdAixlNgPL0pyXl0XKnkCTXFtPht4m5C8sITBrV/RGIrQTMrJLFAjdIN9dN5xlqK1avucIcmmLFcobAeAM10Luc1Cjnejvj3kzqPoF4ZGoqi9RchNfkX1nGEbiAlIQhlA6Ei89ncm1vZjf1FAz3jR9KjjLSB/C5pLKi1bCE/xjz6bQBhTqdJX9cn7fPj7E6AQQDd7ppDNT05iMfHEaPklFFii7NPxZMQ49ntlCs5GlbixYzxZo4xI3N2qSA5fzTXuEXjQUcYn4Jxq1kB3Qv/WO6EQ1QIRMb0Mh4mUIzMyIY2sBr6vgWiaQ8uhLgIT923fgLLTgfA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+xAC8I5QSliVvYp8wp5klSF+ZP09LdN2911mWkQgVVQ=; b=T2p8eqcL/Kz5vSd+kaQZjYKO3cOQs2b38RmOAlgDkN1Pv1W1Lx9aDlmw9yp1cA4KEpNo2L2t50XOYl+lIrutr3y0d3TZ9TXVOGunXp1h0IOMrF2KsdGJmaiDhZAjEfYuRv87lVUR8js4/l1Ja+bPAf7g2S0yOR/b3pwDAJOqXqjWOmZvdZaUIkIKZKcKBpTnG2XMego5suQNudeOPS0ouRjZ0aqUrMJhGZ39AeYQsv1i59hEWPgLhJN2xY5YWedY2f4uE7qSI0eEesQ6gZan+gmtcCeoEXFaLi27jZjDQ2FaemStJ0KSEkYvsB3loev1WtsEj4jJNMMQbi2tOfIDEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+xAC8I5QSliVvYp8wp5klSF+ZP09LdN2911mWkQgVVQ=; b=jEuCbfBNpxqwMV5wjx3B4e45yD/Y0T5K9AXgYoiBXuxkQUS4BTP7Is7fY052UA+LHs+frvvUYMVbe4eF4Fr78LENeaw8f9k99ZAinyigUhMUjRGes/sdSGUWNZNAcMtcbPgYwRW3XFs4AjxyeBXsDbnqiWBebvU6m7W35yUDZBw= Received: from DBAPR08MB5814.eurprd08.prod.outlook.com (2603:10a6:10:1b1::6) by PAVPR08MB10330.eurprd08.prod.outlook.com (2603:10a6:102:325::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.20; Tue, 22 Aug 2023 05:43:24 +0000 Received: from DBAPR08MB5814.eurprd08.prod.outlook.com ([fe80::b3a3:eb56:481f:99c2]) by DBAPR08MB5814.eurprd08.prod.outlook.com ([fe80::b3a3:eb56:481f:99c2%4]) with mapi id 15.20.6699.022; Tue, 22 Aug 2023 05:43:24 +0000 From: Honnappa Nagarahalli To: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , "jackmin@nvidia.com" , "konstantin.v.ananyev@yandex.ru" CC: "dev@dpdk.org" , Ruifeng Wang , Aditya Ambadipudi , Wathsala Wathawana Vithanage , nd , nd Subject: RE: [RFC] lib/st_ring: add single thread ring Thread-Topic: [RFC] lib/st_ring: add single thread ring Thread-Index: AQHZ1HRsj5UOZIDmtU+IXup+eth44a/1xIzw Date: Tue, 22 Aug 2023 05:43:24 +0000 Message-ID: References: <20230821060420.3509667-1-honnappa.nagarahalli@arm.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 398F61CF0E337643BC33CBDE01A03872.0 x-checkrecipientchecked: true authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DBAPR08MB5814:EE_|PAVPR08MB10330:EE_ x-ms-office365-filtering-correlation-id: 4e2d17ad-bb0d-4d55-2bde-08dba2d2b394 nodisclaimer: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: +xGQufylB6e6g8DrhRElbSONsm/wfqkEH0zQReLQ+9TryIyM7ESgSvUFYfkalvHN9cIThBJZQSOuNsUIzK4qoNvFhII7L9EEjFx9j0OP/JlEqqKMuO8D1m5H/CtAxIanZzamV6V59Z9Q45KOZrL3jYyXQrIRfB+pNg0+60JxGezrpO43PjfzQfy/JDfncwKAqsqpAkvEkyWc4simIDHWKJlz7Uql3IdMHO/119myNPuHYiSBf70vnPkyW5I6nWhPM/F/zlOe8zwybfTeAIUqr/F3tXg2Qjm6BKX/zixBVh6ed9dvUTD9tivCaZdK7iot0/NJ/0ko24o+NYqgf94KVddnzPFJKsZyiRSvglIqh7FprJS97j09OTyRvFIQyxaPk/n0RkVOqvPVI4385AnXsWRqjs50Cwu6XCIOarnPnSuNCSyQAOgCipEctbKTkaDeLVbX2TbiltUZAzhhHALDtAPy/zpQZHupN2kvmp6FZCsth5fBij9p2fCdNN6r3NSQQOwCU6juKoqbQ8mk2mL/o3N9g6/lr65mh6Ce9Gn8neeY053gPkgxLFicnDSAqE2zpKGmnApW7NAbga3zNSbOhganTNTNxNbD6jck26Kk9bOdk9n9YMJ1iHrhCt9jCGLF/1epdfuiYj7N6oicHGvhDg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBAPR08MB5814.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(136003)(39860400002)(396003)(366004)(346002)(376002)(186009)(1800799009)(451199024)(54906003)(66446008)(76116006)(66476007)(66556008)(64756008)(316002)(296002)(66946007)(9686003)(110136005)(8676002)(8936002)(4326008)(41300700001)(122000001)(966005)(478600001)(55016003)(71200400001)(38070700005)(38100700002)(53546011)(6506007)(83380400001)(30864003)(66574015)(2906002)(86362001)(7696005)(5660300002)(33656002)(52536014)(23180200003)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?S1hWQ21qdHBYRkZhK016UjVXVXBPbXhCZ0Z5YlA3a3hiUHd5RCs5UHlyVngr?= =?utf-8?B?WjRCekh3aVBJV1dpM1lRemg5MEVuekNXeFR5UzBCRlBaY2d2eDZLUU5xWmFY?= =?utf-8?B?ODhSMFVYZlhzRnVod1hTdHkvbUREZytIRUF6a0d5c1Nuai84RFZDRHExeE1G?= =?utf-8?B?NjVicEdyTjhKZGFuM2hVeGNidTc0ZEdiUEtCNjlXS2RtZkhZb1NQUDNsOUtl?= =?utf-8?B?R2RpM1o1SENCVU9qWGw0T3ozQno2SE5xaUgyOWZ6akdEM1lpU3ZXbjU0NzN2?= =?utf-8?B?VDZXcEFRRVFkQWVZYUxIN3VuSnAzZHc1Q21HYVFqOVBPZ1VWY0c3QkM0MHdi?= =?utf-8?B?cmpvblZxRVdmdHdpUStpTGlGRm5VNUcrRzlaZllFUkZCS1RxQ2FBN0FoczRS?= =?utf-8?B?QmUzWVpXK2JRZ0NjclJ4T2xXRDduRzlRSk9TTDRodVFiWkpKSDdEdTU4bUN4?= =?utf-8?B?d1M1NmJMbEM5Z1ZEeDg2U1JxM3dFdmpxUURXMUowOHVOK3ZJK1NJUDZQc1hs?= =?utf-8?B?RkIvZWpodGVxWHZ4U1kySGNubWdZSlhReFB4RW43djNid0puaXJ5Y1BSeExn?= =?utf-8?B?QkNnODZiR0JhL05Peng5aXg3Rk1kYWw0M2tncEVMblRiSWJUOCsxbUl1WTIr?= =?utf-8?B?WU5lQWJZQjIvc1pJTmpBdkRrL1RHMXYvRHlFNzBiS3lvbmlqYzVwcGlMRmVx?= =?utf-8?B?UFFHdFAwZFdiQllsZEJDTW16S0t5UGVBbmxKTGlvS2NDMElrRzREMlJyczNH?= =?utf-8?B?RFlndUZEeFdsdjRsTVNSQTlkWmk3RWIrTVdqNTVKdXJibHFKODl3Rk5oR28z?= =?utf-8?B?NUsvSitqM3lVV2loRE9sNHMrR0ZJcXlLYVZLbUNNOFltNkZtTU1iOWdWcU1D?= =?utf-8?B?ZUhRSlRPWk5pYnNQY1k4Vzdqa1JRVXgvQzJlaXhDSWJaM1F3ZytwU0tYeE8v?= =?utf-8?B?ZCtoc3JSdnovSGttVC95aDdGaWRnS21KU0dLQUdLOEJ1N3dQemM1R1VNVTJi?= =?utf-8?B?SWhzNHpTeXNrRHJwU2tQRVQ1VmlUWDRrMThEOEFzR2Y2MU9ISk8vK0JLUGRo?= =?utf-8?B?U0hxbzVCSm1XYWthWVk0SnFWU0JvcXVpYmVWN1l0VklhOHlzWDhzVDZKc0lp?= =?utf-8?B?MTV5YldEd1ZnQjNZeXVFRFJSRzlZU0cwRWR2VFZuNXlpcFovTml6L2tuU2VC?= =?utf-8?B?cFJJQXZPUVBjUjJzZExlcExOUDkzZ2R6bFlKd29Xc2xkWjY2NVZiWUsySDha?= =?utf-8?B?aGdDL2VtbHgrdXc2M0lSM3lwcFBiaG11RmdhNkF3VmtWMzJmajYyaTJTNUoy?= =?utf-8?B?YWNaTmZmN1FwWnY2WEJkUDU1V1dMRTh6K1JiSWFJQTN4N3BJaVRwU1FLd0Jl?= =?utf-8?B?dWZXWU1KL0xYWWFXT3ZhQm9vVTlOblk3amZhOEgrbzdzYk9IVjYzaUdqUVJh?= =?utf-8?B?SzNqbVdDUDd2ZElBMFlCeDMzNGVzdFhLeFhSdzV3a1I4SVRFSXJLUExCVE5G?= =?utf-8?B?dGxIc2lRNnI4Zlk4R3ZzOHdHY3hKQjVhYWFoQldzTmVSQzdVOWQxZDJYSmpI?= =?utf-8?B?ZStoZHpocklEUk1CVU5qd00vU3ZhTTBocWY1My9lQVBCTktnQU94OVBraHc0?= =?utf-8?B?QW1yNWlEa3QrMXRab25zam9RbXUra25FdzBUdDJQL3dQSHNGQW1id3Y0WENB?= =?utf-8?B?c25vTmxkRnc1b3RvaEFuUUtzWStrTmxxaXVSZFZadG5TK2swOWhneDRXM0Fu?= =?utf-8?B?SFhjYmdyNWVsdjRLUWYyM0tEcUlVK3p3ZVpYaDE2UVBUWGdlaVQ1NU1QdmpH?= =?utf-8?B?d3o5WEgzRmQ2ZUMzUzJwbGVrNHl2MUpWL2RVWG9xclIydEVQekN5Mno0Wk5L?= =?utf-8?B?T0lIOSszOUh3Q2pzWEw4STNSYjJqdEl4RGR0WlFFaE9hcHdZUS9hK0E5ZzFX?= =?utf-8?B?UXFMMzh0T2xma3YrNERtS29ub2IzU2R3ak5lZFU1YmVRMWd2UlVjeVJPQ05a?= =?utf-8?B?aXhLazZnQkc2a0F0TEtJTXY4cTg4V1hCS2dyNWpIbmdmZUNCM3QrZytzM3VG?= =?utf-8?B?TGZNZVNjRldaSnN4eVpxY2hZYjNqdk5WQjh3d3RWbSt3U0JZd3hHR1RyYmtU?= =?utf-8?B?aDcya2N2ektlOGZCWmdOTkZEMWFpaDRRZzZIck4xVmVDejY4K0ZWZ1pvQnNB?= =?utf-8?Q?W9aq4QhUssjg/x28hF3HUr8=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DBAPR08MB5814.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e2d17ad-bb0d-4d55-2bde-08dba2d2b394 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Aug 2023 05:43:24.2425 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: uQjy0zNc5v0sjx+uYwWQW0iM1WZdhDY7i9/YDNUEfmf7ypdtEJS+jZqOR/4+a9BkgBns/+bQ+DCng/JtfnjFAarxFt9Y8ghxzQlO1G6k/S0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB10330 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF0dGlhcyBSw7ZubmJs b20gPGhvZm9yc0BseXNhdG9yLmxpdS5zZT4NCj4gU2VudDogTW9uZGF5LCBBdWd1c3QgMjEsIDIw MjMgNDoxNCBQTQ0KPiBUbzogSG9ubmFwcGEgTmFnYXJhaGFsbGkgPEhvbm5hcHBhLk5hZ2FyYWhh bGxpQGFybS5jb20+Ow0KPiBqYWNrbWluQG52aWRpYS5jb207IGtvbnN0YW50aW4udi5hbmFueWV2 QHlhbmRleC5ydQ0KPiBDYzogZGV2QGRwZGsub3JnOyBSdWlmZW5nIFdhbmcgPFJ1aWZlbmcuV2Fu Z0Bhcm0uY29tPjsgQWRpdHlhDQo+IEFtYmFkaXB1ZGkgPEFkaXR5YS5BbWJhZGlwdWRpQGFybS5j b20+OyBXYXRoc2FsYSBXYXRoYXdhbmENCj4gVml0aGFuYWdlIDx3YXRoc2FsYS52aXRoYW5hZ2VA YXJtLmNvbT47IG5kIDxuZEBhcm0uY29tPg0KPiBTdWJqZWN0OiBSZTogW1JGQ10gbGliL3N0X3Jp bmc6IGFkZCBzaW5nbGUgdGhyZWFkIHJpbmcNCj4gDQo+IE9uIDIwMjMtMDgtMjEgMDg6MDQsIEhv bm5hcHBhIE5hZ2FyYWhhbGxpIHdyb3RlOg0KPiA+IEFkZCBhIHNpbmdsZSB0aHJlYWQgc2FmZSBh bmQgbXVsdGktdGhyZWFkIHVuc2FmZSByaW5nIGRhdGEgc3RydWN0dXJlLg0KPiANCj4gT25lIG11 c3QgaGF2ZSBzZXQgdGhlIGJhciB2ZXJ5IGxvdywgaWYgb25lIG5lZWRzIHRvIHNwZWNpZnkgdGhh dCBhbiBBUEkgaXMNCj4gc2luZ2xlLXRocmVhZCBzYWZlLg0KPiANCj4gPiBUaGlzIGxpYnJhcnkg cHJvdmlkZXMgYW4gc2ltcGxlIGFuZCBlZmZpY2llbnQgYWx0ZXJuYXRpdmUgdG8NCj4gPiBtdWx0 aS10aHJlYWQgc2FmZSByaW5nIHdoZW4gbXVsdGktdGhyZWFkIHNhZmV0eSBpcyBub3QgcmVxdWly ZWQuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBIb25uYXBwYSBOYWdhcmFoYWxsaSA8aG9ubmFw cGEubmFnYXJhaGFsbGlAYXJtLmNvbT4NCj4gPiAtLS0NCj4gPiB2MToNCj4gPiAxKSBUaGUgY29k ZSBpcyB2ZXJ5IHByZWxpbW5hcnkgYW5kIGlzIG5vdCBldmVuIGNvbXBpbGVkDQo+ID4gMikgVGhp cyBpcyBpbnRlbmRlZCB0byBzaG93IHRoZSBBUElzIGFuZCBzb21lIHRob3VnaHRzIG9uDQo+ID4g aW1wbGVtZW50YXRpb24NCj4gDQo+IElmIHlvdSBoYXZlbid0IGRvbmUgaXQgYWxyZWFkeSwgbWF5 YmUgaXQgbWlnaHQgYmUgd29ydGggbG9va2luZyBhcm91bmQgaW4gdGhlDQo+IGNvZGUgYmFzZSBm b3IgYWxyZWFkeS1leGlzdGluZywgbW9yZS1vci1sZXNzIG9wZW4tY29kZWQgZmlmby9jaXJjdWxh ciBidWZmZXINCj4gdHlwZSBkYXRhIHN0cnVjdHVyZXMuIEp1c3QgdG8gbWFrZSBzdXJlIHRob3Nl IGNhbiBiZSBlbGltaW5hdGVkIGlmIHRoaXMgbWFrZXMNCj4gaXQgaW50byBEUERLLg0KPiANCj4g VGhlcmUncyBvbmUgaW4gcnRlX2V2ZW50X2V0aF9yeF9hZGFwdGVyLmMsIGFuZCBJIHRoaW5rIG9u ZSBpbiB0aGUgU1cNCj4gZXZlbnRkZXYgYXMgd2VsbC4gU2VlbXMgdG8gYmUgb25lIGluIGNtZGxp bmVfY2lyYnVmLmggYXMgd2VsbC4gSSdtIHN1cmUgdGhlcmUNCj4gYXJlIG1hbnkgbW9yZS4NCkkg a25ldyB0aGVyZSBhcmUgc29tZSwgYnV0IGhhdmUgbm90IGxvb2tlZCBhdCB0aGVtIHlldC4gSSB3 aWxsIGxvb2sgYXQgdGhlbS4NCg0KPiANCj4gWW91IGNvdWxkIHBpY2sgc29tZSBvdGhlciBuYW1l IGZvciBpdCwgaW5zdGVhZCBvZiB0aGUgc2xpZ2h0bHkgYXdrd2FyZA0KPiAic3RfcmluZyIgKGUu Zy4sICJmaWZvIiwgImNidWYiLCAiY2J1ZmZlciIsICJjaXJjX2J1ZmZlciIpLiBUaGF0IHdvdWxk IGFsc28gbGVhdmUNCj4geW91IHdpdGggbW9yZSBmcmVlZG9tIHRvIHN0cmF5IGZyb20gdGhlIE1U IHNhZmUgcmluZyBBUEkgd2l0aG91dCBzdXJwcmlzaW5nDQo+IHRoZSB1c2VyLCBpZiBuZWVkZWQg KGFuZCBJIHRoaW5rIGl0IGlzIG5lZWRlZCkuDQpUaGUgdGhvdWdodCB3YXMgdG8gbWFrZSBpdCBj bGVhciB0aGF0IHRoaXMgaXMgZm9yIHNpbmdsZS10aHJlYWQgdXNlIChpLmUubm90IGV2ZW4gcHJv ZHVjZXIgYW5kIGNvbnN1bWVyIG9uIGRpZmZlcmVudCB0aHJlYWRzKSwgbWF5IGJlIEkgZG8gbm90 IG5lZWQgdG8gdHJ5IGhhcmQuDQoiZmlmbyIgbWlnaHQgbm90IGJlIGdvb2Qgb3B0aW9uIGdpdmVu IHRoYXQgZGVxdWV1ZS9lbnF1ZXVlIGF0IGJvdGggZW5kcyBvZiB0aGUgcmluZyBhcmUgcmVxdWly ZWQvYWxsb3dlZC4NCldpa2lwZWRpYSBbMV0gYW5kIG90aGVycyBbMl0sIFszXSBpbmRpY2F0ZXMg dGhhdCB0aGlzIGRhdGEgc3RydWN0dXJlIHNob3VsZCBiZSBjYWxsZWQgJ2RlcXVlJyAocHJvbm91 bmNlZCBhcyBkZWNrKS4gSSB3b3VsZCBwcmVmZXIgdG8gZ28gd2l0aCB0aGlzIChhc3N1bWluZyB0 aGlzIHdpbGwgYmUgb3V0c2lkZSBvZiAncnRlX3JpbmcnKQ0KDQpbMV0gaHR0cHM6Ly9lbi53aWtp cGVkaWEub3JnL3dpa2kvRG91YmxlLWVuZGVkX3F1ZXVlDQpbMl0gaHR0cHM6Ly93d3cuZ2Vla3Nm b3JnZWVrcy5vcmcvZGVxdWUtc2V0LTEtaW50cm9kdWN0aW9uLWFwcGxpY2F0aW9ucy8NClszXSBo dHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zODgwMjU0L3doeS1kby13ZS1uZWVk LWRlcXVlLWRhdGEtc3RydWN0dXJlcy1pbi10aGUtcmVhbC13b3JsZCM6fjp0ZXh0PUElMjBEZXF1 ZSUyMGlzJTIwYSUyMGRvdWJsZSx0aGluZyUyMG9uJTIwZnJvbnQlMjBvZiUyMHF1ZXVlLg0KDQo+ IA0KPiBIb3BlZnVsbHkgeW91IGNhbiByZWR1Y2UgQVBJIGNvbXBsZXhpdHkgY29tcGFyZWQgdG8g dGhlIE1ULXNhZmUgdmVyc2lvbi4NCj4gSGF2aW5nIGEgbmFtZSBmb3IgdGhlc2Uga2luZHMgb2Yg ZGF0YSBzdHJ1Y3R1cmVzIGRvZXNuJ3QgbWFrZSBhIGxvdCBvZiBzZW5zZSwNCj4gZm9yIGV4YW1w bGUuIFNraXAgdGhlIGR1bXAgZnVuY3Rpb24uIFJlbGF4IGZyb20gYWx3YXlzX2lubGluZSB0byBq dXN0IHJlZ3VsYXINCj4gaW5saW5lLg0KWWVzLCBwbGFuIGlzIHRvIHJlZHVjZSBjb21wbGV4aXR5 IChjb21wYXJlZCB0byBydGVfcmluZykgYW5kIHNvbWUgQVBJcyBjYW4gYmUgc2tpcHBlZCB1bnRp bCB0aGVyZSBpcyBhIG5lZWQuDQoNCj4gDQo+IEknbSBub3Qgc3VyZSB5b3UgbmVlZCBidWxrL2J1 cnN0IHR5cGUgb3BlcmF0aW9ucy4gV2l0aG91dCBhbnkgbWVtb3J5DQo+IGZlbmNlcywgYW4gb3B0 aW1pemluZyBjb21waWxlciBzaG91bGQgZG8gYSBwcmV0dHkgZ29vZCBqb2Igb2YgdW5yb2xsaW5n DQo+IG11bHRpcGxlLWVsZW1lbnQgYWNjZXNzIHR5cGUgb3BlcmF0aW9ucywgYXNzdW1pbmcgeW91 IGxlYXZlIHRoZSBTVCByaW5nDQo+IGNvZGUgaW4gdGhlIGhlYWRlciBmaWxlcyAob3RoZXJ3aXNl IExUTyBpcyBuZWVkZWQpLg0KSU1PLCBidWxrL2J1cnN0IEFQSXMgYXJlIGFib3V0IHRoZSBmdW5j dGlvbmFsaXR5IHJhdGhlciB0aGFuIGxvb3AgdW5yb2xsaW5nLiBBUElzIHRvIHdvcmsgd2l0aCBz aW5nbGUgb2JqZWN0cyBjYW4gYmUgc2tpcHBlZCAodXNlIGJ1bGsgQVBJcyB3aXRoIG49MSkuDQoN Cj4gDQo+IEkgdGhpbmsgeW91IHdpbGwgd2FudCBhIHBlZWstdHlwZSBvcGVyYXRpb24gb24gdGhl IHJlYWRlciBzaWRlLiBUaGF0IG1vcmUgZm9yDQo+IGNvbnZlbmllbmNlLCByYXRoZXIgdGhhbiB0 aGF0IEkgdGhpbmsgdGhlIGNvcGllcyB3aWxsIGFjdHVhbGx5IGJlIHRoZXJlIGluIHRoZQ0KPiBv YmplY3QgY29kZSAoc3VjaCBzaG91bGQgYmUgZWxpbWluYXRlZCBieSB0aGUgY29tcGlsZXIsIGdp dmVuIHRoYXQgdGhlDQo+IGJhcnJpZXJzIGFyZSBnb25lKS4NCj4gDQo+ID4gMykgTW9yZSBBUElz IGFuZCB0aGUgcmVzdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBjb21lIGluIHN1YnNlcXVl bnQNCj4gPiAgICAgdmVyc2lvbnMNCj4gPg0KPiA+ICAgbGliL3N0X3JpbmcvcnRlX3N0X3Jpbmcu aCB8IDU2Nw0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAg MSBmaWxlIGNoYW5nZWQsIDU2NyBpbnNlcnRpb25zKCspDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliL3N0X3JpbmcvcnRlX3N0X3JpbmcuaA0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9z dF9yaW5nL3J0ZV9zdF9yaW5nLmggYi9saWIvc3RfcmluZy9ydGVfc3RfcmluZy5oIG5ldw0KPiA+ IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMC4uOGNiODgzMjU5MQ0KPiA+IC0tLSAv ZGV2L251bGwNCj4gPiArKysgYi9saWIvc3RfcmluZy9ydGVfc3RfcmluZy5oDQo+ID4gQEAgLTAs MCArMSw1NjcgQEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVz ZQ0KPiA+ICsgKiBDb3B5cmlnaHQoYykgMjAyMyBBcm0gTGltaXRlZA0KPiA+ICsgKi8NCj4gPiAr DQo+ID4gKyNpZm5kZWYgX1JURV9TVF9SSU5HX0hfDQo+ID4gKyNkZWZpbmUgX1JURV9TVF9SSU5H X0hfDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQGZpbGUNCj4gPiArICogUlRFIFNpZ25sZSBU aHJlYWQgUmluZyAoU1QgUmluZykNCj4gPiArICoNCj4gPiArICogVGhlIFNUIFJpbmcgaXMgYSBm aXhlZC1zaXplIHF1ZXVlIGludGVuZGVkIHRvIGJlIGFjY2Vzc2VkDQo+ID4gKyAqIGJ5IG9uZSB0 aHJlYWQgYXQgYSB0aW1lLiBJdCBkb2VzIG5vdCBwcm92aWRlIGNvbmN1cnJlbnQgYWNjZXNzIHRv DQo+ID4gKyAqIG11bHRpcGxlIHRocmVhZHMuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRz IGFjY2Vzc2luZyB0aGUgU1QNCj4gPiArcmluZywNCj4gPiArICogdGhlbiB0aGUgdGhyZWFkcyBo YXZlIHRvIHVzZSBsb2NrcyB0byBwcm90ZWN0IHRoZSByaW5nIGZyb20NCj4gPiArICogZ2V0dGlu ZyBjb3JydXB0ZWQuDQo+IA0KPiBZb3UgYXJlIGJhc2ljYWxseSBzYXlpbmcgdGhlIHNhbWUgdGhp bmcgdGhyZWUgdGltZXMgaGVyZS4NCj4gDQo+ID4gKyAqDQo+ID4gKyAqIC0gRklGTyAoRmlyc3Qg SW4gRmlyc3QgT3V0KQ0KPiA+ICsgKiAtIE1heGltdW0gc2l6ZSBpcyBmaXhlZDsgdGhlIHBvaW50 ZXJzIGFyZSBzdG9yZWQgaW4gYSB0YWJsZS4NCj4gPiArICogLSBDb25zdW1lciBhbmQgcHJvZHVj ZXIgcGFydCBvZiBzYW1lIHRocmVhZC4NCj4gPiArICogLSBNdWx0aS10aHJlYWQgcHJvZHVjZXJz IGFuZCBjb25zdW1lcnMgbmVlZCBsb2NraW5nLg0KPiANCj4gLi4udHdvIG1vcmUgdGltZXMgaGVy ZS4gT25lIG1pZ2h0IGdldCB0aGUgaW1wcmVzc2lvbiB5b3UgcmVhbGx5IGRvbid0IHRydXN0DQo+ IHRoZSByZWFkZXIuDQo+IA0KPiA+ICsgKiAtIFNpbmdsZS9CdWxrL2J1cnN0IGRlcXVldWUgYXQg VGFpbCBvciBIZWFkDQo+ID4gKyAqIC0gU2luZ2xlL0J1bGsvYnVyc3QgZW5xdWV1ZSBhdCBIZWFk IG9yIFRhaWwNCj4gDQo+IERvZXMgdGhpcyBub3Qgc291bmQgbW9yZSBsaWtlIGEgZGVxdWUsIHRo YW4gYSBGSUZPL2NpcmN1bGFyIGJ1ZmZlcj8gQXJlIHRoZXJlDQo+IGFueSBleGFtcGxlcyB3aGVy ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgKHRoZSBkb3VibGUtZW5kZWRuZXNzKSBpcyBuZWVkZWQgaW4N Cj4gdGhlIERQREsgY29kZSBiYXNlPw0KSSBzZWUsIHlvdSBhcmUgY2FsbGluZyBpdCAnZGVxdWUn IGFzIHdlbGwuIEJhc2ljYWxseSwgdGhpcyBwYXRjaCBvcmlnaW5hdGVkIGR1ZSB0byBhIHJlcXVp cmVtZW50IGluIE1MWCBQTUQgWzFdDQoNClsxXSBodHRwczovL2dpdGh1Yi5jb20vRFBESy9kcGRr L2Jsb2IvbWFpbi9kcml2ZXJzL25ldC9tbHg1L21seDVfaHdzX2NudC5oI0wzODENCg0KPiANCj4g PiArICoNCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gPiArZXh0 ZXJuICJDIiB7DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHJ0ZV9zdF9yaW5n X2NvcmUuaD4NCj4gPiArI2luY2x1ZGUgPHJ0ZV9zdF9yaW5nX2VsZW0uaD4NCj4gDQo+IElzIHRo ZSBpbnRlbnRpb24gdG8gcHJvdmlkZSBhIHJpbmcgd2l0aCBjb21waWxlLXRpbWUgdmFyaWFibGUg ZWxlbWVudCBzaXplPyBJbg0KPiBvdGhlciB3b3Jkcywgd2hlcmUgdGhlIGVsZW1lbnRzIG9mIGEg cGFydGljdWxhciByaW5nIGluc3RhbmNlIGhhcyB0aGUgc2FtZQ0KPiBlbGVtZW50IHNpemUsIGJ1 dCBkaWZmZXJlbnQgcmluZ3MgbWF5IGhhdmUgZGlmZmVyZW50IGVsZW1lbnQgc2l6ZXMuDQo+IA0K PiBTZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIG1lLCBpbiB0aGF0IGNhc2UuIEFsdGhvdWdoIG9m dGVuIHlvdSB3aWxsIGhhdmUNCj4gcG9pbnRlcnMsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBzdG9y ZSBsYXJnZXIgdGhpbmdzIGxpa2Ugc21hbGwgc3RydWN0cywgYW5kDQo+IG1heWJlIHNtYWxsZXIg ZWxlbWVudHMgYXMgd2VsbC4NClllcywgdGhlIGlkZWEgaXMgdG8gbWFrZSB0aGUgZWxlbWVudCBz aXplIGZsZXhpYmxlIGFuZCBhbHNvIGNvbXBpbGUtdGltZSBjb25zdGFudC4NCg0KPiANCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgKiBDYWxjdWxhdGUgdGhlIG1lbW9yeSBzaXplIG5lZWRlZCBmb3Ig YSBTVCByaW5nDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVt YmVyIG9mIGJ5dGVzIG5lZWRlZCBmb3IgYSBTVCByaW5nLA0KPiA+ICtnaXZlbg0KPiA+ICsgKiB0 aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGl0LiBUaGlzIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhl IHNpemUgb2YNCj4gPiArICogdGhlIHN0cnVjdHVyZSBydGVfc3RfcmluZyBhbmQgdGhlIHNpemUg b2YgdGhlIG1lbW9yeSBuZWVkZWQgYnkgdGhlDQo+ID4gKyAqIGVsZW1lbnRzLiBUaGUgdmFsdWUg aXMgYWxpZ25lZCB0byBhIGNhY2hlIGxpbmUgc2l6ZS4NCj4gPiArICoNCj4gPiArICogQHBhcmFt IGNvdW50DQo+ID4gKyAqICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcmluZyAobXVz dCBiZSBhIHBvd2VyIG9mIDIpLg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgLSBUaGUgbWVt b3J5IHNpemUgbmVlZGVkIGZvciB0aGUgU1QgcmluZyBvbiBzdWNjZXNzLg0KPiA+ICsgKiAgIC0g LUVJTlZBTCBpZiBjb3VudCBpcyBub3QgYSBwb3dlciBvZiAyLg0KPiA+ICsgKi8NCj4gPiArc3Np emVfdCBydGVfc3RfcmluZ19nZXRfbWVtc2l6ZSh1bnNpZ25lZCBpbnQgY291bnQpOw0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIEluaXRpYWxpemUgYSBTVCByaW5nIHN0cnVjdHVyZS4NCj4gPiAr ICoNCj4gPiArICogSW5pdGlhbGl6ZSBhIFNUIHJpbmcgc3RydWN0dXJlIGluIG1lbW9yeSBwb2lu dGVkIGJ5ICJyIi4gVGhlIHNpemUNCj4gPiArb2YgdGhlDQo+ID4gKyAqIG1lbW9yeSBhcmVhIG11 c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIHRoZSByaW5nIHN0cnVjdHVyZSBhbmQNCj4gPiAr dGhlDQo+ID4gKyAqIG9iamVjdCB0YWJsZS4gSXQgaXMgYWR2aXNlZCB0byB1c2UgcnRlX3N0X3Jp bmdfZ2V0X21lbXNpemUoKSB0bw0KPiA+ICtnZXQgdGhlDQo+ID4gKyAqIGFwcHJvcHJpYXRlIHNp emUuDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBTVCByaW5nIHNpemUgaXMgc2V0IHRvICpjb3VudCos IHdoaWNoIG11c3QgYmUgYSBwb3dlciBvZiB0d28uDQo+ID4gKyAqIFRoZSByZWFsIHVzYWJsZSBy aW5nIHNpemUgaXMgKmNvdW50LTEqIGluc3RlYWQgb2YgKmNvdW50KiB0bw0KPiA+ICsgKiBkaWZm ZXJlbnRpYXRlIGEgZnVsbCByaW5nIGZyb20gYW4gZW1wdHkgcmluZy4NCj4gPiArICoNCj4gPiAr ICogVGhlIHJpbmcgaXMgbm90IGFkZGVkIGluIFJURV9UQUlMUV9TVF9SSU5HIGdsb2JhbCBsaXN0 LiBJbmRlZWQsDQo+ID4gK3RoZQ0KPiA+ICsgKiBtZW1vcnkgZ2l2ZW4gYnkgdGhlIGNhbGxlciBt YXkgbm90IGJlIHNoYXJlYWJsZSBhbW9uZyBkcGRrDQo+ID4gKyAqIHByb2Nlc3Nlcy4NCj4gPiAr ICoNCj4gPiArICogQHBhcmFtIHINCj4gPiArICogICBUaGUgcG9pbnRlciB0byB0aGUgcmluZyBz dHJ1Y3R1cmUgZm9sbG93ZWQgYnkgdGhlIGVsZW1lbnRzIHRhYmxlLg0KPiA+ICsgKiBAcGFyYW0g bmFtZQ0KPiA+ICsgKiAgIFRoZSBuYW1lIG9mIHRoZSByaW5nLg0KPiA+ICsgKiBAcGFyYW0gY291 bnQNCj4gPiArICogICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSByaW5nIChtdXN0IGJl IGEgcG93ZXIgb2YgMiwNCj4gPiArICogICB1bmxlc3MgUlRFX1NUX1JJTkdfRl9FWEFDVF9TWiBp cyBzZXQgaW4gZmxhZ3MpLg0KPiA+ICsgKiBAcGFyYW0gZmxhZ3MNCj4gPiArICogICBBbiBPUiBv ZiB0aGUgZm9sbG93aW5nOg0KPiA+ICsgKiAgIC0gUlRFX1NUX1JJTkdfRl9FWEFDVF9TWjogSWYg dGhpcyBmbGFnIGlzIHNldCwgdGhlIHJpbmcgd2lsbCBob2xkDQo+ID4gKyAqICAgICBleGFjdGx5 IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGVudHJpZXMsIGFuZCB0aGUgcmVxdWVzdGVkIHNpemUN Cj4gPiArICogICAgIHdpbGwgYmUgcm91bmRlZCB1cCB0byB0aGUgbmV4dCBwb3dlciBvZiB0d28s IGJ1dCB0aGUgdXNhYmxlIHNwYWNlDQo+ID4gKyAqICAgICB3aWxsIGJlIGV4YWN0bHkgdGhhdCBy ZXF1ZXN0ZWQuIFdvcnN0IGNhc2UsIGlmIGEgcG93ZXItb2YtMiBzaXplIGlzDQo+ID4gKyAqICAg ICByZXF1ZXN0ZWQsIGhhbGYgdGhlIHJpbmcgc3BhY2Ugd2lsbCBiZSB3YXN0ZWQuDQo+ID4gKyAq ICAgICBXaXRob3V0IHRoaXMgZmxhZyBzZXQsIHRoZSByaW5nIHNpemUgcmVxdWVzdGVkIG11c3Qg YmUgYSBwb3dlciBvZiAyLA0KPiA+ICsgKiAgICAgYW5kIHRoZSB1c2FibGUgc3BhY2Ugd2lsbCBi ZSB0aGF0IHNpemUgLSAxLg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgMCBvbiBzdWNjZXNz LCBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLg0KPiA+ICsgKi8NCj4gPiAraW50IHJ0ZV9z dF9yaW5nX2luaXQoc3RydWN0IHJ0ZV9zdF9yaW5nICpyLCBjb25zdCBjaGFyICpuYW1lLA0KPiA+ ICsJdW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOw0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAqIENyZWF0ZSBhIG5ldyBTVCByaW5nIG5hbWVkICpuYW1lKiBpbiBtZW1vcnku DQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyBgYG1lbXpvbmVfcmVzZXJ2ZSgp YGAgdG8gYWxsb2NhdGUgbWVtb3J5LiBUaGVuDQo+ID4gK2l0DQo+ID4gKyAqIGNhbGxzIHJ0ZV9z dF9yaW5nX2luaXQoKSB0byBpbml0aWFsaXplIGFuIGVtcHR5IHJpbmcuDQo+ID4gKyAqDQo+ID4g KyAqIFRoZSBuZXcgcmluZyBzaXplIGlzIHNldCB0byAqY291bnQqLCB3aGljaCBtdXN0IGJlIGEg cG93ZXIgb2YgdHdvLg0KPiA+ICsgKiBUaGUgcmVhbCB1c2FibGUgcmluZyBzaXplIGlzICpjb3Vu dC0xKiBpbnN0ZWFkIG9mICpjb3VudCogdG8NCj4gPiArICogZGlmZmVyZW50aWF0ZSBhIGZ1bGwg cmluZyBmcm9tIGFuIGVtcHR5IHJpbmcuDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSByaW5nIGlzIGFk ZGVkIGluIFJURV9UQUlMUV9TVF9SSU5HIGxpc3QuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBu YW1lDQo+ID4gKyAqICAgVGhlIG5hbWUgb2YgdGhlIHJpbmcuDQo+ID4gKyAqIEBwYXJhbSBjb3Vu dA0KPiA+ICsgKiAgIFRoZSBzaXplIG9mIHRoZSByaW5nIChtdXN0IGJlIGEgcG93ZXIgb2YgMiwN Cj4gPiArICogICB1bmxlc3MgUlRFX1NUX1JJTkdfRl9FWEFDVF9TWiBpcyBzZXQgaW4gZmxhZ3Mp Lg0KPiA+ICsgKiBAcGFyYW0gc29ja2V0X2lkDQo+ID4gKyAqICAgVGhlICpzb2NrZXRfaWQqIGFy Z3VtZW50IGlzIHRoZSBzb2NrZXQgaWRlbnRpZmllciBpbiBjYXNlIG9mDQo+ID4gKyAqICAgTlVN QS4gVGhlIHZhbHVlIGNhbiBiZSAqU09DS0VUX0lEX0FOWSogaWYgdGhlcmUgaXMgbm8gTlVNQQ0K PiA+ICsgKiAgIGNvbnN0cmFpbnQgZm9yIHRoZSByZXNlcnZlZCB6b25lLg0KPiA+ICsgKiBAcGFy YW0gZmxhZ3MNCj4gPiArICogICAtIFJURV9TVF9SSU5HX0ZfRVhBQ1RfU1o6IElmIHRoaXMgZmxh ZyBpcyBzZXQsIHRoZSByaW5nIHdpbGwgaG9sZCBleGFjdGx5DQo+IHRoZQ0KPiA+ICsgKiAgICAg cmVxdWVzdGVkIG51bWJlciBvZiBlbnRyaWVzLCBhbmQgdGhlIHJlcXVlc3RlZCBzaXplIHdpbGwg YmUgcm91bmRlZA0KPiB1cA0KPiA+ICsgKiAgICAgdG8gdGhlIG5leHQgcG93ZXIgb2YgdHdvLCBi dXQgdGhlIHVzYWJsZSBzcGFjZSB3aWxsIGJlIGV4YWN0bHkgdGhhdA0KPiA+ICsgKiAgICAgcmVx dWVzdGVkLiBXb3JzdCBjYXNlLCBpZiBhIHBvd2VyLW9mLTIgc2l6ZSBpcyByZXF1ZXN0ZWQsIGhh bGYgdGhlDQo+ID4gKyAqICAgICByaW5nIHNwYWNlIHdpbGwgYmUgd2FzdGVkLg0KPiA+ICsgKiAg ICAgV2l0aG91dCB0aGlzIGZsYWcgc2V0LCB0aGUgcmluZyBzaXplIHJlcXVlc3RlZCBtdXN0IGJl IGEgcG93ZXIgb2YgMiwNCj4gPiArICogICAgIGFuZCB0aGUgdXNhYmxlIHNwYWNlIHdpbGwgYmUg dGhhdCBzaXplIC0gMS4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIE9uIHN1Y2Nlc3MsIHRo ZSBwb2ludGVyIHRvIHRoZSBuZXcgYWxsb2NhdGVkIHJpbmcuIE5VTEwgb24gZXJyb3Igd2l0aA0K PiA+ICsgKiAgICBydGVfZXJybm8gc2V0IGFwcHJvcHJpYXRlbHkuIFBvc3NpYmxlIGVycm5vIHZh bHVlcyBpbmNsdWRlOg0KPiA+ICsgKiAgICAtIEVfUlRFX05PX0NPTkZJRyAtIGZ1bmN0aW9uIGNv dWxkIG5vdCBnZXQgcG9pbnRlciB0byBydGVfY29uZmlnDQo+IHN0cnVjdHVyZQ0KPiA+ICsgKiAg ICAtIEVJTlZBTCAtIGNvdW50IHByb3ZpZGVkIGlzIG5vdCBhIHBvd2VyIG9mIDINCj4gPiArICog ICAgLSBFTk9TUEMgLSB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWVtem9uZXMgaGFzIGFscmVhZHkg YmVlbg0KPiBhbGxvY2F0ZWQNCj4gPiArICogICAgLSBFRVhJU1QgLSBhIG1lbXpvbmUgd2l0aCB0 aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzDQo+ID4gKyAqICAgIC0gRU5PTUVNIC0gbm8gYXBw cm9wcmlhdGUgbWVtb3J5IGFyZWEgZm91bmQgaW4gd2hpY2ggdG8gY3JlYXRlDQo+IG1lbXpvbmUN Cj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfc3RfcmluZyAqcnRlX3N0X3JpbmdfY3JlYXRlKGNv bnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludA0KPiBjb3VudCwNCj4gPiArCQkJCSBpbnQgc29j a2V0X2lkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIERl LWFsbG9jYXRlIGFsbCBtZW1vcnkgdXNlZCBieSB0aGUgcmluZy4NCj4gPiArICoNCj4gPiArICog QHBhcmFtIHINCj4gPiArICogICBSaW5nIHRvIGZyZWUuDQo+ID4gKyAqICAgSWYgTlVMTCB0aGVu LCB0aGUgZnVuY3Rpb24gZG9lcyBub3RoaW5nLg0KPiA+ICsgKi8NCj4gPiArdm9pZCBydGVfc3Rf cmluZ19mcmVlKHN0cnVjdCBydGVfc3RfcmluZyAqcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogRHVtcCB0aGUgc3RhdHVzIG9mIHRoZSByaW5nIHRvIGEgZmlsZS4NCj4gPiArICoNCj4gPiAr ICogQHBhcmFtIGYNCj4gPiArICogICBBIHBvaW50ZXIgdG8gYSBmaWxlIGZvciBvdXRwdXQNCj4g PiArICogQHBhcmFtIHINCj4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJl Lg0KPiA+ICsgKi8NCj4gPiArdm9pZCBydGVfc3RfcmluZ19kdW1wKEZJTEUgKmYsIGNvbnN0IHN0 cnVjdCBydGVfc3RfcmluZyAqcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogRW5xdWV1ZSBm aXhlZCBudW1iZXIgb2Ygb2JqZWN0cyBvbiBhIFNUIHJpbmcuDQo+ID4gKyAqDQo+ID4gKyAqIFRo aXMgZnVuY3Rpb24gY29waWVzIHRoZSBvYmplY3RzIGF0IHRoZSBoZWFkIG9mIHRoZSByaW5nIGFu ZA0KPiA+ICsgKiBtb3ZlcyB0aGUgaGVhZCBpbmRleC4NCj4gPiArICoNCj4gPiArICogQHBhcmFt IHINCj4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ICsgKiBA cGFyYW0gb2JqX3RhYmxlDQo+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9pZCAq IHBvaW50ZXJzIChvYmplY3RzKS4NCj4gPiArICogQHBhcmFtIG4NCj4gPiArICogICBUaGUgbnVt YmVyIG9mIG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhlIG9ial90YWJsZS4NCj4g PiArICogQHBhcmFtIGZyZWVfc3BhY2UNCj4gPiArICogICBpZiBub24tTlVMTCwgcmV0dXJucyB0 aGUgYW1vdW50IG9mIHNwYWNlIGluIHRoZSByaW5nIGFmdGVyIHRoZQ0KPiA+ICsgKiAgIGVucXVl dWUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZC4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIFRo ZSBudW1iZXIgb2Ygb2JqZWN0cyBlbnF1ZXVlZCwgZWl0aGVyIDAgb3Igbg0KPiA+ICsgKi8NCj4g PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gK3J0ZV9zdF9y aW5nX2VucXVldWVfYnVsayhzdHJ1Y3QgcnRlX3N0X3JpbmcgKnIsIHZvaWQgKiBjb25zdCAqb2Jq X3RhYmxlLA0KPiA+ICsJCSAgICAgIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgKmZyZWVf c3BhY2UpIHsNCj4gPiArCXJldHVybiBydGVfc3RfcmluZ19lbnF1ZXVlX2J1bGtfZWxlbShyLCBv YmpfdGFibGUsIHNpemVvZih2b2lkICopLA0KPiA+ICsJCQluLCBmcmVlX3NwYWNlKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEVucXVldWUgdXB0byBhIG1heGltdW0gbnVtYmVy IG9mIG9iamVjdHMgb24gYSBTVCByaW5nLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9u IGNvcGllcyB0aGUgb2JqZWN0cyBhdCB0aGUgaGVhZCBvZiB0aGUgcmluZyBhbmQNCj4gPiArICog bW92ZXMgdGhlIGhlYWQgaW5kZXguDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSByDQo+ID4gKyAq ICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICogQHBhcmFtIG9ial90 YWJsZQ0KPiA+ICsgKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIHZvaWQgKiBwb2ludGVycyAo b2JqZWN0cykuDQo+ID4gKyAqIEBwYXJhbSBuDQo+ID4gKyAqICAgVGhlIG51bWJlciBvZiBvYmpl Y3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9tIHRoZSBvYmpfdGFibGUuDQo+ID4gKyAqIEBwYXJh bSBmcmVlX3NwYWNlDQo+ID4gKyAqICAgaWYgbm9uLU5VTEwsIHJldHVybnMgdGhlIGFtb3VudCBv ZiBzcGFjZSBpbiB0aGUgcmluZyBhZnRlciB0aGUNCj4gPiArICogICBlbnF1ZXVlIG9wZXJhdGlv biBoYXMgZmluaXNoZWQuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtIG46IEFjdHVhbCBu dW1iZXIgb2Ygb2JqZWN0cyBlbnF1ZXVlZC4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBfX3J0ZV9h bHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ICtydGVfc3RfcmluZ19lbnF1ZXVlX2J1cnN0 KHN0cnVjdCBydGVfc3RfcmluZyAqciwgdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+ID4gKwkJ ICAgICAgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCAqZnJlZV9zcGFjZSkgew0KPiA+ICsJ cmV0dXJuIHJ0ZV9zdF9yaW5nX2VucXVldWVfYnVyc3RfZWxlbShyLCBvYmpfdGFibGUsIHNpemVv Zih2b2lkICopLA0KPiA+ICsJCQluLCBmcmVlX3NwYWNlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAqIEVucXVldWUgb25lIG9iamVjdCBvbiBhIFNUIHJpbmcuDQo+ID4gKyAqDQo+ ID4gKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIG9uZSBvYmplY3QgYXQgdGhlIGhlYWQgb2YgdGhl IHJpbmcgYW5kDQo+ID4gKyAqIG1vdmVzIHRoZSBoZWFkIGluZGV4Lg0KPiA+ICsgKg0KPiA+ICsg KiBAcGFyYW0gcg0KPiA+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ ID4gKyAqIEBwYXJhbSBvYmoNCj4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIG9iamVjdCB0byBi ZSBhZGRlZC4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIC0gMDogU3VjY2Vzczsgb2JqZWN0 cyBlbnF1ZXVlZC4NCj4gPiArICogICAtIC1FTk9CVUZTOiBOb3QgZW5vdWdoIHJvb20gaW4gdGhl IHJpbmcgdG8gZW5xdWV1ZTsgbm8gb2JqZWN0IGlzDQo+IGVucXVldWVkLg0KPiA+ICsgKi8NCj4g PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50DQo+ID4gK3J0ZV9zdF9yaW5nX2VucXVl dWUoc3RydWN0IHJ0ZV9zdF9yaW5nICpyLCB2b2lkICpvYmopIHsNCj4gPiArCXJldHVybiBydGVf c3RfcmluZ19lbnF1ZXVlX2VsZW0ociwgJm9iaiwgc2l6ZW9mKHZvaWQgKikpOyB9DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICogRW5xdWV1ZSBmaXhlZCBudW1iZXIgb2Ygb2JqZWN0cyBvbiBhIFNU IHJpbmcgYXQgdGhlIHRhaWwuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gY29waWVz IHRoZSBvYmplY3RzIGF0IHRoZSB0YWlsIG9mIHRoZSByaW5nIGFuZA0KPiA+ICsgKiBtb3ZlcyB0 aGUgdGFpbCBpbmRleCAoYmFja3dhcmRzKS4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHINCj4g PiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ICsgKiBAcGFyYW0g b2JqX3RhYmxlDQo+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50 ZXJzIChvYmplY3RzKS4NCj4gPiArICogQHBhcmFtIG4NCj4gPiArICogICBUaGUgbnVtYmVyIG9m IG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhlIG9ial90YWJsZS4NCj4gPiArICog QHBhcmFtIGZyZWVfc3BhY2UNCj4gPiArICogICBpZiBub24tTlVMTCwgcmV0dXJucyB0aGUgYW1v dW50IG9mIHNwYWNlIGluIHRoZSByaW5nIGFmdGVyIHRoZQ0KPiA+ICsgKiAgIGVucXVldWUgb3Bl cmF0aW9uIGhhcyBmaW5pc2hlZC4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIFRoZSBudW1i ZXIgb2Ygb2JqZWN0cyBlbnF1ZXVlZCwgZWl0aGVyIDAgb3Igbg0KPiA+ICsgKi8NCj4gPiArc3Rh dGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gK3J0ZV9zdF9yaW5nX2Vu cXVldWVfYXRfdGFpbF9idWxrKHN0cnVjdCBydGVfc3RfcmluZyAqciwNCj4gPiArCQkJCSB2b2lk ICogY29uc3QgKm9ial90YWJsZSwgdW5zaWduZWQgaW50IG4sDQo+ID4gKwkJCQkgdW5zaWduZWQg aW50ICpmcmVlX3NwYWNlKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gcnRlX3N0X3JpbmdfZW5xdWV1 ZV9hdF90YWlsX2J1bGtfZWxlbShyLCBvYmpfdGFibGUsDQo+ID4gKwkJCXNpemVvZih2b2lkICop LCBuLCBmcmVlX3NwYWNlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEVucXVl dWUgdXB0byBhIG1heGltdW0gbnVtYmVyIG9mIG9iamVjdHMgb24gYSBTVCByaW5nIGF0IHRoZSB0 YWlsLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgb2JqZWN0cyBh dCB0aGUgdGFpbCBvZiB0aGUgcmluZyBhbmQNCj4gPiArICogbW92ZXMgdGhlIHRhaWwgaW5kZXgg KGJhY2t3YXJkcykuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSByDQo+ID4gKyAqICAgQSBwb2lu dGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ ICsgKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIHZvaWQgKiBwb2ludGVycyAob2JqZWN0cyku DQo+ID4gKyAqIEBwYXJhbSBuDQo+ID4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGFk ZCBpbiB0aGUgcmluZyBmcm9tIHRoZSBvYmpfdGFibGUuDQo+ID4gKyAqIEBwYXJhbSBmcmVlX3Nw YWNlDQo+ID4gKyAqICAgaWYgbm9uLU5VTEwsIHJldHVybnMgdGhlIGFtb3VudCBvZiBzcGFjZSBp biB0aGUgcmluZyBhZnRlciB0aGUNCj4gPiArICogICBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmlu aXNoZWQuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtIG46IEFjdHVhbCBudW1iZXIgb2Yg b2JqZWN0cyBlbnF1ZXVlZC4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5s aW5lIHVuc2lnbmVkIGludA0KPiA+ICtydGVfc3RfcmluZ19lbnF1ZXVlX2F0X3RhaWxfYnVyc3Qo c3RydWN0IHJ0ZV9zdF9yaW5nICpyLA0KPiA+ICsJCQkJICB2b2lkICogY29uc3QgKm9ial90YWJs ZSwgdW5zaWduZWQgaW50IG4sDQo+ID4gKwkJCQkgIHVuc2lnbmVkIGludCAqZnJlZV9zcGFjZSkN Cj4gPiArew0KPiA+ICsJcmV0dXJuIHJ0ZV9zdF9yaW5nX2VucXVldWVfYXRfdGFpbF9idXJzdF9l bGVtKHIsIG9ial90YWJsZSwNCj4gPiArCQkJc2l6ZW9mKHZvaWQgKiksIG4sIGZyZWVfc3BhY2Up Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogRW5xdWV1ZSBvbmUgb2JqZWN0IG9u IGEgU1QgcmluZyBhdCB0YWlsLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNvcGll cyBvbmUgb2JqZWN0IGF0IHRoZSB0YWlsIG9mIHRoZSByaW5nIGFuZA0KPiA+ICsgKiBtb3ZlcyB0 aGUgdGFpbCBpbmRleCAoYmFja3dhcmRzKS4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHINCj4g PiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ICsgKiBAcGFyYW0g b2JqDQo+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBvYmplY3QgdG8gYmUgYWRkZWQuDQo+ID4g KyAqIEByZXR1cm4NCj4gPiArICogICAtIDA6IFN1Y2Nlc3M7IG9iamVjdHMgZW5xdWV1ZWQuDQo+ ID4gKyAqICAgLSAtRU5PQlVGUzogTm90IGVub3VnaCByb29tIGluIHRoZSByaW5nIHRvIGVucXVl dWU7IG5vIG9iamVjdCBpcw0KPiBlbnF1ZXVlZC4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBfX3J0 ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ICtydGVfc3RfcmluZ19lbnF1ZXVlX2F0X3RhaWwoc3Ry dWN0IHJ0ZV9zdF9yaW5nICpyLCB2b2lkICpvYmopIHsNCj4gPiArCXJldHVybiBydGVfc3Rfcmlu Z19lbnF1ZXVlX2F0X3RhaWxfZWxlbShyLCAmb2JqLCBzaXplb2Yodm9pZCAqKSk7IH0NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgKiBEZXF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIG9iamVjdHMgZnJv bSBhIFNUIHJpbmcuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBv YmplY3RzIGZyb20gdGhlIHRhaWwgb2YgdGhlIHJpbmcgYW5kDQo+ID4gKyAqIG1vdmVzIHRoZSB0 YWlsIGluZGV4Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gcg0KPiA+ICsgKiAgIEEgcG9pbnRl ciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gPiAr ICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiB2b2lkICogcG9pbnRlcnMgKG9iamVjdHMpIHRo YXQgd2lsbCBiZSBmaWxsZWQuDQo+ID4gKyAqIEBwYXJhbSBuDQo+ID4gKyAqICAgVGhlIG51bWJl ciBvZiBvYmplY3RzIHRvIGRlcXVldWUgZnJvbSB0aGUgcmluZyB0byB0aGUgb2JqX3RhYmxlLg0K PiA+ICsgKiBAcGFyYW0gYXZhaWxhYmxlDQo+ID4gKyAqICAgSWYgbm9uLU5VTEwsIHJldHVybnMg dGhlIG51bWJlciBvZiByZW1haW5pbmcgcmluZyBlbnRyaWVzIGFmdGVyIHRoZQ0KPiA+ICsgKiAg IGRlcXVldWUgaGFzIGZpbmlzaGVkLg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgVGhlIG51 bWJlciBvZiBvYmplY3RzIGRlcXVldWVkLCBlaXRoZXIgMCBvciBuDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiArcnRlX3N0X3Jpbmdf ZGVxdWV1ZV9idWxrKHN0cnVjdCBydGVfc3RfcmluZyAqciwgdm9pZCAqKm9ial90YWJsZSwNCj4g dW5zaWduZWQgaW50IG4sDQo+ID4gKwkJdW5zaWduZWQgaW50ICphdmFpbGFibGUpDQo+ID4gK3sN Cj4gPiArCXJldHVybiBydGVfc3RfcmluZ19kZXF1ZXVlX2J1bGtfZWxlbShyLCBvYmpfdGFibGUs IHNpemVvZih2b2lkICopLA0KPiA+ICsJCQluLCBhdmFpbGFibGUpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICogRGVxdWV1ZSB1cHRvIGEgbWF4aW11bSBudW1iZXIgb2Ygb2JqZWN0 cyBmcm9tIGEgU1QgcmluZy4NCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBjb3BpZXMg dGhlIG9iamVjdHMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgcmluZyBhbmQNCj4gPiArICogbW92ZXMg dGhlIHRhaWwgaW5kZXguDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSByDQo+ID4gKyAqICAgQSBw b2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICogQHBhcmFtIG9ial90YWJsZQ0K PiA+ICsgKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIHZvaWQgKiBwb2ludGVycyAob2JqZWN0 cykgdGhhdCB3aWxsIGJlIGZpbGxlZC4NCj4gPiArICogQHBhcmFtIG4NCj4gPiArICogICBUaGUg bnVtYmVyIG9mIG9iamVjdHMgdG8gZGVxdWV1ZSBmcm9tIHRoZSByaW5nIHRvIHRoZSBvYmpfdGFi bGUuDQo+ID4gKyAqIEBwYXJhbSBhdmFpbGFibGUNCj4gPiArICogICBJZiBub24tTlVMTCwgcmV0 dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyByaW5nIGVudHJpZXMgYWZ0ZXIgdGhlDQo+ID4g KyAqICAgZGVxdWV1ZSBoYXMgZmluaXNoZWQuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAt IE51bWJlciBvZiBvYmplY3RzIGRlcXVldWVkDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgX19ydGVf YWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiArcnRlX3N0X3JpbmdfZGVxdWV1ZV9idXJz dChzdHJ1Y3QgcnRlX3N0X3JpbmcgKnIsIHZvaWQgKipvYmpfdGFibGUsDQo+ID4gKwkJdW5zaWdu ZWQgaW50IG4sIHVuc2lnbmVkIGludCAqYXZhaWxhYmxlKSB7DQo+ID4gKwlyZXR1cm4gcnRlX3N0 X3JpbmdfZGVxdWV1ZV9idXJzdF9lbGVtKHIsIG9ial90YWJsZSwgc2l6ZW9mKHZvaWQgKiksDQo+ ID4gKwkJCW4sIGF2YWlsYWJsZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBE ZXF1ZXVlIG9uZSBvYmplY3QgZnJvbSBhIFNUIHJpbmcuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMg ZnVuY3Rpb24gY29waWVzIG9uZSBvYmplY3QgZnJvbSB0aGUgdGFpbCBvZiB0aGUgcmluZyBhbmQN Cj4gPiArICogbW92ZXMgdGhlIHRhaWwgaW5kZXguDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBy DQo+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICogQHBh cmFtIG9ial9wDQo+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdm9pZCAqIHBvaW50ZXIgKG9iamVj dCkgdGhhdCB3aWxsIGJlIGZpbGxlZC4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIC0gMDog U3VjY2Vzcywgb2JqZWN0cyBkZXF1ZXVlZC4NCj4gPiArICogICAtIC1FTk9FTlQ6IE5vdCBlbm91 Z2ggZW50cmllcyBpbiB0aGUgcmluZyB0byBkZXF1ZXVlLCBubyBvYmplY3QgaXMNCj4gPiArICog ICAgIGRlcXVldWVkLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUg aW50DQo+ID4gK3J0ZV9zdF9yaW5nX2RlcXVldWUoc3RydWN0IHJ0ZV9zdF9yaW5nICpyLCB2b2lk ICoqb2JqX3ApIHsNCj4gPiArCXJldHVybiBydGVfc3RfcmluZ19kZXF1ZXVlX2VsZW0ociwgb2Jq X3AsIHNpemVvZih2b2lkICopKTsgfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIERlcXVldWUg YSBmaXhlZCBudW1iZXIgb2Ygb2JqZWN0cyBmcm9tIGEgU1QgcmluZyBmcm9tIHRoZSBoZWFkLg0K PiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgb2JqZWN0cyBmcm9tIHRo ZSBoZWFkIG9mIHRoZSByaW5nIGFuZA0KPiA+ICsgKiBtb3ZlcyB0aGUgaGVhZCBpbmRleCAoYmFj a3dhcmRzKS4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHINCj4gPiArICogICBBIHBvaW50ZXIg dG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gKyAq ICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKSB0aGF0 IHdpbGwgYmUgZmlsbGVkLg0KPiA+ICsgKiBAcGFyYW0gbg0KPiA+ICsgKiAgIFRoZSBudW1iZXIg b2Ygb2JqZWN0cyB0byBkZXF1ZXVlIGZyb20gdGhlIHJpbmcgdG8gdGhlIG9ial90YWJsZS4NCj4g PiArICogQHBhcmFtIGF2YWlsYWJsZQ0KPiA+ICsgKiAgIElmIG5vbi1OVUxMLCByZXR1cm5zIHRo ZSBudW1iZXIgb2YgcmVtYWluaW5nIHJpbmcgZW50cmllcyBhZnRlciB0aGUNCj4gPiArICogICBk ZXF1ZXVlIGhhcyBmaW5pc2hlZC4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIFRoZSBudW1i ZXIgb2Ygb2JqZWN0cyBkZXF1ZXVlZCwgZWl0aGVyIDAgb3Igbg0KPiA+ICsgKi8NCj4gPiArc3Rh dGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gK3J0ZV9zdF9yaW5nX2Rl cXVldWVfYXRfaGVhZF9idWxrKHN0cnVjdCBydGVfc3RfcmluZyAqciwgdm9pZA0KPiAqKm9ial90 YWJsZSwgdW5zaWduZWQgaW50IG4sDQo+ID4gKwkJdW5zaWduZWQgaW50ICphdmFpbGFibGUpDQo+ ID4gK3sNCj4gPiArCXJldHVybiBydGVfc3RfcmluZ19kZXF1ZXVlX2J1bGtfZWxlbShyLCBvYmpf dGFibGUsIHNpemVvZih2b2lkICopLA0KPiA+ICsJCQluLCBhdmFpbGFibGUpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogRGVxdWV1ZSB1cHRvIGEgbWF4aW11bSBudW1iZXIgb2Yg b2JqZWN0cyBmcm9tIGEgU1QgcmluZyBmcm9tIHRoZQ0KPiBoZWFkLg0KPiA+ICsgKg0KPiA+ICsg KiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgb2JqZWN0cyBmcm9tIHRoZSBoZWFkIG9mIHRoZSBy aW5nIGFuZA0KPiA+ICsgKiBtb3ZlcyB0aGUgaGVhZCBpbmRleCAoYmFja3dhcmRzKS4NCj4gPiAr ICoNCj4gPiArICogQHBhcmFtIHINCj4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3Ry dWN0dXJlLg0KPiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gKyAqICAgQSBwb2ludGVyIHRv IGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKSB0aGF0IHdpbGwgYmUgZmlsbGVk Lg0KPiA+ICsgKiBAcGFyYW0gbg0KPiA+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBk ZXF1ZXVlIGZyb20gdGhlIHJpbmcgdG8gdGhlIG9ial90YWJsZS4NCj4gPiArICogQHBhcmFtIGF2 YWlsYWJsZQ0KPiA+ICsgKiAgIElmIG5vbi1OVUxMLCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVt YWluaW5nIHJpbmcgZW50cmllcyBhZnRlciB0aGUNCj4gPiArICogICBkZXF1ZXVlIGhhcyBmaW5p c2hlZC4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIC0gTnVtYmVyIG9mIG9iamVjdHMgZGVx dWV1ZWQNCj4gPiArICovDQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVk IGludA0KPiA+ICtydGVfc3RfcmluZ19kZXF1ZXVlX2F0X2hlYWRfYnVyc3Qoc3RydWN0IHJ0ZV9z dF9yaW5nICpyLCB2b2lkDQo+ICoqb2JqX3RhYmxlLA0KPiA+ICsJCXVuc2lnbmVkIGludCBuLCB1 bnNpZ25lZCBpbnQgKmF2YWlsYWJsZSkgew0KPiA+ICsJcmV0dXJuIHJ0ZV9zdF9yaW5nX2RlcXVl dWVfYnVyc3RfZWxlbShyLCBvYmpfdGFibGUsIHNpemVvZih2b2lkICopLA0KPiA+ICsJCQluLCBh dmFpbGFibGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogRGVxdWV1ZSBvbmUg b2JqZWN0IGZyb20gYSBTVCByaW5nIGZyb20gdGhlIGhlYWQuDQo+ID4gKyAqDQo+ID4gKyAqIFRo aXMgZnVuY3Rpb24gY29waWVzIHRoZSBvYmplY3RzIGZyb20gdGhlIGhlYWQgb2YgdGhlIHJpbmcg YW5kDQo+ID4gKyAqIG1vdmVzIHRoZSBoZWFkIGluZGV4IChiYWNrd2FyZHMpLg0KPiA+ICsgKg0K PiA+ICsgKiBAcGFyYW0gcg0KPiA+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1 cmUuDQo+ID4gKyAqIEBwYXJhbSBvYmpfcA0KPiA+ICsgKiAgIEEgcG9pbnRlciB0byBhIHZvaWQg KiBwb2ludGVyIChvYmplY3QpIHRoYXQgd2lsbCBiZSBmaWxsZWQuDQo+ID4gKyAqIEByZXR1cm4N Cj4gPiArICogICAtIDA6IFN1Y2Nlc3MsIG9iamVjdHMgZGVxdWV1ZWQuDQo+ID4gKyAqICAgLSAt RU5PRU5UOiBOb3QgZW5vdWdoIGVudHJpZXMgaW4gdGhlIHJpbmcgdG8gZGVxdWV1ZSwgbm8gb2Jq ZWN0IGlzDQo+ID4gKyAqICAgICBkZXF1ZXVlZC4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBfX3J0 ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ICtydGVfc3RfcmluZ19hdF9oZWFkX2RlcXVldWUoc3Ry dWN0IHJ0ZV9zdF9yaW5nICpyLCB2b2lkICoqb2JqX3ApIHsNCj4gPiArCXJldHVybiBydGVfc3Rf cmluZ19kZXF1ZXVlX2VsZW0ociwgb2JqX3AsIHNpemVvZih2b2lkICopKTsgfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIEZsdXNoIGEgU1QgcmluZy4NCj4gPiArICoNCj4gPiArICogVGhpcyBm dW5jdGlvbiBmbHVzaCBhbGwgdGhlIGVsZW1lbnRzIGluIGEgU1QgcmluZw0KPiA+ICsgKg0KPiA+ ICsgKiBAd2FybmluZw0KPiA+ICsgKiBNYWtlIHN1cmUgdGhlIHJpbmcgaXMgbm90IGluIHVzZSB3 aGlsZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSByDQo+ ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICovDQo+ID4g K3ZvaWQNCj4gPiArcnRlX3N0X3JpbmdfcmVzZXQoc3RydWN0IHJ0ZV9zdF9yaW5nICpyKTsNCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGEg U1QgcmluZy4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHINCj4gPiArICogICBBIHBvaW50ZXIg dG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgVGhlIG51 bWJlciBvZiBlbnRyaWVzIGluIHRoZSByaW5nLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlubGlu ZSB1bnNpZ25lZCBpbnQNCj4gPiArcnRlX3N0X3JpbmdfY291bnQoY29uc3Qgc3RydWN0IHJ0ZV9z dF9yaW5nICpyKSB7DQo+ID4gKwl1aW50MzJfdCBjb3VudCA9IChyLT5oZWFkIC0gci0+dGFpbCkg JiByLT5tYXNrOw0KPiA+ICsJcmV0dXJuIGNvdW50Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJlZSBlbnRyaWVzIGluIGEgU1QgcmluZy4N Cj4gPiArICoNCj4gPiArICogQHBhcmFtIHINCj4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJp bmcgc3RydWN0dXJlLg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgVGhlIG51bWJlciBvZiBm cmVlIGVudHJpZXMgaW4gdGhlIHJpbmcuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIHVu c2lnbmVkIGludA0KPiA+ICtydGVfc3RfcmluZ19mcmVlX2NvdW50KGNvbnN0IHN0cnVjdCBydGVf c3RfcmluZyAqcikgew0KPiA+ICsJcmV0dXJuIHItPmNhcGFjaXR5IC0gcnRlX3N0X3JpbmdfY291 bnQocik7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBUZXN0IGlmIGEgU1QgcmluZyBpcyBm dWxsLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gcg0KPiA+ICsgKiAgIEEgcG9pbnRlciB0byB0 aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtIDE6IFRoZSBy aW5nIGlzIGZ1bGwuDQo+ID4gKyAqICAgLSAwOiBUaGUgcmluZyBpcyBub3QgZnVsbC4NCj4gPiAr ICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ID4gK3J0ZV9zdF9yaW5nX2Z1bGwoY29uc3Qg c3RydWN0IHJ0ZV9zdF9yaW5nICpyKSB7DQo+ID4gKwlyZXR1cm4gcnRlX3N0X3JpbmdfZnJlZV9j b3VudChyKSA9PSAwOyB9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogVGVzdCBpZiBhIFNUIHJp bmcgaXMgZW1wdHkuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSByDQo+ID4gKyAqICAgQSBwb2lu dGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIC0g MTogVGhlIHJpbmcgaXMgZW1wdHkuDQo+ID4gKyAqICAgLSAwOiBUaGUgcmluZyBpcyBub3QgZW1w dHkuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICtydGVfc3RfcmluZ19l bXB0eShjb25zdCBzdHJ1Y3QgcnRlX3N0X3JpbmcgKnIpIHsNCj4gPiArCXJldHVybiByLT50YWls ID09IHItPmhlYWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBSZXR1cm4gdGhl IHNpemUgb2YgdGhlIHJpbmcuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSByDQo+ID4gKyAqICAg QSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICogQHJldHVybg0KPiA+ICsg KiAgIFRoZSBzaXplIG9mIHRoZSBkYXRhIHN0b3JlIHVzZWQgYnkgdGhlIHJpbmcuDQo+ID4gKyAq ICAgTk9URTogdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHVzYWJsZSBzcGFjZSBpbiB0aGUg cmluZy4gVG8gcXVlcnkgdGhhdA0KPiA+ICsgKiAgIHVzZSBgYHJ0ZV9zdF9yaW5nX2dldF9jYXBh Y2l0eSgpYGAuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ ICtydGVfc3RfcmluZ19nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgcnRlX3N0X3JpbmcgKnIpIHsNCj4g PiArCXJldHVybiByLT5zaXplOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogUmV0 dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgd2hpY2ggY2FuIGJlIHN0b3JlZCBpbiB0aGUgcmlu Zy4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHINCj4gPiArICogICBBIHBvaW50ZXIgdG8gdGhl IHJpbmcgc3RydWN0dXJlLg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgVGhlIHVzYWJsZSBz aXplIG9mIHRoZSByaW5nLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBp bnQNCj4gPiArcnRlX3N0X3JpbmdfZ2V0X2NhcGFjaXR5KGNvbnN0IHN0cnVjdCBydGVfc3Rfcmlu ZyAqcikgew0KPiA+ICsJcmV0dXJuIHItPmNhcGFjaXR5Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICogRHVtcCB0aGUgc3RhdHVzIG9mIGFsbCByaW5ncyBvbiB0aGUgY29uc29sZQ0K PiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gZg0KPiA+ICsgKiAgIEEgcG9pbnRlciB0byBhIGZpbGUg Zm9yIG91dHB1dA0KPiA+ICsgKi8NCj4gPiArdm9pZCBydGVfc3RfcmluZ19saXN0X2R1bXAoRklM RSAqZik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogU2VhcmNoIGEgU1QgcmluZyBmcm9tIGl0 cyBuYW1lDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBuYW1lDQo+ID4gKyAqICAgVGhlIG5hbWUg b2YgdGhlIHJpbmcuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICBUaGUgcG9pbnRlciB0byB0 aGUgcmluZyBtYXRjaGluZyB0aGUgbmFtZSwgb3IgTlVMTCBpZiBub3QgZm91bmQsDQo+ID4gKyAq ICAgd2l0aCBydGVfZXJybm8gc2V0IGFwcHJvcHJpYXRlbHkuIFBvc3NpYmxlIHJ0ZV9lcnJubyB2 YWx1ZXMgaW5jbHVkZToNCj4gPiArICogICAgLSBFTk9FTlQgLSByZXF1aXJlZCBlbnRyeSBub3Qg YXZhaWxhYmxlIHRvIHJldHVybi4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfc3RfcmluZyAq cnRlX3N0X3JpbmdfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOw0KPiA+ICsNCj4gPiArI2lmZGVm IF9fY3BsdXNwbHVzDQo+ID4gK30NCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjZW5kaWYgLyog X1JURV9TVF9SSU5HX0hfICovDQo=