From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4A162431B7 for ; Thu, 23 Jun 2022 18:56:14 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 19D4A68B6C7; Thu, 23 Jun 2022 21:56:12 +0300 (EEST) Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03olkn2027.outbound.protection.outlook.com [40.92.58.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C222968B58D for ; Thu, 23 Jun 2022 21:56:05 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PtIBwRmMNnkx69bkf06nzUSY0ERikjQohA4039E5xUs6OF7pFJaQgPQI/TsPW7ZCiwam3E8MbWAplz/I7iee32aLT4pAUDg6212o15nHDEBBnM1SG3kmY5s7lNarZd7pLriYX0UMGHbkWQLUqT3FSCLrqB/sOrrgaaFXxQdXG+O7I/nmQ6Zvf6W1dpGIfqJfCP906SC/3I1FNOx1hJIdemIDPbEFb0C5JIJVRz7Dr25C5Ac0nnc4v87Ck77R5kv904zdBTSuR0GlqCniLpneZp5RAK/rDgL29KeB93jKK8lmeqw7Qccvj4qiQeBFoZ2BqEYssAex3KrHo5gvdUEuGg== 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=2Cs7jkG4JKNvlthLEqtTGgLsH2olnvNDPmP+CcJvMrw=; b=kfYFauV8ZEaW99p+ehgDPFaY2bZw87HwywcWtL6SByTRUaQMNfq8Yd5aHRoc0PVgi8bvRI8W/RZyJuzOpiLCwUMnfW+xGfJee5GvNqGzwCp6XZ/AQlxNQ/maRKu34+QRMyHB76DNc/U/Vi29DjxCMVAKbg/70GyDTtrLXSjLpCu/7GWRXmLKFTf21HyCbiF8NuUDJ/y13yu5sHCTe36Mm28ldUv+nvNtz6NZxQWagNxZVzqtjo0pufhRhSDJZ8pIoKOQXONwbd6UGthDvabEGmM2984gSgZfNF4RNb2aJlciE6brbr2/x0brrdnc73yrj7gCc1CvtXrD9uL5Xte2kg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2Cs7jkG4JKNvlthLEqtTGgLsH2olnvNDPmP+CcJvMrw=; b=HwzTR0SlGYH8mQOV/rpSIhufdPj8A66TRHMEVePNaOl67LemQavjOQwB4XyVNi7DZ8TJiAoDC9o9uubvfIxACTGX09HYr6IvRuuS1j8eNsC7EMZDcbUlQQmFuX/OO3rzHoNnH1H0z6rPhxQx6O6vqi3kyFYNBuQ63w/VkR0BfynmwnogthDLHLQnUY2V2DYLpmQ6HDHQU8nbGI9l6oYBYIh0dS34+7hDuH79HUei3y4+rEIoMWWfSRmI93LId+0WNXgrwtjJr0+DNbvOcWu98sd8b5fSTH1688+6+oE8J9+5uzDAt5pUdOSXq+EGv8D3fKK6j9Mfj/4zx62UUCjleg== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by DB9PR01MB9053.eurprd01.prod.exchangelabs.com (2603:10a6:10:36b::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.22; Thu, 23 Jun 2022 18:56:02 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c%10]) with mapi id 15.20.5353.022; Thu, 23 Jun 2022 18:56:02 +0000 Message-ID: Date: Thu, 23 Jun 2022 20:56:00 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220623122636.24732-1-anton@khirnov.net> <20220623122636.24732-2-anton@khirnov.net> From: Andreas Rheinhardt In-Reply-To: <20220623122636.24732-2-anton@khirnov.net> X-TMN: [vi7GvIzDn3Kx67D+PfPIwmrpyhNLQgew] X-ClientProxiedBy: ZR0P278CA0173.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:45::8) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <18c64b39-ab8f-99e4-6802-64efb959dc04@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3d996a0d-888f-4239-daaa-08da554a04c2 X-MS-TrafficTypeDiagnostic: DB9PR01MB9053:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zMmEllCyNGX/LPIMid9LvPYIMyaKrjlhwrwnZ54toeM7Q0q6FSNS/Re/k6nckbYkBW6N4iWlB/agKiHpoLfwitV3DNmy6pjZiBM3bg+UQUZbimZ1RtNvIroR+m6khrmTfTUCYmPL24TZQKCe9hYq8Sne9qXDX1tRFha6KUcxL8UZcuyBGKSrW+QgRZw8qLuOymxaZJNQKG4d3QOpLwrmLG3fok98lKqGm66Iv5svA5f/PaLLlXA2K9pI2WMClfLlnwtBn5us2Fc/2W0g9HmyxIsjFakZ8FqJeW9RTH7+vyxTsNktiEsU294qNi5+OVbi2Ap/G7mJugRq3JJhVmJHrEnPvw1hVpFYBGebXp0EoqyjxvOnRAzkJMe+K3eVjvhVUrnQ92Xtqqo9UwQyurAWvZtxAK1trhqzpyAO6Fy6hOURWjBnFdwUX1s/iXQMloOpY3BVBrlo9NEfI419SMrj7qfoQX9Ald+YcAJTafGj9aev/B6jgBzgbjMgL7zbNFPIgNs45zjjUeL9tpxxLW0gL0aTry8ZoqI/uBjVwuPkL4i40LmVPMZJ1EZF2495QDrNNcoxqJgLUr2yewHLmAGWJLXdKP7FXJEzu9+I+U2oBVDiVaYo+RAJ8Z+r4g7febaKE9YGDf4xgVgHwpALaBDWAw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cTlHam5mNC9PRU1VR1lYaVZZcEFJbDNFaWdhZ2hHMG0rK2ZTVDlpNHdMQm1w?= =?utf-8?B?MkluaWhRSHErMkRuVy80QTNyc3d4SzkxdWhuNnM1ejZPa1lhcXd1Vi9Jd2dl?= =?utf-8?B?TGVFQmNwOWxXWW5saWZ2dDIzTFpkRGpQVnU1eUYxUm5zK1JnSUJrYlkxbStJ?= =?utf-8?B?WjI0SVV2bTJRTFJ5Y2diNGhEWGJEWG1HUWxwWUVrT3E4WkU4OTR2bmt6d1Jh?= =?utf-8?B?NGlQd2tTdnZ0SEdTWEZIMnNtd3pIdXZwZ1pZeWQ5NVFKWGs3RHlWWSs4clVh?= =?utf-8?B?bGppMGR2SGlJY2tUVUNYVkhNclRaRjhwUzlDbngzM1Z1M3VweHBKMmEyYWJ4?= =?utf-8?B?eWRaV0RJVDRZQ2hrSk5jQ2M4V0RPOXVucis2WkNydG91ZkVXWWdaeURZVUxn?= =?utf-8?B?T0JZWTl4YXVEMEQrRU9DVEMxdDdlMDU3dlNWbDBoN1FSRzhRZHFPcGNpNHVT?= =?utf-8?B?SmU0aTdqY1B4VFd1Nmd0WjN4MmhNMWVLS0hMdFRBUlM0VTNyOHNUcmRYQ1N2?= =?utf-8?B?bkt4WFQzN0JvT3ByaVA0c3dVMys1enR3ZDFxVTU2SVBCT2xiV1FCdXoxMlJa?= =?utf-8?B?bDY0dUdqa2JORVZpYUErOVgyVXRyZjlHYUp3NFgvV0R5ZklJM3A1OVdRZ0V3?= =?utf-8?B?dFhJSjczeHkzR3hBTmNLaXR5Q2JlejAwUHpGM2hZWDhjVndvaGxEcmhPUFhJ?= =?utf-8?B?b0RZcnc2SlRYcHhsK1RodHVvd3FyOVdpS0NRZEZZd1F1UkFFYUtUbmJCZ0cw?= =?utf-8?B?Uzc1VTlzTlBxS0o5WUp0ajVxS2xvV2RLaXArVXhSOHdORUJvRjNGTVhSR2pX?= =?utf-8?B?andRaTdyM3N6M2xIdCtaTjFIaXFDcVViLzR3V0pYMVo3cVVUaGVSU0o0eXI4?= =?utf-8?B?VTJ4ejAxdnNoZTlvdC92bklsMlRSZlNNUy9ZaW9CZHZJQXVDWGx5b1k0cEZL?= =?utf-8?B?c3hXMVg1M0hneDEySmJZUTF5NUV1U28vMkdGT3VKY0RKWWtYb1pTZXZXU1oy?= =?utf-8?B?aStLaEkxalQwMExQUlo5RzAzUHZESTBZTW9md2ljMVZOSHhwVm81U25qR1Ev?= =?utf-8?B?MmRxSjlXMjBQdW05SWlrTFpxMCtVL0FMbTVPMmVkT3JYMmloRkpxc25VK2Zu?= =?utf-8?B?cm1yTXFyQTIyVzhPVjFLMEE5L1JvRlBDSUIzMVcxcjdnNGplc2gxM1lwbDFG?= =?utf-8?B?L0dlWmlmM0piczluc09WMmc2c2s0ZXlRZTVCSit1NWJiSEZtNGhvcHpaNjg5?= =?utf-8?B?Y1htV21MaDB6MlNtc3NRVmUwTnJUeEZZRmxUVHpBRmFuQUxmN2RXSHVSNXlq?= =?utf-8?B?YWc5T3gxaHh2a3I0QXQ5SEtRR3B3TUZjRUgyQ3lBekJYR0pyMUtyTEZRUXE2?= =?utf-8?B?MnhoZllXU1A3amxNU0NVYTU5bnFiQVdKUldNYnZ4bHBMaDhHWGp0Q1hUZGJz?= =?utf-8?B?M2xScjFibEpWZVkwMUpybjR5R1JWQlVWZFRWQXJjUFQvWm41OThWUHdWRTcz?= =?utf-8?B?T2hESjRJM242UlJQTFhMc09TZWdONnN5TWc3YmFMdEJ1SFFLTWowTlpPeVpk?= =?utf-8?B?dDJ0UEVoMHlVOGIzUUltU1crZEVHZFJKdjdvaTZGaUphUVphR09jSjdBNk8z?= =?utf-8?B?QWxmdDZuUVBLTlZFMW50NFNCdHZpYlhrRmo2OE0rQVAxY2d1YVRnZEc5OFV2?= =?utf-8?B?SHhjcG8xU2xMZmhGZ01DRGxKSytRMWI1Rk5OLzlsUHovcVlZSm1NZFdQRkNa?= =?utf-8?Q?5vc/4uyuj4fSZGbJ44=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3d996a0d-888f-4239-daaa-08da554a04c2 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2022 18:56:02.5603 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR01MB9053 Subject: Re: [FFmpeg-devel] [PATCH 2/4] lavc: add standalone cached bitstream reader X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: QW50b24gS2hpcm5vdjoKPiBGcm9tOiBBbGV4YW5kcmEgSMOhamtvdsOhIDxhbGV4YW5kcmEua2hp cm5vdmFAZ21haWwuY29tPgo+IAo+IFRoZSBjYWNoZWQgYml0c3RyZWFtIHJlYWRlciB3YXMgb3Jp Z2luYWxseSB3cml0dGVuIGJ5IEFsZXhhbmRyYSBIw6Fqa292w6EKPiBmb3IgTGliYXYsIHdpdGgg c2lnbmlmaWNhbnQgaW5wdXQgZnJvbSBLb3N0eWEgU2hpc2hrb3YgYW5kIEx1Y2EgQmFyYmF0by4K PiBJdCB3YXMgdGhlbiBjb21taXR0ZWQgdG8gRkZtcGVnIGluIGNhMDc5YjA5NTQ5LCBieSBtZXJn aW5nIGl0IHdpdGggdGhlCj4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgYml0c3RyZWFt IHJlYWRlci4KPiAKPiBUaGlzIG1lcmdlIG1ha2VzIHRoZSBjb2RlIG9mIGdldF9iaXRzLmggc2ln bmlmaWNhbnRseSBoYXJkZXIgdG8gcmVhZCwKPiBzaW5jZSBpdCBub3cgY29udGFpbnMgdHdvIGRp ZmZlcmVudCBiaXRzdHJlYW0gcmVhZGVycyBpbnRlcmxlYXZlZCB3aXRoCj4gICNpZmRlZnMuIEFk ZGl0aW9uYWxseSwgdGhlIGNvZGUgd2FzIGNvbW1pdHRlZCB3aXRob3V0IHByb3BlciBhdXRob3Jz aGlwCj4gYXR0cmlidXRpb24uCj4gCj4gVGhpcyBjb21taXQgcmUtYWRkcyB0aGUgY2FjaGVkIGJp dHN0cmVhbSByZWFkZXIgYXMgYSBzdGFuZGFsb25lIGhlYWRlciwKPiBhcyBpdCB3YXMgb3JpZ2lu YWxseSBkZXZlbG9wZWQuIEl0IHdpbGwgYmUgbWFkZSB1c2VmdWwgaW4gZm9sbG93aW5nCj4gY29t bWl0cy4KPiAKPiBJbnRlZ3JhdGlvbiBieSBBbnRvbiBLaGlybm92Lgo+IAo+IFNpZ25lZC1vZmYt Ynk6IEFudG9uIEtoaXJub3YgPGFudG9uQGtoaXJub3YubmV0Pgo+IC0tLQo+ICBsaWJhdmNvZGVj L2JpdHN0cmVhbS5oIHwgNDkwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gIDEgZmlsZSBjaGFuZ2VkLCA0OTAgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZjb2RlYy9iaXRzdHJlYW0uaAo+IAo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVj L2JpdHN0cmVhbS5oIGIvbGliYXZjb2RlYy9iaXRzdHJlYW0uaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uOGE3MTBiY2VjYwo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9saWJhdmNvZGVjL2JpdHN0cmVhbS5oCj4gQEAgLTAsMCArMSw0OTAgQEAKPiArLyoKPiArICog Q29weXJpZ2h0IChjKSAyMDE2IEFsZXhhbmRyYSBIw6Fqa292w6EKPiArICoKPiArICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiAr ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4g Kwo+ICsvKioKPiArICogQGZpbGUKPiArICogYml0c3RyZWFtIHJlYWRlciBBUEkgaGVhZGVyLgo+ ICsgKi8KPiArCj4gKyNpZm5kZWYgQVZDT0RFQ19CSVRTVFJFQU1fSAo+ICsjZGVmaW5lIEFWQ09E RUNfQklUU1RSRUFNX0gKPiArCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiArCj4gKyNpbmNsdWRl ICJjb25maWcuaCIKPiArCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvY29tbW9uLmgiCj4gKyNpbmNs dWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbG9n LmgiCj4gKwo+ICsjaW5jbHVkZSAibWF0aG9wcy5oIgo+ICsjaW5jbHVkZSAidmxjLmgiCj4gKwo+ ICsjaWZuZGVmIFVOQ0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSCj4gKyNkZWZpbmUgVU5DSEVDS0VE X0JJVFNUUkVBTV9SRUFERVIgIUNPTkZJR19TQUZFX0JJVFNUUkVBTV9SRUFERVIKPiArI2VuZGlm Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBCaXRzdHJlYW1Db250ZXh0IHsKPiArICAgIHVpbnQ2NF90 IGJpdHM7ICAgICAgLy8gc3RvcmVzIGJpdHMgcmVhZCBmcm9tIHRoZSBidWZmZXIKPiArICAgIGNv bnN0IHVpbnQ4X3QgKmJ1ZmZlciwgKmJ1ZmZlcl9lbmQ7Cj4gKyAgICBjb25zdCB1aW50OF90ICpw dHI7IC8vIHBvaW50ZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lkZSBhIGJ1ZmZlcgo+ICsgICAgdW5z aWduZWQgYml0c19sZWZ0OyAvLyBudW1iZXIgb2YgYml0cyBsZWZ0IGluIGJpdHMgZmllbGQKPiAr ICAgIHVuc2lnbmVkIHNpemVfaW5fYml0czsKPiArfSBCaXRzdHJlYW1Db250ZXh0Owo+ICsKPiAr c3RhdGljIGlubGluZSB2b2lkIHJlZmlsbF82NChCaXRzdHJlYW1Db250ZXh0ICpiYykKPiArewo+ ICsjaWYgIVVOQ0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSCj4gKyAgICBpZiAoYmMtPnB0ciA+PSBi Yy0+YnVmZmVyX2VuZCkKPiArICAgICAgICByZXR1cm47Cj4gKyNlbmRpZgo+ICsKPiArI2lmZGVm IEJJVFNUUkVBTV9SRUFERVJfTEUKPiArICAgIGJjLT5iaXRzICAgICAgID0gQVZfUkw2NChiYy0+ cHRyKTsKPiArI2Vsc2UKPiArICAgIGJjLT5iaXRzICAgICAgID0gQVZfUkI2NChiYy0+cHRyKTsK PiArI2VuZGlmCj4gKyAgICBiYy0+cHRyICAgICAgICs9IDg7Cj4gKyAgICBiYy0+Yml0c19sZWZ0 ICA9IDY0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgcmVmaWxsXzMyKEJpdHN0cmVh bUNvbnRleHQgKmJjKQo+ICt7Cj4gKyNpZiAhVU5DSEVDS0VEX0JJVFNUUkVBTV9SRUFERVIKPiAr ICAgIGlmIChiYy0+cHRyID49IGJjLT5idWZmZXJfZW5kKQo+ICsgICAgICAgIHJldHVybjsKPiAr I2VuZGlmCj4gKwo+ICsjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQo+ICsgICAgYmMtPmJpdHMg ICAgICAgPSAodWludDY0X3QpQVZfUkwzMihiYy0+cHRyKSA8PCBiYy0+Yml0c19sZWZ0IHwgYmMt PmJpdHM7Cj4gKyNlbHNlCj4gKyAgICBiYy0+Yml0cyAgICAgICA9IGJjLT5iaXRzIHwgKHVpbnQ2 NF90KUFWX1JCMzIoYmMtPnB0cikgPDwgKDMyIC0gYmMtPmJpdHNfbGVmdCk7Cj4gKyNlbmRpZgo+ ICsgICAgYmMtPnB0ciAgICAgICArPSA0Owo+ICsgICAgYmMtPmJpdHNfbGVmdCArPSAzMjsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIEluaXRpYWxpemUgQml0c3RyZWFtQ29udGV4dC4KPiArICogQHBh cmFtIGJ1ZmZlciBiaXRzdHJlYW0gYnVmZmVyLCBtdXN0IGJlIEFWX0lOUFVUX0JVRkZFUl9QQURE SU5HX1NJWkUgYnl0ZXMKPiArICogICAgICAgIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgcmVhZCBi aXRzIGJlY2F1c2Ugc29tZSBvcHRpbWl6ZWQgYml0c3RyZWFtCj4gKyAqICAgICAgICByZWFkZXJz IHJlYWQgMzIgb3IgNjQgYml0cyBhdCBvbmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZAo+ ICsgKiBAcGFyYW0gYml0X3NpemUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBiaXRzCj4gKyAq IEByZXR1cm4gMCBvbiBzdWNjZXNzLCBBVkVSUk9SX0lOVkFMSUREQVRBIGlmIHRoZSBidWZmZXJf c2l6ZSB3b3VsZCBvdmVyZmxvdy4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVh bV9pbml0KEJpdHN0cmVhbUNvbnRleHQgKmJjLCBjb25zdCB1aW50OF90ICpidWZmZXIsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiaXRfc2l6ZSkKPiAr ewo+ICsgICAgdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOwo+ICsKPiArICAgIGlmIChiaXRfc2l6 ZSA+IElOVF9NQVggLSA3IHx8ICFidWZmZXIpIHsKPiArICAgICAgICBiYy0+YnVmZmVyICAgID0g TlVMTDsKPiArICAgICAgICBiYy0+cHRyICAgICAgID0gTlVMTDsKPiArICAgICAgICBiYy0+Yml0 c19sZWZ0ID0gMDsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAg IH0KPiArCj4gKyAgICBidWZmZXJfc2l6ZSA9IChiaXRfc2l6ZSArIDcpID4+IDM7Cj4gKwo+ICsg ICAgYmMtPmJ1ZmZlciAgICAgICA9IGJ1ZmZlcjsKPiArICAgIGJjLT5idWZmZXJfZW5kICAgPSBi dWZmZXIgKyBidWZmZXJfc2l6ZTsKPiArICAgIGJjLT5wdHIgICAgICAgICAgPSBiYy0+YnVmZmVy Owo+ICsgICAgYmMtPnNpemVfaW5fYml0cyA9IGJpdF9zaXplOwo+ICsgICAgYmMtPmJpdHNfbGVm dCAgICA9IDA7Cj4gKyAgICBiYy0+Yml0cyAgICAgICAgID0gMDsKPiArCj4gKyAgICByZWZpbGxf NjQoYmMpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogSW5pdGlh bGl6ZSBCaXRzdHJlYW1Db250ZXh0Lgo+ICsgKiBAcGFyYW0gYnVmZmVyIGJpdHN0cmVhbSBidWZm ZXIsIG11c3QgYmUgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSBieXRlcwo+ICsgKiAgICAg ICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCByZWFkIGJpdHMgYmVjYXVzZSBzb21lIG9wdGltaXpl ZCBiaXRzdHJlYW0KPiArICogICAgICAgIHJlYWRlcnMgcmVhZCAzMiBvciA2NCBiaXRzIGF0IG9u Y2UgYW5kIGNvdWxkIHJlYWQgb3ZlciB0aGUgZW5kCj4gKyAqIEBwYXJhbSBieXRlX3NpemUgdGhl IHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRlcwo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywg QVZFUlJPUl9JTlZBTElEREFUQSBpZiB0aGUgYnVmZmVyX3NpemUgd291bGQgb3ZlcmZsb3cKPiAr ICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVhbV9pbml0OChCaXRzdHJlYW1Db250ZXh0 ICpiYywgY29uc3QgdWludDhfdCAqYnVmZmVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVfc2l6ZSkKPiArewo+ICsgICAgaWYgKGJ5dGVfc2l6 ZSA+IElOVF9NQVggLyA4KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ICsgICAgcmV0dXJuIGJpdHN0cmVhbV9pbml0KGJjLCBidWZmZXIsIGJ5dGVfc2l6ZSAqIDgpOwo+ ICt9Cj4gKwo+ICsvKioKPiArICogUmV0dXJuIG51bWJlciBvZiBiaXRzIGFscmVhZHkgcmVhZC4K PiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVhbV90ZWxsKGNvbnN0IEJpdHN0cmVh bUNvbnRleHQgKmJjKQo+ICt7Cj4gKyAgICByZXR1cm4gKGJjLT5wdHIgLSBiYy0+YnVmZmVyKSAq IDggLSBiYy0+Yml0c19sZWZ0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogUmV0dXJuIGJ1ZmZlciBz aXplIGluIGJpdHMuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1fdGVsbF9z aXplKGNvbnN0IEJpdHN0cmVhbUNvbnRleHQgKmJjKQo+ICt7Cj4gKyAgICByZXR1cm4gYmMtPnNp emVfaW5fYml0czsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRo ZSBiaXRzIGxlZnQgaW4gYSBidWZmZXIuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludCBiaXRz dHJlYW1fYml0c19sZWZ0KGNvbnN0IEJpdHN0cmVhbUNvbnRleHQgKmJjKQo+ICt7Cj4gKyAgICBy ZXR1cm4gKGJjLT5idWZmZXIgLSBiYy0+cHRyKSAqIDggKyBiYy0+c2l6ZV9pbl9iaXRzICsgYmMt PmJpdHNfbGVmdDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1aW50NjRfdCBnZXRfdmFsKEJp dHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsgICAgdWludDY0X3Qg cmV0Owo+ICsKPiArI2lmZGVmIEJJVFNUUkVBTV9SRUFERVJfTEUKPiArICAgIHJldCA9IGJjLT5i aXRzICYgKChVSU5UNjRfQygxKSA8PCBuKSAtIDEpOwo+ICsgICAgYmMtPmJpdHMgPj49IG47Cj4g KyNlbHNlCj4gKyAgICByZXQgPSBiYy0+Yml0cyA+PiAoNjQgLSBuKTsKPiArICAgIGJjLT5iaXRz IDw8PSBuOwo+ICsjZW5kaWYKPiArICAgIGJjLT5iaXRzX2xlZnQgLT0gbjsKPiArCj4gKyAgICBy ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogUmV0dXJuIG9uZSBiaXQgZnJvbSB0aGUg YnVmZmVyLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYml0c3RyZWFtX3Jl YWRfYml0KEJpdHN0cmVhbUNvbnRleHQgKmJjKQo+ICt7Cj4gKyAgICBpZiAoIWJjLT5iaXRzX2xl ZnQpCj4gKyAgICAgICAgcmVmaWxsXzY0KGJjKTsKPiArCj4gKyAgICByZXR1cm4gZ2V0X3ZhbChi YywgMSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZl ciwgbiBoYXMgdG8gYmUgaW4gdGhlIDAtNjMgcmFuZ2UuCgpnZXRfYml0czY0KCkgY2FuIHJlYWQg dXAgdG8gNjQgYml0cy4gVGhpcyBkaXNjcmVwYW5jeSB3b24ndCBsZWFkIHRvCmltbWVkaWF0ZSB0 cm91YmxlIGFzIG5vIGNhbGxlciBjYWxscyBpdCB3aXRoIDY0IGJpdHMuIEJ1dCBpdCdzIG5vdCBu aWNlLgoKPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgYml0c3RyZWFtX3JlYWRfNjMo Qml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQo+ICt7Cj4gKyAgICB1aW50NjRf dCByZXQgPSAwOwo+ICsjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQo+ICsgICAgdWludDY0X3Qg bGVmdCA9IDA7Cgp1aW50NjRfdCBmb3Igc29tZXRoaW5nIHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUg MC4uNjQgcmFuZ2UuCgo+ICsjZW5kaWYKPiArCj4gKyAgICBpZiAoIW4pCj4gKyAgICAgICAgcmV0 dXJuIDA7Cj4gKwo+ICsgICAgaWYgKG4gPiBiYy0+Yml0c19sZWZ0KSB7Cj4gKyAgICAgICAgbiAt PSBiYy0+Yml0c19sZWZ0Owo+ICsjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQo+ICsgICAgICAg IGxlZnQgPSBiYy0+Yml0c19sZWZ0Owo+ICsjZW5kaWYKPiArICAgICAgICByZXQgPSBnZXRfdmFs KGJjLCBiYy0+Yml0c19sZWZ0KTsKPiArICAgICAgICByZWZpbGxfNjQoYmMpOwo+ICsgICAgfQo+ ICsKPiArI2lmZGVmIEJJVFNUUkVBTV9SRUFERVJfTEUKPiArICAgIHJldCA9IGdldF92YWwoYmMs IG4pIDw8IGxlZnQgfCByZXQ7Cj4gKyNlbHNlCj4gKyAgICByZXQgPSBnZXRfdmFsKGJjLCBuKSB8 IHJldCA8PCBuOwoKSWYgdGhlIGFib3ZlIHJlZmlsbF82NCBmYWlscyBkdWUgdG8gZW9zLCB0aGVu IGdldF92YWwoKSBpcyBjYWxsZWQKZGVzcGl0ZSB0aGVyZSBiZWluZyBsZXNzIHRoYW4gbiBiaXRz IGxlZnQuIGdldF9iaXRzNjQoKSBkb2VzIG5vdCBzdWZmZXIKZnJvbSB0aGlzLgoKPiArI2VuZGlm Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiBuIGJp dHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0aGUgMC0zMiAgcmFuZ2UuCgpXaHkg ZG9lc24ndCB0aGlzIHdob2xlIHBhdGNoKHNldCkgbm90IHVzZSBhdl9hc3NlcnQycyB0byBjaGVj ayBhbGwgdGhlc2UKcmVzdHJpY3Rpb25zPwoKPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdWludDMy X3QgYml0c3RyZWFtX3JlYWQoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQo+ ICt7Cj4gKyAgICBpZiAoIW4pCj4gKyAgICAgICAgcmV0dXJuIDA7CgpUaGlzIG1ha2VzIHRoaXMg ZnVuY3Rpb24gYSBnZXRfYml0c3ogZXF1aXZhbGVudC4gV2h5IGlzIHRoZXJlIG5vCmdldF9iaXRz KCkgZXF1aXZhbGVudCBmb3IgdGhlIGNhc2VzIHdoZXJlIGl0IGlzIGtub3duIHRoYXQgbiBpcyBu b3QKemVybywgYnV0IHdoZXJlIGl0IGlzIGltcG9zc2libGUgZm9yIHRoZSBjb21waWxlciB0byBr bm93PwoKPiArCj4gKyAgICBpZiAobiA+IGJjLT5iaXRzX2xlZnQpIHsKPiArICAgICAgICByZWZp bGxfMzIoYmMpOwo+ICsgICAgICAgIGlmIChiYy0+Yml0c19sZWZ0IDwgMzIpCj4gKyAgICAgICAg ICAgIGJjLT5iaXRzX2xlZnQgPSBuOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiBnZXRfdmFs KGJjLCBuKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVm ZmVyIGFzIGEgc2lnbmVkIGludGVnZXIuCj4gKyAqIG4gaGFzIHRvIGJlIGluIHRoZSAwLTMyIHJh bmdlLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQzMl90IGJpdHN0cmVhbV9yZWFkX3NpZ25l ZChCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCj4gK3sKPiArICAgIHJldHVy biBzaWduX2V4dGVuZChiaXRzdHJlYW1fcmVhZChiYywgbiksIG4pOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaG93X3ZhbChCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5z aWduZWQgaW50IG4pCj4gK3sKPiArI2lmZGVmIEJJVFNUUkVBTV9SRUFERVJfTEUKPiArICAgIHJl dHVybiBiYy0+Yml0cyAmICgoVUlOVDY0X0MoMSkgPDwgbikgLSAxKTsKPiArI2Vsc2UKPiArICAg IHJldHVybiBiYy0+Yml0cyA+PiAoNjQgLSBuKTsKPiArI2VuZGlmCj4gK30KPiArCj4gKy8qKgo+ ICsgKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciBidXQgZG8gbm90IGNoYW5nZSB0aGUg YnVmZmVyIHN0YXRlLgo+ICsgKiBuIGhhcyB0byBiZSBpbiB0aGUgMC0zMiByYW5nZS4KPiArICov Cj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJpdHN0cmVhbV9wZWVrKEJpdHN0cmVhbUNv bnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsgICAgaWYgKG4gPiBiYy0+Yml0c19s ZWZ0KQo+ICsgICAgICAgIHJlZmlsbF8zMihiYyk7Cj4gKwo+ICsgICAgcmV0dXJuIHNob3dfdmFs KGJjLCBuKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVm ZmVyIGFzIGEgc2lnbmVkIGludGVnZXIsCj4gKyAqIGRvIG5vdCBjaGFuZ2UgdGhlIGJ1ZmZlciBz dGF0ZS4KPiArICogbiBoYXMgdG8gYmUgaW4gdGhlIDAtMzIgcmFuZ2UuCj4gKyAqLwo+ICtzdGF0 aWMgaW5saW5lIGludCBiaXRzdHJlYW1fcGVla19zaWduZWQoQml0c3RyZWFtQ29udGV4dCAqYmMs IHVuc2lnbmVkIGludCBuKQo+ICt7Cj4gKyAgICByZXR1cm4gc2lnbl9leHRlbmQoYml0c3RyZWFt X3BlZWsoYmMsIG4pLCBuKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHNraXBfcmVt YWluaW5nKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsjaWZk ZWYgQklUU1RSRUFNX1JFQURFUl9MRQo+ICsgICAgYmMtPmJpdHMgPj49IG47Cj4gKyNlbHNlCj4g KyAgICBiYy0+Yml0cyA8PD0gbjsKPiArI2VuZGlmCj4gKyAgICBiYy0+Yml0c19sZWZ0IC09IG47 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBTa2lwIG4gYml0cyBpbiB0aGUgYnVmZmVyLgo+ICsgKi8K PiArc3RhdGljIGlubGluZSB2b2lkIGJpdHN0cmVhbV9za2lwKEJpdHN0cmVhbUNvbnRleHQgKmJj LCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsgICAgaWYgKG4gPCBiYy0+Yml0c19sZWZ0KQo+ICsg ICAgICAgIHNraXBfcmVtYWluaW5nKGJjLCBuKTsKPiArICAgIGVsc2Ugewo+ICsgICAgICAgIG4g LT0gYmMtPmJpdHNfbGVmdDsKPiArICAgICAgICBiYy0+Yml0cyAgICAgID0gMDsKPiArICAgICAg ICBiYy0+Yml0c19sZWZ0ID0gMDsKPiArCj4gKyAgICAgICAgaWYgKG4gPj0gNjQpIHsKPiArICAg ICAgICAgICAgdW5zaWduZWQgaW50IHNraXAgPSBuIC8gODsKPiArCj4gKyAgICAgICAgICAgIG4g LT0gc2tpcCAqIDg7Cj4gKyAgICAgICAgICAgIGJjLT5wdHIgKz0gc2tpcDsKPiArICAgICAgICB9 Cj4gKyAgICAgICAgcmVmaWxsXzY0KGJjKTsKPiArICAgICAgICBpZiAobikKPiArICAgICAgICAg ICAgc2tpcF9yZW1haW5pbmcoYmMsIG4pOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICsvKioKPiArICog U2VlayB0byB0aGUgZ2l2ZW4gYml0IHBvc2l0aW9uLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSB2 b2lkIGJpdHN0cmVhbV9zZWVrKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBwb3MpCj4g K3sKPiArICAgIGJjLT5wdHIgICAgICAgPSBiYy0+YnVmZmVyOwo+ICsgICAgYmMtPmJpdHMgICAg ICA9IDA7Cj4gKyAgICBiYy0+Yml0c19sZWZ0ID0gMDsKPiArCj4gKyAgICBiaXRzdHJlYW1fc2tp cChiYywgcG9zKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFNraXAgYml0cyB0byBhIGJ5dGUgYm91 bmRhcnkuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGNvbnN0IHVpbnQ4X3QgKmJpdHN0cmVhbV9h bGlnbihCaXRzdHJlYW1Db250ZXh0ICpiYykKPiArewo+ICsgICAgdW5zaWduZWQgaW50IG4gPSAt Yml0c3RyZWFtX3RlbGwoYmMpICYgNzsKPiArICAgIGlmIChuKQo+ICsgICAgICAgIGJpdHN0cmVh bV9za2lwKGJjLCBuKTsKPiArICAgIHJldHVybiBiYy0+YnVmZmVyICsgKGJpdHN0cmVhbV90ZWxs KGJjKSA+PiAzKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJlYWQgTVBFRy0xIGRjLXN0eWxlIFZM QyAoc2lnbiBiaXQgKyBtYW50aXNzYSB3aXRoIG5vIE1TQikuCj4gKyAqIElmIE1TQiBub3Qgc2V0 IGl0IGlzIG5lZ2F0aXZlLgo+ICsgKiBAcGFyYW0gbiBsZW5ndGggaW4gYml0cwo+ICsgKi8KPiAr c3RhdGljIGlubGluZSBpbnQgYml0c3RyZWFtX3JlYWRfeGJpdHMoQml0c3RyZWFtQ29udGV4dCAq YmMsIHVuc2lnbmVkIGludCBuKQo+ICt7Cj4gKyAgICBpbnQzMl90IGNhY2hlID0gYml0c3RyZWFt X3BlZWsoYmMsIDMyKTsKPiArICAgIGludCBzaWduID0gfmNhY2hlID4+IDMxOwo+ICsgICAgc2tp cF9yZW1haW5pbmcoYmMsIG4pOwo+ICsKPiArICAgIHJldHVybiAoKCgodWludDMyX3QpKHNpZ24g XiBjYWNoZSkpID4+ICgzMiAtIG4pKSBeIHNpZ24pIC0gc2lnbjsKPiArfQo+ICsKPiArLyoqCj4g KyAqIFJldHVybiBkZWNvZGVkIHRydW5jYXRlZCB1bmFyeSBjb2RlIGZvciB0aGUgdmFsdWVzIDAs IDEsIDIuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1fZGVjb2RlMDEyKEJp dHN0cmVhbUNvbnRleHQgKmJjKQo+ICt7Cj4gKyAgICBpZiAoIWJpdHN0cmVhbV9yZWFkX2JpdChi YykpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgcmV0dXJuIGJp dHN0cmVhbV9yZWFkX2JpdChiYykgKyAxOwo+ICt9Cj4gKwo+ICsvKioKPiArICogUmV0dXJuIGRl Y29kZWQgdHJ1bmNhdGVkIHVuYXJ5IGNvZGUgZm9yIHRoZSB2YWx1ZXMgMiwgMSwgMC4KPiArICov Cj4gK3N0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVhbV9kZWNvZGUyMTAoQml0c3RyZWFtQ29udGV4 dCAqYmMpCj4gK3sKPiArICAgIGlmIChiaXRzdHJlYW1fcmVhZF9iaXQoYmMpKQo+ICsgICAgICAg IHJldHVybiAwOwo+ICsgICAgZWxzZQo+ICsgICAgICAgIHJldHVybiAyIC0gYml0c3RyZWFtX3Jl YWRfYml0KGJjKTsKPiArfQo+ICsKPiArLyogUmVhZCBzaWduIGJpdCBhbmQgZmxpcCB0aGUgc2ln biBvZiB0aGUgcHJvdmlkZWQgdmFsdWUgYWNjb3JkaW5nbHkuICovCj4gK3N0YXRpYyBpbmxpbmUg aW50IGJpdHN0cmVhbV9hcHBseV9zaWduKEJpdHN0cmVhbUNvbnRleHQgKmJjLCBpbnQgdmFsKQo+ ICt7Cj4gKyAgICBpbnQgc2lnbiA9IGJpdHN0cmVhbV9yZWFkX3NpZ25lZChiYywgMSk7Cj4gKyAg ICByZXR1cm4gKHZhbCBeIHNpZ24pIC0gc2lnbjsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBp bnQgYml0c3RyZWFtX3NraXBfMXN0b3BfOGRhdGEoQml0c3RyZWFtQ29udGV4dCAqcykKPiArewo+ ICsgICAgaWYgKGJpdHN0cmVhbV9iaXRzX2xlZnQocykgPD0gMCkKPiArICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKPiArCj4gKyAgICB3aGlsZSAoYml0c3RyZWFtX3JlYWQocywg MSkpIHsKPiArICAgICAgICBiaXRzdHJlYW1fc2tpcChzLCA4KTsKPiArICAgICAgICBpZiAoYml0 c3RyZWFtX2JpdHNfbGVmdChzKSA8PSAwKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyog VW53aW5kIHRoZSBjYWNoZSBzbyBhIHJlZmlsbF8zMiBjYW4gZmlsbCBpdCBhZ2Fpbi4gKi8KPiAr c3RhdGljIGlubGluZSB2b2lkIGJpdHN0cmVhbV91bndpbmQoQml0c3RyZWFtQ29udGV4dCAqYmMp Cj4gK3sKPiArICAgIGludCB1bndpbmQgPSA0Owo+ICsgICAgaW50IHVud2luZF9iaXRzID0gdW53 aW5kICogODsKCkknbSBzdXJwcmlzZWQgdGhhdCB5b3UgdXNlZCBzaWduZWQgdHlwZXMgaGVyZS4K Cj4gKwo+ICsgICAgaWYgKGJjLT5iaXRzX2xlZnQgPCB1bndpbmRfYml0cykKPiArICAgICAgICBy ZXR1cm47Cj4gKwo+ICsgICAgYmMtPmJpdHMgICAgICA+Pj0gdW53aW5kX2JpdHM7Cj4gKyAgICBi Yy0+Yml0cyAgICAgIDw8PSB1bndpbmRfYml0czsKClRoZSBhYm92ZSB3b24ndCB3b3JrIGluIExF LiBCZXN0IHRvIGNhbGwgc2tpcF9yZW1haW5pbmcgaGVyZS4gQW5kIHlvdQpuZWVkIHRvIHRlbXBs YXRpemUgdGhpcyBmdW5jdGlvbiBpbiAzLzQuCgo+ICsgICAgYmMtPmJpdHNfbGVmdCAgLT0gdW53 aW5kX2JpdHM7Cj4gKyAgICBiYy0+cHRyICAgICAgICAtPSB1bndpbmQ7Cj4gK30KPiArCj4gKy8q IFVuZ2V0IHVwIHRvIDMyIGJpdHMuICovCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBiaXRzdHJlYW1f dW5nZXQoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVpbnQ2NF90IHZhbHVlLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhbW91bnQpCgpzaXplX3QgaXMgdGhlIG5h dHVyYWwgdHlwZSBmb3IgdGhlIGJ5dGVzaXplIG9mIG9iamVjdHMsIGJ1dCBub3QgZm9yCmJpdHNp emVzLiBBIHBsYW5lIHVuc2lnbmVkIHdvdWxkIGJlIG1vcmUgbmF0dXJhbCBoZXJlLgoKPiArewo+ ICsgICAgc2l6ZV90IGNhY2hlX3NpemUgPSBzaXplb2YoYmMtPmJpdHMpICogODsKPiArCj4gKyAg ICBpZiAoYmMtPmJpdHNfbGVmdCArIGFtb3VudCA+IGNhY2hlX3NpemUpCj4gKyAgICAgICAgYml0 c3RyZWFtX3Vud2luZChiYyk7Cj4gKwo+ICsgICAgYmMtPmJpdHMgICAgICAgPSAoYmMtPmJpdHMg Pj4gYW1vdW50KSB8ICh2YWx1ZSA8PCAoY2FjaGVfc2l6ZSAtIGFtb3VudCkpOwoKVGhpcyBpcyBi aWctZW5kaWFuIG9ubHksIHRvby4KCj4gKyAgICBiYy0+Yml0c19sZWZ0ICs9IGFtb3VudDsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiB0aGUgTFVUIGVsZW1lbnQgZm9yIHRoZSBnaXZlbiBi aXRzdHJlYW0gY29uZmlndXJhdGlvbi4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IHNldF9p ZHgoQml0c3RyZWFtQ29udGV4dCAqYmMsIGludCBjb2RlLCBpbnQgKm4sIGludCAqbmJfYml0cywK PiArICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWTENFbGVtICp0YWJsZSkKPiArewo+ ICsgICAgdW5zaWduZWQgaWR4Owo+ICsKPiArICAgICpuYl9iaXRzID0gLSpuOwo+ICsgICAgaWR4 ID0gYml0c3RyZWFtX3BlZWsoYmMsICpuYl9iaXRzKSArIGNvZGU7Cj4gKyAgICAqbiA9IHRhYmxl W2lkeF0ubGVuOwo+ICsKPiArICAgIHJldHVybiB0YWJsZVtpZHhdLnN5bTsKPiArfQo+ICsKPiAr LyoqCj4gKyAqIFBhcnNlIGEgdmxjIGNvZGUuCj4gKyAqIEBwYXJhbSBiaXRzIGlzIHRoZSBudW1i ZXIgb2YgYml0cyB3aGljaCB3aWxsIGJlIHJlYWQgYXQgb25jZSwgbXVzdCBiZQo+ICsgKiAgICAg ICAgICAgICBpZGVudGljYWwgdG8gbmJfYml0cyBpbiBpbml0X3ZsYygpCj4gKyAqIEBwYXJhbSBt YXhfZGVwdGggaXMgdGhlIG51bWJlciBvZiB0aW1lcyBiaXRzIGJpdHMgbXVzdCBiZSByZWFkIHRv IGNvbXBsZXRlbHkKPiArICogICAgICAgICAgICAgICAgICByZWFkIHRoZSBsb25nZXN0IHZsYyBj b2RlCj4gKyAqICAgICAgICAgICAgICAgICAgPSAobWF4X3ZsY19sZW5ndGggKyBiaXRzIC0gMSkg LyBiaXRzCj4gKyAqIElmIHRoZSB2bGMgY29kZSBpcyBpbnZhbGlkIGFuZCBtYXhfZGVwdGg9MSwg dGhlbiBubyBiaXRzIHdpbGwgYmUgcmVtb3ZlZC4KPiArICogSWYgdGhlIHZsYyBjb2RlIGlzIGlu dmFsaWQgYW5kIG1heF9kZXB0aD4xLCB0aGVuIHRoZSBudW1iZXIgb2YgYml0cyByZW1vdmVkCj4g KyAqIGlzIHVuZGVmaW5lZC4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVhbV9y ZWFkX3ZsYyhCaXRzdHJlYW1Db250ZXh0ICpiYywgY29uc3QgVkxDRWxlbSAqdGFibGUsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0cywgaW50IG1heF9kZXB0 aCkKPiArewo+ICsgICAgaW50IG5iX2JpdHM7Cj4gKyAgICB1bnNpZ25lZCBpZHggPSBiaXRzdHJl YW1fcGVlayhiYywgYml0cyk7Cj4gKyAgICBpbnQgY29kZSAgICAgPSB0YWJsZVtpZHhdLnN5bTsK PiArICAgIGludCBuICAgICAgICA9IHRhYmxlW2lkeF0ubGVuOwo+ICsKPiArICAgIGlmIChtYXhf ZGVwdGggPiAxICYmIG4gPCAwKSB7Cj4gKyAgICAgICAgc2tpcF9yZW1haW5pbmcoYmMsIGJpdHMp Owo+ICsgICAgICAgIGNvZGUgPSBzZXRfaWR4KGJjLCBjb2RlLCAmbiwgJm5iX2JpdHMsIHRhYmxl KTsKPiArICAgICAgICBpZiAobWF4X2RlcHRoID4gMiAmJiBuIDwgMCkgewo+ICsgICAgICAgICAg ICBza2lwX3JlbWFpbmluZyhiYywgbmJfYml0cyk7Cj4gKyAgICAgICAgICAgIGNvZGUgPSBzZXRf aWR4KGJjLCBjb2RlLCAmbiwgJm5iX2JpdHMsIHRhYmxlKTsKPiArICAgICAgICB9Cj4gKyAgICB9 Cj4gKyAgICBza2lwX3JlbWFpbmluZyhiYywgbik7Cj4gKwo+ICsgICAgcmV0dXJuIGNvZGU7Cj4g K30KPiArCj4gKyNkZWZpbmUgQklUU1RSRUFNX1JMX1ZMQyhsZXZlbCwgcnVuLCBiYywgdGFibGUs IGJpdHMsIG1heF9kZXB0aCkgXAo+ICsgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICBpbnQgbiwgbmJfYml0 czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAg dW5zaWduZWQgaW50IGluZGV4ID0gYml0c3RyZWFtX3BlZWsoYmMsIGJpdHMpOyAgICAgICAgICAg XAo+ICsgICAgICAgIGxldmVsID0gdGFibGVbaW5kZXhdLmxldmVsOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiArICAgICAgICBuICAgICA9IHRhYmxlW2luZGV4XS5sZW47ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgIGlmICht YXhfZGVwdGggPiAxICYmIG4gPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAr ICAgICAgICAgICAgYml0c3RyZWFtX3NraXAoYmMsIGJpdHMpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICBuYl9iaXRzID0gLW47ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAg ICAgICAgIGluZGV4ID0gYml0c3RyZWFtX3BlZWsoYmMsIG5iX2JpdHMpICsgbGV2ZWw7ICAgICAg ICAgXAo+ICsgICAgICAgICAgICBsZXZlbCA9IHRhYmxlW2luZGV4XS5sZXZlbDsgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAgbiAgICAgPSB0YWJsZVtpbmRleF0ubGVu OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgIGlmIChtYXhfZGVw dGggPiAyICYmIG4gPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAg ICAgICAgYml0c3RyZWFtX3NraXAoYmMsIG5iX2JpdHMpOyAgICAgICAgICAgICAgICAgICAgIFwK PiArICAgICAgICAgICAgICAgIG5iX2JpdHMgPSAtbjsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICAgICAgaW5kZXggPSBiaXRz dHJlYW1fcGVlayhiYywgbmJfYml0cykgKyBsZXZlbDsgICAgIFwKPiArICAgICAgICAgICAgICAg IGxldmVsID0gdGFibGVbaW5kZXhdLmxldmVsOyAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAg ICAgICAgICAgICAgICBuICAgICA9IHRhYmxlW2luZGV4XS5sZW47ICAgICAgICAgICAgICAgICAg ICAgICAgXAo+ICsgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgcnVuID0gdGFibGVb aW5kZXhdLnJ1bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAg IGJpdHN0cmVhbV9za2lwKGJjLCBuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKPiArICAgIH0gd2hpbGUgKDApCj4gKwo+ICsjZW5kaWYgLyogQVZDT0RFQ19CSVRTVFJFQU1f SCAqLwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZt cGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2Zm bXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2 aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3Jn IHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=