From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id D13724D106 for <ffmpegdev@gitmailbox.com>; Wed, 16 Apr 2025 05:05:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 50E32687BAE; Wed, 16 Apr 2025 08:05:37 +0300 (EEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2040.outbound.protection.outlook.com [40.92.90.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E167C687A49 for <ffmpeg-devel@ffmpeg.org>; Wed, 16 Apr 2025 08:05:30 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jvgAV/Kp4sJG1i7qUNEElygybqR4l1sP0WSTKZoZJ1H5BEL0+lARE3OT0VkjMQCZg/d/uCh+krdMaSSH2qTsxE0HFVGz7u6ujFuV3rwrBrlhB0e/sYQumjT+IyYS9s+7lYkUu0oztQBzl2oGL+DDUpkz+6Muyuk0r05Scb11l8U3lRR3DRicRKW51j9rNj8dHCCeiW7CFzTwLoD53BsyhSoKWGaqRqMtgkVAUYMDLvAbY6W2hqCAieDvMb3Pv9NqERX9BWgG6oQ7+p0uYUxF0a/NZIkLUeVXRrjvMdJXSf5BPaTiBnn2qxX0bJwr81QkwVbraoebVGe4iqXydDu3+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=CGh7wI2kNWWoQOeCoiVNsF6+mILm7JpN9pVP1LLoW3g=; b=LbkM9sWI21SPPMSrhSzaV1hxcqS2ibhxh0I7pyqRplCftHoEjQk3tfBTC1//KG9qnB+kninj7hZmYmDOeJML+CPwb4LSiZqfnQlXuf4CO8nfBGIYLtdk/KQ0TLC4Zyf0H3qGhCcGEBi6PK7XOLjoxR0ecKyJfb4KQYIRqZuLQhtf/LO37ohxWKrkBTwLwgSCh1mhL0fCCJXKIowtHfUihI/4sFuLZxgqZKeEttoa+r8Q+gg4DqfYEXBqW7KrCWGq0OP1nct0lO879DIrANTC1szvKXDEiqqUYLZ+yAYJkhIRm4rDFMq8OyN8LqQ7eL/GGMoCk9kLBnvx8rt7quh4JA== 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=CGh7wI2kNWWoQOeCoiVNsF6+mILm7JpN9pVP1LLoW3g=; b=W1v3/15OroRnNihOzXgLXvZwNKf1+xaM2CzCfLBYlfpVSvnjzzNeyl4iX0D+2tk4uNKpnrzj8KRaLIKHnFZcsOpfokCfuVoVhvpgU8B6e2hXo9IyYaZNmzWtQwcaYLuBxId70SL+F9/yklgenD/1Markj+cQQOVXYUkyeBbGjKIEWA84kxNr/3V9R7RXbtt3mekziiFK3f0XRo/BEsFSmJUecL1jmkZgGhhZp7A+xcTs+ssLAVZWDowRoB0NHmxjcP7TKectVNppZV2e0EbE0PSK296K6yFdvIdwAoceqnFBGdkKCdW35wCeVN1CPAPOYNsy8HdyOW5XGrBuctotrw== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DU0P250MB0646.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:329::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.20; Wed, 16 Apr 2025 04:50:46 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%5]) with mapi id 15.20.8655.012; Wed, 16 Apr 2025 04:50:46 +0000 Message-ID: <GV1P250MB073716AA776C301A980CB90B8FBD2@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> Date: Wed, 16 Apr 2025 06:50:44 +0200 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <pull.66.ffstaging.FFmpeg.1744634826.ffmpegagent@gmail.com> <04cce9150062afbe63fcf54af0f8480c386f4286.1744634827.git.ffmpegagent@gmail.com> <GV1P250MB073708D33D46AB881810F1728FB22@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> <DM8P223MB03659AF3483E00EC43597670BAB22@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> Content-Language: en-US From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> In-Reply-To: <DM8P223MB03659AF3483E00EC43597670BAB22@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> X-ClientProxiedBy: FR4P281CA0361.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f8::17) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <dfee648c-2ace-466b-9f79-2bb2d6d7fe76@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DU0P250MB0646:EE_ X-MS-Office365-Filtering-Correlation-Id: c917ead5-4315-4f60-67f9-08dd7ca24025 X-Microsoft-Antispam: BCL:0; ARA:14566002|15080799006|6090799003|461199028|8060799006|19110799003|5072599009|7092599003|18061999006|41001999003|440099028|3412199025; X-Microsoft-Antispam-Message-Info: =?utf-8?B?NmpLdzBjejZPeWRRV0FyMzgrUHdzK3RCMWxGRzZyN0JjSjJhV0FyRzB0dDlo?= =?utf-8?B?UThiY1ZhUlVmNWpDUnFXci9kWlc0ZVE2Z24vMFNSOXgvS095OS95SUVpSm5k?= =?utf-8?B?ajhOencvMWxBcWZLcmh0RUNrZ29aMjYvRG5yUk1XWlFVbVUyRVBQVDdmVEd0?= =?utf-8?B?TFp5dDhuL2ZVZGIrSkZLMjBreG5nVlZwTWRYbjFldTcwZmRlcmdUTHllRGxH?= =?utf-8?B?cFhwZUNCQy9NNE9BVVEyTnQ5THkyWWt3Uy9EMUczMW1PektwUUc0VnN2MmpS?= =?utf-8?B?N0xITjJ5eGdTU1BORjVjNXBYU2dsbW85eVNWWGFCZEtTOEQ4WjhQSmRnTHBP?= =?utf-8?B?Zmp5OEJFa2pvamdJdlNqUXlHTzlqSldKRTFvaHdYckYweVRKLzhFQTlram1N?= =?utf-8?B?VUtBZVhsME5EQXJCMFlMSlFpaDI3ZldNdkYxZU5aSUhXTVZTRHZ3UHhqNHBv?= =?utf-8?B?NEQ4aEdpd1RHYVJlTi8weHBGdFFpUE1henFoZ3RpN0ExSzlIS1NKSUc1YTNY?= =?utf-8?B?WmxSZDlXcWlhV004QWtBY3hUUGs0WS9qMW5hMHB3M1RETVFmdE16M2dVWVdu?= =?utf-8?B?YS9sOEFZSFR5UDN0a3cyWW1WNnhjOU41RnBCSk5GdDN3Z3dtS3JycXlCOE1z?= =?utf-8?B?UE5LVUt2NkxYc3Q5Skc3akVVTE1wNjZ2bWdWK0liNjhzby9zZWVMQWJOYytT?= =?utf-8?B?WkszWnBhaGpNcmF1QUFISm9SdGpXVjZTL3B3ZktaVEFWQ0doaTFjR25nS2JM?= =?utf-8?B?dzkwZk9XR3c0Z1RxVmdWalhETFpuMXRObXk5R2ZyRG4xbFlmNzArekZCdFI3?= =?utf-8?B?aFh0T0Fkd2ZyQnc2V3ZsRkFLcmJuUmpmWDM2TTJSK2RMeWVqOGtYQkVmeFA3?= =?utf-8?B?cHc0UWlVSC9mamhpbWtpQ3FDcHBWZ01XRUw3bkp3WjhlakRrV0cvZUcvMGNx?= =?utf-8?B?YVRwRENtZXJnb0FGRHpmdW9NelhQOE5ETEJMbExETjFwbGxSNnRiUDQxNVNj?= =?utf-8?B?ai9uZEhuNkxzMmV0Mmw5YVRDNGJMZmpMVFFDZHpYcGQ5d0xWUm1qWkpGY3Vv?= =?utf-8?B?NkJHSzB6NU5qM3poMVBPQThQMG9FTE1pTythRXI1WTE1ampIT3NyYVkyWUx2?= =?utf-8?B?aU52M3ZHQllzQXdPV3Q5Q3VPakhoS0x2RHZkelBYbjFrZlJ6WDB6OXNIUjJX?= =?utf-8?B?VnNZUzFsZDd4SnhncFRCMTMrYStwMVdoalA5aUtHN21TcW1BN0I2b3VoaElZ?= =?utf-8?B?SUdMWnNiR2lFZnR1dUdGYlVmbDNkNGppSzFnWGZTV1NvMW1MTDV5NFVHQVZq?= =?utf-8?B?OW9xZ2YybDFwWnRPd242M0d6Y21ScVVQdU4zZXJCd1NqM2JvQW1iMjF2Qmg2?= =?utf-8?B?dHYzd2ZiVjdXRHdKV2xoMTdSS1pmb0txb0lPWGtRYVU3RVZaUmJVY3JaQU1x?= =?utf-8?B?Y2x1SDlvQVBQdkpwYm9abDRLUzRCeVg3eXluamVNSXVCYVoreldEcGlaZTZF?= =?utf-8?B?aWFucm5hc1VocktJOVRPUnQ2empJdVV1NldkcW9icVJRVWR3elhVOVJIZFBV?= =?utf-8?B?Skw4UURqdmo3MWZucmVhZUJwUEVvaHVUQkUxT3RmUVN5NzZSd2JkQlFUbUw1?= =?utf-8?B?Um1IS25rRFVZVHZTNmNjUEZOOXkrbkE9PQ==?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aXFSekwrMEpUWTM5ZVZzZjBGdW1wZU9JZmZLZ2o3czBsRkFIVUdqeEs3aWJY?= =?utf-8?B?eDg2YUN5S21hQWpYVUFCYmdtSE5FT1pRdTc2UTZndnlLUms0Z3lzdEZ5VG5X?= =?utf-8?B?ZE9MTG56Z3M5YVB4M3k4bVE5cDJ0amlVOVVCaU45WmxuR3dEMUxoTFkwcVZy?= =?utf-8?B?eWJoMXR6K1JBMnVCbXFLZkRYcDFEK2k2UTJZZGtuMjVscVlTMlhvOUg0K1Ra?= =?utf-8?B?bldua3dsSVI2Y0JKZzlZdmtsWTFCeDV2VWpramxmZE9iRlRZY1lHaUFMS1Rm?= =?utf-8?B?eFhKYlNHUW9BbkJyaU5wMzNKL0FTSENYelQ3bmF6eHhteDZlQk1DRkdSeTY2?= =?utf-8?B?bjJmU3A4Z3FxYzJ1Y1BkTDN3VXJWazRUQm9JRkp5VFZHc3FZU053UmQ1c1Rj?= =?utf-8?B?SE5aVEw2dUFRRWtrVHdVdzJoS2FLQ01HSFRVU1BRaE9ERlVIa3c3RlAxUjFW?= =?utf-8?B?REZmY2srbWNpKzFPaDl3cGU1UndHeGhOVUxHMWZtT21XZnpXcytHcHpWVlQ3?= =?utf-8?B?emMwSzk3MWFOWGZ5bFVTWVJ3dWZoN1hacmdwWU9YYkx1anU0MVNFczgxdWEz?= =?utf-8?B?WXdwclYrb2haQjZJRjAzOSs0VHN4Q09UNkp4YzJhYmxVVHZ6V2RHektEc0Vh?= =?utf-8?B?c3RFd2xhdDNjUTBoN3BBOGlDNW81S0IrbEJTS2h4WXVQamZmblV6OExVWms3?= =?utf-8?B?UGtHelFORENIMEl6eXpYZURtWUxyVnFoZVBVbmkxSzVCQnIwR21nT0lXSUxh?= =?utf-8?B?dDNXNnhlTzF2bGI0clkzTWQrV3prcXNVM0draGZXSkN0MG9aOGZzL3Fmazd0?= =?utf-8?B?TVdtM1RJcHVSZXhjOXAyd0FhVXJsUkhvQXRza0d1Y1pucWNHRFhlRGZSbWoy?= =?utf-8?B?ZUpnNHMvVjVQQzNLZHBSUXFQMnltMjY5SnB1K0ZGVmgzZG0rcERmRVUzNi9z?= =?utf-8?B?QldwdHVOcUtuR1dyZU5SN3ZMclZiUWVKRG5UNjRkcWo5UlgvalpwQ2RuRDBQ?= =?utf-8?B?Qkk1cUlUWkk1SWt6Mm12ODUzM2NaUmJiZDREdkhYVUtmOVhjdzdhbGVYaVNu?= =?utf-8?B?WWJod1Qvc1lYakNHc00xNmx2YkFCaUFoVGtxMG83ZmJaby9oYlBYR0MwVmNT?= =?utf-8?B?Tzc2YnFHakd6cjNianFjdjNBRXJGSUpzRStmaFlIeXUrRzZIeHZ0TFVmeXAy?= =?utf-8?B?N2ZIOWJnZVluVzBkNDRORm9GYTBlMWVpdjg1YmVSNUxESkZJZVBKOWVQRlRD?= =?utf-8?B?U2kzY0wwUDJzNHZHRjdKeFJYcnYzckZIa0dBR2puS0xQejhEdWVmRFhoWXBt?= =?utf-8?B?azZYdDk4aFMyY3pISFBuSXlpT0UwQjhZR1gwWUpadklOUVRUc3JVMHN1Ry9I?= =?utf-8?B?bW1Md0VwNXZ3T3phNXNhRFVKV0hING84VFYxS1h6VkZNV21WYzJHNmZZYVVo?= =?utf-8?B?Z2E3M1lRQndTWFkvVjUwTk41WnFjcHp5T0RXTXV4R1gvTGpPNUc3dlRuOGFB?= =?utf-8?B?cUhnNS91RG92WHk5YTEvMUl2Mm5OcjJXalp1TFhPS2ZxWnNRaWF4Z3FNbkFu?= =?utf-8?B?NTN5QnVQN3JuZSt6N0NyNzQ5TlR5RzYxRHhDNC9LbzI5ZEtTN0lRNm9zR3pm?= =?utf-8?B?M2hmSXBlbElQWlNQVnhCVTJRRmtzMWFFbXl5NmhURXFpVXAva0NoTGl3U3ZU?= =?utf-8?B?R3ZCU3BIMi9scnEwWWFudUR2RE1BeDVDb2xhMlJLdFZBVWptci84SFZ1cGkv?= =?utf-8?Q?piy7Fi/20p+H+4qLTDW+jZlIeukrevr/i3QdVaz?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c917ead5-4315-4f60-67f9-08dd7ca24025 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Apr 2025 04:50:46.3133 (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: DU0P250MB0646 Subject: Re: [FFmpeg-devel] [PATCH 2/9] fftools/textformat: Quality improvements X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/GV1P250MB073716AA776C301A980CB90B8FBD2@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> c29mdHdvcmt6IC46Cj4gCj4gCj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206 IGZmbXBlZy1kZXZlbCA8ZmZtcGVnLWRldmVsLWJvdW5jZXNAZmZtcGVnLm9yZz4gT24gQmVoYWxm IE9mCj4+IEFuZHJlYXMgUmhlaW5oYXJkdAo+PiBTZW50OiBEaWVuc3RhZywgMTUuIEFwcmlsIDIw MjUgMDM6MDYKPj4gVG86IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4+IFN1YmplY3Q6IFJlOiBb RkZtcGVnLWRldmVsXSBbUEFUQ0ggMi85XSBmZnRvb2xzL3RleHRmb3JtYXQ6IFF1YWxpdHkKPj4g aW1wcm92ZW1lbnRzCj4+Cj4+IHNvZnR3b3JrejoKPj4+IEZyb206IHNvZnR3b3JreiA8c29mdHdv cmt6QGhvdG1haWwuY29tPgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IHNvZnR3b3JreiA8c29mdHdv cmt6QGhvdG1haWwuY29tPgo+Pj4gLS0tCj4+PiAgZmZ0b29scy90ZXh0Zm9ybWF0L2F2dGV4dGZv cm1hdC5jIHwgMTIxICsrKysrKysrKysrKysrKysrKystLS0tLS0tLQo+PiAtLS0KPj4+ICBmZnRv b2xzL3RleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmggfCAgIDYgKy0KPj4+ICBmZnRvb2xzL3RleHRm b3JtYXQvdGZfZGVmYXVsdC5jICAgfCAgIDggKy0KPj4+ICBmZnRvb2xzL3RleHRmb3JtYXQvdGZf aW5pLmMgICAgICAgfCAgIDIgKy0KPj4+ICBmZnRvb2xzL3RleHRmb3JtYXQvdGZfanNvbi5jICAg ICAgfCAgIDggKy0KPj4+ICBmZnRvb2xzL3RleHRmb3JtYXQvdGZfeG1sLmMgICAgICAgfCAgIDMg LQo+Pj4gIGZmdG9vbHMvdGV4dGZvcm1hdC90d19hdmlvLmMgICAgICB8ICAgOSArKy0KPj4+ICA3 IGZpbGVzIGNoYW5nZWQsIDEwMSBpbnNlcnRpb25zKCspLCA1NiBkZWxldGlvbnMoLSkKPj4+Cj4+ PiBkaWZmIC0tZ2l0IGEvZmZ0b29scy90ZXh0Zm9ybWF0L2F2dGV4dGZvcm1hdC5jCj4+IGIvZmZ0 b29scy90ZXh0Zm9ybWF0L2F2dGV4dGZvcm1hdC5jCj4+PiBpbmRleCAxY2U1MWQxMWUyLi40MDYw MjVkMTlkIDEwMDY0NAo+Pj4gLS0tIGEvZmZ0b29scy90ZXh0Zm9ybWF0L2F2dGV4dGZvcm1hdC5j Cj4+PiArKysgYi9mZnRvb2xzL3RleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmMKPj4+IEBAIC05Myw5 ICs5Myw4IEBAIHN0YXRpYyBjb25zdCBBVkNsYXNzIHRleHRjb250ZXh0X2NsYXNzID0gewo+Pj4K Pj4+ICBzdGF0aWMgdm9pZCBicHJpbnRfYnl0ZXMoQVZCUHJpbnQgKmJwLCBjb25zdCB1aW50OF90 ICp1YnVmLCBzaXplX3QKPj4gdWJ1Zl9zaXplKQo+Pj4gIHsKPj4+IC0gICAgaW50IGk7Cj4+PiAg ICAgIGF2X2JwcmludGYoYnAsICIwWCIpOwo+Pj4gLSAgICBmb3IgKGkgPSAwOyBpIDwgdWJ1Zl9z aXplOyBpKyspCj4+PiArICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1YnVmX3NpemU7IGkr KykKPj4KPj4gV2h5IG5vdCBzaXplX3Q/Cj4gCj4gQmVjYXVzZSBpdCBjcmVhdGVzIG1vcmUgd2Fy bmluZ3MgYWJvdXQgbmFycm93aW5nIGNvbnZlcnNpb25zLgo+IAo+IAo+IAo+Pj4gICAgICAgICAg YXZfYnByaW50ZihicCwgIiUwMlgiLCB1YnVmW2ldKTsKPj4+ICB9Cj4+Pgo+Pj4gQEAgLTExMCw4 ICsxMDksNiBAQCBpbnQgYXZ0ZXh0X2NvbnRleHRfY2xvc2UoQVZUZXh0Rm9ybWF0Q29udGV4dAo+ PiAqKnB0Y3R4KQo+Pj4KPj4+ICAgICAgYXZfaGFzaF9mcmVlcCgmdGN0eC0+aGFzaCk7Cj4+Pgo+ Pj4gLSAgICBhdl9oYXNoX2ZyZWVwKCZ0Y3R4LT5oYXNoKTsKPj4+IC0KPj4+ICAgICAgaWYgKHRj dHgtPmZvcm1hdHRlci0+dW5pbml0KQo+Pj4gICAgICAgICAgdGN0eC0+Zm9ybWF0dGVyLT51bmlu aXQodGN0eCk7Cj4+PiAgICAgIGZvciAoaSA9IDA7IGkgPCBTRUNUSU9OX01BWF9OQl9MRVZFTFM7 IGkrKykKPj4+IEBAIC0xNDEsMTIgKzEzOCwxOCBAQCBpbnQgYXZ0ZXh0X2NvbnRleHRfb3BlbihB VlRleHRGb3JtYXRDb250ZXh0Cj4+ICoqcHRjdHgsCj4+PiAgICAgIEFWVGV4dEZvcm1hdENvbnRl eHQgKnRjdHg7Cj4+PiAgICAgIGludCBpLCByZXQgPSAwOwo+Pj4KPj4+IC0gICAgaWYgKCEodGN0 eCA9IGF2X21hbGxvY3ooc2l6ZW9mKEFWVGV4dEZvcm1hdENvbnRleHQpKSkpIHsKPj4+ICsgICAg aWYgKCFwdGN0eCB8fCAhZm9ybWF0dGVyKQo+Pj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsKPj4KPj4gQ2FuIHRoaXMgaGFwcGVuPwo+IAo+IHNlZSBiZWxvdwo+IAo+Pj4gKwo+Pj4g KyAgICBpZiAoIWZvcm1hdHRlci0+cHJpdl9zaXplICYmIGZvcm1hdHRlci0+cHJpdl9jbGFzcykK Pj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+Cj4+IFN0dWZmIGxpa2UgdGhp cyBzaG91bGQgbmV2ZXIgaGFwcGVuIGFuZCBzaG91bGQgbm90IGJlIGNoZWNrZWQgKG9yCj4+IGFj dHVhbGx5OiB0aGUgcHJvcGVyIHBsYWNlIHRvIGNoZWNrIHN0dWZmIGxpa2UgdGhpcyBpcyBpbiB0 ZXN0IHRvb2xzCj4+IGxpa2UgbGF2Yy90ZXN0cy9hdmNvZGVjLmMsIGJ1dCBJIGRvbid0IHRoaW5r IGl0IGlzIHdvcnRoIGl0IGZvcgo+PiBmZnRvb2xzKS4KPiAKPiBJIHByb2JhYmx5IG92ZXJkaWQg aXQgYSBiaXQgd2l0aCBjaGVja3MsIGJ1dCB0aGUgZ29hbCBmb3IgdGhpcyBBUEkgCj4gaXMgc3Rp bGwgdG8gYmVjb21lIHB1YmxpYyBhdCBzb21lIHBvaW50IChsaWtlIGluIGF2dXRpbCksIHNvIEkg Cj4gdHJpZWQgdG8gbW92ZSB0b3dhcmRzIHRoYXQgZGlyZWN0aW9uIGFscmVhZHkuCj4gCj4gCj4g Cj4gCj4+PiArCj4+PiArICAgIGlmICghKCh0Y3R4ID0gYXZfbWFsbG9jeihzaXplb2YoQVZUZXh0 Rm9ybWF0Q29udGV4dCkpKSkpIHsKPj4+ICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsK Pj4+ICAgICAgICAgIGdvdG8gZmFpbDsKPj4+ICAgICAgfQo+Pj4KPj4+IC0gICAgaWYgKCEodGN0 eC0+cHJpdiA9IGF2X21hbGxvY3ooZm9ybWF0dGVyLT5wcml2X3NpemUpKSkgewo+Pj4gKyAgICBp ZiAoZm9ybWF0dGVyLT5wcml2X3NpemUgJiYgISgodGN0eC0+cHJpdiA9Cj4+IGF2X21hbGxvY3oo Zm9ybWF0dGVyLT5wcml2X3NpemUpKSkpIHsKPj4+ICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5P TUVNKTsKPj4+ICAgICAgICAgIGdvdG8gZmFpbDsKPj4+ICAgICAgfQo+Pj4gQEAgLTIxNSwxNSAr MjE4LDE1IEBAIGludCBhdnRleHRfY29udGV4dF9vcGVuKEFWVGV4dEZvcm1hdENvbnRleHQKPj4g KipwdGN0eCwKPj4+Cj4+PiAgICAgIC8qIHZhbGlkYXRlIHJlcGxhY2Ugc3RyaW5nICovCj4+PiAg ICAgIHsKPj4+IC0gICAgICAgIGNvbnN0IHVpbnQ4X3QgKnAgPSB0Y3R4LT5zdHJpbmdfdmFsaWRh dGlvbl9yZXBsYWNlbWVudDsKPj4+IC0gICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVuZHAgPSBwICsg c3RybGVuKHApOwo+Pj4gKyAgICAgICAgY29uc3QgdWludDhfdCAqcCA9ICh1aW50OF90ICopdGN0 eC0KPj4+IHN0cmluZ192YWxpZGF0aW9uX3JlcGxhY2VtZW50Owo+Pj4gKyAgICAgICAgY29uc3Qg dWludDhfdCAqZW5kcCA9IHAgKyBzdHJsZW4oKGNvbnN0IGNoYXIgKilwKTsKPj4+ICAgICAgICAg IHdoaWxlICgqcCkgewo+Pj4gICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnAwID0gcDsKPj4+ ICAgICAgICAgICAgICBpbnQzMl90IGNvZGU7Cj4+PiAgICAgICAgICAgICAgcmV0ID0gYXZfdXRm OF9kZWNvZGUoJmNvZGUsICZwLCBlbmRwLCB0Y3R4LQo+Pj4gc3RyaW5nX3ZhbGlkYXRpb25fdXRm OF9mbGFncyk7Cj4+PiAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKPj4+ICAgICAgICAgICAg ICAgICAgQVZCUHJpbnQgYnA7Cj4+PiAtICAgICAgICAgICAgICAgIGF2X2JwcmludF9pbml0KCZi cCwgMCwgQVZfQlBSSU5UX1NJWkVfQVVUT01BVElDKTsKPj4+ICsgICAgICAgICAgICAgICAgYXZf YnByaW50X2luaXQoJmJwLCAwLCBBVl9CUFJJTlRfU0laRV9VTkxJTUlURUQpOwo+Pgo+PiBUaGlz IGFkZHMgYSBtZW1sZWFrIG9uIGRhdGEgd2hlcmUgaXQgbWFrZXMgYSBkaWZmZXJlbmNlLgo+IAo+ IFdoeT8gVGhlIHN0cmluZ192YWxpZGF0aW9uX3JlcGxhY2VtZW50IHN0cmluZyBzaG91bGQgYmUg c2hvcnQgZW5vdWdoCj4gdG8gZml0IGludG8gdGhlIHN0YWNrLWFsbG9jYXRlZCBtZW1vcnksIG5v Pwo+IAo+IAo+Pj4gICAgICAgICAgICAgICAgICBicHJpbnRfYnl0ZXMoJmJwLCBwMCwgcCAtIHAw KSwKPj4+ICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyh0Y3R4LCBBVl9MT0dfRVJST1IsCj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgVVRGOCBzZXF1ZW5jZSAlcyBm b3VuZCBpbgo+PiBzdHJpbmcgdmFsaWRhdGlvbiByZXBsYWNlICclcydcbiIsCj4+PiBAQCAtMjU5 LDYgKzI2Miw5IEBAIHN0YXRpYyBjb25zdCBjaGFyIHVuaXRfYml0X3Blcl9zZWNvbmRfc3RyW10g PQo+PiAiYml0L3MiOwo+Pj4KPj4+ICB2b2lkIGF2dGV4dF9wcmludF9zZWN0aW9uX2hlYWRlcihB VlRleHRGb3JtYXRDb250ZXh0ICp0Y3R4LCBjb25zdAo+PiB2b2lkICpkYXRhLCBpbnQgc2VjdGlv bl9pZCkKPj4+ICB7Cj4+PiArICAgIGlmICghdGN0eCB8fCBzZWN0aW9uX2lkIDwgMCB8fCBzZWN0 aW9uX2lkID49IHRjdHgtPm5iX3NlY3Rpb25zKQo+Pj4gKyAgICAgICAgcmV0dXJuOwo+Pgo+PiBD YW4gdGhpcyBoYXBwZW4/Cj4gCj4gRm9yIGEgcHVibGljIEFQSSAtIG1hbnkgdGhpbmdzIGNhbiBo YXBwZW4uLi4KPiAKPiAKPj4+ICAgICAgdGN0eC0+bGV2ZWwrKzsKPj4+ICAgICAgYXZfYXNzZXJ0 MCh0Y3R4LT5sZXZlbCA8IFNFQ1RJT05fTUFYX05CX0xFVkVMUyk7Cj4+Pgo+Pj4gQEAgLTI3Miw2 ICsyNzgsOSBAQCB2b2lkCj4+IGF2dGV4dF9wcmludF9zZWN0aW9uX2hlYWRlcihBVlRleHRGb3Jt YXRDb250ZXh0ICp0Y3R4LCBjb25zdCB2b2lkCj4+ICpkYXRhLCBpbgo+Pj4KPj4+ICB2b2lkIGF2 dGV4dF9wcmludF9zZWN0aW9uX2Zvb3RlcihBVlRleHRGb3JtYXRDb250ZXh0ICp0Y3R4KQo+Pj4g IHsKPj4+ICsgICAgaWYgKCF0Y3R4IHx8IHRjdHgtPmxldmVsIDwgMCB8fCB0Y3R4LT5sZXZlbCA+ PQo+PiBTRUNUSU9OX01BWF9OQl9MRVZFTFMpCj4+PiArICAgICAgICByZXR1cm47Cj4+Cj4+IENh biB0aGlzIGhhcHBlbj8KPiAKPiBZZXMgLSB3aGVuIHNvbWV3aGVyZSBpbiBGRm1wZWcgc29tZSBv dXRwdXQgaXMgY2hhbmdlZCB3aXRob3V0IHRoaW5raW5nCj4gYWJvdXQgdGhhdCB0aGVyZSdzIGEg bmVzdGluZyBsaW1pdCBvZiBTRUNUSU9OX01BWF9OQl9MRVZFTFMuCj4gRXZlbiB3aGVuIG9ubHkg MiBvciAzIHNlY3Rpb24gdHlwZXMgYXJlIGRlZmluZWQsIHRoZSBsZXZlbCBjYW4gZ28gYmV5b25k Cj4gdGhhdCB2YWx1ZS4KPiAKPiAKPj4KPj4+ICsKPj4+ICAgICAgaW50IHNlY3Rpb25faWQgPSB0 Y3R4LT5zZWN0aW9uW3RjdHgtPmxldmVsXS0+aWQ7Cj4+PiAgICAgIGludCBwYXJlbnRfc2VjdGlv bl9pZCA9IHRjdHgtPmxldmVsCj4+PiAgICAgICAgICA/IHRjdHgtPnNlY3Rpb25bdGN0eC0+bGV2 ZWwgLSAxXS0+aWQKPj4+IEBAIC0yODksNyArMjk4LDEyIEBAIHZvaWQKPj4gYXZ0ZXh0X3ByaW50 X3NlY3Rpb25fZm9vdGVyKEFWVGV4dEZvcm1hdENvbnRleHQgKnRjdHgpCj4+Pgo+Pj4gIHZvaWQg YXZ0ZXh0X3ByaW50X2ludGVnZXIoQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwgY29uc3QgY2hh cgo+PiAqa2V5LCBpbnQ2NF90IHZhbCkKPj4+ICB7Cj4+PiAtICAgIGNvbnN0IHN0cnVjdCBBVlRl eHRGb3JtYXRTZWN0aW9uICpzZWN0aW9uID0gdGN0eC0+c2VjdGlvblt0Y3R4LQo+Pj4gbGV2ZWxd Owo+Pj4gKyAgICBjb25zdCBBVlRleHRGb3JtYXRTZWN0aW9uICpzZWN0aW9uOwo+Pj4gKwo+Pj4g KyAgICBpZiAoIXRjdHggfHwgIWtleSB8fCB0Y3R4LT5sZXZlbCA8IDAgfHwgdGN0eC0+bGV2ZWwg Pj0KPj4gU0VDVElPTl9NQVhfTkJfTEVWRUxTKQo+Pj4gKyAgICAgICAgcmV0dXJuOwo+Pgo+PiBD YW4gdGhpcyBoYXBwZW4/Cj4gCj4gCj4gc2VlIGFib3ZlCj4gCj4gCj4+Cj4+PiArCj4+PiArICAg IHNlY3Rpb24gPSB0Y3R4LT5zZWN0aW9uW3RjdHgtPmxldmVsXTsKPj4+Cj4+PiAgICAgIGlmIChz ZWN0aW9uLT5zaG93X2FsbF9lbnRyaWVzIHx8IGF2X2RpY3RfZ2V0KHNlY3Rpb24tCj4+PiBlbnRy aWVzX3RvX3Nob3csIGtleSwgTlVMTCwgMCkpIHsKPj4+ICAgICAgICAgIHRjdHgtPmZvcm1hdHRl ci0+cHJpbnRfaW50ZWdlcih0Y3R4LCBrZXksIHZhbCk7Cj4+PiBAQCAtMjk5LDI0ICszMTMsMjgg QEAgdm9pZCBhdnRleHRfcHJpbnRfaW50ZWdlcihBVlRleHRGb3JtYXRDb250ZXh0Cj4+ICp0Y3R4 LCBjb25zdCBjaGFyICprZXksIGludDY0X3QgdmEKPj4+Cj4+PiAgc3RhdGljIGlubGluZSBpbnQg dmFsaWRhdGVfc3RyaW5nKEFWVGV4dEZvcm1hdENvbnRleHQgKnRjdHgsIGNoYXIKPj4gKipkc3Rw LCBjb25zdCBjaGFyICpzcmMpCj4+PiAgewo+Pj4gLSAgICBjb25zdCB1aW50OF90ICpwLCAqZW5k cDsKPj4+ICsgICAgY29uc3QgdWludDhfdCAqcCwgKmVuZHAsICpzcmNwID0gKGNvbnN0IHVpbnQ4 X3QgKilzcmM7Cj4+PiAgICAgIEFWQlByaW50IGRzdGJ1ZjsKPj4+ICsgICAgQVZCUHJpbnQgYnA7 Cj4+PiAgICAgIGludCBpbnZhbGlkX2NoYXJzX25iID0gMCwgcmV0ID0gMDsKPj4+Cj4+PiArICAg IGlmICghdGN0eCB8fCAhZHN0cCB8fCAhc3JjKQo+Pj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKPj4+ICsKPj4KPj4gQ2FuIHRoaXMgaGFwcGVuPwo+Pgo+Pj4gKyAgICAqZHN0cCA9 IE5VTEw7Cj4+PiAgICAgIGF2X2JwcmludF9pbml0KCZkc3RidWYsIDAsIEFWX0JQUklOVF9TSVpF X1VOTElNSVRFRCk7Cj4+PiArICAgIGF2X2JwcmludF9pbml0KCZicCwgMCwgQVZfQlBSSU5UX1NJ WkVfVU5MSU1JVEVEKTsKPj4+Cj4+PiAtICAgIGVuZHAgPSBzcmMgKyBzdHJsZW4oc3JjKTsKPj4+ IC0gICAgZm9yIChwID0gc3JjOyAqcDspIHsKPj4+IC0gICAgICAgIHVpbnQzMl90IGNvZGU7Cj4+ PiArICAgIGVuZHAgPSBzcmNwICsgc3RybGVuKHNyYyk7Cj4+PiArICAgIGZvciAocCA9IHNyY3A7 ICpwOykgewo+Pj4gKyAgICAgICAgaW50MzJfdCBjb2RlOwo+Pj4gICAgICAgICAgaW50IGludmFs aWQgPSAwOwo+Pj4gICAgICAgICAgY29uc3QgdWludDhfdCAqcDAgPSBwOwo+Pj4KPj4+ICAgICAg ICAgIGlmIChhdl91dGY4X2RlY29kZSgmY29kZSwgJnAsIGVuZHAsIHRjdHgtCj4+PiBzdHJpbmdf dmFsaWRhdGlvbl91dGY4X2ZsYWdzKSA8IDApIHsKPj4+IC0gICAgICAgICAgICBBVkJQcmludCBi cDsKPj4+IC0gICAgICAgICAgICBhdl9icHJpbnRfaW5pdCgmYnAsIDAsIEFWX0JQUklOVF9TSVpF X0FVVE9NQVRJQyk7Cj4+PiAtICAgICAgICAgICAgYnByaW50X2J5dGVzKCZicCwgcDAsIHAtcDAp Owo+Pj4gLSAgICAgICAgICAgIGF2X2xvZyh0Y3R4LCBBVl9MT0dfREVCVUcsCj4+PiAtICAgICAg ICAgICAgICAgICAgICJJbnZhbGlkIFVURi04IHNlcXVlbmNlICVzIGZvdW5kIGluIHN0cmluZwo+ PiAnJXMnXG4iLCBicC5zdHIsIHNyYyk7Cj4+PiArICAgICAgICAgICAgYXZfYnByaW50X2NsZWFy KCZicCk7Cj4+PiArICAgICAgICAgICAgYnByaW50X2J5dGVzKCZicCwgcDAsIHAgLSBwMCk7Cj4+ PiArICAgICAgICAgICAgYXZfbG9nKHRjdHgsIEFWX0xPR19ERUJVRywgIkludmFsaWQgVVRGLTgg c2VxdWVuY2UgJXMKPj4gZm91bmQgaW4gc3RyaW5nICclcydcbiIsIGJwLnN0ciwgc3JjKTsKPj4+ ICAgICAgICAgICAgICBpbnZhbGlkID0gMTsKPj4+ICAgICAgICAgIH0KPj4+Cj4+PiBAQCAtMzM2 LDcgKzM1NCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50Cj4+IHZhbGlkYXRlX3N0cmluZyhBVlRleHRG b3JtYXRDb250ZXh0ICp0Y3R4LCBjaGFyICoqZHN0cCwgY29uc3QKPj4+ICAgICAgICAgIH0KPj4+ Cj4+PiAgICAgICAgICBpZiAoIWludmFsaWQgfHwgdGN0eC0+c3RyaW5nX3ZhbGlkYXRpb24gPT0K Pj4gQVZfVEVYVEZPUk1BVF9TVFJJTkdfVkFMSURBVElPTl9JR05PUkUpCj4+PiAtICAgICAgICAg ICAgYXZfYnByaW50X2FwcGVuZF9kYXRhKCZkc3RidWYsIHAwLCBwLXAwKTsKPj4+ICsgICAgICAg ICAgICBhdl9icHJpbnRfYXBwZW5kX2RhdGEoJmRzdGJ1ZiwgKGNvbnN0IGNoYXIgKilwMCwgcCAt Cj4+IHAwKTsKPj4+ICAgICAgfQo+Pj4KPj4+ICAgICAgaWYgKGludmFsaWRfY2hhcnNfbmIgJiYg dGN0eC0+c3RyaW5nX3ZhbGlkYXRpb24gPT0KPj4gQVZfVEVYVEZPUk1BVF9TVFJJTkdfVkFMSURB VElPTl9SRVBMQUNFKQo+Pj4gQEAgLTM0Niw2ICszNjQsNyBAQCBzdGF0aWMgaW5saW5lIGludAo+ PiB2YWxpZGF0ZV9zdHJpbmcoQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwgY2hhciAqKmRzdHAs IGNvbnN0Cj4+Pgo+Pj4gIGVuZDoKPj4+ICAgICAgYXZfYnByaW50X2ZpbmFsaXplKCZkc3RidWYs IGRzdHApOwo+Pj4gKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmJwLCBOVUxMKTsKPj4+ICAgICAg cmV0dXJuIHJldDsKPj4+ICB9Cj4+Pgo+Pj4gQEAgLTM1OCwxNyArMzc3LDE4IEBAIHN0cnVjdCB1 bml0X3ZhbHVlIHsKPj4+ICAgICAgY29uc3QgY2hhciAqdW5pdDsKPj4+ICB9Owo+Pj4KPj4+IC1z dGF0aWMgY2hhciAqdmFsdWVfc3RyaW5nKEFWVGV4dEZvcm1hdENvbnRleHQgKnRjdHgsIGNoYXIg KmJ1ZiwgaW50Cj4+IGJ1Zl9zaXplLCBzdHJ1Y3QgdW5pdF92YWx1ZSB1dikKPj4+ICtzdGF0aWMg Y2hhciAqdmFsdWVfc3RyaW5nKGNvbnN0IEFWVGV4dEZvcm1hdENvbnRleHQgKnRjdHgsIGNoYXIK Pj4gKmJ1ZiwgaW50IGJ1Zl9zaXplLCBzdHJ1Y3QgdW5pdF92YWx1ZSB1dikKPj4+ICB7Cj4+PiAg ICAgIGRvdWJsZSB2YWxkOwo+Pj4gLSAgICBpbnQ2NF90IHZhbGk7Cj4+PiArICAgIGludDY0X3Qg dmFsaSA9IDA7Cj4+PiAgICAgIGludCBzaG93X2Zsb2F0ID0gMDsKPj4+Cj4+PiAgICAgIGlmICh1 di51bml0ID09IHVuaXRfc2Vjb25kX3N0cikgewo+Pj4gICAgICAgICAgdmFsZCA9IHV2LnZhbC5k Owo+Pj4gICAgICAgICAgc2hvd19mbG9hdCA9IDE7Cj4+PiAgICAgIH0gZWxzZSB7Cj4+PiAtICAg ICAgICB2YWxkID0gdmFsaSA9IHV2LnZhbC5pOwo+Pj4gKyAgICAgICAgdmFsZCA9IChkb3VibGUp dXYudmFsLmk7Cj4+PiArICAgICAgICB2YWxpID0gdXYudmFsLmk7Cj4+PiAgICAgIH0KPj4+Cj4+ PiAgICAgIGlmICh1di51bml0ID09IHVuaXRfc2Vjb25kX3N0ciAmJiB0Y3R4LQo+Pj4gdXNlX3Zh bHVlX3NleGFnZXNpbWFsX2Zvcm1hdCkgewo+Pj4gQEAgLTM4NywxNyArNDA3LDE3IEBAIHN0YXRp YyBjaGFyICp2YWx1ZV9zdHJpbmcoQVZUZXh0Rm9ybWF0Q29udGV4dAo+PiAqdGN0eCwgY2hhciAq YnVmLCBpbnQgYnVmX3NpemUsIHN0Cj4+PiAgICAgICAgICAgICAgaW50NjRfdCBpbmRleDsKPj4+ Cj4+PiAgICAgICAgICAgICAgaWYgKHV2LnVuaXQgPT0gdW5pdF9ieXRlX3N0ciAmJiB0Y3R4LQo+ Pj4gdXNlX2J5dGVfdmFsdWVfYmluYXJ5X3ByZWZpeCkgewo+Pj4gLSAgICAgICAgICAgICAgICBp bmRleCA9IChpbnQ2NF90KSAobG9nMih2YWxkKSkgLyAxMDsKPj4+IC0gICAgICAgICAgICAgICAg aW5kZXggPSBhdl9jbGlwKGluZGV4LCAwLAo+PiBGRl9BUlJBWV9FTEVNUyhzaV9wcmVmaXhlcykg LSAxKTsKPj4+ICsgICAgICAgICAgICAgICAgaW5kZXggPSAoaW50NjRfdCkobG9nMih2YWxkKSAv IDEwKTsKPj4+ICsgICAgICAgICAgICAgICAgaW5kZXggPSBhdl9jbGlwNjQoaW5kZXgsIDAsCj4+ IEZGX0FSUkFZX0VMRU1TKHNpX3ByZWZpeGVzKSAtIDEpOwo+Pj4gICAgICAgICAgICAgICAgICB2 YWxkIC89IHNpX3ByZWZpeGVzW2luZGV4XS5iaW5fdmFsOwo+Pj4gICAgICAgICAgICAgICAgICBw cmVmaXhfc3RyaW5nID0gc2lfcHJlZml4ZXNbaW5kZXhdLmJpbl9zdHI7Cj4+PiAgICAgICAgICAg ICAgfSBlbHNlIHsKPj4+IC0gICAgICAgICAgICAgICAgaW5kZXggPSAoaW50NjRfdCkgKGxvZzEw KHZhbGQpKSAvIDM7Cj4+PiAtICAgICAgICAgICAgICAgIGluZGV4ID0gYXZfY2xpcChpbmRleCwg MCwKPj4gRkZfQVJSQVlfRUxFTVMoc2lfcHJlZml4ZXMpIC0gMSk7Cj4+PiArICAgICAgICAgICAg ICAgIGluZGV4ID0gKGludDY0X3QpKGxvZzEwKHZhbGQpIC8gMyk7Cj4+PiArICAgICAgICAgICAg ICAgIGluZGV4ID0gYXZfY2xpcDY0KGluZGV4LCAwLAo+PiBGRl9BUlJBWV9FTEVNUyhzaV9wcmVm aXhlcykgLSAxKTsKPj4+ICAgICAgICAgICAgICAgICAgdmFsZCAvPSBzaV9wcmVmaXhlc1tpbmRl eF0uZGVjX3ZhbDsKPj4+ICAgICAgICAgICAgICAgICAgcHJlZml4X3N0cmluZyA9IHNpX3ByZWZp eGVzW2luZGV4XS5kZWNfc3RyOwo+Pj4gICAgICAgICAgICAgIH0KPj4+IC0gICAgICAgICAgICB2 YWxpID0gdmFsZDsKPj4+ICsgICAgICAgICAgICB2YWxpID0gKGludDY0X3QpdmFsZDsKPj4+ICAg ICAgICAgIH0KPj4+Cj4+PiAgICAgICAgICBpZiAoc2hvd19mbG9hdCB8fCAodGN0eC0+dXNlX3Zh bHVlX3ByZWZpeCAmJiB2YWxkICE9Cj4+IChpbnQ2NF90KXZhbGQpKQo+Pj4gQEAgLTQyNSw5ICs0 NDUsMTQgQEAgdm9pZCBhdnRleHRfcHJpbnRfdW5pdF9pbnQoQVZUZXh0Rm9ybWF0Q29udGV4dAo+ PiAqdGN0eCwgY29uc3QgY2hhciAqa2V5LCBpbnQgdmFsdWUKPj4+Cj4+PiAgaW50IGF2dGV4dF9w cmludF9zdHJpbmcoQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwgY29uc3QgY2hhciAqa2V5LAo+ PiBjb25zdCBjaGFyICp2YWwsIGludCBmbGFncykKPj4+ICB7Cj4+PiAtICAgIGNvbnN0IHN0cnVj dCBBVlRleHRGb3JtYXRTZWN0aW9uICpzZWN0aW9uID0gdGN0eC0+c2VjdGlvblt0Y3R4LQo+Pj4g bGV2ZWxdOwo+Pj4gKyAgICBjb25zdCBBVlRleHRGb3JtYXRTZWN0aW9uICpzZWN0aW9uOwo+Pj4g ICAgICBpbnQgcmV0ID0gMDsKPj4+Cj4+PiArICAgIGlmICghdGN0eCB8fCAha2V5IHx8ICF2YWwg fHwgdGN0eC0+bGV2ZWwgPCAwIHx8IHRjdHgtPmxldmVsID49Cj4+IFNFQ1RJT05fTUFYX05CX0xF VkVMUykKPj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+Cj4+IENhbiB0aGlz IGhhcHBlbj8KPj4KPj4+ICsKPj4+ICsgICAgc2VjdGlvbiA9IHRjdHgtPnNlY3Rpb25bdGN0eC0+ bGV2ZWxdOwo+Pj4gKwo+Pj4gICAgICBpZiAodGN0eC0+c2hvd19vcHRpb25hbF9maWVsZHMgPT0g U0hPV19PUFRJT05BTF9GSUVMRFNfTkVWRVIgfHwKPj4+ICAgICAgICAgICh0Y3R4LT5zaG93X29w dGlvbmFsX2ZpZWxkcyA9PSBTSE9XX09QVElPTkFMX0ZJRUxEU19BVVRPCj4+PiAgICAgICAgICAg ICAgJiYgKGZsYWdzICYgQVZfVEVYVEZPUk1BVF9QUklOVF9TVFJJTkdfT1BUSU9OQUwpCj4+PiBA QCAtNDYyLDcgKzQ4Nyw3IEBAIGludCBhdnRleHRfcHJpbnRfc3RyaW5nKEFWVGV4dEZvcm1hdENv bnRleHQKPj4gKnRjdHgsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqCj4+PiAgdm9pZCBh dnRleHRfcHJpbnRfcmF0aW9uYWwoQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwgY29uc3QgY2hh cgo+PiAqa2V5LCBBVlJhdGlvbmFsIHEsIGNoYXIgc2VwKQo+Pj4gIHsKPj4+ICAgICAgQVZCUHJp bnQgYnVmOwo+Pj4gLSAgICBhdl9icHJpbnRfaW5pdCgmYnVmLCAwLCBBVl9CUFJJTlRfU0laRV9B VVRPTUFUSUMpOwo+Pj4gKyAgICBhdl9icHJpbnRfaW5pdCgmYnVmLCAwLCBBVl9CUFJJTlRfU0la RV9VTkxJTUlURUQpOwo+Pgo+PiBUaGlzIGlzIHN0cmljdGx5IHdvcnNlIHRoYW4gd2hhdCB3YXMg aGVyZSBiZWZvcmU6IFdpdGggVU5MSU1JVEVEIHlvdQo+PiB3b3VsZCBoYXZlIGEgbWVtbGVhayBp biBjYXNlIHRoZSBpbnRlcm5hbCBidWZmZXIgd291bGRuJ3Qgc3VmZmljZS4KPj4gKEJ1dCBhbnl3 YXksIHRoaXMgc2hvdWxkIHVzZSBzbnByaW50Zi4gSSBqdXN0IHNlbnQgYSBwYXRjaCBmb3IgdGhp cy4pCj4gCj4gVG8gYmUgaG9uZXN0LCBJIGRvbid0IHNlZSBtdWNoIHZhbHVlIGluIEFWX0JQUklO VF9TSVpFX0FVVE9NQVRJQy4KPiBXaGVuIEkgd291bGQgbmVlZCB0byBjaGVjayB0aGUgcmV0dXJu IHZhbHVlcyBvZiBhbGwgYnByaW50IG9wZXJhdGlvbnMsCj4gYWxsIHRoZSBjb252ZW5pZW5jZSB3 b3VsZCBnbyBvdmVyIGJvYXJkIGluc3RhbnRseS4gVXNpbmcgCj4gQVZfQlBSSU5UX1NJWkVfQVVU T01BVElDIHdpdGhvdXQgcmV0dXJuIHZhbHVlIGNoZWNraW5nIGlzIGVycm9yLXByb25lCj4gYW5k IGNhbiBjYXVzZSBlcnJvcnMgd2hpY2ggbWlnaHQgYmUgaGFyZCB0byBpZGVudGlmeS4KPiBPbiB0 aGUgb3RoZXIgc2lkZSwgaWRlbnRpZnlpbmcgcGxhY2VzIGluIGNvZGUgd2hlcmUgQVZfQlBSSU5U X1NJWkVfVU5MSU1JVEVECj4gaXMgdXNlZCBhbmQgZmluYWxpemUgaXMgbmVlZGVkIGlzIGEgbG90 IGVhc2llciBhbmQgZG9lc24ndCBldmVuIG5lZWQKPiBhIHNwZWNpZmljIGNhc2UgYW5kL29yIGRl YnVnZ2luZyB0byBmaW5kIG91dC4KPiAKPiBJbiB0aGUgd29yc3QgY2FzZSwgSSdkIHN0aWxsIHBy ZWZlciBhIG1lbW9yeSBsZWFrIG92ZXIgaW5jb3JyZWN0IAo+IGJlaGF2aW9yIChvciB3ZWxsIC0g YWx3YXlzIGRlcGVuZHMgb24gdGhlIGNhc2UpLiBCeSB0aGF0IEkgZG9uJ3QgbWVhbiAKPiBlcnJv cnMgdGhhdCBhcmUgcmVwb3J0ZWQgYW5kIGNhdXNpbmcgZmFpbHVyZSBidXQgdGhvc2UgdGhpbmdz IHRoYXQgYXJlCj4gZmFpbGluZyBzaWxlbnRseSBhbmQgYXJlIGhhcmQgdG8gbm90aWNlIG9yIHRy YWNlIGJhY2sgd2hlbiBub3RpY2luZy4KPiAKPiBTdXJlbHkgb3RoZXJzIG1heSBzZWUgaXQgZGlm ZmVyZW50bHkuCj4gCj4gCj4gCj4+Cj4+PiAgICAgIGF2X2JwcmludGYoJmJ1ZiwgIiVkJWMlZCIs IHEubnVtLCBzZXAsIHEuZGVuKTsKPj4+ICAgICAgYXZ0ZXh0X3ByaW50X3N0cmluZyh0Y3R4LCBr ZXksIGJ1Zi5zdHIsIDApOwo+Pj4gIH0KPj4+IEBAIC00NzAsMTIgKzQ5NSwxMSBAQCB2b2lkIGF2 dGV4dF9wcmludF9yYXRpb25hbChBVlRleHRGb3JtYXRDb250ZXh0Cj4+ICp0Y3R4LCBjb25zdCBj aGFyICprZXksIEFWUmF0aW9uYQo+Pj4gIHZvaWQgYXZ0ZXh0X3ByaW50X3RpbWUoQVZUZXh0Rm9y bWF0Q29udGV4dCAqdGN0eCwgY29uc3QgY2hhciAqa2V5LAo+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgaW50NjRfdCB0cywgY29uc3QgQVZSYXRpb25hbCAqdGltZV9iYXNlLCBpbnQKPj4gaXNf ZHVyYXRpb24pCj4+PiAgewo+Pj4gLSAgICBjaGFyIGJ1ZlsxMjhdOwo+Pj4gLQo+Pj4gICAgICBp ZiAoKCFpc19kdXJhdGlvbiAmJiB0cyA9PSBBVl9OT1BUU19WQUxVRSkgfHwgKGlzX2R1cmF0aW9u ICYmCj4+IHRzID09IDApKSB7Cj4+PiAgICAgICAgICBhdnRleHRfcHJpbnRfc3RyaW5nKHRjdHgs IGtleSwgIk4vQSIsCj4+IEFWX1RFWFRGT1JNQVRfUFJJTlRfU1RSSU5HX09QVElPTkFMKTsKPj4+ ICAgICAgfSBlbHNlIHsKPj4+IC0gICAgICAgIGRvdWJsZSBkID0gdHMgKiBhdl9xMmQoKnRpbWVf YmFzZSk7Cj4+PiArICAgICAgICBjaGFyIGJ1ZlsxMjhdOwo+Pj4gKyAgICAgICAgZG91YmxlIGQg PSBhdl9xMmQoKnRpbWVfYmFzZSkgKiAoZG91YmxlKXRzOwo+Pgo+PiBXZSBhY3R1YWxseSB0cnkg dG8gYXZvaWQgZXhwbGljaXQgY2FzdHMgd2hlcmUgcG9zc2libGUuCj4gCj4gCj4gSSdsbCBhbnN3 ZXIgdGhhdCBzZXBhcmF0ZWx5Lgo+IAo+IAo+IAo+Pj4gICAgICAgICAgc3RydWN0IHVuaXRfdmFs dWUgdXY7Cj4+PiAgICAgICAgICB1di52YWwuZCA9IGQ7Cj4+PiAgICAgICAgICB1di51bml0ID0g dW5pdF9zZWNvbmRfc3RyOwo+Pj4gQEAgLTQ5Niw3ICs1MjAsOCBAQCB2b2lkIGF2dGV4dF9wcmlu dF9kYXRhKEFWVGV4dEZvcm1hdENvbnRleHQKPj4gKnRjdHgsIGNvbnN0IGNoYXIgKm5hbWUsCj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBpbnQgc2l6ZSkK Pj4+ICB7Cj4+PiAgICAgIEFWQlByaW50IGJwOwo+Pj4gLSAgICBpbnQgb2Zmc2V0ID0gMCwgbCwg aTsKPj4+ICsgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKPj4+ICsgICAgaW50IGwsIGk7Cj4+Pgo+ Pj4gICAgICBhdl9icHJpbnRfaW5pdCgmYnAsIDAsIEFWX0JQUklOVF9TSVpFX1VOTElNSVRFRCk7 Cj4+PiAgICAgIGF2X2JwcmludGYoJmJwLCAiXG4iKTsKPj4+IEBAIC01MjMsMjUgKzU0OCwyOSBA QCB2b2lkIGF2dGV4dF9wcmludF9kYXRhKEFWVGV4dEZvcm1hdENvbnRleHQKPj4gKnRjdHgsIGNv bnN0IGNoYXIgKm5hbWUsCj4+PiAgdm9pZCBhdnRleHRfcHJpbnRfZGF0YV9oYXNoKEFWVGV4dEZv cm1hdENvbnRleHQgKnRjdHgsIGNvbnN0IGNoYXIKPj4gKm5hbWUsCj4+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIGludCBzaXplKQo+Pj4gIHsKPj4+ IC0gICAgY2hhciAqcCwgYnVmW0FWX0hBU0hfTUFYX1NJWkUgKiAyICsgNjRdID0geyAwIH07Cj4+ PiArICAgIGNoYXIgYnVmW0FWX0hBU0hfTUFYX1NJWkUgKiAyICsgNjRdID0geyAwIH07Cj4+PiAr ICAgIGludCBsZW47Cj4+Pgo+Pj4gICAgICBpZiAoIXRjdHgtPmhhc2gpCj4+PiAgICAgICAgICBy ZXR1cm47Cj4+Pgo+Pj4gICAgICBhdl9oYXNoX2luaXQodGN0eC0+aGFzaCk7Cj4+PiAgICAgIGF2 X2hhc2hfdXBkYXRlKHRjdHgtPmhhc2gsIGRhdGEsIHNpemUpOwo+Pj4gLSAgICBzbnByaW50Zihi dWYsIHNpemVvZihidWYpLCAiJXM6IiwgYXZfaGFzaF9nZXRfbmFtZSh0Y3R4LQo+Pj4gaGFzaCkp Owo+Pj4gLSAgICBwID0gYnVmICsgc3RybGVuKGJ1Zik7Cj4+PiAtICAgIGF2X2hhc2hfZmluYWxf aGV4KHRjdHgtPmhhc2gsIHAsIGJ1ZiArIHNpemVvZihidWYpIC0gcCk7Cj4+PiArICAgIGxlbiA9 IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlczoiLCBhdl9oYXNoX2dldF9uYW1lKHRjdHgt Cj4+PiBoYXNoKSk7Cj4+PiArICAgIGF2X2hhc2hfZmluYWxfaGV4KHRjdHgtPmhhc2gsICh1aW50 OF90ICopJmJ1ZltsZW5dLAo+PiAoaW50KXNpemVvZihidWYpIC0gbGVuKTsKPj4KPj4gSXMgaXQg Z3VhcmFudGVlZCB0aGF0IHRoZSBvdXRwdXQgb2Ygc25wcmludGYoKSBpcyBub3QgdHJ1bmNhdGVk Pwo+IAo+IE1BWF9IQVNIX05BTUVfU0laRSBpcyAxMSBhbmQgQVZfSEFTSF9NQVhfU0laRSA2NCwg bWFrZSAxOTIgLSAxMSA+IDAKPiAKPiAKPj4KPj4+ICAgICAgYXZ0ZXh0X3ByaW50X3N0cmluZyh0 Y3R4LCBuYW1lLCBidWYsIDApOwo+Pj4gIH0KPj4+Cj4+PiAgdm9pZCBhdnRleHRfcHJpbnRfaW50 ZWdlcnMoQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwgY29uc3QgY2hhcgo+PiAqbmFtZSwKPj4+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgaW50IHNp emUsIGNvbnN0Cj4+IGNoYXIgKmZvcm1hdCwKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGNvbHVtbnMsIGludCBieXRlcywgaW50Cj4+IG9mZnNldF9hZGQpCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgaW50IHNpemUsIGNvbnN0 IGNoYXIKPj4gKmZvcm1hdCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29s dW1ucywgaW50IGJ5dGVzLCBpbnQgb2Zmc2V0X2FkZCkKPj4+ICB7Cj4+PiAgICAgIEFWQlByaW50 IGJwOwo+Pj4gLSAgICBpbnQgb2Zmc2V0ID0gMCwgbCwgaTsKPj4+ICsgICAgdW5zaWduZWQgb2Zm c2V0ID0gMDsKPj4+ICsgICAgaW50IGwsIGk7Cj4+PiArCj4+PiArICAgIGlmICghbmFtZSB8fCAh ZGF0YSB8fCAhZm9ybWF0IHx8IGNvbHVtbnMgPD0gMCB8fCBieXRlcyA8PSAwKQo+Pj4gKyAgICAg ICAgcmV0dXJuOwo+Pgo+PiBDYW4gdGhpcyBoYXBwZW4/Cj4gCj4gU3VyZSwgYXMgYSBwdWJsaWMg QVBJLiBPZiBjb3Vyc2UsIG9uZSBjYW4gc3BlbmQgdGltZSwgdHJ5aW5nIHRvIGRldGVybWluZQo+ IHdoaWNoIGNvbmRpdGlvbnMgYXJlIHJlYWxpc3RpY2FsbHkgcG9zc2libGUgb3Igbm90LiBCdXQg dGhhdCBpbnRyb2R1Y2VzCj4gcG90ZW50aWFsIG9mIGh1bWFuIGVycm9yLCBzbyAtIHVubGVzcyBp dCdzIGEgcmVhbGx5IGhvdCBwYXRoLCBvbmUgY2hlY2sKPiB0byBtYW55IGlzIGJldHRlciB0aGFu IG9uZSB0b28gbGVzcy4KPiAKPiAKPj4KPj4+Cj4+PiAgICAgIGF2X2JwcmludF9pbml0KCZicCwg MCwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsKPj4+ICAgICAgYXZfYnByaW50ZigmYnAsICJc biIpOwo+Pj4gQEAgLTYwNywxMiArNjM2LDE4IEBAIGludAo+PiBhdnRleHR3cml0ZXJfY29udGV4 dF9vcGVuKEFWVGV4dFdyaXRlckNvbnRleHQgKipwd2N0eCwgY29uc3QKPj4gQVZUZXh0V3JpdGVy ICp3Cj4+PiAgICAgIEFWVGV4dFdyaXRlckNvbnRleHQgKndjdHg7Cj4+PiAgICAgIGludCByZXQg PSAwOwo+Pj4KPj4+IC0gICAgaWYgKCEod2N0eCA9IGF2X21hbGxvY3ooc2l6ZW9mKEFWVGV4dFdy aXRlckNvbnRleHQpKSkpIHsKPj4+ICsgICAgaWYgKCFwd2N0eCB8fCAhd3JpdGVyKQo+Pj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4+ICsKPj4+ICsgICAgaWYgKCF3cml0ZXIt PnByaXZfc2l6ZSAmJiB3cml0ZXItPnByaXZfY2xhc3MpCj4+Cj4+IFN0dWZmIGxpa2UgdGhpcyBz aG91bGQgbmV2ZXIgaGFwcGVuIGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBiZQo+PiBjaGVja2Vk Lgo+IAo+IE9LLgo+IAo+Pgo+Pj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4+ ICsKPj4+ICsgICAgaWYgKCEoKHdjdHggPSBhdl9tYWxsb2N6KHNpemVvZihBVlRleHRXcml0ZXJD b250ZXh0KSkpKSkgewo+Pj4gICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+Pj4gICAg ICAgICAgZ290byBmYWlsOwo+Pj4gICAgICB9Cj4+Pgo+Pj4gLSAgICBpZiAoISh3Y3R4LT5wcml2 ID0gYXZfbWFsbG9jeih3cml0ZXItPnByaXZfc2l6ZSkpKSB7Cj4+PiArICAgIGlmICh3cml0ZXIt PnByaXZfc2l6ZSAmJiAhKCh3Y3R4LT5wcml2ID0gYXZfbWFsbG9jeih3cml0ZXItCj4+PiBwcml2 X3NpemUpKSkpIHsKPj4+ICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPj4+ICAgICAg ICAgIGdvdG8gZmFpbDsKPj4+ICAgICAgfQo+Pj4gZGlmZiAtLWdpdCBhL2ZmdG9vbHMvdGV4dGZv cm1hdC9hdnRleHRmb3JtYXQuaAo+PiBiL2ZmdG9vbHMvdGV4dGZvcm1hdC9hdnRleHRmb3JtYXQu aAo+Pj4gaW5kZXggMDM1NjRkMTRhNy4uZTUxOTA5NGY0ZiAxMDA2NDQKPj4+IC0tLSBhL2ZmdG9v bHMvdGV4dGZvcm1hdC9hdnRleHRmb3JtYXQuaAo+Pj4gKysrIGIvZmZ0b29scy90ZXh0Zm9ybWF0 L2F2dGV4dGZvcm1hdC5oCj4+PiBAQCAtMjEsOSArMjEsNyBAQAo+Pj4gICNpZm5kZWYgRkZUT09M U19URVhURk9STUFUX0FWVEVYVEZPUk1BVF9ICj4+PiAgI2RlZmluZSBGRlRPT0xTX1RFWFRGT1JN QVRfQVZURVhURk9STUFUX0gKPj4+Cj4+PiAtI2luY2x1ZGUgPHN0ZGRlZi5oPgo+Pj4gICNpbmNs dWRlIDxzdGRpbnQuaD4KPj4+IC0jaW5jbHVkZSAibGliYXZ1dGlsL2F0dHJpYnV0ZXMuaCIKPj4+ ICAjaW5jbHVkZSAibGliYXZ1dGlsL2RpY3QuaCIKPj4+ICAjaW5jbHVkZSAibGliYXZmb3JtYXQv YXZpby5oIgo+Pj4gICNpbmNsdWRlICJsaWJhdnV0aWwvYnByaW50LmgiCj4+PiBAQCAtMTAzLDcg KzEwMSw3IEBAIHN0cnVjdCBBVlRleHRGb3JtYXRDb250ZXh0IHsKPj4+ICAgICAgdW5zaWduZWQg aW50Cj4+IG5iX2l0ZW1fdHlwZVtTRUNUSU9OX01BWF9OQl9MRVZFTFNdW1NFQ1RJT05fTUFYX05C X1NFQ1RJT05TXTsKPj4+Cj4+PiAgICAgIC8qKiBzZWN0aW9uIHBlciBlYWNoIGxldmVsICovCj4+ PiAtICAgIGNvbnN0IHN0cnVjdCBBVlRleHRGb3JtYXRTZWN0aW9uCj4+ICpzZWN0aW9uW1NFQ1RJ T05fTUFYX05CX0xFVkVMU107Cj4+PiArICAgIGNvbnN0IEFWVGV4dEZvcm1hdFNlY3Rpb24gKnNl Y3Rpb25bU0VDVElPTl9NQVhfTkJfTEVWRUxTXTsKPj4+ICAgICAgQVZCUHJpbnQgc2VjdGlvbl9w YnVmW1NFQ1RJT05fTUFYX05CX0xFVkVMU107IC8vLzwgZ2VuZXJpYwo+PiBwcmludCBidWZmZXIg ZGVkaWNhdGVkIHRvIGVhY2ggc2VjdGlvbiwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLyAgdXNlZCBieQo+PiB2YXJpb3VzIGZvcm1hdHRl cnMKPj4+Cj4+PiBAQCAtMTI0LDcgKzEyMiw3IEBAIHN0cnVjdCBBVlRleHRGb3JtYXRDb250ZXh0 IHsKPj4+ICAjZGVmaW5lIEFWX1RFWFRGT1JNQVRfUFJJTlRfU1RSSU5HX1ZBTElEQVRFIDIKPj4+ Cj4+PiAgaW50IGF2dGV4dF9jb250ZXh0X29wZW4oQVZUZXh0Rm9ybWF0Q29udGV4dCAqKnB0Y3R4 LCBjb25zdAo+PiBBVlRleHRGb3JtYXR0ZXIgKmZvcm1hdHRlciwgQVZUZXh0V3JpdGVyQ29udGV4 dCAqd3JpdGVyX2NvbnRleHQsIGNvbnN0Cj4+IGNoYXIgKmFyZ3MsCj4+PiAtICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc3RydWN0IEFWVGV4dEZvcm1hdFNlY3Rpb24gKnNlY3Rpb25zLAo+ PiBpbnQgbmJfc2VjdGlvbnMsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZU ZXh0Rm9ybWF0U2VjdGlvbiAqc2VjdGlvbnMsIGludAo+PiBuYl9zZWN0aW9ucywKPj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc2hvd192YWx1ZV91bml0LAo+Pj4gICAgICAgICAgICAg ICAgICAgICAgICAgIGludCB1c2VfdmFsdWVfcHJlZml4LAo+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgIGludCB1c2VfYnl0ZV92YWx1ZV9iaW5hcnlfcHJlZml4LAo+Pj4gZGlmZiAtLWdpdCBh L2ZmdG9vbHMvdGV4dGZvcm1hdC90Zl9kZWZhdWx0LmMKPj4gYi9mZnRvb2xzL3RleHRmb3JtYXQv dGZfZGVmYXVsdC5jCj4+PiBpbmRleCAxNGVmOWZlOGY5Li4zYjA1ZDI1ZjM2IDEwMDY0NAo+Pj4g LS0tIGEvZmZ0b29scy90ZXh0Zm9ybWF0L3RmX2RlZmF1bHQuYwo+Pj4gKysrIGIvZmZ0b29scy90 ZXh0Zm9ybWF0L3RmX2RlZmF1bHQuYwo+Pj4gQEAgLTcwLDkgKzcwLDEwIEBAIERFRklORV9GT1JN QVRURVJfQ0xBU1MoZGVmYXVsdCk7Cj4+PiAgLyogbGFtZSB1cHBlcmNhc2luZyByb3V0aW5lLCBh c3N1bWVzIHRoZSBzdHJpbmcgaXMgbG93ZXIgY2FzZSBBU0NJSQo+PiAqLwo+Pj4gIHN0YXRpYyBp bmxpbmUgY2hhciAqdXBjYXNlX3N0cmluZyhjaGFyICpkc3QsIHNpemVfdCBkc3Rfc2l6ZSwgY29u c3QKPj4gY2hhciAqc3JjKQo+Pj4gIHsKPj4+IC0gICAgaW50IGk7Cj4+PiArICAgIHVuc2lnbmVk IGk7Cj4+PiArCj4+Cj4+IFdoeSBub3Qgc2l6ZV90Pwo+IAo+IHNlZSBhYm92ZS4KPiAKPj4KPj4+ ICAgICAgZm9yIChpID0gMDsgc3JjW2ldICYmIGkgPCBkc3Rfc2l6ZSAtIDE7IGkrKykKPj4+IC0g ICAgICAgIGRzdFtpXSA9IGF2X3RvdXBwZXIoc3JjW2ldKTsKPj4+ICsgICAgICAgIGRzdFtpXSA9 IChjaGFyKWF2X3RvdXBwZXIoc3JjW2ldKTsKPj4+ICAgICAgZHN0W2ldID0gMDsKPj4+ICAgICAg cmV0dXJuIGRzdDsKPj4+ICB9Cj4+PiBAQCAtMTA4LDYgKzEwOSw5IEBAIHN0YXRpYyB2b2lkCj4+ IGRlZmF1bHRfcHJpbnRfc2VjdGlvbl9mb290ZXIoQVZUZXh0Rm9ybWF0Q29udGV4dCAqd2N0eCkK Pj4+ICAgICAgY29uc3Qgc3RydWN0IEFWVGV4dEZvcm1hdFNlY3Rpb24gKnNlY3Rpb24gPSB3Y3R4 LT5zZWN0aW9uW3djdHgtCj4+PiBsZXZlbF07Cj4+PiAgICAgIGNoYXIgYnVmWzMyXTsKPj4+Cj4+ PiArICAgIGlmICghc2VjdGlvbikKPj4+ICsgICAgICAgIHJldHVybjsKPj4KPj4gQ2FuIHRoaXMg aGFwcGVuPwo+IAo+IE5vLCBidXQgaGVyZSBpdCBzaG91bGQgYWN0dWFsbHkgY2FsbCB0aGUgZnVu Y3Rpb24gaW4gdGZfaW50ZXJuYWwgYW5kIHdpdGgKPiB0aGF0IGl0IGNhbiBoYXBwZW4uIFRoaXMg bXVzdCBoYXZlIGdvdHRlbiBsb3N0IGZyb20gcmViYXNpbmcuCj4gCj4gCj4+PiArCj4+PiAgICAg IGlmIChkZWYtPm5vcHJpbnRfd3JhcHBlcnMgfHwgZGVmLT5uZXN0ZWRfc2VjdGlvblt3Y3R4LT5s ZXZlbF0pCj4+PiAgICAgICAgICByZXR1cm47Cj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2ZmdG9vbHMv dGV4dGZvcm1hdC90Zl9pbmkuYwo+PiBiL2ZmdG9vbHMvdGV4dGZvcm1hdC90Zl9pbmkuYwo+Pj4g aW5kZXggOWUxYWE2MGUwOS4uZWM0NzFmZDQ4MCAxMDA2NDQKPj4+IC0tLSBhL2ZmdG9vbHMvdGV4 dGZvcm1hdC90Zl9pbmkuYwo+Pj4gKysrIGIvZmZ0b29scy90ZXh0Zm9ybWF0L3RmX2luaS5jCj4+ PiBAQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgY2hhciAqaW5pX2VzY2FwZV9zdHIoQVZCUHJpbnQg KmRzdCwgY29uc3QKPj4gY2hhciAqc3JjKQo+Pj4gICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdo ICovCj4+PiAgICAgICAgICBkZWZhdWx0Ogo+Pj4gICAgICAgICAgICAgIGlmICgodW5zaWduZWQg Y2hhciljIDwgMzIpCj4+PiAtICAgICAgICAgICAgICAgIGF2X2JwcmludGYoZHN0LCAiXFx4MDAl MDJ4IiwgYyAmIDB4ZmYpOwo+Pj4gKyAgICAgICAgICAgICAgICBhdl9icHJpbnRmKGRzdCwgIlxc eDAwJTAyeCIsICh1bnNpZ25lZCBjaGFyKWMpOwo+Pj4gICAgICAgICAgICAgIGVsc2UKPj4+ICAg ICAgICAgICAgICAgICAgYXZfYnByaW50X2NoYXJzKGRzdCwgYywgMSk7Cj4+PiAgICAgICAgICAg ICAgYnJlYWs7Cj4+PiBkaWZmIC0tZ2l0IGEvZmZ0b29scy90ZXh0Zm9ybWF0L3RmX2pzb24uYwo+ PiBiL2ZmdG9vbHMvdGV4dGZvcm1hdC90Zl9qc29uLmMKPj4+IGluZGV4IDI0ODM4YjM1ZWMuLmYy ODY4MzhkM2MgMTAwNjQ0Cj4+PiAtLS0gYS9mZnRvb2xzL3RleHRmb3JtYXQvdGZfanNvbi5jCj4+ PiArKysgYi9mZnRvb2xzL3RleHRmb3JtYXQvdGZfanNvbi5jCj4+PiBAQCAtODIsMTMgKzgyLDE4 IEBAIHN0YXRpYyBjb25zdCBjaGFyICpqc29uX2VzY2FwZV9zdHIoQVZCUHJpbnQKPj4gKmRzdCwg Y29uc3QgY2hhciAqc3JjLCB2b2lkICpsb2dfY3R4Cj4+PiAgICAgIHN0YXRpYyBjb25zdCBjaGFy IGpzb25fc3Vic3RbXSAgPSB7ICciJywgJ1xcJywgICdiJywgICdmJywKPj4gJ24nLCAgJ3InLCAg J3QnLCAwIH07Cj4+PiAgICAgIGNvbnN0IGNoYXIgKnA7Cj4+Pgo+Pj4gKyAgICBpZiAoIXNyYykg ewo+Pj4gKyAgICAgICAgYXZfbG9nKGxvZ19jdHgsIEFWX0xPR19FUlJPUiwgImpzb25fZXNjYXBl X3N0cjogTlVMTCBzb3VyY2UKPj4gc3RyaW5nXG4iKTsKPj4+ICsgICAgICAgIHJldHVybiBOVUxM Owo+Pj4gKyAgICB9Cj4+Cj4+IENhbiB0aGlzIGV2ZW4gaGFwcGVuPwo+Pgo+Pj4gKwo+Pj4gICAg ICBmb3IgKHAgPSBzcmM7ICpwOyBwKyspIHsKPj4+ICAgICAgICAgIGNoYXIgKnMgPSBzdHJjaHIo anNvbl9lc2NhcGUsICpwKTsKPj4+ICAgICAgICAgIGlmIChzKSB7Cj4+PiAgICAgICAgICAgICAg YXZfYnByaW50X2NoYXJzKGRzdCwgJ1xcJywgMSk7Cj4+PiAgICAgICAgICAgICAgYXZfYnByaW50 X2NoYXJzKGRzdCwganNvbl9zdWJzdFtzIC0ganNvbl9lc2NhcGVdLCAxKTsKPj4+ICAgICAgICAg IH0gZWxzZSBpZiAoKHVuc2lnbmVkIGNoYXIpKnAgPCAzMikgewo+Pj4gLSAgICAgICAgICAgIGF2 X2JwcmludGYoZHN0LCAiXFx1MDAlMDJ4IiwgKnAgJiAweGZmKTsKPj4+ICsgICAgICAgICAgICBh dl9icHJpbnRmKGRzdCwgIlxcdTAwJTAyeCIsICh1bnNpZ25lZCBjaGFyKSpwKTsKPj4+ICAgICAg ICAgIH0gZWxzZSB7Cj4+PiAgICAgICAgICAgICAgYXZfYnByaW50X2NoYXJzKGRzdCwgKnAsIDEp Owo+Pj4gICAgICAgICAgfQo+Pj4gQEAgLTEwNyw2ICsxMTIsNyBAQCBzdGF0aWMgdm9pZAo+PiBq c29uX3ByaW50X3NlY3Rpb25faGVhZGVyKEFWVGV4dEZvcm1hdENvbnRleHQgKndjdHgsIGNvbnN0 IHZvaWQgKmRhdAo+Pj4gICAgICAgICAgd2N0eC0+c2VjdGlvblt3Y3R4LT5sZXZlbC0xXSA6IE5V TEw7Cj4+Pgo+Pj4gICAgICBpZiAod2N0eC0+bGV2ZWwgJiYgd2N0eC0+bmJfaXRlbVt3Y3R4LT5s ZXZlbC0xXSkKPj4+ICsgICAgaWYgKHdjdHgtPmxldmVsICYmIHdjdHgtPm5iX2l0ZW1bd2N0eC0+ bGV2ZWwgLSAxXSkKPj4+ICAgICAgICAgIHdyaXRlcl9wdXRfc3RyKHdjdHgsICIsXG4iKTsKPj4+ Cj4+PiAgICAgIGlmIChzZWN0aW9uLT5mbGFncyAmIEFWX1RFWFRGT1JNQVRfU0VDVElPTl9GTEFH X0lTX1dSQVBQRVIpIHsKPj4+IGRpZmYgLS1naXQgYS9mZnRvb2xzL3RleHRmb3JtYXQvdGZfeG1s LmMKPj4gYi9mZnRvb2xzL3RleHRmb3JtYXQvdGZfeG1sLmMKPj4+IGluZGV4IDc2MjcxZGJhYTYu LmVjZWVkYTgxZTUgMTAwNjQ0Cj4+PiAtLS0gYS9mZnRvb2xzL3RleHRmb3JtYXQvdGZfeG1sLmMK Pj4+ICsrKyBiL2ZmdG9vbHMvdGV4dGZvcm1hdC90Zl94bWwuYwo+Pj4gQEAgLTE4LDEwICsxOCw3 IEBACj4+PiAgICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG bG9vciwgQm9zdG9uLCBNQQo+PiAwMjExMC0xMzAxIFVTQQo+Pj4gICAqLwo+Pj4KPj4+IC0jaW5j bHVkZSA8bGltaXRzLmg+Cj4+PiAtI2luY2x1ZGUgPHN0ZGFyZy5oPgo+Pj4gICNpbmNsdWRlIDxz dGRpbnQuaD4KPj4+IC0jaW5jbHVkZSA8c3RkaW8uaD4KPj4+ICAjaW5jbHVkZSA8c3RyaW5nLmg+ Cj4+Pgo+Pj4gICNpbmNsdWRlICJhdnRleHRmb3JtYXQuaCIKPj4+IGRpZmYgLS1naXQgYS9mZnRv b2xzL3RleHRmb3JtYXQvdHdfYXZpby5jCj4+IGIvZmZ0b29scy90ZXh0Zm9ybWF0L3R3X2F2aW8u Ywo+Pj4gaW5kZXggZDMzNWQzNWE1Ni4uM2M3NDkyYWEwNiAxMDA2NDQKPj4+IC0tLSBhL2ZmdG9v bHMvdGV4dGZvcm1hdC90d19hdmlvLmMKPj4+ICsrKyBiL2ZmdG9vbHMvdGV4dGZvcm1hdC90d19h dmlvLmMKPj4+IEBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyB2b2lkIGlvX3c4KEFWVGV4dFdyaXRl ckNvbnRleHQgKndjdHgsIGludAo+PiBiKQo+Pj4gIHN0YXRpYyB2b2lkIGlvX3B1dF9zdHIoQVZU ZXh0V3JpdGVyQ29udGV4dCAqd2N0eCwgY29uc3QgY2hhciAqc3RyKQo+Pj4gIHsKPj4+ICAgICAg SU9Xcml0ZXJDb250ZXh0ICpjdHggPSB3Y3R4LT5wcml2Owo+Pj4gLSAgICBhdmlvX3dyaXRlKGN0 eC0+YXZpb19jb250ZXh0LCBzdHIsIHN0cmxlbihzdHIpKTsKPj4+ICsgICAgYXZpb193cml0ZShj dHgtPmF2aW9fY29udGV4dCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilzdHIsCj4+IChpbnQpc3Ry bGVuKHN0cikpOwo+Pj4gIH0KPj4+Cj4+PiAgc3RhdGljIHZvaWQgaW9fcHJpbnRmKEFWVGV4dFdy aXRlckNvbnRleHQgKndjdHgsIGNvbnN0IGNoYXIgKmZtdCwKPj4gLi4uKQo+Pj4gQEAgLTg5LDEw ICs4OSwxMiBAQCBjb25zdCBBVlRleHRXcml0ZXIgYXZ0ZXh0d3JpdGVyX2F2aW8gPSB7Cj4+Pgo+ Pj4gIGludCBhdnRleHR3cml0ZXJfY3JlYXRlX2ZpbGUoQVZUZXh0V3JpdGVyQ29udGV4dCAqKnB3 Y3R4LCBjb25zdAo+PiBjaGFyICpvdXRwdXRfZmlsZW5hbWUsIGludCBjbG9zZV9vbl91bmluaXQp Cj4+PiAgewo+Pj4gKyAgICBpZiAoIXB3Y3R4IHx8ICFvdXRwdXRfZmlsZW5hbWUgfHwgIW91dHB1 dF9maWxlbmFtZVswXSkKPj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+Cj4+ IENhbiB0aGlzIGhhcHBlbj8KPiAKPiBXaGVuIHB1YmxpYyAtIHllcy4KCkNhbiBpdCBoYXBwZW4g bm93PwoKPiAKPiAKPiBHZW5lcmFsbHksIEkgd29uZGVyOiBkb24ndCB5b3UgZmluZCBpdCByaXNr eSB0byBtYWtlIGRlY2lzaW9ucyBhYm91dAo+IGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0 IGFyZSBiYXNlZCBvbiBrbm93bGVkZ2UgYWJvdXQgdGhlIGNhbGxpbmcKPiBjb2RlPyAoImNhbiB0 aGlzIGhhcHBlbj8iKQo+IEkgbWVhbiwgdGhlIGNhbGxpbmcgY29kZSBkb2Vzbid0IGtub3cgYWJv dXQgdGhlIGFzc3VtcHRpb25zIHlvdSAKPiB3ZXJlIG1ha2luZyBhbmQgb24gd2hpY2ggYmVoYXZp b3IgdGhlIGltcGxlbWVudGF0aW9uIG1pZ2h0IGJlIHJlbHlpbmcgb24uCgpOb3QgcHJvdmlkaW5n IGEgcG9pbnRlciB0byBzdG9yZSB0aGUgQVZUZXh0V3JpdGVyQ29udGV4dCogaXMgaW5zYW5lIGFu ZAphIHByb2dyYW1tZXIgZXJyb3IuIEl0IHNob3VsZCBuZXZlciBoYXBwZW4uIERvaW5nIHNvIHNo b3VsZCBsZWFkIHRvCnVuZGVmaW5lZCBiZWhhdmlvciAoanVzdCBhcyBlLmcuIHBhc3NpbmcgYSBO VUxMIHBvaW50ZXIgdG8gc3RybGVuKCkKZG9lcyksIGV2ZW4gd2hlbiBwdWJsaWMuCgo+IAo+IEZv ciB0aGlzIHBhdGNoc2V0IC0gbW9zdCBpbXBvcnRhbnRseSBmb3IgZXZlcnl0aGluZyBpbiBncmFw aHByaW50LmMsCj4gSSBoYWQgd29ya2VkIHdpdGggdGhlIGRlbGliZXJhdGUgaW50ZW50aW9uIGZv ciBjaGVja2luZyBldmVyeXRoaW5nIHRoYXQKPiBjYW4gYmUgY2hlY2tlZC4gCgpZb3Ugc2hvdWxk IHJhdGhlciBsb29rIGF0IHRoZSBjYWxsc2l0ZXMgYW5kIGVuc3VyZSB0aGF0IHRoZXkgZG9uJ3Qg Y2FsbAp0aGVzZSBmdW5jdGlvbnMgaW4gYW4gaW5zYW5lIHdheS4KClRoZSBtb3RpdmF0aW9uIGhl cmUgaXMgdGhlIGZhY3QgdGhhdCBncmFwaC1wcmludGluZwo+IGlzIGFsd2F5cyBydW4gKHdoZW4g Y29uZmlndXJlZCksIGV2ZW4gd2hlbiB0aGUgRkZtcGVnIHJ1biBoYXMgZmFpbGVkCj4gb3IgZXJy b3JlZCwgYmVjYXVzZSB0aG9zZSBhcmUgb2Z0ZW4gdGhlIG1vc3QgaW50ZXJlc3RpbmcgY2FzZXMg Zm9yIAo+IHZpZXdpbmcgdGhlIGdyYXBoIG9yIGdldHRpbmcgdGhlIGRhdGEuIAo+IEJ1dCBpbiBj YXNlIG9mIGVycm9ycyBhbmQgYWJvcnRpb24sIHdlIGNhbm5vdCBtYWtlIGFueSBhc3N1bXB0aW9u cyAKPiBhbnltb3JlIGFuZCB0aGUgYW5zd2VyIHRvICJjYW4gdGhpcyBoYXBwZW4/IiBtaWdodCBi ZSBtb3JlIG9mdGVuICJ5ZXMiCj4gdGhhbiB1c3VhbC4KCk9mIGNvdXJzZSB3ZSBjYW4gbWFrZSBh c3N1bXB0aW9ucy4gQWxsIHdlIG5lZWQgdG8gZG8gaXMgY2hlY2sgdGhlIG9uZXMKdGhhdCBjYW4g aGFwcGVuIGF0IHRoZSBjYWxsIHNpdGUuIFdoZXJlIHRoZXkgYmVsb25nLgoKPiAKPiBJIGhvcGUg eW91IGRvbid0IG1pbmQgdG8gcG9zdHBvbmUgdGhlIHJlbW92YWwgb2YgY2hlY2tzIGEgbGl0dGxl IGJpdC4KCiJSZW1vdmFsIG9mIGNoZWNrcyI/IFRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIGNo ZWNrcy4gQ2hlY2tzIHdoaWNoIElNTwpzaG91bGQgbm90IGJlIHRoZXJlIGluIHRoZSBmaXJzdCBw bGFjZS4KCj4gSXQgZG9lc24ndCBmZWVsIHJpZ2h0IHRvIG1lIG5vdywgdG8gZ28gb3ZlciBhbmQg anVzdCBibGluZGx5IHJlbW92ZQo+IGFsbCBvZiB0aGVtLiBJIHdvdWxkIHJhdGhlciBsaWtlIHRv IGRpc2N1c3MgYSBzdHJhdGVneS9wYXR0ZXJuIGluIHRoaXMKPiByZWdhcmQgYWJvdXQgd2hpY2gg Y2hlY2tzIHNob3VsZCBiZSBtYWRlIGF0IHdoaWNoIHBsYWNlcyBhbmQgd2hlcmUKPiBub3QsIGFs c28gaW4gdGhlIGxpZ2h0IG9mIHBvc3NpYmx5IGJlaW5nIHByb21vdGVkIHRvIGEgcHVibGljIEFQ SS4KPiBGaW5hbGx5LCBJJ2QgYWxzbyBsaWtlIHRvIGhlYXIgU3RlZmFub3Mgb3BpbmlvbiAtIGl0 J3MgbW9zdGx5IGhpcyAKPiBjb2RlIHRoYXQgd2UncmUgbW92aW5nIGFyb3VuZCBoZXJlIPCfmIoK Ci0gQW5kcmVhcwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRw czovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2Ny aWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1w ZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=