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 8B56A428CE for ; Tue, 5 Apr 2022 17:37:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5CFD368B0C5; Tue, 5 Apr 2022 20:37:14 +0300 (EEST) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2076.outbound.protection.outlook.com [40.92.91.76]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9A69868AEFE for ; Tue, 5 Apr 2022 20:37:08 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gkOw/mDmq0ZdGvCe8n5j7YeeVSLXCnoKyPpP9NmlNIL4O1k7lLaVrtQTIdO0NDl+msLaGenSX0lHp7QfkTk7ylN5NrJey8/Q8QHs0fz4nxitprBCF6Huhni6DIj/sy3R6d7kT/07tz/EXxdb3jggPBwRwh3JQwSdkLUscB2N7Y5HGacDgQvCao/HAOn7zxbQy9ITGqwP8q/1Yv6yRc1b4Hzywyxjg5PCpBKA6nXamSYkvBuIix66XC1DrxUSLf47aH5Hiz7YrQkmysbxh4XOoaJkZW1yqdXn+EP9MyCGfcapHRQeWUmq4v8YbBRGOA1yuaKIv9wZ6JkJut1JyJB/1g== 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=7W7T2hwJhjb8BN6dMHZMLSyQVUnXphQVXxwV5Z786sc=; b=STr8VERpN/xEnS6np3934YVyWDZztTlMbLJWgQFiToPGWMg8z7glqaAF2F2prLHzTeQvGaWKG9S5nvb9B1NFQv8dkdE5ooxMUIZx4Lbz54ZItgZlUWqL3l/ILkuxST9AxACBV5fv0brNGhjLiPLUMm7qxjZic84wDooNWJwgtbPRmlWHUsIPH2orFDURYDBcz+XWy6EETbXgPUHadsrgWNR8pOsskSdln8UwLk1u4jRUrM6Vkof2/GeNYn1oexrfHbv/9MYeBpMcm55OzK1f7oc9ENJdCLmOQ0oQQ9Xx/miE408CmdmyX7MNeBFmX2XX+QeNOdleZ33J8QesVdUuzw== 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=7W7T2hwJhjb8BN6dMHZMLSyQVUnXphQVXxwV5Z786sc=; b=HG7cC2MQcpocvEYes9iITxbqkevo/rTHA+pw17caonRneH0871EmftWAh5ARaumqAkTpJo1AKd3l4hri3TvEHZr21rK1tE0KrEQ7L207XMnqjJOZJX1ZD+uCIdwSV4UqXNhrWjKRZvlqMTLG6YByeSTrkAmfO/kZzaFgPf83615WEAH/7M/NC7+fKlw4Nd9/pOCwZLhNGnlSsTa7Yw12Ks/PjcKuepYSf42Ji5TsVb1OQ9TxMtaiCHh75AAKxDktMNJvwB7SOXh0edcMyjvPEJ0GSTTkvsjt/aDV4gnbxd+6aJiAiI6hCGC+Nhog29LfYXV7foQBjNloFqf4/XppdA== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by DBAPR01MB6677.eurprd01.prod.exchangelabs.com (2603:10a6:10:181::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.31; Tue, 5 Apr 2022 17:37:05 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::6553:a424:79bf:6dc3]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::6553:a424:79bf:6dc3%3]) with mapi id 15.20.5123.031; Tue, 5 Apr 2022 17:37:05 +0000 Message-ID: Date: Tue, 5 Apr 2022 19:37:02 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <006701d8481f$9ccdf900$d669eb00$@samsung.com> From: Andreas Rheinhardt In-Reply-To: <006701d8481f$9ccdf900$d669eb00$@samsung.com> X-TMN: [4rWr9rKlGM5NYiw8x7P2XmILQ63BxK/h] X-ClientProxiedBy: ZR0P278CA0196.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::22) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <213bb360-2e00-02d7-2bd8-80ed7491f5f7@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2ab94497-acee-460f-20b3-08da172ae656 X-MS-TrafficTypeDiagnostic: DBAPR01MB6677:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: K0w1hOqynuZU5BD0HtMHKGJY+Q2ltkIBe0PONPqU/1lOJn/LCM/ILwV+i9KAwqhobEPFYjeGIr6a1DAyH0Ny7WZUU8d6E3gW8nGlF5IGwccwPgwfHHLbpz/POCLQCGgOXEgofNASeixr4TU22VBpqxZhk8yjtw9b3WhJdenddHP8Rk24nFme2SLQiiGO4jtroXPjufH2ru5MJ1RQoG0SCnf2tHdQPTaM96f8P7Y2hERHG7dfr56b/2LqAKJaiU2Jf48J+LN2ZChJRk4Pxj32fvrqskqn21AwvzaK/7lNovMIkHyA2yoyc8iWVxx2nF7Q53NKehaAY0qrZGam2ZUFark6ifXpt2rROhZHUEBch6ajS0c+1nN4/mrkrF8l8CD5hl86q5veF1/djOJ+MjZwuT/bcQlFgdMQk5+z/NbLmry2Sge5pQJF6kGo2wYK/LIq0g68tVdJ6DMtmpKRcpVhpBxYyQ4AYBfMQKDVnA1AF1/4WLh73V6h9UwcGG0EwJv0nH40mYHHcchlkeZITAHG/ioU1s0ALZbH9Jz9DZ3tz7h6xAJVdzIgqEbUrx3XhbY8h59HTk092OvlDr5dq7wp/mkAAuX1rM9UXaIvWaRqnlIWOkRbLhQwkmGDcgnlyR0SMoDMdhi/BI0FtZYwfmX2mmaLScPz2/bGURhDT0cNbvs= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UllhNUF6NXVFdkhpR0hZdTQ4WWUwaGxIM3JDdW9KNHF3TFFFWktCY3hlM2J5?= =?utf-8?B?UmVUQ3lpRlU5eEhqZzdPbjUwRnhxTFRiNUZLMEZVZnNXQVErVTUxa1VoQ3Bu?= =?utf-8?B?QytGL0ZFRjZHNkFWWlR4eXhYNEd3UzlXQ3BPY3hwb0psNGV1RGV3RDNCZUV1?= =?utf-8?B?MnQyS3BLVG1tYWZDckVHVEpSa2pKWWxSRkJVYUtZQWhYd0xTaWxQcWpCSVpE?= =?utf-8?B?clZ6Sk56MTEvRVplOWNxMVo0cWx1bDhPN0wrMDUzbitGb0F6NU5ETllocyt4?= =?utf-8?B?MmhtZFoydDd5cFE4eG1RcENRdTZaclhPWTl1Rjc2Uzl5VGhZclhVdEFJVi9t?= =?utf-8?B?RDNWbG4yRmRIeTNSSXBvMERhTXhYUFBuSzJTR3Z0VE5KT0ZaTkovVm1VVnhj?= =?utf-8?B?WFluNGdQMmptK1hvVEd4RnNiRWQweHY2UzZjYUZBR1JQY3dhR1V1RFViSkE2?= =?utf-8?B?MmRYY0xaaVBEb24wWmRGQVVieEFRZXVGbTRvNmVIZ2x4ejRDSDMxdjRwK0Nl?= =?utf-8?B?SzRuWXpoTHJnYjlYQVpkVEJOWC9iZWdRaTBmem5YYXhqT3FZVkFZMmFnNW01?= =?utf-8?B?NzhHdmU3dDFNZTdMUEExeUgyMFprV3lzOVMvMFVkL1F5d0NHRVpYUk81UE9k?= =?utf-8?B?RzVCQ09qVUl6eTA0SFJ5K3o4aXNEak5CaG9SSDFZSzRCdUs2b0Jkdk9wNHRD?= =?utf-8?B?NmtnOTFJbVpXQ096dGkrQ1dsODJDck5vYXlrNG0vZUZ5MWUra1AxemRZeGhU?= =?utf-8?B?VkxrRGJQcVBydWRudGQzaElyR2g4OUpxZU5HSUpqa21aaytabVAra0V4cnFu?= =?utf-8?B?Z3JEVXMvdWJ1UHppQ3dOS29GY3lnT0FneGVobmdjY2MxNmV3d0t5b3JaMkIy?= =?utf-8?B?Rm5DUit6ZFpxYVZEK3UxZUtHMmZJNG5iYjNsdVNxQ0FITGk0VW9nQUgvWHNi?= =?utf-8?B?NlMvYzAwWHdOM1JReWhaeGk2SXRnRHVhUDdPTDBtY2hEVzlVaHlsejFyNGVt?= =?utf-8?B?SDhlNTQxUkZZNThHQlBIcDV1ZlVIcUV3Z0tlQUhXb09md0ZDYmxQSEE2SWVN?= =?utf-8?B?TkRlSDhTbFkyb3VoY0NZbm9pVFEwam0rejBwNVFlL2gybG0rN3dISlJkcHNR?= =?utf-8?B?cmtWZFpvdU0vWXh1VVpZNjJSM0lzOFJPZFMvSHV1aFJkemVoTjgvT2M4cWh4?= =?utf-8?B?b1c3RjI3RFY0c2g1R0NsdWVVeEZtMmZvUk1xc2FoMURyT0J2VmkzMEsreXND?= =?utf-8?B?MUR2TjBnTTRMVHFNVytteDJnSkZ3cUhpNWlDUVdsaG5WMEs0MFZ1bFQvVDRY?= =?utf-8?B?UG9iNGlhU1plQy8wdEVJdy82cG01QWVKUDZxQnJlL2VvTjg5V2lPcmJkbE1n?= =?utf-8?B?WUZiQ1ZJRENlYXlMTkJ6amszb2h6T0FYTXkwbmVGc2V1N3FmcW43YWp4Zk5J?= =?utf-8?B?MVJ5VW9sSkN3SFRTUkJlUmJXdnlGZU4vbUsvV0ZBdStmMlhUMk5mR1JGQ3M5?= =?utf-8?B?bExIZGpvVzFsdWdmdUlKcithK0pwNENXYi9CK0FiaERQR1BSNXhGc3lNc3Ax?= =?utf-8?B?ZUNoQ3RLWFBRcmhpOVJwVjk2ME9HZ1hZbURmNnBkMjJUdzN6WFc0QXRxVEha?= =?utf-8?B?STJYWXRLNC9Cc0dmVHI0NGJKcy9WVFBLTGpWQTg4MXhVOWI3NHVkTnFXNFVr?= =?utf-8?B?MzFIU3J1UzYrbjRibkVENSs0ZWxjdkZ2eW9LVWNiMXBXYUUwdHRUODlRK080?= =?utf-8?B?SHZGQkdjR0Vtcm1HeEMzdFZYNDBreklzTWloTWlDNWdXVW40Y0xYTjJrOWhu?= =?utf-8?B?L1J1U2FJVStqL1FrblhpeWxxZlFXVEo4VExRMS91MjN4eE9CYlNZMjluTmdN?= =?utf-8?B?Y0k5aDhLSkpZdCtXdGM1N3NQMnN1c2UwMjRKdnZGdks5OVcxWkxtcFlxL05x?= =?utf-8?Q?27tH+oEeBtYMHddDJsRMQ+JY1plzd8eO?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ab94497-acee-460f-20b3-08da172ae656 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Apr 2022 17:37:04.9784 (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: DBAPR01MB6677 Subject: Re: [FFmpeg-devel] [PATCH] Provided support for MPEG-5 EVC (Essential Video Coding) codec 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: RGF3aWQgS296aW5za2k6Cj4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Cj4gMS4gR2VuYXJhbCBpbmZvCj4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCj4gCj4gVGhlIHBhdGNoIHByb3ZpZGVkIGJlbG93IGNvbnRhaW5zIGludGVncmF0aW9uIGxh eWVyIGJldHdlZW4gZmZtcGVnIGZyYW1ld29yayBhbmQgRVZDIGNvZGVjIGltcGxlbWVudGF0aW9u Lgo+IEluIG51dHNoZWxsIGl0IGVuYWJsZSB1c2luZyBFVkMgY29kZWMgKGVuY29kaW5nLCBkZWNv ZGluZykgIGJ5IHRoZSBtZWFucyBvZiBmZm1wZWcgQVBJLiAKPiBJJ2QgbGlrZSB0byBlbXBoYXNp emUgb25lIG1vcmUgdGltZSwgdGhhdCAoYXMgbWVudGlvbmVkIGJlZm9yZSkgdGhhdCBpdCBpc24n dCBjb2RlYyBpbXBsZW1lbnRhdGlvbi4gVGhlIHByb3ZpZGVkIGltcGxlbWVudGF0aW9uIHNlcnZl cyBhcyBpbnRlZ3JhdGlvbiBsYXllciBiZXR3ZWVuIGZmbXBlZyBmcmFtZXdvcmsgYW5kIEVWQyBj b2RlYy4KPiAKPiBFVkMgY29kZWMgaGFzIGJlZW4gcHVibGlzaGVkIGFzIHR3byBzZXBhcmF0ZSBs aWJyYXJpZXMuIAo+IFRoZSBmaXJzdCBvbmUgY2FsbGVkIFhFVkUgKGVYdHJhLWZhc3QgRXNzZW50 aWFsIFZpZGVvIEVuY29kZXIpIGlzIGFuIG9wZW5zb3VyY2UgTVBFRy01IEVWQyBlbmNvZGVyLgo+ IFRoZSBzZWNvbmQgb25lIGNhbGxlZCBYRVZEIChlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBE ZWNvZGVyICkgaXMgYW4gb3BlbnNvdXJjZSBNUEVHLTUgRVZDIGRlY29kZXIuCj4gRm9yIG1vcmUg aW5mb3JtYXRpb24gb24gYm90aCBsaWJyYXJpZXMgcGxlYXNlIGZvbGxvdyB0aGUgbGlua3MgYmVs b3c6Cj4gKiBodHRwczovL2dpdGh1Yi5jb20vbXBlZzUveGV2ZSAKPiAqIGh0dHBzOi8vZ2l0aHVi LmNvbS9tcGVnNS94ZXZkIAoKUGF0Y2hlcyBmb3IgZGVjb2RlciBhbmQgZW5jb2RlciBzaG91bGQg YmUgc2VwYXJhdGVkOyBhbmQgdGhlIGNoYW5nZXMgdG8KbGliYXZmb3JtYXQgc2hvdWxkIGFsc28g YmUgaW4gYSBzZXBhcmF0ZSBwYXRjaCAob3IgZXZlbiBwYXRjaGVzKS4KCj4gCj4gVGhlIHBhdGNo IHByb3ZpZGVkIGJlbG93IHNob3VsZCBiZSBhcHBseSB0byBGRm1wZWcgNS4wIHJlbGVhc2UgKGNv bW1pdCA5MTFkN2YxNjdjMzBmMjdhMDQyYjg1NThkZmNmMDEyYjNjMjBlODU4IHJlbGVhc2UvNS4w KQoKVGhlcmUgaXMgemVybyBjaGFuY2UgdGhhdCBuZXcgY29tcG9uZW50cyBhcmUgYWRkZWQgdG8g YW4gYWxyZWFkeQpyZWxlYXNlZCBicmFuY2guIFlvdSBuZWVkIHRvIHJlYmFzZSB0aGlzIHBhdGNo IG9uIHRvcCBvZiBtYXN0ZXIgaWYgeW91CndhbnQgaXQgbWFpbmxpbmVkLgoKPiAKPiAjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiAyLiBCdWlsZGluZwo+ICMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+IAo+IDMuMS4gRG93bmxvYWQsIGJ1aWxk IGFuZCBpbnN0YWxsIGRlcGVuZGVuY2llcwoKVGhlcmUgaXMgbm8gbmVlZCB0byBkdXBsaWNhdGUg dGhlIGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgZXh0ZXJuYWwKbGlicmFyaWVzIGluIHRoaXMgY29t bWl0IG1lc3NhZ2U7IHByb3ZpZGluZyB0aGUgbGluayB0byB3aGVyZSB0aGUKbGlicmFyeSBjYW4g YmUgZm91bmQgaXMgZW5vdWdoLiAoVGhpcyBpcyBub3QgbWFya2VkIGFzIFdJUCwgc28gSSBhbQpy ZXZpZXdpbmcgdGhpcyBhcyBpZiB5b3Ugd2FudGVkIHRoaXMgdG8gYmUgYXBwbGllZCBhcyBpcyAo d2l0aCB0aGlzCmNvbW1pdCBtZXNzYWdlKTsgaWYgdGhpcyBpcyBub3QgdGhlIGludGVudGlvbiBv ZiB0aGlzIHN1Ym1pc3Npb24gYW5kIHlvdQpuZXZlciBpbnRlbmRlZCBmb3IgdGhpcyB0byBiZSBw YXJ0IG9mIHRoZSBhY3R1YWxseSBhcHBsaWVkIGNvbW1pdAptZXNzYWdlLCB5b3UgY2FuIGlnbm9y ZSB0aGlzIGNvbW1lbnQgYW5kIHRoZSBuZXh0IGNvbW1lbnRzLikKCj4gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gMi4yLiBCdWlsZCBmZm1wZWcgd2l0aCBsaWJ4ZXZl IGFuZCBsaWJ4ZXZkCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4g SXQgaXMgcmVxdWlyZWQgZmZtcGVnIHRvIGJlIGNvbmZpZ2Z1cmVkIHdpdGggLS1lbmFibGUtbGli eGV2ZSBhbmQgLS1lbmFibGUtbGlieGV2ZAoKTWVudGlvbmluZyB0aGlzIGluIHRoZSBjb21taXQg bWVzc2FnZSBpcyB1bm5lY2Vzc2FyeSAodGhlIHJlYWRlciBvZgpmZm1wZWcgY29tbWl0IG1lc3Nh Z2VzIGlzIHN1cHBvc2VkIHRvIGtub3cgYSBiaXQgYWJvdXQgZmZtcGVnKS4KCj4gIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gMy4gRXhhbXBsZXMKPiAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiAKPiBQbGVhc2UgZmluZCBiZWxvdyBleGFt cGxlcyBvbiBob3cgdG8gdXNlIEVWQyBjb2RlZCB3aXRoIGZmbXBlZyBjb21tYW5kbGluZSB0b29s Lgo+IAo+IChBbGwgc2FtcGxlcyBhcmUgYXZhaWxhYmxlIGluIGh0dHBzOi8vZHJpdmUuZ29vZ2xl LmNvbS9kcml2ZS9mb2xkZXJzLzFZdENMbFN1VEFqcEx6aVRLSV9RQnVRcklPbTJzczlMQj91c3A9 c2hhcmluZyApCj4gCj4gIyEvYmluL2Jhc2gKPiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Cj4gIyhZVVY0MjBQKSAtPiAoRVZDKQo+ICM9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KPiBmZm1wZWcgLWYgcmF3dmlkZW8gLXBpeF9mbXQgeXV2NDIw cCAtczp2IDM1MngyODggLXIgMzAgLWkgVGVzdF9WaWRlb19jaWYueXV2IC1jOnYgbGlieGV2ZSAt ZiByYXd2aWRlbyBUZXN0X1ZpZGVvX2NpZi55dXYuZXZjCj4gZmZwbGF5IC1hdXRvZXhpdCBUZXN0 X1ZpZGVvX2NpZi55dXYuZXZjCgpUaGVzZSBleGFtcGxlcyBhcmUgZXhjZXNzaXZlOyBhbmQgdGhl eSBhcmUgY29tcGxldGVseSB1bm5lY2Vzc2FyeSwgYXMKdGhleSBkb24ndCByZWFsbHkgcHJvdmlk ZSBhbnl0aGluZyB1c2VmdWwgZ2l2ZW4gdGhhdCBhIHJlYWRlciBvZgpmZm1wZWcncyBjb21taXQg bWVzc2FnZXMgaXMgc3VwcG9zZWQgdG8ga25vdyB0cml2aWFsIGZmbXBlZyBjb21tYW5kIGxpbmUK dXNhZ2UuCgo+IAo+ICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiAj KFlVVjQyMFAxMExFKSAtPiAoRVZDKQo+ICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KPiBmZm1wZWcgLWYgcmF3dmlkZW8gLXBpeF9mbXQgeXV2NDIwcDEwbGUgLXM6diAz NTJ4Mjg4IC1yIDMwIC1pIFRlc3RfVmlkZW9fY2lmXzEwbGUueXV2IC1jOnYgbGlieGV2ZSAtZiBy YXd2aWRlbyBUZXN0X1ZpZGVvX2NpZl8xMGxlLnl1di5ldmMKPiBmZnBsYXkgLWF1dG9leGl0IFRl c3RfVmlkZW9fY2lmXzEwbGUueXV2LmV2Ywo+IAo+ICM9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KPiAjKEVWQykgLT4gKFlVVjQyMFApCj4gIz09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQo+IGZmbXBlZyAtaSBUZXN0X1ZpZGVvX2NpZi55dXYuZXZj IC1waXhfZm10IHl1djQyMHAgVGVzdF9WaWRlb19jaWYuZXZjLnl1dgo+IGZmcGxheSAtYXV0b2V4 aXQgLWYgcmF3dmlkZW8gLXBpeGVsX2Zvcm1hdCB5dXY0MjBwIC12aWRlb19zaXplIDM1MngyODgg IFRlc3RfVmlkZW9fY2lmLmV2Yy55dXYKPiAKPiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Cj4gIyhFVkMpIC0+IChZVVY0MjBQaTEwTEUpCj4gIz09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQo+IGZmbXBlZyAtaSBUZXN0X1ZpZGVvX2NpZl8xMGxl Lnl1di5ldmMgLXBpeF9mbXQgeXV2NDIwcDEwbGUgVGVzdF9WaWRlb19jaWZfMTBsZS5ldmMueXV2 Cj4gZmZwbGF5IC1hdXRvZXhpdCAtZiByYXd2aWRlbyAtcGl4ZWxfZm9ybWF0IHl1djQyMHAxMGxl IC12aWRlb19zaXplIDM1MngyODggIFRlc3RfVmlkZW9fY2lmXzEwbGUuZXZjLnl1dgo+IAo+ICM9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiAjKFlVVjQyMFApIC0+IChN UDQpCj4gIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+IGZmbXBlZyAt ZiByYXd2aWRlbyAtcGl4X2ZtdCB5dXY0MjBwIC1zOnYgMzUyeDI4OCAtciAzMCAtaSBUZXN0X1Zp ZGVvX2NpZi55dXYgLWM6diBsaWJ4ZXZlIC1mIHJhd3ZpZGVvIFRlc3RfVmlkZW9fY2lmLnl1di5t cDQKPiBmZnBsYXkgLWF1dG9leGl0IFRlc3RfVmlkZW9fY2lmLnl1di5tcDQKPiAKPiAjPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gIyhZVVY0MjBQMTBMRSkgLT4gKE1Q NCkKPiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gZmZtcGVnIC1m IHJhd3ZpZGVvIC1waXhfZm10IHl1djQyMHAxMGxlIC1zOnYgMzUyeDI4OCAtciAzMCAtaSBUZXN0 X1ZpZGVvX2NpZl8xMGxlLnl1diAtYzp2IGxpYnhldmUgLWYgcmF3dmlkZW8gVGVzdF9WaWRlb19j aWZfMTBsZS55dXYubXA0Cj4gZmZwbGF5IC1hdXRvZXhpdCBUZXN0X1ZpZGVvX2NpZl8xMGxlLnl1 di5tcDQKPiAKPiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gIyhN UDQpIC0+IChZVVY0MjBQKQo+ICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KPiBmZm1wZWcgLWkgVGVzdF9WaWRlb19jaWYueXV2Lm1wNCAtZiByYXd2aWRlbyAtcGl4X2Zt dCB5dXY0MjBwIFRlc3RfVmlkZW9fY2lmLm1wNC55dXYKPiBmZnBsYXkgLWF1dG9leGl0IC1mIHJh d3ZpZGVvIC1waXhlbF9mb3JtYXQgeXV2NDIwcCAtdmlkZW9fc2l6ZSAzNTJ4Mjg4IFRlc3RfVmlk ZW9fY2lmLm1wNC55dXYKPiAKPiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Cj4gIyhNUDQpIC0+ICAoWVVWNDIwUDEwTEUpCj4gIz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQo+IGZmbXBlZyAtaSBUZXN0X1ZpZGVvX2NpZl8xMGxlLnl1di5tcDQg LWYgcmF3dmlkZW8gLXBpeF9mbXQgeXV2NDIwcDEwbGUgVGVzdF9WaWRlb19jaWZfMTBsZS5tcDQu eXV2Cj4gZmZwbGF5IC1hdXRvZXhpdCAtZiByYXd2aWRlbyAtcGl4ZWxfZm9ybWF0IHl1djQyMHAx MGxlIC12aWRlb19zaXplIDM1MngyODggVGVzdF9WaWRlb19jaWZfMTBsZS5tcDQueXV2Cj4gCj4g Iz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICMoRVZDKSAtPiAgKE1Q NCkKPiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gZmZtcGVnIC1p IFRlc3RfVmlkZW9fY2lmLnl1di5ldmMgLWM6diBjb3B5IFRlc3RfVmlkZW9fY2lmLmV2Yy5tcDQK PiBmZnBsYXkgLWF1dG9leGl0IFRlc3RfVmlkZW9fY2lmLmV2Yy5tcDQKPiAKPiAjPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gIyhNUDQpIC0+ICAoRVZDKQo+ICM9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiBmZm1wZWcgLWkgVGVzdF9WaWRl b19jaWYuZXZjLm1wNCAtdmNvZGVjIGNvcHkgLWFuIC1mIHJhd3ZpZGVvIFRlc3RfVmlkZW9fY2lm LmV2Yy5tcDQuZXZjCj4gZmZwbGF5IC1hdXRvZXhpdCBUZXN0X1ZpZGVvX2NpZi5ldmMubXA0LmV2 Ywo+IAo+ICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiAjKE1QNCBb aDI2NCxhYWNdKSAtPiAgKE1QNCBbZXZjLGFhY10pCj4gIz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQo+IGZmbXBlZyAtaSBUZXN0X1ZpZGVvX2NpZi5tcDQgLWM6diBsaWJ4 ZXZlIFRlc3RfVmlkZW9fY2lmX2V2Yy5tcDQKPiBmZnBsYXkgLWF1dG9leGl0IFRlc3RfVmlkZW9f Y2lmX2V2Yy5tcDQKPiAKPiBTaWduZWQtb2ZmLWJ5OiBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNr aUBzYW1zdW5nLmNvbT4KPiAtLS0KPiAgQ2hhbmdlbG9nICAgICAgICAgICAgICAgIHwgICAgMyAr LQo+ICBjb25maWd1cmUgICAgICAgICAgICAgICAgfCAgIDEwICsKPiAgbGliYXZjb2RlYy9NYWtl ZmlsZSAgICAgIHwgICAgNCArCj4gIGxpYmF2Y29kZWMvYWxsY29kZWNzLmMgICB8ICAgIDIgKwo+ ICBsaWJhdmNvZGVjL2F2Y29kZWMuaCAgICAgfCAgICAzICsKPiAgbGliYXZjb2RlYy9jb2RlY19k ZXNjLmMgIHwgICAgOCArCj4gIGxpYmF2Y29kZWMvY29kZWNfaWQuaCAgICB8ICAgIDEgKwo+ICBs aWJhdmNvZGVjL2V2Y19wYXJzZXIuYyAgfCAgNDUyICsrKysrKysrKysrKysrKwo+ICBsaWJhdmNv ZGVjL2xpYnhldmQuYyAgICAgfCAgNzI0ICsrKysrKysrKysrKysrKysrKysrKysrCj4gIGxpYmF2 Y29kZWMvbGlieGV2ZS5jICAgICB8IDExODUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPiAgbGliYXZjb2RlYy9wYXJzZXJzLmMgICAgIHwgICAgMSArCj4gIGxpYmF2Y29k ZWMvcHJvZmlsZXMuYyAgICB8ICAgIDYgKwo+ICBsaWJhdmNvZGVjL3Byb2ZpbGVzLmggICAgfCAg ICAxICsKPiAgbGliYXZjb2RlYy92ZXJzaW9uLmggICAgIHwgICAgMiArLQo+ICBsaWJhdmZvcm1h dC9NYWtlZmlsZSAgICAgfCAgICAyICsKPiAgbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIHwgICAg MiArCj4gIGxpYmF2Zm9ybWF0L2V2Y2RlYy5jICAgICB8ICAxMzYgKysrKysKPiAgbGliYXZmb3Jt YXQvaXNvbV90YWdzLmMgIHwgICAgMiArCj4gIGxpYmF2Zm9ybWF0L21vdi5jICAgICAgICB8ICAg IDIgKy0KPiAgbGliYXZmb3JtYXQvbW92ZW5jLmMgICAgIHwgICAzMCArCj4gIGxpYmF2Zm9ybWF0 L3Jhd2VuYy5jICAgICB8ICAgMTQgKwo+ICAyMSBmaWxlcyBjaGFuZ2VkLCAyNTg3IGluc2VydGlv bnMoKyksIDMgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2V2 Y19wYXJzZXIuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJ4ZXZkLmMKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlieGV2ZS5jCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdmZvcm1hdC9ldmNkZWMuYwo+IAo+IGRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9D aGFuZ2Vsb2cKPiBpbmRleCA1YTMyY2YwZDVjLi4yMWViYzExZmY0IDEwMDY0NAo+IC0tLSBhL0No YW5nZWxvZwo+ICsrKyBiL0NoYW5nZWxvZwo+IEBAIC0xMDYsNyArMTA2LDggQEAgdmVyc2lvbiA1 LjA6Cj4gIC0gVmlkZW9Ub29sYm94IFByb1JlcyBlbmNvZGVyCj4gIC0gYW5sbWYgYXVkaW8gZmls dGVyCj4gIC0gSU1GIGRlbXV4ZXIgKGV4cGVyaW1lbnRhbCkKPiAtCj4gKy0gZVh0cmEtZmFzdCBF c3NlbnRpYWwgVmlkZW8gRW5jb2RlciAoWEVWRSkKPiArLSBlWHRyYS1mYXN0IEVzc2VudGlhbCBW aWRlbyBEZWNvZGVyIChYRVZEKQo+ICAKPiAgdmVyc2lvbiA0LjQ6Cj4gIC0gQXVkaW9Ub29sYm94 IG91dHB1dCBkZXZpY2UKPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gaW5k ZXggN2E2MmYwYzI0OC4uNzQ5MWQzYWY2YiAxMDA3NTUKPiAtLS0gYS9jb25maWd1cmUKPiArKysg Yi9jb25maWd1cmUKPiBAQCAtMjg5LDYgKzI4OSw4IEBAIEV4dGVybmFsIGxpYnJhcnkgc3VwcG9y dDoKPiAgICAtLWVuYWJsZS1saWJ3ZWJwICAgICAgICAgZW5hYmxlIFdlYlAgZW5jb2Rpbmcgdmlh IGxpYndlYnAgW25vXQo+ICAgIC0tZW5hYmxlLWxpYngyNjQgICAgICAgICBlbmFibGUgSC4yNjQg ZW5jb2RpbmcgdmlhIHgyNjQgW25vXQo+ICAgIC0tZW5hYmxlLWxpYngyNjUgICAgICAgICBlbmFi bGUgSEVWQyBlbmNvZGluZyB2aWEgeDI2NSBbbm9dCj4gKyAgLS1lbmFibGUtbGlieGV2ZSAgICAg ICAgIGVuYWJsZSBYRVZFIGVuY29kaW5nIHZpYSB4ZXZlIFtub10KPiArICAtLWVuYWJsZS1saWJ4 ZXZkICAgICAgICAgZW5hYmxlIFhFVkQgZGVjb2RpbmcgdmlhIHhldmQgW25vXQo+ICAgIC0tZW5h YmxlLWxpYnhhdnMgICAgICAgICBlbmFibGUgQVZTIGVuY29kaW5nIHZpYSB4YXZzIFtub10KPiAg ICAtLWVuYWJsZS1saWJ4YXZzMiAgICAgICAgZW5hYmxlIEFWUzIgZW5jb2RpbmcgdmlhIHhhdnMy IFtub10KPiAgICAtLWVuYWJsZS1saWJ4Y2IgICAgICAgICAgZW5hYmxlIFgxMSBncmFiYmluZyB1 c2luZyBYQ0IgW2F1dG9kZXRlY3RdCj4gQEAgLTE4ODAsNiArMTg4Miw4IEBAIEVYVEVSTkFMX0xJ QlJBUllfTElTVD0iCj4gICAgICBvcGVuc3NsCj4gICAgICBwb2NrZXRzcGhpbngKPiAgICAgIHZh cG91cnN5bnRoCj4gKyAgICBsaWJ4ZXZlCj4gKyAgICBsaWJ4ZXZkCgpLZWVwIHRoZSBsaXN0IGlu IGFscGhhYmV0aWNhbCBvcmRlci4KCj4gICIKPiAgCj4gIEhXQUNDRUxfQVVUT0RFVEVDVF9MSUJS QVJZX0xJU1Q9Igo+IEBAIC0yNDUzLDYgKzI0NTcsNyBAQCBDT05GSUdfRVhUUkE9Igo+ICAgICAg aDI2NHByZWQKPiAgICAgIGgyNjRxcGVsCj4gICAgICBoZXZjcGFyc2UKPiArICAgIGV2Y3BhcnNl CgpLZWVwIHRoZSBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlci4KCj4gICAgICBocGVsZHNwCj4g ICAgICBodWZmbWFuCj4gICAgICBodWZmeXV2ZHNwCj4gQEAgLTMyNTIsNiArMzI1Nyw3IEBAIG1w ZWdhdWRpb19wYXJzZXJfc2VsZWN0PSJtcGVnYXVkaW9oZWFkZXIiCj4gIG1wZWd2aWRlb19wYXJz ZXJfc2VsZWN0PSJtcGVndmlkZW8iCj4gIG1wZWc0dmlkZW9fcGFyc2VyX3NlbGVjdD0iaDI2M2Rz cCBtcGVndmlkZW8gcXBlbGRzcCIKPiAgdmMxX3BhcnNlcl9zZWxlY3Q9InZjMWRzcCIKPiArZXZj X3BhcnNlcl9zZWxlY3Q9ImV2Y3BhcnNlIgoKS2VlcCB0aGUgYWxwaGFiZXRpY2FsIG9yZGVyLgoK PiAgCj4gICMgYml0c3RyZWFtX2ZpbHRlcnMKPiAgYWFjX2FkdHN0b2FzY19ic2Zfc2VsZWN0PSJh ZHRzX2hlYWRlciBtcGVnNGF1ZGlvIgo+IEBAIC0zMzc3LDYgKzMzODMsOCBAQCBsaWJ4MjY0X2Vu Y29kZXJfc2VsZWN0PSJhdHNjX2E1MyIKPiAgbGlieDI2NHJnYl9lbmNvZGVyX2RlcHM9ImxpYngy NjQiCj4gIGxpYngyNjRyZ2JfZW5jb2Rlcl9zZWxlY3Q9ImxpYngyNjRfZW5jb2RlciIKPiAgbGli eDI2NV9lbmNvZGVyX2RlcHM9ImxpYngyNjUiCj4gK2xpYnhldmVfZW5jb2Rlcl9kZXBzPSJsaWJ4 ZXZlIgo+ICtsaWJ4ZXZkX2RlY29kZXJfZGVwcz0ibGlieGV2ZCIKCkFscGhhYmV0aWNhbCBvcmRl ci4KCj4gIGxpYnhhdnNfZW5jb2Rlcl9kZXBzPSJsaWJ4YXZzIgo+ICBsaWJ4YXZzMl9lbmNvZGVy X2RlcHM9ImxpYnhhdnMyIgo+ICBsaWJ4dmlkX2VuY29kZXJfZGVwcz0ibGlieHZpZCIKPiBAQCAt NjY1OSw2ICs2NjY3LDggQEAgZW5hYmxlZCBsaWJ4MjY0ICAgICAgICAgICAmJiB7IGNoZWNrX3Br Z19jb25maWcgbGlieDI2NCB4MjY0ICJzdGRpbnQuaCB4MjY0LmgiIHgKPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGVja19jcHBfY29uZGl0aW9uIGxpYngyNjIgeDI2NC5oICJYMjY0 X01QRUcyIgo+ICBlbmFibGVkIGxpYngyNjUgICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZp ZyBsaWJ4MjY1IHgyNjUgeDI2NS5oIHgyNjVfYXBpX2dldCAmJgo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlcXVpcmVfY3BwX2NvbmRpdGlvbiBsaWJ4MjY1IHgyNjUuaCAiWDI2NV9C VUlMRCA+PSA3MCIKPiArZW5hYmxlZCBsaWJ4ZXZlICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19j b25maWcgbGlieGV2ZSAieGV2ZSA+PSAxLjAuMCIgInhldmUuaCIgeGV2ZV9lbmNvZGUKPiArZW5h YmxlZCBsaWJ4ZXZkICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlieGV2ZCAieGV2 ZCA+PSAxLjAuMCIgInhldmQuaCIgeGV2ZF9kZWNvZGUKCkRpdHRvLgoKPiAgZW5hYmxlZCBsaWJ4 YXZzICAgICAgICAgICAmJiByZXF1aXJlIGxpYnhhdnMgInN0ZGludC5oIHhhdnMuaCIgeGF2c19l bmNvZGVyX2VuY29kZSAiLWx4YXZzICRwdGhyZWFkc19leHRyYWxpYnMgJGxpYm1fZXh0cmFsaWJz Igo+ICBlbmFibGVkIGxpYnhhdnMyICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4 YXZzMiAieGF2czIgPj0gMS4zLjAiICJzdGRpbnQuaCB4YXZzMi5oIiB4YXZzMl9hcGlfZ2V0Cj4g IGVuYWJsZWQgbGlieHZpZCAgICAgICAgICAgJiYgcmVxdWlyZSBsaWJ4dmlkIHh2aWQuaCB4dmlk X2dsb2JhbCAtbHh2aWRjb3JlCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9s aWJhdmNvZGVjL01ha2VmaWxlCj4gaW5kZXggM2FkZjE1MzZkOC4uYWIzOGIwMTI3ZiAxMDA2NDQK PiAtLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCj4gKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+ IEBAIC0xMDg3LDYgKzEwODcsOCBAQCBPQkpTLSQoQ09ORklHX0xJQldFQlBfQU5JTV9FTkNPREVS KSAgICAgICArPSBsaWJ3ZWJwZW5jX2NvbW1vbi5vIGxpYndlYnBlbmNfYW5pbQo+ICBPQkpTLSQo Q09ORklHX0xJQlgyNjJfRU5DT0RFUikgICAgICAgICAgICArPSBsaWJ4MjY0Lm8KPiAgT0JKUy0k KENPTkZJR19MSUJYMjY0X0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlieDI2NC5vCj4gIE9CSlMt JChDT05GSUdfTElCWDI2NV9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYngyNjUubwo+ICtPQkpT LSQoQ09ORklHX0xJQlhFVkVfRU5DT0RFUikgICAgICAgICAgICArPSBsaWJ4ZXZlLm8KPiArT0JK Uy0kKENPTkZJR19MSUJYRVZEX0RFQ09ERVIpICAgICAgICAgICAgKz0gbGlieGV2ZC5vCgpEaXR0 by4KCj4gIE9CSlMtJChDT05GSUdfTElCWEFWU19FTkNPREVSKSAgICAgICAgICAgICs9IGxpYnhh dnMubwo+ICBPQkpTLSQoQ09ORklHX0xJQlhBVlMyX0VOQ09ERVIpICAgICAgICAgICArPSBsaWJ4 YXZzMi5vCj4gIE9CSlMtJChDT05GSUdfTElCWFZJRF9FTkNPREVSKSAgICAgICAgICAgICs9IGxp Ynh2aWQubwo+IEBAIC0xMTUyLDYgKzExNTQsOCBAQCBPQkpTLSQoQ09ORklHX1ZQOV9QQVJTRVIp ICAgICAgICAgICAgICArPSB2cDlfcGFyc2VyLm8KPiAgT0JKUy0kKENPTkZJR19XRUJQX1BBUlNF UikgICAgICAgICAgICAgKz0gd2VicF9wYXJzZXIubwo+ICBPQkpTLSQoQ09ORklHX1hCTV9QQVJT RVIpICAgICAgICAgICAgICArPSB4Ym1fcGFyc2VyLm8KPiAgT0JKUy0kKENPTkZJR19YTUFfUEFS U0VSKSAgICAgICAgICAgICAgKz0geG1hX3BhcnNlci5vCj4gK09CSlMtJChDT05GSUdfRVZDX1BB UlNFUikgICAgICAgICAgICAgICs9IGV2Y19wYXJzZXIubwoKRGl0dG8uCgo+ICsKPiAgCj4gICMg Yml0c3RyZWFtIGZpbHRlcnMKPiAgT0JKUy0kKENPTkZJR19BQUNfQURUU1RPQVNDX0JTRikgICAg ICAgICAgKz0gYWFjX2FkdHN0b2FzY19ic2Yubwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2Fs bGNvZGVjcy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+IGluZGV4IGQxZTEwMTk3ZGUuLjEy ZTZjOTJmNjUgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+ICsrKyBiL2xp YmF2Y29kZWMvYWxsY29kZWNzLmMKPiBAQCAtNzgzLDYgKzc4Myw4IEBAIGV4dGVybiBMSUJYMjY0 X0NPTlNUIEFWQ29kZWMgZmZfbGlieDI2NF9lbmNvZGVyOwo+ICAjZW5kaWYKPiAgZXh0ZXJuIGNv bnN0IEFWQ29kZWMgZmZfbGlieDI2NHJnYl9lbmNvZGVyOwo+ICBleHRlcm4gQVZDb2RlYyBmZl9s aWJ4MjY1X2VuY29kZXI7Cj4gK2V4dGVybiBjb25zdCBBVkNvZGVjIGZmX2xpYnhldmVfZW5jb2Rl cjsKPiArZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGlieGV2ZF9kZWNvZGVyOwo+ICBleHRlcm4g Y29uc3QgQVZDb2RlYyBmZl9saWJ4YXZzX2VuY29kZXI7Cj4gIGV4dGVybiBjb25zdCBBVkNvZGVj IGZmX2xpYnhhdnMyX2VuY29kZXI7Cj4gIGV4dGVybiBjb25zdCBBVkNvZGVjIGZmX2xpYnh2aWRf ZW5jb2RlcjsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9hdmNvZGVjLmggYi9saWJhdmNvZGVj L2F2Y29kZWMuaAo+IGluZGV4IDdlZThiYzJiN2MuLmEwNzBlMGYxZDcgMTAwNjQ0Cj4gLS0tIGEv bGliYXZjb2RlYy9hdmNvZGVjLmgKPiArKysgYi9saWJhdmNvZGVjL2F2Y29kZWMuaAo+IEBAIC0x NjQzLDYgKzE2NDMsOSBAQCB0eXBlZGVmIHN0cnVjdCBBVkNvZGVjQ29udGV4dCB7Cj4gICNkZWZp bmUgRkZfUFJPRklMRV9LTFZBX1NZTkMgMAo+ICAjZGVmaW5lIEZGX1BST0ZJTEVfS0xWQV9BU1lO QyAxCj4gIAo+ICsjZGVmaW5lIEZGX1BST0ZJTEVfRVZDX0JBU0VMSU5FICAgICAgICAgICAgIDAK PiArI2RlZmluZSBGRl9QUk9GSUxFX0VWQ19NQUlOICAgICAgICAgICAgICAgICAxCj4gKwo+ICAg ICAgLyoqCj4gICAgICAgKiBsZXZlbAo+ICAgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIu Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jIGIvbGliYXZjb2RlYy9jb2Rl Y19kZXNjLmMKPiBpbmRleCAwOTc0ZWUwM2RlLi4wNThmMjhiZDY3IDEwMDY0NAo+IC0tLSBhL2xp YmF2Y29kZWMvY29kZWNfZGVzYy5jCj4gKysrIGIvbGliYXZjb2RlYy9jb2RlY19kZXNjLmMKPiBA QCAtMTI2OSw2ICsxMjY5LDE0IEBAIHN0YXRpYyBjb25zdCBBVkNvZGVjRGVzY3JpcHRvciBjb2Rl Y19kZXNjcmlwdG9yc1tdID0gewo+ICAgICAgICAgIC5wcm9wcyAgICAgPSBBVl9DT0RFQ19QUk9Q X0xPU1NZIHwgQVZfQ09ERUNfUFJPUF9SRU9SREVSLAo+ICAgICAgICAgIC5wcm9maWxlcyAgPSBO VUxMX0lGX0NPTkZJR19TTUFMTChmZl9oZXZjX3Byb2ZpbGVzKSwKPiAgICAgIH0sCj4gKyAgICB7 Cj4gKyAgICAgICAgLmlkICAgICAgICA9IEFWX0NPREVDX0lEX0VWQywKPiArICAgICAgICAudHlw ZSAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAo+ICsgICAgICAgIC5uYW1lICAgICAgPSAiZXZj IiwKPiArICAgICAgICAubG9uZ19uYW1lID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIk1QRUctNSBF VkMgKEVzc2VudGlhbCBWaWRlbyBDb2RpbmcpIiksCj4gKyAgICAgICAgLnByb3BzICAgICA9IEFW X0NPREVDX1BST1BfTE9TU1kgfCBBVl9DT0RFQ19QUk9QX1JFT1JERVIsCj4gKyAgICAgICAgLnBy b2ZpbGVzICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKGZmX2V2Y19wcm9maWxlcyksCj4gKyAgICB9 LAo+ICAgICAgewo+ICAgICAgICAgIC5pZCAgICAgICAgPSBBVl9DT0RFQ19JRF9GSUMsCj4gICAg ICAgICAgLnR5cGUgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKPiBkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy9jb2RlY19pZC5oIGIvbGliYXZjb2RlYy9jb2RlY19pZC5oCj4gaW5kZXggYWIyNjVl YzU4NC4uNTk3YTJiYzRhMCAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL2NvZGVjX2lkLmgKPiAr KysgYi9saWJhdmNvZGVjL2NvZGVjX2lkLmgKPiBAQCAtMjIyLDYgKzIyMiw3IEBAIGVudW0gQVZD b2RlY0lEIHsKPiAgICAgIEFWX0NPREVDX0lEX1dFQlAsCj4gICAgICBBVl9DT0RFQ19JRF9ITk00 X1ZJREVPLAo+ICAgICAgQVZfQ09ERUNfSURfSEVWQywKPiArICAgIEFWX0NPREVDX0lEX0VWQywK ClRoaXMgYnJlYWtzIEFCSSBhbmQgaXMgaW52YWxpZDsgdGhlcmUgaXMgYSBnYXAgYmV0d2VlbiB0 aGUgbGFzdCB2aWRlbwphbmQgdGhlIGZpcnN0IGF1ZGlvIGNvZGVjIGlkIHdoZXJlIHRoaXMgdmFs dWUgc2hvdWxkIGJlIGFkZGVkLgooVGhlIGVudHJ5IGluIGNvZGVjX2Rlc2NyaXB0b3JzIGFib3Zl IHRoZW4gbmVlZHMgdG8gYmUgbW92ZWQgc28gdGhhdCB0aGUKbGlzdCBpcyBzb3J0ZWQgYnkgQVZD b2RlY0Rlc2NyaXB0b3IuaWQuKQoKPiAgI2RlZmluZSBBVl9DT0RFQ19JRF9IMjY1IEFWX0NPREVD X0lEX0hFVkMKPiAgICAgIEFWX0NPREVDX0lEX0ZJQywKPiAgICAgIEFWX0NPREVDX0lEX0FMSUFT X1BJWCwKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMgYi9saWJhdmNvZGVj L2V2Y19wYXJzZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4u ZjY4YzRjYzNhMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmNvZGVjL2V2Y19wYXJzZXIu Ywo+IEBAIC0wLDAgKzEsNDUyIEBACgouLi4KCj4gKwo+ICsvLyBTcGxpdCBhZnRlciB0aGUgcGFy YW1ldGVyIHNldHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtIGlmIHRoZXkgZXhpc3Qu Cj4gK3N0YXRpYyBpbnQgZXZjX3NwbGl0KEFWQ29kZWNDb250ZXh0ICpjdHgsIGNvbnN0IHVpbnQ4 X3QgKmJzLCBpbnQgYnNfc2l6ZSkKPiArewo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBhdl9jb2xkIHZvaWQgZXZjX3BhcnNlcl9jbG9zZShBVkNvZGVjUGFyc2VyQ29udGV4dCAq cykKPiArewo+ICsgICAgLyogRVZDUGFyc2VyQ29udGV4dCAqY3R4ID0gcy0+cHJpdl9kYXRhOyAq Lwo+ICt9CgpEb24ndCBhZGQgdW5uZWNlc3NhcnkgZnVuY3Rpb25zOyBidXQgbm90aWNlIHRoYXQg eW91IGFyZSB1c2luZwpmZl9jb21iaW5lX2ZyYW1lKCkgYW5kIHRoZXJlZm9yZSB5b3UgbmVlZCB0 byBjYWxsIGZmX3BhcnNlX2Nsb3NlKCkgaW4KeW91ciBjbG9zZSBmdW5jdGlvbiBvciB1c2UgaXQg ZGlyZWN0bHkgYXMgeW91ciBjbG9zZSBmdW5jdGlvbi4KCj4gKwo+ICtBVkNvZGVjUGFyc2VyIGZm X2V2Y19wYXJzZXIgPSB7CgpTaG91bGQgYmUgY29uc3QuCgo+ICsgICAgLmNvZGVjX2lkcyAgICAg ID0geyBBVl9DT0RFQ19JRF9FVkMgfSwKPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihF VkNQYXJzZXJDb250ZXh0KSwKPiArICAgIC5wYXJzZXJfaW5pdCAgICA9IGV2Y19wYXJzZXJfaW5p dCwKPiArICAgIC5wYXJzZXJfcGFyc2UgICA9IGV2Y19wYXJzZSwKPiArICAgIC5wYXJzZXJfY2xv c2UgICA9IGV2Y19wYXJzZXJfY2xvc2UsCj4gKyAgICAuc3BsaXQgICAgICAgICAgPSBldmNfc3Bs aXQsCj4gK307Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbGlieGV2ZC5jIGIvbGliYXZjb2Rl Yy9saWJ4ZXZkLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLmZm OWVlNWMxNmYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy9saWJ4ZXZkLmMKPiBA QCAtMCwwICsxLDcyNCBAQAo+ICsvKgo+ICsgKiBsaWJ4ZXZkIGRlY29kZXIKPiArICogRVZDIChN UEVHLTUgRXNzZW50aWFsIFZpZGVvIENvZGluZykgZGVjb2RpbmcgdXNpbmcgWEVWRCBNUEVHLTUg RVZDIGRlY29kZXIgbGlicmFyeQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjEgRGF3aWQg S296aW5za2kgPGQua296aW5za2lAc2Ftc3VuZy5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsKPiAr I2lmIGRlZmluZWQoX01TQ19WRVIpCj4gKyNkZWZpbmUgWEVWRF9BUElfSU1QT1JUUyAxCj4gKyNl bmRpZgo+ICsKPiArI2luY2x1ZGUgPHhldmQuaD4KPiArCj4gKyNpbmNsdWRlIDxmbG9hdC5oPgo+ ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ludGVybmFs LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvY29tbW9uLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvb3B0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgo+ICsjaW5jbHVkZSAi bGliYXZ1dGlsL3BpeGZtdC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxzLmgiCj4g Kwo+ICsvLyAjZGVmaW5lIFVTRV9FWFBfR09MT01CX1NUVUZGCj4gKyNpZmRlZiBVU0VfRVhQX0dP TE9NQl9TVFVGRiAKPiArI2luY2x1ZGUgImdvbG9tYi5oIgo+ICsjZW5kaWYKPiArCj4gKyNpbmNs dWRlICJhdmNvZGVjLmgiCj4gKyNpbmNsdWRlICJpbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAicGFj a2V0X2ludGVybmFsLmgiCj4gKwo+ICsjZGVmaW5lIFVOVVNFRCh4KSAodm9pZCkoeCkKPiArCj4g KyNkZWZpbmUgWEVWRF9QQVJBTV9CQURfTkFNRSAtMQo+ICsjZGVmaW5lIFhFVkRfUEFSQU1fQkFE X1ZBTFVFIC0yCj4gKwo+ICsvKioKPiArICogVGhlIHN0cnVjdHVyZSBzdG9yZXMgYWxsIHRoZSBz dGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIFhldmUgTVBFRy01IEVWQyBkZWNv ZGVyCj4gKyAqIFRoZSBmaXJzdCBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gYW4gQVZDbGFzcyBzdHJ1 Y3QgKEBzZWUgaHR0cHM6Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1bmsvc3RydWN0QVZDbGFzcy5o dG1sI2RldGFpbHMpLgo+ICsgKi8KClN1Y2ggY29tbWVudHMgYXJlIHVubmVjZXNzYXJ5ICgKCj4g K3R5cGVkZWYgc3RydWN0IFhldmRDb250ZXh0IHsKPiArICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNz Owo+ICsKPiArICAgIFhFVkQgaWQ7ICAgICAgICAvLyBYRVZEIGluc3RhbmNlIGlkZW50aWZpZXIg QHNlZSB4ZXZkLmgKPiArICAgIFhFVkRfQ0RTQyBjZHNjOyAvLyBkZWNvZGluZyBwYXJhbWV0ZXJz IEBzZWUgeGV2ZC5oCj4gKwo+ICsgICAgaW50IGRlY29kX2ZyYW1lczsgLy8gbnVtYmVyIG9mIGRl Y29kZWQgZnJhbWVzCj4gKyAgICBpbnQgcGFja2V0X2NvdW50OyAvLyBudW1iZXIgb2YgcGFja2V0 cyBjcmVhdGVkIGJ5IGRlY29kZXIKPiArCj4gKyAgICAvLyBjb25maWd1cmF0aW9uIHBhcmFtZXRl cnMKPiArICAgIEFWRGljdGlvbmFyeSAqeGV2ZF9vcHRzOyAvLyB4ZXZkIGNvbmZpZ3VyYXRpb24g cmVhZCBmcm9tIGEgOi1zZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycwo+ICsK PiArfSBYZXZkQ29udGV4dDsKPiArCj4gK3N0YXRpYyBpbnQgIG9wX3RocmVhZHMgPSAxOyAvLyBE ZWZhdWx0IHZhbHVlCgpObyBnbG9iYWwgc3RhdGUhIChBbmQgYW55d2F5LCB0aGlzIHZhbHVlIHNl ZW1zIHRvIGJlIHdyaXRlLW9ubHkuKQoKPiArCj4gKyNpZmRlZiBVU0VfRVhQX0dPTE9NQl9TVFVG RiAKPiArc3RhdGljIGludCBnZXRfbmFsdV90eXBlKGNvbnN0IHVpbnQ4X3QgKmJzLCBpbnQgYnNf c2l6ZSkKPiArewo+ICsgICAgR2V0Qml0Q29udGV4dCBnYjsKPiArICAgIGludCBmemIsIG51dDsK PiArICAgIGluaXRfZ2V0X2JpdHMoJmdiLCBicywgYnNfc2l6ZSAqIDgpOwo+ICsgICAgZnpiID0g Z2V0X2JpdHMxKCZnYik7Cj4gKyAgICBpZihmemIgIT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfREVCVUcsICJmb3JiaWRkZW5femVyb19iaXQgaXMgbm90IGNsZWFyXG4iKTsK PiArICAgIH0KPiArICAgIG51dCA9IGdldF9iaXRzKCZnYiwgNik7IC8qIG5hbF91bml0X3R5cGVf cGx1czEgKi8KPiArICAgIHJldHVybiBudXQgLSAxOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArI2lm ZGVmIFBSSU5UX05BTFVfSU5GTwo+ICtzdGF0aWMgdm9pZCBwcmludF9uYWx1X2luZm8oWEVWRF9T VEFUICogc3RhdCkKPiArewo+ICsgICAgaWYoc3RhdC0+bmFsdV90eXBlIDwgWEVWRF9OVVRfU1BT KSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1NQUyBc biIpOwo+ICsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiJWMtc2xpY2Vc biIsIHN0YXQtPnN0eXBlID09IFhFVkRfU1RfSSA/ICdJJyA6IHN0YXQtPnN0eXBlID09IFhFVkRf U1RfUCA/ICdQJyA6ICdCJyk7Cj4gKwo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVC VUcsICIgJWQgYnl0ZXNcbiIsIHN0YXQtPnJlYWQpOwo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfREVCVUcsICIsIHBvYz0lZCwgdGlkPSVkLCAiLCAoaW50KXN0YXQtPnBvYywgKGludClz dGF0LT50aWQpOwo+ICsKPiArICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewo+ ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiW0wlZCAiLCBpKTsKPiAr ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdGF0LT5yZWZwaWNfbnVtW2ldOyBqKysp IGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsIiVkICIsIHN0YXQtPnJlZnBpY1tpXVtqXSk7Cj4g KyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsIl0gXG4iKTsKPiArICAgICAg ICB9Cj4gKyAgICB9IGVsc2UgaWYoc3RhdC0+bmFsdV90eXBlID09IFhFVkRfTlVUX1NQUykgewo+ ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9TUFMgXG4iKTsK PiArICAgIH0gZWxzZSBpZiAoc3RhdC0+bmFsdV90eXBlID09IFhFVkRfTlVUX1BQUykgewo+ICsg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9QUFMgXG4iKTsKPiAr ICAgIH0gZWxzZSBpZiAoc3RhdC0+bmFsdV90eXBlID09IFhFVkRfTlVUX1NFSSkgewo+ICsgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9TRUkgXG4iKTsKPiArICAg IH0gZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlVua25vd24g Yml0c3RyZWFtICEhISEgXG4iKTsKPiArICAgIH0KPiArfQo+ICsjZW5kaWYKPiArCj4gKy8vIEB0 b2RvIGNvbnNpZGVyIG1vdmluZyBmb2xsb3dpbmcgZnVuY3Rpb24gdG8gc2VwYXJhdGUgZmlsZSBj b250YWluaW5nIGhlbHBlciBmdW5jdGlvbnMgZm9yIEVWQyBkZWNvZGVyCj4gKyNpZmRlZiBQUklO VF9GUkFNRV9JTkZPCj4gK3N0YXRpYyB2b2lkIHByaW50X2ZyYW1lX2luZm8oY29uc3QgQVZGcmFt ZSogZikKPiArewo+ICsgICAgaW50IGxldmVsID0gQVZfTE9HX0RFQlVHOwo+ICsgICAgYXZfbG9n KE5VTEwsIGxldmVsLCAiZnJhbWUtPndpZHRoOiAlZFxuIiwgZi0+d2lkdGgpOwo+ICsgICAgYXZf bG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmhlaWdodDogJWRcbiIsIGYtPmhlaWdodCk7Cj4gKwo+ ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmxpbmVzaXplWzBdOiAlZFxuIiwgZi0+ bGluZXNpemVbMF0pOwo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmxpbmVzaXpl WzFdOiAlZFxuIiwgZi0+bGluZXNpemVbMV0pOwo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAi ZnJhbWUtPmxpbmVzaXplWzJdOiAlZFxuIiwgZi0+bGluZXNpemVbMl0pOwo+ICsgICAgYXZfbG9n KE5VTEwsIGxldmVsLCAiZnJhbWUtPmJ1ZlswXTogJXBcbiIsIGYtPmJ1ZlswXSk7Cj4gKyAgICBh dl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+YnVmWzFdOiAlcFxuIiwgZi0+YnVmWzFdKTsKPiAr ICAgIGF2X2xvZyhOVUxMLCBsZXZlbCwgImZyYW1lLT5idWZbMl06ICVwXG4iLCBmLT5idWZbMl0p Owo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmRhdGFbMF06ICVwXG4iLCBmLT5k YXRhWzBdKTsKPiArICAgIGF2X2xvZyhOVUxMLCBsZXZlbCwgImZyYW1lLT5kYXRhWzFdOiAlcFxu IiwgZi0+ZGF0YVsxXSk7Cj4gKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+ZGF0YVsy XTogJXBcbiIsIGYtPmRhdGFbMl0pOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArLy8gQHRvZG8gY29u c2lkZXIgbW92aW5nIGZvbGxvd2luZyBmdW5jdGlvbiB0byBzZXBhcmF0ZSBmaWxlIGNvbnRhaW5p bmcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgRVZDIGRlY29kZXIKPiArI2lmZGVmIFBSSU5UX1hFVkRf SU1HQl9JTkZPCj4gK3N0YXRpYyB2b2lkIHByaW50X3hldmRfaW1nYl9pbmZvKGNvbnN0IFhFVkRf SU1HQiogaW1nYikKPiArewo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImltZ2It Pm5wOiAlZFxuIiwgaW1nYi0+bnApOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywg ImltZ2ItPmJzaXplWzBdOiAlZFxuIiwgaW1nYi0+YnNpemVbMF0pOwo+ICsgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19ERUJVRywgImltZ2ItPmJzaXplWzFdOiAlZFxuIiwgaW1nYi0+YnNpemVbMV0p Owo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImltZ2ItPmJzaXplWzJdOiAlZFxu IiwgaW1nYi0+YnNpemVbMl0pOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArLy8gQHRvZG8gY29uc2lk ZXIgbW92aW5nIGZvbGxvd2luZyBmdW5jdGlvbiB0byBzZXBhcmF0ZSBmaWxlIGNvbnRhaW5pbmcg aGVscGVyIGZ1bmN0aW9ucyBmb3IgRVZDIGRlY29kZXIKPiArI2lmZGVmIFBSSU5UX0FWQ1RYCj4g K3N0YXRpYyB2b2lkIHByaW50X2F2Y3R4KGNvbnN0IEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiAr ewo+ICsgICAgaWYoIEFWTUVESUFfVFlQRV9VTktOT1dOID09IGF2Y3R4LT5jb2RlY190eXBlKSB7 Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImF2Y3R4LT5jb2RlY190eXBl OiBBVk1FRElBX1RZUEVfVU5LTk9XTlxuIik7Cj4gKyAgICB9IGVsc2UgaWYoQVZNRURJQV9UWVBF X1ZJREVPICA9PSBhdmN0eC0+Y29kZWNfdHlwZSkKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0RFQlVHLCAiYXZjdHgtPmNvZGVjX3R5cGU6IEFWTUVESUFfVFlQRV9WSURFTyBcbiIpOwo+ ICsgICAgZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImF2Y3R4 LT5jb2RlY190eXBlOiBBVk1FRElBX1RZUEVfVU5LTk9XTlxuIik7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImF2Y3R4LT5jb2RlY19pZDogJXNcbiIsYXZj b2RlY19nZXRfbmFtZShhdmN0eC0+Y29kZWNfaWQpKTsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfREVCVUcsICJhdmN0eC0+d2lkdGg6ICVkXG4iLCBhdmN0eC0+d2lkdGgpOwo+ICsgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImF2Y3R4LT5oZWlnaHQ6ICVkXG4iLCBhdmN0eC0+aGVp Z2h0KTsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJhdmN0eC0+cGl4X2ZtdDog JWRcbiIsIGF2Y3R4LT5waXhfZm10KTsKPiArfQo+ICsjZW5kaWYKPiArCj4gKy8qKgo+ICsgKiBS ZWFkIG9wdGlvbnMKPiArICoKPiArICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQKPiArICog QHJldHVybiAwIG9uIHN1Y2Nlc3MKPiArICovCj4gK3N0YXRpYyBpbnQgcmVhZF9vcHRpb25zKGNv bnN0IEFWQ29kZWNDb250ZXh0KiBhdmN0eCkKPiArewo+ICsKPiArICAgIG9wX3RocmVhZHMgPSAo YXZjdHgtPnRocmVhZF9jb3VudD4wKT9hdmN0eC0+dGhyZWFkX2NvdW50OjE7Cj4gKwo+ICsgICAg cmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBQYXJzZSA6LXNlcGFyYXRlZCBsaXN0IG9m IGtleT12YWx1ZSBwYXJhbWV0ZXJzCj4gKyAqCj4gKyAqIEBwYXJhbSBrZXkKPiArICogQHBhcmFt IHZhbHVlCj4gKyAqCj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBv biBmYWlsdXJlCj4gKyAqCj4gKyAqIEB0b2RvIENvbnNpZGVyIHJlbW92aW5nIHRoZSBmdW5jdGlv bgo+ICsgKi8KPiArc3RhdGljIGludCB4ZXZkX3BhcmFtc19wYXJzZShjb25zdCBjaGFyKiBrZXks IGNvbnN0IGNoYXIqIHZhbHVlKQo+ICt7Cj4gKyAgICBpZigha2V5KSB7Cj4gKyAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkl2YWxpZCBhcmd1bWVudDoga2V5IHN0cmluZyBpcyBO VUxMXG4iKTsKPiArICAgICAgICByZXR1cm4gWEVWRF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKPiAr ICAgIH0KPiArICAgIGlmKCF2YWx1ZSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df RVJST1IsICJJdmFsaWQgYXJndW1lbnQ6IHZhbHVlIHN0cmluZyBpcyBOVUxMXG4iKTsKPiArICAg ICAgICByZXR1cm4gWEVWRF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKPiArICAgIH0KPiArCj4gKyAg ICBlbHNlIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biB4 ZXZkIGNvZGVjIG9wdGlvbjogJXNcbiIsIGtleSk7Cj4gKyAgICAgICAgcmV0dXJuIFhFVkRfUEFS QU1fQkFEX05BTUU7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4g KyAqICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdmFyaWFibGUgb2YgdHlwZSBY RVZEX0NEU0MuCj4gKyAqIFhFVkRfQ0RTQyBjb250YWlucyBhbGwgZGVjb2RlciBwYXJhbWV0ZXJz IHRoYXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdHMgdXNlLgo+ICsgKgo+ICsgKiBU aGUgZmllbGQgdmFsdWVzIG9mIHRoZSBYRVZEX0NEU0Mgc3RydWN0dXJlIGFyZSBwb3B1bGF0ZWQg YmFzZWQgb246Cj4gKyAqIC0gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgdmFsdWVzIG9mIHRoZSBB dkNvZGVjQ29uZXR4dCBzdHJ1Y3R1cmUsCj4gKyAqIC0gdGhlIHhldmQgZGVjb2RlciBzcGVjaWZp YyBvcHRpb24gdmFsdWVzLAo+ICsgKiAgICh0aGUgZnVsbCBsaXN0IG9mIG9wdGlvbnMgYXZhaWxh YmxlIGZvciB4ZXZkIGVuY29kZXIgaXMgZGlzcGxheWVkIGFmdGVyIGV4ZWN1dGluZyB0aGUgY29t bWFuZCAuL2ZmbXBlZyAtLWhlbHAgZGVjb2RlciA9IGxpYnhldmQpCj4gKyAqIC0gYW5kIHRoZSB4 ZXZkIGVuY29kZXIgb3B0aW9ucyBzcGVjaWZpZWQgYXMgYSBsaXN0IG9mIGtleSB2YWx1ZSBwYWly cyBmb2xsb3dpbmcgeGV2ZC1wYXJhbXMgb3B0aW9uCj4gKyAqCj4gKyAqIE9yZGVyIG9mIGlucHV0 IHByb2Nlc3NpbmcgYW5kIHBvcHVsYXRpbmcgdGhlIFhFVkRfQ0RTQyBzdHJ1Y3R1cmUKPiArICog MS4gZmlyc3QsIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyBvZiB0aGUgQVZDb2RlY0NvbnRleHQg c3RydWN0dXJlIGFyZSBwcm9jZXNzZWQsIChpLmUgLXRocmVhZHMgNCkKPiArICogMi4gdGhlbiB4 ZXZkLXNwZWNpZmljIG9wdGlvbnMgYWRkZWQgYXMgQVZPcHRpb24gdG8gdGhlIHhldmQgQVZDb2Rl YyBpbXBsZW1lbnRhdGlvbiAoaS5lIC10aHJlYWRzIDMpCj4gKyAqIDMuIGZpbmFsbHksIHRoZSBv cHRpb25zIHNwZWNpZmllZCBhZnRlciB0aGUgeGV2ZC1wYXJhbXMgb3B0aW9uIGFzIHRoZSBwYXJh bWV0ZXIgbGlzdCBvZiB0eXBlIGtleSB2YWx1ZSBhcmUgcHJvY2Vzc2VkIChpLmUgLXhldmQtcGFy YW1zICJtPTIiKQo+ICsgKgo+ICsgKiBUaGVyZSBhcmUgb3B0aW9ucyB0aGF0IGNhbiBiZSBzZXQg aW4gZGlmZmVyZW50IHdheXMuIEluIHRoaXMgY2FzZSwgcGxlYXNlIGZvbGxvdyB0aGUgYWJvdmUt bWVudGlvbmVkIG9yZGVyIG9mIHByb2Nlc3NpbmcuCj4gKyAqIFRoZSBtb3N0IHJlY2VudCBhc3Np Z25tZW50cyBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIHZhbHVlcy4KPiArICoKPiArICogQHBhcmFt IGF2Y3R4IGNvZGVjIGNvbnRleHQKPiArICogQHBhcmFtIGNkc2MgY29udGFpbnMgYWxsIGVuY29k ZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHVzZS4K PiArICoKPiArICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24g ZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIGludCBnZXRfY29uZihjb25zdCBBVkNvZGVjQ29udGV4 dCogYXZjdHgsIFhFVkRfQ0RTQyogY2RzYykKPiArewo+ICsgICAgaW50IGNwdV9jb3VudCA9IGF2 X2NwdV9jb3VudCgpOwo+ICsKPiArICAgIC8qIHJlYWQgb3B0aW9ucyBmcm9tIEFWQ29kZWNDb250 ZXh0ICYgZnJvbSBYRVZEX0NEU0MgKi8KPiArICAgIHJlYWRfb3B0aW9ucyhhdmN0eCk7Cj4gKwo+ ICsgICAgLyogcGFyc2UgOi1zZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycyBh bmQgc2V0IHZhbHVlcyBmb3IgY3JlYXRlZCBkZXNjcmlwdG9yIChYRVZEX0NEU0MpICovCj4gKyAg ICB7Cj4gKyAgICAgICAgWGV2ZENvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAg ICAgICAgQVZEaWN0aW9uYXJ5RW50cnkgKmVuID0gTlVMTDsKPiArICAgICAgICB3aGlsZSAoKGVu ID0gYXZfZGljdF9nZXQoY3R4LT54ZXZkX29wdHMsICIiLCBlbiwgQVZfRElDVF9JR05PUkVfU1VG RklYKSkpIHsKPiArICAgICAgICAgICAgaW50IHBhcnNlX3JldCA9IHhldmRfcGFyYW1zX3BhcnNl KGVuLT5rZXksIGVuLT52YWx1ZSk7Cj4gKwo+ICsgICAgICAgICAgICBzd2l0Y2ggKHBhcnNlX3Jl dCkgewo+ICsgICAgICAgICAgICBjYXNlIFhFVkRfUEFSQU1fQkFEX05BTUU6Cj4gKyAgICAgICAg ICAgICAgICBhdl9sb2coKEFWQ29kZWNDb250ZXh0KilhdmN0eCwgQVZfTE9HX1dBUk5JTkcsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24gb3B0aW9uOiAlcy5cbiIsIGVuLT5rZXkp Owo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGNhc2UgWEVWRF9QQVJB TV9CQURfVkFMVUU6Cj4gKyAgICAgICAgICAgICAgICBhdl9sb2coKEFWQ29kZWNDb250ZXh0Kilh dmN0eCwgQVZfTE9HX1dBUk5JTkcsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQg dmFsdWUgZm9yICVzOiAlcy5cbiIsIGVuLT5rZXksIGVuLT52YWx1ZSk7Cj4gKyAgICAgICAgICAg ICAgICBicmVhazsKPiArICAgICAgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgICAgIGJy ZWFrOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIC8q IGNsZWFyIFhFVlNfQ0RTQyBzdHJ1Y3R1cmUgKi8KPiArICAgIG1lbXNldChjZHNjLCAwLCBzaXpl b2YoWEVWRF9DRFNDKSk7Cj4gKwo+ICsgICAgLyogaW5pdCBYRVZEX0NEU0MgKi8KPiArICAgIGlm KGF2Y3R4LT50aHJlYWRfY291bnQgPD0gMCkgewo+ICsgICAgICAgIGNkc2MtPnRocmVhZHMgPSAo Y3B1X2NvdW50PFhFVkRfTUFYX1RBU0tfQ05UKT9jcHVfY291bnQ6WEVWRF9NQVhfVEFTS19DTlQ7 Cj4gKyAgICB9IGVsc2UgaWYoYXZjdHgtPnRocmVhZF9jb3VudCA+IFhFVkRfTUFYX1RBU0tfQ05U KSB7Cj4gKyAgICAgICAgY2RzYy0+dGhyZWFkcyA9IFhFVkRfTUFYX1RBU0tfQ05UOwo+ICsgICAg fSBlbHNlIHsKPiArICAgICAgICBjZHNjLT50aHJlYWRzID0gYXZjdHgtPnRocmVhZF9jb3VudDsK PiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gWEVWRF9PSzsKPiArfQo+ICsKPiArLyoqCj4gKyAq IFJlYWQgTkFMIHVuaXQgbGVuZ3RoCj4gKyAqIEBwYXJhbSBicyBpbnB1dCBkYXRhIChiaXRzdHJl YW0pCj4gKyAqIEByZXR1cm4gdGhlIGxlbmdodGggb2YgTkFMIHVuaXQgb24gc3VjY2VzcywgMCB2 YWx1ZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgdWludDMyX3QgcmVhZF9uYWxfdW5pdF9s ZW5ndGgoY29uc3QgdWludDhfdCAqYnMsIGludCBic19zaXplKQo+ICt7Cj4gKyAgICB1aW50MzJf dCBsZW4gPSAwOwo+ICsgICAgWEVWRF9JTkZPIGluZm87Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiAr ICAgIGlmKGJzX3NpemU9PVhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUpIHsKPiArICAgICAgICBy ZXQgPSB4ZXZkX2luZm8oKHZvaWQqKWJzLCBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFLCAxLCAm aW5mbyk7Cj4gKyAgICAgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsKPiArICAgICAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgYml0c3RyZWFtIGluZm9ybWF0 aW9uXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICAgICAgfQo+ICsgICAgICAg IGxlbiA9IGluZm8ubmFsdV9sZW47Cj4gKyAgICAgICAgaWYobGVuID09IDApCj4gKyAgICAgICAg ewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBiaXRz dHJlYW0gc2l6ZSEgWyVkXVxuIiwgYnNfc2l6ZSk7Cj4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIHJldHVybiBsZW47Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4dAo+ICsgKiBAcGFyYW0gY3R4IHRoZSBzdHJ1 Y3R1cmUgdGhhdCBzdG9yZXMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3Rh bmNlIG9mIFhldmUgTVBFRy01IEVWQyBkZWNvZGVyCj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNz LCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW50IGV4cG9ydF9z dHJlYW1fcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgY29uc3QgWGV2ZENvbnRleHQgKmN0 eCkKPiArewo+ICsgICAgLy8gdW5zaWduZWQgaW50IG51bSA9IDAsIGRlbiA9IDA7Cj4gKyAgICAv LyBAdG9kbyBzdXBwb3J0IG90aGVyIGZvcm1hdHMKPiArCj4gKyAgICBpbnQgcmV0Owo+ICsgICAg aW50IHNpemU7Cj4gKyAgICBpbnQgY29sb3Jfc3BhY2U7Cj4gKwo+ICsgICAgYXZjdHgtPnBpeF9m bXQgPSBBVl9QSVhfRk1UX1lVVjQyMFAxMDsKPiArCj4gKyAgICAvLyBAdG9kbyBUaGUgQVZDb2Rl Y0NvbnRleHQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGhlcmUgdXNpbmcgZGF0YSBmcm9tIHRoZSBv YmplY3Qgb2YgWEVWRF9TUFMgdHlwZS4KPiArICAgIC8vCj4gKyAgICAvLyBJdCBzZWVtcyB0byBi ZSBpbXBvc3NpYmxlIHJpZ2h0IG5vdyBzaW5jZSBYRVZEIEFQSSBsaW1pdGF0aW9uLgo+ICsgICAg Ly8gVGhlIGV4dGVuc2lvbiBmb3IgdGhlIFhFVkQgQVBJIGlzIG5lZWRlZC4KPiArICAgIC8vIFRv IGJlIG1vcmUgcHJlY2lzZSwgd2hhdCB3ZSBuZWVkIGlzIGFjY2VzcyB0byB0aGUgb2JqZWN0IG9m IFhFVkRfU1BTIHR5cGUgYmVpbmcgYSBwYXJ0IG9mIFhFVkRfQ1RYIG9iamVjdC4KPiArICAgIC8v IFRoZSBvYmplY3Qgb2YgWEVWRF9DVFggdHlwZSBpcyBjcmVhdGVkIHdoaWxlIHRoZSBmdW5jdGlv biB4ZXZkX2NyZWF0ZSgpIGJlaW5nIGEgcGFydCBvZiBwdWJsaWMgQVBJIGlzIGNhbGxlZC4KPiAr ICAgIC8vCj4gKyAgICAvLyBAdG9kbyByZW1vdmUgdGhlIGZvbGxvd2luZyBoYXJkb2NlZCBoYXNf Yl9mcmFtZXM7IGNvbnNpZGVyIHVzaW5nIHNwcy0+bnVtX3Jlb3JkZXJfcGljcyB2YWx1ZSBpbnN0 ZWFkCj4gKyAgICAvLwo+ICsgICAgLy8gYXZjdHgtPmhhc19iX2ZyYW1lcyAgICAgICAgPSAxOyAv LyAoc3BzLT5udW1fcmVvcmRlcl9waWNzKT8xOjA7Cj4gKyAgICBzaXplID0gNDsKPiArICAgIHJl dCA9IHhldmRfY29uZmlnKGN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9DT0RFRF9XSURUSCwgJmF2Y3R4 LT5jb2RlZF93aWR0aCwgJnNpemUpOwo+ICsgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsKPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIGdldCBjb2RlZF93 aWR0aFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9 IHhldmRfY29uZmlnKGN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9DT0RFRF9IRUlHSFQsICZhdmN0eC0+ Y29kZWRfaGVpZ2h0LCAmc2l6ZSk7Cj4gKyAgICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgewo+ICsg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gZ2V0IGNvZGVkX2hl aWdodFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9 IHhldmRfY29uZmlnKGN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9XSURUSCwgJmF2Y3R4LT53aWR0aCwg JnNpemUpOwo+ICsgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsKPiArICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIGdldCB3aWR0aFxuIik7Cj4gKyAgICAgICAg cmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IHhldmRfY29uZmlnKGN0eC0+aWQs IFhFVkRfQ0ZHX0dFVF9IRUlHSFQsICZhdmN0eC0+aGVpZ2h0LCAmc2l6ZSk7Cj4gKyAgICBpZiAo WEVWRF9GQUlMRUQocmV0KSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJmYWlsZWQgdG8gZ2V0IGhlaWdodFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAg fQo+ICsKPiArICAgIHJldCA9IHhldmRfY29uZmlnKGN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9DT0xP Ul9TUEFDRSwgJmNvbG9yX3NwYWNlLCAmc2l6ZSk7Cj4gKyAgICBpZiAoWEVWRF9GQUlMRUQocmV0 KSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gZ2V0 IGNvbG9yX3NwYWNlXG4iKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKyAgICBz d2l0Y2goY29sb3Jfc3BhY2UpIHsKPiArICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQwMF8xMExFOgo+ ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJjb2xvcl9zcGFjZSA9IFhFVkRf Q1NfWUNCQ1I0MDBfMTBMRVxuIik7Cj4gKyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhf Rk1UX0dSQVkxMExFOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBYRVZEX0NTX1lDQkNS NDIwXzEwTEU6Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImNvbG9yX3Nw YWNlID0gWEVWRF9DU19ZQ0JDUjQyMF8xMExFXG4iKTsKPiArICAgICAgICBhdmN0eC0+cGl4X2Zt dCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEwTEU7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNl IFhFVkRfQ1NfWUNCQ1I0MjJfMTBMRToKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RF QlVHLCAiY29sb3Jfc3BhY2UgPSBYRVZEX0NTX1lDQkNSNDIyXzEwTEVcbiIpOwo+ICsgICAgICAg IGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQMTBMRTsKPiArICAgICAgICBicmVh azsKPiArICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQ0NF8xMExFOgo+ICsgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfREVCVUcsICJjb2xvcl9zcGFjZSA9IFhFVkRfQ1NfWUNCQ1I0NDRfMTBMRVxu Iik7Cj4gKyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQ0NFAxMExFOwo+ ICsgICAgICAgIGJyZWFrOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0VSUk9SLCAidW5rbm93biBjb2xvciBzcGFjZVxuIik7Cj4gKyAgICAgICAgYXZjdHgt PnBpeF9mbXQgPSBBVl9QSVhfRk1UX05PTkU7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAg fQo+ICsKPiArLy8gQHRvZG8gVXNlIF9YRVZEX1NQUyBmaWVsZHMgdG8gaW5pdGlhbGl6ZSBBVkNv ZGVjQ29udGV4dCB3aGVuIGl0IGlzIHBvc3NpYmxlCj4gKyNpZmRlZiBVU0VfWEVWRF9TUFNfRklF TERTCj4gKyAgICBhdmN0eC0+cHJvZmlsZSA9IHNwcy0+cHJvZmlsZV9pZGM7Cj4gKyAgICBhdmN0 eC0+bGV2ZWwgPSBzcHMtPmxldmVsX2lkYzsKPiArCj4gKyAgICBmZl9zZXRfc2FyKGF2Y3R4LCBz cHMtPnZ1aV9wYXJhbWV0ZXJzLnNhcik7Cj4gKwo+ICsgICAgaWYgKHNwcy0+dnVpX3BhcmFtZXRl cnN2dWkudmlkZW9fc2lnbmFsX3R5cGVfcHJlc2VudF9mbGFnKQo+ICsgICAgICAgIGF2Y3R4LT5j b2xvcl9yYW5nZSA9IHNwcy0+dnVpX3BhcmFtZXRlcnMudmlkZW9fZnVsbF9yYW5nZV9mbGFnID8g QVZDT0xfUkFOR0VfSlBFRwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQVZDT0xf UkFOR0VfTVBFRzsKPiArICAgIGVsc2UKPiArICAgICAgICBhdmN0eC0+Y29sb3JfcmFuZ2UgPSBB VkNPTF9SQU5HRV9NUEVHOwo+ICsKPiArICAgIGlmIChzcHMtPnZ1aV9wYXJhbWV0ZXJzLmNvbG91 cl9kZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcpIHsKPiArICAgICAgICBhdmN0eC0+Y29sb3JfcHJp bWFyaWVzID0gc3BzLT52dWlfcGFyYW1ldGVycy5jb2xvdXJfcHJpbWFyaWVzOwo+ICsgICAgICAg IGF2Y3R4LT5jb2xvcl90cmMgICAgICAgPSBzcHMtPnZ1aV9wYXJhbWV0ZXJzLnRyYW5zZmVyX2No YXJhY3RlcmlzdGljOwo+ICsgICAgICAgIGF2Y3R4LT5jb2xvcnNwYWNlICAgICAgPSBzcHMtPnZ1 aV9wYXJhbWV0ZXJzLm1hdHJpeF9jb2VmZnM7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGF2 Y3R4LT5jb2xvcl9wcmltYXJpZXMgPSBBVkNPTF9QUklfVU5TUEVDSUZJRUQ7Cj4gKyAgICAgICAg YXZjdHgtPmNvbG9yX3RyYyAgICAgICA9IEFWQ09MX1RSQ19VTlNQRUNJRklFRDsKPiArICAgICAg ICBhdmN0eC0+Y29sb3JzcGFjZSAgICAgID0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEOwo+ICsgICAg fQo+ICsKPiArICAgIGlmIChzcHMtPnZ1aV9wYXJhbWV0ZXJzLnRpbWluZ19pbmZvX3ByZXNlbnRf ZmxhZykgewo+ICsgICAgICAgIG51bSA9IHNwcy0+dnVpX3BhcmFtZXRlcnMubnVtX3VuaXRzX2lu X3RpY2s7Cj4gKyAgICAgICAgZGVuID0gc3BzLT52dWlfcGFyYW1ldGVycy50aW1lX3NjYWxlOwo+ ICsgICAgfQo+ICsKPiArICAgIGlmIChzLT5zZWkuYWx0ZXJuYXRpdmVfdHJhbnNmZXIucHJlc2Vu dCAmJgo+ICsgICAgICAgICAgICBhdl9jb2xvcl90cmFuc2Zlcl9uYW1lKHMtPnNlaS5hbHRlcm5h dGl2ZV90cmFuc2Zlci5wcmVmZXJyZWRfdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzKSAmJgo+ICsg ICAgICAgICAgICBzLT5zZWkuYWx0ZXJuYXRpdmVfdHJhbnNmZXIucHJlZmVycmVkX3RyYW5zZmVy X2NoYXJhY3RlcmlzdGljcyAhPSBBVkNPTF9UUkNfVU5TUEVDSUZJRUQpIHsKPiArICAgICAgICBh dmN0eC0+Y29sb3JfdHJjID0gcy0+c2VpLmFsdGVybmF0aXZlX3RyYW5zZmVyLnByZWZlcnJlZF90 cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3M7Cj4gKyAgICB9Cj4gKyNlbHNlCj4gKyAgICBhdmN0eC0+ Y29sb3JfcHJpbWFyaWVzID0gQVZDT0xfUFJJX1VOU1BFQ0lGSUVEOwo+ICsgICAgYXZjdHgtPmNv bG9yX3RyYyAgICAgICA9IEFWQ09MX1RSQ19VTlNQRUNJRklFRDsKPiArICAgIGF2Y3R4LT5jb2xv cnNwYWNlICAgICAgPSBBVkNPTF9TUENfVU5TUEVDSUZJRUQ7Cj4gKwo+ICsjZW5kaWYKPiArICAg IHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogSW5pdGlhbGl6ZSBkZWNvZGVyIHN0YXRp YyBkYXRhCj4gKyAqCj4gKyAqIEB0b2RvIENvbnNpZGVyIHJlbW92aW5nIHVudXNlZCBmdW5jdGlv bgoKSW5kZWVkLCByZW1vdmUgaXQuCgo+ICsgKi8KPiArc3RhdGljIGF2X2NvbGQgdm9pZCBsaWJ4 ZXZkX2luaXRfc3RhdGljX2RhdGEoQVZDb2RlYyAqY29kZWMpCj4gK3sKPiArICAgIFVOVVNFRChj b2RlYyk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBJbml0aWFsaXplIGRlY29kZXIKPiArICogQ3Jl YXRlIGRlY29kZXIgaW5zdGFuY2UgYW5kIGFsbG9jYXRlIGFsbCB0aGUgbmVlZGVkIHJlc291cmNl cwo+ICsgKgo+ICsgKiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4dAo+ICsgKiBAcmV0dXJuIDAg b24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0 aWMgYXZfY29sZCBpbnQgbGlieGV2ZF9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ ICsgICAgWGV2ZENvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBpbnQgdmFs ID0gMDsKPiArICAgIFhFVkRfQ0RTQyAqY2RzYyA9ICYoY3R4LT5jZHNjKTsKPiArCj4gKyAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiZVh0cmEtZmFzdCBFc3NlbnRpYWwgVmlkZW8gRGVj b2RlclxuIik7Cj4gKyNpZmRlZiBQUklOVF9BVkNUWAo+ICsgICAgcHJpbnRfYXZjdHgoYXZjdHgp Owo+ICsjZW5kaWYKPiArCj4gKyAgICAvKiByZWFkIGNvbmZpZ3VyYXRpb25zIGFuZCBzZXQgdmFs dWVzIGZvciBjcmVhdGVkIGRlc2NyaXB0b3IgKFhFVkRfQ0RTQykgKi8KPiArICAgIHZhbCA9IGdl dF9jb25mKGF2Y3R4LCBjZHNjKTsKPiArICAgIGlmICh2YWwgIT0gWEVWRF9PSykgewo+ICsgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsIkNhbm5vdCBnZXQgY29uZmlndXJhdGlvblxu Iik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIGNyZWF0ZSBk ZWNvZGVyICovCj4gKyAgICBjdHgtPmlkID0geGV2ZF9jcmVhdGUoJihjdHgtPmNkc2MpLCBOVUxM KTsKPiArICAgIGlmKGN0eC0+aWQgPT0gTlVMTCkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfRVJST1IsICJjYW5ub3QgY3JlYXRlIFhFVkQgZW5jb2RlclxuIik7Cj4gKyAgICAgICAg cmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAgIGN0eC0+cGFja2V0X2NvdW50ID0gMDsKPiAr ICAgIGN0eC0+ZGVjb2RfZnJhbWVzID0gMDsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsv KioKPiArICAqIERuY29kZSBwaWN0dXJlCj4gKyAgKgo+ICsgICogQHBhcmFtICAgICAgYXZjdHgg ICAgICAgICAgY29kZWMgY29udGV4dAo+ICsgICogQHBhcmFtICAgICAgZGF0YSAgICAgICAgICAg Y29kZWMgdHlwZSBkZXBlbmRlbnQgb3V0cHV0IHN0cnVjdAo+ICsgICogQHBhcmFtW291dF0gZ290 X2ZyYW1lICAgICAgZGVjb2RlciBzZXRzIHRvIDAgb3IgMSB0byBpbmRpY2F0ZSB0aGF0IGEKPiAr ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1lbXB0eSBmcmFtZSBvciBzdWJ0aXRs ZSB3YXMgcmV0dXJuZWQgaW4KPiArICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGRh dGEuCj4gKyAgKiBAcGFyYW1baW5dICBwa3QgICAgICAgICAgICBBVlBhY2tldCBjb250YWluaW5n IHRoZSBkYXRhIHRvIGJlIGRlY29kZWQKPiArICAqIEByZXR1cm4gYW1vdW50IG9mIGJ5dGVzIHJl YWQgZnJvbSB0aGUgcGFja2V0IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yCj4gKyAgKiAgICAg ICAgIGNvZGUgb24gZmFpbHVyZQo+ICsgICovCj4gK3N0YXRpYyBpbnQgbGlieGV2ZF9kZWNvZGUo QVZDb2RlY0NvbnRleHQgKmF2Y3R4LCB2b2lkICpkYXRhLCBpbnQgKmdvdF9mcmFtZSwgQVZQYWNr ZXQgKnBrdCkKPiArewo+ICsgICAgQVZGcmFtZSAqZnJhbWUgPSBkYXRhOwo+ICsgICAgWGV2ZENv bnRleHQgKmN0eCA9IE5VTEw7Cj4gKyAgICBYRVZEX0lNR0IgKiBpbWdiID0gTlVMTDsKPiArICAg IFhFVkRfU1RBVCBzdGF0Owo+ICsgICAgWEVWRF9CSVRCIGJpdGI7Cj4gKyAgICBpbnQgcmV0LCBu YWx1X3NpemUsIGJzX3JlYWRfcG9zOwo+ICsKPiArICAgIGlmKGF2Y3R4ID09IE5VTEwpIHsKPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBpbnB1dCBwYXJhbWV0 ZXI6IEFWQ29kZWNDb250ZXh0XG4iKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4g KyAgICBjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaWYoY3R4ID09IE5VTEwpIHsKPiAr ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgWEVWRCBjb250ZXh0 XG4iKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYocGt0LT5z aXplID4gMCkgewo+ICsgICAgICAgIGJzX3JlYWRfcG9zID0gMDsKPiArICAgICAgICBpbWdiID0g TlVMTDsKPiArICAgICAgICB3aGlsZShwa3QtPnNpemUgPiAoYnNfcmVhZF9wb3MgKyBYRVZEX05B TF9VTklUX0xFTkdUSF9CWVRFKSkgewo+ICsgICAgICAgICAgICBpbnQgbmFsX3R5cGUgPSAwOwo+ ICsgICAgICAgICAgICAKPiArICAgICAgICAgICAgbWVtc2V0KCZzdGF0LCAwLCBzaXplb2YoWEVW RF9TVEFUKSk7Cj4gKyAgICAgICAgICAgIG1lbXNldCgmYml0YiwgMCwgc2l6ZW9mKFhFVkRfQklU QikpOwo+ICsKPiArICAgICAgICAgICAgbmFsdV9zaXplID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgo cGt0LT5kYXRhICsgYnNfcmVhZF9wb3MsIFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUpOwo+ICsg ICAgICAgICAgICBpZihuYWx1X3NpemUgPT0gMCkgewo+ICsgICAgICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGJpdHN0cmVhbVxuIik7Cj4gKyAgICAgICAg ICAgICAgICBnb3RvIEVSUjsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBic19yZWFk X3BvcyArPSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFOwo+ICsKPiArICAgICAgICAgICAgYml0 Yi5hZGRyID0gcGt0LT5kYXRhICsgYnNfcmVhZF9wb3M7Cj4gKyAgICAgICAgICAgIGJpdGIuc3Np emUgPSBuYWx1X3NpemU7Cj4gKwo+ICsgICAgICAgICAgICAvLyBSZWFkIE5BTCBVbml0IFR5cGUg ZnJvbSAgTkFMIFVuaXQgSGVhZGVyCj4gKyAgICAgICAgICAgIC8vCj4gKyAgICAgICAgICAgIC8v IFRoZSBzdHJ1Y3R1cmUgb2YgTkFMIFVuaXQgSGVhZGVyIGxvb2tzIGxpa2UgZm9sbG93cwo+ICsg ICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvL8OCICstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKwo+ICsgICAgICAgICAgICAvL8OCIHwwfDF8MnwzfDR8NXw2fDd8MHwxfDJ8M3w0 fDV8Nnw3fAo+ICsgICAgICAgICAgICAvL8OCICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r LSstKwo+ICsgICAgICAgICAgICAvL8OCIHxGfCAgIFR5cGUgICAgfCBUSUQgfCBSZXNlcnZlIHxF fAo+ICsgICAgICAgICAgICAvL8OCICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwo+ ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvLyBGOiAgICAgICAxIGJpdCAgIC0gZm9y YmlkZGVuX3plcm9fYml0LiAgUmVxdWlyZWQgdG8gYmUgemVybyBpbiBbRVZDXS4KPiArICAgICAg ICAgICAgLy8gVHlwZTogICAgNiBiaXRzICAtIG5hbF91bml0X3R5cGVfcGx1czEgKFRoaXMgZmll bGQgc3BlY2lmaWVzIHRoZSBOQUwgdW5pdCB0eXBlIGFzIGRlZmluZWQgaW4gVGFibGUgNCBvZiBb RVZDXSkKPiArICAgICAgICAgICAgLy8gVElEOiAgICAgMyBiaXRzICAtIG51aF90ZW1wb3JhbF9p ZC4gIFRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSB0ZW1wb3JhbCBpZGVudGlmaWVyIG9mIHRoZSBO QUwgdW5pdC4KPiArICAgICAgICAgICAgLy8gUmVzZXJ2ZTogNSBiaXRzICAtIG51aF9yZXNlcnZl ZF96ZXJvXzViaXRzLiAgVGhpcyBmaWVsZCBzaGFsbCBiZSBlcXVhbCB0byB0aGUgdmVyc2lvbiBv ZiB0aGUgW0VWQ10gc3BlY2lmaWNhdGlvbi4KPiArICAgICAgICAgICAgLy8gRTogICAgICAgMSBi aXQgICAtIG51aF9leHRlbnNpb25fZmxhZy4gIFRoaXMgZmllbGQgc2hhbGwgYmUgZXF1YWwgdGhl IHZlcnNpb24gb2YgdGhlIFtFVkNdIHNwZWNpZmljYXRpb24uCj4gKyAgICAgICAgICAgIC8vCj4g KyAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRt bC9kcmFmdC1pZXRmLWF2dGNvcmUtcnRwLWV2Yy0wMSNzZWN0aW9uLTEuMS40Cj4gKyAgICAgICAg ICAgIAo+ICsjaWZkZWYgVVNFX0VYUF9HT0xPTUJfU1RVRkYgCj4gKyAgICAgICAgICAgIG5hbF90 eXBlID0gZ2V0X25hbHVfdHlwZShiaXRiLmFkZHIsIDEpOwo+ICsgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19ERUJVRywgIk5BTFUgVHlwZTogJWRcbiIsIG5hbF90eXBlKTsKPiArI2Vs c2UKPiArICAgICAgICAgICAgbWVtY3B5KCZuYWxfdHlwZSxiaXRiLmFkZHIsMSk7Cj4gKyAgICAg ICAgICAgIG5hbF90eXBlID0gbmFsX3R5cGUgJiAweDdFOwo+ICsgICAgICAgICAgICBuYWxfdHlw ZSA9IG5hbF90eXBlID4+IDE7Cj4gKyAgICAgICAgICAgIG5hbF90eXBlIC09IDE7Cj4gKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiTkFMVSBUeXBlOiAlZFxuIiwgbmFs X3R5cGUpOwo+ICsjZW5kaWYKPiArCj4gKyAgICAgICAgICAgIC8qIG1haW4gZGVjb2RpbmcgYmxv Y2sgKi8KPiArICAgICAgICAgICAgcmV0ID0geGV2ZF9kZWNvZGUoY3R4LT5pZCwgJmJpdGIsICZz dGF0KTsKPiArICAgICAgICAgICAgaWYoWEVWRF9GQUlMRUQocmV0KSkgewo+ICsgICAgICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gZGVjb2RlIGJpdHN0 cmVhbVxuIik7Cj4gKyAgICAgICAgICAgICAgICBnb3RvIEVSUjsKPiArICAgICAgICAgICAgfQo+ ICsKPiArICAgICAgICAgICAgYnNfcmVhZF9wb3MgKz0gbmFsdV9zaXplOwo+ICsKPiArI2lmZGVm IFBSSU5UX05BTFVfSU5GTwo+ICsgICAgICAgICAgICBwcmludF9uYWx1X2luZm8oY3R4KTsKPiAr I2VuZGlmCj4gKwo+ICsgICAgICAgICAgICBpZihzdGF0Lm5hbHVfdHlwZSA9PSBYRVZEX05VVF9T UFMpIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiRVZD IHN0cmVhbSBwYXJhbWV0ZXJzIGNoYW5nZWRcbiIpOwo+ICsKPiArICAgICAgICAgICAgICAgIGlm KGV4cG9ydF9zdHJlYW1fcGFyYW1zKGF2Y3R4LCBjdHgpIT0wKSB7Cj4gKyAgICAgICAgICAgICAg ICAgICAgZ290byBFUlI7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIndpZHRoOiAlZFxuIixhdmN0eC0+d2lkdGgpOwo+ ICsgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJoZWlnaHQ6ICVk XG4iLGF2Y3R4LT5oZWlnaHQpOwo+ICsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAg ICAgaWYoc3RhdC5yZWFkICE9IG5hbHVfc2l6ZSkgewo+ICsgICAgICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfSU5GTywgImRpZmZlcmVudCByZWFkaW5nIG9mIGJpdHN0cmVhbSAoaW46 JWQsIHJlYWQ6JWQpXG4sIiwgbmFsdV9zaXplLCBzdGF0LnJlYWQpOwo+ICsgICAgICAgICAgICB9 Cj4gKyAgICAgICAgICAgIGlmKHN0YXQuZm51bSA+PSAwKSB7Cj4gKyAgICAgICAgICAgICAgICBp ZiAoaW1nYikgeyAvKiBhbHJlYWR5IGhhcyBhIGRlY29kZWQgaW1hZ2UgKi8KPiArICAgICAgICAg ICAgICAgICAgICBpbWdiLT5yZWxlYXNlKGltZ2IpOwo+ICsgICAgICAgICAgICAgICAgICAgIGlt Z2IgPSBOVUxMOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgcmV0ID0g eGV2ZF9wdWxsKGN0eC0+aWQsICZpbWdiKTsKPiArICAgICAgICAgICAgICAgIGlmKFhFVkRfRkFJ TEVEKHJldCkpIHsKPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgImZhaWxlZCB0byBwdWxsIHRoZSBkZWNvZGVkIGltYWdlIChlcnI6JWQsIGZyYW1lIz0l ZClcbiIsIHJldCwgc3RhdC5mbnVtKTsKPiArICAgICAgICAgICAgICAgICAgICBnb3RvIEVSUjsK PiArICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0ID09IFhFVkRfT0tfRlJNX0RFTEFZRUQp IHsKPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgImRl bGF5ZWQgZnJhbWVcbiIpOwo+ICsgICAgICAgICAgICAgICAgICAgIGlmKGltZ2IpIHsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgaW1nYi0+cmVsZWFzZShpbWdiKTsKPiArICAgICAgICAgICAg ICAgICAgICAgICAgaW1nYiA9IE5VTEw7Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAg ICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfSBlbHNl IHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiYnVtcGluZyAuLi5cbiIp Owo+ICsgICAgICAgIHJldCA9IHhldmRfcHVsbChjdHgtPmlkLCAmKGltZ2IpKTsKPiArICAgICAg ICBpZihyZXQgPT0gWEVWRF9FUlJfVU5FWFBFQ1RFRCkgewo+ICsgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19ERUJVRywgIkJ1bXBpbmcgcHJvY2VzcyBjb21wbGV0ZWRcbiIpOwo+ICsg ICAgICAgICAgICAqZ290X2ZyYW1lID0gMDsKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAg ICAgICAgfSBlbHNlIGlmKFhFVkRfRkFJTEVEKHJldCkpIHsKPiArICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gcHVsbCB0aGUgZGVjb2RlZCBpbWFnZSAo ZXJyOiVkKVxuIiwgcmV0KTsKPiArICAgICAgICAgICAgZ290byBFUlI7Cj4gKyAgICAgICAgfSBl bHNlIHsKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJidW1waW5n IHN1Y2Nlc3NcbiIpOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBpZihpbWdiKSB7 Cj4gKyAgICAgICAgLyogQHRvZG8gc3VwcG9ydHMgb3RoZXIgY29sb3Igc3BhY2UgYW5kIGJpdCBk ZXB0aCAqLwo+ICsgICAgICAgIGlmKGltZ2ItPmNzICE9IFhFVkRfQ1NfWUNCQ1I0MjBfMTBMRSkg ewo+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk5vdCBzdXBwb3J0 ZWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFtZShhdmN0eC0+cGl4X2Zt dCkpOwo+ICsgICAgICAgICAgICBnb3RvIEVSUjsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAg IGlmIChpbWdiLT53WzBdICE9IGF2Y3R4LT53aWR0aCB8fCBpbWdiLT5oWzBdICE9IGF2Y3R4LT5o ZWlnaHQpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJyZXNv bHV0aW9uIGNoYW5nZWQgJWR4JWQgLT4gJWR4JWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBh dmN0eC0+d2lkdGgsIGF2Y3R4LT5oZWlnaHQsIGltZ2ItPndbMF0sIGltZ2ItPmhbMF0pOwo+ICsg ICAgICAgICAgICBpZihmZl9zZXRfZGltZW5zaW9ucyhhdmN0eCwgaW1nYi0+d1swXSwgaW1nYi0+ aFswXSkgPCAwKSB7Cj4gKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgImNhbm5vdCBzZXQgbmV3IGRpbWVuc2lvblxuIik7Cj4gKyAgICAgICAgICAgICAgICBnb3Rv IEVSUjsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgZnJhbWUt PmNvZGVkX3BpY3R1cmVfbnVtYmVyKys7Cj4gKyAgICAgICAgZnJhbWUtPmRpc3BsYXlfcGljdHVy ZV9udW1iZXIrKzsKPiArICAgICAgICBmcmFtZS0+Zm9ybWF0ID0gQVZfUElYX0ZNVF9ZVVY0MjBQ MTBMRTsKPiArCj4gKyNpZmRlZiBQUklOVF9YRVZEX0lNR0JfSU5GTwo+ICsgICAgICAgIHByaW50 X3hldmRfaW1nYl9pbmZvKGltZ2IpOwo+ICsjZW5kaWYKPiArCj4gKyAgICAgICAgaWYgKGZmX2dl dF9idWZmZXIoYXZjdHgsIGZyYW1lLCAwKSA8IDApIHsKPiArICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJjYW5ub3QgZ2V0IEFWIGJ1ZmZlclxuIik7Cj4gKyAgICAgICAg ICAgIGdvdG8gRVJSOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgZnJhbWUtPnB0cyA9IHBr dC0+cHRzOwo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiZnJhbWUtPnB0 cyA9ICVsZFxuIiwgZnJhbWUtPnB0cyk7Cj4gKwo+ICsgICAgICAgIGF2X2ltYWdlX2NvcHkoZnJh bWUtPmRhdGEsIGZyYW1lLT5saW5lc2l6ZSwgKGNvbnN0IHVpbnQ4X3QgKiopaW1nYi0+YSwKPiAr ICAgICAgICAgICAgICAgICAgICAgIGltZ2ItPnMsIGF2Y3R4LT5waXhfZm10LAo+ICsgICAgICAg ICAgICAgICAgICAgICAgaW1nYi0+d1swXSwgaW1nYi0+aFswXSk7Cj4gKwo+ICsgICAgICAgIGN0 eC0+ZGVjb2RfZnJhbWVzKys7Cj4gKyAgICAgICAgKmdvdF9mcmFtZSA9IDE7Cj4gKwo+ICsjaWZk ZWYgUFJJTlRfRlJBTUVfSU5GTwo+ICsgICAgICAgIHByaW50X2ZyYW1lX2luZm8oZnJhbWUpOwo+ ICsjZW5kaWYKPiArICAgICAgICBpbWdiLT5yZWxlYXNlKGltZ2IpOwo+ICsgICAgICAgIGltZ2Ig PSBOVUxMOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICAqZ290X2ZyYW1lID0gMDsKPiArICAg IH0KPiArIAo+ICsgICAgY3R4LT5wYWNrZXRfY291bnQrKzsKPiArICAgIHJldHVybiBwa3QtPnNp emU7Cj4gKwo+ICtFUlI6Cj4gKyAgICBpZihpbWdiKSB7Cj4gKyAgICAgICAgaW1nYi0+cmVsZWFz ZShpbWdiKTsKPiArICAgICAgICBpbWdiID0gTlVMTDsKPiArICAgIH0KPiArICAgICpnb3RfZnJh bWUgPSAwOwo+ICsgICAgcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ICsvKioKPiArICogRGVzdHJveSBk ZWNvZGVyCj4gKyAqCj4gKyAqIEBwYXJhbSBhdmN0eCBjb2RlYyBjb250ZXh0Cj4gKyAqIEByZXR1 cm4gMCBvbiBzdWNjZXNzCj4gKyAqLwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgbGlieGV2ZF9jbG9z ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArICAgIFhldmRDb250ZXh0ICpjdHggPSBh dmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaWYoY3R4LT5pZCkgewo+ICsgICAgICAgIHhldmRfZGVs ZXRlKGN0eC0+aWQpOwo+ICsgICAgICAgIGN0eC0+aWQgPSBOVUxMOwo+ICsgICAgfQo+ICsKPiAr ICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihYZXZk Q29udGV4dCwgeCkKPiArI2RlZmluZSBWRCBBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09Q VF9GTEFHX0RFQ09ESU5HX1BBUkFNCj4gKwo+ICsvLyBAdG9kbyBjb25zaWRlciB1c2luZyBmb2xs b3dpbmcgb3B0aW9ucyAoLi9mZm1wZWcgLS1oZWxwIGRlY29kZXI9bGlieGV2ZCkKPiArLy8KPiAr c3RhdGljIGNvbnN0IEFWT3B0aW9uIG9wdGlvbnNbXSA9IHsKPiArICAgIHsgInhldmQtcGFyYW1z IiwgICAgICAgICAgICAgICAgIm92ZXJyaWRlIHRoZSB4ZXZkIGNvbmZpZ3VyYXRpb24gdXNpbmcg YSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzIiwgT0ZGU0VUKHhldmRf b3B0cyksIEFWX09QVF9UWVBFX0RJQ1QsICAgeyAwIH0sIDAsIDAsIFZEIH0sCgpXaGF0IG9wdGlv bnMgZm9yIHhldmQgbWFrZSBzZW5zZSBhdCBhbGw/IE1vc3QgZGVjb2RlcnMgZG9uJ3QgdXNlCmNv ZGVjLXNwZWNpZmljIG9wdGlvbnMgYXQgYWxsLCBhcyBhIGRlY29kZXJzIGpvYiBpcyBnZW5lcmFs bHkgdmVyeSBlYXN5CihuYW1lbHk6ICJkZWNvZGUgd2hhdCBpdCBnZXRzIGZlZCIpLgooQWNjb3Jk aW5nIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tcGVnNS94ZXZkIHRoZSBvbmx5IG9wdGlvbiB0aGF0 IG1ha2VzCnNlbnNlIGlzIHRoZSBudW1iZXIgb2YgdGhyZWFkcywgYnV0IGZvciB0aGlzIHlvdSBk b24ndCBuZWVkIHhldmQtcGFyYW1zOwpBVkNvZGVjQ29udGV4dC50aHJlYWRfY291bnQgaXMgZW5v dWdoLikKCj4gKyAgICB7IE5VTEwgfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IEFWQ2xhc3Mg eGV2ZF9jbGFzcyA9IHsKPiArICAgIC5jbGFzc19uYW1lID0gImxpYnhldmQiLAo+ICsgICAgLml0 ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKPiArICAgIC5vcHRpb24gICAgID0gb3B0 aW9ucywKPiArICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAo+ICt9Owo+ ICsKPiArLy8vIEB0b2RvIHByb3ZpZGUgaW1wbGVtZW50YXRpb24KPiArc3RhdGljIGNvbnN0IEFW Q29kZWNEZWZhdWx0IHhldmRfZGVmYXVsdHNbXSA9IHsKPiArICAgIHsgImIiLCAiMCIgfSwKPiAr ICAgIHsgTlVMTCB9LAo+ICt9OwoKVXNpbmcgQVZDb2RlY0RlZmF1bHQgZm9yIGEgZGVjb2RlciBn ZW5lcmFsbHkgbWFrZXMgbm8gc2Vuc2UuIFRoaXMKY2VydGFpbmx5IGFwcGxpZXMgdG8gc2V0dGlu ZyBhIGJpdHJhdGUgZm9yIGEgZGVjb2Rlci4KCj4gKwo+ICtBVkNvZGVjIGZmX2xpYnhldmRfZGVj b2RlciA9IHsKPiArICAgIC5uYW1lICAgICAgICAgICAgID0gImV2YyIsCj4gKyAgICAubG9uZ19u YW1lICAgICAgICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJFVkMgLyBNUEVHLTUgRXNzZW50aWFs IFZpZGVvIENvZGluZyAoRVZDKSIpLAo+ICsgICAgLnR5cGUgICAgICAgICAgICAgPSBBVk1FRElB X1RZUEVfVklERU8sCj4gKyAgICAuaWQgICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0VWQywK PiArICAgIC5pbml0ICAgICAgICAgICAgID0gbGlieGV2ZF9pbml0LAo+ICsgICAgLmluaXRfc3Rh dGljX2RhdGEgPSBsaWJ4ZXZkX2luaXRfc3RhdGljX2RhdGEsCgpJZiB5b3UgZG9uJ3QgdXNlIGxp YnhldmRfaW5pdF9zdGF0aWNfZGF0YSwgeW91IHNob3VsZCBjb25zdGlmeQpmZl9saWJ4ZXZkX2Rl Y29kZXI7IGlmIHlvdSBuZWVkIGluaXRfc3RhdGljX2RhdGEsIHlvdSBuZWVkIHRvIGRlY29uc3Rp ZnkKdGhlIGRlY2xhcmF0aW9uIGluIGxpYmF2Y29kZWMvYWxsY29kZWNzLmMgdG8gbWF0Y2ggdGhl IGRlZmluaXRpb24uCgo+ICsgICAgLmRlY29kZSAgICAgICAgICAgPSBsaWJ4ZXZkX2RlY29kZSwK PiArICAgIC5jbG9zZSAgICAgICAgICAgID0gbGlieGV2ZF9jbG9zZSwKPiArICAgIC5wcml2X2Rh dGFfc2l6ZSAgID0gc2l6ZW9mKFhldmRDb250ZXh0KSwKPiArICAgIC5wcml2X2NsYXNzICAgICAg ID0gJnhldmRfY2xhc3MsCj4gKyAgICAuZGVmYXVsdHMgICAgICAgICA9IHhldmRfZGVmYXVsdHMs Cj4gKyAgICAuY2FwYWJpbGl0aWVzICAgICA9IEFWX0NPREVDX0NBUF9ERUxBWSB8IEFWX0NPREVD X0NBUF9BVVRPX1RIUkVBRFMgfCBBVl9DT0RFQ19DQVBfQVZPSURfUFJPQklORywKPiArICAgIC53 cmFwcGVyX25hbWUgICAgID0gImxpYnhldmQiLAo+ICt9Owo+IGRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL2xpYnhldmUuYyBiL2xpYmF2Y29kZWMvbGlieGV2ZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5mMzRhMWQ2ZWZkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2xpYmF2Y29kZWMvbGlieGV2ZS5jCj4gQEAgLTAsMCArMSwxMTg1IEBACj4gKy8qCj4gKyAqIGxp YnhldmUgZW5jb2Rlcgo+ICsgKiBFVkMgKE1QRUctNSBFc3NlbnRpYWwgVmlkZW8gQ29kaW5nKSBl bmNvZGluZyB1c2luZyBYRVZFIE1QRUctNSBFVkMgZW5jb2RlciBsaWJyYXJ5Cj4gKyAqCj4gKyAq IENvcHlyaWdodCAoQykgMjAyMSBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNv bT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBG Rm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4g KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjaWYgZGVmaW5lZChfTVNDX1ZFUikKPiArI2RlZmlu ZSBYRVZFX0FQSV9JTVBPUlRTIDEKPiArI2VuZGlmCj4gKwo+ICsjaW5jbHVkZSA8eGV2ZS5oPgo+ ICsKPiArI2luY2x1ZGUgPGZsb2F0Lmg+Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArCj4gKyNp bmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9jb21t b24uaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRp bC9waXhkZXNjLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiCj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvdGltZS5oIgo+ICsKPiArI2luY2x1ZGUgImF2Y29kZWMuaCIKPiArI2luY2x1 ZGUgImludGVybmFsLmgiCj4gKyNpbmNsdWRlICJwYWNrZXRfaW50ZXJuYWwuaCIKPiArCj4gKyNk ZWZpbmUgTUFYX0JTX0JVRiAoMTYqMTAyNCoxMDI0KQo+ICsKPiArLyoqCj4gKyAqIEVycm9yIGNv ZGVzCj4gKyAqLwo+ICsjZGVmaW5lIFhFVkVfUEFSQU1fQkFEX05BTUUgLTEwMAo+ICsjZGVmaW5l IFhFVkVfUEFSQU1fQkFEX1ZBTFVFIC0yMDAKPiArCj4gKy8qKgo+ICsgKiBNYWNybyBmb3IgZWxp bWluYXRpbmcgdGhlIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nCj4gKyAqLwo+ICsjZGVmaW5lIFVO VVNFRCh4KSAodm9pZCkoeCkKPiArCj4gKy8qKgo+ICsgKiBFbmNvZGVyIHN0YXRlcwo+ICsgKgo+ ICsgKiBTVEFURV9FTkNPRElORyAtIHRoZSBlbmNvZGVyIHJlY2VpdmVzIGFuZCBwcm9jZXNzZXMg aW5wdXQgZnJhbWVzCj4gKyAqIFNUQVRFX0JVTVBJTkcgIC0gdGhlcmUgYXJlIG5vIG1vcmUgaW5w dXQgZnJhbWVzLCBob3dldmVyIHRoZSBlbmNvZGVyIHN0aWxsIHByb2Nlc3NlcyBwcmV2aW91c2x5 IHJlY2VpdmVkIGRhdGEKPiArICogU1RBVEVfU0tJUFBJTkcgLSBza2lwcGluZyBpbnB1dCBmcmFt ZXMKPiArICovCj4gK3R5cGVkZWYgZW51bSBTdGF0ZSB7Cj4gKyAgICBTVEFURV9FTkNPRElORywK PiArICAgIFNUQVRFX0JVTVBJTkcsCj4gKyAgICBTVEFURV9TS0lQUElORwo+ICt9IFN0YXRlOwo+ ICsKPiArLyoqCj4gKyAqIFRoZSBzdHJ1Y3R1cmUgc3RvcmVzIGFsbCB0aGUgc3RhdGUgYXNzb2Np YXRlZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZW5jb2Rlcgo+ICsgKiBU aGUgZmlyc3QgZmllbGQgaXMgYSBwb2ludGVyIHRvIGFuIEFWQ2xhc3Mgc3RydWN0IChAc2VlIGh0 dHBzOi8vZmZtcGVnLm9yZy9kb3h5Z2VuL3RydW5rL3N0cnVjdEFWQ2xhc3MuaHRtbCNkZXRhaWxz KS4KPiArICovCj4gK3R5cGVkZWYgc3RydWN0IFhldmVDb250ZXh0IHsKPiArICAgIGNvbnN0IEFW Q2xhc3MgKmNsYXNzOwo+ICsKPiArICAgIFhFVkUgaWQ7ICAgICAgICAvLyBYRVZFIGluc3RhbmNl IGlkZW50aWZpZXIKPiArICAgIFhFVkVfQ0RTQyBjZHNjOyAvLyBjb2RpbmcgcGFyYW1ldGVycyBp LmUgcHJvZmlsZSwgd2lkdGggJiBoZWlnaHQgb2YgaW5wdXQgZnJhbWUsIG51bSBvZiB0aGVyYWRz LCBmcmFtZSByYXRlIC4uLgo+ICsgICAgWEVWRV9CSVRCIGJpdGI7IC8vIGJpdHN0cmVhbSBidWZm ZXIgKG91dHB1dCkKPiArICAgIFhFVkVfU1RBVCBzdGF0OyAvLyBlbmNvZGluZyBzdGF0dXMgKG91 dHB1dCkKPiArICAgIFhFVkVfSU1HQiBpbWdiOyAvLyBpbWFnZSBidWZmZXIgKGlucHV0KQo+ICsK PiArICAgIFN0YXRlIHN0YXRlOyAvLyBlbmNvZGVyIHN0YXRlIChza2lwcGluZywgZW5jb2Rpbmcs IGJ1bXBpbmcpCj4gKwo+ICsgICAgaW50IGVuY29kX2ZyYW1lczsgICAvLyBudW0gb2YgZW5jb2Rl ZCBmcmFtZXMKPiArICAgIGRvdWJsZSBieXRlc190b3RhbDsgLy8gZW5jb2RlZCBiaXRzdHJlYW0g Ynl0ZSBzaXplCj4gKyAgICBkb3VibGUgYml0cmF0ZTsgICAgIC8vIGJpdHMgcGVyIHNlY29uZAo+ ICsgICAgaW50IHBhY2tldF9jb3VudDsgICAvLyBudW0gb2YgcGFja2V0cyBjcmVhdGVkIGJ5IGVu Y29kZXIKPiArCj4gKyAgICAvLyBDaHJvbWEgc3Vic2FtcGxpbmcKPiArICAgIGludCB3aWR0aF9s dW1hOwo+ICsgICAgaW50IGhlaWdodF9sdW1hOwo+ICsgICAgaW50IHdpZHRoX2Nocm9tYTsKPiAr ICAgIGludCBoZWlnaHRfY2hyb21hOwo+ICsKPiArICAgIGludCBwcm9maWxlX2lkOyAgLy8gZW5j b2RlciBwcm9maWxlIChtYWluLCBiYXNlbGluZSkKPiArICAgIGludCBwcmVzZXRfaWQ7ICAgLy8g cHJlc2V0IG9mIHhldmUgKCBmYXN0LCBtZWRpdW0sIHNsb3csIHBsYWNlYm8pCj4gKyAgICBpbnQg dHVuZV9pZDsgICAgIC8vIHR1bmUgb2YgeGV2ZSAocHNuciwgemVyb2xhdGVuY3kpCj4gKyAgICBp bnQgaW5wdXRfZGVwdGg7IC8vIGlucHV0IGJpdC1kZXB0aDogOGJpdCwgMTBiaXQKPiArICAgIGlu dCBoYXNoOwo+ICsKPiArICAgIC8qIHZhcmlhYmxlcyBmb3IgaW5wdXQgcGFyYW1ldGVyICovCj4g KyAgICBjaGFyICogb3BfcHJlc2V0Owo+ICsgICAgY2hhciAqIG9wX3R1bmU7Cj4gKyAgICBpbnQg ICAgb3BfcXA7Cj4gKyAgICBpbnQgICAgb3BfY3JmOwo+ICsKPiArICAgIC8vIGNvbmZpZ3VyYXRp b24gcGFyYW1ldGVycwo+ICsgICAgLy8geGV2ZSBjb25maWd1cmF0aW9uIHJlYWQgZnJvbSBhIDot c2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMKPiArICAgIEFWRGljdGlvbmFy eSAqeGV2ZV9wYXJhbXM7Cj4gK30gWGV2ZUNvbnRleHQ7Cj4gKwo+ICsvKioKPiArICogR2V0cyBY ZXZlIGVuY29kZXIgcHJlLWRlZmluZWQgcHJvZmlsZQo+ICsgKgo+ICsgKiBAcGFyYW0gcHJvZmls ZSBzdHJpbmcgZGVzY3JpYmluZyBYZXZlIGVuY29kZXIgcHJvZmlsZSAoYmFzZWxpbmUsIG1haW4p Cj4gKyAqIEByZXR1cm4gWEVWRSBwcmUtZGVmaW5lZCBwcm9maWxlIG9uIHN1Y2Nlc3MsIG5lZ2F0 aXZlIHZhbHVlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQgZ2V0X3Byb2ZpbGVfaWQo Y29uc3QgY2hhciAqIHByb2ZpbGUpCj4gK3sKPiArICAgIGlmICghc3RyY21wKHByb2ZpbGUsICJi YXNlbGluZSIpKSB7Cj4gKyAgICAgICAgcmV0dXJuIFhFVkVfUFJPRklMRV9CQVNFTElORTsKPiAr ICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwcm9maWxlLCAibWFpbiIpKSB7Cj4gKyAgICAgICAgcmV0 dXJuIFhFVkVfUFJPRklMRV9NQUlOOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICByZXR1cm4g LTE7Cj4gKyAgICB9Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBHZXRzIFhldmUgcHJlLWRlZmluZWQg cHJlc2V0Cj4gKyAqCj4gKyAqIEBwYXJhbSBwcmVzZXQgc3RyaW5nIGRlc2NyaWJpbmcgWGV2ZSBl bmNvZGVyIHByZXNldCAoZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvICkKPiArICogQHJldHVy biBYRVZFIHByZS1kZWZpbmVkIHByb2ZpbGUgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24g ZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIGludCBnZXRfcHJlc2V0X2lkKGNvbnN0IGNoYXIgKiBw cmVzZXQpCj4gK3sKPiArICAgIGlmKCghc3RyY21wKHByZXNldCwgImZhc3QiKSkpIHsKPiArICAg ICAgICByZXR1cm4gWEVWRV9QUkVTRVRfRkFTVDsKPiArICAgIH0gZWxzZSBpZiAoIXN0cmNtcChw cmVzZXQsICJtZWRpdW0iKSkgewo+ICsgICAgICAgIHJldHVybiBYRVZFX1BSRVNFVF9NRURJVU07 Cj4gKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAocHJlc2V0LCAic2xvdyIpKSB7Cj4gKyAgICAgICAg cmV0dXJuIFhFVkVfUFJFU0VUX1NMT1c7Cj4gKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAocHJlc2V0 LCAicGxhY2VibyIpKSB7Cj4gKyAgICAgICAgcmV0dXJuIFhFVkVfUFJFU0VUX1BMQUNFQk87Cj4g KyAgICB9IGVsc2Ugewo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArfQo+ICsKPiAr LyoqCj4gKyAqIEdldHMgWGV2ZSBwcmUtZGVmaW5lZCB0dW5lIGlkCj4gKyAqCj4gKyAqIEBwYXJh bSBwcmVzZXQgc3RyaW5nIGRlc2NyaWJpbmcgWGV2ZSBlbmNvZGVyIHByZXNldCAoZmFzdCwgbWVk aXVtLCBzbG93LCBwbGFjZWJvICkKPiArICogQHJldHVybiBYRVZFIHByZS1kZWZpbmVkIHByb2Zp bGUgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3RhdGlj IGludCBnZXRfdHVuZV9pZChjb25zdCBjaGFyICogdHVuZSkKPiArewo+ICsgICAgaWYoKCFzdHJj bXAodHVuZSwgInBzbnIiKSkpIHsKPiArICAgICAgICByZXR1cm4gWEVWRV9UVU5FX1BTTlI7Cj4g KyAgICB9IGVsc2UgaWYgKCFzdHJjbXAodHVuZSwgInplcm9sYXRlbmN5IikpIHsKPiArICAgICAg ICByZXR1cm4gWEVWRV9UVU5FX1pFUk9MQVRFTkNZOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAg ICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQga2Jwc19zdHJfdG9f aW50KGNoYXIgKnN0cikKPiArewo+ICsgICAgaW50IGticHMgPSAwOwo+ICsgICAgaWYgKHN0cmNo cihzdHIsICdLJykgfHwgc3RyY2hyKHN0ciwgJ2snKSkgewo+ICsgICAgICAgIGNoYXIgKnRtcCA9 IHN0cnRvayhzdHIsICJLayAiKTsKPiArICAgICAgICBrYnBzID0gKGludCkoYXRvZih0bXApKTsK PiArICAgIH0gZWxzZSBpZiAoc3RyY2hyKHN0ciwgJ00nKSB8fCBzdHJjaHIoc3RyLCAnbScpKSB7 Cj4gKyAgICAgICAgY2hhciAqdG1wID0gc3RydG9rKHN0ciwgIk1tICIpOwo+ICsgICAgICAgIGti cHMgPSAoaW50KShhdG9mKHRtcCkgKiAxMDAwKTsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAg a2JwcyA9IGF0b2koc3RyKTsKPiArICAgIH0KPiArICAgIHJldHVybiBrYnBzOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogUGFyc2UgOi1zZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVy cwo+ICsgKgo+ICsgKiBAcGFyYW0ga2V5Cj4gKyAqIEBwYXJhbSB2YWx1ZQo+ICsgKiBAcGFyYW0g eGUgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHRoYXQgc3RvcmVzIGFsbCB0aGUgc3RhdGUgYXNz b2NpYXRlZCB3aXRoCj4gKyAqICAgICAgICAgICB0aGUgaW5zdGFuY2Ugb2YgWGV2ZSBNUEVHLTUg RVZDIGVuY29kZXIKPiArICogQHBhcmFtIHBhcmFtIGNvZGluZyBwYXJhbWV0ZXJzCj4gKyAqCj4g KyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCj4gKyAq Lwo+ICtzdGF0aWMgaW50IHBhcnNlX3hldmVfcGFyYW1zKGNvbnN0IGNoYXIqIGtleSwgY29uc3Qg Y2hhciogdmFsdWUsIFhldmVDb250ZXh0KiB4ZSwgWEVWRV9QQVJBTSogcGFyYW0pCj4gK3sKPiAr ICAgIGlmKCFrZXkpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSXZh bGlkIGFyZ3VtZW50OiBrZXkgc3RyaW5nIGlzIE5VTExcbiIpOwo+ICsgICAgICAgIHJldHVybiBY RVZFX1BBUkFNX0JBRF9WQUxVRTsKPiArICAgIH0KPiArICAgIGlmKCF2YWx1ZSkgewo+ICsgICAg ICAgIGlmIChzdHJjbXAoa2V5LCAiaGFzaCIpID09IDApIHsKPiArICAgICAgICAgICAgeGUtPmhh c2ggPSAxOwo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJlbWJlZGRp bmcgc2lnbmF0dXJlIGlzIGVuYWJsZWRcbiIpOwo+ICsgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJdmFsaWQgYXJndW1lbnQ6IHZhbHVl IHN0cmluZyBpcyBOVUxMXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFE X1ZBTFVFOwo+ICsgICAgICAgIH0KPiArICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInZidi1i dWZzaXplIikgPT0gMCApIHsKPiArICAgICAgICBwYXJhbS0+dmJ2X2J1ZnNpemUgPSBrYnBzX3N0 cl90b19pbnQoKGNoYXIqKXZhbHVlKTsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lO Rk8sICJWQlYgYnVmZmVyIHNpemU6ICVka2JpdHNcbiIsIHBhcmFtLT52YnZfYnVmc2l6ZSk7Cj4g KyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJyYy10eXBlIikgPT0gMCApIHsKPiArICAgICAg ICBpbnQgcmNfdHlwZSA9IGF0b2kodmFsdWUpOwo+ICsgICAgICAgIGlmKHJjX3R5cGUgPCAwIHx8 IHJjX3R5cGUgPiAyKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJSYXRlIGNvbnRyb2wgdHlwZSBbIDAocmNfb2ZmKSAvIDEoQ0JSKSBdIGJhZCB2YWx1ZTogJWRc biIsIHJjX3R5cGUpOwo+ICsgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7 Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHBhcmFtLT5yY190eXBlID0gcmNfdHlwZTsKPiArICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJSYXRlIGNvbnRyb2wgdHlwZSBbIDAocmNf b2ZmKSAvIDEoQ0JSKSBdIDogJWRcbiIsIHJjX3R5cGUpOwo+ICsgICAgfSBlbHNlIGlmIChzdHJj bXAoa2V5LCAiYmZyYW1lcyIpID09IDAgKSB7Cj4gKyAgICAgICAgaW50IGJmcmFtZXMgPSBhdG9p KHZhbHVlKTsKPiArICAgICAgICBpZihiZnJhbWVzIDwgMCkgewo+ICsgICAgICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiYmZyYW1lczogYmFkIHZhbHVlOiAlZFxuIiwgYmZyYW1l cyk7Cj4gKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsKPiArICAgICAg ICB9Cj4gKyAgICAgICAgcGFyYW0tPmJmcmFtZXMgPSBiZnJhbWVzOwo+ICsgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfSU5GTywgImJmcmFtZXMgOiAlZFxuIiwgYmZyYW1lcyk7Cj4gKyAgICB9 IGVsc2UgaWYgKHN0cmNtcChrZXksICJwcm9maWxlIikgPT0gMCApIHsKPiArICAgICAgICBjb25z dCBjaGFyKiBwcm9maWxlID0gdmFsdWU7Cj4gKyAgICAgICAgaW50IHByb2ZpbGVfaWQ7Cj4gKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAicHJvZmlsZSAoYmFzZWxpbmUsIG1haW4p OiAlc1xuIiwgcHJvZmlsZSk7Cj4gKyAgICAgICAgcHJvZmlsZV9pZCA9IGdldF9wcm9maWxlX2lk KHByb2ZpbGUpOwo+ICsgICAgICAgIGlmIChwcm9maWxlX2lkIDwgMCkgewo+ICsgICAgICAgICAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB4ZXZlIHBhcmFtOiBwcm9maWxl KCVzKVxuIiwgcHJvZmlsZSk7Cj4gKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9W QUxVRTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgeGUtPnByb2ZpbGVfaWQgPSBwcm9maWxlX2lk Owo+ICsgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAicHJlc2V0IikgPT0gMCApIHsKPiArICAg ICAgICBjb25zdCBjaGFyKiBwcmVzZXQgPSB2YWx1ZTsKPiArICAgICAgICBpbnQgcHJlc2V0X2lk Owo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlByZXNldCBvZiB4ZXZlIChm YXN0LCBtZWRpdW0sIHNsb3csIHBsYWNlYm8pOiAlc1xuIiwgcHJlc2V0KTsKPiArICAgICAgICBw cmVzZXRfaWQgPSBnZXRfcHJlc2V0X2lkKHByZXNldCk7Cj4gKyAgICAgICAgaWYoIHByZXNldF9p ZCA8IDApIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFs aWQgeGV2ZSBwYXJhbTogcHJlc2V0KCVzKVxuIiwgcHJlc2V0KTsKPiArICAgICAgICAgICAgcmV0 dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOwo+ICsgICAgICAgIH0KPiArICAgICAgICB4ZS0+cHJl c2V0X2lkID0gcHJlc2V0X2lkOwo+ICsgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAidHVuZSIp ID09IDAgKSB7Cj4gKyAgICAgICAgY29uc3QgY2hhciogdHVuZSA9IHZhbHVlOwo+ICsgICAgICAg IGludCB0dW5lX2lkOwo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlR1bmUg b2YgeGV2ZSAocHNuciwgemVyb2xhdGVuY3kpOiAlc1xuIiwgdHVuZSk7Cj4gKyAgICAgICAgdHVu ZV9pZD0gZ2V0X3R1bmVfaWQodHVuZSk7Cj4gKyAgICAgICAgaWYoIHR1bmVfaWQgPCAwKSB7Cj4g KyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHhldmUgcGFy YW06IHR1bmUoJXMpXG4iLCB0dW5lKTsKPiArICAgICAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1f QkFEX1ZBTFVFOwo+ICsgICAgICAgIH0KPiArICAgICAgICB4ZS0+dHVuZV9pZCA9IHR1bmVfaWQ7 Cj4gKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJiaXRyYXRlIikgPT0gMCApIHsKPiArICAg ICAgICBwYXJhbS0+Yml0cmF0ZSA9IGticHNfc3RyX3RvX2ludCgoY2hhciAqKXZhbHVlKTsKPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJCaXRyYXRlID0gJWRrYnBzXG4iLCBw YXJhbS0+Yml0cmF0ZSk7Cj4gKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJxIikgPT0gMCB8 fCBzdHJjbXAoa2V5LCAicXAiKSA9PSAwKSB7Cj4gKyAgICAgICAgaW50IHFwID0gYXRvaSh2YWx1 ZSk7Cj4gKyAgICAgICAgaWYocXAgPCAwIHx8IHFwID4gNTEpIHsKPiArICAgICAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgUVAgdmFsdWUgKDB+NTEpIDolZFxuIiwg cXApOwo+ICsgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7Cj4gKyAgICAg ICAgfQo+ICsgICAgICAgIHBhcmFtLT5xcCA9IHFwOwo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfSU5GTywgIlFQIHZhbHVlICgwfjUxKTogJWRcbiIsIHBhcmFtLT5xcCk7Cj4gKyAgICB9 IGVsc2Ugewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJVbmtub3duIHhl dmUgY29kZWMgb3B0aW9uOiAlc1xuIiwga2V5KTsKPiArICAgICAgICByZXR1cm4gWEVWRV9QQVJB TV9CQURfTkFNRTsKPiArICAgIH0KPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogQ29udmVydCBmZm1wZWcgcGl4ZWwgZm9ybWF0IChBVlBpeGVsRm9ybWF0KSB0byBYRVZFIHBy ZS1kZWZpbmVkIGNvbG9yIGZvcm1hdAo+ICsgKgo+ICsgKiBAcGFyYW1baW5dICBweF9mbXQgcGl4 ZWwgZm9ybWF0IChAc2VlIGh0dHBzOi8vZmZtcGVnLm9yZy9kb3h5Z2VuL3RydW5rL3BpeGZtdF84 aC5odG1sI2E5YThlMzM1Y2YzYmU0NzIwNDJiYzlmMGNmODBjZDRjNSkKPiArICogQHBhcmFtW291 dF0gY29sb3JfZm9ybWF0IFhFVkUgcHJlLWRlZmluZWQgY29sb3IgZm9ybWF0IChAc2VlIHhldmUu aCkKPiArICogQHBhcmFtW291dF0gYml0X2RlcHRoIGJpdCBkZXB0aAo+ICsgKgo+ICsgKiBAcmV0 dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3Rh dGljIGludCBnZXRfcGl4X2ZtdChlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50ICpjb2xv cl9mb3JtYXQsIGludCAqYml0X2RlcHRoKQo+ICt7Cj4gKyAgICBzd2l0Y2ggKHBpeF9mbXQpIHsK PiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQOgo+ICsgICAgICAgICpjb2xvcl9mb3JtYXQg PSBYRVZFX0NGX1lDQkNSNDIwOwo+ICsgICAgICAgICpiaXRfZGVwdGggPSA4Owo+ICsgICAgICAg IGJyZWFrOwo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlA6Cj4gKyAgICAgICAgKmNvbG9y X2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjI7Cj4gKyAgICAgICAgKmJpdF9kZXB0aCA9IDg7Cj4g KyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDoKPiArICAgICAg ICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQ0NDsKPiArICAgICAgICAqYml0X2RlcHRo ID0gODsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQMTA6 Cj4gKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjA7Cj4gKyAgICAgICAg KmJpdF9kZXB0aCA9IDEwOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBBVl9QSVhfRk1U X1lVVjQyMlAxMDoKPiArICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQyMjsK PiArICAgICAgICAqYml0X2RlcHRoID0gMTA7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNl IEFWX1BJWF9GTVRfWVVWNDQ0UDEwOgo+ICsgICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NG X1lDQkNSNDQ0Owo+ICsgICAgICAgICpiaXRfZGVwdGggPSAxMDsKPiArICAgICAgICBicmVhazsK PiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfVU5LTk9X TjsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB2YXJpYWJs ZSBvZiB0eXBlIFhFVkVfQ0RTQy4KPiArICogWEVWRV9DRFNDIGNvbnRhaW5zIGFsbCBlbmNvZGVy IHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2UuCj4g KyAqCj4gKyAqIFRoZSBmaWVsZCB2YWx1ZXMgb2YgdGhlIFhFVkVfQ0RTQyBzdHJ1Y3R1cmUgYXJl IHBvcHVsYXRlZCBiYXNlZCBvbjoKPiArICogLSB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCB2YWx1 ZXMgb2YgdGhlIEF2Q29kZWNDb25ldHh0IHN0cnVjdHVyZSwKPiArICogLSB0aGUgeGV2ZSBlbmNv ZGVyIHNwZWNpZmljIG9wdGlvbiB2YWx1ZXMsCj4gKyAqICAgKHRoZSBmdWxsIGxpc3Qgb2Ygb3B0 aW9ucyBhdmFpbGFibGUgZm9yIHhldmUgZW5jb2RlciBpcyBkaXNwbGF5ZWQgYWZ0ZXIgZXhlY3V0 aW5nIHRoZSBjb21tYW5kIC4vZmZtcGVnIC0taGVscCBlbmNvZGVyID0gbGlieGV2ZSkKPiArICog LSBhbmQgdGhlIHhldmUgZW5jb2RlciBvcHRpb25zIHNwZWNpZmllZCBhcyBhIGxpc3Qgb2Yga2V5 IHZhbHVlIHBhaXJzIGZvbGxvd2luZyB4ZXZlLXBhcmFtcyBvcHRpb24KPiArICoKPiArICogT3Jk ZXIgb2YgaW5wdXQgcHJvY2Vzc2luZyBhbmQgcG9wdWxhdGluZyB0aGUgWEVWRV9DRFNDIHN0cnVj dHVyZQo+ICsgKiAxLiBmaXJzdCwgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9mIHRoZSBBVkNv ZGVjQ29udGV4dCBzdHJ1Y3R1cmUgYXJlIHByb2Nlc3NlZCwgKGkuZSAtcGl4X2ZtdCB5dXY0MjBw IC1zOnYgMTkyMHgxMDgwIC1yIDMwIC1wcm9maWxlOnYgMCkKPiArICogMi4gdGhlbiB4ZXZlLXNw ZWNpZmljIG9wdGlvbnMgYWRkZWQgYXMgQVZPcHRpb24gdG8gdGhlIHhldmUgQVZDb2RlYyBpbXBs ZW1lbnRhdGlvbiAoaS5lIC10aHJlYWRzX2NudCAzIC1wcmVzZXQgMCkKPiArICogMy4gZmluYWxs eSwgdGhlIG9wdGlvbnMgc3BlY2lmaWVkIGFmdGVyIHRoZSB4ZXZlLXBhcmFtcyBvcHRpb24gYXMg dGhlIHBhcmFtZXRlciBsaXN0IG9mIHR5cGUga2V5IHZhbHVlIGFyZSBwcm9jZXNzZWQgKGkuZSAt eGV2ZS1wYXJhbXMgIm09MjpxPTE3IikKPiArICoKPiArICogVGhlcmUgYXJlIG9wdGlvbnMgdGhh dCBjYW4gYmUgc2V0IGluIGRpZmZlcmVudCB3YXlzLiBJbiB0aGlzIGNhc2UsIHBsZWFzZSBmb2xs b3cgdGhlIGFib3ZlLW1lbnRpb25lZCBvcmRlciBvZiBwcm9jZXNzaW5nLgo+ICsgKiBUaGUgbW9z dCByZWNlbnQgYXNzaWdubWVudHMgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyB2YWx1ZXMuCj4gKyAq Cj4gKyAqIEBwYXJhbSBjdHggY29kZWMgY29udGV4dAo+ICsgKiBAcGFyYW0gY2RzYyBjb250YWlu cyBhbGwgZW5jb2RlciBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9y ZSBpdHMgdXNlLgo+ICsgKgo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW50IGdldF9jb25mKGNvbnN0IEFW Q29kZWNDb250ZXh0ICpjdHgsIFhFVkVfQ0RTQyAqY2RzYykKPiArewo+ICsgICAgWEVWRV9QQVJB TSAqIHBhcmFtID0gTlVMTDsKPiArICAgIFhldmVDb250ZXh0ICp4ZSA9IE5VTEw7Cj4gKyAgICBp bnQgY29sb3JfZm9ybWF0Owo+ICsgICAgaW50IGNwdV9jb3VudCA9IGF2X2NwdV9jb3VudCgpOwo+ ICsgICAgaW50IHJldDsKPiArCj4gKyAgICB4ZSA9IGN0eC0+cHJpdl9kYXRhOwo+ICsgICAgcGFy YW0gPSAmY2RzYy0+cGFyYW07Cj4gKwo+ICsgICAgLyogc2V0IGRlZnVhbHQgdmFsdWUgaW4gcHJp dl9kYXRhICovCj4gKyAgICBtZW1zZXQoY2RzYywgMCwgc2l6ZW9mKFhFVkVfQ0RTQykpOwo+ICsg ICAgeGUtPmhhc2ggPSAwOwo+ICsKPiArICAgIC8qIHNldCBkZWZhdWx0IHBhcmFtZXRlcnMgKi8K PiArICAgIHJldCA9IHhldmVfcGFyYW1fZGVmYXVsdChwYXJhbSk7Cj4gKyAgICBpZiAoWEVWRV9G QUlMRUQocmV0KSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJjYW5u b3Qgc2V0X2RlZmF1bHQgcGFyYW1ldGVyXG4iKTsKPiArICAgICAgICBnb3RvIEVSUjsKPiArICAg IH0KPiArCj4gKyAgICAvKiByZWFkIG9wdGlvbnMgZnJvbSBBVkNvZGVjQ29udGV4dCAgKi8KPiAr ICAgIGlmKGN0eC0+d2lkdGggPiAwKSB7Cj4gKyAgICAgICAgcGFyYW0tPncgPSBjdHgtPndpZHRo Owo+ICsgICAgICAgIHhlLT53aWR0aF9sdW1hID0gY3R4LT53aWR0aDsKPiArICAgIH0KPiArCj4g KyAgICBpZihjdHgtPmhlaWdodCA+IDApIHsKPiArICAgICAgICBwYXJhbS0+aCA9IGN0eC0+aGVp Z2h0Owo+ICsgICAgICAgIHhlLT5oZWlnaHRfbHVtYSA9IGN0eC0+aGVpZ2h0Owo+ICsgICAgfQo+ ICsKPiArICAgIGlmKGN0eC0+ZnJhbWVyYXRlLm51bSA+IDApIHsKPiArICAgICAgICAvKiBAdG9k bzogZnBzIGNhbiBiZSBmbG9hdCBudW1iZXIsIGJ1dCB4ZXZlIEFQSSBkb2Vzbid0IHN1cHBvcnQg aXQgKi8KPiArICAgICAgICBwYXJhbS0+ZnBzID0gKGludCkoKChmbG9hdCljdHgtPmZyYW1lcmF0 ZS5udW0gLyBjdHgtPmZyYW1lcmF0ZS5kZW4pICsgMC41KTsKPiArICAgIH0KPiArCj4gKyAgICBp ZihjdHgtPmdvcF9zaXplID49IDApIHsgLyoga2V5LWZyYW1lIGludGVydmFsICovCj4gKyAgICAg ICAgcGFyYW0tPmtleWludCA9IGN0eC0+Z29wX3NpemU7IC8vIDA6IG9ubHkgb25lIEktZnJhbWUg YXQgdGhlIGZpcnN0IHRpbWU7IDE6IGV2ZXJ5IGZyYW1lIGlzIGNvZGVkIGluIEktZnJhbWUKPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJHT1Agc2l6ZSAoa2V5LWZyYW1lIGlu dGVydmFsKTogJWRcbiIsIGN0eC0+Z29wX3NpemUpOwo+ICsgICAgfQo+ICsgICAgaWYgKGN0eC0+ bWF4X2JfZnJhbWVzID09IDAgfHwgY3R4LT5tYXhfYl9mcmFtZXMgPT0gMSB8fCBjdHgtPm1heF9i X2ZyYW1lcyA9PSAzIHx8Cj4gKyAgICAgICAgICAgIGN0eC0+bWF4X2JfZnJhbWVzID09IDcgfHwg Y3R4LT5tYXhfYl9mcmFtZXMgPT0gMTUpIHsgLyogbnVtYmVyIG9mIGItZnJhbWUgKi8KPiArICAg ICAgICBwYXJhbS0+YmZyYW1lcyA9IGN0eC0+bWF4X2JfZnJhbWVzOwo+ICsgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfSU5GTywgIk51bWJlciBvZiBtYXggYi1mcmFtZXM6ICVkXG4iLCBjdHgt Pm1heF9iX2ZyYW1lcyk7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfRVJST1IsICJJbmNvcnJlY3QgdmFsdWUgZm9yIG1heGltdW0gbnVtYmVyIG9mIEIgZnJh bWVzOiAoJWQpIFxuIgo+ICsgICAgICAgICAgICAgICAiQWNjZXB0YWJsZSB2YWx1ZXMgZm9yIGJm IG9wdGlvbiAobWF4aW11bSBudW1iZXIgb2YgQiBmcmFtZXMpIGFyZSAwLDEsMyw3IG9yIDE1XG4i LCBjdHgtPm1heF9iX2ZyYW1lcyk7Cj4gKyAgICAgICAgZ290byBFUlI7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgaWYgKGN0eC0+bGV2ZWwgPj0gMCkgewo+ICsgICAgICAgIHBhcmFtLT5sZXZlbF9pZGMg PSBjdHgtPmxldmVsOwo+ICsgICAgfQo+ICsgICAgcmV0ID0gZ2V0X3BpeF9mbXQoY3R4LT5waXhf Zm10LCAmY29sb3JfZm9ybWF0LCAmeGUtPmlucHV0X2RlcHRoKTsKPiArICAgIGlmIChyZXQhPTAp IHsKPiArICAgICAgICBhdl9sb2coKEFWQ29kZWNDb250ZXh0KiljdHgsIEFWX0xPR19FUlJPUiwg IlVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC5cbiIpOwo+ICsgICAgICAgIGdvdG8gRVJSOwo+ICsg ICAgfQo+ICsgICAgcGFyYW0tPmNzID0gWEVWRV9DU19TRVQoY29sb3JfZm9ybWF0LCB4ZS0+aW5w dXRfZGVwdGgsIDApOwo+ICsKPiArICAgIGlmIChjdHgtPnJjX2J1ZmZlcl9zaXplID4gMCkgewo+ ICsgICAgICAgIHBhcmFtLT52YnZfYnVmc2l6ZSA9IChpbnQpKGN0eC0+cmNfYnVmZmVyX3NpemUv IDEwMDApOwo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlZCViBidWYgc2l6 ZTogJWRcbiIsIGN0eC0+cmNfYnVmZmVyX3NpemUpOwo+ICsgICAgfQo+ICsgICAgaWYgKGN0eC0+ Yml0X3JhdGUgPiAwKSB7Cj4gKyAgICAgICAgaWYgKGN0eC0+Yml0X3JhdGUgLyAxMDAwID4gSU5U X01BWCB8fCBjdHgtPnJjX21heF9yYXRlIC8gMTAwMCA+IElOVF9NQVgpIHsKPiArICAgICAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIm5vdCBzdXBwb3J0ZWQgYml0cmF0ZSBiaXRf cmF0ZSBhbmQgcmNfbWF4X3JhdGUgPiAlZDAwMFxuIiwgSU5UX01BWCk7Cj4gKyAgICAgICAgICAg IGdvdG8gRVJSOwo+ICsgICAgICAgIH0KPiArICAgICAgICBwYXJhbS0+Yml0cmF0ZSA9IChpbnQp KGN0eC0+Yml0X3JhdGUgLyAxMDAwKTsKPiArICAgICAgICBwYXJhbS0+cmNfdHlwZSA9IFhFVkVf UkNfQUJSOwo+ICsgICAgfQo+ICsgICAgaWYgKHhlLT5vcF9jcmYgPj0gMCkgewo+ICsgICAgICAg IHBhcmFtLT5jcmYgPSB4ZS0+b3BfY3JmOwo+ICsgICAgICAgIHBhcmFtLT5yY190eXBlID0gWEVW RV9SQ19DUkY7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYoY3R4LT50aHJlYWRfY291bnQgPD0gMCkg ewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJjcHVfY291bnQ6ICVkXG4i LCBjcHVfY291bnQpOwo+ICsgICAgICAgIHBhcmFtLT50aHJlYWRzID0gKGNwdV9jb3VudCA8IFhF VkVfTUFYX1RIUkVBRFMpPyBjcHVfY291bnQ6IFhFVkVfTUFYX1RIUkVBRFM7Cj4gKyAgICB9IGVs c2UgaWYoY3R4LT50aHJlYWRfY291bnQgPiBYRVZFX01BWF9USFJFQURTKSB7Cj4gKyAgICAgICAg cGFyYW0tPnRocmVhZHMgPSBYRVZFX01BWF9USFJFQURTOwo+ICsgICAgfSBlbHNlIHsKPiArICAg ICAgICBwYXJhbS0+dGhyZWFkcyA9IGN0eC0+dGhyZWFkX2NvdW50Owo+ICsgICAgfQo+ICsgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAicGFyYW0tPnRocmVhZHM6ICVkXG4iLCBwYXJhbS0+ dGhyZWFkcyk7Cj4gKwo+ICsgICAgY2RzYy0+cGFyYW0uY3MgPSBYRVZFX0NTX1NFVChjb2xvcl9m b3JtYXQsIHBhcmFtLT5jb2RlY19iaXRfZGVwdGgsIDApOwo+ICsgICAgY2RzYy0+bWF4X2JzX2J1 Zl9zaXplID0gTUFYX0JTX0JVRjsKPiArCj4gKyAgICBpZihjdHgtPnByb2ZpbGUgPT0gRkZfUFJP RklMRV9FVkNfQkFTRUxJTkUpIHsKPiArICAgICAgICB4ZS0+cHJvZmlsZV9pZCA9IFhFVkVfUFJP RklMRV9CQVNFTElORTsKPiArICAgIH0gZWxzZSBpZihjdHgtPnByb2ZpbGUgPT0gRkZfUFJPRklM RV9FVkNfTUFJTikgewo+ICsgICAgICAgIHhlLT5wcm9maWxlX2lkID0gWEVWRV9QUk9GSUxFX01B SU47Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJVbmtub3duIGVuY29kZXIgcHJvZmlsZSAoJWQpXG4iCj4gKyAgICAgICAgICAgICAgICJBY2Nl cHRhYmxlIHZhbHVlcyBmb3IgcHJvZmlsZSBvcHRpb24gYXJlIDAgYW5kIDEgKDA6IGJhc2VsaW5l IHByb2ZpbGU7IDE6IG1haW4gcHJvZmlsZSlcbiIsIGN0eC0+cHJvZmlsZSk7Cj4gKyAgICAgICAg Z290byBFUlI7Cj4gKyAgICB9Cj4gKyAgICBpZiAoeGUtPm9wX3ByZXNldCkgewo+ICsgICAgICAg IHhlLT5wcmVzZXRfaWQgPSBnZXRfcHJlc2V0X2lkKHhlLT5vcF9wcmVzZXQpOwo+ICsgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlByZXNldCAgOiAlc1xuIiwgeGUtPm9wX3ByZXNl dCk7Cj4gKyAgICB9Cj4gKyAgICBpZiAoeGUtPm9wX3R1bmUpIHsKPiArICAgICAgICB4ZS0+dHVu ZV9pZCA9IGdldF90dW5lX2lkKHhlLT5vcF90dW5lKTsKPiArICAgICAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0lORk8sICJUdW5lICAgIDogJXNcbiIsIHhlLT5vcF90dW5lKTsKPiArICAgIH0KPiAr ICAgIAo+ICsgICAgcmV0ID0geGV2ZV9wYXJhbV9wcHQocGFyYW0sIHhlLT5wcm9maWxlX2lkLCB4 ZS0+cHJlc2V0X2lkLCB4ZS0+dHVuZV9pZCk7Cj4gKyAgICBpZiAoWEVWRV9GQUlMRUQocmV0KSkg ewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJjYW5ub3Qgc2V0IHByb2Zp bGUoJWQpLCBwcmVzZXQoJWQpLCB0dW5lKCVkKVxuIiwgeGUtPnByb2ZpbGVfaWQsIHhlLT5wcmVz ZXRfaWQsIHhlLT50dW5lX2lkKTsKPiArICAgICAgICBnb3RvIEVSUjsKPiArICAgIH0KPiArCj4g KyAgICAvKiBwYXJzZSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzIGFu ZCBzZXQgdmFsdWVzIGZvciBjcmVhdGVkIGRlc2NyaXB0b3IgKFhFVkVfQ0RTQykgKi8KPiArICAg IHsKPiArICAgICAgICBBVkRpY3Rpb25hcnlFbnRyeSAqZW4gPSBOVUxMOwo+ICsgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIiMjIyBTdGFydCB0byBwYXJzZSB4ZXZlX3BhcmFtcyAj IyNcbiIpOwo+ICsgICAgICAgIHdoaWxlICgoZW4gPSBhdl9kaWN0X2dldCh4ZS0+eGV2ZV9wYXJh bXMsICIiLCBlbiwgQVZfRElDVF9JR05PUkVfU1VGRklYKSkpIHsKPiArICAgICAgICAgICAgaW50 IHBhcnNlX3JldCA9IHBhcnNlX3hldmVfcGFyYW1zKGVuLT5rZXksIGVuLT52YWx1ZSwgeGUsIHBh cmFtKTsKPiArCj4gKyAgICAgICAgICAgIHN3aXRjaCAocGFyc2VfcmV0KSB7Cj4gKyAgICAgICAg ICAgIGNhc2UgWEVWRV9QQVJBTV9CQURfTkFNRToKPiArICAgICAgICAgICAgICAgIGF2X2xvZygo QVZDb2RlY0NvbnRleHQqKWN0eCwgQVZfTE9HX1dBUk5JTkcsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIlVua25vd24gb3B0aW9uOiAlcy5cbiIsIGVuLT5rZXkpOwo+ICsgICAgICAgICAgICAg ICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGNhc2UgWEVWRV9QQVJBTV9CQURfVkFMVUU6Cj4gKyAg ICAgICAgICAgICAgICBhdl9sb2coKEFWQ29kZWNDb250ZXh0KiljdHgsIEFWX0xPR19XQVJOSU5H LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMuXG4i LCBlbi0+a2V5LCBlbi0+dmFsdWUpOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAg ICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAg fQo+ICsgICAgICAgIH0KPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICIjIyMg RW5kIG9mIHBhcnNpbmcgeGV2ZV9wYXJhbXMgIyMjXG4iKTsKPiArICAgIH0KPiArCj4gKyAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJSYXRlIGNvbnRyb2wgdHlwZSBbIDAoQ1FQKSAvIDEo QUJSKSAvIDIoQ1JGKSBdIDogJWRcbiIsIHBhcmFtLT5yY190eXBlKTsKPiArICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfSU5GTywgImNyZj0lZCwgYml0cmF0ZT0lZCwgdmJ2X2J1ZnNpemU9JWQsIGZw cz0lZFxuIiwgcGFyYW0tPmNyZiwgcGFyYW0tPmJpdHJhdGUsIHBhcmFtLT52YnZfYnVmc2l6ZSwg cGFyYW0tPmZwcyk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gKwo+ICtFUlI6Cj4gKyAgICByZXR1 cm4gQVZFUlJPUihFSU5WQUwpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogQ2hlY2sgY29kZWMgY29u ZmlndXJhdGlvbgo+ICsgKgo+ICsgKiBAcGFyYW0gY3R4IGNvZGVjIGNvbnRleHQKPiArICogQHBh cmFtIGNkc2MgY29udGFpbnMgYWxsIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBp bml0aWFsaXplZCBiZWZvcmUgaXRzIHVzZS4KPiArICoKPiArICogQHJldHVybiAwIG9uIHN1Y2Nl c3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIGludCBj aGVja19jb25mKEFWQ29kZWNDb250ZXh0ICpjdHgsICBYRVZFX0NEU0MgKmNkc2MpCj4gK3sKPiAr ICAgIGludCByZXQgPSAwOwo+ICsgICAgaW50IG1pbl9ibG9ja19zaXplID0gNDsKPiArICAgIGlu dCBwaWNfbTsKPiArCj4gKyAgICBpZihjZHNjLT5wYXJhbS5wcm9maWxlID09IFhFVkVfUFJPRklM RV9CQVNFTElORSkgewo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FtdnIgICAgPT0g MSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJBTVZSIGNhbm5v dCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfbW12ZCAgICA9PSAxKSB7 Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk1NVkQgY2Fubm90IGJl IG9uIGluIGJhc2UgcHJvZmlsZVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAg ICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZmZpbmUgID09IDEpIHsKPiAr ICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQWZmaW5lIGNhbm5vdCBiZSBv biBpbiBiYXNlIHByb2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAg ICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfZG12ciAgICA9PSAxKSB7Cj4gKyAg ICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkRNVlIgY2Fubm90IGJlIG9uIGlu IGJhc2UgcHJvZmlsZVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0K PiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZG12cCAgID09IDEpIHsKPiArICAgICAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQURNVlAgY2Fubm90IGJlIG9uIGluIGJh c2UgcHJvZmlsZVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiAr ICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9obXZwICAgID09IDEpIHsKPiArICAgICAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSE1WUCBjYW5ub3QgYmUgb24gaW4gYmFzZSBw cm9maWxlXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAg ICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FkZGIgICAgPT0gMSkgewo+ICsgICAgICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJBRERCIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2Zp bGVcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLnRvb2xfYWxmICAgICA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFMRiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4i KTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChj ZHNjLT5wYXJhbS50b29sX2h0ZGYgICAgPT0gMSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJIVERGIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOwo+ ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2Mt PnBhcmFtLmJ0dCAgICAgICAgICA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwgIkJUVCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsKPiArICAg ICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJh bS5zdWNvICAgICAgICAgPT0gMSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJTVUNPIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOwo+ICsgICAgICAg ICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRv b2xfZWlwZCAgICA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIkVJUEQgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7Cj4gKyAgICAgICAgICAg IHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9p cXQgICAgID09IDEpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi SVFUIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQg PSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfY21faW5p dCA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkNNX0lO SVQgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9 IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZGNjICAg ID09IDEpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQURDQyBj YW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7 Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2F0cyAgICAgPT0g MSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJBVFNfSU5UUkEg Y2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0x Owo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uaWJjX2ZsYWcgICAgID09 IDEpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSUJDIGNhbm5v dCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfcnBsICAgICA9PSAxKSB7 Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlJQTCBjYW5ub3QgYmUg b24gaW4gYmFzZSBwcm9maWxlXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAg ICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX3BvY3MgICAgPT0gMSkgewo+ICsg ICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJQT0NTIGNhbm5vdCBiZSBvbiBp biBiYXNlIHByb2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9 Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FkbXZwICAg PT0gMCAmJiBjZHNjLT5wYXJhbS50b29sX2FmZmluZSA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFGRklORSBjYW5ub3QgYmUgb24gd2hlbiBBRE1WUCBp cyBvZmZcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAg ICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRtdnAgICA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xf YW12ciAgID09IDEpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi QU1WUiBjYW5ub3QgYmUgb24gd2hlbiBBRE1WUCBpcyBvZmZcbiIpOwo+ICsgICAgICAgICAgICBy ZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRt dnAgICA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xfZG12ciAgID09IDEpIHsKPiArICAgICAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRE1WUiBjYW5ub3QgYmUgb24gd2hlbiBBRE1W UCBpcyBvZmZcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAg ICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRtdnAgICA9PSAwICYmIGNkc2MtPnBhcmFtLnRv b2xfbW12ZCAgID09IDEpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiTU1WRCBjYW5ub3QgYmUgb24gd2hlbiBBRE1WUCBpcyBvZmZcbiIpOwo+ICsgICAgICAgICAg ICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xf ZWlwZCAgICA9PSAwICYmIGNkc2MtPnBhcmFtLmliY19mbGFnICAgID09IDEpIHsKPiArICAgICAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSUJDIGNhbm5vdCBiZSBvbiB3aGVuIEVJ UEQgaXMgb2ZmXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsg ICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2lxdCAgICAgPT0gMCAmJiBjZHNjLT5wYXJhbS50 b29sX2F0cyAgICA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIkFUUyBjYW5ub3QgYmUgb24gd2hlbiBJUVQgaXMgb2ZmXG4iKTsKPiArICAgICAgICAgICAg cmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2Nt X2luaXQgPT0gMCAmJiBjZHNjLT5wYXJhbS50b29sX2FkY2MgICA9PSAxKSB7Cj4gKyAgICAgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFEQ0MgY2Fubm90IGJlIG9uIHdoZW4gQ01f SU5JVCBpcyBvZmZcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4g KyAgICB9CgpUaGVzZSBsaXN0cyBhcmUgaG9ycmlibHkgbG9uZy4gRG9lc24ndCB0aGUgZW5jb2Rl ciBlcnJvciBvdXQgaW4gY2FzZSBvZgppbnZhbGlkIHBhcmFtZXRlcnM/Cgo+ICsKPiArICAgIGlm IChjZHNjLT5wYXJhbS5idHQgPT0gMSkgewo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFt ZXdvcmtfY2JfbWF4ICYmIGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggPCA1KSB7Cj4gKyAg ICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIENvZGluZyBCbG9j ayBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gNVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9 IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2Ni X21heCA+IDcpIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1h eGltdW4gQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiA3XG4iKTsKPiAr ICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5w YXJhbS5mcmFtZXdvcmtfY2JfbWluICYmIGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4gPCAy KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNaW5pbXVtIENv ZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gMlxuIik7Cj4gKyAgICAgICAg ICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoKGNkc2MtPnBhcmFtLmZy YW1ld29ya19jYl9tYXggfHwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbikgJiYKPiArICAg ICAgICAgICAgICAgIGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4gPiBjZHNjLT5wYXJhbS5m cmFtZXdvcmtfY2JfbWF4KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJS T1IsICJNaW5pbXVtIENvZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4 aW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsg ICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2N1MTRfbWF4ID4g Nikgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biAx OjQgQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiA2XG4iKTsKPiArICAg ICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmICgoY2RzYy0+cGFy YW0uZnJhbWV3b3JrX2NiX21heCB8fCBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY3UxNF9tYXgpICYm Cj4gKyAgICAgICAgICAgICAgICBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY3UxNF9tYXggPiBjZHNj LT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfRVJST1IsICJNYXhpbXVuIDE6NCBDb2RpbmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgZ3Jl YXRlciB0aGFuIE1heGltdW0gY29kaW5nIEJsb2NrIHNpemVcbiIpOwo+ICsgICAgICAgICAgICBy ZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29y a190cmlzX21heCA+IDYpIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJP UiwgIk1heGltdW4gVHJpLXNwbGl0IEJsb2NrIHNpemUgYmUgZ3JlYXRlciB0aGFuIDZcbiIpOwo+ ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKChjZHNj LT5wYXJhbS5mcmFtZXdvcmtfdHJpc19tYXggfHwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21h eCkgJiYKPiArICAgICAgICAgICAgICAgIGNkc2MtPnBhcmFtLmZyYW1ld29ya190cmlzX21heCA+ IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXgpIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gVHJpLXNwbGl0IEJsb2NrIHNpemUgY2Fubm90IGJl IGdyZWF0ZXIgdGhhbiBNYXhpbXVtIGNvZGluZyBCbG9jayBzaXplXG4iKTsKPiArICAgICAgICAg ICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmICgoY2RzYy0+cGFyYW0uZnJh bWV3b3JrX3RyaXNfbWluIHx8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4pICYmCj4gKyAg ICAgICAgICAgICAgICBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfdHJpc19taW4gPCBjZHNjLT5wYXJh bS5mcmFtZXdvcmtfY2JfbWluICsgMikgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0VSUk9SLCAiTWF4aW11biBUcmktc3BsaXQgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgc21hbGxl ciB0aGFuIE1pbmltdW0gQ29kaW5nIEJsb2NrIHNpemUgcGx1cyB0d29cbiIpOwo+ICsgICAgICAg ICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYoY2RzYy0+cGFyYW0uZnJh bWV3b3JrX2NiX21pbikgbWluX2Jsb2NrX3NpemUgPSAxIDw8IGNkc2MtPnBhcmFtLmZyYW1ld29y a19jYl9taW47Cj4gKyAgICAgICAgZWxzZSBtaW5fYmxvY2tfc2l6ZSA9IDg7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgaWYgKGNkc2MtPnBhcmFtLnN1Y28gPT0gMSkgewo+ICsgICAgICAgIGlmIChjZHNj LT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19tYXggPiA2KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFNVQ08gc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0 aGFuIDZcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAg ICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggJiYgY2RzYy0+cGFyYW0uZnJhbWV3 b3JrX3N1Y29fbWF4ID4gY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCkgewo+ICsgICAgICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCJNYXhpbXVuIFNVQ08gc2l6ZSBjYW5ub3Qg YmUgZ3JlYXRlciB0aGFuIE1heGltdW0gY29kaW5nIEJsb2NrIHNpemVcbiIpOwo+ICsgICAgICAg ICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZy YW1ld29ya19zdWNvX21pbiA8IDQpIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgIk1pbmltdW4gU1VDTyBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gNFxuIik7 Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2Rz Yy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiAmJiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19t aW4gPCBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWluKSB7Cj4gKyAgICAgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsIk1pbmltdW4gU1VDTyBzaXplIGNhbm5vdCBiZSBzbWFsbGVy IHRoYW4gTWluaW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9 IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1 Y29fbWluID4gY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWF4KSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNaW5pbXVtIFNVQ08gc2l6ZSBjYW5ub3QgYmUg Z3JlYXRlciB0aGFuIE1heGltdW0gU1VDTyBzaXplXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0g LTE7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHBpY19tID0gKDggPiBtaW5fYmxv Y2tfc2l6ZSkgPyBtaW5fYmxvY2tfc2l6ZSA6IDg7Cj4gKyAgICBpZiAoKGNkc2MtPnBhcmFtLncg JiAocGljX20gLSAxKSkgIT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJS T1IsICJDdXJyZW50IGVuY29kZXIgZG9lcyBub3Qgc3VwcG9ydCBwaWN0dXJlIHdpZHRoLCBub3Qg bXVsdGlwbGUgb2YgbWF4KDgsIG1pbmltdW0gQ1Ugc2l6ZSlcbiIpOwo+ICsgICAgICAgIHJldCA9 IC0xOwo+ICsgICAgfQo+ICsgICAgaWYgKChjZHNjLT5wYXJhbS5oICYgKHBpY19tIC0gMSkpICE9 IDApIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQ3VycmVudCBlbmNv ZGVyIGRvZXMgbm90IHN1cHBvcnQgcGljdHVyZSBoZWlnaHQsIG5vdCBtdWx0aXBsZSBvZiBtYXgo OCwgbWluaW11bSBDVSBzaXplKVxuIik7Cj4gKyAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFNldCBYRVZFX0NGR19T RVRfVVNFX1BJQ19TSUdOQVRVUkUgZm9yIGVuY29kZXIKPiArICoKPiArICogQHBhcmFtIGlkIFhF VkUgaW5zdGFuY2UgaWRlbnRpZmllcgo+ICsgKiBAcGFyYW0gY3R4IHRoZSBzdHJ1Y3R1cmUgc3Rv cmVzIGFsbCB0aGUgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1Q RUctNSBFVkMgZW5jb2Rlcgo+ICsgKiBAcmV0dXJuIFhFVkUgcHJlLWRlZmluZWQgY29sb3Igc3Bh Y2UgKEBzZWUgeGV2ZS5oKSBvbiBzdWNjZXNzLCBYRVZFX0NGX1VOS05PV04gb24gZmFpbHVyZQo+ ICsgKgo+ICsgKiBAdG9kbyBjb25zaWRlciByZW1vdmluZyB0aGUgZnVuY3Rpb24KPiArICovCj4g K3N0YXRpYyBpbnQgc2V0X2V4dHJhX2NvbmZpZyhYRVZFIGlkLCBYZXZlQ29udGV4dCAqY3R4KQo+ ICt7Cj4gKyAgICBpbnQgcmV0LCBzaXplLCB2YWx1ZTsKPiArCj4gKyAgICBpZihjdHgtPmhhc2gp IHsKPiArICAgICAgICB2YWx1ZSA9IDE7Cj4gKyAgICAgICAgc2l6ZSA9IDQ7Cj4gKyAgICAgICAg cmV0ID0geGV2ZV9jb25maWcoaWQsIFhFVkVfQ0ZHX1NFVF9VU0VfUElDX1NJR05BVFVSRSwgJnZh bHVlLCAmc2l6ZSk7Cj4gKyAgICAgICAgaWYoWEVWRV9GQUlMRUQocmV0KSkgewo+ICsgICAgICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIHNldCBjb25maWcgZm9y IHBpY3R1cmUgc2lnbmF0dXJlXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAg ICAgIH0KPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAq IENvbnZlcnQgZmZtcGVnIHBpeGVsIGZvcm1hdCAoQVZQaXhlbEZvcm1hdCkgaW50byBYRVZFIHBy ZS1kZWZpbmVkIGNvbG9yIHNwYWNlCj4gKyAqCj4gKyAqIEBwYXJhbSBweF9mbXQgcGl4ZWwgZm9y bWF0IChAc2VlIGh0dHBzOi8vZmZtcGVnLm9yZy9kb3h5Z2VuL3RydW5rL3BpeGZtdF84aC5odG1s I2E5YThlMzM1Y2YzYmU0NzIwNDJiYzlmMGNmODBjZDRjNSkKPiArICogQHJldHVybiBYRVZFIHBy ZS1kZWZpbmVkIGNvbG9yIHNwYWNlIChAc2VlIHhldmUuaCkgb24gc3VjY2VzcywgWEVWRV9DRl9V TktOT1dOIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQgeGV2ZV9jb2xvcl9zcGFjZShl bnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCkKPiArewo+ICsgICAgLyogY29sb3Igc3BhY2Ugb2Yg aW5wdXQgaW1hZ2UgKi8KPiArICAgIGludCBjcyA9IFhFVkVfQ0ZfVU5LTk9XTjsKPiArCj4gKyAg ICBzd2l0Y2ggKHBpeF9mbXQpIHsKPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQOgo+ICsg ICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMDsKPiArICAgICAgICBicmVhazsKPiArICAgIGNh c2UgQVZfUElYX0ZNVF9ZVVY0MjBQMTA6Cj4gKyNpZiBBVl9IQVZFX0JJR0VORElBTgo+ICsgICAg ICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQyMCwgMTAsIDEpOwo+ICsjZWxzZQo+ ICsgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMF8xMExFOwo+ICsjZW5kaWYKPiArCj4gKyAg ICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDEyOgo+ICsjaWYgQVZf SEFWRV9CSUdFTkRJQU4KPiArICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0 MjAsIDEyLCAxKTsKPiArI2Vsc2UKPiArICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0MjBfMTJM RTsKPiArI2VuZGlmCj4gKwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBBVl9QSVhfRk1U X1lVVjQyMlA6Cj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNSNDIyOwo+ICsgICAgICAgIGJy ZWFrOwo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlAxMDoKPiArI2lmIEFWX0hBVkVfQklH RU5ESUFOCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDIyLCAxMCwg MSk7Cj4gKyNlbHNlCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNSNDIyXzEwTEU7Cj4gKyNl bmRpZgo+ICsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQ MTI6Cj4gKyNpZiBBVl9IQVZFX0JJR0VORElBTgo+ICsgICAgICAgIGNzID0gWEVWRV9DU19TRVQo WEVWRV9DRl9ZQ0JDUjQyMiwgMTIsIDEpOwo+ICsjZWxzZQo+ICsgICAgICAgIGNzID0gWEVWRV9D U19TRVQoWEVWRV9DRl9ZQ0JDUjQyMiwgMTIsIDApOwo+ICsjZW5kaWYKPiArCj4gKyAgICAgICAg YnJlYWs7Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDoKPiArICAgIGNhc2UgQVZfUElYX0ZN VF9HQlJQMTA6Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDEyOgo+ICsgICAgICAgIGNzID0g WEVWRV9DRl9VTktOT1dOOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBBVl9QSVhfRk1U X1lVVjQ0NFA6Cj4gKyAgICAgICAgY3MgPSBYRVZFX0NGX1lDQkNSNDQ0Owo+ICsgICAgICAgIGJy ZWFrOwo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMDoKPiArI2lmIEFWX0hBVkVfQklH RU5ESUFOCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDQ0LCAxMCwg MSk7Cj4gKyNlbHNlCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNSNDQ0XzEwTEU7Cj4gKyNl bmRpZgo+ICsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQ MTI6Cj4gKyNpZiBBVl9IQVZFX0JJR0VORElBTgo+ICsgICAgICAgIGNzID0gWEVWRV9DU19TRVQo WEVWRV9DRl9ZQ0JDUjQ0NCwgMTIsIDEpOwo+ICsjZWxzZQo+ICsgICAgICAgIGNzID0gWEVWRV9D U19TRVQoWEVWRV9DRl9ZQ0JDUjQ0NCwgMTIsIDApOwo+ICsjZW5kaWYKPiArCj4gKyAgICAgICAg YnJlYWs7Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfR1JBWTg6Cj4gKyAgICAgICAgY3MgPSBYRVZF X0NGX1lDQkNSNDAwOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX0dS QVkxMDoKPiArI2lmIEFWX0hBVkVfQklHRU5ESUFOCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1NF VChYRVZFX0NGX1lDQkNSNDAwLCAxMCwgMSk7Cj4gKyNlbHNlCj4gKyAgICAgICAgY3MgPSBYRVZF X0NTX1lDQkNSNDAwXzEwTEU7Cj4gKyNlbmRpZgo+ICsKPiArICAgICAgICBicmVhazsKPiArICAg IGNhc2UgQVZfUElYX0ZNVF9HUkFZMTI6Cj4gKyNpZiBBVl9IQVZFX0JJR0VORElBTgo+ICsgICAg ICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQwMCwgMTIsIDEpOwo+ICsjZWxzZQo+ ICsgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQwMF8xMkxFOwo+ICsjZW5kaWYKPiArCj4gKyAg ICAgICAgYnJlYWs7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIGNzID0gWEVWRV9DRl9VTktO T1dOOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsgICAgcmV0dXJuIGNzOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHNldHVwX2J1bXBpbmcoWEVWRSBpZCkKPiArewo+ICsgICAgaW50IHZh bCwgc2l6ZTsKPiArICAgIHZhbCAgPSAxOwo+ICsgICAgc2l6ZSA9IHNpemVvZihpbnQpOwo+ICsg ICAgaWYoWEVWRV9GQUlMRUQoeGV2ZV9jb25maWcoaWQsIFhFVkVfQ0ZHX1NFVF9GT1JDRV9PVVQs ICh2b2lkICopKCZ2YWwpLCAmc2l6ZSkpKSB7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAg fQo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyKiBzbGljZV90 eXBlKGVudW0gQVZQaWN0dXJlVHlwZSBhdl9waWNfdHlwZSkKPiArewo+ICsgICAgaWYoYXZfcGlj X3R5cGUgPT0gQVZfUElDVFVSRV9UWVBFX0kpIHsKPiArICAgICAgICByZXR1cm4gIlNsaWNlIFR5 cGUgSSI7Cj4gKyAgICB9IGVsc2UgaWYoYXZfcGljX3R5cGUgPT0gQVZfUElDVFVSRV9UWVBFX1Ap IHsKPiArICAgICAgICByZXR1cm4gIlNsaWNlIFR5cGUgUCI7Cj4gKyAgICB9IGVsc2UgaWYoYXZf cGljX3R5cGUgPT0gQVZfUElDVFVSRV9UWVBFX0IpIHsKPiArICAgICAgICByZXR1cm4gIlNsaWNl IFR5cGUgQiI7Cj4gKyAgICB9IAo+ICsgICAgcmV0dXJuICJTbGljZSBUeXBlIFVOREVGSU5FRCI7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBJbml0aWFsaXplIGNvZGVjIHN0YXRpYyBkYXRhCj4gKyAq Cj4gKyAqIEB0b2RvIGNvbnNpZGVyIHJlbW92aW5nIHVudXNlZCBmdW5jdGlvbgo+ICsgKi8KPiAr c3RhdGljIGF2X2NvbGQgdm9pZCBsaWJ4ZXZlX2luaXRfc3RhdGljX2RhdGEoQVZDb2RlYyAqY29k ZWMpCj4gK3sKPiArICAgIFVOVVNFRChjb2RlYyk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBJbml0 aWFsaXplIGNvZGVjCj4gKyAqIENyZWF0ZSBlbmNvZGVyIGluc3RhbmNlIGFuZCBhbGxvY2F0ZSBh bGwgdGhlIG5lZWRlZCByZXNvdXJjZXMKPiArICoKPiArICogQHBhcmFtIGN0eCBjb2RlYyBjb250 ZXh0Cj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZh aWx1cmUKPiArICovCj4gK3N0YXRpYyBhdl9jb2xkIGludCBsaWJ4ZXZlX2luaXQoQVZDb2RlY0Nv bnRleHQgKmN0eCkKPiArewo+ICsgICAgWGV2ZUNvbnRleHQgKnhlID0gY3R4LT5wcml2X2RhdGE7 Cj4gKyAgICB1bnNpZ25lZCBjaGFyICpic19idWYgPSBOVUxMOwo+ICsgICAgaW50IGksIHZhbCA9 IDA7Cj4gKyAgICBpbnQgc2hpZnRfaCA9IDA7Cj4gKyAgICBpbnQgc2hpZnRfdiA9IDA7Cj4gKyAg ICBYRVZFX0lNR0IgKiBpbWdiID0gTlVMTDsKPiArCj4gKyAgICBYRVZFX0NEU0MgKmNkc2MgPSAm KHhlLT5jZHNjKTsKPiArICAgIAo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImVY dHJhLWZhc3QgRXNzZW50aWFsIFZpZGVvIEVuY29kZXJcbiIpOwo+ICsKPiArICAgIGlmKGN0eC0+ cGl4X2ZtdCAhPSBBVl9QSVhfRk1UX1lVVjQyMFAgJiYgY3R4LT5waXhfZm10ICE9IEFWX1BJWF9G TVRfWVVWNDIwUDEwKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52 YWxpZCBwaXhlbCBmb3JtYXQ6ICVzXG4iLCBhdl9nZXRfcGl4X2ZtdF9uYW1lKGN0eC0+cGl4X2Zt dCkpOwo+ICsgICAgICAgIGdvdG8gRVJSOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIGFsbG9jYXRl IGJpdHN0cmVhbSBidWZmZXIgKi8KPiArICAgIGJzX2J1ZiA9ICh1bnNpZ25lZCBjaGFyKiltYWxs b2MoTUFYX0JTX0JVRik7Cgphdl9tYWxsb2MgKGFuZCB1c2UgYXZfZnJlZSB0byBmcmVlIGl0KS4K QnV0IGlmIHlvdSBhbHdheXMgbmVlZCBleGFjdGx5IHRoYXQgYW1vdW50LCB0aGVuIHlvdSBjYW4g anVzdCBwdXQgYW4KYXJyYXkgb2YgdGhhdCBzaXplIGludG8gWGV2ZUNvbnRleHQuCgo+ICsgICAg aWYoYnNfYnVmID09IE5VTEwpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiY2Fubm90IGFsbG9jYXRlIGJpdHN0cmVhbSBidWZmZXIsIHNpemU9JWQiLCBNQVhfQlNfQlVG KTsKPiArICAgICAgICBnb3RvIEVSUjsKPiArICAgIH0KPiArCj4gKyAgICAvKiByZWFkIGNvbmZp Z3VyYXRpb25zIGFuZCBzZXQgdmFsdWVzIGZvciBjcmVhdGVkIGRlc2NyaXB0b3IgKFhFVkVfQ0RT QykgKi8KPiArICAgIHZhbCA9IGdldF9jb25mKGN0eCwgY2RzYyk7Cj4gKyAgICBpZiAodmFsICE9 IFhFVkVfT0spIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCJjYW5ub3Qg Z2V0IGNvbmZpZ3VyYXRpb25cbiIpOwo+ICsgICAgICAgIGdvdG8gRVJSOwo+ICsgICAgfQo+ICsK PiArICAgIGlmIChjaGVja19jb25mKGN0eCwgY2RzYykgIT0gMCkgewo+ICsgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsImludmFsaWQgY29uZmlndXJhdGlvblxuIik7Cj4gKyAgICAg ICAgZ290byBFUlI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogY3JlYXRlIGVuY29kZXIgKi8KPiAr ICAgIHhlLT5pZCA9IHhldmVfY3JlYXRlKGNkc2MsIE5VTEwpOwo+ICsgICAgaWYoeGUtPmlkID09 IE5VTEwpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGNy ZWF0ZSBYRVZFIGVuY29kZXJcbiIpOwo+ICsgICAgICAgIGdvdG8gRVJSOwo+ICsgICAgfQo+ICsK PiArICAgIGlmKHNldF9leHRyYV9jb25maWcoeGUtPmlkLCB4ZSkpIHsKPiArICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IHNldCBleHRyYSBjb25maWd1cmF0aW9uc1xu Iik7Cj4gKyAgICAgICAgZ290byBFUlI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgeGUtPmJpdGIuYWRk ciA9IGJzX2J1ZjsKPiArICAgIHhlLT5iaXRiLmJzaXplID0gTUFYX0JTX0JVRjsKPiArCj4gKyAg ICBpZihhdl9waXhfZm10X2dldF9jaHJvbWFfc3ViX3NhbXBsZShjdHgtPnBpeF9mbXQsICZzaGlm dF9oLCAmc2hpZnRfdikpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJm YWlsZWQgdG8gZ2V0ICBjaHJvbWEgc2hpZnRcbiIpOwo+ICsgICAgICAgIGdvdG8gRVJSOwo+ICsg ICAgfQo+ICsgICAgLy8gWVVWIGZvcm1hdCBleHBsYW5hdGlvbgo+ICsgICAgLy8gc2hpZnRfaCA9 PSAxICYmIHNoaWZ0X3YgPT0gMSA6IFlVVjQyMAo+ICsgICAgLy8gc2hpZnRfaCA9PSAxICYmIHNo aWZ0X3YgPT0gMCA6IFlVVjQyMgo+ICsgICAgLy8gc2hpZnRfaCA9PSAwICYmIHNoaWZ0X3YgPT0g MCA6IFlVVjQ0NAo+ICsgICAgLy8KPiArICAgIHhlLT53aWR0aF9jaHJvbWEgPSBBVl9DRUlMX1JT SElGVChjdHgtPndpZHRoLCBzaGlmdF9oKTsKPiArICAgIHhlLT5oZWlnaHRfY2hyb21hID0gQVZf Q0VJTF9SU0hJRlQoY3R4LT5oZWlnaHQsIHNoaWZ0X3YpOwo+ICsKPiArICAgIC8qIHNldCBkZWZh dWx0IHZhbHVlcyBmb3IgaW5wdXQgaW1hZ2UgYnVmZmVyICovCj4gKyAgICBpbWdiID0gJnhlLT5p bWdiOwo+ICsgICAgaW1nYi0+Y3MgPSB4ZXZlX2NvbG9yX3NwYWNlKGN0eC0+cGl4X2ZtdCk7Cj4g KyAgICBpbWdiLT5ucCA9IDM7IC8qIG9ubHkgZm9yIHl1djQyMHAsIHl1djQyMHBsZSAqLwo+ICsg ICAgZm9yIChpPTA7IGk8aW1nYi0+bnA7IGkrKykgewo+ICsgICAgICAgIGltZ2ItPnhbaV0gPSBp bWdiLT55W2ldID0gMDsKPiArICAgIH0KPiArICAgIGltZ2ItPndbMF0gPSBpbWdiLT5hd1swXSA9 IHhlLT53aWR0aF9sdW1hOwo+ICsgICAgaW1nYi0+d1sxXSA9IGltZ2ItPndbMl0gPSBpbWdiLT5h d1sxXT0gaW1nYi0+YXdbMl0gPSB4ZS0+d2lkdGhfY2hyb21hOwo+ICsgICAgaW1nYi0+aFswXSA9 IGltZ2ItPmFoWzBdID0geGUtPmhlaWdodF9sdW1hOwo+ICsgICAgaW1nYi0+aFsxXSA9IGltZ2It PmhbMl0gPSBpbWdiLT5haFsxXSA9IGltZ2ItPmFoWzJdID0geGUtPmhlaWdodF9jaHJvbWE7Cj4g Kwo+ICsgICAgeGUtPmVuY29kX2ZyYW1lcyA9IDA7Cj4gKyAgICB4ZS0+Ynl0ZXNfdG90YWwgPSAw Owo+ICsgICAgeGUtPnN0YXRlID0gU1RBVEVfRU5DT0RJTkc7Cj4gKyAgICB4ZS0+cGFja2V0X2Nv dW50ID0gMDsKPiArICAgIHhlLT5iaXRyYXRlID0gMDsKPiArICAgIHJldHVybiAwOwo+ICsKPiAr RVJSOgo+ICsgICAgaWYoYnNfYnVmKSBmcmVlKGJzX2J1Zik7Cj4gKyAgICByZXR1cm4gLTE7Cj4g K30KPiArCj4gKy8qKgo+ICsgICogRW5jb2RlIGRhdGEgdG8gYW4gQVZQYWNrZXQuCj4gKyAgKgo+ ICsgICogQHBhcmFtICAgICAgY3R4ICAgICAgICAgICAgY29kZWMgY29udGV4dAo+ICsgICogQHBh cmFtICAgICAgcGt0ICAgICAgICAgICAgb3V0cHV0IEFWUGFja2V0Cj4gKyAgKiBAcGFyYW1baW5d ICBmcmFtZSAgICAgICAgICBBVkZyYW1lIGNvbnRhaW5pbmcgdGhlIHJhdyBkYXRhIHRvIGJlIGVu Y29kZWQKPiArICAqIEBwYXJhbVtvdXRdIGdvdF9wYWNrZXQgICAgIGVuY29kZXIgc2V0cyB0byAw IG9yIDEgdG8gaW5kaWNhdGUgdGhhdCBhCj4gKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBub24tZW1wdHkgcGFja2V0IHdhcyByZXR1cm5lZCBpbiBhdnBrdC4KPiArICAqIEByZXR1cm4g MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKPiArICAqLwo+ICtz dGF0aWMgaW50IGxpYnhldmVfZW5jb2RlKEFWQ29kZWNDb250ZXh0ICpjdHgsIEFWUGFja2V0ICpw a3QsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZGcmFtZSAqZnJhbWUsIGlu dCAqZ290X3BhY2tldCkKPiArewo+ICsgICAgWGV2ZUNvbnRleHQgKnhlID0gTlVMTDsKPiArICAg IGludCAgcmV0ID0gLTE7Cj4gKyAgICBpbnQgeGV2ZV9jczsKPiArICAgIGlmKGN0eCA9PSBOVUxM IHx8IHBrdCA9PSBOVUxMIHx8IGdvdF9wYWNrZXQ9PU5VTEwpIHsKPiArICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGFyZ3VtZW50c1xuIik7Cj4gKyAgICAgICAgcmV0 dXJuIC0xOwo+ICsgICAgfQo+ICsgICAgeGUgPSBjdHgtPnByaXZfZGF0YTsKPiArICAgIGlmKHhl ID09IE5VTEwpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlk IFhFVkUgY29udGV4dFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsgICAg aWYoeGUtPnN0YXRlID09IFNUQVRFX1NLSVBQSU5HICYmIGZyYW1lICkgewo+ICsgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIkVtcHR5IGZyYW1lIC0+IEVudGVyaW5nIGVuY29kaW5n IHByb2Nlc3MuLi5cbiIpOwo+ICsgICAgICAgIHhlLT5zdGF0ZSA9IFNUQVRFX0VOQ09ESU5HOwo+ ICsgICAgfSBlbHNlIGlmKHhlLT5zdGF0ZSA9PSBTVEFURV9FTkNPRElORyAmJiBmcmFtZSA9PSBO VUxMKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiRW1wdHkgZnJhbWUg LT4gRW50ZXJpbmcgYnVtcGluZyBwcm9jZXNzLi4uXG4iKTsKPiArICAgICAgICBpZiAoc2V0dXBf YnVtcGluZyh4ZS0+aWQpID09IDApIHsKPiArICAgICAgICAgICAgeGUtPnN0YXRlID0gU1RBVEVf QlVNUElORzsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBB Vl9MT0dfRVJST1IsIkZhaWxlZCB0byBzZXR1cCBidW1waW5nXG4iKTsKPiArICAgICAgICAgICAg eGUtPnN0YXRlID0gU1RBVEVfU0tJUFBJTkc7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiAr ICAgIGlmKHhlLT5zdGF0ZSA9PSBTVEFURV9FTkNPRElORykgewo+ICsgICAgICAgIGNvbnN0IEFW UGl4Rm10RGVzY3JpcHRvciAqcGl4ZWxfZm10X2Rlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0IChm cmFtZS0+Zm9ybWF0KTsKPiArICAgICAgICBpZighcGl4ZWxfZm10X2Rlc2MpIHsKPiArICAgICAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0IGRl c2NyaXB0b3IgZm9yIHBpeGVsIGZvcm1hdDogJXNcbiIsIGF2X2dldF9waXhfZm10X25hbWUoY3R4 LT5waXhfZm10KSk7Cj4gKyAgICAgICAgICAgIHJldHVybiAtMTsKPiArICAgICAgICB9Cj4gKwo+ ICsgICAgICAgIHhldmVfY3MgPSB4ZXZlX2NvbG9yX3NwYWNlKGN0eC0+cGl4X2ZtdCk7Cj4gKyAg ICAgICAgaWYoeGV2ZV9jcyAhPSBYRVZFX0NTX1lDQkNSNDIwICYmIHhldmVfY3MgIT0gWEVWRV9D U19ZQ0JDUjQyMF8xMExFKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFtZShjdHgt PnBpeF9mbXQpKTsKPiArICAgICAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICAgIH0KPiArCj4g KyAgICAgICAgewo+ICsgICAgICAgICAgICBpbnQgaTsKPiArICAgICAgICAgICAgWEVWRV9JTUdC ICogaW1nYiA9IE5VTEw7Cj4gKyAgICAgICAgICAgIGludCB4ZXZlX2J5dGVfZGVwdGggPSAwOwo+ ICsKPiArICAgICAgICAgICAgaW1nYiA9ICZ4ZS0+aW1nYjsKPiArCj4gKyAgICAgICAgICAgIHhl dmVfYnl0ZV9kZXB0aCA9IFhFVkVfQ1NfR0VUX0JZVEVfREVQVEgoeGV2ZV9jcyk7Cj4gKyAgICAg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgImJ5dGUgZGVwdGg6ICVkXG4iLHhldmVf Ynl0ZV9kZXB0aCk7Cj4gKwo+ICsgICAgICAgICAgICBmb3IgKGk9MDsgaTxpbWdiLT5ucDsgaSsr KSB7Cj4gKyAgICAgICAgICAgICAgICBpbWdiLT5hW2ldID0gZnJhbWUtPmRhdGFbaV07Cj4gKyAg ICAgICAgICAgICAgICBpbWdiLT5zW2ldID0gZnJhbWUtPmxpbmVzaXplW2ldOwo+ICsgICAgICAg ICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBpZih4ZS0+aWQgPT0gTlVMTCkgewo+ICsgICAgICAg ICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBYRVZFIGVuY29kZXJc biIpOwo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ ICsgICAgICAgICAgICBpbWdiLT50c1swXSA9IGZyYW1lLT5wdHM7Cj4gKyAgICAgICAgICAgIGlt Z2ItPnRzWzFdID0gMDsKPiArICAgICAgICAgICAgaW1nYi0+dHNbMl0gPSAwOwo+ICsgICAgICAg ICAgICBpbWdiLT50c1szXSA9IDA7Cj4gKwo+ICsgICAgICAgICAgICAvKiBwdXNoIGltYWdlIHRv IGVuY29kZXIgKi8KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiSU5Q VVQgfCBSQVcgZnJhbWUgfCB0aW1lc3RhbXBzIHwgJWxsZCB8ICVsbGQgfCAlbGxkIHwgJWxsZCB8 XG4iLCBpbWdiLT50c1swXSwgaW1nYi0+dHNbMV0sIGltZ2ItPnRzWzJdLCBpbWdiLT50c1szXSk7 Cj4gKwo+ICsgICAgICAgICAgICByZXQgPSB4ZXZlX3B1c2goeGUtPmlkLCBpbWdiKTsKPiArICAg ICAgICAgICAgaWYoWEVWRV9GQUlMRUQocmV0KSkgewo+ICsgICAgICAgICAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAieGV2ZV9wdXNoKCkgZmFpbGVkXG4iKTsKPiArICAgICAgICAg ICAgICAgIHJldHVybiAtMTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgIH0g Cj4gKyAgICBpZih4ZS0+c3RhdGUgPT0gU1RBVEVfRU5DT0RJTkcgfHwgeGUtPnN0YXRlID09IFNU QVRFX0JVTVBJTkcpIHsKPiArICAgICAgICAKPiArICAgICAgICAvKiBlbmNvZGluZyAqLwo+ICsg ICAgICAgIHJldCA9IHhldmVfZW5jb2RlKHhlLT5pZCwgJih4ZS0+Yml0YiksICYoeGUtPnN0YXQp KTsKPiArICAgICAgICBpZihYRVZFX0ZBSUxFRChyZXQpKSB7Cj4gKyAgICAgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgInhldmVfZW5jb2RlKCkgZmFpbGVkXG4iKTsKPiArICAgICAg ICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgeGUtPmVuY29kX2Zy YW1lcysrOwo+ICsKPiArICAgICAgICAvKiBzdG9yZSBiaXRzdHJlYW0gKi8KPiArICAgICAgICBp ZiAocmV0ID09IFhFVkVfT0tfT1VUX05PVF9BVkFJTEFCTEUpIHsKPiArICAgICAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiUkVUVVJOIE9LIEJVVCBQSUNUVVJFIElTIE5PVCBBVkFJ TEFCTEUgWUVUICglZCkgZnJhbWU6ICVkXG4iLCByZXQsIHhlLT5lbmNvZF9mcmFtZXMpOwo+ICsg ICAgICAgICAgICAqZ290X3BhY2tldCA9IDA7Cj4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ICsg ICAgICAgIH0gZWxzZSBpZihyZXQgPT0gWEVWRV9PSykgewo+ICsgICAgICAgICAgICBpbnQgYXZf cGljX3R5cGU7Cj4gKwo+ICsgICAgICAgICAgICBpZih4ZS0+c3RhdC53cml0ZSA+IDApIHsKPiAr ICAgICAgICAgICAgICAgIHhlLT5ieXRlc190b3RhbCs9eGUtPnN0YXQud3JpdGU7Cj4gKyAgICAg ICAgICAgICAgICAvLyBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJmcmFtZTogJWQgfCBCeXRl cyB3cml0dGVuOiAgJWQgfCBieXRlcyB0b3RhbDogJWYgfCBmbnVtICVkIHwgJWxsZCB8ICVsbGQg fCAlbGxkIHwgJWxsZCB8XG4iLCB4ZS0+ZW5jb2RfZnJhbWVzLCB4ZS0+c3RhdC53cml0ZSwgeGUt PmJ5dGVzX3RvdGFsLCB4ZS0+c3RhdC5mbnVtLCB4ZS0+Yml0Yi50c1swXSx4ZS0+Yml0Yi50c1sx XSx4ZS0+Yml0Yi50c1syXSx4ZS0+Yml0Yi50c1szXSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAg cmV0ID0gYXZfZ3Jvd19wYWNrZXQocGt0LCB4ZS0+c3RhdC53cml0ZSk7Cj4gKyAgICAgICAgICAg ICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgQVZQYWNrZXQgZGF0YVxuIik7 Cj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICAgICAgICAgIH0K PiArCj4gKyAgICAgICAgICAgICAgICBtZW1jcHkocGt0LT5kYXRhLCB4ZS0+Yml0Yi5hZGRyLCB4 ZS0+c3RhdC53cml0ZSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgcGt0LT5wdHMgPSB4ZS0+Yml0 Yi50c1swXTsKPiArICAgICAgICAgICAgICAgIHBrdC0+ZHRzID0geGUtPmJpdGIudHNbMV07Cj4g KyAgICAgICAgICAgICAgICAKPiArICAgICAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df REVCVUcsICJQVFM6ICVsZCB8IERUUzogJWxkXG4iLCBwa3QtPnB0cywgcGt0LT5kdHMpOwo+ICsK PiArICAgICAgICAgICAgICAgIHhlLT5iaXRyYXRlICs9ICh4ZS0+c3RhdC53cml0ZSAtIHhlLT5z dGF0LnNlaV9zaXplKTsKPiArCj4gKyAgICAgICAgICAgICAgICBzd2l0Y2goeGUtPnN0YXQuc3R5 cGUpIHsKPiArICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9TVF9JOgo+ICsgICAgICAgICAgICAg ICAgICAgIGF2X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX0k7Cj4gKyAgICAgICAgICAgICAg ICAgICAgcGt0LT5mbGFncyB8PSBBVl9QS1RfRkxBR19LRVk7Cj4gKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfUDoKPiArICAgICAgICAg ICAgICAgICAgICBhdl9waWNfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9QOwo+ICsgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICAgY2FzZSBYRVZFX1NUX0I6Cj4gKyAg ICAgICAgICAgICAgICAgICAgYXZfcGljX3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfQjsKPiArICAg ICAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9TVF9V TktOT1dOOgo+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJ1bmtub3duIHNsaWNlIHR5cGVcbiIpOwo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiAt MTsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfREVCVUcsICJPVVRQVVQgfCBFbmNvZGVkIHwgc2xpY2UgdHlwZTogJXMgfCBmbnVt OiAlbGQgfCBwb2M6ICVkIHwgQnl0ZXMgd3JpdHRlbjogICVkIHwgYnl0ZXMgdG90YWw6ICVmIHwg dGltZXN0YW1wcyB8ICVsbGQgfCAlbGxkIHwgJWxsZCB8ICVsbGQgfFxuIiwgCj4gKyAgICAgICAg ICAgICAgICAgICAgc2xpY2VfdHlwZShhdl9waWNfdHlwZSksCj4gKyAgICAgICAgICAgICAgICAg ICAgeGUtPnN0YXQuZm51bSwKPiArICAgICAgICAgICAgICAgICAgICB4ZS0+c3RhdC5wb2MsCj4g KyAgICAgICAgICAgICAgICAgICAgeGUtPnN0YXQud3JpdGUsCj4gKyAgICAgICAgICAgICAgICAg ICAgeGUtPmJ5dGVzX3RvdGFsLAo+ICsgICAgICAgICAgICAgICAgICAgIHhlLT5iaXRiLnRzWzBd LAo+ICsgICAgICAgICAgICAgICAgICAgIHhlLT5iaXRiLnRzWzFdLAo+ICsgICAgICAgICAgICAg ICAgICAgIHhlLT5iaXRiLnRzWzJdLAo+ICsgICAgICAgICAgICAgICAgICAgIHhlLT5iaXRiLnRz WzNdKTsKPiArICAgICAgICAgICAgICAgICAgICAKPiArICAgICAgICAgICAgICAgIGZmX3NpZGVf ZGF0YV9zZXRfZW5jb2Rlcl9zdGF0cyhwa3QsIHhlLT5zdGF0LnFwKkZGX1FQMkxBTUJEQSwgTlVM TCwgMCwgYXZfcGljX3R5cGUpOwo+ICsgICAgICAgICAgICAgICAgCj4gKyAgICAgICAgICAgICAg ICB4ZS0+Yml0cmF0ZSArPSAoeGUtPnN0YXQud3JpdGUgLSB4ZS0+c3RhdC5zZWlfc2l6ZSk7Cj4g Kwo+ICsgICAgICAgICAgICAgICAgKmdvdF9wYWNrZXQgPSAxOwo+ICsgICAgICAgICAgICAgICAg eGUtPnBhY2tldF9jb3VudCsrOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfSBlbHNlIGlm IChyZXQgPT0gWEVWRV9PS19OT19NT1JFX0ZSTSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfSU5GTywgIlJldHVybiBPSyBidXQgbm8gbW9yZSBmcmFtZXMgKCVkKVxuIiwgcmV0 KTsKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiSW52YWxpZCByZXR1cm4gdmFsdWUgKCVk KVxuIiwgcmV0KTsKPiArICAgICAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICAgIH0KPiArICAg IH0gZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlVkZWZpbmVk IHN0YXRlOiAlZFxuIiwgeGUtPnN0YXRlKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9 Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIERlc3Ryb3kgZW5jb2RlciBh bmQgcmVsZWFzZSBhbGwgdGhlIGFsbG9jYXRlZCByZXNvdXJjZXMKPiArICoKPiArICogQHBhcmFt IGN0eCBjb2RlYyBjb250ZXh0Cj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBhdl9jb2xkIGludCBsaWJ4ZXZl X2Nsb3NlKEFWQ29kZWNDb250ZXh0ICpjdHgpCj4gK3sKPiArICAgIFhldmVDb250ZXh0ICp4ZSA9 IGN0eC0+cHJpdl9kYXRhOwo+ICsKPiArICAgIHhldmVfZGVsZXRlKHhlLT5pZCk7Cj4gKwo+ICsg ICAgaWYoeGUtPmJpdGIuYWRkcikgZnJlZSh4ZS0+Yml0Yi5hZGRyKTsgLyogcmVsZWFzZSBiaXRz dHJlYW0gYnVmZmVyICovCj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKyNkZWZpbmUg T0ZGU0VUKHgpIG9mZnNldG9mKFhldmVDb250ZXh0LCB4KQo+ICsjZGVmaW5lIFZFIEFWX09QVF9G TEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0KPiArCj4gKy8vIEV4 YW1wbGUgb2YgdXNpbmc6IC4vZmZtcGVnIC14ZXZlLXBhcmFtcyAibT0yOnE9MTciCj4gKy8vIENv bnNpZGVyIHVzaW5nIGZvbGxvd2luZyBvcHRpb25zICguL2ZmbXBlZyAtLWhlbHAgZW5jb2Rlcj1s aWJ4ZXZlKQo+ICsvLwo+ICtzdGF0aWMgY29uc3QgQVZPcHRpb24geGV2ZV9vcHRpb25zW10gPSB7 Cj4gKyAgICB7ICJwcmVzZXQiLCAiRW5jb2RpbmcgcHJlc2V0IGZvciBzZXR0aW5nIGVuY29kaW5n IHNwZWVkIFtmYXN0LCBtZWRpdW0sIHNsb3csIHBsYWNlYm9dIiwgT0ZGU0VUKG9wX3ByZXNldCks IEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gIm1lZGl1bSIgfSwgMCwgMCwgVkUgfSwKPiAr ICAgIHsgInR1bmUiLCAiVHVuZWluZyBwYXJhbWV0ZXIgZm9yIHNwZWNpYWwgcHVycG9zZSBvcGVy YXRpb24gW3BzbnIsIHplcm9sYXRlbmN5XSIsIE9GRlNFVChvcF90dW5lKSwgQVZfT1BUX1RZUEVf U1RSSU5HLCB7IDAgfSwgMCwgMCwgVkV9LAo+ICsgICAgeyAicXAiLCAicXVhbnRpemF0aW9uIHBh cmFtZXRlciBxcCA8MC4uNTE+IFtkZWZhdWx0OiAzMl0iLCBPRkZTRVQob3BfcXApLCBBVl9PUFRf VFlQRV9JTlQsIHsgLmk2NCA9IDMyIH0sIDAsIDUxLCBWRSB9LAo+ICsgICAgeyAiY3JmIiwgImNv bnN0YW50IHJhdGUgZmFjdG9yIDwtMS4uNTE+IFtkZWZhdWx0OiAzMl0iLCBPRkZTRVQob3BfY3Jm KSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAtMSB9LCAtMSwgNTEsIFZFIH0sCj4gKyAgICB7 ICJ4ZXZlLXBhcmFtcyIsICJvdmVycmlkZSB0aGUgeGV2ZSBjb25maWd1cmF0aW9uIHVzaW5nIGEg Oi1zZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycyIsIE9GRlNFVCh4ZXZlX3Bh cmFtcyksIEFWX09QVF9UWVBFX0RJQ1QsICAgeyAwIH0sIDAsIDAsIFZFIH0sCj4gKyAgICB7IE5V TEwgfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IEFWQ2xhc3MgeGV2ZV9jbGFzcyA9IHsKPiAr ICAgIC5jbGFzc19uYW1lID0gImxpYnhldmUiLAo+ICsgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZh dWx0X2l0ZW1fbmFtZSwKPiArICAgIC5vcHRpb24gICAgID0geGV2ZV9vcHRpb25zLAo+ICsgICAg LnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsCj4gK307Cj4gKwo+ICsvKioKPiAr ICogIGxpYmF2Y29kZWMgZ2VuZXJpYyBnbG9iYWwgb3B0aW9ucywgd2hpY2ggY2FuIGJlIHNldCBv biBhbGwgdGhlIGVuY29kZXJzIGFuZCBkZWNvZGVycwo+ICsgKiAgQHNlZSBodHRwczovL3d3dy5m Zm1wZWcub3JnL2ZmbXBlZy1jb2RlY3MuaHRtbCNDb2RlYy1PcHRpb25zCj4gKyAqLwo+ICtzdGF0 aWMgY29uc3QgQVZDb2RlY0RlZmF1bHQgeGV2ZV9kZWZhdWx0c1tdID0gewo+ICsgICAgeyAiYiIs ICIwIiB9LCAgICAgICAvLyBiaXRyYXRlCj4gKyAgICB7ICJnIiwgIjAiIH0sICAgICAgIC8vIGdv cF9zaXplIChrZXktZnJhbWUgaW50ZXJ2YWwgMDogb25seSBvbmUgSS1mcmFtZSBhdCB0aGUgZmly c3QgdGltZTsgMTogZXZlcnkgZnJhbWUgaXMgY29kZWQgaW4gSS1mcmFtZSkKPiArICAgIHsgImJm IiwgIjE1In0sICAgICAgLy8gYmZyYW1lcyAoMDogbm8gQi1mcmFtZXMpCj4gKyAgICB7ICJwcm9m aWxlIiwgIjAifSwgIC8vIGVuY29kZXIgY29kZWMgcHJvZmlsZSAoMDogYmFzZWxpZTsgMTogbWFp bikKPiArICAgIHsgInRocmVhZHMiLCAiMCJ9LCAgLy8gbnVtYmVyIG9mIHRocmVhZHMgdG8gYmUg dXNlZCAoMDogYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHNl dCkKPiArICAgIHsgTlVMTCB9LAo+ICt9Owo+ICsKPiArQVZDb2RlYyBmZl9saWJ4ZXZlX2VuY29k ZXIgPSB7Cj4gKyAgICAubmFtZSAgICAgICAgICAgICA9ICJsaWJ4ZXZlIiwKPiArICAgIC5sb25n X25hbWUgICAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoImxpYnhldmUgTVBFRy01IEVWQyIp LAo+ICsgICAgLnR5cGUgICAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCj4gKyAgICAu aWQgICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0VWQywKPiArICAgIC5pbml0ICAgICAgICAg ICAgID0gbGlieGV2ZV9pbml0LAo+ICsgICAgLmluaXRfc3RhdGljX2RhdGEgPSBsaWJ4ZXZlX2lu aXRfc3RhdGljX2RhdGEsCj4gKyAgICAuZW5jb2RlMiAgICAgICAgICA9IGxpYnhldmVfZW5jb2Rl LAo+ICsgICAgLmNsb3NlICAgICAgICAgICAgPSBsaWJ4ZXZlX2Nsb3NlLAo+ICsgICAgLnByaXZf ZGF0YV9zaXplICAgPSBzaXplb2YoWGV2ZUNvbnRleHQpLAo+ICsgICAgLnByaXZfY2xhc3MgICAg ICAgPSAmeGV2ZV9jbGFzcywKPiArICAgIC5kZWZhdWx0cyAgICAgICAgID0geGV2ZV9kZWZhdWx0 cywKPiArICAgIC5jYXBhYmlsaXRpZXMgICAgID0gQVZfQ09ERUNfQ0FQX0RFTEFZIHwgQVZfQ09E RUNfQ0FQX0FVVE9fVEhSRUFEUyB8Cj4gKyAgICBBVl9DT0RFQ19DQVBfRU5DT0RFUl9SRU9SREVS RURfT1BBUVVFLAo+ICsgICAgLndyYXBwZXJfbmFtZSAgICAgPSAibGlieGV2ZSIsCj4gK307Cj4g ZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvcGFyc2Vycy5jIGIvbGliYXZjb2RlYy9wYXJzZXJzLmMK PiBpbmRleCA2YjQwYzE4ZDgwLi4yOTVmYTMzZjUyIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMv cGFyc2Vycy5jCj4gKysrIGIvbGliYXZjb2RlYy9wYXJzZXJzLmMKPiBAQCAtNzMsNiArNzMsNyBA QCBleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl92cDlfcGFyc2VyOwo+ICBleHRlcm4gY29u c3QgQVZDb2RlY1BhcnNlciBmZl93ZWJwX3BhcnNlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWQ29kZWNQ YXJzZXIgZmZfeGJtX3BhcnNlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfeG1h X3BhcnNlcjsKPiArZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZXZjX3BhcnNlcjsKCmFs cGhhYmV0aWNhbCBvcmRlcgoKPiAgCj4gICNpbmNsdWRlICJsaWJhdmNvZGVjL3BhcnNlcl9saXN0 LmMiCj4gIAo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Byb2ZpbGVzLmMgYi9saWJhdmNvZGVj L3Byb2ZpbGVzLmMKPiBpbmRleCA3YWY3ZmJlYjEzLi5hMzEyNDRlMGRiIDEwMDY0NAo+IC0tLSBh L2xpYmF2Y29kZWMvcHJvZmlsZXMuYwo+ICsrKyBiL2xpYmF2Y29kZWMvcHJvZmlsZXMuYwo+IEBA IC0xODEsNCArMTgxLDEwIEBAIGNvbnN0IEFWUHJvZmlsZSBmZl9hcmliX2NhcHRpb25fcHJvZmls ZXNbXSA9IHsKPiAgICAgIHsgRkZfUFJPRklMRV9VTktOT1dOIH0KPiAgfTsKPiAgCj4gK2NvbnN0 IEFWUHJvZmlsZSBmZl9ldmNfcHJvZmlsZXNbXSA9IHsKPiArICAgIHsgRkZfUFJPRklMRV9FVkNf QkFTRUxJTkUsICAgICAgICAgICAgICJCYXNlbGluZSIgICAgICAgICAgICAgIH0sCj4gKyAgICB7 IEZGX1BST0ZJTEVfRVZDX01BSU4sICAgICAgICAgICAgICAgICAiTWFpbiIgICAgICAgICAgICAg ICAgICB9LAo+ICsgICAgeyBGRl9QUk9GSUxFX1VOS05PV04gfSwKPiArfTsKPiArCj4gICNlbmRp ZiAvKiAhQ09ORklHX1NNQUxMICovCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvcHJvZmlsZXMu aCBiL2xpYmF2Y29kZWMvcHJvZmlsZXMuaAo+IGluZGV4IDQxYTE5YWE5YWQuLmNmOTJiNWYxMjYg MTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9wcm9maWxlcy5oCj4gKysrIGIvbGliYXZjb2RlYy9w cm9maWxlcy5oCj4gQEAgLTcyLDUgKzcyLDYgQEAgZXh0ZXJuIGNvbnN0IEFWUHJvZmlsZSBmZl9z YmNfcHJvZmlsZXNbXTsKPiAgZXh0ZXJuIGNvbnN0IEFWUHJvZmlsZSBmZl9wcm9yZXNfcHJvZmls ZXNbXTsKPiAgZXh0ZXJuIGNvbnN0IEFWUHJvZmlsZSBmZl9tanBlZ19wcm9maWxlc1tdOwo+ICBl eHRlcm4gY29uc3QgQVZQcm9maWxlIGZmX2FyaWJfY2FwdGlvbl9wcm9maWxlc1tdOwo+ICtleHRl cm4gY29uc3QgQVZQcm9maWxlIGZmX2V2Y19wcm9maWxlc1tdOwo+ICAKPiAgI2VuZGlmIC8qIEFW Q09ERUNfUFJPRklMRVNfSCAqLwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZlcnNpb24uaCBi L2xpYmF2Y29kZWMvdmVyc2lvbi5oCj4gaW5kZXggNGQ3NzQzMTg0Mi4uZmIxYTBmZWVjNiAxMDA2 NDQKPiAtLS0gYS9saWJhdmNvZGVjL3ZlcnNpb24uaAo+ICsrKyBiL2xpYmF2Y29kZWMvdmVyc2lv bi5oCj4gQEAgLTI4LDcgKzI4LDcgQEAKPiAgI2luY2x1ZGUgImxpYmF2dXRpbC92ZXJzaW9uLmgi Cj4gIAo+ICAjZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lPTl9NQUpPUiAgNTkKPiAtI2RlZmluZSBM SUJBVkNPREVDX1ZFUlNJT05fTUlOT1IgIDE4Cj4gKyNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9O X01JTk9SICAxOQo+ICAjZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lPTl9NSUNSTyAxMDAKPiAgCj4g ICNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX0lOVCAgQVZfVkVSU0lPTl9JTlQoTElCQVZDT0RF Q19WRVJTSU9OX01BSk9SLCBcCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlIGIv bGliYXZmb3JtYXQvTWFrZWZpbGUKPiBpbmRleCA4NGU3M2UzYzYzLi5kYjQ2MWU3OWI3IDEwMDY0 NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gKysrIGIvbGliYXZmb3JtYXQvTWFrZWZp bGUKPiBAQCAtMjQxLDYgKzI0MSw4IEBAIE9CSlMtJChDT05GSUdfSENPTV9ERU1VWEVSKSAgICAg ICAgICAgICAgKz0gaGNvbS5vIHBjbS5vCj4gIE9CSlMtJChDT05GSUdfSERTX01VWEVSKSAgICAg ICAgICAgICAgICAgKz0gaGRzZW5jLm8KPiAgT0JKUy0kKENPTkZJR19IRVZDX0RFTVVYRVIpICAg ICAgICAgICAgICArPSBoZXZjZGVjLm8gcmF3ZGVjLm8KPiAgT0JKUy0kKENPTkZJR19IRVZDX01V WEVSKSAgICAgICAgICAgICAgICArPSByYXdlbmMubwo+ICtPQkpTLSQoQ09ORklHX0VWQ19ERU1V WEVSKSAgICAgICAgICAgICAgICs9IGV2Y2RlYy5vIHJhd2RlYy5vCj4gK09CSlMtJChDT05GSUdf RVZDX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gcmF3ZW5jLm8KPiAgT0JKUy0kKENPTkZJR19I TFNfREVNVVhFUikgICAgICAgICAgICAgICArPSBobHMubyBobHNfc2FtcGxlX2VuY3J5cHRpb24u bwo+ICBPQkpTLSQoQ09ORklHX0hMU19NVVhFUikgICAgICAgICAgICAgICAgICs9IGhsc2VuYy5v IGhsc3BsYXlsaXN0Lm8gYXZjLm8KPiAgT0JKUy0kKENPTkZJR19ITk1fREVNVVhFUikgICAgICAg ICAgICAgICArPSBobm0ubwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMg Yi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiBpbmRleCBkMDY2YTc3NDViLi4xMTQ4MDI0ZTcx IDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+ICsrKyBiL2xpYmF2Zm9y bWF0L2FsbGZvcm1hdHMuYwo+IEBAIC0xNDUsNiArMTQ1LDggQEAgZXh0ZXJuIGNvbnN0IEFWSW5w dXRGb3JtYXQgIGZmX2VhX2NkYXRhX2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9y bWF0ICBmZl9lYWMzX2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9l YWMzX211eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZXBhZl9kZW11eGVy Owo+ICtleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZXZjX2RlbXV4ZXI7Cj4gK2V4dGVy biBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9ldmNfbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVk91 dHB1dEZvcm1hdCBmZl9mNHZfbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBm Zl9mZm1ldGFkYXRhX2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9m Zm1ldGFkYXRhX211eGVyOwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9ldmNkZWMuYyBiL2xp YmF2Zm9ybWF0L2V2Y2RlYy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwLi5kZDkxMDJjZGQ0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9ybWF0L2V2Y2Rl Yy5jCj4gQEAgLTAsMCArMSwxMzYgQEAKPiArLyoKPiArICogUkFXIEVWQyB2aWRlbyBkZW11eGVy Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNr aUBzYW1zdW5nLmNvbT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4g KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjaW5jbHVkZSAibGliYXZjb2Rl Yy9nZXRfYml0cy5oIgo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9nb2xvbWIuaCIKPiArI2luY2x1 ZGUgImF2Zm9ybWF0LmgiCj4gKyNpbmNsdWRlICJyYXdkZWMuaCIKPiArI2luY2x1ZGUgImxpYmF2 Y29kZWMvaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgInhldmQuaCIKPiArCj4gK3R5cGVkZWYgc3Ry dWN0IEVWQ1BhcnNlckNvbnRleHQgewo+ICsgICAgaW50IGdvdF9zcHM7Cj4gKyAgICBpbnQgZ290 X3BwczsKPiArICAgIGludCBnb3RfaWRyOwo+ICsgICAgaW50IGdvdF9ub25pZHI7Cj4gK30gRVZD UGFyc2VyQ29udGV4dDsKPiArCj4gK3N0YXRpYyBpbnQgZ2V0X25hbHVfdHlwZShjb25zdCB1aW50 OF90ICpicywgaW50IGJzX3NpemUpCj4gK3sKPiArICAgIEdldEJpdENvbnRleHQgZ2I7Cj4gKyAg ICBpbnQgZnpiLCBudXQ7Cj4gKyAgICBpbml0X2dldF9iaXRzKCZnYiwgYnMsIGJzX3NpemUgKiA4 KTsKPiArICAgIGZ6YiA9IGdldF9iaXRzMSgmZ2IpOwo+ICsgICAgaWYoZnpiICE9IDApIHsKPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiZm9yYmlkZGVuX3plcm9fYml0IGlz IG5vdCBjbGVhclxuIik7Cj4gKyAgICB9Cj4gKyAgICBudXQgPSBnZXRfYml0cygmZ2IsIDYpOyAv KiBuYWxfdW5pdF90eXBlX3BsdXMxICovCj4gKyAgICByZXR1cm4gbnV0IC0gMTsKPiArfQo+ICsK PiArLyoqCj4gKyAqIFJlYWQgTkFMIHVuaXQgbGVuZ3RoCj4gKyAqIEBwYXJhbSBicyBpbnB1dCBk YXRhIChiaXRzdHJlYW0pCj4gKyAqIEByZXR1cm4gdGhlIGxlbmdodGggb2YgTkFMIHVuaXQgb24g c3VjY2VzcywgMCB2YWx1ZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgdWludDMyX3QgcmVh ZF9uYWxfdW5pdF9sZW5ndGgoY29uc3QgdWludDhfdCAqYnMsIGludCBic19zaXplKQo+ICt7Cj4g KyAgICB1aW50MzJfdCBsZW4gPSAwOwo+ICsgICAgWEVWRF9JTkZPIGluZm87Cj4gKyAgICBpbnQg cmV0Owo+ICsKPiArICAgIGlmKGJzX3NpemU+PVhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUpIHsK PiArICAgICAgICByZXQgPSB4ZXZkX2luZm8oKHZvaWQqKWJzLCBYRVZEX05BTF9VTklUX0xFTkdU SF9CWVRFLCAxLCAmaW5mbyk7Cj4gKyAgICAgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsKPiAr ICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgYml0c3Ry ZWFtIGluZm9ybWF0aW9uXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICAgICAg fQo+ICsgICAgICAgIGxlbiA9IGluZm8ubmFsdV9sZW47Cj4gKyAgICAgICAgaWYobGVuID09IDAp Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAi SW52YWxpZCBiaXRzdHJlYW0gc2l6ZSEgWyVkXVxuIiwgYnNfc2l6ZSk7Cj4gKyAgICAgICAgICAg IHJldHVybiAwOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIHJldHVybiBsZW47Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgcGFyc2VfbmFsX3VuaXRzKGNvbnN0IEFWUHJvYmVEYXRhICpwLCBF VkNQYXJzZXJDb250ZXh0ICpldikKPiArewo+ICsgICAgaW50IG5hbHVfdHlwZTsKPiArICAgIHNp emVfdCBuYWx1X3NpemU7Cj4gKyAgICB1bnNpZ25lZCBjaGFyKiBiaXRzID0gKHVuc2lnbmVkIGNo YXIgKilwLT5idWY7Cj4gKyAgICBpbnQgYnl0ZXNfdG9fcmVhZCA9IHAtPmJ1Zl9zaXplOwo+ICsg ICAgCj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiYnl0ZXNfdG9fcmVhZDogJWQg XG4iLCBieXRlc190b19yZWFkKTsKPiArCj4gKyAgICB3aGlsZShieXRlc190b19yZWFkID4gWEVW RF9OQUxfVU5JVF9MRU5HVEhfQllURSkgewo+ICsgICAgCj4gKyAgICAgICAgbmFsdV9zaXplID0g cmVhZF9uYWxfdW5pdF9sZW5ndGgoYml0cywgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSk7Cj4g KyAgICAgICAgaWYobmFsdV9zaXplID09IDApIGJyZWFrOwo+ICsKPiArICAgICAgICBiaXRzICs9 IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7Cj4gKyAgICAgICAgYnl0ZXNfdG9fcmVhZCAtPSBY RVZEX05BTF9VTklUX0xFTkdUSF9CWVRFOwo+ICsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0RFQlVHLCAibmFsdV9zaXplOiAlbGQgXG4iLCBuYWx1X3NpemUpOwo+ICsKPiArICAgICAg ICBpZihieXRlc190b19yZWFkIDwgbmFsdV9zaXplKSBicmVhazsKPiArCj4gKyAgICAgICAgbmFs dV90eXBlID0gZ2V0X25hbHVfdHlwZShiaXRzLCBieXRlc190b19yZWFkKTsKPiArCj4gKyAgICAg ICAgYml0cyArPSBuYWx1X3NpemU7Cj4gKyAgICAgICAgYnl0ZXNfdG9fcmVhZCAtPSBuYWx1X3Np emU7Cj4gKwo+ICsgICAgICAgIGlmIChuYWx1X3R5cGUgPT0gWEVWRF9OVVRfU1BTKSB7Cj4gKyAg ICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9TUFMgXG4iKTsK PiArICAgICAgICAgICAgZXYtPmdvdF9zcHMrKzsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZWxz ZSBpZiAobmFsdV90eXBlID09IFhFVkRfTlVUX1BQUykgewo+ICsgICAgICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0RFQlVHLCAiWEVWRF9OVVRfUFBTIFxuIik7Cj4gKyAgICAgICAgICAgIGV2 LT5nb3RfcHBzKys7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGVsc2UgaWYgKG5hbHVfdHlwZSA9 PSBYRVZEX05VVF9JRFIgKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVC VUcsICJYRVZEX05VVF9JRFJcbiIpOwo+ICsgICAgICAgICAgICBldi0+Z290X2lkcisrOwo+ICsg ICAgICAgIH0KPiArICAgICAgICBlbHNlIGlmIChuYWx1X3R5cGUgPT0gWEVWRF9OVVRfTk9OSURS KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9O T05JRFJcbiIpOwo+ICsgICAgICAgICAgICBldi0+Z290X25vbmlkcisrOwo+ICsgICAgICAgIH0K PiArICAgIH0KPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGV2Y19wcm9i ZShjb25zdCBBVlByb2JlRGF0YSAqcCkKPiArewo+ICsgICAgRVZDUGFyc2VyQ29udGV4dCBldiA9 IHt9Owo+ICsgICAgaW50IHJldCA9IHBhcnNlX25hbF91bml0cyhwLCAmZXYpOwo+ICsKPiArICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJzcHM6JWQgcHBzOiVkIGlkcjolZCBzbGk6JWRc biIsIGV2LmdvdF9zcHMsIGV2LmdvdF9wcHMsIGV2LmdvdF9pZHIsIGV2LmdvdF9ub25pZHIpOwo+ ICsgICAgCj4gKyAgICBpZiAocmV0ID09IDAgJiYgZXYuZ290X3NwcyAmJiBldi5nb3RfcHBzICYm IChldi5nb3RfaWRyIHx8IGV2LmdvdF9ub25pZHIgPiAzKSkgCj4gKyAgICAgICAgcmV0dXJuIEFW UFJPQkVfU0NPUkVfRVhURU5TSU9OICsgMTsgIC8vIDEgbW9yZSB0aGFuIC5tcGcKPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArRkZfREVGX1JBV1ZJREVPX0RFTVVYRVIoZXZjLCAicmF3 IEVWQyB2aWRlbyIsIGV2Y19wcm9iZSwgImV2YyIsIEFWX0NPREVDX0lEX0VWQykKPiBkaWZmIC0t Z2l0IGEvbGliYXZmb3JtYXQvaXNvbV90YWdzLmMgYi9saWJhdmZvcm1hdC9pc29tX3RhZ3MuYwo+ IGluZGV4IDYyZTYwNDcwYTguLjAyNDVjZmI5OTkgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmb3JtYXQv aXNvbV90YWdzLmMKPiArKysgYi9saWJhdmZvcm1hdC9pc29tX3RhZ3MuYwo+IEBAIC0xNDUsNiAr MTQ1LDggQEAgY29uc3QgQVZDb2RlY1RhZyBmZl9jb2RlY19tb3Z2aWRlb190YWdzW10gPSB7Cj4g ICAgICB7IEFWX0NPREVDX0lEX0gyNjQsIE1LVEFHKCdkJywgJ3YnLCAnYScsICcxJykgfSwgLyog QVZDLWJhc2VkIERvbGJ5IFZpc2lvbiBkZXJpdmVkIGZyb20gYXZjMSAqLwo+ICAgICAgeyBBVl9D T0RFQ19JRF9IMjY0LCBNS1RBRygnZCcsICd2JywgJ2EnLCAndicpIH0sIC8qIEFWQy1iYXNlZCBE b2xieSBWaXNpb24gZGVyaXZlZCBmcm9tIGF2YzMgKi8KPiAgCj4gKyAgICB7IEFWX0NPREVDX0lE X0VWQywgIE1LVEFHKCdlJywgJ3YnLCAnYycsICcxJykgfSwgLyogRVZDL01QRUctNSAqLwo+ICsK PiAgICAgIHsgQVZfQ09ERUNfSURfVlA4LCAgTUtUQUcoJ3YnLCAncCcsICcwJywgJzgnKSB9LCAv KiBWUDggKi8KPiAgICAgIHsgQVZfQ09ERUNfSURfVlA5LCAgTUtUQUcoJ3YnLCAncCcsICcwJywg JzknKSB9LCAvKiBWUDkgKi8KPiAgICAgIHsgQVZfQ09ERUNfSURfQVYxLCAgTUtUQUcoJ2EnLCAn dicsICcwJywgJzEnKSB9LCAvKiBBVjEgKi8KPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW92 LmMgYi9saWJhdmZvcm1hdC9tb3YuYwo+IGluZGV4IDZmYjA5ZGY3ZTEuLmU4Mzg3MmZiZTIgMTAw NjQ0Cj4gLS0tIGEvbGliYXZmb3JtYXQvbW92LmMKPiArKysgYi9saWJhdmZvcm1hdC9tb3YuYwo+ IEBAIC04NTY4LDcgKzg1NjgsNyBAQCBjb25zdCBBVklucHV0Rm9ybWF0IGZmX21vdl9kZW11eGVy ID0gewo+ICAgICAgLmxvbmdfbmFtZSAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIlF1aWNr VGltZSAvIE1PViIpLAo+ICAgICAgLnByaXZfY2xhc3MgICAgID0gJm1vdl9jbGFzcywKPiAgICAg IC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihNT1ZDb250ZXh0KSwKPiAtICAgIC5leHRlbnNpb25z ICAgICA9ICJtb3YsbXA0LG00YSwzZ3AsM2cyLG1qMixwc3AsbTRiLGlzbSxpc212LGlzbWEsZjR2 IiwKPiArICAgIC5leHRlbnNpb25zICAgICA9ICJtb3YsbXA0LG00YSwzZ3AsM2cyLG1qMixwc3As bTRiLGlzbSxpc212LGlzbWEsZjR2LGV2YyIsCj4gICAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9G TVRfSU5JVF9DTEVBTlVQLAo+ICAgICAgLnJlYWRfcHJvYmUgICAgID0gbW92X3Byb2JlLAo+ICAg ICAgLnJlYWRfaGVhZGVyICAgID0gbW92X3JlYWRfaGVhZGVyLAo+IGRpZmYgLS1naXQgYS9saWJh dmZvcm1hdC9tb3ZlbmMuYyBiL2xpYmF2Zm9ybWF0L21vdmVuYy5jCj4gaW5kZXggNGM4Njg5MTlh ZS4uMzBlNTAzN2YwNiAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9tb3ZlbmMuYwo+ICsrKyBi L2xpYmF2Zm9ybWF0L21vdmVuYy5jCj4gQEAgLTEzNDIsNiArMTM0MiwxNiBAQCBzdGF0aWMgaW50 IG1vdl93cml0ZV9odmNjX3RhZyhBVklPQ29udGV4dCAqcGIsIE1PVlRyYWNrICp0cmFjaykKPiAg ICAgIHJldHVybiB1cGRhdGVfc2l6ZShwYiwgcG9zKTsKPiAgfQo+ICAKPiArc3RhdGljIGludCBt b3Zfd3JpdGVfZXZjY190YWcoQVZJT0NvbnRleHQgKnBiLCBNT1ZUcmFjayAqdHJhY2spCj4gK3sK PiArICAgIGludDY0X3QgcG9zID0gYXZpb190ZWxsKHBiKTsKPiArCj4gKyAgICBhdmlvX3diMzIo cGIsIDApOwo+ICsgICAgZmZpb193Zm91cmNjKHBiLCAiZXZjQyIpOwo+ICsgICAgZmZfaXNvbV93 cml0ZV9hdmNjKHBiLCB0cmFjay0+dm9zX2RhdGEsIHRyYWNrLT52b3NfbGVuKTsKPiArICAgIHJl dHVybiB1cGRhdGVfc2l6ZShwYiwgcG9zKTsKPiArfQo+ICsKPiAgLyogYWxzbyB1c2VkIGJ5IGFs bCBhdmlkIGNvZGVjcyAoZHYsIGlteCwgbWVyaWRpZW4pIGFuZCB0aGVpciB2YXJpYW50cyAqLwo+ ICBzdGF0aWMgaW50IG1vdl93cml0ZV9hdmlkX3RhZyhBVklPQ29udGV4dCAqcGIsIE1PVlRyYWNr ICp0cmFjaykKPiAgewo+IEBAIC0xNTkxLDYgKzE2MDEsMTkgQEAgc3RhdGljIGludCBtb3ZfZ2V0 X2gyNjRfY29kZWNfdGFnKEFWRm9ybWF0Q29udGV4dCAqcywgTU9WVHJhY2sgKnRyYWNrKQo+ICAg ICAgcmV0dXJuIHRhZzsKPiAgfQo+ICAKPiArc3RhdGljIGludCBtb3ZfZ2V0X2V2Y19jb2RlY190 YWcoQVZGb3JtYXRDb250ZXh0ICpzLCBNT1ZUcmFjayAqdHJhY2spCj4gK3sKPiArICAgIGludCB0 YWcgPSB0cmFjay0+cGFyLT5jb2RlY190YWc7Cj4gKyAgICBpbnQgaW50ZXJsYWNlZCA9IHRyYWNr LT5wYXItPmZpZWxkX29yZGVyID4gQVZfRklFTERfUFJPR1JFU1NJVkU7Cj4gKyAgICBBVlN0cmVh bSAqc3QgPSB0cmFjay0+c3Q7Cj4gKyAgICBpbnQgcmF0ZSA9IGRlZmluZWRfZnJhbWVfcmF0ZShz LCBzdCk7Cj4gKwo+ICsgICAgaWYgKCF0YWcpCj4gKyAgICAgICAgdGFnID0gTUtUQUcoJ2UnLCAn dicsICdjJywgJ2knKTsgLy9mYWxsYmFjayB0YWcKPiArCj4gKyAgICByZXR1cm4gdGFnOwo+ICt9 Cj4gKwo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiAgICAgIGVudW0gQVZQaXhlbEZvcm1hdCBw aXhfZm10Owo+ICAgICAgdWludDMyX3QgdGFnOwo+IEBAIC0xNjcyLDYgKzE2OTUsOCBAQCBzdGF0 aWMgdW5zaWduZWQgaW50IG1vdl9nZXRfY29kZWNfdGFnKEFWRm9ybWF0Q29udGV4dCAqcywgTU9W VHJhY2sgKnRyYWNrKQo+ICAgICAgICAgICAgICB0YWcgPSBtb3ZfZ2V0X21wZWcyX3hkY2FtX2Nv ZGVjX3RhZyhzLCB0cmFjayk7Cj4gICAgICAgICAgZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNf aWQgPT0gQVZfQ09ERUNfSURfSDI2NCkKPiAgICAgICAgICAgICAgdGFnID0gbW92X2dldF9oMjY0 X2NvZGVjX3RhZyhzLCB0cmFjayk7Cj4gKyAgICAgICAgZWxzZSBpZiAodHJhY2stPnBhci0+Y29k ZWNfaWQgPT0gQVZfQ09ERUNfSURfRVZDKQo+ICsgICAgICAgICAgICB0YWcgPSBtb3ZfZ2V0X2V2 Y19jb2RlY190YWcocywgdHJhY2spOyAgICAKPiAgICAgICAgICBlbHNlIGlmICh0cmFjay0+cGFy LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9ETlhIRCkKPiAgICAgICAgICAgICAgdGFnID0gbW92 X2dldF9kbnhoZF9jb2RlY190YWcocywgdHJhY2spOwo+ICAgICAgICAgIGVsc2UgaWYgKHRyYWNr LT5wYXItPmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPKSB7Cj4gQEAgLTIyMDgsNiAr MjIzMyw5IEBAIHN0YXRpYyBpbnQgbW92X3dyaXRlX3ZpZGVvX3RhZyhBVkZvcm1hdENvbnRleHQg KnMsIEFWSU9Db250ZXh0ICpwYiwgTU9WTXV4Q29udGV4Cj4gICAgICAgICAgbW92X3dyaXRlX2F2 Y2NfdGFnKHBiLCB0cmFjayk7Cj4gICAgICAgICAgaWYgKHRyYWNrLT5tb2RlID09IE1PREVfSVBP RCkKPiAgICAgICAgICAgICAgbW92X3dyaXRlX3V1aWRfdGFnX2lwb2QocGIpOwo+ICsgICAgfQo+ ICsgICAgZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNfaWQgPT1BVl9DT0RFQ19JRF9FVkMpIHsK PiArICAgICAgICBtb3Zfd3JpdGVfZXZjY190YWcocGIsIHRyYWNrKTsgICAgICAgIAo+ICAgICAg fSBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WUDkpIHsKPiAg ICAgICAgICBtb3Zfd3JpdGVfdnBjY190YWcobW92LT5mYywgcGIsIHRyYWNrKTsKPiAgICAgIH0g ZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7Cj4gQEAg LTU3MzcsNiArNTc2NSw3IEBAIGludCBmZl9tb3Zfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4 dCAqcywgQVZQYWNrZXQgKnBrdCkKPiAgICAgIGlmICgocGFyLT5jb2RlY19pZCA9PSBBVl9DT0RF Q19JRF9ETlhIRCB8fAo+ICAgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gy NjQgfHwKPiAgICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IRVZDIHx8Cj4g KyAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfRVZDIHx8Cj4gICAgICAgICAg IHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVFJVRUhEIHx8Cj4gICAgICAgICAgIHBhci0+ Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQUMzKSAmJiAhdHJrLT52b3NfbGVuICYmCj4gICAgICAg ICAgICFUQUdfSVNfQVZDSSh0cmstPnRhZykpIHsKPiBAQCAtNzMxMSw2ICs3MzQwLDcgQEAgc3Rh dGljIGNvbnN0IEFWQ29kZWNUYWcgY29kZWNfbXA0X3RhZ3NbXSA9IHsKPiAgICAgIHsgQVZfQ09E RUNfSURfSDI2NCwgICAgICAgICAgICBNS1RBRygnYScsICd2JywgJ2MnLCAnMycpIH0sCj4gICAg ICB7IEFWX0NPREVDX0lEX0hFVkMsICAgICAgICAgICAgTUtUQUcoJ2gnLCAnZScsICd2JywgJzEn KSB9LAo+ICAgICAgeyBBVl9DT0RFQ19JRF9IRVZDLCAgICAgICAgICAgIE1LVEFHKCdoJywgJ3Yn LCAnYycsICcxJykgfSwKPiArICAgIHsgQVZfQ09ERUNfSURfRVZDLCAgICAgICAgICAgICBNS1RB RygnZScsICd2JywgJ2MnLCAnMScpIH0sCj4gICAgICB7IEFWX0NPREVDX0lEX01QRUcyVklERU8s ICAgICAgTUtUQUcoJ20nLCAncCcsICc0JywgJ3YnKSB9LAo+ICAgICAgeyBBVl9DT0RFQ19JRF9N UEVHMVZJREVPLCAgICAgIE1LVEFHKCdtJywgJ3AnLCAnNCcsICd2JykgfSwKPiAgICAgIHsgQVZf Q09ERUNfSURfTUpQRUcsICAgICAgICAgICBNS1RBRygnbScsICdwJywgJzQnLCAndicpIH0sCj4g ZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Jhd2VuYy5jIGIvbGliYXZmb3JtYXQvcmF3ZW5jLmMK PiBpbmRleCA0YmJhZTc3MTdiLi4zMjJhYjU4M2FiIDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0 L3Jhd2VuYy5jCj4gKysrIGIvbGliYXZmb3JtYXQvcmF3ZW5jLmMKPiBAQCAtMzg2LDYgKzM4Niwy MCBAQCBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9oZXZjX211eGVyID0gewo+ICB9Owo+ICAjZW5k aWYKPiAgCj4gKyNpZiBDT05GSUdfRVZDX01VWEVSCj4gK0FWT3V0cHV0Rm9ybWF0IGZmX2V2Y19t dXhlciA9IHsKPiArICAgIC5uYW1lICAgICAgICAgICAgICA9ICJldmMiLAo+ICsgICAgLmxvbmdf bmFtZSAgICAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoInJhdyBFVkMgdmlkZW8iKSwKPiAr ICAgIC5leHRlbnNpb25zICAgICAgICA9ICJldmMiLAo+ICsgICAgLmF1ZGlvX2NvZGVjICAgICAg ID0gQVZfQ09ERUNfSURfTk9ORSwKPiArICAgIC52aWRlb19jb2RlYyAgICAgICA9IEFWX0NPREVD X0lEX0VWQywKPiArICAgIC53cml0ZV9oZWFkZXIgICAgICA9IGZvcmNlX29uZV9zdHJlYW0sCj4g KyAgICAud3JpdGVfcGFja2V0ICAgICAgPSBmZl9yYXdfd3JpdGVfcGFja2V0LAo+ICsgICAgLmZs YWdzICAgICAgICAgICAgID0gQVZGTVRfTk9USU1FU1RBTVBTLAo+ICt9Owo+ICsjZW5kaWYKPiAr Cj4gKwo+ICAjaWYgQ09ORklHX000Vl9NVVhFUgo+ICBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9t NHZfbXV4ZXIgPSB7Cj4gICAgICAubmFtZSAgICAgICAgICAgICAgPSAibTR2IiwKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWls aW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxt YW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92 ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3Qg InVuc3Vic2NyaWJlIi4K