From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0D782CD3447 for ; Fri, 8 May 2026 12:44:36 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C0BDA10F49D; Fri, 8 May 2026 12:44:34 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.b="U5DXD5c8"; dkim-atps=neutral Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010014.outbound.protection.outlook.com [52.101.46.14]) by gabe.freedesktop.org (Postfix) with ESMTPS id EF37910F49C; Fri, 8 May 2026 12:44:32 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bxj9aVp6kXvlIn9wq/bHg7VJFIZrX2nREgIDA8ktEpu2IbsJEpnNSKcNq1Bqv6QYBp6J6WTC6CgjlrIwMoIG+n2PQ4effzHGhY0D7IxzkLSqSIgDig6v0LM951J3u82Ne0KJeWAItPR0jHLjXkqri1Kx9TtA1hhBGMvTwj76DFm3Fml9SySYa5uoX0/stsSevGsx88DfNMVXaTFmZ5EM7pIxotVBQZz9Lxu+Q8GjDeOiGh9GQKFv7UxtO/DQmNTscNEv2RFzwXQ49wG5jFzRu3GP0tO58Nn/1+1hxyOodcrcmnXqq+1FpRAj7haNpyrdYVjy90z2ee9BsaG/qKrHsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=N1lyPMjcQT3VdZgQ9Bmf+LGz0uBbaSf2c+4S3aOuQP8=; b=M9ip6AKYasXog2sXK9mIvhV28aiQ7rIXX5UrI1amZBppK8k0Iw1FyH75DKlqgSPUm+Jf50VIZbyKqnAyDNs9RH+IpEXCK8D8q316neCEbv0adB6cgUhNbZ4q+qL0zTSw4obL0z4cnrJySU18a3vz05j+PgBx5ToTWFO+GjrKo53qzk2+ycMTOpjjco05GYi8iiNehYEkuKH/X0NSZMgQo2+a3w2D069BHnNBHz75sFy6xAPQ8PSnRVnRVwIbJ48w1nUBtyBZv434DXgl6jzmUkkmhayhXzqNcZmUXZU5Tywh+uWTbUniRTAq/97iczwh7Cf3k0Jj6ZVpr9gAxw4sDQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=N1lyPMjcQT3VdZgQ9Bmf+LGz0uBbaSf2c+4S3aOuQP8=; b=U5DXD5c8B9NG9OCZyS9VTnyJTLuQhpGR0m6goOfQ53cfSygIWyQnBVEh4a9FaBEzcp0Mi80buVjoVkM4bIDVBgGfUlpUhmW6KS6aewBGPcVDW+hT0RZlwXXDxCApygZLJtLiszaPvbHBGTXfoCgjnnThbaxwGubUz++SygS93Ik= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from PH7PR12MB5685.namprd12.prod.outlook.com (2603:10b6:510:13c::22) by SA1PR12MB8144.namprd12.prod.outlook.com (2603:10b6:806:337::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.19; Fri, 8 May 2026 12:44:27 +0000 Received: from PH7PR12MB5685.namprd12.prod.outlook.com ([fe80::ce69:cfae:774d:a65c]) by PH7PR12MB5685.namprd12.prod.outlook.com ([fe80::ce69:cfae:774d:a65c%5]) with mapi id 15.20.9870.023; Fri, 8 May 2026 12:44:27 +0000 Message-ID: <3b72c27c-0681-4bf8-9bb0-50edaf4d6d8f@amd.com> Date: Fri, 8 May 2026 14:44:21 +0200 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] drm/amd/pm: Use guard(mutex) instead of manual lock+unlock To: Andre Jun Hirata , kenneth.feng@amd.com, alexander.deucher@amd.com, airlied@gmail.com, simona@ffwll.ch Cc: amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, gabriel.dimant@usp.br, guilhermesangabriel@usp.br References: <20260508024744.6523-1-andrejhirata@usp.br> <20260508111213.53309-1-andrejhirata@usp.br> Content-Language: en-US From: =?UTF-8?Q?Christian_K=C3=B6nig?= In-Reply-To: <20260508111213.53309-1-andrejhirata@usp.br> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-ClientProxiedBy: MN2PR07CA0028.namprd07.prod.outlook.com (2603:10b6:208:1a0::38) To PH7PR12MB5685.namprd12.prod.outlook.com (2603:10b6:510:13c::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR12MB5685:EE_|SA1PR12MB8144:EE_ X-MS-Office365-Filtering-Correlation-Id: b14cb22f-3fbf-4e02-ec4a-08deacff8a0e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|366016|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: 0bFOFTkBhONnlQuABYS1kmwRVbIGBv1E4TQ2QiUjJkvApMQPkHdjx9rUOj2xo0j4Pr2avsrotM48NCQtj+IWYWwFNFi7jXmejTi4GRTZ3SKUL45brFSIuFknajrai12iZYY+LjyB6goiZlaFV6e1xBpJMh29y8FiqG4XoTHkaErfgoWre/w+LZ3Gl/lDEWTjxYf4MAssJhI38KqiXFsS/j+eVQ2o1rSO2gQsbj7gRq1vsY3yVshK8oCJpgK6iARK7ZHRC8pvFmShg2iXjy4+6RmVaBO4sU9W07bUYjbooQkQIS3uz1Qj6ynk5iBFRtP9JSBzi4JZer3kB+Gp3U9uWRket+Fz62rfLR9PqSvYTqa53zRKU8Ld96An1niNc+twyd958jGMUcFuCFU67iq0ssxt0CpUVlANBAUv0c/ZpWgLJ4CXuv8M+DiiUr21bdGEVh67f1J+qQvpCNyMGI1F01BBfPgxsc48SAj6eaRqeU4frxVDM+TMcpxseIhfa2Lkv0Fd1hNvdgFV/vH6KlGO9Zaw39qWzNGdlq4pXzwgxRbFZM71sP8ybTH5wiAaHlquepUD8YmwPsj/HF3lmu/76kM9j96/6cezpDpPIxlUojNlN15J644RM/0kbq0MmoJRC6+SCllfnTDtgI4ZmXg/kyX4ADKIlhz2CfA+PKhIxvGXxWxRTXGBr3N3YIHKCYxn X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH7PR12MB5685.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(1800799024)(18002099003)(56012099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YnJCQlNhcGFaYVF1YzJqUUpwL2o2Y210NEU3RXhXNGkzQWwzdGtLdzBCKzhB?= =?utf-8?B?OTFnem1MUHNLM283K3lKSVJWMVZtYTRiSVRrNEUrOTRCTHNvVGoyamVFZ21Z?= =?utf-8?B?elVQeER0MXZqc1ZrTXBRVkhUblBpcVJPV29XRnpxekxSR21NYkN4ckZRVnJD?= =?utf-8?B?aGUvTHF4QkpGeUlxNlptQVpTR2NkZzJDTjV4WVN1NHJ4a2tvZWtBSWlHcjBW?= =?utf-8?B?UzdtSEtvaU93enR0YzZzajdoZ3o2WHVrN1NJd3FJSVU3YzVWbnJLcDhrQzBV?= =?utf-8?B?S1hxTGNnWHlJR2lkYmZRL3Z6NmgzckxTQ25tc3VKbVFGQVZFbVZwelpCQ2lr?= =?utf-8?B?YWdOeFZoS08zdThwcDFKZnhEaUpvbTBOY3VyZW9WZURKWFQzNTMxaWtudjB5?= =?utf-8?B?UXVwNHpwVFFwY21aMS9mUmNEQnhNMDRzWW5HanN4aGU4RVp0NjNDcHFNV3Ru?= =?utf-8?B?K3ltZ2VsQmNWYzlaTmxLUlBUVXhOSmFEZXdLTUpac0cwMk52WnM2Z1ZueEc0?= =?utf-8?B?QVMvemVWeVQ4SzlKVndvYTArSCtNZG52S2kwMWUzeVY4VU9PcTl3OG1SSkhl?= =?utf-8?B?NXp1SmhRR2hyQk9Ra2RSOEJOTGtENWtMNXZQK2U1TFRReXl1L0d0R25wMmJq?= =?utf-8?B?cEtzelZySEg1NzljcXNwVW9POVZoQnhxRGRiMTFCQm85SVlEQWNzcFlSclZ3?= =?utf-8?B?MDhkSE56Q1RkMHR2Nkx3YWhOUHBGcG9tMCtzNUlCTjd3MjMrakhJMWdTVGxi?= =?utf-8?B?TUdtWFZRSlYxbk8xd2lva0VWM0NFSnFYWnhLbXlSWm14ajNNS2g5UHpYK1RJ?= =?utf-8?B?SFpsT0QyZ3JXRmtJekw2dTRMc0lpdlZwcXBRcS9GWDFiUnRHYUNKN0JmdzRI?= =?utf-8?B?dGVBUnFIcTdOOVB3ZEs0a2VxbkJHQk5oN2VMcEVuQ0NmVk0wK2NJVVovdTNt?= =?utf-8?B?anZpRnpDR1YyTk5ZZG4xMEN1dUp0SG5VWmd0YnZiQTUxc2JCNURtZUtIMHBs?= =?utf-8?B?cDRFV2VQU2VEd2QxOUNNWWRkSW1rYVV3YTgzTk5QcTI4OGNEV20xS3EzcDNN?= =?utf-8?B?RDFiUFBMRmRoZGdITWtSMGR2cXlncnpMR2ZSajR4dnFjSXNNa0V4MlhtaFBO?= =?utf-8?B?Q3gyUmkxMVNUMGpLbnoxL1VpcmZDRk03U1lsZVBMV1lMRnNOanlQdmVtMU5D?= =?utf-8?B?ZFIwaThXMVg3YnV0NVFtM2VZMTQ3UHV6ajRHVk5WM0RpekhPUmJOdXk5SEZ1?= =?utf-8?B?SXBydVhSREdTTWdsZ0N6L3NxS2ZtaTdBUVkwcnR2d2tZd2RqUG52MHV6Myt1?= =?utf-8?B?MTE4bDdIR1NtV0JndEFDL2ZmclMwUCtXWmpUbldsUTRNcUdoZ0krUHVyRStr?= =?utf-8?B?cTlwemF6ZXl1TU84WTlMbVBIdFZXQ0l0R0ZUZ1B4UHExQkxVNmVVQkl3bFFP?= =?utf-8?B?Y1RRMzZja01hMkplUy9SZjJIRlFBUkhucXJoWnRVZ0ZobnRmVzU1MVZwdEIw?= =?utf-8?B?VVNYVTQ0U202NkpzOEZ6RWFmTUl6eHl1bUxjbm1wZDJJamZSVjI5L1FlRmxW?= =?utf-8?B?cVZXYzRWYVBpYk5FNlMrcEhZNmo0Sy81eW5Lb1p6NGlXQlU2QS9pRzloZVZt?= =?utf-8?B?eTBaTU13M3M2Wm5ER3NCTFNVRE5HWTNwVlVnYUVTNVZTblVrZHdpS3hlVncw?= =?utf-8?B?eEFXNDVsL2xGOFdXN3o1ZUowbmEyY2tpVFZ2YlZYRHlZQUJ0K1REWW1VNnQ3?= =?utf-8?B?YmYxbmZ6VEJQQWFLWEJZc2VNVU9xL0hQb29FZU1OYmlBMFRoVVlidlN1WDla?= =?utf-8?B?bkE4WXU2Rkd1WkcwdHVsNWxaeXpBa2hKVkRzbUNEUW55VmFxMTRrSWs5MVg3?= =?utf-8?B?VGZEVWpGUG8wTU9lc3h4c2tVeUxoU2d6TVVvdmFYUE5XbThzMFFhU29ZK2d2?= =?utf-8?B?L1NYTEcxZmE4R25vZUhNZEt5MGQxVlBFemx4cnQ0SmZFK1JNcUNiOFd2UUpB?= =?utf-8?B?cWFUd0FrUGpraDZENlJRZ2NYYklKellYVXV0V0tsYU5vTnBsV1M1NTNXUHZl?= =?utf-8?B?dkdGbVVJWDlXcHVVK1l3Z1Zub1greVg1QWowY3VtSDFEbnJ0TVROeTl6aEtv?= =?utf-8?B?amo4Nm1mY09KZE13REVIajQ3emhHMHVscXRZODBUb2h4UW9WQnRvdFdXQ3Zk?= =?utf-8?B?STlQRjgzYk8vMEE2djlKMXFWditEUzA0QmlsMEdDd2tGcVQvMExhZmRNeUJQ?= =?utf-8?B?eEdmMlhqVVAwVWY3ZWEyUkM5enlHbGR1RnEzR3RrT2Z1Vmt0YmFzZ2RJdzdz?= =?utf-8?Q?E1xDTKEkhxEoobEi7w?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: b14cb22f-3fbf-4e02-ec4a-08deacff8a0e X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB5685.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 May 2026 12:44:27.3628 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nGMa/ax/iM9ZcHxx8al7r3RZpetgpd6l5jWHQBMkb+L1X6FaPUX/SwvuChwzg4mA X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8144 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gNS84LzI2IDEzOjEyLCBBbmRyZSBKdW4gSGlyYXRhIHdyb3RlOgo+IFVzZSBndWFyZCgpIGFu ZCBzY29wZWRfZ3VhcmQoKSBmb3IgaGFuZGxpbmcgbXV0ZXggbG9jayBpbnN0ZWFkIG9mCj4gbWFu dWFsbHkgbG9ja2luZyBhbmQgdW5sb2NraW5nIHRoZSBtdXRleC4gVGhpcyBwcmV2ZW50cyBmb3Jn b3R0ZW4KPiBsb2NrcyBkdWUgdG8gZWFybHkgZXhpdHMgYW5kIHJlbW92ZXMgdGhlIG5lZWQgb2Yg Z290b3MuCj4gCj4gU2lnbmVkLW9mZi1ieTogQW5kcmUgSnVuIEhpcmF0YSA8YW5kcmVqaGlyYXRh QHVzcC5icj4KPiBDby1kZXZlbG9wZWQtYnk6IEdhYnJpZWwgRGltYW50IDxnYWJyaWVsLmRpbWFu dEB1c3AuYnI+Cj4gU2lnbmVkLW9mZi1ieTogR2FicmllbCBEaW1hbnQgPGdhYnJpZWwuZGltYW50 QHVzcC5icj4KPiBDby1kZXZlbG9wZWQtYnk6IEd1aWxoZXJtZSBHYWJyaWVsIDxndWlsaGVybWVz YW5nYWJyaWVsQHVzcC5icj4KPiBTaWduZWQtb2ZmLWJ5OiBHdWlsaGVybWUgR2FicmllbCA8Z3Vp bGhlcm1lc2FuZ2FicmllbEB1c3AuYnI+CgpKdXN0IGEgZmV3IG1vcmUgc3RpbGUgbml0cyBiZWxv dywgd2l0aCB0aG9zZSBmaXhlZCBSZXZpZXdlZC1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0 aWFuLmtvZW5pZ0BhbWQuY29tPgoKPiAtLS0KPiB2MjogaW5jb3Jwb3JhdGUgQ2hyaXN0aWFuIEvD tm5pZydzIHN1Z2dlc3Rpb25zOgo+ICAgLSB1c2UgcmV0dXJuIGYoKSBkaXJlY3RseSBpbnN0ZWFk IG9mIHJldCA9IGYoKTsgcmV0dXJuIHJldDsKPiAgIC0gdXNlIGVhcmx5IHJldHVybiBwYXR0ZXJu IGJlZm9yZSBndWFyZCgpIHdoZXJlIGFwcGxpY2FibGUKPiAKPiAgZHJpdmVycy9ncHUvZHJtL2Ft ZC9wbS9hbWRncHVfZHBtLmMgfCA4NDcgKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAx IGZpbGUgY2hhbmdlZCwgMjY0IGluc2VydGlvbnMoKyksIDU4MyBkZWxldGlvbnMoLSkKPiAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9hbWRncHVfZHBtLmMgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL3BtL2FtZGdwdV9kcG0uYwo+IGluZGV4IGZlYWRmNjA0Yi4uNDU4Mzk4NWNl IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG0vYW1kZ3B1X2RwbS5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9hbWRncHVfZHBtLmMKPiBAQCAtMzAsNiArMzAsNyBA QAo+ICAjaW5jbHVkZSAiYW1kX3BjaWUuaCIKPiAgI2luY2x1ZGUgImFtZGdwdV9kaXNwbGF5Lmgi Cj4gICNpbmNsdWRlICJod21nci5oIgo+ICsjaW5jbHVkZSA8bGludXgvY2xlYW51cC5oPgo+ICAj aW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+Cj4gICNpbmNsdWRlICJhbWRncHVfc211Lmgi Cj4gIAo+IEBAIC00MSwzMyArNDIsMjUgQEAKPiAgaW50IGFtZGdwdV9kcG1fZ2V0X3NjbGsoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgbG93KQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3Qg YW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWlu dCByZXQgPSAwOwo+ICAKPiAgCWlmICghcHBfZnVuY3MtPmdldF9zY2xrKQo+ICAJCXJldHVybiAw Owo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNz LT5nZXRfc2NsaygoYWRldiktPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCko JmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+Z2V0X3NjbGsoKGFkZXYpLT5w b3dlcnBsYXkucHBfaGFuZGxlLAo+ICAJCQkJIGxvdyk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYt PnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2Rw bV9nZXRfbWNsayhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBsb3cpCj4gIHsKPiAg CWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBw X2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYgKCFwcF9mdW5jcy0+Z2V0X21jbGsp Cj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0J cmV0ID0gcHBfZnVuY3MtPmdldF9tY2xrKChhZGV2KS0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAr CWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRf bWNsaygoYWRldiktPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkgbG93KTsKPiAtCW11dGV4 X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4g IGludCBhbWRncHVfZHBtX3NldF9wb3dlcmdhdGluZ19ieV9zbXUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCj4gQEAgLTgwLDEzICs3MywxMiBAQCBpbnQgYW1kZ3B1X2RwbV9zZXRfcG93ZXJn YXRpbmdfYnlfc211KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAJZW51bSBpcF9wb3dl cl9zdGF0ZSBwd3Jfc3RhdGUgPSBnYXRlID8gUE9XRVJfU1RBVEVfT0ZGIDogUE9XRVJfU1RBVEVf T047Cj4gIAlib29sIGlzX3ZjbiA9IGJsb2NrX3R5cGUgPT0gQU1EX0lQX0JMT0NLX1RZUEVfVkNO Owo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gKwlndWFyZChtdXRl eCkoJmFkZXYtPnBtLm11dGV4KTsKPiAgCWlmIChhdG9taWNfcmVhZCgmYWRldi0+cG0ucHdyX3N0 YXRlW2Jsb2NrX3R5cGVdKSA9PSBwd3Jfc3RhdGUgJiYKPiAgCQkJKCFpc192Y24gfHwgYWRldi0+ dmNuLm51bV92Y25faW5zdCA9PSAxKSkgewo+ICAJCWRldl9kYmcoYWRldi0+ZGV2LCAiSVAgYmxv Y2slZCBhbHJlYWR5IGluIHRoZSB0YXJnZXQgJXMgc3RhdGUhIiwKPiAgCQkJCWJsb2NrX3R5cGUs IGdhdGUgPyAiZ2F0ZSIgOiAidW5nYXRlIik7Cj4gLQkJZ290byBvdXRfdW5sb2NrOwo+ICsJCXJl dHVybiByZXQ7Cj4gIAl9Cj4gIAo+ICAJc3dpdGNoIChibG9ja190eXBlKSB7Cj4gQEAgLTExNSw5 ICsxMDcsNiBAQCBpbnQgYW1kZ3B1X2RwbV9zZXRfcG93ZXJnYXRpbmdfYnlfc211KHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LAo+ICAJaWYgKCFyZXQpCj4gIAkJYXRvbWljX3NldCgmYWRldi0+ cG0ucHdyX3N0YXRlW2Jsb2NrX3R5cGVdLCBwd3Jfc3RhdGUpOwo+ICAKPiAtb3V0X3VubG9jazoK PiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAgCXJldHVybiByZXQ7Cj4g IH0KPiAgCj4gQEAgLTEyNiw5ICsxMTUsOSBAQCBpbnQgYW1kZ3B1X2RwbV9zZXRfZ2Z4X3Bvd2Vy X3VwX2J5X2ltdShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgCXN0cnVjdCBzbXVfY29u dGV4dCAqc211ID0gYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZTsKPiAgCWludCByZXQgPSAtRU9Q Tk9UU1VQUDsKCldoaWxlIGF0IGl0IHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgc3VwZXJmbG91cyBz aW5jZSB0aGUgdmFsdWUgaXMgb3ZlcndyaXR0ZW4gZGlyZWN0bHkgYmVsb3cuCgo+ICAKPiAtCW11 dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHNtdV9zZXRfZ2Z4X3Bvd2VyX3Vw X2J5X2ltdShzbXUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlzY29w ZWRfZ3VhcmQobXV0ZXgsICZhZGV2LT5wbS5tdXRleCkgewo+ICsJCXJldCA9IHNtdV9zZXRfZ2Z4 X3Bvd2VyX3VwX2J5X2ltdShzbXUpOwo+ICsJfQo+ICAKPiAgCW1zbGVlcCgxMCk7Cj4gIAo+IEBA IC0xMzksNDQgKzEyOCwzMSBAQCBpbnQgYW1kZ3B1X2RwbV9iYWNvX2VudGVyKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9m dW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAgCXZvaWQgKnBwX2hhbmRsZSA9IGFk ZXYtPnBvd2VycGxheS5wcF9oYW5kbGU7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIXBw X2Z1bmNzIHx8ICFwcF9mdW5jcy0+c2V0X2FzaWNfYmFjb19zdGF0ZSkKPiAgCQlyZXR1cm4gLUVO T0VOVDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+ICsJZ3VhcmQo bXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gIAkvKiBlbnRlciBCQUNPIHN0YXRlICovCj4gLQly ZXQgPSBwcF9mdW5jcy0+c2V0X2FzaWNfYmFjb19zdGF0ZShwcF9oYW5kbGUsIDEpOwo+IC0KPiAt CW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gKwly ZXR1cm4gcHBfZnVuY3MtPnNldF9hc2ljX2JhY29fc3RhdGUocHBfaGFuZGxlLCAxKTsKPiAgfQo+ ICAKPiAgaW50IGFtZGdwdV9kcG1fYmFjb19leGl0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBv d2VycGxheS5wcF9mdW5jczsKPiAgCXZvaWQgKnBwX2hhbmRsZSA9IGFkZXYtPnBvd2VycGxheS5w cF9oYW5kbGU7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIXBwX2Z1bmNzIHx8ICFwcF9m dW5jcy0+c2V0X2FzaWNfYmFjb19zdGF0ZSkKPiAgCQlyZXR1cm4gLUVOT0VOVDsKPiAgCj4gLQlt dXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5w bS5tdXRleCk7Cj4gIAkvKiBleGl0IEJBQ08gc3RhdGUgKi8KPiAtCXJldCA9IHBwX2Z1bmNzLT5z ZXRfYXNpY19iYWNvX3N0YXRlKHBwX2hhbmRsZSwgMCk7Cj4gLQo+IC0JbXV0ZXhfdW5sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCXJldHVybiBwcF9mdW5jcy0+ c2V0X2FzaWNfYmFjb19zdGF0ZShwcF9oYW5kbGUsIDApOwo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1 X2RwbV9zZXRfbXAxX3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAJCQkgICAg IGVudW0gcHBfbXAxX3N0YXRlIG1wMV9zdGF0ZSkKPiAgewo+IC0JaW50IHJldCA9IDA7Cj4gIAlj b25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9m dW5jczsKPiAgCj4gIAlpZiAobXAxX3N0YXRlID09IFBQX01QMV9TVEFURV9GTFIpIHsKPiBAQCAt MTg0LDIzICsxNjAsMTkgQEAgaW50IGFtZGdwdV9kcG1fc2V0X21wMV9zdGF0ZShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwKPiAgCQlpZiAoYW1kZ3B1X3NyaW92X3ZmKGFkZXYpKQo+ICAJCQlh ZGV2LT5wbS5kcG1fZW5hYmxlZCA9IGZhbHNlOwo+ICAJfSBlbHNlIGlmIChwcF9mdW5jcyAmJiBw cF9mdW5jcy0+c2V0X21wMV9zdGF0ZSkgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4 KTsKPiAtCj4gLQkJcmV0ID0gcHBfZnVuY3MtPnNldF9tcDFfc3RhdGUoCj4gKwkJZ3VhcmQobXV0 ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwkJcmV0dXJuIHBwX2Z1bmNzLT5zZXRfbXAxX3N0YXRl KAo+ICAJCQkJYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgCQkJCW1wMV9zdGF0ZSk7Cj4g LQo+IC0JCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICAJfQo+ICAKPiAtCXJldHVy biByZXQ7Cj4gKwlyZXR1cm4gMDsKPiAgfQo+ICAKPiAgaW50IGFtZGdwdV9kcG1faXNfYmFjb19z dXBwb3J0ZWQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gIHsKPiAgCWNvbnN0IHN0cnVj dCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+ICAJ dm9pZCAqcHBfaGFuZGxlID0gYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZTsKPiAtCWludCByZXQ7 Cj4gIAo+ICAJaWYgKCFwcF9mdW5jcyB8fCAhcHBfZnVuY3MtPmdldF9hc2ljX2JhY29fY2FwYWJp bGl0eSkKPiAgCQlyZXR1cm4gMDsKPiBAQCAtMjE2LDQ5ICsxODgsMzIgQEAgaW50IGFtZGdwdV9k cG1faXNfYmFjb19zdXBwb3J0ZWQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gIAlpZiAo YWRldi0+aW5fczMpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0KPiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRfYXNpY19iYWNvX2NhcGFiaWxpdHko cHBfaGFuZGxlKTsKPiAtCj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4g LQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1 cm4gcHBfZnVuY3MtPmdldF9hc2ljX2JhY29fY2FwYWJpbGl0eShwcF9oYW5kbGUpOwo+ICB9Cj4g IAo+ICBpbnQgYW1kZ3B1X2RwbV9tb2RlMl9yZXNldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl dikKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5w b3dlcnBsYXkucHBfZnVuY3M7Cj4gIAl2b2lkICpwcF9oYW5kbGUgPSBhZGV2LT5wb3dlcnBsYXku cHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYgKCFwcF9mdW5jcyB8fCAhcHBf ZnVuY3MtPmFzaWNfcmVzZXRfbW9kZV8yKQo+ICAJCXJldHVybiAtRU5PRU5UOwo+ICAKPiAtCW11 dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXQgPSBwcF9mdW5jcy0+YXNpY19y ZXNldF9tb2RlXzIocHBfaGFuZGxlKTsKPiAtCj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11 dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRl eCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmFzaWNfcmVzZXRfbW9kZV8yKHBwX2hhbmRsZSk7Cj4g IH0KPiAgCj4gIGludCBhbWRncHVfZHBtX2VuYWJsZV9nZnhfZmVhdHVyZXMoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1 bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+ICAJdm9pZCAqcHBfaGFuZGxlID0gYWRl di0+cG93ZXJwbGF5LnBwX2hhbmRsZTsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAgCWlmICghcHBf ZnVuY3MgfHwgIXBwX2Z1bmNzLT5hc2ljX3Jlc2V0X2VuYWJsZV9nZnhfZmVhdHVyZXMpCj4gIAkJ cmV0dXJuIC1FTk9FTlQ7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0K PiAtCXJldCA9IHBwX2Z1bmNzLT5hc2ljX3Jlc2V0X2VuYWJsZV9nZnhfZmVhdHVyZXMocHBfaGFu ZGxlKTsKPiAtCj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1 cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBf ZnVuY3MtPmFzaWNfcmVzZXRfZW5hYmxlX2dmeF9mZWF0dXJlcyhwcF9oYW5kbGUpOwo+ICB9Cj4g IAo+ICBpbnQgYW1kZ3B1X2RwbV9iYWNvX3Jlc2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+IEBAIC0yNzAsNzUgKzIyNSw2NCBAQCBpbnQgYW1kZ3B1X2RwbV9iYWNvX3Jlc2V0KHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAJaWYgKCFwcF9mdW5jcyB8fCAhcHBfZnVuY3MtPnNl dF9hc2ljX2JhY29fc3RhdGUpCj4gIAkJcmV0dXJuIC1FTk9FTlQ7Cj4gIAo+IC0JbXV0ZXhfbG9j aygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4g IAo+ICAJLyogZW50ZXIgQkFDTyBzdGF0ZSAqLwo+ICAJcmV0ID0gcHBfZnVuY3MtPnNldF9hc2lj X2JhY29fc3RhdGUocHBfaGFuZGxlLCAxKTsKPiAgCWlmIChyZXQpCj4gLQkJZ290byBvdXQ7Cj4g KwkJcmV0dXJuIHJldDsKPiAgCj4gIAkvKiBleGl0IEJBQ08gc3RhdGUgKi8KPiAgCXJldCA9IHBw X2Z1bmNzLT5zZXRfYXNpY19iYWNvX3N0YXRlKHBwX2hhbmRsZSwgMCk7Cj4gLQo+IC1vdXQ6Cj4g LQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAg Cj4gIGJvb2wgYW1kZ3B1X2RwbV9pc19tb2RlMV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYpCj4gIHsKPiAgCXN0cnVjdCBzbXVfY29udGV4dCAqc211ID0gYWRldi0+ cG93ZXJwbGF5LnBwX2hhbmRsZTsKPiAtCWJvb2wgc3VwcG9ydF9tb2RlMV9yZXNldCA9IGZhbHNl Owo+ICAKPiAtCWlmIChpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkgewo+IC0JCW11dGV4X2xvY2so JmFkZXYtPnBtLm11dGV4KTsKPiAtCQlzdXBwb3J0X21vZGUxX3Jlc2V0ID0gc211X21vZGUxX3Jl c2V0X2lzX3N1cHBvcnQoc211KTsKPiAtCQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsK PiArCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikpIHsKPiArCQlyZXR1cm4gZmFsc2U7Cj4g IAl9CgpUaGUge30gc2hvdWxkIGJlIGRyb3BwZWQgYXJvdW5kIHNpbmdsZSBsaW5lIGlmLiBTYW1l IG9uIGEgY291cGxlIG9mIG90aGVyIGxvY2F0aW9ucy4KCkkgc3VnZ2VzdCB0byBydW4gY2hlY2tw YXRjaC5wbCBvbmNlIG1vcmUsIGl0IHdpbGwgbW9zdCBsaWtlbHkgY29tcGxhaW4uCgpSZWdhcmRz LApDaHJpc3RpYW4uCgo+ICAKPiAtCXJldHVybiBzdXBwb3J0X21vZGUxX3Jlc2V0Owo+ICsJZ3Vh cmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gc211X21vZGUxX3Jlc2V0X2lz X3N1cHBvcnQoc211KQo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9tb2RlMV9yZXNldChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgewo+ICAJc3RydWN0IHNtdV9jb250ZXh0ICpzbXUg PSBhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IC1FT1BOT1RTVVBQOwo+ ICAKPiAtCWlmIChpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkgewo+IC0JCW11dGV4X2xvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiAtCQlyZXQgPSBzbXVfbW9kZTFfcmVzZXQoc211KTsKPiAtCQltdXRl eF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiArCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRl dikpIHsKPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gIAl9Cj4gIAo+IC0JcmV0dXJuIHJldDsK PiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHNtdV9tb2RlMV9y ZXNldChzbXUpOwo+ICB9Cj4gIAo+ICBib29sIGFtZGdwdV9kcG1faXNfbGlua19yZXNldF9zdXBw b3J0ZWQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gIHsKPiAgCXN0cnVjdCBzbXVfY29u dGV4dCAqc211ID0gYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZTsKPiAtCWJvb2wgc3VwcG9ydF9s aW5rX3Jlc2V0ID0gZmFsc2U7Cj4gIAo+ICAJaWYgKGlzX3N1cHBvcnRfc3dfc211KGFkZXYpKSB7 Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCXN1cHBvcnRfbGlua19yZXNl dCA9IHNtdV9saW5rX3Jlc2V0X2lzX3N1cHBvcnQoc211KTsKPiAtCQltdXRleF91bmxvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gIAo+IC0JcmV0dXJuIHN1 cHBvcnRfbGlua19yZXNldDsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJ cmV0dXJuIHNtdV9saW5rX3Jlc2V0X2lzX3N1cHBvcnQoc211KTsKPiAgfQo+ICAKPiAgaW50IGFt ZGdwdV9kcG1fbGlua19yZXNldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgewo+ICAJ c3RydWN0IHNtdV9jb250ZXh0ICpzbXUgPSBhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlOwo+IC0J aW50IHJldCA9IC1FT1BOT1RTVVBQOwo+ICAKPiAtCWlmIChpc19zdXBwb3J0X3N3X3NtdShhZGV2 KSkgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCQlyZXQgPSBzbXVfbGlu a19yZXNldChzbXUpOwo+IC0JCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJaWYg KCFpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkgewo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAg CX0KPiAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7 Cj4gKwlyZXR1cm4gc211X2xpbmtfcmVzZXQoc211KTsKPiAgfQo+ICAKPiAgaW50IGFtZGdwdV9k cG1fc3dpdGNoX3Bvd2VyX3Byb2ZpbGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gQEAg LTM0NiwxMDAgKzI5MCw4OCBAQCBpbnQgYW1kZ3B1X2RwbV9zd2l0Y2hfcG93ZXJfcHJvZmlsZShz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgCQkJCSAgICBib29sIGVuKQo+ICB7Cj4gIAlj b25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9m dW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAgCWlmIChhbWRncHVfc3Jpb3ZfdmYoYWRldikp Cj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JaWYgKHBwX2Z1bmNzICYmIHBwX2Z1bmNzLT5zd2l0Y2hf cG93ZXJfcHJvZmlsZSkgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCQly ZXQgPSBwcF9mdW5jcy0+c3dpdGNoX3Bvd2VyX3Byb2ZpbGUoCj4gLQkJCWFkZXYtPnBvd2VycGxh eS5wcF9oYW5kbGUsIHR5cGUsIGVuKTsKPiAtCQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4 KTsKPiArCWlmICghcHBfZnVuY3MgfHwgIXBwX2Z1bmNzLT5zd2l0Y2hfcG93ZXJfcHJvZmlsZSkg ewo+ICsJCXJldHVybiAwOwkKPiAgCX0KPiAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0 ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPnN3aXRjaF9wb3dlcl9w cm9maWxlKAo+ICsJCQlhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCB0eXBlLCBlbik7Cj4gIH0K PiAgCj4gIGludCBhbWRncHVfZHBtX3BhdXNlX3Bvd2VyX3Byb2ZpbGUoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsCj4gIAkJCQkgICBib29sIHBhdXNlKQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3Qg YW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWlu dCByZXQgPSAwOwo+ICAKPiAgCWlmIChhbWRncHVfc3Jpb3ZfdmYoYWRldikpCj4gIAkJcmV0dXJu IDA7Cj4gIAo+IC0JaWYgKHBwX2Z1bmNzICYmIHBwX2Z1bmNzLT5wYXVzZV9wb3dlcl9wcm9maWxl KSB7Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCXJldCA9IHBwX2Z1bmNz LT5wYXVzZV9wb3dlcl9wcm9maWxlKAo+IC0JCQlhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCBw YXVzZSk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlpZiAoIXBwX2Z1 bmNzIHx8ICFwcF9mdW5jcy0+cGF1c2VfcG93ZXJfcHJvZmlsZSkgewo+ICsJCXJldHVybiAwOwo+ ICAJfQo+ICAKPiAtCXJldHVybiByZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4 KTsKPiArCXJldHVybiBwcF9mdW5jcy0+cGF1c2VfcG93ZXJfcHJvZmlsZSgKPiArCQkJYWRldi0+ cG93ZXJwbGF5LnBwX2hhbmRsZSwgcGF1c2UpOwo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9z ZXRfeGdtaV9wc3RhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCSAgICAgICB1 aW50MzJfdCBwc3RhdGUpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1 bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+IC0J aWYgKHBwX2Z1bmNzICYmIHBwX2Z1bmNzLT5zZXRfeGdtaV9wc3RhdGUpIHsKPiAtCQltdXRleF9s b2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQkJcmV0ID0gcHBfZnVuY3MtPnNldF94Z21pX3BzdGF0 ZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+IC0JCQkJCQkJCXBzdGF0ZSk7Cj4gLQkJbXV0 ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlpZiAoIXBwX2Z1bmNzIHx8ICFwcF9mdW5j cy0+c2V0X3hnbWlfcHN0YXRlKSB7Cj4gKwkJcmV0dXJuIDA7Cj4gIAl9Cj4gIAo+IC0JcmV0dXJu IHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1 bmNzLT5zZXRfeGdtaV9wc3RhdGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCQkJCQkJ CQlwc3RhdGUpOwo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9zZXRfZGZfY3N0YXRlKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAJCQkgICAgIHVpbnQzMl90IGNzdGF0ZSkKPiAgewo+ IC0JaW50IHJldCA9IDA7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9 IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAgCXZvaWQgKnBwX2hhbmRsZSA9IGFkZXYtPnBv d2VycGxheS5wcF9oYW5kbGU7Cj4gIAo+IC0JaWYgKHBwX2Z1bmNzICYmIHBwX2Z1bmNzLT5zZXRf ZGZfY3N0YXRlKSB7Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCXJldCA9 IHBwX2Z1bmNzLT5zZXRfZGZfY3N0YXRlKHBwX2hhbmRsZSwgY3N0YXRlKTsKPiAtCQltdXRleF91 bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiArCWlmICghcHBfZnVuY3MgfHwgIXBwX2Z1bmNzLT5z ZXRfZGZfY3N0YXRlKSB7Cj4gKwkJcmV0dXJuIDA7Cj4gIAl9Cj4gIAo+IC0JcmV0dXJuIHJldDsK PiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5z ZXRfZGZfY3N0YXRlKHBwX2hhbmRsZSwgY3N0YXRlKTsKPiAgfQo+ICAKPiAgc3NpemVfdCBhbWRn cHVfZHBtX2dldF9wbV9wb2xpY3lfaW5mbyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAg CQkJCSAgICAgIGVudW0gcHBfcG1fcG9saWN5IHBfdHlwZSwgY2hhciAqYnVmKQo+ICB7Cj4gIAlz dHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGU7Cj4gLQlp bnQgcmV0ID0gLUVPUE5PVFNVUFA7Cj4gIAo+IC0JaWYgKGlzX3N1cHBvcnRfc3dfc211KGFkZXYp KSB7Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCXJldCA9IHNtdV9nZXRf cG1fcG9saWN5X2luZm8oc211LCBwX3R5cGUsIGJ1Zik7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2 LT5wbS5tdXRleCk7Cj4gKwlpZiAoIWlzX3N1cHBvcnRfc3dfc211KGFkZXYpKSB7Cj4gKwkJcmV0 dXJuIC1FT1BOT1RTVVBQOwo+ICAJfQo+ICAKPiAtCXJldHVybiByZXQ7Cj4gKwlndWFyZChtdXRl eCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBzbXVfZ2V0X3BtX3BvbGljeV9pbmZvKHNt dSwgcF90eXBlLCBidWYpOwo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9zZXRfcG1fcG9saWN5 KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBpbnQgcG9saWN5X3R5cGUsCj4gIAkJCSAgICAg aW50IHBvbGljeV9sZXZlbCkKPiAgewo+ICAJc3RydWN0IHNtdV9jb250ZXh0ICpzbXUgPSBhZGV2 LT5wb3dlcnBsYXkucHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IC1FT1BOT1RTVVBQOwo+ICAKPiAt CWlmIChpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBt Lm11dGV4KTsKPiAtCQlyZXQgPSBzbXVfc2V0X3BtX3BvbGljeShzbXUsIHBvbGljeV90eXBlLCBw b2xpY3lfbGV2ZWwpOwo+IC0JCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJaWYg KCFpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkgewo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAg CX0KPiAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7 Cj4gKwlyZXR1cm4gc211X3NldF9wbV9wb2xpY3koc211LCBwb2xpY3lfdHlwZSwgcG9saWN5X2xl dmVsKTsKPiAgfQo+ICAKPiAgaW50IGFtZGdwdV9kcG1fZW5hYmxlX21ncHVfZmFuX2Jvb3N0KHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+IEBAIC00NDcsMTUgKzM3OSwxMyBAQCBpbnQgYW1k Z3B1X2RwbV9lbmFibGVfbWdwdV9mYW5fYm9vc3Qoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp Cj4gIAl2b2lkICpwcF9oYW5kbGUgPSBhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlOwo+ICAJY29u c3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPQo+ICAJCQlhZGV2LT5wb3dlcnBsYXku cHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gLQlpZiAocHBfZnVuY3MgJiYgcHBfZnVu Y3MtPmVuYWJsZV9tZ3B1X2Zhbl9ib29zdCkgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11 dGV4KTsKPiAtCQlyZXQgPSBwcF9mdW5jcy0+ZW5hYmxlX21ncHVfZmFuX2Jvb3N0KHBwX2hhbmRs ZSk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlpZiAoIXBwX2Z1bmNz IHx8ICFwcF9mdW5jcy0+ZW5hYmxlX21ncHVfZmFuX2Jvb3N0KSB7Cj4gKwkJcmV0dXJuIDA7Cj4g IAl9Cj4gIAo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgp Owo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5lbmFibGVfbWdwdV9mYW5fYm9vc3QocHBfaGFuZGxlKTsK PiAgfQo+ICAKPiAgaW50IGFtZGdwdV9kcG1fc2V0X2Nsb2NrZ2F0aW5nX2J5X3NtdShzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAtNDY0LDE2ICszOTQsMTQgQEAgaW50IGFtZGdwdV9k cG1fc2V0X2Nsb2NrZ2F0aW5nX2J5X3NtdShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAg CXZvaWQgKnBwX2hhbmRsZSA9IGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGU7Cj4gIAljb25zdCBz dHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9Cj4gIAkJCWFkZXYtPnBvd2VycGxheS5wcF9m dW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAtCWlmIChwcF9mdW5jcyAmJiBwcF9mdW5jcy0+ c2V0X2Nsb2NrZ2F0aW5nX2J5X3NtdSkgewo+IC0JCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4 KTsKPiAtCQlyZXQgPSBwcF9mdW5jcy0+c2V0X2Nsb2NrZ2F0aW5nX2J5X3NtdShwcF9oYW5kbGUs Cj4gLQkJCQkJCSAgICAgICBtc2dfaWQpOwo+IC0JCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0 ZXgpOwo+ICsJaWYgKCFwcF9mdW5jcyB8fCAhcHBfZnVuY3MtPnNldF9jbG9ja2dhdGluZ19ieV9z bXUpIHsKPiArCQlyZXR1cm4gMDsKPiAgCX0KPiAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQo bXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPnNldF9jbG9ja2dh dGluZ19ieV9zbXUocHBfaGFuZGxlLAo+ICsJCQkJCQkgICAgICAgbXNnX2lkKTsKPiAgfQo+ICAK PiAgaW50IGFtZGdwdV9kcG1fc211X2kyY19idXNfYWNjZXNzKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAo+IEBAIC00ODIsMjIgKzQxMCwyMCBAQCBpbnQgYW1kZ3B1X2RwbV9zbXVfaTJjX2J1 c19hY2Nlc3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAl2b2lkICpwcF9oYW5kbGUg PSBhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlOwo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5j cyAqcHBfZnVuY3MgPQo+ICAJCQlhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0 ID0gLUVPUE5PVFNVUFA7Cj4gIAo+IC0JaWYgKHBwX2Z1bmNzICYmIHBwX2Z1bmNzLT5zbXVfaTJj X2J1c19hY2Nlc3MpIHsKPiAtCQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQkJcmV0 ID0gcHBfZnVuY3MtPnNtdV9pMmNfYnVzX2FjY2VzcyhwcF9oYW5kbGUsCj4gLQkJCQkJCSAgIGFj cXVpcmUpOwo+IC0JCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJaWYgKCFwcF9m dW5jcyB8fCAhcHBfZnVuY3MtPnNtdV9pMmNfYnVzX2FjY2Vzcykgewo+ICsJCXJldHVybiAtRU9Q Tk9UU1VQUDsKPiAgCX0KPiAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2 LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gPSBwcF9mdW5jcy0+c211X2kyY19idXNfYWNjZXNzKHBw X2hhbmRsZSwKPiArCQkJCQkJICAgYWNxdWlyZSk7Cj4gIH0KPiAgCj4gIHZvaWQgYW1kZ3B1X3Bt X2FjcGlfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgewo+ICAJ aWYgKGFkZXYtPnBtLmRwbV9lbmFibGVkKSB7Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0 ZXgpOwo+ICsJCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICAJCWlmIChwb3dlcl9z dXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKCkgPiAwKQo+ICAJCQlhZGV2LT5wbS5hY19wb3dlciA9 IHRydWU7Cj4gIAkJZWxzZQo+IEBAIC01MTAsNyArNDM2LDYgQEAgdm9pZCBhbWRncHVfcG1fYWNw aV9ldmVudF9oYW5kbGVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAJCWlmIChpc19z dXBwb3J0X3N3X3NtdShhZGV2KSkKPiAgCQkJc211X3NldF9hY19kYyhhZGV2LT5wb3dlcnBsYXku cHBfaGFuZGxlKTsKPiAgCj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gIAl9 Cj4gIH0KPiAgCj4gQEAgLTUxOCw0OSArNDQzLDQzIEBAIGludCBhbWRncHVfZHBtX3JlYWRfc2Vu c29yKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBlbnVtIGFtZF9wcF9zZW5zb3JzIHNlbnNv Cj4gIAkJCSAgIHZvaWQgKmRhdGEsIHVpbnQzMl90ICpzaXplKQo+ICB7Cj4gIAljb25zdCBzdHJ1 Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAt CWludCByZXQgPSAtRUlOVkFMOwo+ICAKPiAgCWlmICghZGF0YSB8fCAhc2l6ZSkKPiAgCQlyZXR1 cm4gLUVJTlZBTDsKPiAgCj4gLQlpZiAocHBfZnVuY3MgJiYgcHBfZnVuY3MtPnJlYWRfc2Vuc29y KSB7Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCXJldCA9IHBwX2Z1bmNz LT5yZWFkX3NlbnNvcihhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJaWYgKCFwcF9mdW5j cyB8fCAhcHBfZnVuY3MtPnJlYWRfc2Vuc29yKSB7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9 Cj4gKwo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVu Y3MtPnJlYWRfc2Vuc29yKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkJICAgIHNl bnNvciwKPiAgCQkJCQkgICAgZGF0YSwKPiAgCQkJCQkgICAgc2l6ZSk7Cj4gLQkJbXV0ZXhfdW5s b2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgfQo+ICAK PiAgaW50IGFtZGdwdV9kcG1fZ2V0X2FwdV90aGVybWFsX2xpbWl0KHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LCB1aW50MzJfdCAqbGltaXQpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1f ZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9 IC1FT1BOT1RTVVBQOwo+ICAKPiAtCWlmIChwcF9mdW5jcyAmJiBwcF9mdW5jcy0+Z2V0X2FwdV90 aGVybWFsX2xpbWl0KSB7Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCXJl dCA9IHBwX2Z1bmNzLT5nZXRfYXB1X3RoZXJtYWxfbGltaXQoYWRldi0+cG93ZXJwbGF5LnBwX2hh bmRsZSwgbGltaXQpOwo+IC0JCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJaWYg KCFwcF9mdW5jcyB8fCAhcHBfZnVuY3MtPmdldF9hcHVfdGhlcm1hbF9saW1pdCkgewo+ICsJCXJl dHVybiAtRU9QTk9UU1VQUDsKPiAgCX0KPiAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0 ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF9hcHVfdGhlcm1h bF9saW1pdChhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCBsaW1pdCk7Cj4gIH0KPiAgCj4gIGlu dCBhbWRncHVfZHBtX3NldF9hcHVfdGhlcm1hbF9saW1pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwgdWludDMyX3QgbGltaXQpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3Mg KnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IC1FT1BO T1RTVVBQOwo+ICAKPiAtCWlmIChwcF9mdW5jcyAmJiBwcF9mdW5jcy0+c2V0X2FwdV90aGVybWFs X2xpbWl0KSB7Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCXJldCA9IHBw X2Z1bmNzLT5zZXRfYXB1X3RoZXJtYWxfbGltaXQoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwg bGltaXQpOwo+IC0JCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJaWYgKCFwcF9m dW5jcyB8fCAhcHBfZnVuY3MtPnNldF9hcHVfdGhlcm1hbF9saW1pdCkgewo+ICsJCXJldHVybiAt RU9QTk9UU1VQUDsKPiAgCX0KPiAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZh ZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPnNldF9hcHVfdGhlcm1hbF9saW1p dChhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCBsaW1pdCk7Cj4gIH0KPiAgCj4gIHZvaWQgYW1k Z3B1X2RwbV9jb21wdXRlX2Nsb2NrcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiBAQCAt NTgzLDkgKzUwMiw4IEBAIHZvaWQgYW1kZ3B1X2RwbV9jb21wdXRlX2Nsb2NrcyhzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldikKPiAgCQkJYW1kZ3B1X2ZlbmNlX3dhaXRfZW1wdHkocmluZyk7Cj4g IAl9Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJZ3VhcmQobXV0ZXgp KCZhZGV2LT5wbS5tdXRleCk7Cj4gIAlwcF9mdW5jcy0+cG1fY29tcHV0ZV9jbG9ja3MoYWRldi0+ cG93ZXJwbGF5LnBwX2hhbmRsZSk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAgfQo+ICAKPiAgdm9pZCBhbWRncHVfZHBtX2VuYWJsZV91dmQoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsIGJvb2wgZW5hYmxlKQo+IEBAIC01OTMsMTQgKzUxMSwxNCBAQCB2b2lkIGFtZGdw dV9kcG1fZW5hYmxlX3V2ZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBlbmFibGUp Cj4gIAlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoYWRldi0+ZmFtaWx5ID09IEFNREdQVV9GQU1J TFlfU0kpIHsKPiAtCQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQkJaWYgKGVuYWJs ZSkgewo+IC0JCQlhZGV2LT5wbS5kcG0udXZkX2FjdGl2ZSA9IHRydWU7Cj4gLQkJCWFkZXYtPnBt LmRwbS5zdGF0ZSA9IFBPV0VSX1NUQVRFX1RZUEVfSU5URVJOQUxfVVZEOwo+IC0JCX0gZWxzZSB7 Cj4gLQkJCWFkZXYtPnBtLmRwbS51dmRfYWN0aXZlID0gZmFsc2U7Cj4gKwkJc2NvcGVkX2d1YXJk KG11dGV4LCAmYWRldi0+cG0ubXV0ZXgpIHsKPiArCQkJaWYgKGVuYWJsZSkgewo+ICsJCQkJYWRl di0+cG0uZHBtLnV2ZF9hY3RpdmUgPSB0cnVlOwo+ICsJCQkJYWRldi0+cG0uZHBtLnN0YXRlID0g UE9XRVJfU1RBVEVfVFlQRV9JTlRFUk5BTF9VVkQ7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlhZGV2 LT5wbS5kcG0udXZkX2FjdGl2ZSA9IGZhbHNlOwo+ICsJCQl9Cj4gIAkJfQo+IC0JCW11dGV4X3Vu bG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICAKPiAgCQlhbWRncHVfZHBtX2NvbXB1dGVfY2xvY2tz KGFkZXYpOwo+ICAJCXJldHVybjsKPiBAQCAtNjI3LDE1ICs1NDUsMTUgQEAgdm9pZCBhbWRncHVf ZHBtX2VuYWJsZV92Y2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgZW5hYmxlKQo+ ICAJaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYgKGFkZXYtPmZhbWlseSA9PSBBTURHUFVfRkFNSUxZ X1NJKSB7Cj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JCWlmIChlbmFibGUp IHsKPiAtCQkJYWRldi0+cG0uZHBtLnZjZV9hY3RpdmUgPSB0cnVlOwo+IC0JCQkvKiBYWFggc2Vs ZWN0IHZjZSBsZXZlbCBiYXNlZCBvbiByaW5nL3Rhc2sgKi8KPiAtCQkJYWRldi0+cG0uZHBtLnZj ZV9sZXZlbCA9IEFNRF9WQ0VfTEVWRUxfQUNfQUxMOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCWFkZXYt PnBtLmRwbS52Y2VfYWN0aXZlID0gZmFsc2U7Cj4gKwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYWRl di0+cG0ubXV0ZXgpIHsKPiArCQkJaWYgKGVuYWJsZSkgewo+ICsJCQkJYWRldi0+cG0uZHBtLnZj ZV9hY3RpdmUgPSB0cnVlOwo+ICsJCQkJLyogWFhYIHNlbGVjdCB2Y2UgbGV2ZWwgYmFzZWQgb24g cmluZy90YXNrICovCj4gKwkJCQlhZGV2LT5wbS5kcG0udmNlX2xldmVsID0gQU1EX1ZDRV9MRVZF TF9BQ19BTEw7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlhZGV2LT5wbS5kcG0udmNlX2FjdGl2ZSA9 IGZhbHNlOwo+ICsJCQl9Cj4gIAkJfQo+IC0JCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+ICAKPiAgCQlhbWRncHVfZHBtX2NvbXB1dGVfY2xvY2tzKGFkZXYpOwo+ICAJCXJldHVybjsK PiBAQCAtNjcwLDM5ICs1ODgsMzQgQEAgdm9pZCBhbWRncHVfZHBtX2VuYWJsZV92cGUoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgZW5hYmxlKQo+ICBpbnQgYW1kZ3B1X3BtX2xvYWRf c211X2Zpcm13YXJlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1aW50MzJfdCAqc211X3Zl cnNpb24pCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRl di0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHIgPSAwOwo+ICsJaW50IHJldCA9IDA7Cj4g IAo+ICAJaWYgKCFwcF9mdW5jcyB8fCAhcHBfZnVuY3MtPmxvYWRfZmlybXdhcmUgfHwKPiAgCSAg ICAoaXNfc3VwcG9ydF9zd19zbXUoYWRldikgJiYgKGFkZXYtPmZsYWdzICYgQU1EX0lTX0FQVSkp KQo+ICAJCXJldHVybiAwOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAt CXIgPSBwcF9mdW5jcy0+bG9hZF9maXJtd2FyZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlKTsK PiAtCWlmIChyKSB7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldCA9 IHBwX2Z1bmNzLT5sb2FkX2Zpcm13YXJlKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUpOwo+ICsJ aWYgKHJldCkgewo+ICAJCXByX2Vycigic211IGZpcm13YXJlIGxvYWRpbmcgZmFpbGVkXG4iKTsK PiAtCQlnb3RvIG91dDsKPiArCQlyZXR1cm4gcmV0Owo+ICAJfQo+ICAKPiAgCWlmIChzbXVfdmVy c2lvbikKPiAgCQkqc211X3ZlcnNpb24gPSBhZGV2LT5wbS5md192ZXJzaW9uOwo+ICAKPiAtb3V0 Ogo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXR1cm4gcjsKPiArCXJl dHVybiByZXQ7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX2hhbmRsZV9wYXNzdGhyb3VnaF9z YnIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgZW5hYmxlKQo+ICB7Cj4gLQlpbnQg cmV0ID0gMDsKPiAtCj4gLQlpZiAoaXNfc3VwcG9ydF9zd19zbXUoYWRldikpIHsKPiAtCQltdXRl eF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQkJcmV0ID0gc211X2hhbmRsZV9wYXNzdGhyb3Vn aF9zYnIoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAtCQkJCQkJIGVuYWJsZSk7Cj4gLQkJ bXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlpZiAoIWlzX3N1cHBvcnRfc3dfc211 KGFkZXYpKSB7Cj4gKwkJcmV0dXJuIDA7Cj4gIAl9Cj4gIAo+IC0JcmV0dXJuIHJldDsKPiArCWd1 YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHNtdV9oYW5kbGVfcGFzc3Ro cm91Z2hfc2JyKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwkJCQkJCSBlbmFibGUpOwo+ ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9zZW5kX2hibV9iYWRfcGFnZXNfbnVtKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LCB1aW50MzJfdCBzaXplKQo+IEBAIC03MTMsMTEgKzYyNiw4IEBA IGludCBhbWRncHVfZHBtX3NlbmRfaGJtX2JhZF9wYWdlc19udW0oc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsIHVpbnQzMl90IHNpemUpCj4gIAlpZiAoIWlzX3N1cHBvcnRfc3dfc211KGFkZXYp KQo+ICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQlyZXQgPSBzbXVfc2VuZF9oYm1fYmFkX3BhZ2VzX251bShzbXUsIHNpemUpOwo+ IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAr CWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHNtdV9zZW5kX2hibV9i YWRfcGFnZXNfbnVtKHNtdSwgc2l6ZSk7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX3NlbmRf aGJtX2JhZF9jaGFubmVsX2ZsYWcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHVpbnQzMl90 IHNpemUpCj4gQEAgLTcyOCwxMSArNjM4LDggQEAgaW50IGFtZGdwdV9kcG1fc2VuZF9oYm1fYmFk X2NoYW5uZWxfZmxhZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdWludDMyX3Qgc2kKPiAg CWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikpCj4gIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHNtdV9zZW5kX2hi bV9iYWRfY2hhbm5lbF9mbGFnKHNtdSwgc2l6ZSk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBt Lm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5t dXRleCk7Cj4gKwlyZXR1cm4gc211X3NlbmRfaGJtX2JhZF9jaGFubmVsX2ZsYWcoc211LCBzaXpl KTsKPiAgfQo+ICAKPiAgaW50IGFtZGdwdV9kcG1fc2VuZF9ybWFfcmVhc29uKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+IEBAIC03NDMsMTEgKzY1MCw4IEBAIGludCBhbWRncHVfZHBtX3Nl bmRfcm1hX3JlYXNvbihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgCWlmICghaXNfc3Vw cG9ydF9zd19zbXUoYWRldikpCj4gIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAKPiAtCW11dGV4 X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHNtdV9zZW5kX3JtYV9yZWFzb24oc211 KTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7 Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBzbXVfc2VuZF9y bWFfcmVhc29uKHNtdSk7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC03NjYsMTEgKzY3MCw4IEBAIGJv b2wgYW1kZ3B1X2RwbV9yZXNldF9zZG1hX2lzX3N1cHBvcnRlZChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldikKPiAgCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikpCj4gIAkJcmV0dXJuIGZh bHNlOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHNtdV9y ZXNldF9zZG1hX2lzX3N1cHBvcnRlZChzbXUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0 ZXgpOwo+ICsJcmV0dXJuIHNtdV9yZXNldF9zZG1hX2lzX3N1cHBvcnRlZChzbXUpOwo+ICB9Cj4g IAo+ICBpbnQgYW1kZ3B1X2RwbV9yZXNldF9zZG1hKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LCB1aW50MzJfdCBpbnN0X21hc2spCj4gQEAgLTc4MSwxMSArNjgyLDggQEAgaW50IGFtZGdwdV9k cG1fcmVzZXRfc2RtYShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdWludDMyX3QgaW5zdF9t YXNrKQo+ICAJaWYgKCFpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkKPiAgCQlyZXR1cm4gLUVPUE5P VFNVUFA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gc211 X3Jlc2V0X3NkbWEoc211LCBpbnN0X21hc2spOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0 ZXgpOwo+ICsJcmV0dXJuIHNtdV9yZXNldF9zZG1hKHNtdSwgaW5zdF9tYXNrKTsKPiAgfQo+ICAK PiAgaW50IGFtZGdwdV9kcG1fcmVzZXRfdmNuKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1 aW50MzJfdCBpbnN0X21hc2spCj4gQEAgLTc5NiwxMSArNjk0LDggQEAgaW50IGFtZGdwdV9kcG1f cmVzZXRfdmNuKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1aW50MzJfdCBpbnN0X21hc2sp Cj4gIAlpZiAoIWlzX3N1cHBvcnRfc3dfc211KGFkZXYpKQo+ICAJCXJldHVybiAtRU9QTk9UU1VQ UDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBzbXVfcmVz ZXRfdmNuKHNtdSwgaW5zdF9tYXNrKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+IC0KPiAtCXJldHVybiByZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsK PiArCXJldHVybiBzbXVfcmVzZXRfdmNuKHNtdSwgaW5zdF9tYXNrKTsKPiAgfQo+ICAKPiAgYm9v bCBhbWRncHVfZHBtX3Jlc2V0X3Zjbl9pc19zdXBwb3J0ZWQoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCj4gQEAgLTgxMSwxMSArNzA2LDggQEAgYm9vbCBhbWRncHVfZHBtX3Jlc2V0X3Zjbl9p c19zdXBwb3J0ZWQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gIAlpZiAoIWlzX3N1cHBv cnRfc3dfc211KGFkZXYpKQo+ICAJCXJldHVybiBmYWxzZTsKPiAgCj4gLQltdXRleF9sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBzbXVfcmVzZXRfdmNuX2lzX3N1cHBvcnRlZChzbXUp Owo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsK PiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHNtdV9yZXNldF92 Y25faXNfc3VwcG9ydGVkKHNtdSk7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX2dldF9kcG1f ZnJlcV9yYW5nZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAtODIzLDIyICs3MTUs MTcgQEAgaW50IGFtZGdwdV9kcG1fZ2V0X2RwbV9mcmVxX3JhbmdlKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAo+ICAJCQkJICB1aW50MzJfdCAqbWluLAo+ICAJCQkJICB1aW50MzJfdCAqbWF4 KQo+ICB7Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gIAlpZiAodHlwZSAhPSBQUF9TQ0xLKQo+ICAJ CXJldHVybiAtRUlOVkFMOwo+ICAKPiAgCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikpCj4g IAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4 KTsKPiAtCXJldCA9IHNtdV9nZXRfZHBtX2ZyZXFfcmFuZ2UoYWRldi0+cG93ZXJwbGF5LnBwX2hh bmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHNtdV9n ZXRfZHBtX2ZyZXFfcmFuZ2UoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgCQkJCSAgICAg U01VX1NDTEssCj4gIAkJCQkgICAgIG1pbiwKPiAgCQkJCSAgICAgbWF4KTsKPiAtCW11dGV4X3Vu bG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIGlu dCBhbWRncHVfZHBtX3NldF9zb2Z0X2ZyZXFfcmFuZ2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsCj4gQEAgLTg2MiwxNiArNzQ5LDEyIEBAIGludCBhbWRncHVfZHBtX3NldF9zb2Z0X2ZyZXFf cmFuZ2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIGludCBhbWRncHVfZHBtX3dyaXRl X3dhdGVybWFya3NfdGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gIHsKPiAgCXN0 cnVjdCBzbXVfY29udGV4dCAqc211ID0gYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZTsKPiAtCWlu dCByZXQgPSAwOwo+ICAKPiAgCWlmICghaXNfc3VwcG9ydF9zd19zbXUoYWRldikpCj4gIAkJcmV0 dXJuIDA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gc211 X3dyaXRlX3dhdGVybWFya3NfdGFibGUoc211KTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11 dGV4KTsKPiArCXJldHVybiBzbXVfd3JpdGVfd2F0ZXJtYXJrc190YWJsZShzbXUpOwo+ICB9Cj4g IAo+ICBpbnQgYW1kZ3B1X2RwbV93YWl0X2Zvcl9ldmVudChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwKPiBAQCAtODc5LDc2ICs3NjIsNTYgQEAgaW50IGFtZGdwdV9kcG1fd2FpdF9mb3JfZXZl bnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCSAgICAgIHVpbnQ2NF90IGV2ZW50 X2FyZykKPiAgewo+ICAJc3RydWN0IHNtdV9jb250ZXh0ICpzbXUgPSBhZGV2LT5wb3dlcnBsYXku cHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYgKCFpc19zdXBwb3J0X3N3X3Nt dShhZGV2KSkKPiAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRl di0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gc211X3dhaXRfZm9yX2V2ZW50KHNtdSwgZXZlbnQsIGV2 ZW50X2FyZyk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1 cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gc211 X3dhaXRfZm9yX2V2ZW50KHNtdSwgZXZlbnQsIGV2ZW50X2FyZyk7Cj4gIH0KPiAgCj4gIGludCBh bWRncHVfZHBtX3NldF9yZXNpZGVuY3lfZ2Z4b2ZmKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LCBib29sIHZhbHVlKQo+ICB7Cj4gIAlzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYtPnBv d2VycGxheS5wcF9oYW5kbGU7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIWlzX3N1cHBv cnRfc3dfc211KGFkZXYpKQo+ICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgCj4gLQltdXRleF9s b2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBzbXVfc2V0X3Jlc2lkZW5jeV9nZnhvZmYo c211LCB2YWx1ZSk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQly ZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4g c211X3NldF9yZXNpZGVuY3lfZ2Z4b2ZmKHNtdSwgdmFsdWUpOwo+ICB9Cj4gIAo+ICBpbnQgYW1k Z3B1X2RwbV9nZXRfcmVzaWRlbmN5X2dmeG9mZihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwg dTMyICp2YWx1ZSkKPiAgewo+ICAJc3RydWN0IHNtdV9jb250ZXh0ICpzbXUgPSBhZGV2LT5wb3dl cnBsYXkucHBfaGFuZGxlOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYgKCFpc19zdXBwb3J0 X3N3X3NtdShhZGV2KSkKPiAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gIAo+IC0JbXV0ZXhfbG9j aygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gc211X2dldF9yZXNpZGVuY3lfZ2Z4b2ZmKHNt dSwgdmFsdWUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0 dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHNt dV9nZXRfcmVzaWRlbmN5X2dmeG9mZihzbXUsIHZhbHVlKTsKPiAgfQo+ICAKPiAgaW50IGFtZGdw dV9kcG1fZ2V0X2VudHJ5Y291bnRfZ2Z4b2ZmKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1 NjQgKnZhbHVlKQo+ICB7Cj4gIAlzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSA9IGFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGU7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIWlzX3N1cHBvcnRf c3dfc211KGFkZXYpKQo+ICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgCj4gLQltdXRleF9sb2Nr KCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBzbXVfZ2V0X2VudHJ5Y291bnRfZ2Z4b2ZmKHNt dSwgdmFsdWUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0 dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHNt dV9nZXRfZW50cnljb3VudF9nZnhvZmYoc211LCB2YWx1ZSk7Cj4gIH0KPiAgCj4gIGludCBhbWRn cHVfZHBtX2dldF9zdGF0dXNfZ2Z4b2ZmKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1aW50 MzJfdCAqdmFsdWUpCj4gIHsKPiAgCXN0cnVjdCBzbXVfY29udGV4dCAqc211ID0gYWRldi0+cG93 ZXJwbGF5LnBwX2hhbmRsZTsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAgCWlmICghaXNfc3VwcG9y dF9zd19zbXUoYWRldikpCj4gIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAKPiAtCW11dGV4X2xv Y2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHNtdV9nZXRfc3RhdHVzX2dmeG9mZihzbXUs IHZhbHVlKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVy biByZXQ7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBzbXVf Z2V0X3N0YXR1c19nZnhvZmYoc211LCB2YWx1ZSk7Cj4gIH0KPiAgCj4gIHVpbnQ2NF90IGFtZGdw dV9kcG1fZ2V0X3RoZXJtYWxfdGhyb3R0bGluZ19jb3VudGVyKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2KQo+IEBAIC05NjksMjggKzgzMiwyMyBAQCB1aW50NjRfdCBhbWRncHVfZHBtX2dldF90 aGVybWFsX3Rocm90dGxpbmdfY291bnRlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAg dm9pZCBhbWRncHVfZHBtX2dmeF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsCj4gIAkJCQkgZW51bSBnZnhfY2hhbmdlX3N0YXRlIHN0YXRlKQo+ICB7Cj4gLQltdXRleF9s b2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsK PiAgCWlmIChhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MgJiYKPiAgCSAgICBhZGV2LT5wb3dlcnBs YXkucHBfZnVuY3MtPmdmeF9zdGF0ZV9jaGFuZ2Vfc2V0KQo+ICAJCSgoYWRldiktPnBvd2VycGxh eS5wcF9mdW5jcy0+Z2Z4X3N0YXRlX2NoYW5nZV9zZXQoCj4gIAkJCShhZGV2KS0+cG93ZXJwbGF5 LnBwX2hhbmRsZSwgc3RhdGUpKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9nZXRfZWNjX2luZm8oc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCj4gIAkJCSAgICB2b2lkICp1bWNfZWNjKQo+ICB7Cj4gIAlzdHJ1Y3Qgc211X2Nv bnRleHQgKnNtdSA9IGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGU7Cj4gLQlpbnQgcmV0ID0gMDsK PiAgCj4gIAlpZiAoIWlzX3N1cHBvcnRfc3dfc211KGFkZXYpKQo+ICAJCXJldHVybiAtRU9QTk9U U1VQUDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBzbXVf Z2V0X2VjY19pbmZvKHNtdSwgdW1jX2VjYyk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11 dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRl eCk7Cj4gKwlyZXR1cm4gc211X2dldF9lY2NfaW5mbyhzbXUsIHVtY19lY2MpOwo+ICB9Cj4gIAo+ ICBzdHJ1Y3QgYW1kX3ZjZV9zdGF0ZSAqYW1kZ3B1X2RwbV9nZXRfdmNlX2Nsb2NrX3N0YXRlKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+IEBAIC0xMDAyLDEyICs4NjAsOSBAQCBzdHJ1Y3Qg YW1kX3ZjZV9zdGF0ZSAqYW1kZ3B1X2RwbV9nZXRfdmNlX2Nsb2NrX3N0YXRlKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAo+ICAJaWYgKCFwcF9mdW5jcy0+Z2V0X3ZjZV9jbG9ja19zdGF0ZSkK PiAgCQlyZXR1cm4gTlVMTDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4g LQl2c3RhdGUgPSBwcF9mdW5jcy0+Z2V0X3ZjZV9jbG9ja19zdGF0ZShhZGV2LT5wb3dlcnBsYXku cHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4g cHBfZnVuY3MtPmdldF92Y2VfY2xvY2tfc3RhdGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwK PiAgCQkJCQkgICAgICAgaWR4KTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ IC0KPiAtCXJldHVybiB2c3RhdGU7Cj4gIH0KPiAgCj4gIHZvaWQgYW1kZ3B1X2RwbV9nZXRfY3Vy cmVudF9wb3dlcl9zdGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAtMTAxNSwx MSArODcwLDExIEBAIHZvaWQgYW1kZ3B1X2RwbV9nZXRfY3VycmVudF9wb3dlcl9zdGF0ZShzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5j cyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gIAo+IC0JbXV0ZXhfbG9j aygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4g IAo+ICAJaWYgKCFwcF9mdW5jcy0+Z2V0X2N1cnJlbnRfcG93ZXJfc3RhdGUpIHsKPiAgCQkqc3Rh dGUgPSBhZGV2LT5wbS5kcG0udXNlcl9zdGF0ZTsKPiAtCQlnb3RvIG91dDsKPiArCQlyZXR1cm47 Cj4gIAl9Cj4gIAo+ICAJKnN0YXRlID0gcHBfZnVuY3MtPmdldF9jdXJyZW50X3Bvd2VyX3N0YXRl KGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUpOwo+IEBAIC0xMDI3LDE2ICs4ODIsMTUgQEAgdm9p ZCBhbWRncHVfZHBtX2dldF9jdXJyZW50X3Bvd2VyX3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAo+ICAJICAgICpzdGF0ZSA+IFBPV0VSX1NUQVRFX1RZUEVfSU5URVJOQUxfM0RQRVJG KQo+ICAJCSpzdGF0ZSA9IGFkZXYtPnBtLmRwbS51c2VyX3N0YXRlOwo+ICAKPiAtb3V0Ogo+IC0J bXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm47Cj4gIH0KPiAgCj4gIHZv aWQgYW1kZ3B1X2RwbV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs Cj4gIAkJCQllbnVtIGFtZF9wbV9zdGF0ZV90eXBlIHN0YXRlKQo+ICB7Cj4gLQltdXRleF9sb2Nr KCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlhZGV2LT5wbS5kcG0udXNlcl9zdGF0ZSA9IHN0YXRlOwo+ IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlzY29wZWRfZ3VhcmQobXV0ZXgs ICZhZGV2LT5wbS5tdXRleCkgewo+ICsJCWFkZXYtPnBtLmRwbS51c2VyX3N0YXRlID0gc3RhdGU7 Cj4gKwl9Cj4gIAo+ICAJaWYgKGlzX3N1cHBvcnRfc3dfc211KGFkZXYpKQo+ICAJCXJldHVybjsK PiBAQCAtMTA1NSwxMiArOTA5LDExIEBAIGVudW0gYW1kX2RwbV9mb3JjZWRfbGV2ZWwgYW1kZ3B1 X2RwbV9nZXRfcGVyZm9ybWFuY2VfbGV2ZWwoc3RydWN0IGFtZGdwdV9kZXZpY2UKPiAgCWlmICgh cHBfZnVuY3MpCj4gIAkJcmV0dXJuIEFNRF9EUE1fRk9SQ0VEX0xFVkVMX0FVVE87Cj4gIAo+IC0J bXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5t dXRleCk7Cj4gIAlpZiAocHBfZnVuY3MtPmdldF9wZXJmb3JtYW5jZV9sZXZlbCkKPiAgCQlsZXZl bCA9IHBwX2Z1bmNzLT5nZXRfcGVyZm9ybWFuY2VfbGV2ZWwoYWRldi0+cG93ZXJwbGF5LnBwX2hh bmRsZSk7Cj4gIAllbHNlCj4gIAkJbGV2ZWwgPSBhZGV2LT5wbS5kcG0uZm9yY2VkX2xldmVsOwo+ IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gIAo+ICAJcmV0dXJuIGxldmVsOwo+ ICB9Cj4gQEAgLTExNTEsMTcgKzEwMDQsMTMgQEAgaW50IGFtZGdwdV9kcG1fZ2V0X3BwX251bV9z dGF0ZXMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkgc3RydWN0IHBwX3N0YXRl c19pbmZvICpzdGF0ZXMpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1 bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJ aWYgKCFwcF9mdW5jcy0+Z2V0X3BwX251bV9zdGF0ZXMpCj4gIAkJcmV0dXJuIC1FT1BOT1RTVVBQ Owo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNz LT5nZXRfcHBfbnVtX3N0YXRlcyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQo bXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF9wcF9udW1f c3RhdGVzKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkJICBzdGF0ZXMpOwo+IC0J bXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgfQo+ ICAKPiAgaW50IGFtZGdwdV9kcG1fZGlzcGF0Y2hfdGFzayhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwKPiBAQCAtMTE2OSwyNCArMTAxOCwxOSBAQCBpbnQgYW1kZ3B1X2RwbV9kaXNwYXRjaF90 YXNrKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAJCQkgICAgICBlbnVtIGFtZF9wbV9z dGF0ZV90eXBlICp1c2VyX3N0YXRlKQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNz ICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ ICAKPiAgCWlmICghcHBfZnVuY3MtPmRpc3BhdGNoX3Rhc2tzKQo+ICAJCXJldHVybiAtRU9QTk9U U1VQUDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9m dW5jcy0+ZGlzcGF0Y2hfdGFza3MoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJk KG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5kaXNwYXRjaF90 YXNrcyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAJCQkJICAgICAgIHRhc2tfaWQsCj4g IAkJCQkgICAgICAgdXNlcl9zdGF0ZSk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4 KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9nZXRfcHBf dGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGNoYXIgKip0YWJsZSkKPiAgewo+ICAJ Y29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBf ZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIXRhYmxlKQo+ICAJCXJldHVybiAt RUlOVkFMOwo+IEBAIC0xMTk0LDEyICsxMDM4LDkgQEAgaW50IGFtZGdwdV9kcG1fZ2V0X3BwX3Rh YmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBjaGFyICoqdGFibGUpCj4gIAlpZiAoYW1k Z3B1X3NyaW92X3ZmKGFkZXYpIHx8ICFwcF9mdW5jcy0+Z2V0X3BwX3RhYmxlIHx8IGFkZXYtPnNj cG1fZW5hYmxlZCkKPiAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygm YWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9wcF90YWJsZShhZGV2LT5w b3dlcnBsYXkucHBfaGFuZGxlLAo+IC0JCQkJICAgICB0YWJsZSk7Cj4gLQltdXRleF91bmxvY2so JmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZh ZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gPSBwcF9mdW5jcy0+Z2V0X3BwX3RhYmxlKGFkZXYt PnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwkJCQkgICAgIHRhYmxlKTsKPiAgfQo+ICAKPiAgaW50 IGFtZGdwdV9kcG1fc2V0X2ZpbmVfZ3JhaW5fY2xrX3ZvbChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwKPiBAQCAtMTIwOCwxOSArMTA0OSwxNSBAQCBpbnQgYW1kZ3B1X2RwbV9zZXRfZmluZV9n cmFpbl9jbGtfdm9sKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAJCQkJICAgICAgdWlu dDMyX3Qgc2l6ZSkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3Mg PSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAo IXBwX2Z1bmNzLT5zZXRfZmluZV9ncmFpbl9jbGtfdm9sKQo+ICAJCXJldHVybiAwOwo+ICAKPiAt CW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5zZXRfZmlu ZV9ncmFpbl9jbGtfdm9sKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRl eCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiA9IHBwX2Z1bmNzLT5zZXRfZmluZV9ncmFp bl9jbGtfdm9sKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkJICAgICAgIHR5cGUs Cj4gIAkJCQkJICAgICAgIGlucHV0LAo+ICAJCQkJCSAgICAgICBzaXplKTsKPiAtCW11dGV4X3Vu bG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIGlu dCBhbWRncHVfZHBtX29kbl9lZGl0X2RwbV90YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwKPiBAQCAtMTIyOSwxOSArMTA2NiwxNSBAQCBpbnQgYW1kZ3B1X2RwbV9vZG5fZWRpdF9kcG1f dGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkgIHVpbnQzMl90IHNpemUp Cj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93 ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYgKCFwcF9mdW5jcy0+ b2RuX2VkaXRfZHBtX3RhYmxlKQo+ICAJCXJldHVybiAwOwo+ICAKPiAtCW11dGV4X2xvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5vZG5fZWRpdF9kcG1fdGFibGUoYWRl di0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgp Owo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5vZG5fZWRpdF9kcG1fdGFibGUoYWRldi0+cG93ZXJwbGF5 LnBwX2hhbmRsZSwKPiAgCQkJCQkgICB0eXBlLAo+ICAJCQkJCSAgIGlucHV0LAo+ICAJCQkJCSAg IHNpemUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJu IHJldDsKPiAgfQo+ICAKPiAgaW50IGFtZGdwdV9kcG1fZW1pdF9jbG9ja19sZXZlbHMoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gQEAgLTEyNTAsNTIgKzEwODMsNDAgQEAgaW50IGFtZGdw dV9kcG1fZW1pdF9jbG9ja19sZXZlbHMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJ CQkgIGludCAqb2Zmc2V0KQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9m dW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAg CWlmICghcHBfZnVuY3MtPmVtaXRfY2xvY2tfbGV2ZWxzKQo+ICAJCXJldHVybiAtRU5PRU5UOwo+ ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5l bWl0X2Nsb2NrX2xldmVscyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0 ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmVtaXRfY2xvY2tfbGV2 ZWxzKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkJICAgdHlwZSwKPiAgCQkJCQkg ICBidWYsCj4gIAkJCQkJICAgb2Zmc2V0KTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0 ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX3NldF9w cGZlYXR1cmVfc3RhdHVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAJCQkJICAgIHVp bnQ2NF90IHBwZmVhdHVyZV9tYXNrcykKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5j cyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsK PiAgCj4gIAlpZiAoIXBwX2Z1bmNzLT5zZXRfcHBmZWF0dXJlX3N0YXR1cykKPiAgCQlyZXR1cm4g MDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5j cy0+c2V0X3BwZmVhdHVyZV9zdGF0dXMoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1 YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5zZXRfcHBm ZWF0dXJlX3N0YXR1cyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAJCQkJCSAgICAgcHBm ZWF0dXJlX21hc2tzKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAt CXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX2dldF9wcGZlYXR1cmVfc3Rh dHVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBjaGFyICpidWYpCj4gIHsKPiAgCWNvbnN0 IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNz Owo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYgKCFwcF9mdW5jcy0+Z2V0X3BwZmVhdHVyZV9z dGF0dXMpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9wcGZlYXR1cmVfc3RhdHVzKGFkZXYtPnBvd2VycGxh eS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVy biBwcF9mdW5jcy0+Z2V0X3BwZmVhdHVyZV9zdGF0dXMoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRs ZSwKPiAgCQkJCQkgICAgIGJ1Zik7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAtCj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9mb3JjZV9jbG9j a19sZXZlbChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAtMTMwMywzMyArMTEyNCwy NSBAQCBpbnQgYW1kZ3B1X2RwbV9mb3JjZV9jbG9ja19sZXZlbChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKPiAgCQkJCSB1aW50MzJfdCBtYXNrKQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1k X3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCBy ZXQgPSAwOwo+ICAKPiAgCWlmICghcHBfZnVuY3MtPmZvcmNlX2Nsb2NrX2xldmVsKQo+ICAJCXJl dHVybiAwOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBw X2Z1bmNzLT5mb3JjZV9jbG9ja19sZXZlbChhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJ Z3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmZvcmNl X2Nsb2NrX2xldmVsKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkJICB0eXBlLAo+ ICAJCQkJCSAgbWFzayk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4g LQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9nZXRfc2Nsa19vZChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5j cyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsK PiAgCj4gIAlpZiAoIXBwX2Z1bmNzLT5nZXRfc2Nsa19vZCkKPiAgCQlyZXR1cm4gLUVPUE5PVFNV UFA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVu Y3MtPmdldF9zY2xrX29kKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUpOwo+IC0JbXV0ZXhfdW5s b2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJkKG11dGV4 KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRfc2Nsa19vZChhZGV2 LT5wb3dlcnBsYXkucHBfaGFuZGxlKTsKPiAgfQo+ICAKPiAgaW50IGFtZGdwdV9kcG1fc2V0X3Nj bGtfb2Qoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHVpbnQzMl90IHZhbHVlKQo+IEBAIC0x MzM5LDEwICsxMTUyLDEwIEBAIGludCBhbWRncHVfZHBtX3NldF9zY2xrX29kKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LCB1aW50MzJfdCB2YWx1ZSkKPiAgCWlmIChpc19zdXBwb3J0X3N3X3Nt dShhZGV2KSkKPiAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRl di0+cG0ubXV0ZXgpOwo+IC0JaWYgKHBwX2Z1bmNzLT5zZXRfc2Nsa19vZCkKPiAtCQlwcF9mdW5j cy0+c2V0X3NjbGtfb2QoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwgdmFsdWUpOwo+IC0JbXV0 ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhZGV2 LT5wbS5tdXRleCkgewo+ICsJCWlmIChwcF9mdW5jcy0+c2V0X3NjbGtfb2QpCj4gKwkJCXBwX2Z1 bmNzLT5zZXRfc2Nsa19vZChhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCB2YWx1ZSk7Cj4gKwl9 Cj4gIAo+ICAJaWYgKGFtZGdwdV9kcG1fZGlzcGF0Y2hfdGFzayhhZGV2LAo+ICAJCQkJICAgICBB TURfUFBfVEFTS19SRUFESlVTVF9QT1dFUl9TVEFURSwKPiBAQCAtMTM1NywxNiArMTE3MCwxMiBA QCBpbnQgYW1kZ3B1X2RwbV9zZXRfc2Nsa19vZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwg dWludDMyX3QgdmFsdWUpCj4gIGludCBhbWRncHVfZHBtX2dldF9tY2xrX29kKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9m dW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAg CWlmICghcHBfZnVuY3MtPmdldF9tY2xrX29kKQo+ICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAg Cj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+Z2V0 X21jbGtfb2QoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSk7Cj4gLQltdXRleF91bmxvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2 LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF9tY2xrX29kKGFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGUpOwo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9zZXRfbWNsa19vZChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdWludDMyX3QgdmFsdWUpCj4gQEAgLTEzNzYsMTAg KzExODUsMTAgQEAgaW50IGFtZGdwdV9kcG1fc2V0X21jbGtfb2Qoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsIHVpbnQzMl90IHZhbHVlKQo+ICAJaWYgKGlzX3N1cHBvcnRfc3dfc211KGFkZXYp KQo+ICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQlpZiAocHBfZnVuY3MtPnNldF9tY2xrX29kKQo+IC0JCXBwX2Z1bmNzLT5zZXRf bWNsa19vZChhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCB2YWx1ZSk7Cj4gLQltdXRleF91bmxv Y2soJmFkZXYtPnBtLm11dGV4KTsKPiArCXNjb3BlZF9ndWFyZChtdXRleCwgJmFkZXYtPnBtLm11 dGV4KSB7Cj4gKwkJaWYgKHBwX2Z1bmNzLT5zZXRfbWNsa19vZCkKPiArCQkJcHBfZnVuY3MtPnNl dF9tY2xrX29kKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsIHZhbHVlKTsKPiArCX0KPiAgCj4g IAlpZiAoYW1kZ3B1X2RwbV9kaXNwYXRjaF90YXNrKGFkZXYsCj4gIAkJCQkgICAgIEFNRF9QUF9U QVNLX1JFQURKVVNUX1BPV0VSX1NUQVRFLAo+IEBAIC0xMzk1LDE3MCArMTIwNCwxMzAgQEAgaW50 IGFtZGdwdV9kcG1fZ2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwKPiAgCQkJCSAgICAgIGNoYXIgKmJ1ZikKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9w bV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0 ID0gMDsKPiAgCj4gIAlpZiAoIXBwX2Z1bmNzLT5nZXRfcG93ZXJfcHJvZmlsZV9tb2RlKQo+ICAJ CXJldHVybiAtRU9QTk9UU1VQUDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7 Cj4gLQlyZXQgPSBwcF9mdW5jcy0+Z2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZShhZGV2LT5wb3dlcnBs YXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1 cm4gcHBfZnVuY3MtPmdldF9wb3dlcl9wcm9maWxlX21vZGUoYWRldi0+cG93ZXJwbGF5LnBwX2hh bmRsZSwKPiAgCQkJCQkgICAgICAgYnVmKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0 ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX3NldF9w b3dlcl9wcm9maWxlX21vZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkgICAg ICBsb25nICppbnB1dCwgdWludDMyX3Qgc2l6ZSkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9w bV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0 ID0gMDsKPiAgCj4gIAlpZiAoIXBwX2Z1bmNzLT5zZXRfcG93ZXJfcHJvZmlsZV9tb2RlKQo+ICAJ CXJldHVybiAwOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9 IHBwX2Z1bmNzLT5zZXRfcG93ZXJfcHJvZmlsZV9tb2RlKGFkZXYtPnBvd2VycGxheS5wcF9oYW5k bGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5j cy0+c2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAJ CQkJCSAgICAgICBpbnB1dCwKPiAgCQkJCQkgICAgICAgc2l6ZSk7Cj4gLQltdXRleF91bmxvY2so JmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBpbnQgYW1k Z3B1X2RwbV9nZXRfZ3B1X21ldHJpY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHZvaWQg Kip0YWJsZSkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBh ZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIXBw X2Z1bmNzLT5nZXRfZ3B1X21ldHJpY3MpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JbXV0ZXhfbG9j aygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9ncHVfbWV0cmljcyhh ZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRl eCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF9ncHVfbWV0cmljcyhhZGV2LT5wb3dlcnBsYXku cHBfaGFuZGxlLAo+ICAJCQkJCXRhYmxlKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0 ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIHNzaXplX3QgYW1kZ3B1X2RwbV9n ZXRfcG1fbWV0cmljcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdm9pZCAqcG1fbWV0cmlj cywKPiAgCQkJCSAgc2l6ZV90IHNpemUpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVu Y3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7 Cj4gIAo+ICAJaWYgKCFwcF9mdW5jcy0+Z2V0X3BtX21ldHJpY3MpCj4gIAkJcmV0dXJuIC1FT1BO T1RTVVBQOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBw X2Z1bmNzLT5nZXRfcG1fbWV0cmljcyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLCBwbV9tZXRy aWNzLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVu Y3MtPmdldF9wbV9tZXRyaWNzKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsIHBtX21ldHJpY3Ms Cj4gIAkJCQkgICAgICAgc2l6ZSk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAtCj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9nZXRfZmFuX2Nv bnRyb2xfbW9kZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgCQkJCSAgICB1aW50MzJf dCAqZmFuX21vZGUpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNz ID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYg KCFwcF9mdW5jcy0+Z2V0X2Zhbl9jb250cm9sX21vZGUpCj4gIAkJcmV0dXJuIC1FT1BOT1RTVVBQ Owo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNz LT5nZXRfZmFuX2NvbnRyb2xfbW9kZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3Vh cmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF9mYW5f Y29udHJvbF9tb2RlKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkJICAgICBmYW5f bW9kZSk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4g cmV0Owo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9zZXRfZmFuX3NwZWVkX3B3bShzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwKPiAgCQkJCSB1aW50MzJfdCBzcGVlZCkKPiAgewo+ICAJY29u c3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVu Y3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIXBwX2Z1bmNzLT5zZXRfZmFuX3NwZWVk X3B3bSkKPiAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+ cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPnNldF9mYW5fc3BlZWRfcHdtKGFkZXYtPnBv d2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiAr CXJldHVybiBwcF9mdW5jcy0+c2V0X2Zhbl9zcGVlZF9wd20oYWRldi0+cG93ZXJwbGF5LnBwX2hh bmRsZSwKPiAgCQkJCQkgIHNwZWVkKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+IC0KPiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX2dldF9mYW5f c3BlZWRfcHdtKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAJCQkJIHVpbnQzMl90ICpz cGVlZCkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2 LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIXBwX2Z1 bmNzLT5nZXRfZmFuX3NwZWVkX3B3bSkKPiAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gIAo+IC0J bXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9mYW5f c3BlZWRfcHdtKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFk ZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+Z2V0X2Zhbl9zcGVlZF9wd20oYWRl di0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgCQkJCQkgIHNwZWVkKTsKPiAtCW11dGV4X3VubG9j aygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIGludCBh bWRncHVfZHBtX2dldF9mYW5fc3BlZWRfcnBtKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ ICAJCQkJIHVpbnQzMl90ICpzcGVlZCkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5j cyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsK PiAgCj4gIAlpZiAoIXBwX2Z1bmNzLT5nZXRfZmFuX3NwZWVkX3JwbSkKPiAgCQlyZXR1cm4gLUVP UE5PVFNVUFA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0g cHBfZnVuY3MtPmdldF9mYW5fc3BlZWRfcnBtKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4g KwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+Z2V0 X2Zhbl9zcGVlZF9ycG0oYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgCQkJCQkgIHNwZWVk KTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7 Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX3NldF9mYW5fc3BlZWRfcnBtKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAo+ICAJCQkJIHVpbnQzMl90IHNwZWVkKQo+ICB7Cj4gIAljb25zdCBz dHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsK PiAtCWludCByZXQgPSAwOwo+ICAKPiAgCWlmICghcHBfZnVuY3MtPnNldF9mYW5fc3BlZWRfcnBt KQo+ICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+c2V0X2Zhbl9zcGVlZF9ycG0oYWRldi0+cG93ZXJw bGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0 dXJuIHBwX2Z1bmNzLT5zZXRfZmFuX3NwZWVkX3JwbShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxl LAo+ICAJCQkJCSAgc3BlZWQpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4g LQo+IC0JcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgaW50IGFtZGdwdV9kcG1fc2V0X2Zhbl9jb250 cm9sX21vZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkgICAgdWludDMyX3Qg bW9kZSkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2 LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIXBwX2Z1 bmNzLT5zZXRfZmFuX2NvbnRyb2xfbW9kZSkKPiAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gIAo+ IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPnNldF9m YW5fY29udHJvbF9tb2RlKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRl eCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+c2V0X2Zhbl9jb250cm9s X21vZGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgCQkJCQkgICAgIG1vZGUpOwo+IC0J bXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgfQo+ ICAKPiAgaW50IGFtZGdwdV9kcG1fZ2V0X3Bvd2VyX2xpbWl0KHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAo+IEBAIC0xNTY3LDE5ICsxMzM2LDE1IEBAIGludCBhbWRncHVfZHBtX2dldF9wb3dl cl9saW1pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgCQkJICAgICAgIGVudW0gcHBf cG93ZXJfdHlwZSBwb3dlcl90eXBlKQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNz ICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ ICAKPiAgCWlmICghcHBfZnVuY3MtPmdldF9wb3dlcl9saW1pdCkKPiAgCQlyZXR1cm4gLUVPUE5P VFNVUFA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBf ZnVuY3MtPmdldF9wb3dlcl9saW1pdChhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3Vh cmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF9wb3dl cl9saW1pdChhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAJCQkJCWxpbWl0LAo+ICAJCQkJ CXBwX2xpbWl0X2xldmVsLAo+ICAJCQkJCXBvd2VyX3R5cGUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgaW50IGFtZGdw dV9kcG1fc2V0X3Bvd2VyX2xpbWl0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+IEBAIC0x NTg3LDE3ICsxMzUyLDEzIEBAIGludCBhbWRncHVfZHBtX3NldF9wb3dlcl9saW1pdChzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwKPiAgCQkJICAgICAgIHVpbnQzMl90IGxpbWl0KQo+ICB7Cj4g IAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5w cF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAgCWlmICghcHBfZnVuY3MtPnNldF9wb3dl cl9saW1pdCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5w bS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+c2V0X3Bvd2VyX2xpbWl0KGFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJl dHVybiBwcF9mdW5jcy0+c2V0X3Bvd2VyX2xpbWl0KGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUs Cj4gIAkJCQkJbGltaXRfdHlwZSwgbGltaXQpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgaW50IGFtZGdwdV9kcG1faXNf Y2Nsa19kcG1fc3VwcG9ydGVkKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+IEBAIC0xNjA3 LDkgKzEzNjgsOCBAQCBpbnQgYW1kZ3B1X2RwbV9pc19jY2xrX2RwbV9zdXBwb3J0ZWQoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gIAlpZiAoIWlzX3N1cHBvcnRfc3dfc211KGFkZXYpKQo+ ICAJCXJldHVybiBmYWxzZTsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4g KwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiAgCWNjbGtfZHBtX3N1cHBvcnRlZCA9 IGlzX3N1cHBvcnRfY2Nsa19kcG0oYWRldik7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11 dGV4KTsKPiAgCj4gIAlyZXR1cm4gKGludCljY2xrX2RwbV9zdXBwb3J0ZWQ7Cj4gIH0KPiBAQCAt MTYyMiwxMCArMTM4Miw5IEBAIGludCBhbWRncHVfZHBtX2RlYnVnZnNfcHJpbnRfY3VycmVudF9w ZXJmb3JtYW5jZV9sZXZlbChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRlCj4gIAlpZiAoIXBwX2Z1 bmNzLT5kZWJ1Z2ZzX3ByaW50X2N1cnJlbnRfcGVyZm9ybWFuY2VfbGV2ZWwpCj4gIAkJcmV0dXJu IC1FT1BOT1RTVVBQOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiArCWd1 YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICAJcHBfZnVuY3MtPmRlYnVnZnNfcHJpbnRf Y3VycmVudF9wZXJmb3JtYW5jZV9sZXZlbChhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAJ CQkJCQkJICBtKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICAKPiAgCXJl dHVybiAwOwo+ICB9Cj4gQEAgLTE2MzUsMTggKzEzOTQsMTQgQEAgaW50IGFtZGdwdV9kcG1fZ2V0 X3NtdV9wcnZfYnVmX2RldGFpbHMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkg ICAgICAgc2l6ZV90ICpzaXplKQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpw cF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAK PiAgCWlmICghcHBfZnVuY3MtPmdldF9zbXVfcHJ2X2J1Zl9kZXRhaWxzKQo+ICAJCXJldHVybiAt RU5PU1lTOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBw X2Z1bmNzLT5nZXRfc211X3Bydl9idWZfZGV0YWlscyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxl LAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3Mt PmdldF9zbXVfcHJ2X2J1Zl9kZXRhaWxzKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJ CQkJCWFkZHIsCj4gIAkJCQkJCXNpemUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRl eCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgaW50IGFtZGdwdV9kcG1faXNfb3Zl cmRyaXZlX3N1cHBvcnRlZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiBAQCAtMTY5OCw3 ICsxNDUzLDYgQEAgaW50IGFtZGdwdV9kcG1fc2V0X3BwX3RhYmxlKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAo+ICAJCQkgICAgc2l6ZV90IHNpemUpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBh bWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50 IHJldCA9IDA7Cj4gIAo+ICAJaWYgKCFidWYgfHwgIXNpemUpCj4gIAkJcmV0dXJuIC1FSU5WQUw7 Cj4gQEAgLTE3MDYsMTMgKzE0NjAsMTAgQEAgaW50IGFtZGdwdV9kcG1fc2V0X3BwX3RhYmxlKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAJaWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2KSB8 fCAhcHBfZnVuY3MtPnNldF9wcF90YWJsZSB8fCBhZGV2LT5zY3BtX2VuYWJsZWQpCj4gIAkJcmV0 dXJuIC1FT1BOT1RTVVBQOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAt CXJldCA9IHBwX2Z1bmNzLT5zZXRfcHBfdGFibGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwK PiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5z ZXRfcHBfdGFibGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAgCQkJCSAgICAgYnVmLAo+ ICAJCQkJICAgICBzaXplKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0K PiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX2dldF9udW1fY3B1X2Nv cmVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+IEBAIC0xNzM3LDE3ICsxNDg4LDEzIEBA IGludCBhbWRncHVfZHBtX2Rpc3BsYXlfY29uZmlndXJhdGlvbl9jaGFuZ2Uoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBhbWRfcHBfZGlzcGxheV9j b25maWd1cmF0aW9uICppbnB1dCkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAq cHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAg Cj4gIAlpZiAoIXBwX2Z1bmNzLT5kaXNwbGF5X2NvbmZpZ3VyYXRpb25fY2hhbmdlKQo+ICAJCXJl dHVybiAwOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBw X2Z1bmNzLT5kaXNwbGF5X2NvbmZpZ3VyYXRpb25fY2hhbmdlKGFkZXYtPnBvd2VycGxheS5wcF9o YW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9m dW5jcy0+ZGlzcGxheV9jb25maWd1cmF0aW9uX2NoYW5nZShhZGV2LT5wb3dlcnBsYXkucHBfaGFu ZGxlLAo+ICAJCQkJCQkgICAgIGlucHV0KTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0 ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX2dldF9j bG9ja19ieV90eXBlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+IEBAIC0xNzU1LDM1ICsx NTAyLDI3IEBAIGludCBhbWRncHVfZHBtX2dldF9jbG9ja19ieV90eXBlKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LAo+ICAJCQkJIHN0cnVjdCBhbWRfcHBfY2xvY2tzICpjbG9ja3MpCj4gIHsK PiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5 LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYgKCFwcF9mdW5jcy0+Z2V0X2Ns b2NrX2J5X3R5cGUpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9jbG9ja19ieV90eXBlKGFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJl dHVybiBwcF9mdW5jcy0+Z2V0X2Nsb2NrX2J5X3R5cGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRs ZSwKPiAgCQkJCQkgIHR5cGUsCj4gIAkJCQkJICBjbG9ja3MpOwo+IC0JbXV0ZXhfdW5sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgaW50IGFtZGdw dV9kcG1fZ2V0X2Rpc3BsYXlfbW9kZV92YWxpZGF0aW9uX2Nsa3Moc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCj4gIAkJCQkJCXN0cnVjdCBhbWRfcHBfc2ltcGxlX2Nsb2NrX2luZm8gKmNsb2Nr cykKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5w b3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIXBwX2Z1bmNz LT5nZXRfZGlzcGxheV9tb2RlX3ZhbGlkYXRpb25fY2xvY2tzKQo+ICAJCXJldHVybiAwOwo+ICAK PiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRf ZGlzcGxheV9tb2RlX3ZhbGlkYXRpb25fY2xvY2tzKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUs Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiA9IHBwX2Z1bmNz LT5nZXRfZGlzcGxheV9tb2RlX3ZhbGlkYXRpb25fY2xvY2tzKGFkZXYtPnBvd2VycGxheS5wcF9o YW5kbGUsCj4gIAkJCQkJCQkgICBjbG9ja3MpOwo+IC0JbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgaW50IGFtZGdwdV9kcG1fZ2V0 X2Nsb2NrX2J5X3R5cGVfd2l0aF9sYXRlbmN5KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ IEBAIC0xNzkxLDE4ICsxNTMwLDE0IEBAIGludCBhbWRncHVfZHBtX2dldF9jbG9ja19ieV90eXBl X3dpdGhfbGF0ZW5jeShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgCQkJCQkgICAgICBz dHJ1Y3QgcHBfY2xvY2tfbGV2ZWxzX3dpdGhfbGF0ZW5jeSAqY2xvY2tzKQo+ICB7Cj4gIAljb25z dCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5j czsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAgCWlmICghcHBfZnVuY3MtPmdldF9jbG9ja19ieV90 eXBlX3dpdGhfbGF0ZW5jeSkKPiAgCQlyZXR1cm4gMDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2 LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+Z2V0X2Nsb2NrX2J5X3R5cGVfd2l0aF9s YXRlbmN5KGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYt PnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+Z2V0X2Nsb2NrX2J5X3R5cGVfd2l0aF9s YXRlbmN5KGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkJCSAgICAgICB0eXBlLAo+ ICAJCQkJCQkgICAgICAgY2xvY2tzKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+IC0KPiAtCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX2dldF9jbG9j a19ieV90eXBlX3dpdGhfdm9sdGFnZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAt MTgxMCw2OSArMTU0NSw1MyBAQCBpbnQgYW1kZ3B1X2RwbV9nZXRfY2xvY2tfYnlfdHlwZV93aXRo X3ZvbHRhZ2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkJICAgICAgc3RydWN0 IHBwX2Nsb2NrX2xldmVsc193aXRoX3ZvbHRhZ2UgKmNsb2NrcykKPiAgewo+ICAJY29uc3Qgc3Ry dWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3M7Cj4g LQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIXBwX2Z1bmNzLT5nZXRfY2xvY2tfYnlfdHlwZV93 aXRoX3ZvbHRhZ2UpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9jbG9ja19ieV90eXBlX3dpdGhfdm9sdGFn ZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5t dXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPmdldF9jbG9ja19ieV90eXBlX3dpdGhfdm9sdGFn ZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAJCQkJCQkgICAgICAgdHlwZSwKPiAgCQkJ CQkJICAgICAgIGNsb2Nrcyk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAt Cj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9zZXRfd2F0ZXJtYXJr c19mb3JfY2xvY2tzX3JhbmdlcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgCQkJCQkg ICAgICAgdm9pZCAqY2xvY2tfcmFuZ2VzKQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1 bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAw Owo+ICAKPiAgCWlmICghcHBfZnVuY3MtPnNldF93YXRlcm1hcmtzX2Zvcl9jbG9ja3NfcmFuZ2Vz KQo+ICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+c2V0X3dhdGVybWFya3NfZm9yX2Nsb2Nrc19yYW5n ZXMoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0u bXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5zZXRfd2F0ZXJtYXJrc19mb3JfY2xvY2tzX3Jh bmdlcyhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAJCQkJCQkJIGNsb2NrX3Jhbmdlcyk7 Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9kaXNwbGF5X2Nsb2NrX3ZvbHRhZ2VfcmVxdWVzdChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgCQkJCQkgICAgIHN0cnVjdCBwcF9kaXNwbGF5 X2Nsb2NrX3JlcXVlc3QgKmNsb2NrKQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNz ICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ ICAKPiAgCWlmICghcHBfZnVuY3MtPmRpc3BsYXlfY2xvY2tfdm9sdGFnZV9yZXF1ZXN0KQo+ICAJ CXJldHVybiAtRU9QTk9UU1VQUDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7 Cj4gLQlyZXQgPSBwcF9mdW5jcy0+ZGlzcGxheV9jbG9ja192b2x0YWdlX3JlcXVlc3QoYWRldi0+ cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ ICsJcmV0dXJuIHBwX2Z1bmNzLT5kaXNwbGF5X2Nsb2NrX3ZvbHRhZ2VfcmVxdWVzdChhZGV2LT5w b3dlcnBsYXkucHBfaGFuZGxlLAo+ICAJCQkJCQkgICAgICBjbG9jayk7Cj4gLQltdXRleF91bmxv Y2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBpbnQg YW1kZ3B1X2RwbV9nZXRfY3VycmVudF9jbG9ja3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs Cj4gIAkJCQkgIHN0cnVjdCBhbWRfcHBfY2xvY2tfaW5mbyAqY2xvY2tzKQo+ICB7Cj4gIAljb25z dCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5j czsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAgCWlmICghcHBfZnVuY3MtPmdldF9jdXJyZW50X2Ns b2NrcykKPiAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+ cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF9jdXJyZW50X2Nsb2NrcyhhZGV2LT5w b3dlcnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4g KwlyZXR1cm4gcHBfZnVuY3MtPmdldF9jdXJyZW50X2Nsb2NrcyhhZGV2LT5wb3dlcnBsYXkucHBf aGFuZGxlLAo+ICAJCQkJCSAgIGNsb2Nrcyk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11 dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICB2b2lkIGFtZGdwdV9kcG1fbm90 aWZ5X3NtdV9lbmFibGVfcHdlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+IEBAIC0xODgy LDQzICsxNjAxLDM0IEBAIHZvaWQgYW1kZ3B1X2RwbV9ub3RpZnlfc211X2VuYWJsZV9wd2Uoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gIAlpZiAoIXBwX2Z1bmNzLT5ub3RpZnlfc211X2Vu YWJsZV9wd2UpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4 KTsKPiArCWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICAJcHBfZnVuY3MtPm5vdGlm eV9zbXVfZW5hYmxlX3B3ZShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlKTsKPiAtCW11dGV4X3Vu bG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9zZXRfYWN0 aXZlX2Rpc3BsYXlfY291bnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkJdWlu dDMyX3QgY291bnQpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNz ID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYg KCFwcF9mdW5jcy0+c2V0X2FjdGl2ZV9kaXNwbGF5X2NvdW50KQo+ICAJCXJldHVybiAtRU9QTk9U U1VQUDsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9m dW5jcy0+c2V0X2FjdGl2ZV9kaXNwbGF5X2NvdW50KGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUs Cj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+ c2V0X2FjdGl2ZV9kaXNwbGF5X2NvdW50KGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJ CQkJCSBjb3VudCk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQly ZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2RwbV9zZXRfbWluX2RlZXBfc2xlZXBf ZGNlZmNsayhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgCQkJCQkgIHVpbnQzMl90IGNs b2NrKQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYt PnBvd2VycGxheS5wcF9mdW5jczsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAgCWlmICghcHBfZnVu Y3MtPnNldF9taW5fZGVlcF9zbGVlcF9kY2VmY2xrKQo+ICAJCXJldHVybiAtRU9QTk9UU1VQUDsK PiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQlyZXQgPSBwcF9mdW5jcy0+ c2V0X21pbl9kZWVwX3NsZWVwX2RjZWZjbGsoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiAr CWd1YXJkKG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5zZXRf bWluX2RlZXBfc2xlZXBfZGNlZmNsayhhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ICAJCQkJ CQkgICBjbG9jayk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQly ZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICB2b2lkIGFtZGdwdV9kcG1fc2V0X2hhcmRfbWluX2RjZWZj bGtfYnlfZnJlcShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiBAQCAtMTkyOSwxMCArMTYz OSw5IEBAIHZvaWQgYW1kZ3B1X2RwbV9zZXRfaGFyZF9taW5fZGNlZmNsa19ieV9mcmVxKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAJaWYgKCFwcF9mdW5jcy0+c2V0X2hhcmRfbWluX2Rj ZWZjbGtfYnlfZnJlcSkKPiAgCQlyZXR1cm47Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0u bXV0ZXgpOwo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gIAlwcF9mdW5jcy0+ c2V0X2hhcmRfbWluX2RjZWZjbGtfYnlfZnJlcShhZGV2LT5wb3dlcnBsYXkucHBfaGFuZGxlLAo+ ICAJCQkJCSAgICAgICBjbG9jayk7Cj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsK PiAgfQo+ICAKPiAgdm9pZCBhbWRncHVfZHBtX3NldF9oYXJkX21pbl9mY2xrX2J5X2ZyZXEoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gQEAgLTE5NDMsNDQgKzE2NTIsMzUgQEAgdm9pZCBh bWRncHVfZHBtX3NldF9oYXJkX21pbl9mY2xrX2J5X2ZyZXEoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsCj4gIAlpZiAoIXBwX2Z1bmNzLT5zZXRfaGFyZF9taW5fZmNsa19ieV9mcmVxKQo+ICAJ CXJldHVybjsKPiAgCj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwlndWFyZCht dXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiAgCXBwX2Z1bmNzLT5zZXRfaGFyZF9taW5fZmNsa19i eV9mcmVxKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkJICAgIGNsb2NrKTsKPiAt CW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+ICB9Cj4gIAo+ICBpbnQgYW1kZ3B1X2Rw bV9kaXNwbGF5X2Rpc2FibGVfbWVtb3J5X2Nsb2NrX3N3aXRjaChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKPiAgCQkJCQkJICAgYm9vbCBkaXNhYmxlX21lbW9yeV9jbG9ja19zd2l0Y2gpCj4g IHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJw bGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYgKCFwcF9mdW5jcy0+ZGlz cGxheV9kaXNhYmxlX21lbW9yeV9jbG9ja19zd2l0Y2gpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0J bXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmRpc3BsYXlf ZGlzYWJsZV9tZW1vcnlfY2xvY2tfc3dpdGNoKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4g KwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+ZGlz cGxheV9kaXNhYmxlX21lbW9yeV9jbG9ja19zd2l0Y2goYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRs ZSwKPiAgCQkJCQkJCSAgICBkaXNhYmxlX21lbW9yeV9jbG9ja19zd2l0Y2gpOwo+IC0JbXV0ZXhf dW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAg aW50IGFtZGdwdV9kcG1fZ2V0X21heF9zdXN0YWluYWJsZV9jbG9ja3NfYnlfZGMoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkJCXN0cnVjdCBwcF9zbXVfbnZfY2xvY2tfdGFibGUg Km1heF9jbG9ja3MpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNz ID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYg KCFwcF9mdW5jcy0+Z2V0X21heF9zdXN0YWluYWJsZV9jbG9ja3NfYnlfZGMpCj4gIAkJcmV0dXJu IC1FT1BOT1RTVVBQOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCXJl dCA9IHBwX2Z1bmNzLT5nZXRfbWF4X3N1c3RhaW5hYmxlX2Nsb2Nrc19ieV9kYyhhZGV2LT5wb3dl cnBsYXkucHBfaGFuZGxlLAo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5wbS5tdXRleCk7Cj4gKwly ZXR1cm4gcHBfZnVuY3MtPmdldF9tYXhfc3VzdGFpbmFibGVfY2xvY2tzX2J5X2RjKGFkZXYtPnBv d2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkJCQkgbWF4X2Nsb2Nrcyk7Cj4gLQltdXRleF91bmxv Y2soJmFkZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBlbnVt IHBwX3NtdV9zdGF0dXMgYW1kZ3B1X2RwbV9nZXRfdWNsa19kcG1fc3RhdGVzKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAo+IEBAIC0xOTg4LDM1ICsxNjg4LDI3IEBAIGVudW0gcHBfc211X3N0 YXR1cyBhbWRncHVfZHBtX2dldF91Y2xrX2RwbV9zdGF0ZXMoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsCj4gIAkJCQkJCSAgdW5zaWduZWQgaW50ICpudW1fc3RhdGVzKQo+ICB7Cj4gIAljb25z dCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzICpwcF9mdW5jcyA9IGFkZXYtPnBvd2VycGxheS5wcF9mdW5j czsKPiAtCWludCByZXQgPSAwOwo+ICAKPiAgCWlmICghcHBfZnVuY3MtPmdldF91Y2xrX2RwbV9z dGF0ZXMpCj4gIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAKPiAtCW11dGV4X2xvY2soJmFkZXYt PnBtLm11dGV4KTsKPiAtCXJldCA9IHBwX2Z1bmNzLT5nZXRfdWNsa19kcG1fc3RhdGVzKGFkZXYt PnBvd2VycGxheS5wcF9oYW5kbGUsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11dGV4KTsK PiArCXJldHVybiBwcF9mdW5jcy0+Z2V0X3VjbGtfZHBtX3N0YXRlcyhhZGV2LT5wb3dlcnBsYXku cHBfaGFuZGxlLAo+ICAJCQkJCSAgICBjbG9ja192YWx1ZXNfaW5fa2h6LAo+ICAJCQkJCSAgICBu dW1fc3RhdGVzKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJl dHVybiByZXQ7Cj4gIH0KPiAgCj4gIGludCBhbWRncHVfZHBtX2dldF9kcG1fY2xvY2tfdGFibGUo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkgICBzdHJ1Y3QgZHBtX2Nsb2NrcyAq Y2xvY2tfdGFibGUpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNz ID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYg KCFwcF9mdW5jcy0+Z2V0X2RwbV9jbG9ja190YWJsZSkKPiAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7 Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3Mt PmdldF9kcG1fY2xvY2tfdGFibGUoYWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwKPiArCWd1YXJk KG11dGV4KSgmYWRldi0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRfZHBtX2Ns b2NrX3RhYmxlKGFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCj4gIAkJCQkJICAgIGNsb2NrX3Rh YmxlKTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+IC0KPiAtCXJldHVybiBy ZXQ7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC0yMDM3LDE3ICsxNzI5LDEzIEBAIHNzaXplX3QgYW1k Z3B1X2RwbV9nZXRfdGVtcF9tZXRyaWNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAJ CQkJICAgIGVudW0gc211X3RlbXBfbWV0cmljX3R5cGUgdHlwZSwgdm9pZCAqdGFibGUpCj4gIHsK PiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBwX2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5 LnBwX2Z1bmNzOwo+IC0JaW50IHJldDsKPiAgCj4gIAlpZiAoIXBwX2Z1bmNzLT5nZXRfdGVtcF9t ZXRyaWNzIHx8Cj4gIAkgICAgIWFtZGdwdV9kcG1faXNfdGVtcF9tZXRyaWNzX3N1cHBvcnRlZChh ZGV2LCB0eXBlKSkKPiAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygm YWRldi0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF90ZW1wX21ldHJpY3MoYWRl di0+cG93ZXJwbGF5LnBwX2hhbmRsZSwgdHlwZSwgdGFibGUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZh ZGV2LT5wbS5tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCWd1YXJkKG11dGV4KSgmYWRl di0+cG0ubXV0ZXgpOwo+ICsJcmV0dXJuIHBwX2Z1bmNzLT5nZXRfdGVtcF9tZXRyaWNzKGFkZXYt PnBvd2VycGxheS5wcF9oYW5kbGUsIHR5cGUsIHRhYmxlKTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAg LTIwNjQsMTkgKzE3NTIsMTYgQEAgYm9vbCBhbWRncHVfZHBtX2lzX3RlbXBfbWV0cmljc19zdXBw b3J0ZWQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAkJCQkJICBlbnVtIHNtdV90ZW1w X21ldHJpY190eXBlIHR5cGUpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhbWRfcG1fZnVuY3MgKnBw X2Z1bmNzID0gYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzOwo+IC0JYm9vbCBzdXBwb3J0X3RlbXBf bWV0cmljcyA9IGZhbHNlOwo+ICAKPiAgCWlmICghcHBfZnVuY3MtPnRlbXBfbWV0cmljc19pc19z dXBwb3J0ZWQpCj4gLQkJcmV0dXJuIHN1cHBvcnRfdGVtcF9tZXRyaWNzOwo+ICsJCXJldHVybiBm YWxzZTsKPiAgCj4gLQlpZiAoaXNfc3VwcG9ydF9zd19zbXUoYWRldikpIHsKPiAtCQltdXRleF9s b2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4gLQkJc3VwcG9ydF90ZW1wX21ldHJpY3MgPQo+IC0JCQlw cF9mdW5jcy0+dGVtcF9tZXRyaWNzX2lzX3N1cHBvcnRlZChhZGV2LT5wb3dlcnBsYXkucHBfaGFu ZGxlLCB0eXBlKTsKPiAtCQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPiArCWlmICgh aXNfc3VwcG9ydF9zd19zbXUoYWRldikpIHsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gIAo+ IC0JcmV0dXJuIHN1cHBvcnRfdGVtcF9tZXRyaWNzOwo+ICsJZ3VhcmQobXV0ZXgpKCZhZGV2LT5w bS5tdXRleCk7Cj4gKwlyZXR1cm4gcHBfZnVuY3MtPnRlbXBfbWV0cmljc19pc19zdXBwb3J0ZWQo YWRldi0+cG93ZXJwbGF5LnBwX2hhbmRsZSwgdHlwZSk7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC0y MDk4LDE3ICsxNzgzLDEzIEBAIHNzaXplX3QgYW1kZ3B1X2RwbV9nZXRfeGNwX21ldHJpY3Moc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGludCB4Y3BfaWQsCj4gIAkJCQkgICB2b2lkICp0YWJs ZSkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGFtZF9wbV9mdW5jcyAqcHBfZnVuY3MgPSBhZGV2LT5w b3dlcnBsYXkucHBfZnVuY3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAoIXBwX2Z1bmNz LT5nZXRfeGNwX21ldHJpY3MpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmYWRl di0+cG0ubXV0ZXgpOwo+IC0JcmV0ID0gcHBfZnVuY3MtPmdldF94Y3BfbWV0cmljcyhhZGV2LT5w b3dlcnBsYXkucHBfaGFuZGxlLCB4Y3BfaWQsCj4gKwlndWFyZChtdXRleCkoJmFkZXYtPnBtLm11 dGV4KTsKPiArCXJldHVybiBwcF9mdW5jcy0+Z2V0X3hjcF9tZXRyaWNzKGFkZXYtPnBvd2VycGxh eS5wcF9oYW5kbGUsIHhjcF9pZCwKPiAgCQkJCQl0YWJsZSk7Cj4gLQltdXRleF91bmxvY2soJmFk ZXYtPnBtLm11dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBjb25zdCBzdHJ1 Y3QgcmFzX3NtdV9kcnYgKmFtZGdwdV9kcG1fZ2V0X3Jhc19zbXVfZHJpdmVyKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQoK