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 B2045432F0 for ; Tue, 30 Aug 2022 17:07:28 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2146B68B9E0; Tue, 30 Aug 2022 20:07:26 +0300 (EEST) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-oln040092066048.outbound.protection.outlook.com [40.92.66.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 56E1468B9B5 for ; Tue, 30 Aug 2022 20:07:20 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YKmEg614rY8VkYLmGmIiw8WZ8ErEc1LenWfpVUzmpPgNBfVKmRqvh0cLo4voaqYyRhAVwNOTU86wTwoOKB/nVyNNwtGK7sPtH0DrMwxc467Vev0bsxr5fqYZBcIQi42yvZYZIJ4RXs2VyMO0z4wMzIYnKu8j5EIV6TtmH0cSFg3Q3o8tOngZ9pOHmpaVpAmOtzHFDCpI3q2RIFVRKlS9WXC/roGX1FJDxfp5WFWabxZAWMWYujM/KXJtZ70fqEFFOMnSadFEhX6W4pLxmf8RMIN4vFVUCtgyoMo8NkEtABXSfrxQjuMGNJWkljc+cYeih+hI8F2XwB5hTW3Icbndcg== 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=l2dTfs+VOywNRCs/iCfrefP9ruWimL5lE7sKz0xLlxA=; b=CzfT4thM7/AdG7RPxxqbg5tqpk78RkmAMpLunj9cYWuPVfETXeQNTq9TNnTSza1VzngqrhZ2NTZICbXJbP8b98fq8VkxRnqC7bnruRME5Yi7rmF6PzGGbVVwg7qRp9Wx1MovX3X4lXSbAQH7Vns/2n0qnb5QJj/cVviRoe51sfXZYP4P7S9dxvDisYC5OzDgGD7QClpAa7H3vQUF7tJZyI9PTs+f67wEog6ZO2fO8NW6i8u5Jyl8LKQujYxUD030zfIMVRPpDPEUW/0HwFVfuqr6g3Zy/60rTi2dlMUasPBW6cO6BCVySKZfqxowi8QP5Bmv0cJruQRFXQQf/8M2qw== 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=l2dTfs+VOywNRCs/iCfrefP9ruWimL5lE7sKz0xLlxA=; b=fzglEt7HwkH1rMa9lMNvMPHmIt5HzAcjIZf3NSQI31SkClUmOw5pzRv2GFFBfQ8FYEtHot+j6WjHDf9t+U/PpRiD3G2eISqI1yDY9AbLYQf/dl6rjV3NhMR1CigkjnhiZmmBnVTosNwkUgcsZFfg+qyMHbNjX+k38iGl74SUYcrMZ+bU3BVkH1yRu0t9G9riQTsk6YXrIkBtogIz0WDuAsm0EkhNjY7tgOYy9xRkGKagx3t4d2F1oaMfOj+VW2gAWVRbMrk3YORc6nMx8t02fHlHD0aL8YbQZe/wOmb0uPcQFqQoUFxDeYyLgnGQBSCD8R6pcNu7NzTqlbLjo5dJcw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0234.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:379::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.21; Tue, 30 Aug 2022 17:07:18 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::7d2a:d9d8:f384:4cee]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::7d2a:d9d8:f384:4cee%9]) with mapi id 15.20.5566.021; Tue, 30 Aug 2022 17:07:18 +0000 Message-ID: Date: Tue, 30 Aug 2022 19:07:16 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220830014653.2477-1-jamrial@gmail.com> <60379b36-5d8a-d6b7-8e42-c7529095d9db@gmail.com> From: Andreas Rheinhardt In-Reply-To: <60379b36-5d8a-d6b7-8e42-c7529095d9db@gmail.com> X-TMN: [a7+ertrJ3qNZ8R5+PtYQm5tQSQYv6RqO] X-ClientProxiedBy: ZR0P278CA0014.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::24) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 495cddbd-ecfb-4fff-d447-08da8aaa1841 X-MS-TrafficTypeDiagnostic: AS8P250MB0234:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QDhlbMSKlSZc7RPGi9lgf/E55aXaWo5PQ0lL7uT4E/stVQpYHPr+rF0xqARXkVeLOTK9FZcFlz0U9sKnwvl6y7bV38st5gxxjIEHbiqy8mJOBqv0dsp+2qt/fvIVMJtQzbSTROGXvn6cC9HFBVgmA9sn1b8uOQCm9s6i20nqoo0JnvKEszcNUg7fvmMFCJORqeqmML/RMMNZ1vKwiApbVqUA+01X0f/bn1FsyfIsI8fv7Bj8zFQuyRDDArmi1qxMktBJO2BgNrXLr63YcmHY0u/TcsEKTgl6nM982PCqHzzUMQWkEN0m1yCxFIYje8xrErg90BO5ttlFrrRnkH/NY18foFuHkdwm9PpORAxsROmZ7DfpZ4Uw6mQ9RtVWOQG1iG3qqTSEHsueIBX97AGKIhjC/gal9PS6qXrxz3bsiZ36beRHTfqC9SLq02GmI+u783XaAhdkUELxHBhJ/S/qQGqixty/8ZqpxGrjAWlbIfYqusaEA6GsaC2P/wvt5XfP20jo31x4AJDNqs7Wp3UpELa73Qq9LXSWr/ui7AusyLrsNXgELuRXl3HBsi5wT8Kwmy1iCQj71O2Aqxhw85fKsF/pfSytAGr4/PzLISnYTkXT9/rlF0tpvUsd3Zwpv83DUnEy7HZa6MgIyJUDuVokVmqzQfdF0cIWSPmHDtldw7ZrM1voPKgvZa9WBmyZfEHy X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YXNHVlFnaWpseE1waXVKRUdNVnJkWmFYdHNFaGlWTkxBRGYyMWt2SUVBRTBQ?= =?utf-8?B?U0hLVG12TTdwU1ZmeTBRVExneWhLSzRaWGVpbytWclluNm9FaDBEZWdlTEMw?= =?utf-8?B?aXRlU3I2bzVzK1d1MWl1WHVUVWtlQzBUbll0SDFwdGRkbVpyTmxUd2xSMGEv?= =?utf-8?B?bnpWc2E0VDdQY3BBcVVCeWRWWnRXOFBMSVFGZ0RtUUtpaHpFZjh6RTlvREJq?= =?utf-8?B?YTdiaGRNekg3OFE5bVk4UHBHM1IrNFBNRFpoWG9IQzg5OVRZeUwxSDlYSDJs?= =?utf-8?B?TjYvTiszUG1xbUZWODRVTm9NQUJVS1dON3FOekwxUUluRjRaRzBFTVZoVFR1?= =?utf-8?B?NmJaSmxXdndQM3NNa3ZvaU80SkZZWVVtcVZuRlJXNTRGWGp5eVlWczFCVW5F?= =?utf-8?B?dDFKWGhTNnlFVG1yNUFkclVMUS9rV2RIYVdaQ2dXVEtqaXRjZDNUQVpzZTZR?= =?utf-8?B?QVhNSHVjMmhqSTJnc0dNSURqdlp3Y2cyakdWek95ZHlrekN5VXI0ckphMlRG?= =?utf-8?B?a2xlZGVNTEtHcnQzcmYrYnBNYUNXTmliemVtbkM0TDdza0c0MU1Hb1kzQTVu?= =?utf-8?B?U2VNaUVxVjRZMGsxY21TQ1FiRFRrbTlpZ0w2bE95QnpobjJMT2hLYUdWaTFE?= =?utf-8?B?TU5OL1ZKamVBOGRlWVZJQnRvRVJzS0dHQUhrc3h4ZkF2T2NST2Flb2JmVU14?= =?utf-8?B?WjNlTmUvenllVlNaRDhVSjZ0MWdraUhsaEU4d1FpZUtKY1lZb3R4ZUZud0N3?= =?utf-8?B?Y2VOeW5qWi90NGhyNnR1NGJmRGVTY2hnbDFLWGpzdmtDSlJvbXhFcHB3Rm5a?= =?utf-8?B?SDlsNnp5ZVR1TFBVeE15SzhFSitGMW12cytsd2ZjTjFTL0xFdzhCRkFIS0JQ?= =?utf-8?B?S1N6VU1OYmNzRHBaYlV0dG5XSzNJRVg3QUxWT2owdEpJWkRyQVZNNnBsaEFN?= =?utf-8?B?MDFVeFBhVGpXVXFMK2c0RFI5eHdFUVp6VW13d0FCeTAxZWFOeWVYMmhmanNw?= =?utf-8?B?eWRNU01lclpoTlFQcHNLL3NvV3h6OTJvUThwdjlzZEFSUXhUUkdXbjEwYWxa?= =?utf-8?B?OU5CV3U3eFgxTXJWYjJhdnpaTkhYTnMrKzFXT1IyU1oyaGhSMUYzRG5XRUJH?= =?utf-8?B?VDhjNHVtd1c0OUptNjBvamw4ZnorR25QeG11NEt5MkJSOHBvbUNtbDJtZHE2?= =?utf-8?B?Um4wSVVCMXZmK2ozUS91QWhVVVdKN2xwRVBOM0tMS0Y0UlVHQkdVNG9pTHNL?= =?utf-8?B?T1IvenN1RUNQSFEreU53eC9kUkFnQVNvMUFyaDByZFJSa2pZMVJiR2wrNTkx?= =?utf-8?B?SWlmZlFpY0VxbVoyTXNDbTQ1YXhubzVheDhTSEZwR3ZrbFhOUVdkT0lLd3Q2?= =?utf-8?B?cTlpV2NzamRMbklQNnlXOWV3bFo0WHdBOVhIQTh4WGFCbjkrT0FzWHFQRFQ4?= =?utf-8?B?d1gwUjFUTlRZODRSYlVjaDRMd09EbTJHcGxSckVnSXgzUFpqeURVbCt2eFJB?= =?utf-8?B?L1N3VUU4RzZMTFNmeVA2UTNhM1dHeGhxWlYvWDEraUJ0djQrU3plays1Mno4?= =?utf-8?B?Q3N1S2xuMXZTdFF2Qmd2aVBWMjZnVmJVT3hoMVo2Sm9uUnE4dWJKaUd4bEVQ?= =?utf-8?B?NlNGdGNXelk5L3lPQWNHd25JM2VNdlVsRXZUczhlV0lQWUVYVk9VMG9GVk9y?= =?utf-8?B?Q1hDWUZtNG85aUlzMFFjSk0vY2IydUh6SnBOTytoV3MzZGZmeGFFa3Zrajd1?= =?utf-8?Q?/ObWdXOdYT7zhlpaNs=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 495cddbd-ecfb-4fff-d447-08da8aaa1841 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Aug 2022 17:07:18.5042 (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: AS8P250MB0234 Subject: Re: [FFmpeg-devel] [PATCH] avcodec: add a bsf to reorder DTS into PTS 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: SmFtZXMgQWxtZXI6Cj4gT24gOC8zMC8yMDIyIDExOjMwIEFNLCBBbmRyZWFzIFJoZWluaGFyZHQg d3JvdGU6Cj4+IEphbWVzIEFsbWVyOgo+Pj4gU3RhcnRpbmcgd2l0aCBhbiBoMjY0IGltcGxlbWVu dGF0aW9uLiBDYW4gYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydAo+Pj4gb3RoZXIgY29kZWNzLgo+Pj4K Pj4+IEFkZHJlc3NlcyB0aWNrZXQgIzUwMi4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBKYW1lcyBB bG1lciA8amFtcmlhbEBnbWFpbC5jb20+Cj4+PiAtLS0KPj4+IMKgIGNvbmZpZ3VyZcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPj4+IMKgIGxpYmF2 Y29kZWMvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+Pj4gwqAgbGli YXZjb2RlYy9iaXRzdHJlYW1fZmlsdGVycy5jIHzCoMKgIDEgKwo+Pj4gwqAgbGliYXZjb2RlYy9k dHMycHRzX2JzZi5jwqDCoMKgwqDCoMKgIHwgNDc3ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+Pj4gwqAgNCBmaWxlcyBjaGFuZ2VkLCA0ODAgaW5zZXJ0aW9ucygrKQo+Pj4gwqAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZHRzMnB0c19ic2YuYwo+Pj4KPj4+IGRpZmYg LS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPj4+IGluZGV4IDkzMmVhNWI1NTMuLjkxZWU1 ZWIzMDMgMTAwNzU1Cj4+PiAtLS0gYS9jb25maWd1cmUKPj4+ICsrKyBiL2NvbmZpZ3VyZQo+Pj4g QEAgLTMyNzUsNiArMzI3NSw3IEBAIGFhY19hZHRzdG9hc2NfYnNmX3NlbGVjdD0iYWR0c19oZWFk ZXIgbXBlZzRhdWRpbyIKPj4+IMKgIGF2MV9mcmFtZV9tZXJnZV9ic2Zfc2VsZWN0PSJjYnNfYXYx Igo+Pj4gwqAgYXYxX2ZyYW1lX3NwbGl0X2JzZl9zZWxlY3Q9ImNic19hdjEiCj4+PiDCoCBhdjFf bWV0YWRhdGFfYnNmX3NlbGVjdD0iY2JzX2F2MSIKPj4+ICtkdHMycHRzX2JzZl9zZWxlY3Q9ImNi c19oMjY0IGgyNjRwYXJzZSIKPj4+IMKgIGVhYzNfY29yZV9ic2Zfc2VsZWN0PSJhYzNfcGFyc2Vy Igo+Pj4gwqAgZmlsdGVyX3VuaXRzX2JzZl9zZWxlY3Q9ImNicyIKPj4+IMKgIGgyNjRfbWV0YWRh dGFfYnNmX2RlcHM9ImNvbnN0X25hbiIKPj4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2Vm aWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+Pj4gaW5kZXggY2I4MGY3M2Q5OS4uODU4ZTExMGI3 OSAxMDA2NDQKPj4+IC0tLSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKPj4+ICsrKyBiL2xpYmF2Y29k ZWMvTWFrZWZpbGUKPj4+IEBAIC0xMTc2LDYgKzExNzYsNyBAQCBPQkpTLSQoQ09ORklHX0FWMV9G UkFNRV9TUExJVF9CU0YpwqDCoMKgwqDCoMKgwqAgKz0KPj4+IGF2MV9mcmFtZV9zcGxpdF9ic2Yu bwo+Pj4gwqAgT0JKUy0kKENPTkZJR19DSE9NUF9CU0YpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCArPSBjaG9tcF9ic2Yubwo+Pj4gwqAgT0JKUy0kKENPTkZJR19EVU1QX0VYVFJB REFUQV9CU0YpwqDCoMKgwqDCoMKgwqDCoCArPSBkdW1wX2V4dHJhZGF0YV9ic2Yubwo+Pj4gwqAg T0JKUy0kKENPTkZJR19EQ0FfQ09SRV9CU0YpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAr PSBkY2FfY29yZV9ic2Yubwo+Pj4gK09CSlMtJChDT05GSUdfRFRTMlBUU19CU0YpwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGR0czJwdHNfYnNmLm8KPj4+IMKgIE9CSlMtJChDT05G SUdfRFZfRVJST1JfTUFSS0VSX0JTRinCoMKgwqDCoMKgwqDCoCArPSBkdl9lcnJvcl9tYXJrZXJf YnNmLm8KPj4+IMKgIE9CSlMtJChDT05GSUdfRUFDM19DT1JFX0JTRinCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCArPSBlYWMzX2NvcmVfYnNmLm8KPj4+IMKgIE9CSlMtJChDT05GSUdfRVhUUkFD VF9FWFRSQURBVEFfQlNGKcKgwqDCoMKgwqAgKz0KPj4+IGV4dHJhY3RfZXh0cmFkYXRhX2JzZi5v wqDCoMKgIFwKPj4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2JpdHN0cmVhbV9maWx0ZXJzLmMK Pj4+IGIvbGliYXZjb2RlYy9iaXRzdHJlYW1fZmlsdGVycy5jCj4+PiBpbmRleCA0NDQ0MjNhZTkz Li5hM2JlYmVmZTVmIDEwMDY0NAo+Pj4gLS0tIGEvbGliYXZjb2RlYy9iaXRzdHJlYW1fZmlsdGVy cy5jCj4+PiArKysgYi9saWJhdmNvZGVjL2JpdHN0cmVhbV9maWx0ZXJzLmMKPj4+IEBAIC0zMSw2 ICszMSw3IEBAIGV4dGVybiBjb25zdCBGRkJpdFN0cmVhbUZpbHRlciBmZl9hdjFfbWV0YWRhdGFf YnNmOwo+Pj4gwqAgZXh0ZXJuIGNvbnN0IEZGQml0U3RyZWFtRmlsdGVyIGZmX2Nob21wX2JzZjsK Pj4+IMKgIGV4dGVybiBjb25zdCBGRkJpdFN0cmVhbUZpbHRlciBmZl9kdW1wX2V4dHJhZGF0YV9i c2Y7Cj4+PiDCoCBleHRlcm4gY29uc3QgRkZCaXRTdHJlYW1GaWx0ZXIgZmZfZGNhX2NvcmVfYnNm Owo+Pj4gK2V4dGVybiBjb25zdCBGRkJpdFN0cmVhbUZpbHRlciBmZl9kdHMycHRzX2JzZjsKPj4+ IMKgIGV4dGVybiBjb25zdCBGRkJpdFN0cmVhbUZpbHRlciBmZl9kdl9lcnJvcl9tYXJrZXJfYnNm Owo+Pj4gwqAgZXh0ZXJuIGNvbnN0IEZGQml0U3RyZWFtRmlsdGVyIGZmX2VhYzNfY29yZV9ic2Y7 Cj4+PiDCoCBleHRlcm4gY29uc3QgRkZCaXRTdHJlYW1GaWx0ZXIgZmZfZXh0cmFjdF9leHRyYWRh dGFfYnNmOwo+Pj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvZHRzMnB0c19ic2YuYyBiL2xpYmF2 Y29kZWMvZHRzMnB0c19ic2YuYwo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAw MDAwMDAwMDAuLmY2MDAxNTBhNmIKPj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2xpYmF2Y29k ZWMvZHRzMnB0c19ic2YuYwo+Pj4gQEAgLTAsMCArMSw0NzcgQEAKPj4+ICsvKgo+Pj4gKyAqIENv cHlyaWdodCAoYykgMjAyMiBKYW1lcyBBbG1lcgo+Pj4gKyAqCj4+PiArICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgo+Pj4gKyAqCj4+PiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+Pj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4+ICsgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPj4+ ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPj4+ICsgKgo+Pj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+Pj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+PiArICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgIFNlZSB0 aGUgR05VCj4+PiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KPj4+ICsgKgo+Pj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4+PiArICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+ Pj4gMDIxMTAtMTMwMSBVU0EKPj4+ICsgKi8KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBAZmlsZQo+ Pj4gKyAqIERlcml2ZSBQVFMgYnkgcmVvcmRlcmluZyBEVFMgZnJvbSBzdXBwb3J0ZWQgc3RyZWFt cwo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKPj4+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL2V2YWwuaCIKClVudXNlZC4KCj4+PiArI2luY2x1ZGUgImxp YmF2dXRpbC9maWZvLmgiCj4+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPj4+ICsjaW5j bHVkZSAibGliYXZ1dGlsL3RyZWUuaCIKPj4+ICsKPj4+ICsjaW5jbHVkZSAiYnNmLmgiCj4+PiAr I2luY2x1ZGUgImJzZl9pbnRlcm5hbC5oIgo+Pj4gKyNpbmNsdWRlICJjYnMuaCIKPj4+ICsjaW5j bHVkZSAiY2JzX2gyNjQuaCIKPj4+ICsjaW5jbHVkZSAiaDI2NF9wYXJzZS5oIgo+Pj4gKyNpbmNs dWRlICJoMjY0X3BzLmgiCj4+PiArCj4+PiArdHlwZWRlZiBzdHJ1Y3QgRFRTMlBUU05vZGUgewo+ Pj4gK8KgwqDCoCBpbnQ2NF90wqDCoMKgwqDCoCBkdHM7Cj4+PiArwqDCoMKgIGludDY0X3QgZHVy YXRpb247Cj4+PiArwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoCBwb2M7Cj4+PiArfSBEVFMy UFRTTm9kZTsKPj4+ICsKPj4+ICt0eXBlZGVmIHN0cnVjdCBEVFMyUFRTRnJhbWUgewo+Pj4gK8Kg wqDCoCBBVlBhY2tldMKgwqDCoCAqcGt0Owo+Pj4gK8KgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKg wqAgcG9jOwo+Pj4gK8KgwqDCoCBpbnTCoMKgwqDCoCBwb2NfZGlmZjsKPj4+ICt9IERUUzJQVFNG cmFtZTsKPj4+ICsKPj4+ICt0eXBlZGVmIHN0cnVjdCBEVFMyUFRTSDI2NENvbnRleHQgewo+Pj4g K8KgwqDCoCBIMjY0UE9DQ29udGV4dCBwb2M7Cj4+PiArwqDCoMKgIFNQUyBzcHM7Cj4+PiArwqDC oMKgIGludCBsYXN0X3BvYzsKPj4+ICvCoMKgwqAgaW50IGhpZ2hlc3RfcG9jOwo+Pj4gK8KgwqDC oCBpbnQgcGljdHVyZV9zdHJ1Y3R1cmU7Cj4+PiArfSBEVFMyUFRTSDI2NENvbnRleHQ7Cj4+PiAr Cj4+PiArdHlwZWRlZiBzdHJ1Y3QgRFRTMlBUU0NvbnRleHQgewo+Pj4gK8KgwqDCoCBzdHJ1Y3Qg QVZUcmVlTm9kZSAqcm9vdDsKPj4+ICvCoMKgwqAgQVZGaWZvICpmaWZvOwo+Pj4gKwo+Pj4gK8Kg wqDCoCAvLyBDb2RlYyBzcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycwo+Pj4gK8KgwqDCoCBpbnQg KCppbml0KShBVkJTRkNvbnRleHQgKmN0eCk7Cj4+PiArwqDCoMKgIGludCAoKmZpbHRlcikoQVZC U0ZDb250ZXh0ICpjdHgpOwo+Pj4gK8KgwqDCoCB2b2lkICgqZmx1c2gpKEFWQlNGQ29udGV4dCAq Y3R4KTsKPj4+ICsKPj4+ICvCoMKgwqAgQ29kZWRCaXRzdHJlYW1Db250ZXh0ICpjYmM7Cj4+PiAr wqDCoMKgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgYXU7Cj4+PiArCj4+PiArwqDCoMKgIHVuaW9u IHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBEVFMyUFRTSDI2NENvbnRleHQgaDI2NDsKPj4+ICvCoMKg wqAgfSB1Owo+Pj4gKwo+Pj4gK8KgwqDCoCBpbnQgbmJfZnJhbWU7Cj4+PiArwqDCoMKgIGludCBl b2Y7Cj4+PiArfSBEVFMyUFRTQ29udGV4dDsKPj4+ICsKPj4+ICsvLyBBVlRyZWVOb2RlIGNhbGxi YWNrcwo+Pj4gK3N0YXRpYyBpbnQgY21wX2luc2VydChjb25zdCB2b2lkICprZXksIGNvbnN0IHZv aWQgKm5vZGUpCj4+PiArewo+Pj4gK8KgwqDCoCByZXR1cm4gKChjb25zdCBEVFMyUFRTTm9kZSAq KSBrZXkpLT5wb2MgLSAoKGNvbnN0IERUUzJQVFNOb2RlICopCj4+PiBub2RlKS0+cG9jOwo+Pj4g K30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGNtcF9maW5kKGNvbnN0IHZvaWQgKmtleSwgY29uc3Qg dm9pZCAqbm9kZSkKPj4+ICt7Cj4+PiArwqDCoMKgIHJldHVybiAqKGNvbnN0IGludCAqKWtleSAt ICgoY29uc3QgRFRTMlBUU05vZGUgKikgbm9kZSktPnBvYzsKPj4+ICt9Cj4+PiArCj4+PiArc3Rh dGljIGludCBkZWNfcG9jKHZvaWQgKm9wYXF1ZSwgdm9pZCAqZWxlbSkKPj4+ICt7Cj4+PiArwqDC oMKgIERUUzJQVFNOb2RlICpub2RlID0gZWxlbTsKPj4+ICvCoMKgwqAgaW50IGRlYyA9ICooaW50 ICopb3BhcXVlOwo+Pj4gK8KgwqDCoCBub2RlLT5wb2MgLT0gZGVjOwo+Pj4gK8KgwqDCoCByZXR1 cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBmcmVlX25vZGUodm9pZCAqb3BhcXVl LCB2b2lkICplbGVtKQo+Pj4gK3sKPj4+ICvCoMKgwqAgRFRTMlBUU05vZGUgKm5vZGUgPSBlbGVt Owo+Pj4gK8KgwqDCoCBhdl9mcmVlKG5vZGUpOwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9 Cj4+PiArCj4+PiArLy8gU2hhcmVkIGZ1bmN0aW9ucwo+Pj4gK3N0YXRpYyBpbnQgYWxsb2NfYW5k X2luc2VydF9ub2RlKEFWQlNGQ29udGV4dCAqY3R4LCBpbnQ2NF90IHRzLAo+Pj4gaW50NjRfdCBk dXJhdGlvbiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBwb2MsIGludCBwb2NfZGlmZikKPj4+ICt7Cj4+PiAr wqDCoMKgIERUUzJQVFNDb250ZXh0ICpzID0gY3R4LT5wcml2X2RhdGE7Cj4+PiArwqDCoMKgIGZv ciAoaW50IGkgPSAwOyBpIDwgcG9jX2RpZmY7IGkrKykgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0 cnVjdCBBVlRyZWVOb2RlICpub2RlID0gYXZfdHJlZV9ub2RlX2FsbG9jKCk7Cj4+PiArwqDCoMKg wqDCoMKgwqAgRFRTMlBUU05vZGUgKnBvY19ub2RlLCAqcmV0Owo+Pj4gK8KgwqDCoMKgwqDCoMKg IGlmICghbm9kZSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcG9jX25vZGUgPSBhdl9tYWxsb2Moc2l6ZW9mKCpw b2Nfbm9kZSkpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcG9jX25vZGUpIHsKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGF2X2ZyZWUobm9kZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICvC oMKgwqDCoMKgwqDCoCAqcG9jX25vZGUgPSAoRFRTMlBUU05vZGUpIHsgdHMsIGR1cmF0aW9uLCBw b2MrKyB9Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGF2X3RyZWVfaW5zZXJ0KCZzLT5yb290 LCBwb2Nfbm9kZSwgY21wX2luc2VydCwgJm5vZGUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChy ZXQgJiYgcmV0ICE9IHBvY19ub2RlKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqcmV0 ID0gKnBvY19ub2RlOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfZnJlZShwb2Nfbm9k ZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9mcmVlKG5vZGUpOwo+Pj4gK8KgwqDC oMKgwqDCoMKgIH0KPj4+ICvCoMKgwqAgfQo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+ PiArCj4+PiArLy8gSC4yNjQKPj4+ICtzdGF0aWMgY29uc3QgQ29kZWRCaXRzdHJlYW1Vbml0VHlw ZSBoMjY0X2RlY29tcG9zZV91bml0X3R5cGVzW10gPSB7Cj4+PiArwqDCoMKgIEgyNjRfTkFMX1NQ UywKPj4+ICvCoMKgwqAgSDI2NF9OQUxfUFBTLAo+Pj4gK8KgwqDCoCBIMjY0X05BTF9JRFJfU0xJ Q0UsCj4+PiArwqDCoMKgIEgyNjRfTkFMX1NMSUNFLAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGlj IGludCBoMjY0X2luaXQoQVZCU0ZDb250ZXh0ICpjdHgpCj4+PiArewo+Pj4gK8KgwqDCoCBEVFMy UFRTQ29udGV4dCAqcyA9IGN0eC0+cHJpdl9kYXRhOwo+Pj4gK8KgwqDCoCBEVFMyUFRTSDI2NENv bnRleHQgKmgyNjQgPSAmcy0+dS5oMjY0Owo+Pj4gKwo+Pj4gK8KgwqDCoCBzLT5maWZvID0gYXZf Zmlmb19hbGxvYzIoSDI2NF9NQVhfRFBCX0ZSQU1FUywKPj4+IHNpemVvZihEVFMyUFRTRnJhbWUp LCAwKTsKPj4KPj4gV2h5IGRvIHlvdSBiZWxpZXZlIHRoYXQgSDI2NF9NQVhfRFBCX0ZSQU1FUyBp cyB0aGUgcHJvcGVyIGJvdW5kIGhlcmU/Cj4+IEZvciBmaWVsZHMsIHR3byBwYWNrZXRzIG9jY3Vw eSBvbmUgRFBCIHNsb3QuCj4gCj4gSXQgc2VlbWVkIGxpa2UgYSBzYW5lIHVwcGVyIGJvdW5kLiBJ IGNhbiBkbyBIMjY0X01BWF9EUEJfRlJBTUVTICogMiB0bwo+IGJldHRlciB0YWtlIGludG8gYWNj b3VudCBmaWVsZHMgaW4gc2VwYXJhdGUgcGFja2V0cywgbGlrZSBvdXIgcGFyc2VyCj4gcHJvcGFn YXRlcy4KPiAKPj4gQW5kIGFueXdheSwgdGhlcmUgaXMgbm8KPj4gcHJhY3RpY2FsIGJvdW5kIG9u IHRoZSBudW1iZXIgdGhhdCB5b3UgbWlnaHQgaGF2ZSB0byBjYWNoZTogSW1hZ2luZQo+PiBzb21l dGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nCj4+IEkwIFBuIEIxIEIyIC4uLiBCKG4tMSkKPj4gQSBk ZWNvZGVyIG9ubHkgbmVlZHMgb25lIHJlb3JkZXIgZnJhbWUgZm9yIHRoaXMsIGJlY2F1c2UgYSBk ZWNvZGVyIGNhbgo+PiBkcm9wIGFueSBCLWZyYW1lIHRoYXQgaXMgaGFzIGFscmVhZHkgb3V0cHV0 IChpZiBpdCBpcyBubyBsb25nZXIKPj4gcmVmZXJlbmNlZCwgYnV0IHRoZSBudW1iZXIgb2YgcmVm ZXJlbmNlcyBpcyBib3VuZGVkLCB0b28pLiBCdXQgYSBCU0YKPj4gY2FuJ3QgZG8gdGhpcywgYmVj YXVzZSBpdCBoYXMgdG8gbWFpbnRhaW4gZGVjb2Rpbmcgb3JkZXIgYW5kIGNhbgo+PiB0aGVyZWZv cmUgbm90IGRpc2NhcmQgYW55IG9mIHRoZSBCLWZyYW1lcy4KPj4KPj4+ICvCoMKgwqAgaWYgKCFz LT5maWZvKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4+PiAr Cj4+PiArwqDCoMKgIHMtPmNiYy0+ZGVjb21wb3NlX3VuaXRfdHlwZXPCoMKgwqAgPSBoMjY0X2Rl Y29tcG9zZV91bml0X3R5cGVzOwo+Pj4gK8KgwqDCoCBzLT5jYmMtPm5iX2RlY29tcG9zZV91bml0 X3R5cGVzID0KPj4+IEZGX0FSUkFZX0VMRU1TKGgyNjRfZGVjb21wb3NlX3VuaXRfdHlwZXMpOwo+ Pj4gKwo+Pj4gK8KgwqDCoCBoMjY0LT5sYXN0X3BvYyA9IGgyNjQtPmhpZ2hlc3RfcG9jID0gSU5U X01JTjsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyBpbnQgZ2V0X21tY29fcmVzZXQoY29uc3QgSDI2NFJhd1NsaWNlSGVhZGVyICpoZWFkZXIpCj4+ PiArewo+Pj4gK8KgwqDCoCBpZiAoaGVhZGVyLT5uYWxfdW5pdF9oZWFkZXIubmFsX3JlZl9pZGMg PT0gMCB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgICFoZWFkZXItPmFkYXB0aXZlX3JlZl9waWNfbWFy a2luZ19tb2RlX2ZsYWcpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+PiArCj4+PiAr wqDCoMKgIGZvciAoaW50IGkgPSAwOyBpIDwgSDI2NF9NQVhfTU1DT19DT1VOVDsgaSsrKSB7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKGhlYWRlci0+bW1jb1tpXS5tZW1vcnlfbWFuYWdlbWVudF9j b250cm9sX29wZXJhdGlvbiA9PSAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IDA7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAoaGVhZGVyLT5tbWNvW2ldLm1lbW9yeV9t YW5hZ2VtZW50X2NvbnRyb2xfb3BlcmF0aW9uCj4+PiA9PSA1KQo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuIDE7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJu IDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgaDI2NF9xdWV1ZV9mcmFtZShBVkJTRkNv bnRleHQgKmN0eCwgQVZQYWNrZXQgKnBrdCwgaW50Cj4+PiBwb2MsIGludCAqcXVldWVkKQo+Pj4g K3sKPj4+ICvCoMKgwqAgRFRTMlBUU0NvbnRleHQgKnMgPSBjdHgtPnByaXZfZGF0YTsKPj4+ICvC oMKgwqAgRFRTMlBUU0gyNjRDb250ZXh0ICpoMjY0ID0gJnMtPnUuaDI2NDsKPj4+ICvCoMKgwqAg RFRTMlBUU0ZyYW1lIGZyYW1lOwo+Pj4gK8KgwqDCoCBpbnQgcG9jX2RpZmYsIHJldDsKPj4+ICsK Pj4+ICvCoMKgwqAgcG9jX2RpZmYgPSAoaDI2NC0+cGljdHVyZV9zdHJ1Y3R1cmUgPT0gMykgKyAx Owo+Pj4gK8KgwqDCoCBpZiAocGt0LT5kdHMgIT0gQVZfTk9QVFNfVkFMVUUgJiYgcGt0LT5kdHMg PCAwICYmICFzLT5uYl9mcmFtZSkgewoKV2h5IGRvIHlvdSBjYXJlIGFib3V0IHdoZXRoZXIgZHRz IGlzIDwgMD8KCj4+PiArwqDCoMKgwqDCoMKgwqAgYXZfdHJlZV9lbnVtZXJhdGUocy0+cm9vdCwg JnBvY19kaWZmLCBOVUxMLCBkZWNfcG9jKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzLT5uYl9mcmFt ZSAtPSBwb2NfZGlmZjsKPj4+ICvCoMKgwqAgfQo+Pj4gK8KgwqDCoCBpZiAocG9jIDwgMCkgewo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGF2X3RyZWVfZW51bWVyYXRlKHMtPnJvb3QsICZwb2NfZGlmZiwg TlVMTCwgZGVjX3BvYyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcy0+bmJfZnJhbWUgLT0gcG9jX2Rp ZmY7Cj4+PiArwqDCoMKgIH0KPj4+ICvCoMKgwqAgLy8gQ2hlY2sgaWYgdGhlcmUgd2FzIGEgUE9D IHJlc2V0IChMaWtlIGFuIElEUiBzbGljZSkKPj4+ICvCoMKgwqAgaWYgKHMtPm5iX2ZyYW1lID4g aDI2NC0+aGlnaGVzdF9wb2MpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzLT5uYl9mcmFtZSA9IDA7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgaDI2NC0+aGlnaGVzdF9wb2MgPSBoMjY0LT5sYXN0X3BvYzsK Pj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCByZXQgPSBhbGxvY19hbmRfaW5zZXJ0X25v ZGUoY3R4LCBwa3QtPmR0cywgcGt0LT5kdXJhdGlvbiwKPj4+IHMtPm5iX2ZyYW1lLCBwb2NfZGlm Zik7Cj4+PiArwqDCoMKgIGlmIChyZXQgPCAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBy ZXQ7Cj4+PiArwqDCoMKgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlF1ZXVlaW5nIGZyYW1l IHdpdGggUE9DICVkLCBkdHMKPj4+ICUiUFJJZDY0IlxuIiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCBwb2MsIHBrdC0+ZHRzKTsKPj4+ICvCoMKgwqAgcy0+bmJfZnJhbWUgKz0gcG9jX2RpZmY7 Cj4+PiArCj4+PiArwqDCoMKgIC8vIEFkZCBmcmFtZSB0byBvdXRwdXQgRklGTyBvbmx5IG9uY2UK Pj4+ICvCoMKgwqAgaWYgKCpxdWV1ZWQpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ PiArCj4+PiArwqDCoMKgIGZyYW1lID0gKERUUzJQVFNGcmFtZSkgeyBwa3QsIHBvYywgcG9jX2Rp ZmYgfTsKPj4+ICvCoMKgwqAgcmV0ID0gYXZfZmlmb193cml0ZShzLT5maWZvLCAmZnJhbWUsIDEp Owo+Pj4gK8KgwqDCoCBhdl9hc3NlcnQyKHJldCA+PSAwKTsKPj4+ICvCoMKgwqAgKnF1ZXVlZCA9 IDE7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg aW50IGgyNjRfZmlsdGVyKEFWQlNGQ29udGV4dCAqY3R4KQo+Pj4gK3sKPj4+ICvCoMKgwqAgRFRT MlBUU0NvbnRleHQgKnMgPSBjdHgtPnByaXZfZGF0YTsKPj4+ICvCoMKgwqAgRFRTMlBUU0gyNjRD b250ZXh0ICpoMjY0ID0gJnMtPnUuaDI2NDsKPj4+ICvCoMKgwqAgQ29kZWRCaXRzdHJlYW1GcmFn bWVudCAqYXUgPSAmcy0+YXU7Cj4+PiArwqDCoMKgIEFWUGFja2V0ICppbjsKPj4+ICvCoMKgwqAg aW50IG91dHB1dF9waWN0dXJlX251bWJlciA9IElOVF9NSU47Cj4+PiArwqDCoMKgIGludCBmaWVs ZF9wb2NbMl07Cj4+PiArwqDCoMKgIGludCBxdWV1ZWQgPSAwLCByZXQ7Cj4+PiArCj4+PiArwqDC oMKgIHJldCA9IGZmX2JzZl9nZXRfcGFja2V0KGN0eCwgJmluKTsKPj4+ICvCoMKgwqAgaWYgKHJl dCA8IDApCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICsKPj4+ICvCoMKgwqAg cmV0ID0gZmZfY2JzX3JlYWRfcGFja2V0KHMtPmNiYywgYXUsIGluKTsKPj4+ICvCoMKgwqAgaWYg KHJldCA8IDApIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBBVl9MT0dfV0FSTklO RywgIkZhaWxlZCB0byBwYXJzZSBhY2Nlc3MgdW5pdC5cbiIpOwo+Pj4gK8KgwqDCoMKgwqDCoMKg IGdvdG8gZmFpbDsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBmb3IgKGludCBpID0g MDsgaSA8IGF1LT5uYl91bml0czsgaSsrKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgQ29kZWRCaXRz dHJlYW1Vbml0ICp1bml0ID0gJmF1LT51bml0c1tpXTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDC oCBzd2l0Y2ggKHVuaXQtPnR5cGUpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEgyNjRfTkFM X0lEUl9TTElDRToKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGgyNjQtPnBvYy5wcmV2X2Zy YW1lX251bcKgwqDCoMKgwqDCoMKgID0gMDsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGgy NjQtPnBvYy5wcmV2X2ZyYW1lX251bV9vZmZzZXQgPSAwOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaDI2NC0+cG9jLnByZXZfcG9jX21zYsKgwqDCoMKgwqDCoMKgwqDCoCA9Cj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBoMjY0LT5wb2MucHJldl9wb2NfbHNiwqDCoMKgwqDCoMKgwqDC oMKgID0gMDsKPj4+ICvCoMKgwqDCoMKgwqDCoCAvLyBmYWxsLXRocm91Z2gKPj4+ICvCoMKgwqDC oMKgwqDCoCBjYXNlIEgyNjRfTkFMX1NMSUNFOiB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjb25zdCBIMjY0UmF3U2xpY2UgKnNsaWNlID0gdW5pdC0+Y29udGVudDsKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNvbnN0IEgyNjRSYXdTbGljZUhlYWRlciAqaGVhZGVyID0gJnNsaWNl LT5oZWFkZXI7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBDb2RlZEJpdHN0cmVh bUgyNjRDb250ZXh0ICpjYnNfaDI2NCA9Cj4+PiBzLT5jYmMtPnByaXZfZGF0YTsKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IEgyNjRSYXdTUFMgKnNwcyA9IGNic19oMjY0LT5hY3Rp dmVfc3BzOwoKQ29uc2lkZXIgYSBwYWNrZXQgbGlrZSB0aGlzIC4uLiBTTElDRSBTUFMsIHdoZXJl IFNQUyBvdmVyd3JpdGVzIHRoZQpjdXJyZW50bHkgYWN0aXZlIHBhcmFtZXRlciBzZXQ7IHRoaXMg aXMgbm90IHBvc3NpYmxlIHdoZW4geW91ciBpbnB1dApwYWNrZXQgY29ycmVzcG9uZHMgdG8gYSBs ZWdhbCBhY2Nlc3MgdW5pdCwgYnV0IGl0IGlzIG5ldmVydGhlbGVzcwpwb3NzaWJsZS4gSW4gdGhp cyBjYXNlIGFjdGl2ZV9zcHMgd2lsbCBiZSB1bnNldCAoaXQgaXMgb25seSBzZXQgd2hlbgpwYXJz aW5nIHRoZSBuZXh0IHVuaXQgdGhhdCBhY3RpdmF0ZXMgaXQpLCBzbyB0aGUgY29kZSBiZWxvdyB3 aWxsIGNyYXNoLgoKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBnb3RfcmVzZXQ7Cj4+ PiArCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBJbml0aWFsaXplIHRoZSBTUFMgc3Ry dWN0IHdpdGggdGhlIGZpZWxkcwo+Pj4gZmZfaDI2NF9pbml0X3BvYygpIGNhcmVzIGFib3V0Cj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoMjY0LT5zcHMubG9nMl9tYXhfZnJhbWVfbnVtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgID0KPj4+IHNwcy0+bG9nMl9tYXhfZnJhbWVfbnVtX21pbnVz NCArIDQ7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoMjY0LT5zcHMucG9jX3R5cGXCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9Cj4+PiBzcHMtPnBpY19v cmRlcl9jbnRfdHlwZTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGgyNjQtPnNwcy5sb2cy X21heF9wb2NfbHNiwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9Cj4+PiBzcHMtPmxvZzJf bWF4X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNCArIDQ7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBoMjY0LT5zcHMub2Zmc2V0X2Zvcl9ub25fcmVmX3BpY8KgwqDCoMKgwqDCoMKgwqAgPQo+ Pj4gc3BzLT5vZmZzZXRfZm9yX25vbl9yZWZfcGljOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaDI2NC0+c3BzLm9mZnNldF9mb3JfdG9wX3RvX2JvdHRvbV9maWVsZCA9Cj4+PiBzcHMtPm9m ZnNldF9mb3JfdG9wX3RvX2JvdHRvbV9maWVsZDsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGgyNjQtPnNwcy5wb2NfY3ljbGVfbGVuZ3RowqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9 Cj4+PiBzcHMtPm51bV9yZWZfZnJhbWVzX2luX3BpY19vcmRlcl9jbnRfY3ljbGU7Cj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGludCBpID0gMDsgaSA8IGgyNjQtPnNwcy5wb2NfY3lj bGVfbGVuZ3RoOyBpKyspCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGgyNjQt PnNwcy5vZmZzZXRfZm9yX3JlZl9mcmFtZVtpXSA9Cj4+PiBzcHMtPm9mZnNldF9mb3JfcmVmX2Zy YW1lW2ldOwo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaDI2NC0+cGljdHVyZV9z dHJ1Y3R1cmUgPSBzcHMtPmZyYW1lX21ic19vbmx5X2ZsYWcgPyAzIDoKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAoaGVhZGVyLT5maWVsZF9waWNfZmxhZyA/Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBoZWFkZXItPmZpZWxkX3BpY19mbGFnICsKPj4+IGhlYWRlci0+Ym90dG9tX2ZpZWxkX2ZsYWcg OiAzKTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGgyNjQtPnBvYy5mcmFtZV9u dW0gPSBoZWFkZXItPmZyYW1lX251bTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGgyNjQt PnBvYy5wb2NfbHNiID0gaGVhZGVyLT5waWNfb3JkZXJfY250X2xzYjsKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGgyNjQtPnBvYy5kZWx0YV9wb2NfYm90dG9tID0KPj4+IGhlYWRlci0+ZGVs dGFfcGljX29yZGVyX2NudF9ib3R0b207Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoMjY0 LT5wb2MuZGVsdGFfcG9jWzBdID0gaGVhZGVyLT5kZWx0YV9waWNfb3JkZXJfY250WzBdOwo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaDI2NC0+cG9jLmRlbHRhX3BvY1sxXSA9IGhlYWRlci0+ ZGVsdGFfcGljX29yZGVyX2NudFsxXTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGZpZWxkX3BvY1swXSA9IGZpZWxkX3BvY1sxXSA9IElOVF9NQVg7Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSBmZl9oMjY0X2luaXRfcG9jKGZpZWxkX3BvYywKPj4+ICZvdXRwdXRf cGljdHVyZV9udW1iZXIsICZoMjY0LT5zcHMsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmgyNjQtPnBvYywg aDI2NC0+cGljdHVyZV9zdHJ1Y3R1cmUsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPj4+IGhlYWRlci0+bmFs X3VuaXRfaGVhZGVyLm5hbF9yZWZfaWRjKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChyZXQgPCAwKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgImZmX2gyNjRfaW5pdF9wb2MoKQo+Pj4gZmFpbHVyZVxuIik7Cj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdF9y ZXNldCA9IGdldF9tbWNvX3Jlc2V0KGhlYWRlcik7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBoMjY0LT5wb2MucHJldl9mcmFtZV9udW3CoMKgwqDCoMKgwqDCoCA9IGdvdF9yZXNldCA/IDAg Ogo+Pj4gaDI2NC0+cG9jLmZyYW1lX251bTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGgy NjQtPnBvYy5wcmV2X2ZyYW1lX251bV9vZmZzZXQgPSBnb3RfcmVzZXQgPyAwIDoKPj4+IGgyNjQt PnBvYy5mcmFtZV9udW1fb2Zmc2V0Owo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGhl YWRlci0+bmFsX3VuaXRfaGVhZGVyLm5hbF9yZWZfaWRjICE9IDApIHsKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaDI2NC0+cG9jLnByZXZfcG9jX21zYsKgwqDCoMKgwqAgPSBn b3RfcmVzZXQgPyAwIDoKPj4+IGgyNjQtPnBvYy5wb2NfbXNiOwo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZiAoZ290X3Jlc2V0KQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGgyNjQtPnBvYy5wcmV2X3BvY19sc2IgPSBoMjY0LT5waWN0dXJl X3N0cnVjdHVyZQo+Pj4gPT0gMiA/IDAgOiBmaWVsZF9wb2NbMF07Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBoMjY0LT5wb2MucHJldl9wb2NfbHNiID0gaDI2NC0+cG9jLnBvY19sc2I7Cj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAob3V0cHV0X3BpY3R1cmVfbnVtYmVyICE9IGgyNjQtPmxhc3RfcG9jKSB7Cj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGgyNjQtPmxhc3RfcG9jID0gb3V0cHV0X3Bp Y3R1cmVfbnVtYmVyOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoMjY0LT5o aWdoZXN0X3BvYyA9IEZGTUFYKGgyNjQtPmhpZ2hlc3RfcG9jLAo+Pj4gb3V0cHV0X3BpY3R1cmVf bnVtYmVyKTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0g aDI2NF9xdWV1ZV9mcmFtZShjdHgsIGluLAo+Pj4gb3V0cHV0X3BpY3R1cmVfbnVtYmVyLCAmcXVl dWVkKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICvCoMKg wqDCoMKgwqDCoCBkZWZhdWx0Ogo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIGlmIChv dXRwdXRfcGljdHVyZV9udW1iZXIgPT0gSU5UX01JTikgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJl dCA9IEFWRVJST1JfSU5WQUxJRERBVEE7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIHJldCA9IEFWRVJST1IoRUFHQUlOKTsKPj4+ ICtmYWlsOgo+Pj4gK8KgwqDCoCBmZl9jYnNfZnJhZ21lbnRfcmVzZXQoYXUpOwo+Pj4gK8KgwqDC oCBpZiAoIXF1ZXVlZCkKPj4+ICvCoMKgwqDCoMKgwqDCoCBhdl9wYWNrZXRfZnJlZSgmaW4pOwo+ Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9p ZCBoMjY0X2ZsdXNoKEFWQlNGQ29udGV4dCAqY3R4KQo+Pj4gK3sKPj4+ICvCoMKgwqAgRFRTMlBU U0NvbnRleHQgKnMgPSBjdHgtPnByaXZfZGF0YTsKPj4+ICvCoMKgwqAgRFRTMlBUU0gyNjRDb250 ZXh0ICpoMjY0ID0gJnMtPnUuaDI2NDsKPj4+ICsKPj4+ICvCoMKgwqAgbWVtc2V0KCZoMjY0LT5z cHMsIDAsIHNpemVvZihoMjY0LT5zcHMpKTsKPj4+ICvCoMKgwqAgbWVtc2V0KCZoMjY0LT5wb2Ms IDAsIHNpemVvZihoMjY0LT5wb2MpKTsKPj4+ICvCoMKgwqAgaDI2NC0+bGFzdF9wb2MgPSBoMjY0 LT5oaWdoZXN0X3BvYyA9IElOVF9NSU47Cj4+PiArfQo+Pj4gKwo+Pj4gKy8vIENvcmUgZnVuY3Rp b25zCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4+PiArwqDCoMKgIGVudW0gQVZDb2RlY0lE IGlkOwo+Pj4gK8KgwqDCoCBpbnQgKCppbml0KShBVkJTRkNvbnRleHQgKmN0eCk7Cj4+PiArwqDC oMKgIGludCAoKmZpbHRlcikoQVZCU0ZDb250ZXh0ICpjdHgpOwo+Pj4gK8KgwqDCoCB2b2lkICgq Zmx1c2gpKEFWQlNGQ29udGV4dCAqY3R4KTsKPj4+ICt9IGZ1bmNfdGFiW10gPSB7Cj4+PiArwqDC oMKgIHsgQVZfQ09ERUNfSURfSDI2NCwgaDI2NF9pbml0LCBoMjY0X2ZpbHRlciwgaDI2NF9mbHVz aCB9LAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGludCBkdHMycHRzX2luaXQoQVZCU0ZDb250 ZXh0ICpjdHgpCj4+PiArewo+Pj4gK8KgwqDCoCBEVFMyUFRTQ29udGV4dCAqcyA9IGN0eC0+cHJp dl9kYXRhOwo+Pj4gK8KgwqDCoCBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICphdSA9ICZzLT5hdTsK Pj4+ICvCoMKgwqAgaW50IGksIHJldDsKPj4+ICsKPj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8 IEZGX0FSUkFZX0VMRU1TKGZ1bmNfdGFiKTsgaSsrKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYg KGZ1bmNfdGFiW2ldLmlkID09IGN0eC0+cGFyX2luLT5jb2RlY19pZCkgewo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcy0+aW5pdMKgwqAgPSBmdW5jX3RhYltpXS5pbml0Owo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcy0+ZmlsdGVyID0gZnVuY190YWJbaV0uZmlsdGVyOwo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcy0+Zmx1c2jCoCA9IGZ1bmNfdGFiW2ldLmZsdXNoOwo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4g K8KgwqDCoCB9Cj4+PiArwqDCoMKgIGlmIChpID09IEZGX0FSUkFZX0VMRU1TKGZ1bmNfdGFiKSkK Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUl9CVUc7Cj4+PiArCj4+PiArwqDCoMKg IHJldCA9IGZmX2Nic19pbml0KCZzLT5jYmMsIGN0eC0+cGFyX2luLT5jb2RlY19pZCwgY3R4KTsK Pj4+ICvCoMKgwqAgaWYgKHJldCA8IDApCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsK Pj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0gcy0+aW5pdChjdHgpOwo+Pj4gK8KgwqDCoCBpZiAocmV0 IDwgMCkKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4gKwo+Pj4gK8KgwqDCoCBp ZiAoIWN0eC0+cGFyX2luLT5leHRyYWRhdGFfc2l6ZSkKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gMDsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0ID0gZmZfY2JzX3JlYWRfZXh0cmFkYXRhKHMtPmNi YywgYXUsIGN0eC0+cGFyX2luKTsKPj4+ICvCoMKgwqAgaWYgKHJldCA8IDApCj4+PiArwqDCoMKg wqDCoMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcsICJGYWlsZWQgdG8gcGFyc2UgZXh0 cmFkYXRhLlxuIik7Cj4+PiArCj4+PiArwqDCoMKgIGZmX2Nic19mcmFnbWVudF9yZXNldChhdSk7 Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50 IGR0czJwdHNfZmlsdGVyKEFWQlNGQ29udGV4dCAqY3R4LCBBVlBhY2tldCAqb3V0KQo+Pj4gK3sK Pj4+ICvCoMKgwqAgRFRTMlBUU0NvbnRleHQgKnMgPSBjdHgtPnByaXZfZGF0YTsKPj4+ICvCoMKg wqAgRFRTMlBUU05vZGUgKnBvY19ub2RlID0gTlVMTDsKPj4+ICvCoMKgwqAgRFRTMlBUU0ZyYW1l IGZyYW1lOwo+Pj4gK8KgwqDCoCBpbnQgcG9jLCByZXQ7Cj4+PiArCj4+PiArwqDCoMKgIC8vIEZp bGwgdXAgdGhlIEZJRk8gYW5kIFBPQyB0cmVlCj4+PiArwqDCoMKgIGlmICghcy0+ZW9mICYmIGF2 X2ZpZm9fY2FuX3dyaXRlKHMtPmZpZm8pKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gcy0+ ZmlsdGVyKGN0eCk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCAhPSBBVkVSUk9SX0VPRikK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArwqDCoMKgwqDCoMKg wqAgcy0+ZW9mID0gMTsKPj4KPj4gZW9mIGlzIG9ubHkgZXZlciByZXNldCBpbiBmbHVzaCwgc28g aXQgc2VlbXMgdGhhdCB5b3UgcmVhbGx5IGludGVuZCBpdAo+PiB0byBiZSBvbmx5IHNldCBvbiBl b2YuIFRoYXQgbWVhbnMgdGhhdCB5b3UgaW50ZW5kIHRvIGJ1ZmZlciB0aGUgd2hvbGUKPj4gc3Ry ZWFtIGluIG1lbW9yeSBiZWZvcmUgcmV0dXJuaW5nIGFueXRoaW5nLgo+IAo+IE5vLCBpIGRvbid0 IHdhbnQgdG8gYnVmZmVyIHRoZSB3aG9sZSBzdHJlYW0sIGkgd2FudCB0byBmaWxsIHRoZSBGSUZP LAo+IHdoaWNoZXZlciBzaXplIGl0IG1heSBiZSwgYmVmb3JlIGkgc3RhcnQgZmV0Y2hpbmcgYW5k IHJlZmlsbGluZyBwYWNrZXRzCj4gb25lIGF0IGEgdGltZS4gQW5kIG9mIGNvdXJzZSBlb2YgaXMg c2V0IG9uIGVvZiBhbmQgcmVzZXQgb24gZmx1c2goKS4gVGhlCj4gb25seSByZWFzb24gaSBhZGRl ZCBpdCB3YXMgYmVjYXVzZSBpIGNhbid0IHVzZSBGRkJTRkNvbnRleHQtPmVvZiwgd2hpY2gKPiBp cyB0aGUgZXhhY3Qgc2FtZS4KClNvcnJ5LCBJIGNvbXBsZXRlbHkgbWlzcmVhZCB0aGUgYWJvdmUg Y29kZTogSXQgYWxsb3dzIHRvIHJldHVybiBwYWNrZXRzCmV2ZW4gd2l0aCBlb2YgdW5zZXQsIG5h bWVseSB3aGVuIHRoZSBmaWZvIGlzIGZ1bGwuCgo+IFRoZSByZWFzb24gaSB3YW50ZWQgYXV0b2dy b3cgd2FzIHRvIG5vdCBoYXZlIHRvIGFsbG9jYXRlIHRoZSBmdWxsIEZJRk8KPiBidWZmZXIgZnJv bSB0aGUgc3RhcnQsIGluIGNhc2UgYSBzdHJlYW0gaXMgc2hvcnQgZW5vdWdoIHRvIG5vdCBmaWxs IGl0LAo+IGJ1dCBhZnRlciB0aGlua2luZyBvbiBpdCBpIGZpZ3VyZWQgaXQgd2FzIHBvaW50bGVz cyBzaW5jZSBlYWNoIGVsZW1lbnQKPiBpcyBzbWFsbC4KPiAKPj4gWW91IHByZXN1bWFibHkgd2Fu dCB0byBzZXQgYQo+PiBodWdlIGF1dG8tZ3JvdyBsaW1pdCBvbiB5b3VyIEZJRk8gYW5kIHRoYXQg aXMgdGhlIHJlYXNvbiB3aHkgeW91IHdhbnQgdG8KPj4gY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2Yg YXZfZmlmb19jYW5fd3JpdGUoKSAoSSBhbSBvayB3aXRoIHRoYXQgY2hhbmdlLAo+PiBidHcpLiBC dXQgdGhpcyBpcyBhIGhvcnJpYmxlIGRlc2lnbjogRXZlcnkgY29kZWMgdGhlcmUgaXMgaGFzIGFu IHVwcGVyCj4+IGJvdW5kIG9uIGl0cyBEUEIgYW5kIHRoZXJlZm9yZSBhbiB1cHBlciBib3VuZCBv biB0aGUgbnVtYmVyIE4gb2YgcmVvcmRlcgo+PiBmcmFtZXMuIFRoaXMgaW1wbGllcyB0aGF0IGlm IHlvdSBrbm93IHRoYXQgeW91IGhhdmUgYnVmZmVyZWQgTiBmcmFtZXMKPj4gdGhhdCBhcmUgZGlz cGxheWVkIGFmdGVyIHRoZSBmaXJzdCBmcmFtZSAoYWNjb3JkaW5nIHRvIGR0cywgaS5lLiB0aGUK Pj4gb2xkZXN0IGZyYW1lKSB0aGF0IHlvdSBoYXZlIGN1cnJlbnRseSBidWZmZXJlZCwgdGhlbiB0 aGVyZSBjYW4ndCBiZSBhCj4+IGZ1cnRoZXIgZnJhbWUgdGhhdCBpcyBkaXNwbGF5ZWQgYmVmb3Jl IHRoZSBvbGRlc3QgZnJhbWUgKGlmIHRoZXJlIHdlcmUsCj4+IHRoZW4gdGhlcmUgd291bGQgYmUg YXQgbGVhc3QgTisxIHJlb3JkZXJlZCBmcmFtZXMgKHRoZSBOICsgdGhlIG9sZGVzdAo+PiBvbmUp KS4gU28geW91IGNhbiBhbHJlYWR5IG91dHB1dCB0aGUgb2xkZXN0IGZyYW1lIChhbmQgcG90ZW50 aWFsbHkgZXZlbgo+PiBtb3JlIGZyYW1lcykuIChPZiBjb3Vyc2UsIGZvciBILjI2NCwgZXZlcnl0 aGluZyBpcyBjb21wbGljYXRlZCBieSB0aGUKPj4gZmFjdCB0aGF0IGNvbXBsZW1lbnRhcnkgZmll bGQgcGFpcnMgb25seSB0YWtlIHVwIG9uZSBzbG90IGluIHRoZSBEUEIgYW5kCj4+IHRoZXJlZm9y ZSBvbmx5IGNvdW50IGFzIG9uZSByZW9yZGVyIGZyYW1lLikKPj4gQXMgZXhwbGFpbmVkIGFib3Zl LCBoYXZpbmcgYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHJlb3JkZXIgZnJhbWVzIGRvZXMKPj4g bm90IGltcGx5IHRoYXQgdGhlcmUgaXMgYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHBhY2tldHMg eW91IG5lZWQgdG8KPj4gYnVmZmVyLiBJTU8geW91IHNob3VsZCBpbXBvc2UgYW4gYXJiaXRyYXJ5 LCBidXQgc2FuZSBsaW1pdCBmb3IgZWFjaAo+PiBjb2RlYyBoZXJlLiBBdXRvLWdyb3dpbmcgRklG T3MgYXJlIG5vdCByZWFsbHkgbmVlZGVkLiAoSWYgeW91IGRlY2lkZSB0bwo+PiBub3QgaW1wb3Nl IGFuIGFyYml0cmFyeSBsaW1pdCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkIGZvcgo+PiBhdl9maWZv X2Nhbl93cml0ZSgpIGF0IGFsbC4pCj4gCj4gV2hhdCB1cHBlciBib3VuZCBkbyB5b3Ugc3VnZ2Vz dCwgaWYgSDI2NF9NQVhfRFBCX0ZSQU1FUyAqIDIgaXMgbm90IGVub3VnaD8KPiAKCkgyNjRfTUFY X0RQQl9GUkFNRVMgKiAyIGlzIG9ubHkgbm90IGVub3VnaCBmb3IgaHlwb3RoZXRpY2FsIHN0cmVh bXM7IDIgKgoyICogSDI2NF9NQVhfRFBCX0ZSQU1FUyBpcyBlbm91Z2ggZm9yIGV2ZXJ5dGhpbmcg ZXhjZXB0IHNvbWV0aGluZwpjcmFmdGVkIGJ5IGEgbWFsaWNpb3VzIGFkdmVyc2FyeSBvciBhIGZ1 enplci4KKEFsc28gbm90ZSB0aGF0IGl0IGlzIG5vdCByZWFsbHkgY2VydGFpbiB0aGF0IHVzaW5n IGEgdHJlZSBpcyBldmVuCmFkdmFudGFnZW91cyB3aGVuIHVzaW5nIHN1Y2ggc21hbGwgbnVtYmVy IG9mIG5vZGVzOiBJdCdzIGFzeW1wdG90aWMKcGVyZm9ybWFuY2UgaXMgaXJyZWxldmFudCBpbiB0 aGlzIHNjZW5hcmlvIGFuZCBpdHMgdXNlIGZvcmNlcwphbGxvY2F0aW9ucyBmb3IgZXZlcnkgZWxl bWVudCB1cG9uIHlvdS4pCgo+Pgo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIGlmICgh YXZfZmlmb19jYW5fcmVhZChzLT5maWZvKSkKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZF UlJPUl9FT0Y7Cj4+PiArCj4+PiArwqDCoMKgIC8vIEZldGNoIGEgcGFja2V0IGZyb20gdGhlIEZJ Rk8KPj4+ICvCoMKgwqAgcmV0ID0gYXZfZmlmb19yZWFkKHMtPmZpZm8sICZmcmFtZSwgMSk7Cj4+ PiArwqDCoMKgIGF2X2Fzc2VydDIocmV0ID49IDApOwo+Pj4gK8KgwqDCoCBhdl9wYWNrZXRfbW92 ZV9yZWYob3V0LCBmcmFtZS5wa3QpOwo+Pj4gK8KgwqDCoCBhdl9wYWNrZXRfZnJlZSgmZnJhbWUu cGt0KTsKPj4+ICsKPj4+ICvCoMKgwqAgLy8gU2VhcmNoIHRoZSB0aW1lc3RhbXAgZm9yIHRoZSBy ZXF1ZXN0ZWQgUE9DIGFuZCBzZXQgUFRTCj4+PiArwqDCoMKgIHBvYyA9IGZyYW1lLnBvYzsKPj4+ ICvCoMKgwqAgcG9jX25vZGUgPSBhdl90cmVlX2ZpbmQocy0+cm9vdCwgJnBvYywgY21wX2ZpbmQs IE5VTEwpOwo+Pj4gK8KgwqDCoCBpZiAocG9jX25vZGUpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBv dXQtPnB0cyA9IHBvY19ub2RlLT5kdHM7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFzLT5lb2Yp IHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIFJlbW92ZSB0aGUgZm91bmQgZW50cnkg ZnJvbSB0aGUgdHJlZQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IEFWVHJlZU5v ZGUgKm5vZGUgPSBOVUxMOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfdHJlZV9pbnNl cnQoJnMtPnJvb3QsIHBvY19ub2RlLCBjbXBfaW5zZXJ0LCAmbm9kZSk7Cj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhdl9mcmVlcCgmcG9jX25vZGUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYXZfZnJlZShub2RlKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgIH0g ZWxzZSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcG9jLS07Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYg KHMtPmVvZiAmJiAocG9jX25vZGUgPSBhdl90cmVlX2ZpbmQocy0+cm9vdCwgJnBvYywKPj4+IGNt cF9maW5kLCBOVUxMKSkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG91dC0+cHRzID0g cG9jX25vZGUtPmR0cyArIHBvY19ub2RlLT5kdXJhdGlvbjsKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldCA9IGFsbG9jX2FuZF9pbnNlcnRfbm9kZShjdHgsIG91dC0+cHRzLCBvdXQtPmR1 cmF0aW9uLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmcmFtZS5wb2MsIGZyYW1lLnBvY19k aWZmKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKSB7Cj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X3BhY2tldF91bnJlZihvdXQpOwo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFyZXQpCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywg IlF1ZXVlaW5nIGZyYW1lIHdpdGggUE9DCj4+PiAlZCwgZHRzICUiUFJJZDY0IlxuIiwKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmcmFtZS5wb2MsIG91 dC0+cHRzKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGF2X2xvZyhjdHgsIEFWX0xPR19XQVJOSU5HLCAiTm8gdGltZXN0YW1wIGZvciBQT0Mg JWQgaW4KPj4+IHRyZWVcbiIsIGZyYW1lLnBvYyk7Cj4+PiArwqDCoMKgIH0KPj4+ICvCoMKgwqAg YXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiUmV0dXJuaW5nIGZyYW1lIGZvciBQT0MgJWQsIGR0 cwo+Pj4gJSJQUklkNjQiLCBwdHMgJSJQUklkNjQiXG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgIGZyYW1lLnBvYywgb3V0LT5kdHMsIG91dC0+cHRzKTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0 dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGR0czJwdHNfZmx1c2goQVZCU0ZD b250ZXh0ICpjdHgpCj4+PiArewo+Pj4gK8KgwqDCoCBEVFMyUFRTQ29udGV4dCAqcyA9IGN0eC0+ cHJpdl9kYXRhOwo+Pj4gK8KgwqDCoCBEVFMyUFRTRnJhbWUgZnJhbWU7Cj4+PiArCj4+PiArwqDC oMKgIHMtPmZsdXNoKGN0eCk7Cj4+Cj4+IFRoaXMgcHJlc3VtZXMgdGhhdCBldmVyeSBjb2RlYyBo YXMgYSBmbHVzaCBjYWxsYmFjayBhbmQgdGhhdCBpdCBoYXMgYmVlbgo+PiBzZXQuIEFzIGV4cGxh aW5lZCBiZWxvdywgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSBldmVuIGlmIHRoZSBic2Yg aXMKPj4gY2FsbGVkIHdpdGggYSBzdXBwb3J0ZWQgY29kZWMgKGkuZS4gaWYgaXQgZG9lcyBub3Qg dHJpZ2dlciB0aGUKPj4gQVZFUlJPUl9CVUcgY29kZXBhdGggaW4gaW5pdCkuCj4gCj4gV2lsbCBh ZGQgYSBjaGVjay4KPiAKPj4KPj4+ICvCoMKgwqAgcy0+ZW9mID0gMDsKPj4+ICsKPj4+ICvCoMKg wqAgd2hpbGUgKGF2X2ZpZm9fY2FuX3JlYWQocy0+ZmlmbykpIHsKPj4+ICvCoMKgwqDCoMKgwqDC oCBhdl9maWZvX3JlYWQocy0+ZmlmbywgJmZyYW1lLCAxKTsKPj4KPj4gwqDCoMKgwqDCoMKgwqAg d2hpbGUgKGF2X2ZpZm9fcmVhZChzLT5maWZvLCAmZnJhbWUsIDEpID49IDApCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYXZfcGFja2V0X2ZyZWUoJmZyYW1lLnBrdCk7Cj4+Cj4+IEFueXdheSwg Y2xvc2UgaXMgY2FsbGVkIGV2ZW4gd2hlbiBpbml0IGZhaWxzIChvciBldmVuIHdoZW4gaXQgd2Fz IG5ldmVyCj4+IGNhbGxlZDsgdGhlIEJTRiBBUEkgY2FsbHMgaXQgaWYgcHJpdl9kYXRhIGNvdWxk IGJlIGFsbG9jYXRlZCkgYW5kIGluCj4+IGNhc2UgdGhlIGZpZm8gaGFzIG5vdCBiZWVuIGFsbG9j YXRlZCwgdGhlIGFib3ZlIHdpbGwgY3Jhc2ggYXMgY2xvc2UKPj4gY2FsbHMgZmx1c2guCj4gCj4g V2lsbCBhZGQgYSBjaGVjayB0b28uIElkZWFsbHkgSSdkIGFsbG9jYXRlIHRoZSBGSUZPIGhlcmUg aW5zdGVhZCBvZgo+IHdpdGhpbiB0aGUgY29kZWQncyBwcml2YXRlIGluaXQoKSBtZXRob2QsIGJ1 dCB0aGF0IGNhbiBiZSBkb25lIGxhdGVyCj4gd2hlbiB3ZSBhZGQgbW9yZSBjb2RlY3MuCj4gCj4+ Cj4+PiArwqDCoMKgwqDCoMKgwqAgYXZfcGFja2V0X2ZyZWUoJmZyYW1lLnBrdCk7Cj4+PiArwqDC oMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgYXZfdHJlZV9lbnVtZXJhdGUocy0+cm9vdCwgTlVMTCwg TlVMTCwgZnJlZV9ub2RlKTsKPj4+ICvCoMKgwqAgYXZfdHJlZV9kZXN0cm95KHMtPnJvb3QpOwo+ Pgo+PiBNaXNzaW5nIHMtPnJvb3QgPSBOVUxMOwo+IAo+IE5pY2UgY2F0Y2gsIHdpbGwgYWRkLgo+ IAo+Pgo+Pj4gKwo+Pj4gK8KgwqDCoCBmZl9jYnNfZnJhZ21lbnRfcmVzZXQoJnMtPmF1KTsKPj4+ ICvCoMKgwqAgZmZfY2JzX2ZsdXNoKHMtPmNiYyk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2 b2lkIGR0czJwdHNfY2xvc2UoQVZCU0ZDb250ZXh0ICpjdHgpCj4+PiArewo+Pj4gK8KgwqDCoCBE VFMyUFRTQ29udGV4dCAqcyA9IGN0eC0+cHJpdl9kYXRhOwo+Pj4gKwo+Pj4gK8KgwqDCoCBkdHMy cHRzX2ZsdXNoKGN0eCk7Cj4+PiArCj4+PiArwqDCoMKgIGF2X2ZpZm9fZnJlZXAyKCZzLT5maWZv KTsKPj4+ICvCoMKgwqAgZmZfY2JzX2ZyYWdtZW50X2ZyZWUoJnMtPmF1KTsKPj4+ICvCoMKgwqAg ZmZfY2JzX2Nsb3NlKCZzLT5jYmMpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgY29uc3QgZW51 bSBBVkNvZGVjSUQgZHRzMnB0c19jb2RlY19pZHNbXSA9IHsKPj4+ICvCoMKgwqAgQVZfQ09ERUNf SURfSDI2NCwKPj4+ICvCoMKgwqAgQVZfQ09ERUNfSURfTk9ORSwKPj4+ICt9Owo+Pj4gKwo+Pj4g K2NvbnN0IEZGQml0U3RyZWFtRmlsdGVyIGZmX2R0czJwdHNfYnNmID0gewo+Pj4gK8KgwqDCoCAu cC5uYW1lwqDCoMKgwqDCoMKgwqDCoCA9ICJkdHMycHRzIiwKPj4+ICvCoMKgwqAgLnAuY29kZWNf aWRzwqDCoMKgID0gZHRzMnB0c19jb2RlY19pZHMsCj4+PiArwqDCoMKgIC5wcml2X2RhdGFfc2l6 ZSA9IHNpemVvZihEVFMyUFRTQ29udGV4dCksCj4+PiArwqDCoMKgIC5pbml0wqDCoMKgwqDCoMKg wqDCoMKgwqAgPSBkdHMycHRzX2luaXQsCj4+PiArwqDCoMKgIC5mbHVzaMKgwqDCoMKgwqDCoMKg wqDCoCA9IGR0czJwdHNfZmx1c2gsCj4+PiArwqDCoMKgIC5jbG9zZcKgwqDCoMKgwqDCoMKgwqDC oCA9IGR0czJwdHNfY2xvc2UsCj4+PiArwqDCoMKgIC5maWx0ZXLCoMKgwqDCoMKgwqDCoMKgID0g ZHRzMnB0c19maWx0ZXIsCj4+PiArfTsKPj4KClRoaXMgd2hvbGUgYXBwcm9hY2ggaGFzIGEgZmxh dzogWW91IHByZXN1bWUgdGhhdCB0aGUgaW5wdXQgcGFja2V0cyBoYXZlCm5vIHB0cyBhdCBhbGw7 IHlldCB0aGlzIG5lZWRuJ3QgYmUgdHJ1ZS4gRS5nLiBpdCBpcyBub3QgdW5jb21tb24gdG8gcHV0 CmJvdGggZmllbGRzIGludG8gdGhlIHNhbWUgcGVzIHBhY2tldCBpbiBtcGVndHMsIHNvIHRoYXQg b25seSBvbmUgb2YgdGhlCnBhY2tldHMgKG5hbWVseSB0aGUgZmlyc3Qgb25lKSBoYXMgYSBwdHMg YWZ0ZXIgb3VyIHBhcnNlciBoYXMgc3BsaXQgdGhlCmZpZWxkcyBpbnRvIHRoZWlyIG93biBwYWNr ZXRzLiBJbiB0aGlzIGNhc2Ugb25lIHNob3VsZCByYXRoZXIKaW50ZXJwb2xhdGUgdGhlIHB0cyBi YXNlZCB1cG9uIHRoZSBrbm93biBwdHMgb2YgdGhlIG90aGVyIHBhY2tldHMuIFNlZQp0aWNrZXQg IzY5MDMgZm9yIGFuIGV4YW1wbGUuCgotIEFuZHJlYXMKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWct ZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1w ZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1w ZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=