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 phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 61CD8ECAAD5 for ; Mon, 5 Sep 2022 08:55:25 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B2490847FE; Mon, 5 Sep 2022 10:55:22 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=microchip.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=microchip.com header.i=@microchip.com header.b="joicBeB0"; dkim=pass (1024-bit key; unprotected) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.b="meF7McDN"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id DD4548481B; Mon, 5 Sep 2022 10:55:20 +0200 (CEST) Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 1C9ED847FE for ; Mon, 5 Sep 2022 10:55:08 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=microchip.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=Eugen.Hristev@microchip.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1662368109; x=1693904109; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=j67yrPuu3Y0gVQ+ixXm2WQn8jmhiYDM4JRRKqVaeWGY=; b=joicBeB0Yf8hP+ED1HlXpnLfp2w8XOAmILXayWatpWYYoFWs6jH5Ow64 G4ihsWPiCVy2/q++BpPx4yh/KpI+kPoAaeXlh/1jxyqu7HiH6leut3NYU pgYRZKarM/tKztl0va80YGRU+7oJoqinNRpPisug/CyTXnIsraZcJCnij y8v2lYKMQRand9ImNACnv/OloQfX77298b1Spls9vlz6luLc79AryIZbD mfgADN4y+OJgZDvo6jvKBaqySOI6wdZvPAJ16o5F0QhJkw9A/h/rhPXA8 X6OVN+MeBsLhBalYATLr4FxY87vQhU/i8QcCfZrRef7wcH4Ywz/2iwmH0 Q==; X-IronPort-AV: E=Sophos;i="5.93,290,1654585200"; d="scan'208";a="179192949" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa3.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 05 Sep 2022 01:55:05 -0700 Received: from chn-vm-ex03.mchp-main.com (10.10.85.151) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Mon, 5 Sep 2022 01:55:05 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12 via Frontend Transport; Mon, 5 Sep 2022 01:55:05 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WVSssyL6Oh0/cSSX8do51+vOUl0dKQX2Q15fYQiECioSyiyL/QqWh280zsreKfSHhKL0UT0t9vqDJldwYf5KD1s8bYbwSY3/S3O09JXsyfV7TRZhv4on6CmyK3rFBBuMOUUkkcCgk9VReHIy+MG3TF/CuolxEbje76CNoNnmbKpfMCoSOyej7XGhLoVO4e6V3XW3ev4Amg15sH5lXkuYD4cKGYMakEinhk1pqU5TJBJ9pJ5WT26e2zuL9jr5SL+Vcs0R9ScSqB52MuqLBuhE9x4+gmKAH/egSSMZDolaUYj8WjC3pKaf3DLHiKBPzDkVzlt7JlgDi4gNQjSAIuYcoA== 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=j67yrPuu3Y0gVQ+ixXm2WQn8jmhiYDM4JRRKqVaeWGY=; b=c1T2gt0QjvPbx+Y6pKdTsQnXmg0Xrj0K1IKmYcW9RWIXwIzM3mpY3ntFmaa38y3iVFNb0/ROt5bho8vwiE2Sjcqwgc2ZU5Ugq5vGsShFi1gaAtHpi0uO2U1jZuUdiy9jlZxfq4B4QE5kVAOmBXzpZI4u2SGxFbM8gvJD0JUfo5UH2TvW6bxXtgIwm/BJRTuuVObwB1cL8B7u2uc5OfuAG8qmZjivBt/tooSpPXsjVWgOhyQnu/a6ZRXUz9QLvhAG2g6dhzuJ5zBlhHAJzZxcJdSvmdwvjbv0PXkW3gybd9Jz6DPst+eZAYQX77OsZJPneYhSSShmV4RSLeNpX53MXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=j67yrPuu3Y0gVQ+ixXm2WQn8jmhiYDM4JRRKqVaeWGY=; b=meF7McDNC6uAubfb735anvDpmzSLaCKn20n0iNkTc5MjqqwtoTlrpdrsnq/kKj29qqrnE7Rg8TrK6m+ZApYhdxRdVwtFwAtUgxs7+YSFtO0MLa8bmRLUjgi1M7L+B0gj4h715K2s4wWkan5B74rdYCiiKgNTHReitf+/TcWi0zQ= Received: from BL1PR11MB5384.namprd11.prod.outlook.com (2603:10b6:208:311::14) by DM8PR11MB5733.namprd11.prod.outlook.com (2603:10b6:8:30::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.11; Mon, 5 Sep 2022 08:55:00 +0000 Received: from BL1PR11MB5384.namprd11.prod.outlook.com ([fe80::157:bd28:ee31:c6ab]) by BL1PR11MB5384.namprd11.prod.outlook.com ([fe80::157:bd28:ee31:c6ab%6]) with mapi id 15.20.5588.018; Mon, 5 Sep 2022 08:55:00 +0000 From: To: , CC: , , , , , , , , , , , , , , Subject: Re: [PATCH v2 1/9] nand: atmel: Add DM based NAND driver Thread-Topic: [PATCH v2 1/9] nand: atmel: Add DM based NAND driver Thread-Index: AQHYu29c4ajGcxNgAkKFfqke37PanK3Qk+CA Date: Mon, 5 Sep 2022 08:55:00 +0000 Message-ID: <6a12fb91-2564-cb00-6720-874dccb2428a@microchip.com> References: <20220829061928.21895-1-balamanikandan.gunasundar@microchip.com> <20220829061928.21895-2-balamanikandan.gunasundar@microchip.com> In-Reply-To: <20220829061928.21895-2-balamanikandan.gunasundar@microchip.com> Accept-Language: en-US, ro-RO Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microchip.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 66f2967d-1238-4175-be88-08da8f1c50b5 x-ms-traffictypediagnostic: DM8PR11MB5733:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: WcJs2mw5g+fhpHpk2ulPkUuGEitIOKHVUKRpWaFvi5OH5CWr72SB4Y7aK+2vT/vHGOEX1VeCI/mcYnEPPB8olbg7kTeEepreUZPTw9ZkwSDaJCVrk+/gOyARkcZYlhiusZfYC551O+uWw6XRvWM7NMG05bmJLNmcs3YB8YRpzvGorCrMOoMsn2tgLGe1kfJGjjp8RjdkaDyDPz3bT0BktxCm35KS4U7+XRjxlKAvXZmzflBxYQsBzbCj6V/GtF96wXuhz6GC//zZd6jMChp9pylgDcgJFAbXRi/54z+0LGk1mfAuI0Bl3R5d2rslT8AgmHtxxQrKMqTK2Q48L8Sok2pzgRmG9ykOaDUhVM2CVdtHpmUKOVrbQSsou2u2UDu4XxrdAw9nb7E2OVA70XfZAtk+UThZjYHT6ZezStQp3ilf+Th8Ec6bKt4xg9vXNTB58StyKEllA9Ot2Y64ui7msvBNj02ZgBes5tBjJFmAu9IB89d5wx3VH/OCeF56joF6ad6xDqWDSdO4MzFzXGHLprCKOnlGb0Y25JMs/OignzWm9X145YErxdNBMHKdXwziPYqkWb2dXu8VWdGXe/t0GOfTywupK7S9BeOVCw5BVdsI9qiwdboz6hEPJdA8LOTKUsBzUYuWKmAfDGO4biONxzbQ4ljwKKazZmjZ8t4uPQ5cGBGpgDnvGDFK4DRezXEta+znN9+gkeVHqIiWVsr8T6JKGrhh4ZoUmif5NKGnGITcZnN7VysWnjhQEc8zStM4+eELAQbLx0s95uuvB0dz+l6f4A+ID9Y0C/wgtCfRJKGYjSITt5ArHzIg7m+4YQuJibW80zgft3b0UtMmku/Nt7arz0MH2gy/bhaj3vtHqk8= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL1PR11MB5384.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(39860400002)(346002)(366004)(376002)(136003)(396003)(86362001)(107886003)(186003)(2616005)(478600001)(41300700001)(71200400001)(31696002)(6486002)(966005)(6512007)(26005)(6506007)(122000001)(38100700002)(38070700005)(53546011)(83380400001)(316002)(5660300002)(8936002)(54906003)(2906002)(66446008)(64756008)(76116006)(66946007)(31686004)(36756003)(8676002)(4326008)(110136005)(66556008)(7416002)(66476007)(91956017)(30864003)(43740500002)(45980500001)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZmJ3d0U1aWY3bGRQVUJtdGt3RldkYjF0YWxYUjROWnE4ajNhcElCSGJJZzFE?= =?utf-8?B?RzFHSk0rMmVFZDdGNkcreGdVWXBzU1U0K0xSVXVwYXliN1l4NHRMMUZRY08v?= =?utf-8?B?UHhTWTVwTFE5Vkl2dG5CMjF2WU03b1hXTzNYalNvMmhJT1FUbVBtSHFsSGU5?= =?utf-8?B?TGNtQ0hMODZaQVAwOE9RZytMekd6eXMvYnM1VXFHRVVxQ2gzRkhENGQvVnA5?= =?utf-8?B?ZThpRDYrNVplNnplN0NLRjQ4akx6akxhUS9MZnRFZCtnaFdPekFlMStsK1E5?= =?utf-8?B?WElySU5TYUxVR0UvdjYxVFdyZWlvWXRRa0owVEVPaGJDYnZ3dkNtenlSM0hp?= =?utf-8?B?RzRrNGU5VnNDK1BrZDV3TnVpbitEQmtzL1BLNklIUWExNDhoZVdsOVBwanI5?= =?utf-8?B?UVZtQlYyVDAyQkJhS3BrZW9IOTFuUFVOMC9qR29aejc3ZkZnMS81bUdRL09p?= =?utf-8?B?SFpuMzJ2L1Vvd201bWlOc1h1bTJlcFp2TUNTYlhUN2hlUlpDUTlzcENHVTF2?= =?utf-8?B?VGJxcWlWM21nMVhIckUwajBpN21SL202MHNlZTUwUmFsaDExdVVHeFJTNk9p?= =?utf-8?B?MGtYK2ttVlNQM092Y0FwSXk0aEtEN1RzMlAwY3ltcHg5cmFkSlZDNXVqRzZy?= =?utf-8?B?M3c1VSsrTmVPdlBEdlFsTjNIZ2NuaWU4RjVJcW0rZlVIWCtDYk5ac0I0emRi?= =?utf-8?B?ZEZ6WW9EUjZPOXVzVFFpZ1VCUWIvYm8rVEFYZURTWElHMlJoU0o4UHdZNUdS?= =?utf-8?B?UEVwR1hMeHpsZWpDUFRpYmczZG4xMUN2dmk1MUsrZkQzdW15YnBJZDVIS2Q5?= =?utf-8?B?MmhWUXltQ0UzL3ByWm51MUFrSm1wOHcwTE9FbS9sM0Fkd3VnWlU0QlFJNkZC?= =?utf-8?B?RWNqZHhVTWc3dCtjdWdvSkkvSWZRREk1Rm9VMkN4ZDFxaTZEalI3TGxaYzdV?= =?utf-8?B?TDlhcWoyQ0pYODZYUHVQdURBcVZZSnZ5QkZxQ2xNN3YyeE53RkNsYW5rRFlP?= =?utf-8?B?eTQzL3VXR2RBMG0wZFFQN1Rkc0lxbmJWK0ZzTHZJQkYvcDBRUzZJTXhTaExW?= =?utf-8?B?R00yWlFTWTZNODVveUpPemZwUUE1Vjg3d1hMRk1GdllNT1oza3JQUjF5Y3dQ?= =?utf-8?B?MjdaYlFpcmxxQU5WMlg5alJkMkJ6bC9PcnQ4UmZRQ1BPOEtyMGhjeXVKQllP?= =?utf-8?B?UUNzZG1TT0hKcXpuaFJSdjFyclY3WEZBanJNSXlyY25ybXFyMUYxRm15cDBh?= =?utf-8?B?QXhsM3Q3b1U5TDJGYmlPU01sU2V5RHFSZlZFQVBMbzZScHZiQnJNM2xRK1VM?= =?utf-8?B?clZBaDdJOUNwOGlaR2NYZVB1N0ZNM0I5U3V4bEVHYUo4QVpQQjBCOUNYQUVx?= =?utf-8?B?K3RmVWxMY3lqbWlPQ29jUU9KMEdzeC8wanpMWlIzR3VIbk9KRUpmbVlIc25S?= =?utf-8?B?cTdLYlJHUy9wYTJ1OEkxRWY5QU95MjU2RURtNGRSK29FWjZPcHp4cU9oTm1G?= =?utf-8?B?VVYwamEyNHdwRThWNmtMcGlBMjYzVTdmOGlwYWd1MW1xZ0N0VmcrK3pndTdh?= =?utf-8?B?RU1jYWE3bDNLV25ud1NWSVFXTjUxaXVkU1BSZFhZcEoyUW5nWVR3bE41QlQ0?= =?utf-8?B?MGRpTStXOFpxeVZFakg5emNMc21nSlZKUFZxVXBnMlI2TDRreUJFakU1SWhw?= =?utf-8?B?NTdxazJGMjNHTXRGRE5mSTlXNmQzbDdjNWZETnllN0hrb2hsV09TVFhRT2JH?= =?utf-8?B?WU5wSFpEU3pnVnZCOGhLdXhwY3czNVRIRjEydUFnMEo3ZkQxTFVSVzgvd2x0?= =?utf-8?B?QVVnZ0d1aE5TYlNaM1pDRDVsdklMZHNrV1dPM0JVdWhVMTdSWmtZdzdrS3ZV?= =?utf-8?B?ZExHS0dDUEZ4eThpcy9iSTRWRFZpdnRWRUVGL3BTdFJmSWNIWGdlVFZKWUo1?= =?utf-8?B?WTJNY0VoRFRmMUtLZ3NMMXU5T2lKNEFLcTJ5Z044SGF3cVc3V21rZ0xubmto?= =?utf-8?B?ZDVzTVdNN0llenIxZFpDQzFyQk14UDJteURPZ1BOamcxVkNUZ1BiY1ZmY3I0?= =?utf-8?B?TVFqTCtLMEM0eEpiWk9Cc2diUFMrdjRzRHhqZ1pOSStZOXQ3eU14RS9UZSsv?= =?utf-8?B?ZndPRmR3eUVoNEUvYmtBS0tNSEd1b0lLVnJKbTAwSjFCVC82SzFXQ1QwMXZJ?= =?utf-8?B?bGc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <504792D19317A348ADD2B5EF7C1BBD3F@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BL1PR11MB5384.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 66f2967d-1238-4175-be88-08da8f1c50b5 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Sep 2022 08:55:00.2134 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 87CplYAdc8XWmGNacjMdzieEzs9DdzCET1dFHaIbffJ83A1+uA1pVQj9up9OAxCHkwCEkzU18BOo9paLyANqlCKPomRgIu3ibd8RdPFW9vA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM8PR11MB5733 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean T24gOC8yOS8yMiA5OjE5IEFNLCBCYWxhbWFuaWthbmRhbiBHdW5hc3VuZGFyIHdyb3RlOg0KPiBU aGlzIGltcGxlbWVudGF0aW9uIGlzIHBvcnRlZCBmcm9tIHRoZSByZXdvcmsgZG9uZSBieSBCb3Jp cyBCcmV6aWxsb24NCj4gaW4gTGludXguIFRoaXMgcG9ydGluZyBpcyBkb25lIGJhc2VkIG9uIGxp bnV4LTUuNC1hdDkxLiBUaGUgZHJpdmVyIGlzDQo+IHRlc3RlZCBpbiBzYW05eDYwZWssIHNhbWE1 ZDNfeHBsYWluZWQsIHNhbTl4NzVlYiBhbmQgc2FtYTdnNTQtZGRyMy1lYi4NCj4gDQo+IENoYW5n ZXMgZG9uZSBpbmNsdWRlcw0KPiANCj4gLSBBZGFwdCBHUElPIGRlc2NyaXB0b3IgYXBpcyBmb3Ig VS1Cb290LiBVc2UNCj4gICAgZ3Bpb19yZXF1ZXN0X2J5X25hbWVfbm9kZXYsIGRtX2dwaW9fZ2V0 X3ZhbHVlIGV0Yy4NCj4gLSBVc2UgVV9CT09UX0RSSVZFUiBpbnN0ZWFkIG9mIHBsYXRmb3JtX2Ry aXZlci4NCj4gLSBSZXBsYWNlIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd2l0aCBzdHJ1Y3QgdWRl dmljZQ0KPiAtIENoZWNrIHRoZSBzdGF0dXMgb2YgbmZjIGV4ZWMgb3BlcmF0aW9uIGJ5IHBvbGxp bmcgdGhlIHN0YXR1cw0KPiAgICByZWdpc3RlciBpbnN0ZWFkIG9mIGludGVycnVwdCBiYXNlZCBo YW5kbGluZw0KPiAtIERNQSBvcGVyYXRpb25zIG5vdCBzdXBwb3J0ZWQuIFJlbW92ZSBpdA0KPiAt IEFkYXB0IERUIHBhcnNpbmcgdG8gVS1Cb290IEFQSXMNCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEJh bGFtYW5pa2FuZGFuIEd1bmFzdW5kYXIgPGJhbGFtYW5pa2FuZGFuLmd1bmFzdW5kYXJAbWljcm9j aGlwLmNvbT4NCj4gLS0tDQo+ICAgZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZyAgICAgICAg ICAgICAgICAgfCAgICA4ICsNCj4gICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZSAgICAg ICAgICAgICAgICB8ICAgIDEgKw0KPiAgIGRyaXZlcnMvbXRkL25hbmQvcmF3L2F0bWVsL01ha2Vm aWxlICAgICAgICAgIHwgICAgNCArDQo+ICAgZHJpdmVycy9tdGQvbmFuZC9yYXcvYXRtZWwvbmFu ZC1jb250cm9sbGVyLmMgfCAyMjkzICsrKysrKysrKysrKysrKysrKw0KPiAgIDQgZmlsZXMgY2hh bmdlZCwgMjMwNiBpbnNlcnRpb25zKCspDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv bXRkL25hbmQvcmF3L2F0bWVsL01ha2VmaWxlDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvbXRkL25hbmQvcmF3L2F0bWVsL25hbmQtY29udHJvbGxlci5jDQo+IA0KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tj b25maWcNCj4gaW5kZXggY2U2N2QxYWJkZS4uNGQwMjNlMjg5MyAxMDA2NDQNCj4gLS0tIGEvZHJp dmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9L Y29uZmlnDQo+IEBAIC0zNyw2ICszNywxNCBAQCBjb25maWcgU1lTX05BTkRfVVNFX0ZMQVNIX0JC VA0KPiAgIAloZWxwDQo+ICAgCSAgRW5hYmxlIHRoZSBCQlQgKEJhZCBCbG9jayBUYWJsZSkgdXNh Z2UuDQo+ICAgDQo+ICtjb25maWcgRE1fTkFORF9BVE1FTA0KPiArICAgICAgIGJvb2wgIlN1cHBv cnQgQXRtZWwgTkFORCBjb250cm9sbGVyIHdpdGggRE0gc3VwcG9ydCINCj4gKyAgICAgICBzZWxl Y3QgU1lTX05BTkRfU0VMRl9JTklUDQo+ICsgICAgICAgaW1wbHkgU1lTX05BTkRfVVNFX0ZMQVNI X0JCVA0KPiArICAgICAgIGhlbHANCj4gKyAgICAgICAgIEVuYWJsZSB0aGlzIGRyaXZlciBmb3Ig TkFORCBmbGFzaCBwbGF0Zm9ybXMgdXNpbmcgYW4gQXRtZWwgTkFORA0KPiArICAgICAgICAgY29u dHJvbGxlci4NCj4gKw0KPiAgIGNvbmZpZyBOQU5EX0FUTUVMDQo+ICAgCWJvb2wgIlN1cHBvcnQg QXRtZWwgTkFORCBjb250cm9sbGVyIg0KPiAgIAlzZWxlY3QgU1lTX05BTkRfU0VMRl9JTklUDQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRk L25hbmQvcmF3L01ha2VmaWxlDQo+IGluZGV4IGEzOThhYTlkODguLjQyYzFmYjI1YjQgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMv bXRkL25hbmQvcmF3L01ha2VmaWxlDQo+IEBAIC00OCw2ICs0OCw3IEBAIGlmZGVmIE5PUk1BTF9E UklWRVJTDQo+ICAgb2JqLSQoQ09ORklHX05BTkRfRUNDX0JDSCkgKz0gbmFuZF9iY2gubw0KPiAg IA0KPiAgIG9iai0kKENPTkZJR19OQU5EX0FUTUVMKSArPSBhdG1lbF9uYW5kLm8NCj4gK29iai0k KENPTkZJR19ETV9OQU5EX0FUTUVMKSArPSBhdG1lbC8NCj4gICBvYmotJChDT05GSUdfTkFORF9B UkFTQU4pICs9IGFyYXNhbl9uZmMubw0KPiAgIG9iai0kKENPTkZJR19OQU5EX0JSQ01OQU5EKSAr PSBicmNtbmFuZC8NCj4gICBvYmotJChDT05GSUdfTkFORF9EQVZJTkNJKSArPSBkYXZpbmNpX25h bmQubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvYXRtZWwvTWFrZWZpbGUg Yi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9hdG1lbC9NYWtlZmlsZQ0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi42NzA4NDE2OTgzDQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvYXRtZWwvTWFrZWZpbGUNCj4gQEAgLTAsMCArMSw0 IEBADQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gK29iai0k KENPTkZJR19ETV9OQU5EX0FUTUVMKQkrPSBhdG1lbC1uYW5kLWNvbnRyb2xsZXIubw0KPiArDQo+ ICthdG1lbC1uYW5kLWNvbnRyb2xsZXItb2Jqcwk6PSBuYW5kLWNvbnRyb2xsZXIubw0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvYXRtZWwvbmFuZC1jb250cm9sbGVyLmMgYi9k cml2ZXJzL210ZC9uYW5kL3Jhdy9hdG1lbC9uYW5kLWNvbnRyb2xsZXIuYw0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi4yOTM2NWM3ZGIwDQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvYXRtZWwvbmFuZC1jb250cm9sbGVyLmMN Cj4gQEAgLTAsMCArMSwyMjkzIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAyMDIyIEFUTUVMDQo+ICsgKiBDb3B5cmlnaHQg MjAxNyBGcmVlIEVsZWN0cm9ucw0KPiArICoNCj4gKyAqIEF1dGhvcjogQm9yaXMgQnJlemlsbG9u IDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPg0KPiArICoNCj4gKyAqIERlcml2 ZWQgZnJvbSB0aGUgYXRtZWxfbmFuZC5jIGRyaXZlciB3aGljaCBjb250YWluZWQgdGhlIGZvbGxv d2luZw0KPiArICogY29weXJpZ2h0czoNCj4gKyAqDQo+ICsgKiAgIENvcHlyaWdodCAyMDAzIFJp Y2sgQnJvbnNvbg0KPiArICoNCj4gKyAqICAgRGVyaXZlZCBmcm9tIGRyaXZlcnMvbXRkL25hbmQv YXV0Y3B1MTIuYyAocmVtb3ZlZCBpbiB2My44KQ0KPiArICoJQ29weXJpZ2h0IDIwMDEgVGhvbWFz IEdsZWl4bmVyIChnbGVpeG5lckBhdXRyb25peC5kZSkNCj4gKyAqDQo+ICsgKiAgIERlcml2ZWQg ZnJvbSBkcml2ZXJzL210ZC9zcGlhLmMgKHJlbW92ZWQgaW4gdjMuOCkNCj4gKyAqCUNvcHlyaWdo dCAyMDAwIFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAY290dy5jb20pDQo+ICsgKg0KPiArICoNCj4g KyAqICAgQWRkIEhhcmR3YXJlIEVDQyBzdXBwb3J0IGZvciBBVDkxU0FNOTI2MCAvIEFUOTFTQU05 MjYzDQo+ICsgKglSaWNoYXJkIEdlbm91ZCAocmljaGFyZC5nZW5vdWRAZ21haWwuY29tKSwgQWRl bmVvIENvcHlyaWdodCAyMDA3DQo+ICsgKg0KPiArICogICBEZXJpdmVkIGZyb20gRGFzIFUtQm9v dCBzb3VyY2UgY29kZQ0KPiArICoJKHUtYm9vdC0xLjEuNS9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2 M2VrL25hbmQuYykNCj4gKyAqCUNvcHlyaWdodCAyMDA2IEFUTUVMIFJvdXNzZXQsIExhY3Jlc3Nv bm5pZXJlIE5pY29sYXMNCj4gKyAqDQo+ICsgKiAgIEFkZCBQcm9ncmFtbWFibGUgTXVsdGliaXQg RUNDIHN1cHBvcnQgZm9yIHZhcmlvdXMgQVQ5MSBTb0MNCj4gKyAqCUNvcHlyaWdodCAyMDEyIEFU TUVMLCBIb25nIFh1DQo+ICsgKg0KPiArICogICBBZGQgTmFuZCBGbGFzaCBDb250cm9sbGVyIHN1 cHBvcnQgZm9yIFNBTUE1IFNvQw0KPiArICoJQ29weXJpZ2h0IDIwMTMgQVRNRUwsIEpvc2ggV3Ug KGpvc2gud3VAYXRtZWwuY29tKQ0KPiArICoNCj4gKyAqICAgUG9ydCBmcm9tIExpbnV4DQo+ICsg KglCYWxhbWFuaWthbmRhbiBHdW5hc3VuZGFyKGJhbGFtYW5pa2FuZGFuLmd1bmFzdW5kYXJAbWlj cm9jaGlwLmNvbSkNCj4gKyAqCUNvcHlyaWdodCAoQykgMjAyMiBNaWNyb2NoaXAgVGVjaG5vbG9n eSBJbmMuDQo+ICsgKg0KPiArICogQSBmZXcgd29yZHMgYWJvdXQgdGhlIG5hbWluZyBjb252ZW50 aW9uIGluIHRoaXMgZmlsZS4gVGhpcyBjb252ZW50aW9uDQo+ICsgKiBhcHBsaWVzIHRvIHN0cnVj dHVyZSBhbmQgZnVuY3Rpb24gbmFtZXMuDQo+ICsgKg0KPiArICogUHJlZml4ZXM6DQo+ICsgKg0K PiArICogLSBhdG1lbF9uYW5kXzogYWxsIGdlbmVyaWMgc3RydWN0dXJlcy9mdW5jdGlvbnMNCj4g KyAqIC0gYXRtZWxfc21jX25hbmRfOiBhbGwgc3RydWN0dXJlcy9mdW5jdGlvbnMgc3BlY2lmaWMg dG8gdGhlIFNNQyBpbnRlcmZhY2UNCj4gKyAqCQkgICAgICAoYXQ5MXNhbTkgYW5kIGF2cjMyIFNv Q3MpDQo+ICsgKiAtIGF0bWVsX2hzbWNfbmFuZF86IGFsbCBzdHJ1Y3R1cmVzL2Z1bmN0aW9ucyBz cGVjaWZpYyB0byB0aGUgSFNNQyBpbnRlcmZhY2UNCj4gKyAqCQkgICAgICAgKHNhbWE1IFNvQ3Mg YW5kIGxhdGVyKQ0KPiArICogLSBhdG1lbF9uZmNfOiBhbGwgc3RydWN0dXJlcy9mdW5jdGlvbnMg dXNlZCB0byBtYW5pcHVsYXRlIHRoZSBORkMgc3ViLWJsb2NrDQo+ICsgKgkJIHRoYXQgaXMgYXZh aWxhYmxlIGluIHRoZSBIU01DIGJsb2NrDQo+ICsgKiAtIDxzb2M+X25hbmRfOiBhbGwgU29DIHNw ZWNpZmljIHN0cnVjdHVyZXMvZnVuY3Rpb25zDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPGFz bS1nZW5lcmljL2dwaW8uaD4NCj4gKyNpbmNsdWRlIDxjbGsuaD4NCj4gKyNpbmNsdWRlIDxkbS9k ZXZpY2VfY29tcGF0Lmg+DQo+ICsjaW5jbHVkZSA8ZG0vZGV2cmVzLmg+DQo+ICsjaW5jbHVkZSA8 ZG0vb2ZfYWRkci5oPg0KPiArI2luY2x1ZGUgPGRtL29mX2FjY2Vzcy5oPg0KPiArI2luY2x1ZGUg PGRtL3VjbGFzcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9pby5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L2lvcG9ydC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24vYXRtZWwt bWF0cml4Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi9hdG1lbC1zbWMuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9tdGQvcmF3bmFuZC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L210ZC9t dGQuaD4NCj4gKyNpbmNsdWRlIDxtYWNoL2F0OTFfc2ZyLmg+DQo+ICsjaW5jbHVkZSA8bmFuZC5o Pg0KPiArI2luY2x1ZGUgPHJlZ21hcC5oPg0KPiArI2luY2x1ZGUgPHN5c2Nvbi5oPg0KPiArDQo+ ICsjaW5jbHVkZSAicG1lY2MuaCINCj4gKw0KPiArI2RlZmluZSBOU0VDX1BFUl9TRUMgICAgMTAw MDAwMDAwMEwNCj4gKw0KPiArI2RlZmluZSBBVE1FTF9IU01DX05GQ19DRkcJCQkweDANCj4gKyNk ZWZpbmUgQVRNRUxfSFNNQ19ORkNfQ0ZHX1NQQVJFU0laRSh4KQkJKCgoeCkgLyA0KSA8PCAyNCkN Cj4gKyNkZWZpbmUgQVRNRUxfSFNNQ19ORkNfQ0ZHX1NQQVJFU0laRV9NQVNLCUdFTk1BU0soMzAs IDI0KQ0KPiArI2RlZmluZSBBVE1FTF9IU01DX05GQ19DRkdfRFRPKGN5YywgbXVsKQkoKChjeWMp IDw8IDE2KSB8ICgobXVsKSA8PCAyMCkpDQo+ICsjZGVmaW5lIEFUTUVMX0hTTUNfTkZDX0NGR19E VE9fTUFYCQlHRU5NQVNLKDIyLCAxNikNCj4gKyNkZWZpbmUgQVRNRUxfSFNNQ19ORkNfQ0ZHX1JC RURHRQkJQklUKDEzKQ0KPiArI2RlZmluZSBBVE1FTF9IU01DX05GQ19DRkdfRkFMTElOR19FREdF CQlCSVQoMTIpDQo+ICsjZGVmaW5lIEFUTUVMX0hTTUNfTkZDX0NGR19SU1BBUkUJCUJJVCg5KQ0K PiArI2RlZmluZSBBVE1FTF9IU01DX05GQ19DRkdfV1NQQVJFCQlCSVQoOCkNCj4gKyNkZWZpbmUg QVRNRUxfSFNNQ19ORkNfQ0ZHX1BBR0VTSVpFX01BU0sJR0VOTUFTSygyLCAwKQ0KPiArI2RlZmlu ZSBBVE1FTF9IU01DX05GQ19DRkdfUEFHRVNJWkUoeCkJCShmbHMoKHgpIC8gNTEyKSAtIDEpDQo+ ICsNCj4gKyNkZWZpbmUgQVRNRUxfSFNNQ19ORkNfQ1RSTAkJCTB4NA0KPiArI2RlZmluZSBBVE1F TF9IU01DX05GQ19DVFJMX0VOCQkJQklUKDApDQo+ICsjZGVmaW5lIEFUTUVMX0hTTUNfTkZDX0NU UkxfRElTCQkJQklUKDEpDQo+ICsNCj4gKyNkZWZpbmUgQVRNRUxfSFNNQ19ORkNfU1IJCQkweDgN Cj4gKyNkZWZpbmUgQVRNRUxfSFNNQ19ORkNfSUVSCQkJMHhjDQo+ICsjZGVmaW5lIEFUTUVMX0hT TUNfTkZDX0lEUgkJCTB4MTANCj4gKyNkZWZpbmUgQVRNRUxfSFNNQ19ORkNfSU1SCQkJMHgxNA0K PiArI2RlZmluZSBBVE1FTF9IU01DX05GQ19TUl9FTkFCTEVECQlCSVQoMSkNCj4gKyNkZWZpbmUg QVRNRUxfSFNNQ19ORkNfU1JfUkJfUklTRQkJQklUKDQpDQo+ICsjZGVmaW5lIEFUTUVMX0hTTUNf TkZDX1NSX1JCX0ZBTEwJCUJJVCg1KQ0KPiArI2RlZmluZSBBVE1FTF9IU01DX05GQ19TUl9CVVNZ CQkJQklUKDgpDQo+ICsjZGVmaW5lIEFUTUVMX0hTTUNfTkZDX1NSX1dSCQkJQklUKDExKQ0KPiAr I2RlZmluZSBBVE1FTF9IU01DX05GQ19TUl9DU0lECQkJR0VOTUFTSygxNCwgMTIpDQo+ICsjZGVm aW5lIEFUTUVMX0hTTUNfTkZDX1NSX1hGUkRPTkUJCUJJVCgxNikNCj4gKyNkZWZpbmUgQVRNRUxf SFNNQ19ORkNfU1JfQ01ERE9ORQkJQklUKDE3KQ0KPiArI2RlZmluZSBBVE1FTF9IU01DX05GQ19T Ul9EVE9FCQkJQklUKDIwKQ0KPiArI2RlZmluZSBBVE1FTF9IU01DX05GQ19TUl9VTkRFRgkJCUJJ VCgyMSkNCj4gKyNkZWZpbmUgQVRNRUxfSFNNQ19ORkNfU1JfQVdCCQkJQklUKDIyKQ0KPiArI2Rl ZmluZSBBVE1FTF9IU01DX05GQ19TUl9ORkNBU0UJCUJJVCgyMykNCj4gKyNkZWZpbmUgQVRNRUxf SFNNQ19ORkNfU1JfRVJST1JTCQkoQVRNRUxfSFNNQ19ORkNfU1JfRFRPRSB8IFwNCj4gKwkJCQkJ CSBBVE1FTF9IU01DX05GQ19TUl9VTkRFRiB8IFwNCj4gKwkJCQkJCSBBVE1FTF9IU01DX05GQ19T Ul9BV0IgfCBcDQo+ICsJCQkJCQkgQVRNRUxfSFNNQ19ORkNfU1JfTkZDQVNFKQ0KPiArI2RlZmlu ZSBBVE1FTF9IU01DX05GQ19TUl9SQkVER0UoeCkJCUJJVCgoeCkgKyAyNCkNCj4gKw0KPiArI2Rl ZmluZSBBVE1FTF9IU01DX05GQ19BRERSCQkJMHgxOA0KPiArI2RlZmluZSBBVE1FTF9IU01DX05G Q19CQU5LCQkJMHgxYw0KPiArDQo+ICsjZGVmaW5lIEFUTUVMX05GQ19NQVhfUkJfSUQJCQk3DQo+ ICsNCj4gKyNkZWZpbmUgQVRNRUxfTkZDX1NSQU1fU0laRQkJCTB4MjQwMA0KPiArDQo+ICsjZGVm aW5lIEFUTUVMX05GQ19DTUQocG9zLCBjbWQpCQkJKChjbWQpIDw8ICgoKHBvcykgKiA4KSArIDIp KQ0KPiArI2RlZmluZSBBVE1FTF9ORkNfVkNNRDIJCQkJQklUKDE4KQ0KPiArI2RlZmluZSBBVE1F TF9ORkNfQUNZQ0xFKG5hZGRycykJCSgobmFkZHJzKSA8PCAxOSkNCj4gKyNkZWZpbmUgQVRNRUxf TkZDX0NTSUQoY3MpCQkJKChjcykgPDwgMjIpDQo+ICsjZGVmaW5lIEFUTUVMX05GQ19EQVRBRU4J CQlCSVQoMjUpDQo+ICsjZGVmaW5lIEFUTUVMX05GQ19ORkNXUgkJCQlCSVQoMjYpDQo+ICsNCj4g KyNkZWZpbmUgQVRNRUxfTkZDX01BWF9BRERSX0NZQ0xFUwkJNQ0KPiArDQo+ICsjZGVmaW5lIEFU TUVMX05BTkRfQUxFX09GRlNFVAkJCUJJVCgyMSkNCj4gKyNkZWZpbmUgQVRNRUxfTkFORF9DTEVf T0ZGU0VUCQkJQklUKDIyKQ0KPiArDQo+ICsjZGVmaW5lIERFRkFVTFRfVElNRU9VVF9NUwkJCTEw MDANCj4gKyNkZWZpbmUgTUlOX0RNQV9MRU4JCQkJMTI4DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qg bmFuZF9lY2NsYXlvdXQgYXRtZWxfcG1lY2Nfb29iaW5mbzsNCj4gKw0KPiArc3RydWN0IG5hbmRf Y29udHJvbGxlcl9vcHMgew0KPiArCWludCAoKmF0dGFjaF9jaGlwKShzdHJ1Y3QgbmFuZF9jaGlw ICpjaGlwKTsNCj4gKwlpbnQgKCpzZXR1cF9kYXRhX2ludGVyZmFjZSkoc3RydWN0IG10ZF9pbmZv ICptdGQsIGludCBjaGlwbnIsDQo+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBuYW5kX2RhdGFfaW50 ZXJmYWNlICpjb25mKTsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBuYW5kX2NvbnRyb2xsZXIgew0K PiArCWNvbnN0IHN0cnVjdCBuYW5kX2NvbnRyb2xsZXJfb3BzICpvcHM7DQo+ICt9Ow0KPiArDQo+ ICtlbnVtIGF0bWVsX25hbmRfcmJfdHlwZSB7DQo+ICsJQVRNRUxfTkFORF9OT19SQiwNCj4gKwlB VE1FTF9OQU5EX05BVElWRV9SQiwNCj4gKwlBVE1FTF9OQU5EX0dQSU9fUkIsDQo+ICt9Ow0KPiAr DQo+ICtzdHJ1Y3QgYXRtZWxfbmFuZF9yYiB7DQo+ICsJZW51bSBhdG1lbF9uYW5kX3JiX3R5cGUg dHlwZTsNCj4gKwl1bmlvbiB7DQo+ICsJCXN0cnVjdCBncGlvX2Rlc2MgZ3BpbzsNCj4gKwkJaW50 IGlkOw0KPiArCX07DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgYXRtZWxfbmFuZF9jcyB7DQo+ICsJ aW50IGlkOw0KPiArCXN0cnVjdCBhdG1lbF9uYW5kX3JiIHJiOw0KPiArCXN0cnVjdCBncGlvX2Rl c2MgY3NncGlvOw0KPiArCXN0cnVjdCB7DQo+ICsJCXZvaWQgX19pb21lbSAqdmlydDsNCj4gKwkJ ZG1hX2FkZHJfdCBkbWE7DQo+ICsJfSBpbzsNCj4gKw0KPiArCXN0cnVjdCBhdG1lbF9zbWNfY3Nf Y29uZiBzbWNjb25mOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGF0bWVsX25hbmQgew0KPiArCXN0 cnVjdCBsaXN0X2hlYWQgbm9kZTsNCj4gKwlzdHJ1Y3QgdWRldmljZSAqZGV2Ow0KPiArCXN0cnVj dCBuYW5kX2NoaXAgYmFzZTsNCj4gKwlzdHJ1Y3QgYXRtZWxfbmFuZF9jcyAqYWN0aXZlY3M7DQo+ ICsJc3RydWN0IGF0bWVsX3BtZWNjX3VzZXIgKnBtZWNjOw0KPiArCXN0cnVjdCBncGlvX2Rlc2Mg Y2RncGlvOw0KPiArCWludCBudW1jczsNCj4gKwlzdHJ1Y3QgbmFuZF9jb250cm9sbGVyICpjb250 cm9sbGVyOw0KPiArCXN0cnVjdCBhdG1lbF9uYW5kX2NzIGNzW107DQo+ICt9Ow0KPiArDQo+ICtz dGF0aWMgaW5saW5lIHN0cnVjdCBhdG1lbF9uYW5kICp0b19hdG1lbF9uYW5kKHN0cnVjdCBuYW5k X2NoaXAgKmNoaXApDQo+ICt7DQo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qg YXRtZWxfbmFuZCwgYmFzZSk7DQo+ICt9DQo+ICsNCj4gK2VudW0gYXRtZWxfbmZjX2RhdGFfeGZl ciB7DQo+ICsJQVRNRUxfTkZDX05PX0RBVEEsDQo+ICsJQVRNRUxfTkZDX1JFQURfREFUQSwNCj4g KwlBVE1FTF9ORkNfV1JJVEVfREFUQSwNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBhdG1lbF9uZmNf b3Agew0KPiArCXU4IGNzOw0KPiArCXU4IG5jbWRzOw0KPiArCXU4IGNtZHNbMl07DQo+ICsJdTgg bmFkZHJzOw0KPiArCXU4IGFkZHJzWzVdOw0KPiArCWVudW0gYXRtZWxfbmZjX2RhdGFfeGZlciBk YXRhOw0KPiArCXUzMiB3YWl0Ow0KPiArCXUzMiBlcnJvcnM7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1 Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyOw0KPiArc3RydWN0IGF0bWVsX25hbmRfY29udHJvbGxl cl9jYXBzOw0KPiArDQo+ICtzdHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyX29wcyB7DQo+ICsJ aW50ICgqcHJvYmUpKHN0cnVjdCB1ZGV2aWNlICp1ZGV2LA0KPiArCQkgICAgIGNvbnN0IHN0cnVj dCBhdG1lbF9uYW5kX2NvbnRyb2xsZXJfY2FwcyAqY2Fwcyk7DQo+ICsJaW50ICgqcmVtb3ZlKShz dHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyICpuYyk7DQo+ICsJdm9pZCAoKm5hbmRfaW5pdCko c3RydWN0IGF0bWVsX25hbmRfY29udHJvbGxlciAqbmMsDQo+ICsJCQkgIHN0cnVjdCBhdG1lbF9u YW5kICpuYW5kKTsNCj4gKwlpbnQgKCplY2NfaW5pdCkoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCk7 DQo+ICsJaW50ICgqc2V0dXBfZGF0YV9pbnRlcmZhY2UpKHN0cnVjdCBhdG1lbF9uYW5kICpuYW5k LCBpbnQgY3NsaW5lLA0KPiArCQkJCSAgICBjb25zdCBzdHJ1Y3QgbmFuZF9kYXRhX2ludGVyZmFj ZSAqY29uZik7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyX2Nh cHMgew0KPiArCWJvb2wgaGFzX2RtYTsNCj4gKwlib29sIGxlZ2FjeV9vZl9iaW5kaW5nczsNCj4g Kwl1MzIgYWxlX29mZnM7DQo+ICsJdTMyIGNsZV9vZmZzOw0KPiArCWNvbnN0IGNoYXIgKmViaV9j c2FfcmVnbWFwX25hbWU7DQo+ICsJY29uc3Qgc3RydWN0IGF0bWVsX25hbmRfY29udHJvbGxlcl9v cHMgKm9wczsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBhdG1lbF9uYW5kX2NvbnRyb2xsZXIgew0K PiArCXN0cnVjdCBuYW5kX2NvbnRyb2xsZXIgYmFzZTsNCj4gKwljb25zdCBzdHJ1Y3QgYXRtZWxf bmFuZF9jb250cm9sbGVyX2NhcHMgKmNhcHM7DQo+ICsJc3RydWN0IHVkZXZpY2UgKmRldjsNCj4g KwlzdHJ1Y3QgcmVnbWFwICpzbWM7DQo+ICsJc3RydWN0IGRtYV9jaGFuICpkbWFjOw0KPiArCXN0 cnVjdCBhdG1lbF9wbWVjYyAqcG1lY2M7DQo+ICsJc3RydWN0IGxpc3RfaGVhZCBjaGlwczsNCj4g KwlzdHJ1Y3QgY2xrICptY2s7DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBh dG1lbF9uYW5kX2NvbnRyb2xsZXIgKg0KPiArdG9fbmFuZF9jb250cm9sbGVyKHN0cnVjdCBuYW5k X2NvbnRyb2xsZXIgKmN0bCkNCj4gK3sNCj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGN0bCwgc3Ry dWN0IGF0bWVsX25hbmRfY29udHJvbGxlciwgYmFzZSk7DQo+ICt9DQo+ICsNCj4gK3N0cnVjdCBh dG1lbF9zbWNfbmFuZF9lYmlfY3NhX2NmZyB7DQo+ICsJdTMyIG9mZnM7DQo+ICsJdTMyIG5mZDBf b25fZDE2Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IGF0bWVsX3NtY19uYW5kX2NvbnRyb2xsZXIg ew0KPiArCXN0cnVjdCBhdG1lbF9uYW5kX2NvbnRyb2xsZXIgYmFzZTsNCj4gKwlzdHJ1Y3QgcmVn bWFwICplYmlfY3NhX3JlZ21hcDsNCj4gKwlzdHJ1Y3QgYXRtZWxfc21jX25hbmRfZWJpX2NzYV9j ZmcgKmViaV9jc2E7DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBhdG1lbF9z bWNfbmFuZF9jb250cm9sbGVyICoNCj4gK3RvX3NtY19uYW5kX2NvbnRyb2xsZXIoc3RydWN0IG5h bmRfY29udHJvbGxlciAqY3RsKQ0KPiArew0KPiArCXJldHVybiBjb250YWluZXJfb2YodG9fbmFu ZF9jb250cm9sbGVyKGN0bCksDQo+ICsJCQkgICAgc3RydWN0IGF0bWVsX3NtY19uYW5kX2NvbnRy b2xsZXIsIGJhc2UpOw0KPiArfQ0KPiArDQo+ICtzdHJ1Y3QgYXRtZWxfaHNtY19uYW5kX2NvbnRy b2xsZXIgew0KPiArCXN0cnVjdCBhdG1lbF9uYW5kX2NvbnRyb2xsZXIgYmFzZTsNCj4gKwlzdHJ1 Y3Qgew0KPiArCQlzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2w7DQo+ICsJCXZvaWQgX19pb21lbSAqdmly dDsNCj4gKwkJZG1hX2FkZHJfdCBkbWE7DQo+ICsJfSBzcmFtOw0KPiArCWNvbnN0IHN0cnVjdCBh dG1lbF9oc21jX3JlZ19sYXlvdXQgKmhzbWNfbGF5b3V0Ow0KPiArCXN0cnVjdCByZWdtYXAgKmlv Ow0KPiArCXN0cnVjdCBhdG1lbF9uZmNfb3Agb3A7DQo+ICsJc3RydWN0IGNvbXBsZXRpb24gY29t cGxldGU7DQo+ICsJaW50IGlycTsNCj4gKw0KPiArCS8qIE9ubHkgdXNlZCB3aGVuIGluc3RhbnRp YXRpbmcgZnJvbSBsZWdhY3kgRFQgYmluZGluZ3MuICovDQo+ICsJc3RydWN0IGNsayAqY2xrOw0K PiArfTsNCj4gKw0KPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgYXRtZWxfaHNtY19uYW5kX2NvbnRy b2xsZXIgKg0KPiArdG9faHNtY19uYW5kX2NvbnRyb2xsZXIoc3RydWN0IG5hbmRfY29udHJvbGxl ciAqY3RsKQ0KPiArew0KPiArCXJldHVybiBjb250YWluZXJfb2YodG9fbmFuZF9jb250cm9sbGVy KGN0bCksDQo+ICsJCQkgICAgc3RydWN0IGF0bWVsX2hzbWNfbmFuZF9jb250cm9sbGVyLCBiYXNl KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgcG1lY2NfY29uZmlnX2VjY19sYXlvdXQoc3Ry dWN0IG5hbmRfZWNjbGF5b3V0ICpsYXlvdXQsDQo+ICsJCQkJICAgIGludCBvb2JzaXplLCBpbnQg ZWNjX2xlbikNCj4gK3sNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWxheW91dC0+ZWNjYnl0ZXMgPSBl Y2NfbGVuOw0KPiArDQo+ICsJLyogRUNDIHdpbGwgb2NjdXB5IHRoZSBsYXN0IGVjY19sZW4gYnl0 ZXMgY29udGludW91c2x5ICovDQo+ICsJZm9yIChpID0gMDsgaSA8IGVjY19sZW47IGkrKykNCj4g KwkJbGF5b3V0LT5lY2Nwb3NbaV0gPSBvb2JzaXplIC0gZWNjX2xlbiArIGk7DQo+ICsNCj4gKwls YXlvdXQtPm9vYmZyZWVbMF0ub2Zmc2V0ID0gMjsNCj4gKwlsYXlvdXQtPm9vYmZyZWVbMF0ubGVu Z3RoID0NCj4gKwkJb29ic2l6ZSAtIGVjY19sZW4gLSBsYXlvdXQtPm9vYmZyZWVbMF0ub2Zmc2V0 Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBhdG1lbF9uZmNfb3BfZG9uZShzdHJ1Y3QgYXRt ZWxfbmZjX29wICpvcCwgdTMyIHN0YXR1cykNCj4gK3sNCj4gKwlvcC0+ZXJyb3JzIHw9IHN0YXR1 cyAmIEFUTUVMX0hTTUNfTkZDX1NSX0VSUk9SUzsNCj4gKwlvcC0+d2FpdCBePSBzdGF0dXMgJiBv cC0+d2FpdDsNCj4gKw0KPiArCXJldHVybiAhb3AtPndhaXQgfHwgb3AtPmVycm9yczsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBhdG1lbF9uZmNfd2FpdChzdHJ1Y3QgYXRtZWxfaHNtY19uYW5k X2NvbnRyb2xsZXIgKm5jLCBib29sIHBvbGwsDQo+ICsJCQkgIHVuc2lnbmVkIGludCB0aW1lb3V0 X21zKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsJdTMyIHN0YXR1czsNCj4gKw0KPiArCWlmICgh dGltZW91dF9tcykNCj4gKwkJdGltZW91dF9tcyA9IERFRkFVTFRfVElNRU9VVF9NUzsNCj4gKw0K PiArCWlmIChwb2xsKQ0KPiArCQlyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQobmMtPmJh c2Uuc21jLA0KPiArCQkJCQkgICAgICAgQVRNRUxfSFNNQ19ORkNfU1IsIHN0YXR1cywNCj4gKwkJ CQkJICAgICAgIGF0bWVsX25mY19vcF9kb25lKCZuYy0+b3AsDQo+ICsJCQkJCQkJCSBzdGF0dXMp LA0KPiArCQkJCQkgICAgICAgMCwgdGltZW91dF9tcyk7DQo+ICsJZWxzZQ0KPiArCQlyZXR1cm4g LUVPUE5PVFNVUFA7DQo+ICsNCj4gKwlpZiAobmMtPm9wLmVycm9ycyAmIEFUTUVMX0hTTUNfTkZD X1NSX0RUT0UpIHsNCj4gKwkJZGV2X2VycihuYy0+YmFzZS5kZXYsICJXYWl0aW5nIE5BTkQgUi9C IFRpbWVvdXRcbiIpOw0KPiArCQlyZXQgPSAtRVRJTUVET1VUOw0KPiArCX0NCj4gKw0KPiArCWlm IChuYy0+b3AuZXJyb3JzICYgQVRNRUxfSFNNQ19ORkNfU1JfVU5ERUYpIHsNCj4gKwkJZGV2X2Vy cihuYy0+YmFzZS5kZXYsICJBY2Nlc3MgdG8gYW4gdW5kZWZpbmVkIGFyZWFcbiIpOw0KPiArCQly ZXQgPSAtRUlPOw0KPiArCX0NCj4gKw0KPiArCWlmIChuYy0+b3AuZXJyb3JzICYgQVRNRUxfSFNN Q19ORkNfU1JfQVdCKSB7DQo+ICsJCWRldl9lcnIobmMtPmJhc2UuZGV2LCAiQWNjZXNzIHdoaWxl IGJ1c3lcbiIpOw0KPiArCQlyZXQgPSAtRUlPOw0KPiArCX0NCj4gKw0KPiArCWlmIChuYy0+b3Au ZXJyb3JzICYgQVRNRUxfSFNNQ19ORkNfU1JfTkZDQVNFKSB7DQo+ICsJCWRldl9lcnIobmMtPmJh c2UuZGV2LCAiV3JvbmcgYWNjZXNzIHNpemVcbiIpOw0KPiArCQlyZXQgPSAtRUlPOw0KPiArCX0N Cj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGlvd3JpdGU4 X3JlcCh2b2lkICphZGRyLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pDQo+ICt7DQo+ICsJ aW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQo+ICsJCXdyaXRlYihi dWZbaV0sIGFkZHIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpb3JlYWQ4X3JlcCh2b2lk ICphZGRyLCB1aW50OF90ICpidWYsIGludCBsZW4pDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsNCj4g Kwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQo+ICsJCWJ1ZltpXSA9IHJlYWRiKGFkZHIpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpb3JlYWQxNl9yZXAodm9pZCAqYWRkciwgdm9pZCAq YnVmLCBpbnQgbGVuKQ0KPiArew0KPiArCWludCBpOw0KPiArCXUxNiAqcCA9ICh1MTYgKilidWY7 DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQo+ICsJCXBbaV0gPSByZWFkdyhh ZGRyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaW93cml0ZTE2X3JlcCh2b2lkICphZGRy LCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsJdTE2ICpw ID0gKHUxNiAqKWJ1ZjsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykNCj4gKwkJ d3JpdGV3KHBbaV0sIGFkZHIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTggYXRtZWxfbmFuZF9y ZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpDQo+ICt7DQo+ICsJc3RydWN0IG5hbmRfY2hp cCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7DQo+ICsJc3RydWN0IGF0bWVsX25hbmQgKm5hbmQg PSB0b19hdG1lbF9uYW5kKGNoaXApOw0KPiArDQo+ICsJcmV0dXJuIGlvcmVhZDgobmFuZC0+YWN0 aXZlY3MtPmlvLnZpcnQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBhdG1lbF9uYW5kX3dy aXRlX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQsIHU4IGJ5dGUpDQo+ICt7DQo+ICsJc3RydWN0 IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7DQo+ICsJc3RydWN0IGF0bWVsX25h bmQgKm5hbmQgPSB0b19hdG1lbF9uYW5kKGNoaXApOw0KPiArDQo+ICsJaWYgKGNoaXAtPm9wdGlv bnMgJiBOQU5EX0JVU1dJRFRIXzE2KQ0KPiArCQlpb3dyaXRlMTYoYnl0ZSB8IChieXRlIDw8IDgp LCBuYW5kLT5hY3RpdmVjcy0+aW8udmlydCk7DQo+ICsJZWxzZQ0KPiArCQlpb3dyaXRlOChieXRl LCBuYW5kLT5hY3RpdmVjcy0+aW8udmlydCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGF0 bWVsX25hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHU4ICpidWYsIGludCBsZW4p DQo+ICt7DQo+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7DQo+ ICsJc3RydWN0IGF0bWVsX25hbmQgKm5hbmQgPSB0b19hdG1lbF9uYW5kKGNoaXApOw0KPiArDQo+ ICsJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQ0KPiArCQlpb3JlYWQxNl9y ZXAobmFuZC0+YWN0aXZlY3MtPmlvLnZpcnQsIGJ1ZiwgbGVuIC8gMik7DQo+ICsJZWxzZQ0KPiAr CQlpb3JlYWQ4X3JlcChuYW5kLT5hY3RpdmVjcy0+aW8udmlydCwgYnVmLCBsZW4pOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBhdG1lbF9uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8g Km10ZCwgY29uc3QgdTggKmJ1ZiwgaW50IGxlbikNCj4gK3sNCj4gKwlzdHJ1Y3QgbmFuZF9jaGlw ICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsNCj4gKwlzdHJ1Y3QgYXRtZWxfbmFuZCAqbmFuZCA9 IHRvX2F0bWVsX25hbmQoY2hpcCk7DQo+ICsNCj4gKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRf QlVTV0lEVEhfMTYpDQo+ICsJCWlvd3JpdGUxNl9yZXAobmFuZC0+YWN0aXZlY3MtPmlvLnZpcnQs IGJ1ZiwgbGVuIC8gMik7DQo+ICsJZWxzZQ0KPiArCQlpb3dyaXRlOF9yZXAobmFuZC0+YWN0aXZl Y3MtPmlvLnZpcnQsIGJ1ZiwgbGVuKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBhdG1lbF9u YW5kX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbmFu ZF9jaGlwICAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7DQo+ICsJc3RydWN0IGF0bWVsX25hbmQg Km5hbmQgPSB0b19hdG1lbF9uYW5kKGNoaXApOw0KPiArDQo+ICsJcmV0dXJuIGRtX2dwaW9fZ2V0 X3ZhbHVlKCZuYW5kLT5hY3RpdmVjcy0+cmIuZ3Bpbyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGF0bWVsX25hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjcykN Cj4gK3sNCj4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gIG10ZF90b19uYW5kKG10ZCk7DQo+ ICsJc3RydWN0IGF0bWVsX25hbmQgKm5hbmQgPSB0b19hdG1lbF9uYW5kKGNoaXApOw0KPiArDQo+ ICsJaWYgKGNzIDwgMCB8fCBjcyA+PSBuYW5kLT5udW1jcykgew0KPiArCQluYW5kLT5hY3RpdmVj cyA9IE5VTEw7DQo+ICsJCWNoaXAtPmRldl9yZWFkeSA9IE5VTEw7DQo+ICsJCXJldHVybjsNCj4g Kwl9DQo+ICsNCj4gKwluYW5kLT5hY3RpdmVjcyA9ICZuYW5kLT5jc1tjc107DQo+ICsNCj4gKwlp ZiAobmFuZC0+YWN0aXZlY3MtPnJiLnR5cGUgPT0gQVRNRUxfTkFORF9HUElPX1JCKQ0KPiArCQlj aGlwLT5kZXZfcmVhZHkgPSBhdG1lbF9uYW5kX2Rldl9yZWFkeTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBhdG1lbF9oc21jX25hbmRfZGV2X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQ0K PiArew0KPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOw0KPiAr CXN0cnVjdCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKwlzdHJ1 Y3QgYXRtZWxfaHNtY19uYW5kX2NvbnRyb2xsZXIgKm5jOw0KPiArCXUzMiBzdGF0dXM7DQo+ICsN Cj4gKwluYyA9IHRvX2hzbWNfbmFuZF9jb250cm9sbGVyKG5hbmQtPmNvbnRyb2xsZXIpOw0KPiAr DQo+ICsJcmVnbWFwX3JlYWQobmMtPmJhc2Uuc21jLCBBVE1FTF9IU01DX05GQ19TUiwgJnN0YXR1 cyk7DQo+ICsNCj4gKwlyZXR1cm4gc3RhdHVzICYgQVRNRUxfSFNNQ19ORkNfU1JfUkJFREdFKG5h bmQtPmFjdGl2ZWNzLT5yYi5pZCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGF0bWVsX2hz bWNfbmFuZF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNzKQ0KPiArew0K PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOw0KPiArCXN0cnVj dCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKwlzdHJ1Y3QgYXRt ZWxfaHNtY19uYW5kX2NvbnRyb2xsZXIgKm5jOw0KPiArDQo+ICsJbmMgPSB0b19oc21jX25hbmRf Y29udHJvbGxlcihuYW5kLT5jb250cm9sbGVyKTsNCj4gKw0KPiArCWF0bWVsX25hbmRfc2VsZWN0 X2NoaXAobXRkLCBjcyk7DQo+ICsNCj4gKwlpZiAoIW5hbmQtPmFjdGl2ZWNzKSB7DQo+ICsJCXJl Z21hcF93cml0ZShuYy0+YmFzZS5zbWMsIEFUTUVMX0hTTUNfTkZDX0NUUkwsDQo+ICsJCQkgICAg IEFUTUVMX0hTTUNfTkZDX0NUUkxfRElTKTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiAr CWlmIChuYW5kLT5hY3RpdmVjcy0+cmIudHlwZSA9PSBBVE1FTF9OQU5EX05BVElWRV9SQikNCj4g KwkJY2hpcC0+ZGV2X3JlYWR5ID0gYXRtZWxfaHNtY19uYW5kX2Rldl9yZWFkeTsNCj4gKw0KPiAr CXJlZ21hcF91cGRhdGVfYml0cyhuYy0+YmFzZS5zbWMsIEFUTUVMX0hTTUNfTkZDX0NGRywNCj4g KwkJCSAgIEFUTUVMX0hTTUNfTkZDX0NGR19QQUdFU0laRV9NQVNLIHwNCj4gKwkJCSAgIEFUTUVM X0hTTUNfTkZDX0NGR19TUEFSRVNJWkVfTUFTSyB8DQo+ICsJCQkgICBBVE1FTF9IU01DX05GQ19D RkdfUlNQQVJFIHwNCj4gKwkJCSAgIEFUTUVMX0hTTUNfTkZDX0NGR19XU1BBUkUsDQo+ICsJCQkg ICBBVE1FTF9IU01DX05GQ19DRkdfUEFHRVNJWkUobXRkLT53cml0ZXNpemUpIHwNCj4gKwkJCSAg IEFUTUVMX0hTTUNfTkZDX0NGR19TUEFSRVNJWkUobXRkLT5vb2JzaXplKSB8DQo+ICsJCQkgICBB VE1FTF9IU01DX05GQ19DRkdfUlNQQVJFKTsNCj4gKwlyZWdtYXBfd3JpdGUobmMtPmJhc2Uuc21j LCBBVE1FTF9IU01DX05GQ19DVFJMLA0KPiArCQkgICAgIEFUTUVMX0hTTUNfTkZDX0NUUkxfRU4p Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGF0bWVsX25mY19leGVjX29wKHN0cnVjdCBhdG1l bF9oc21jX25hbmRfY29udHJvbGxlciAqbmMsIGJvb2wgcG9sbCkNCj4gK3sNCj4gKwl1OCAqYWRk cnMgPSBuYy0+b3AuYWRkcnM7DQo+ICsJdW5zaWduZWQgaW50IG9wID0gMDsNCj4gKwl1MzIgYWRk ciwgdmFsOw0KPiArCWludCBpLCByZXQ7DQo+ICsNCj4gKwluYy0+b3Aud2FpdCA9IEFUTUVMX0hT TUNfTkZDX1NSX0NNRERPTkU7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbmMtPm9wLm5jbWRz OyBpKyspDQo+ICsJCW9wIHw9IEFUTUVMX05GQ19DTUQoaSwgbmMtPm9wLmNtZHNbaV0pOw0KPiAr DQo+ICsJaWYgKG5jLT5vcC5uYWRkcnMgPT0gQVRNRUxfTkZDX01BWF9BRERSX0NZQ0xFUykNCj4g KwkJcmVnbWFwX3dyaXRlKG5jLT5iYXNlLnNtYywgQVRNRUxfSFNNQ19ORkNfQUREUiwgKmFkZHJz KyspOw0KPiArDQo+ICsJb3AgfD0gQVRNRUxfTkZDX0NTSUQobmMtPm9wLmNzKSB8DQo+ICsJICAg ICAgQVRNRUxfTkZDX0FDWUNMRShuYy0+b3AubmFkZHJzKTsNCj4gKw0KPiArCWlmIChuYy0+b3Au bmNtZHMgPiAxKQ0KPiArCQlvcCB8PSBBVE1FTF9ORkNfVkNNRDI7DQo+ICsNCj4gKwlhZGRyID0g YWRkcnNbMF0gfCAoYWRkcnNbMV0gPDwgOCkgfCAoYWRkcnNbMl0gPDwgMTYpIHwNCj4gKwkgICAg ICAgKGFkZHJzWzNdIDw8IDI0KTsNCj4gKw0KPiArCWlmIChuYy0+b3AuZGF0YSAhPSBBVE1FTF9O RkNfTk9fREFUQSkgew0KPiArCQlvcCB8PSBBVE1FTF9ORkNfREFUQUVOOw0KPiArCQluYy0+b3Au d2FpdCB8PSBBVE1FTF9IU01DX05GQ19TUl9YRlJET05FOw0KPiArDQo+ICsJCWlmIChuYy0+b3Au ZGF0YSA9PSBBVE1FTF9ORkNfV1JJVEVfREFUQSkNCj4gKwkJCW9wIHw9IEFUTUVMX05GQ19ORkNX UjsNCj4gKwl9DQo+ICsNCj4gKwkvKiBDbGVhciBhbGwgZmxhZ3MuICovDQo+ICsJcmVnbWFwX3Jl YWQobmMtPmJhc2Uuc21jLCBBVE1FTF9IU01DX05GQ19TUiwgJnZhbCk7DQo+ICsNCj4gKwkvKiBT ZW5kIHRoZSBjb21tYW5kLiAqLw0KPiArCXJlZ21hcF93cml0ZShuYy0+aW8sIG9wLCBhZGRyKTsN Cj4gKw0KPiArCXJldCA9IGF0bWVsX25mY193YWl0KG5jLCBwb2xsLCAwKTsNCj4gKwlpZiAocmV0 KQ0KPiArCQlkZXZfZXJyKG5jLT5iYXNlLmRldiwNCj4gKwkJCSJGYWlsZWQgdG8gc2VuZCBOQU5E IGNvbW1hbmQgKGVyciA9ICVkKSEiLA0KPiArCQkJcmV0KTsNCj4gKw0KPiArCS8qIFJlc2V0IHRo ZSBvcCBzdGF0ZS4gKi8NCj4gKwltZW1zZXQoJm5jLT5vcCwgMCwgc2l6ZW9mKG5jLT5vcCkpOw0K PiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYXRtZWxfaHNt Y19uYW5kX2NtZF9jdHJsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgZGF0LA0KPiArCQkJCSAg ICAgdW5zaWduZWQgaW50IGN0cmwpDQo+ICt7DQo+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9 IG10ZF90b19uYW5kKG10ZCk7DQo+ICsJc3RydWN0IGF0bWVsX25hbmQgKm5hbmQgPSB0b19hdG1l bF9uYW5kKGNoaXApOw0KPiArCXN0cnVjdCBhdG1lbF9oc21jX25hbmRfY29udHJvbGxlciAqbmM7 DQo+ICsNCj4gKwluYyA9IHRvX2hzbWNfbmFuZF9jb250cm9sbGVyKG5hbmQtPmNvbnRyb2xsZXIp Ow0KPiArDQo+ICsJaWYgKGN0cmwgJiBOQU5EX0FMRSkgew0KPiArCQlpZiAobmMtPm9wLm5hZGRy cyA9PSBBVE1FTF9ORkNfTUFYX0FERFJfQ1lDTEVTKQ0KPiArCQkJcmV0dXJuOw0KPiArDQo+ICsJ CW5jLT5vcC5hZGRyc1tuYy0+b3AubmFkZHJzKytdID0gZGF0Ow0KPiArCX0gZWxzZSBpZiAoY3Ry bCAmIE5BTkRfQ0xFKSB7DQo+ICsJCWlmIChuYy0+b3AubmNtZHMgPiAxKQ0KPiArCQkJcmV0dXJu Ow0KPiArDQo+ICsJCW5jLT5vcC5jbWRzW25jLT5vcC5uY21kcysrXSA9IGRhdDsNCj4gKwl9DQo+ ICsNCj4gKwlpZiAoZGF0ID09IE5BTkRfQ01EX05PTkUpIHsNCj4gKwkJbmMtPm9wLmNzID0gbmFu ZC0+YWN0aXZlY3MtPmlkOw0KPiArCQlhdG1lbF9uZmNfZXhlY19vcChuYywgdHJ1ZSk7DQo+ICsJ fQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBhdG1lbF9uYW5kX2NtZF9jdHJsKHN0cnVjdCBt dGRfaW5mbyAqbXRkLCBpbnQgY21kLA0KPiArCQkJCXVuc2lnbmVkIGludCBjdHJsKQ0KPiArew0K PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOw0KPiArCXN0cnVj dCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKwlzdHJ1Y3QgYXRt ZWxfbmFuZF9jb250cm9sbGVyICpuYzsNCj4gKw0KPiArCW5jID0gdG9fbmFuZF9jb250cm9sbGVy KG5hbmQtPmNvbnRyb2xsZXIpOw0KPiArDQo+ICsJaWYgKChjdHJsICYgTkFORF9DVFJMX0NIQU5H RSkgJiYNCj4gKwkgICAgZG1fZ3Bpb19pc192YWxpZCgmbmFuZC0+YWN0aXZlY3MtPmNzZ3Bpbykp IHsNCj4gKwkJaWYgKGN0cmwgJiBOQU5EX05DRSkNCj4gKwkJCWRtX2dwaW9fc2V0X3ZhbHVlKCZu YW5kLT5hY3RpdmVjcy0+Y3NncGlvLCAwKTsNCj4gKwkJZWxzZQ0KPiArCQkJZG1fZ3Bpb19zZXRf dmFsdWUoJm5hbmQtPmFjdGl2ZWNzLT5jc2dwaW8sIDEpOw0KPiArCX0NCj4gKw0KPiArCWlmIChj dHJsICYgTkFORF9BTEUpDQo+ICsJCXdyaXRlYihjbWQsIG5hbmQtPmFjdGl2ZWNzLT5pby52aXJ0 ICsgbmMtPmNhcHMtPmFsZV9vZmZzKTsNCj4gKwllbHNlIGlmIChjdHJsICYgTkFORF9DTEUpDQo+ ICsJCXdyaXRlYihjbWQsIG5hbmQtPmFjdGl2ZWNzLT5pby52aXJ0ICsgbmMtPmNhcHMtPmNsZV9v ZmZzKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYXRtZWxfbmZjX2NvcHlfdG9fc3JhbShz dHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBjb25zdCB1OCAqYnVmLA0KPiArCQkJCSAgIGJvb2wgb29i X3JlcXVpcmVkKQ0KPiArew0KPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQo Y2hpcCk7DQo+ICsJc3RydWN0IGF0bWVsX25hbmQgKm5hbmQgPSB0b19hdG1lbF9uYW5kKGNoaXAp Ow0KPiArCXN0cnVjdCBhdG1lbF9oc21jX25hbmRfY29udHJvbGxlciAqbmM7DQo+ICsJaW50IHJl dCA9IC1FSU87DQo+ICsNCj4gKwluYyA9IHRvX2hzbWNfbmFuZF9jb250cm9sbGVyKG5hbmQtPmNv bnRyb2xsZXIpOw0KPiArDQo+ICsJaWYgKHJldCkNCj4gKwkJbWVtY3B5X3RvaW8obmMtPnNyYW0u dmlydCwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7DQo+ICsNCj4gKwlpZiAob29iX3JlcXVpcmVkKQ0K PiArCQltZW1jcHlfdG9pbyhuYy0+c3JhbS52aXJ0ICsgbXRkLT53cml0ZXNpemUsIGNoaXAtPm9v Yl9wb2ksDQo+ICsJCQkgICAgbXRkLT5vb2JzaXplKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgYXRtZWxfbmZjX2NvcHlfZnJvbV9zcmFtKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHU4ICpi dWYsDQo+ICsJCQkJICAgICBib29sIG9vYl9yZXF1aXJlZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRk X2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOw0KPiArCXN0cnVjdCBhdG1lbF9uYW5kICpu YW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKwlzdHJ1Y3QgYXRtZWxfaHNtY19uYW5kX2Nv bnRyb2xsZXIgKm5jOw0KPiArCWludCByZXQgPSAtRUlPOw0KPiArDQo+ICsJbmMgPSB0b19oc21j X25hbmRfY29udHJvbGxlcihuYW5kLT5jb250cm9sbGVyKTsNCj4gKw0KPiArCWlmIChyZXQpDQo+ ICsJCW1lbWNweV9mcm9taW8oYnVmLCBuYy0+c3JhbS52aXJ0LCBtdGQtPndyaXRlc2l6ZSk7DQo+ ICsNCj4gKwlpZiAob29iX3JlcXVpcmVkKQ0KPiArCQltZW1jcHlfZnJvbWlvKGNoaXAtPm9vYl9w b2ksIG5jLT5zcmFtLnZpcnQgKyBtdGQtPndyaXRlc2l6ZSwNCj4gKwkJCSAgICAgIG10ZC0+b29i c2l6ZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGF0bWVsX25mY19zZXRfb3BfYWRkcihz dHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgcGFnZSwgaW50IGNvbHVtbikNCj4gK3sNCj4gKwlz dHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOw0KPiArCXN0cnVjdCBhdG1l bF9uYW5kICpuYW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKwlzdHJ1Y3QgYXRtZWxfaHNt Y19uYW5kX2NvbnRyb2xsZXIgKm5jOw0KPiArDQo+ICsJbmMgPSB0b19oc21jX25hbmRfY29udHJv bGxlcihuYW5kLT5jb250cm9sbGVyKTsNCj4gKw0KPiArCWlmIChjb2x1bW4gPj0gMCkgew0KPiAr CQluYy0+b3AuYWRkcnNbbmMtPm9wLm5hZGRycysrXSA9IGNvbHVtbjsNCj4gKw0KPiArCQkvKg0K PiArCQkgKiAyIGFkZHJlc3MgY3ljbGVzIGZvciB0aGUgY29sdW1uIG9mZnNldCBvbiBsYXJnZSBw YWdlIE5BTkRzLg0KPiArCQkgKi8NCj4gKwkJaWYgKG10ZC0+d3JpdGVzaXplID4gNTEyKQ0KPiAr CQkJbmMtPm9wLmFkZHJzW25jLT5vcC5uYWRkcnMrK10gPSBjb2x1bW4gPj4gODsNCj4gKwl9DQo+ ICsNCj4gKwlpZiAocGFnZSA+PSAwKSB7DQo+ICsJCW5jLT5vcC5hZGRyc1tuYy0+b3AubmFkZHJz KytdID0gcGFnZTsNCj4gKwkJbmMtPm9wLmFkZHJzW25jLT5vcC5uYWRkcnMrK10gPSBwYWdlID4+ IDg7DQo+ICsNCj4gKwkJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1JPV19BRERSXzMpDQo+ICsJ CQluYy0+b3AuYWRkcnNbbmMtPm9wLm5hZGRycysrXSA9IHBhZ2UgPj4gMTY7DQo+ICsJfQ0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW50IGF0bWVsX25hbmRfcG1lY2NfZW5hYmxlKHN0cnVjdCBuYW5k X2NoaXAgKmNoaXAsIGludCBvcCwgYm9vbCByYXcpDQo+ICt7DQo+ICsJc3RydWN0IGF0bWVsX25h bmQgKm5hbmQgPSB0b19hdG1lbF9uYW5kKGNoaXApOw0KPiArCXN0cnVjdCBhdG1lbF9uYW5kX2Nv bnRyb2xsZXIgKm5jOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwluYyA9IHRvX25hbmRfY29udHJv bGxlcihuYW5kLT5jb250cm9sbGVyKTsNCj4gKw0KPiArCWlmIChyYXcpDQo+ICsJCXJldHVybiAw Ow0KPiArDQo+ICsJcmV0ID0gYXRtZWxfcG1lY2NfZW5hYmxlKG5hbmQtPnBtZWNjLCBvcCk7DQo+ ICsJaWYgKHJldCkNCj4gKwkJZGV2X2VycihuYy0+ZGV2LA0KPiArCQkJIkZhaWxlZCB0byBlbmFi bGUgRUNDIGVuZ2luZSAoZXJyID0gJWQpXG4iLCByZXQpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYXRtZWxfbmFuZF9wbWVjY19kaXNhYmxlKHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsIGJvb2wgcmF3KQ0KPiArew0KPiArCXN0cnVjdCBhdG1lbF9uYW5k ICpuYW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKw0KPiArCWlmICghcmF3KQ0KPiArCQlh dG1lbF9wbWVjY19kaXNhYmxlKG5hbmQtPnBtZWNjKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBhdG1lbF9uYW5kX3BtZWNjX2dlbmVyYXRlX2VjY2J5dGVzKHN0cnVjdCBuYW5kX2NoaXAgKmNo aXAsIGJvb2wgcmF3KQ0KPiArew0KPiArCXN0cnVjdCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRt ZWxfbmFuZChjaGlwKTsNCj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNo aXApOw0KPiArCXN0cnVjdCBhdG1lbF9uYW5kX2NvbnRyb2xsZXIgKm5jOw0KPiArCXN0cnVjdCBt dGRfb29iX3JlZ2lvbiBvb2JyZWdpb247DQo+ICsJdm9pZCAqZWNjYnVmOw0KPiArCWludCByZXQs IGk7DQo+ICsNCj4gKwluYyA9IHRvX25hbmRfY29udHJvbGxlcihuYW5kLT5jb250cm9sbGVyKTsN Cj4gKw0KPiArCWlmIChyYXcpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJcmV0ID0gYXRtZWxf cG1lY2Nfd2FpdF9yZHkobmFuZC0+cG1lY2MpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2Vy cihuYy0+ZGV2LA0KPiArCQkJIkZhaWxlZCB0byB0cmFuc2ZlciBOQU5EIHBhZ2UgZGF0YSAoZXJy ID0gJWQpXG4iLA0KPiArCQkJcmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4g KwltdGRfb29ibGF5b3V0X2VjYyhtdGQsIDAsICZvb2JyZWdpb24pOw0KPiArCWVjY2J1ZiA9IGNo aXAtPm9vYl9wb2kgKyBvb2JyZWdpb24ub2Zmc2V0Ow0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8 IGNoaXAtPmVjYy5zdGVwczsgaSsrKSB7DQo+ICsJCWF0bWVsX3BtZWNjX2dldF9nZW5lcmF0ZWRf ZWNjYnl0ZXMobmFuZC0+cG1lY2MsIGksDQo+ICsJCQkJCQkgICBlY2NidWYpOw0KPiArCQllY2Ni dWYgKz0gY2hpcC0+ZWNjLmJ5dGVzOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IGF0bWVsX25hbmRfcG1lY2NfY29ycmVjdF9kYXRhKHN0cnVjdCBu YW5kX2NoaXAgKmNoaXAsIHZvaWQgKmJ1ZiwNCj4gKwkJCQkJIGJvb2wgcmF3KQ0KPiArew0KPiAr CXN0cnVjdCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKwlzdHJ1 Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOw0KPiArCXN0cnVjdCBhdG1lbF9u YW5kX2NvbnRyb2xsZXIgKm5jOw0KPiArCXN0cnVjdCBtdGRfb29iX3JlZ2lvbiBvb2JyZWdpb247 DQo+ICsJaW50IHJldCwgaSwgbWF4X2JpdGZsaXBzID0gMDsNCj4gKwl2b2lkICpkYXRhYnVmLCAq ZWNjYnVmOw0KPiArDQo+ICsJbmMgPSB0b19uYW5kX2NvbnRyb2xsZXIobmFuZC0+Y29udHJvbGxl cik7DQo+ICsNCj4gKwlpZiAocmF3KQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCXJldCA9IGF0 bWVsX3BtZWNjX3dhaXRfcmR5KG5hbmQtPnBtZWNjKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWRl dl9lcnIobmMtPmRldiwNCj4gKwkJCSJGYWlsZWQgdG8gcmVhZCBOQU5EIHBhZ2UgZGF0YSAoZXJy ID0gJWQpXG4iLCByZXQpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCW10ZF9v b2JsYXlvdXRfZWNjKG10ZCwgMCwgJm9vYnJlZ2lvbik7DQo+ICsJZWNjYnVmID0gY2hpcC0+b29i X3BvaSArIG9vYnJlZ2lvbi5vZmZzZXQ7DQo+ICsJZGF0YWJ1ZiA9IGJ1ZjsNCj4gKw0KPiArCWZv ciAoaSA9IDA7IGkgPCBjaGlwLT5lY2Muc3RlcHM7IGkrKykgew0KPiArCQlyZXQgPSBhdG1lbF9w bWVjY19jb3JyZWN0X3NlY3RvcihuYW5kLT5wbWVjYywgaSwgZGF0YWJ1ZiwNCj4gKwkJCQkJCSBl Y2NidWYpOw0KPiArCQlpZiAocmV0IDwgMCAmJiAhYXRtZWxfcG1lY2NfY29ycmVjdF9lcmFzZWRf Y2h1bmtzKG5hbmQtPnBtZWNjKSkNCj4gKwkJCXJldCA9IG5hbmRfY2hlY2tfZXJhc2VkX2VjY19j aHVuayhkYXRhYnVmLA0KPiArCQkJCQkJCSAgY2hpcC0+ZWNjLnNpemUsDQo+ICsJCQkJCQkJICBl Y2NidWYsDQo+ICsJCQkJCQkJICBjaGlwLT5lY2MuYnl0ZXMsDQo+ICsJCQkJCQkJICBOVUxMLCAw LA0KPiArCQkJCQkJCSAgY2hpcC0+ZWNjLnN0cmVuZ3RoKTsNCj4gKw0KPiArCQlpZiAocmV0ID49 IDApDQo+ICsJCQltYXhfYml0ZmxpcHMgPSBtYXgocmV0LCBtYXhfYml0ZmxpcHMpOw0KPiArCQll bHNlDQo+ICsJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsNCj4gKw0KPiArCQlkYXRhYnVmICs9 IGNoaXAtPmVjYy5zaXplOw0KPiArCQllY2NidWYgKz0gY2hpcC0+ZWNjLmJ5dGVzOw0KPiArCX0N Cj4gKw0KPiArCXJldHVybiBtYXhfYml0ZmxpcHM7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg YXRtZWxfbmFuZF9wbWVjY193cml0ZV9wZyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBjb25zdCB1 OCAqYnVmLA0KPiArCQkJCSAgICAgYm9vbCBvb2JfcmVxdWlyZWQsIGludCBwYWdlLCBib29sIHJh dykNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOw0K PiArCXN0cnVjdCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKwlp bnQgcmV0Ow0KPiArDQo+ICsJbmFuZF9wcm9nX3BhZ2VfYmVnaW5fb3AoY2hpcCwgcGFnZSwgMCwg TlVMTCwgMCk7DQo+ICsNCj4gKwlyZXQgPSBhdG1lbF9uYW5kX3BtZWNjX2VuYWJsZShjaGlwLCBO QU5EX0VDQ19XUklURSwgcmF3KTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiAr DQo+ICsJYXRtZWxfbmFuZF93cml0ZV9idWYobXRkLCBidWYsIG10ZC0+d3JpdGVzaXplKTsNCj4g Kw0KPiArCXJldCA9IGF0bWVsX25hbmRfcG1lY2NfZ2VuZXJhdGVfZWNjYnl0ZXMoY2hpcCwgcmF3 KTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWF0bWVsX3BtZWNjX2Rpc2FibGUobmFuZC0+cG1lY2Mp Ow0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCWF0bWVsX25hbmRfcG1lY2NfZGlz YWJsZShjaGlwLCByYXcpOw0KPiArDQo+ICsJYXRtZWxfbmFuZF93cml0ZV9idWYobXRkLCBjaGlw LT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOw0KPiArDQo+ICsJcmV0dXJuIG5hbmRfcHJvZ19wYWdl X2VuZF9vcChjaGlwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBhdG1lbF9uYW5kX3BtZWNj X3dyaXRlX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsDQo+ICsJCQkJICAgICAgIHN0cnVjdCBu YW5kX2NoaXAgKmNoaXAsIGNvbnN0IHU4ICpidWYsDQo+ICsJCQkJICAgICAgIGludCBvb2JfcmVx dWlyZWQsIGludCBwYWdlKQ0KPiArew0KPiArCXJldHVybiBhdG1lbF9uYW5kX3BtZWNjX3dyaXRl X3BnKGNoaXAsIGJ1Ziwgb29iX3JlcXVpcmVkLCBwYWdlLCBmYWxzZSk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgYXRtZWxfbmFuZF9wbWVjY193cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCwNCj4gKwkJCQkJICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gKwkJCQkJICAg Y29uc3QgdTggKmJ1ZiwgaW50IG9vYl9yZXF1aXJlZCwNCj4gKwkJCQkJICAgaW50IHBhZ2UpDQo+ ICt7DQo+ICsJcmV0dXJuIGF0bWVsX25hbmRfcG1lY2Nfd3JpdGVfcGcoY2hpcCwgYnVmLCBvb2Jf cmVxdWlyZWQsIHBhZ2UsIHRydWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGF0bWVsX25h bmRfcG1lY2NfcmVhZF9wZyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1OCAqYnVmLA0KPiArCQkJ CSAgICBib29sIG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UsIGJvb2wgcmF3KQ0KPiArew0KPiArCXN0 cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7DQo+ICsJaW50IHJldDsNCj4g Kw0KPiArCW5hbmRfcmVhZF9wYWdlX29wKGNoaXAsIHBhZ2UsIDAsIE5VTEwsIDApOw0KPiArDQo+ ICsJcmV0ID0gYXRtZWxfbmFuZF9wbWVjY19lbmFibGUoY2hpcCwgTkFORF9FQ0NfUkVBRCwgcmF3 KTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJYXRtZWxfbmFuZF9y ZWFkX2J1ZihtdGQsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOw0KPiArCWF0bWVsX25hbmRfcmVhZF9i dWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOw0KPiArDQo+ICsJcmV0ID0gYXRt ZWxfbmFuZF9wbWVjY19jb3JyZWN0X2RhdGEoY2hpcCwgYnVmLCByYXcpOw0KPiArDQo+ICsJYXRt ZWxfbmFuZF9wbWVjY19kaXNhYmxlKGNoaXAsIHJhdyk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGF0bWVsX25hbmRfcG1lY2NfcmVhZF9wYWdlKHN0cnVj dCBtdGRfaW5mbyAqbXRkLA0KPiArCQkJCSAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHU4 ICpidWYsDQo+ICsJCQkJICAgICAgaW50IG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UpDQo+ICt7DQo+ ICsJcmV0dXJuIGF0bWVsX25hbmRfcG1lY2NfcmVhZF9wZyhjaGlwLCBidWYsIG9vYl9yZXF1aXJl ZCwgcGFnZSwgZmFsc2UpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGF0bWVsX25hbmRfcG1l Y2NfcmVhZF9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwNCj4gKwkJCQkJICBzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwLCB1OCAqYnVmLA0KPiArCQkJCQkgIGludCBvb2JfcmVxdWlyZWQsIGlu dCBwYWdlKQ0KPiArew0KPiArCXJldHVybiBhdG1lbF9uYW5kX3BtZWNjX3JlYWRfcGcoY2hpcCwg YnVmLCBvb2JfcmVxdWlyZWQsIHBhZ2UsIHRydWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IGF0bWVsX2hzbWNfbmFuZF9wbWVjY193cml0ZV9wZyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0K PiArCQkJCQkgIGNvbnN0IHU4ICpidWYsIGJvb2wgb29iX3JlcXVpcmVkLA0KPiArCQkJCQkgIGlu dCBwYWdlLCBib29sIHJhdykNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRf dG9fbXRkKGNoaXApOw0KPiArCXN0cnVjdCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRtZWxfbmFu ZChjaGlwKTsNCj4gKwlzdHJ1Y3QgYXRtZWxfaHNtY19uYW5kX2NvbnRyb2xsZXIgKm5jOw0KPiAr CWludCByZXQsIHN0YXR1czsNCj4gKw0KPiArCW5jID0gdG9faHNtY19uYW5kX2NvbnRyb2xsZXIo bmFuZC0+Y29udHJvbGxlcik7DQo+ICsNCj4gKwlhdG1lbF9uZmNfY29weV90b19zcmFtKGNoaXAs IGJ1ZiwgZmFsc2UpOw0KPiArDQo+ICsJbmMtPm9wLmNtZHNbMF0gPSBOQU5EX0NNRF9TRVFJTjsN Cj4gKwluYy0+b3AubmNtZHMgPSAxOw0KPiArCWF0bWVsX25mY19zZXRfb3BfYWRkcihjaGlwLCBw YWdlLCAweDApOw0KPiArCW5jLT5vcC5jcyA9IG5hbmQtPmFjdGl2ZWNzLT5pZDsNCj4gKwluYy0+ b3AuZGF0YSA9IEFUTUVMX05GQ19XUklURV9EQVRBOw0KPiArDQo+ICsJcmV0ID0gYXRtZWxfbmFu ZF9wbWVjY19lbmFibGUoY2hpcCwgTkFORF9FQ0NfV1JJVEUsIHJhdyk7DQo+ICsJaWYgKHJldCkN Cj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9IGF0bWVsX25mY19leGVjX29wKG5jLCB0 cnVlKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWF0bWVsX25hbmRfcG1lY2NfZGlzYWJsZShjaGlw LCByYXcpOw0KPiArCQlkZXZfZXJyKG5jLT5iYXNlLmRldiwNCj4gKwkJCSJGYWlsZWQgdG8gdHJh bnNmZXIgTkFORCBwYWdlIGRhdGEgKGVyciA9ICVkKVxuIiwNCj4gKwkJCXJldCk7DQo+ICsJCXJl dHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gYXRtZWxfbmFuZF9wbWVjY19nZW5lcmF0 ZV9lY2NieXRlcyhjaGlwLCByYXcpOw0KPiArDQo+ICsJYXRtZWxfbmFuZF9wbWVjY19kaXNhYmxl KGNoaXAsIHJhdyk7DQo+ICsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ ICsJYXRtZWxfbmFuZF93cml0ZV9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUp Ow0KPiArDQo+ICsJbmMtPm9wLmNtZHNbMF0gPSBOQU5EX0NNRF9QQUdFUFJPRzsNCj4gKwluYy0+ b3AubmNtZHMgPSAxOw0KPiArCW5jLT5vcC5jcyA9IG5hbmQtPmFjdGl2ZWNzLT5pZDsNCj4gKwly ZXQgPSBhdG1lbF9uZmNfZXhlY19vcChuYywgdHJ1ZSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJZGV2 X2VycihuYy0+YmFzZS5kZXYsICJGYWlsZWQgdG8gcHJvZ3JhbSBOQU5EIHBhZ2UgKGVyciA9ICVk KVxuIiwNCj4gKwkJCXJldCk7DQo+ICsNCj4gKwlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQs IGNoaXApOw0KPiArCWlmIChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKQ0KPiArCQlyZXR1cm4g LUVJTzsNCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4g K2F0bWVsX2hzbWNfbmFuZF9wbWVjY193cml0ZV9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBz dHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiArCQkJCSBjb25zdCB1OCAqYnVmLCBpbnQgb29iX3Jl cXVpcmVkLA0KPiArCQkJCSBpbnQgcGFnZSkNCj4gK3sNCj4gKwlyZXR1cm4gYXRtZWxfaHNtY19u YW5kX3BtZWNjX3dyaXRlX3BnKGNoaXAsIGJ1Ziwgb29iX3JlcXVpcmVkLCBwYWdlLA0KPiArCQkJ CQkgICAgICBmYWxzZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2F0bWVsX2hzbWNf bmFuZF9wbWVjY193cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5h bmRfY2hpcCAqY2hpcCwNCj4gKwkJCQkgICAgIGNvbnN0IHU4ICpidWYsDQo+ICsJCQkJICAgICBp bnQgb29iX3JlcXVpcmVkLCBpbnQgcGFnZSkNCj4gK3sNCj4gKwlyZXR1cm4gYXRtZWxfaHNtY19u YW5kX3BtZWNjX3dyaXRlX3BnKGNoaXAsIGJ1Ziwgb29iX3JlcXVpcmVkLCBwYWdlLA0KPiArCQkJ CQkgICAgICB0cnVlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBhdG1lbF9oc21jX25hbmRf cG1lY2NfcmVhZF9wZyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1OCAqYnVmLA0KPiArCQkJCQkg Ym9vbCBvb2JfcmVxdWlyZWQsIGludCBwYWdlLA0KPiArCQkJCQkgYm9vbCByYXcpDQo+ICt7DQo+ ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsNCj4gKwlzdHJ1Y3Qg YXRtZWxfbmFuZCAqbmFuZCA9IHRvX2F0bWVsX25hbmQoY2hpcCk7DQo+ICsJc3RydWN0IGF0bWVs X2hzbWNfbmFuZF9jb250cm9sbGVyICpuYzsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJbmMgPSB0 b19oc21jX25hbmRfY29udHJvbGxlcihuYW5kLT5jb250cm9sbGVyKTsNCj4gKw0KPiArCS8qDQo+ ICsJICogT3B0aW1pemVkIHJlYWQgcGFnZSBhY2Nlc3NvcnMgb25seSB3b3JrIHdoZW4gdGhlIE5B TkQgUi9CIHBpbiBpcw0KPiArCSAqIGNvbm5lY3RlZCB0byBhIG5hdGl2ZSBTb0MgUi9CIHBpbi4g SWYgdGhhdCdzIG5vdCB0aGUgY2FzZSwgZmFsbGJhY2sNCj4gKwkgKiB0byB0aGUgbm9uLW9wdGlt aXplZCBvbmUuDQo+ICsJICovDQo+ICsJaWYgKG5hbmQtPmFjdGl2ZWNzLT5yYi50eXBlICE9IEFU TUVMX05BTkRfTkFUSVZFX1JCKSB7DQo+ICsJCW5hbmRfcmVhZF9wYWdlX29wKGNoaXAsIHBhZ2Us IDAsIE5VTEwsIDApOw0KPiArDQo+ICsJCXJldHVybiBhdG1lbF9uYW5kX3BtZWNjX3JlYWRfcGco Y2hpcCwgYnVmLCBvb2JfcmVxdWlyZWQsIHBhZ2UsDQo+ICsJCQkJCQlyYXcpOw0KPiArCX0NCj4g Kw0KPiArCW5jLT5vcC5jbWRzW25jLT5vcC5uY21kcysrXSA9IE5BTkRfQ01EX1JFQUQwOw0KPiAr DQo+ICsJaWYgKG10ZC0+d3JpdGVzaXplID4gNTEyKQ0KPiArCQluYy0+b3AuY21kc1tuYy0+b3Au bmNtZHMrK10gPSBOQU5EX0NNRF9SRUFEU1RBUlQ7DQo+ICsNCj4gKwlhdG1lbF9uZmNfc2V0X29w X2FkZHIoY2hpcCwgcGFnZSwgMHgwKTsNCj4gKwluYy0+b3AuY3MgPSBuYW5kLT5hY3RpdmVjcy0+ aWQ7DQo+ICsJbmMtPm9wLmRhdGEgPSBBVE1FTF9ORkNfUkVBRF9EQVRBOw0KPiArDQo+ICsJcmV0 ID0gYXRtZWxfbmFuZF9wbWVjY19lbmFibGUoY2hpcCwgTkFORF9FQ0NfUkVBRCwgcmF3KTsNCj4g KwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0ID0gYXRtZWxfbmZjX2V4 ZWNfb3AobmMsIHRydWUpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJYXRtZWxfbmFuZF9wbWVjY19k aXNhYmxlKGNoaXAsIHJhdyk7DQo+ICsJCWRldl9lcnIobmMtPmJhc2UuZGV2LA0KPiArCQkJIkZh aWxlZCB0byBsb2FkIE5BTkQgcGFnZSBkYXRhIChlcnIgPSAlZClcbiIsDQo+ICsJCQlyZXQpOw0K PiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCWF0bWVsX25mY19jb3B5X2Zyb21fc3Jh bShjaGlwLCBidWYsIHRydWUpOw0KPiArDQo+ICsJcmV0ID0gYXRtZWxfbmFuZF9wbWVjY19jb3Jy ZWN0X2RhdGEoY2hpcCwgYnVmLCByYXcpOw0KPiArDQo+ICsJYXRtZWxfbmFuZF9wbWVjY19kaXNh YmxlKGNoaXAsIHJhdyk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50IGF0bWVsX2hzbWNfbmFuZF9wbWVjY19yZWFkX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICpt dGQsDQo+ICsJCQkJCSAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHU4ICpidWYsDQo+ICsJCQkJ CSAgIGludCBvb2JfcmVxdWlyZWQsIGludCBwYWdlKQ0KPiArew0KPiArCXJldHVybiBhdG1lbF9o c21jX25hbmRfcG1lY2NfcmVhZF9wZyhjaGlwLCBidWYsIG9vYl9yZXF1aXJlZCwgcGFnZSwNCj4g KwkJCQkJICAgICBmYWxzZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYXRtZWxfaHNtY19u YW5kX3BtZWNjX3JlYWRfcGFnZV9yYXcoc3RydWN0IG10ZF9pbmZvICptdGQsDQo+ICsJCQkJCSAg ICAgICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiArCQkJCQkgICAgICAgdTggKmJ1ZiwgaW50 IG9vYl9yZXF1aXJlZCwNCj4gKwkJCQkJICAgICAgIGludCBwYWdlKQ0KPiArew0KPiArCXJldHVy biBhdG1lbF9oc21jX25hbmRfcG1lY2NfcmVhZF9wZyhjaGlwLCBidWYsIG9vYl9yZXF1aXJlZCwg cGFnZSwNCj4gKwkJCQkJICAgICB0cnVlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBuYW5k X29vYmxheW91dF9lY2NfbHAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLA0KPiAr CQkJCSBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJlZ2lvbikNCj4gK3sNCj4gKwlzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsNCj4gKwlzdHJ1Y3QgbmFuZF9lY2Nf Y3RybCAqZWNjID0gJmNoaXAtPmVjYzsNCj4gKw0KPiArCWlmIChzZWN0aW9uIHx8ICFlY2MtPnRv dGFsKQ0KPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gKw0KPiArCW9vYnJlZ2lvbi0+bGVuZ3RoID0g ZWNjLT50b3RhbDsNCj4gKwlvb2JyZWdpb24tPm9mZnNldCA9IG10ZC0+b29ic2l6ZSAtIG9vYnJl Z2lvbi0+bGVuZ3RoOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQgbmFuZF9vb2JsYXlvdXRfZnJlZV9scChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rp b24sDQo+ICsJCQkJICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJlZ2lvbikNCj4gK3sNCj4g KwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsNCj4gKwlzdHJ1Y3Qg bmFuZF9lY2NfY3RybCAqZWNjID0gJmNoaXAtPmVjYzsNCj4gKw0KPiArCWlmIChzZWN0aW9uKQ0K PiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gKw0KPiArCW9vYnJlZ2lvbi0+bGVuZ3RoID0gbXRkLT5v b2JzaXplIC0gZWNjLT50b3RhbCAtIDI7DQo+ICsJb29icmVnaW9uLT5vZmZzZXQgPSAyOw0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29v YmxheW91dF9vcHMgbmFuZF9vb2JsYXlvdXRfbHBfb3BzID0gew0KPiArCS5lY2MgPSBuYW5kX29v YmxheW91dF9lY2NfbHAsDQo+ICsJLnJmcmVlID0gbmFuZF9vb2JsYXlvdXRfZnJlZV9scCwNCj4g K307DQo+ICsNCj4gK2NvbnN0IHN0cnVjdCBtdGRfb29ibGF5b3V0X29wcyAqbmFuZF9nZXRfbGFy Z2VfcGFnZV9vb2JsYXlvdXQodm9pZCkNCj4gK3sNCj4gKwlyZXR1cm4gJm5hbmRfb29ibGF5b3V0 X2xwX29wczsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBhdG1lbF9uYW5kX3BtZWNjX2luaXQo c3RydWN0IG5hbmRfY2hpcCAqY2hpcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9 IG5hbmRfdG9fbXRkKGNoaXApOw0KPiArCXN0cnVjdCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRt ZWxfbmFuZChjaGlwKTsNCj4gKwlzdHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyICpuYzsNCj4g KwlzdHJ1Y3QgYXRtZWxfcG1lY2NfdXNlcl9yZXEgcmVxOw0KPiArDQo+ICsJbmMgPSB0b19uYW5k X2NvbnRyb2xsZXIobmFuZC0+Y29udHJvbGxlcik7DQo+ICsNCj4gKwlpZiAoIW5jLT5wbWVjYykg ew0KPiArCQlkZXZfZXJyKG5jLT5kZXYsICJIVyBFQ0Mgbm90IHN1cHBvcnRlZFxuIik7DQo+ICsJ CXJldHVybiAtRU9QTk9UU1VQUDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAobmMtPmNhcHMtPmxlZ2Fj eV9vZl9iaW5kaW5ncykgew0KPiArCQl1MzIgdmFsOw0KPiArDQo+ICsJCWlmICghb2Zub2RlX3Jl YWRfdTMyKG5jLT5kZXYtPm5vZGVfLCAiYXRtZWwscG1lY2MtY2FwIiwgJnZhbCkpDQo+ICsJCQlj aGlwLT5lY2Muc3RyZW5ndGggPSB2YWw7DQo+ICsNCj4gKwkJaWYgKCFvZm5vZGVfcmVhZF91MzIo bmMtPmRldi0+bm9kZV8sDQo+ICsJCQkJICAgICAiYXRtZWwscG1lY2Mtc2VjdG9yLXNpemUiLA0K PiArCQkJCSAgICAgJnZhbCkpDQo+ICsJCQljaGlwLT5lY2Muc2l6ZSA9IHZhbDsNCj4gKwl9DQo+ ICsNCj4gKwlpZiAoY2hpcC0+ZWNjLm9wdGlvbnMgJiBOQU5EX0VDQ19NQVhJTUlaRSkNCj4gKwkJ cmVxLmVjYy5zdHJlbmd0aCA9IEFUTUVMX1BNRUNDX01BWElNSVpFX0VDQ19TVFJFTkdUSDsNCj4g KwllbHNlIGlmIChjaGlwLT5lY2Muc3RyZW5ndGgpDQo+ICsJCXJlcS5lY2Muc3RyZW5ndGggPSBj aGlwLT5lY2Muc3RyZW5ndGg7DQo+ICsJZWxzZQ0KPiArCQlyZXEuZWNjLnN0cmVuZ3RoID0gQVRN RUxfUE1FQ0NfTUFYSU1JWkVfRUNDX1NUUkVOR1RIOw0KPiArDQo+ICsJaWYgKGNoaXAtPmVjYy5z aXplKQ0KPiArCQlyZXEuZWNjLnNlY3RvcnNpemUgPSBjaGlwLT5lY2Muc2l6ZTsNCj4gKwllbHNl DQo+ICsJCXJlcS5lY2Muc2VjdG9yc2l6ZSA9IEFUTUVMX1BNRUNDX1NFQ1RPUl9TSVpFX0FVVE87 DQo+ICsNCj4gKwlyZXEucGFnZXNpemUgPSBtdGQtPndyaXRlc2l6ZTsNCj4gKwlyZXEub29ic2l6 ZSA9IG10ZC0+b29ic2l6ZTsNCj4gKw0KPiArCWlmIChtdGQtPndyaXRlc2l6ZSA8PSA1MTIpIHsN Cj4gKwkJcmVxLmVjYy5ieXRlcyA9IDQ7DQo+ICsJCXJlcS5lY2Mub29ib2Zmc2V0ID0gMDsNCj4g Kwl9IGVsc2Ugew0KPiArCQlyZXEuZWNjLmJ5dGVzID0gbXRkLT5vb2JzaXplIC0gMjsNCj4gKwkJ cmVxLmVjYy5vb2JvZmZzZXQgPSBBVE1FTF9QTUVDQ19PT0JPRkZTRVRfQVVUTzsNCj4gKwl9DQo+ ICsNCj4gKwluYW5kLT5wbWVjYyA9IGF0bWVsX3BtZWNjX2NyZWF0ZV91c2VyKG5jLT5wbWVjYywg JnJlcSk7DQo+ICsJaWYgKElTX0VSUihuYW5kLT5wbWVjYykpDQo+ICsJCXJldHVybiBQVFJfRVJS KG5hbmQtPnBtZWNjKTsNCj4gKw0KPiArCWNoaXAtPmVjYy5hbGdvID0gTkFORF9FQ0NfQkNIOw0K PiArCWNoaXAtPmVjYy5zaXplID0gcmVxLmVjYy5zZWN0b3JzaXplOw0KPiArCWNoaXAtPmVjYy5i eXRlcyA9IHJlcS5lY2MuYnl0ZXMgLyByZXEuZWNjLm5zZWN0b3JzOw0KPiArCWNoaXAtPmVjYy5z dHJlbmd0aCA9IHJlcS5lY2Muc3RyZW5ndGg7DQo+ICsNCj4gKwljaGlwLT5vcHRpb25zIHw9IE5B TkRfTk9fU1VCUEFHRV9XUklURTsNCj4gKw0KPiArCW10ZF9zZXRfb29ibGF5b3V0KG10ZCwgbmFu ZF9nZXRfbGFyZ2VfcGFnZV9vb2JsYXlvdXQoKSk7DQo+ICsJcG1lY2NfY29uZmlnX2VjY19sYXlv dXQoJmF0bWVsX3BtZWNjX29vYmluZm8sDQo+ICsJCQkJbXRkLT5vb2JzaXplLA0KPiArCQkJCWNo aXAtPmVjYy5ieXRlcyk7DQo+ICsJY2hpcC0+ZWNjLmxheW91dCA9ICZhdG1lbF9wbWVjY19vb2Jp bmZvOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYXRtZWxf bmFuZF9lY2NfaW5pdChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQ0KPiArew0KPiArCXN0cnVjdCBh dG1lbF9uYW5kX2NvbnRyb2xsZXIgKm5jOw0KPiArCXN0cnVjdCBhdG1lbF9uYW5kICpuYW5kID0g dG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJbmMgPSB0b19uYW5k X2NvbnRyb2xsZXIobmFuZC0+Y29udHJvbGxlcik7DQo+ICsNCj4gKwlzd2l0Y2ggKGNoaXAtPmVj Yy5tb2RlKSB7DQo+ICsJY2FzZSBOQU5EX0VDQ19OT05FOg0KPiArCWNhc2UgTkFORF9FQ0NfU09G VDoNCj4gKwkJLyoNCj4gKwkJICogTm90aGluZyB0byBkbywgdGhlIGNvcmUgd2lsbCBpbml0aWFs aXplIGV2ZXJ5dGhpbmcgZm9yIHVzLg0KPiArCQkgKi8NCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwlj YXNlIE5BTkRfRUNDX0hXOg0KPiArCQlyZXQgPSBhdG1lbF9uYW5kX3BtZWNjX2luaXQoY2hpcCk7 DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJCWNoaXAtPmVjYy5y ZWFkX3BhZ2UgPSBhdG1lbF9uYW5kX3BtZWNjX3JlYWRfcGFnZTsNCj4gKwkJY2hpcC0+ZWNjLndy aXRlX3BhZ2UgPSBhdG1lbF9uYW5kX3BtZWNjX3dyaXRlX3BhZ2U7DQo+ICsJCWNoaXAtPmVjYy5y ZWFkX3BhZ2VfcmF3ID0gYXRtZWxfbmFuZF9wbWVjY19yZWFkX3BhZ2VfcmF3Ow0KPiArCQljaGlw LT5lY2Mud3JpdGVfcGFnZV9yYXcgPSBhdG1lbF9uYW5kX3BtZWNjX3dyaXRlX3BhZ2VfcmF3Ow0K PiArCQlicmVhazsNCj4gKw0KPiArCWRlZmF1bHQ6DQo+ICsJCS8qIE90aGVyIG1vZGVzIGFyZSBu b3Qgc3VwcG9ydGVkLiAqLw0KPiArCQlkZXZfZXJyKG5jLT5kZXYsICJVbnN1cHBvcnRlZCBFQ0Mg bW9kZTogJWRcbiIsDQo+ICsJCQljaGlwLT5lY2MubW9kZSk7DQo+ICsJCXJldHVybiAtRU9QTk9U U1VQUDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBhdG1lbF9oc21jX25hbmRfZWNjX2luaXQoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCkNCj4gK3sN Cj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gYXRtZWxfbmFuZF9lY2NfaW5pdChjaGlwKTsN Cj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJaWYgKGNoaXAtPmVjYy5t b2RlICE9IE5BTkRfRUNDX0hXKQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCS8qIEFkanVzdCB0 aGUgRUNDIG9wZXJhdGlvbnMgZm9yIHRoZSBIU01DIElQLiAqLw0KPiArCWNoaXAtPmVjYy5yZWFk X3BhZ2UgPSBhdG1lbF9oc21jX25hbmRfcG1lY2NfcmVhZF9wYWdlOw0KPiArCWNoaXAtPmVjYy53 cml0ZV9wYWdlID0gYXRtZWxfaHNtY19uYW5kX3BtZWNjX3dyaXRlX3BhZ2U7DQo+ICsJY2hpcC0+ ZWNjLnJlYWRfcGFnZV9yYXcgPSBhdG1lbF9oc21jX25hbmRfcG1lY2NfcmVhZF9wYWdlX3JhdzsN Cj4gKwljaGlwLT5lY2Mud3JpdGVfcGFnZV9yYXcgPSBhdG1lbF9oc21jX25hbmRfcG1lY2Nfd3Jp dGVfcGFnZV9yYXc7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBhdG1lbF9zbWNfbmFuZF9wcmVwYXJlX3NtY2NvbmYoc3RydWN0IGF0bWVsX25hbmQgKm5hbmQs DQo+ICsJCQkJCSAgY29uc3Qgc3RydWN0IG5hbmRfZGF0YV9pbnRlcmZhY2UgKmNvbmYsDQo+ICsJ CQkJCSAgc3RydWN0IGF0bWVsX3NtY19jc19jb25mICpzbWNjb25mKQ0KPiArew0KPiArCXUzMiBu Y3ljbGVzLCB0b3RhbGN5Y2xlcywgdGltZXBzLCBtY2twZXJpb2RwczsNCj4gKwlzdHJ1Y3QgYXRt ZWxfbmFuZF9jb250cm9sbGVyICpuYzsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJbmMgPSB0b19u YW5kX2NvbnRyb2xsZXIobmFuZC0+Y29udHJvbGxlcik7DQo+ICsNCj4gKwkvKiBERFIgaW50ZXJm YWNlIG5vdCBzdXBwb3J0ZWQuICovDQo+ICsJaWYgKGNvbmYtPnR5cGUgIT0gTkFORF9TRFJfSUZB Q0UpDQo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4gKw0KPiArCS8qDQo+ICsJICogdFJDIDwg MzBucyBpbXBsaWVzIEVETyBtb2RlLiBUaGlzIGNvbnRyb2xsZXIgZG9lcyBub3Qgc3VwcG9ydCB0 aGlzDQo+ICsJICogbW9kZS4NCj4gKwkgKi8NCj4gKwlpZiAoY29uZi0+dGltaW5ncy5zZHIudFJD X21pbiA8IDMwMDAwKQ0KPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ICsNCj4gKwlhdG1lbF9z bWNfY3NfY29uZl9pbml0KHNtY2NvbmYpOw0KPiArDQo+ICsJbWNrcGVyaW9kcHMgPSBOU0VDX1BF Ul9TRUMgLyBjbGtfZ2V0X3JhdGUobmMtPm1jayk7DQo+ICsJbWNrcGVyaW9kcHMgKj0gMTAwMDsN Cj4gKw0KPiArCS8qDQo+ICsJICogU2V0IHdyaXRlIHB1bHNlIHRpbWluZy4gVGhpcyBvbmUgaXMg ZWFzeSB0byBleHRyYWN0Og0KPiArCSAqDQo+ICsJICogTldFX1BVTFNFID0gdFdQDQo+ICsJICov DQo+ICsJbmN5Y2xlcyA9IERJVl9ST1VORF9VUChjb25mLT50aW1pbmdzLnNkci50V1BfbWluLCBt Y2twZXJpb2Rwcyk7DQo+ICsJdG90YWxjeWNsZXMgPSBuY3ljbGVzOw0KPiArCXJldCA9IGF0bWVs X3NtY19jc19jb25mX3NldF9wdWxzZShzbWNjb25mLCBBVE1FTF9TTUNfTldFX1NISUZULA0KPiAr CQkJCQkgIG5jeWNsZXMpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4g KwkvKg0KPiArCSAqIFRoZSB3cml0ZSBzZXR1cCB0aW1pbmcgZGVwZW5kcyBvbiB0aGUgb3BlcmF0 aW9uIGRvbmUgb24gdGhlIE5BTkQuDQo+ICsJICogQWxsIG9wZXJhdGlvbnMgZ29lcyB0aHJvdWdo IHRoZSBzYW1lIGRhdGEgYnVzLCBidXQgdGhlIG9wZXJhdGlvbg0KPiArCSAqIHR5cGUgZGVwZW5k cyBvbiB0aGUgYWRkcmVzcyB3ZSBhcmUgd3JpdGluZyB0byAoQUxFL0NMRSBhZGRyZXNzDQo+ICsJ ICogbGluZXMpLg0KPiArCSAqIFNpbmNlIHdlIGhhdmUgbm8gd2F5IHRvIGRpZmZlcmVudGlhdGUg dGhlIGRpZmZlcmVudCBvcGVyYXRpb25zIGF0DQo+ICsJICogdGhlIFNNQyBsZXZlbCwgd2UgbXVz dCBjb25zaWRlciB0aGUgd29yc3QgY2FzZSAodGhlIGJpZ2dlc3Qgc2V0dXANCj4gKwkgKiB0aW1l IGFtb25nIGFsbCBvcGVyYXRpb24gdHlwZXMpOg0KPiArCSAqDQo+ICsJICogTldFX1NFVFVQID0g bWF4KHRDTFMsIHRDUywgdEFMUywgdERTKSAtIE5XRV9QVUxTRQ0KPiArCSAqLw0KPiArCXRpbWVw cyA9IG1heDMoY29uZi0+dGltaW5ncy5zZHIudENMU19taW4sIGNvbmYtPnRpbWluZ3Muc2RyLnRD U19taW4sDQo+ICsJCSAgICAgIGNvbmYtPnRpbWluZ3Muc2RyLnRBTFNfbWluKTsNCj4gKwl0aW1l cHMgPSBtYXgodGltZXBzLCBjb25mLT50aW1pbmdzLnNkci50RFNfbWluKTsNCj4gKwluY3ljbGVz ID0gRElWX1JPVU5EX1VQKHRpbWVwcywgbWNrcGVyaW9kcHMpOw0KPiArCW5jeWNsZXMgPSBuY3lj bGVzID4gdG90YWxjeWNsZXMgPyBuY3ljbGVzIC0gdG90YWxjeWNsZXMgOiAwOw0KPiArCXRvdGFs Y3ljbGVzICs9IG5jeWNsZXM7DQo+ICsJcmV0ID0gYXRtZWxfc21jX2NzX2NvbmZfc2V0X3NldHVw KHNtY2NvbmYsIEFUTUVMX1NNQ19OV0VfU0hJRlQsDQo+ICsJCQkJCSAgbmN5Y2xlcyk7DQo+ICsJ aWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCS8qDQo+ICsJICogQXMgZm9yIHRo ZSB3cml0ZSBzZXR1cCB0aW1pbmcsIHRoZSB3cml0ZSBob2xkIHRpbWluZyBkZXBlbmRzIG9uIHRo ZQ0KPiArCSAqIG9wZXJhdGlvbiBkb25lIG9uIHRoZSBOQU5EOg0KPiArCSAqDQo+ICsJICogTldF X0hPTEQgPSBtYXgodENMSCwgdENILCB0QUxILCB0REgsIHRXSCkNCj4gKwkgKi8NCj4gKwl0aW1l cHMgPSBtYXgzKGNvbmYtPnRpbWluZ3Muc2RyLnRDTEhfbWluLCBjb25mLT50aW1pbmdzLnNkci50 Q0hfbWluLA0KPiArCQkgICAgICBjb25mLT50aW1pbmdzLnNkci50QUxIX21pbik7DQo+ICsJdGlt ZXBzID0gbWF4Myh0aW1lcHMsIGNvbmYtPnRpbWluZ3Muc2RyLnRESF9taW4sDQo+ICsJCSAgICAg IGNvbmYtPnRpbWluZ3Muc2RyLnRXSF9taW4pOw0KPiArCW5jeWNsZXMgPSBESVZfUk9VTkRfVVAo dGltZXBzLCBtY2twZXJpb2Rwcyk7DQo+ICsJdG90YWxjeWNsZXMgKz0gbmN5Y2xlczsNCj4gKw0K PiArCS8qDQo+ICsJICogVGhlIHdyaXRlIGN5Y2xlIHRpbWluZyBpcyBkaXJlY3RseSBtYXRjaGlu ZyB0V0MsIGJ1dCBpcyBhbHNvDQo+ICsJICogZGVwZW5kZW50IG9uIHRoZSBvdGhlciB0aW1pbmdz IG9uIHRoZSBzZXR1cCBhbmQgaG9sZCB0aW1pbmdzIHdlDQo+ICsJICogY2FsY3VsYXRlZCBlYXJs aWVyLCB3aGljaCBnaXZlczoNCj4gKwkgKg0KPiArCSAqIE5XRV9DWUNMRSA9IG1heCh0V0MsIE5X RV9TRVRVUCArIE5XRV9QVUxTRSArIE5XRV9IT0xEKQ0KPiArCSAqLw0KPiArCW5jeWNsZXMgPSBE SVZfUk9VTkRfVVAoY29uZi0+dGltaW5ncy5zZHIudFdDX21pbiwgbWNrcGVyaW9kcHMpOw0KPiAr CW5jeWNsZXMgPSBtYXgodG90YWxjeWNsZXMsIG5jeWNsZXMpOw0KPiArCXJldCA9IGF0bWVsX3Nt Y19jc19jb25mX3NldF9jeWNsZShzbWNjb25mLCBBVE1FTF9TTUNfTldFX1NISUZULA0KPiArCQkJ CQkgIG5jeWNsZXMpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkv Kg0KPiArCSAqIFdlIGRvbid0IHdhbnQgdGhlIENTIGxpbmUgdG8gYmUgdG9nZ2xlZCBiZXR3ZWVu IGVhY2ggYnl0ZS93b3JkDQo+ICsJICogdHJhbnNmZXIgdG8gdGhlIE5BTkQuIFRoZSBvbmx5IHdh eSB0byBndWFyYW50ZWUgdGhhdCBpcyB0byBoYXZlIHRoZQ0KPiArCSAqIE5DU197V1IsUkR9X3tT RVRVUCxIT0xEfSB0aW1pbmdzIHNldCB0byAwLCB3aGljaCBpbiB0dXJuIG1lYW5zOg0KPiArCSAq DQo+ICsJICogTkNTX1dSX1BVTFNFID0gTldFX0NZQ0xFDQo+ICsJICovDQo+ICsJcmV0ID0gYXRt ZWxfc21jX2NzX2NvbmZfc2V0X3B1bHNlKHNtY2NvbmYsIEFUTUVMX1NNQ19OQ1NfV1JfU0hJRlQs DQo+ICsJCQkJCSAgbmN5Y2xlcyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4g Kw0KPiArCS8qDQo+ICsJICogQXMgZm9yIHRoZSB3cml0ZSBzZXR1cCB0aW1pbmcsIHRoZSByZWFk IGhvbGQgdGltaW5nIGRlcGVuZHMgb24gdGhlDQo+ICsJICogb3BlcmF0aW9uIGRvbmUgb24gdGhl IE5BTkQ6DQo+ICsJICoNCj4gKwkgKiBOUkRfSE9MRCA9IG1heCh0UkVILCB0UkhPSCkNCj4gKwkg Ki8NCj4gKwl0aW1lcHMgPSBtYXgoY29uZi0+dGltaW5ncy5zZHIudFJFSF9taW4sIGNvbmYtPnRp bWluZ3Muc2RyLnRSSE9IX21pbik7DQo+ICsJbmN5Y2xlcyA9IERJVl9ST1VORF9VUCh0aW1lcHMs IG1ja3BlcmlvZHBzKTsNCj4gKwl0b3RhbGN5Y2xlcyA9IG5jeWNsZXM7DQo+ICsNCj4gKwkvKg0K PiArCSAqIFRERiA9IHRSSFogLSBOUkRfSE9MRA0KPiArCSAqLw0KPiArCW5jeWNsZXMgPSBESVZf Uk9VTkRfVVAoY29uZi0+dGltaW5ncy5zZHIudFJIWl9tYXgsIG1ja3BlcmlvZHBzKTsNCj4gKwlu Y3ljbGVzIC09IHRvdGFsY3ljbGVzOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBJbiBPTkZJIDQuMCBz cGVjcywgdFJIWiBoYXMgYmVlbiBpbmNyZWFzZWQgdG8gc3VwcG9ydCBFRE8gTkFORHMgYW5kDQo+ ICsJICogd2UgbWlnaHQgZW5kIHVwIHdpdGggYSBjb25maWcgdGhhdCBkb2VzIG5vdCBmaXQgaW4g dGhlIFRERiBmaWVsZC4NCj4gKwkgKiBKdXN0IHRha2UgdGhlIG1heCB2YWx1ZSBpbiB0aGlzIGNh c2UgYW5kIGhvcGUgdGhhdCB0aGUgTkFORCBpcyBtb3JlDQo+ICsJICogdG9sZXJhbnQgdGhhbiBh ZHZlcnRpc2VkLg0KPiArCSAqLw0KPiArCWlmIChuY3ljbGVzID4gQVRNRUxfU01DX01PREVfVERG X01BWCkNCj4gKwkJbmN5Y2xlcyA9IEFUTUVMX1NNQ19NT0RFX1RERl9NQVg7DQo+ICsJZWxzZSBp ZiAobmN5Y2xlcyA8IEFUTUVMX1NNQ19NT0RFX1RERl9NSU4pDQo+ICsJCW5jeWNsZXMgPSBBVE1F TF9TTUNfTU9ERV9UREZfTUlOOw0KPiArDQo+ICsJc21jY29uZi0+bW9kZSB8PSBBVE1FTF9TTUNf TU9ERV9UREYobmN5Y2xlcykgfA0KPiArCQkJIEFUTUVMX1NNQ19NT0RFX1RERk1PREVfT1BUSU1J WkVEOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBSZWFkIHB1bHNlIHRpbWluZyBkaXJlY3RseSBtYXRj aGVzIHRSUDoNCj4gKwkgKg0KPiArCSAqIE5SRF9QVUxTRSA9IHRSUA0KPiArCSAqLw0KPiArCW5j eWNsZXMgPSBESVZfUk9VTkRfVVAoY29uZi0+dGltaW5ncy5zZHIudFJQX21pbiwgbWNrcGVyaW9k cHMpOw0KPiArCXRvdGFsY3ljbGVzICs9IG5jeWNsZXM7DQo+ICsJcmV0ID0gYXRtZWxfc21jX2Nz X2NvbmZfc2V0X3B1bHNlKHNtY2NvbmYsIEFUTUVMX1NNQ19OUkRfU0hJRlQsDQo+ICsJCQkJCSAg bmN5Y2xlcyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCS8qDQo+ ICsJICogVGhlIHdyaXRlIGN5Y2xlIHRpbWluZyBpcyBkaXJlY3RseSBtYXRjaGluZyB0V0MsIGJ1 dCBpcyBhbHNvDQo+ICsJICogZGVwZW5kZW50IG9uIHRoZSBzZXR1cCBhbmQgaG9sZCB0aW1pbmdz IHdlIGNhbGN1bGF0ZWQgZWFybGllciwNCj4gKwkgKiB3aGljaCBnaXZlczoNCj4gKwkgKg0KPiAr CSAqIE5SRF9DWUNMRSA9IG1heCh0UkMsIE5SRF9QVUxTRSArIE5SRF9IT0xEKQ0KPiArCSAqDQo+ ICsJICogTlJEX1NFVFVQIGlzIGFsd2F5cyAwLg0KPiArCSAqLw0KPiArCW5jeWNsZXMgPSBESVZf Uk9VTkRfVVAoY29uZi0+dGltaW5ncy5zZHIudFJDX21pbiwgbWNrcGVyaW9kcHMpOw0KPiArCW5j eWNsZXMgPSBtYXgodG90YWxjeWNsZXMsIG5jeWNsZXMpOw0KPiArCXJldCA9IGF0bWVsX3NtY19j c19jb25mX3NldF9jeWNsZShzbWNjb25mLCBBVE1FTF9TTUNfTlJEX1NISUZULA0KPiArCQkJCQkg IG5jeWNsZXMpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkvKg0K PiArCSAqIFdlIGRvbid0IHdhbnQgdGhlIENTIGxpbmUgdG8gYmUgdG9nZ2xlZCBiZXR3ZWVuIGVh Y2ggYnl0ZS93b3JkDQo+ICsJICogdHJhbnNmZXIgZnJvbSB0aGUgTkFORC4gVGhlIG9ubHkgd2F5 IHRvIGd1YXJhbnRlZSB0aGF0IGlzIHRvIGhhdmUNCj4gKwkgKiB0aGUgTkNTX3tXUixSRH1fe1NF VFVQLEhPTER9IHRpbWluZ3Mgc2V0IHRvIDAsIHdoaWNoIGluIHR1cm4gbWVhbnM6DQo+ICsJICoN Cj4gKwkgKiBOQ1NfUkRfUFVMU0UgPSBOUkRfQ1lDTEUNCj4gKwkgKi8NCj4gKwlyZXQgPSBhdG1l bF9zbWNfY3NfY29uZl9zZXRfcHVsc2Uoc21jY29uZiwgQVRNRUxfU01DX05DU19SRF9TSElGVCwN Cj4gKwkJCQkJICBuY3ljbGVzKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiAr DQo+ICsJLyogVHh4eCB0aW1pbmdzIGFyZSBkaXJlY3RseSBtYXRjaGluZyB0WFhYIG9uZXMuICov DQo+ICsJbmN5Y2xlcyA9IERJVl9ST1VORF9VUChjb25mLT50aW1pbmdzLnNkci50Q0xSX21pbiwg bWNrcGVyaW9kcHMpOw0KPiArCXJldCA9IGF0bWVsX3NtY19jc19jb25mX3NldF90aW1pbmcoc21j Y29uZiwNCj4gKwkJCQkJICAgQVRNRUxfSFNNQ19USU1JTkdTX1RDTFJfU0hJRlQsDQo+ICsJCQkJ CSAgIG5jeWNsZXMpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlu Y3ljbGVzID0gRElWX1JPVU5EX1VQKGNvbmYtPnRpbWluZ3Muc2RyLnRBRExfbWluLCBtY2twZXJp b2Rwcyk7DQo+ICsJcmV0ID0gYXRtZWxfc21jX2NzX2NvbmZfc2V0X3RpbWluZyhzbWNjb25mLA0K PiArCQkJCQkgICBBVE1FTF9IU01DX1RJTUlOR1NfVEFETF9TSElGVCwNCj4gKwkJCQkJICAgbmN5 Y2xlcyk7DQo+ICsJLyoNCj4gKwkgKiBWZXJzaW9uIDQgb2YgdGhlIE9ORkkgc3BlYyBtYW5kYXRl cyB0aGF0IHRBREwgYmUgYXQgbGVhc3QgNDAwDQo+ICsJICogbmFub3NlY29uZHMsIGJ1dCwgZGVw ZW5kaW5nIG9uIHRoZSBtYXN0ZXIgY2xvY2sgcmF0ZSwgNDAwIG5zIG1heSBub3QNCj4gKwkgKiBm aXQgaW4gdGhlIHRBREwgZmllbGQgb2YgdGhlIFNNQyByZWcuIFdlIG5lZWQgdG8gcmVsYXggdGhl IGNoZWNrIGFuZA0KPiArCSAqIGFjY2VwdCB0aGUgLUVSQU5HRSByZXR1cm4gY29kZS4NCj4gKwkg Kg0KPiArCSAqIE5vdGUgdGhhdCBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgT05GSSBzcGVjIGhh ZCBhIGxvd2VyIHRBRExfbWluDQo+ICsJICogKDEwMCBvciAyMDAgbnMpLiBJdCdzIG5vdCBjbGVh ciB3aHkgdGhpcyB0aW1pbmcgY29uc3RyYWludCBnb3QNCj4gKwkgKiBpbmNyZWFzZWQgYnV0IGl0 IHNlZW1zIG1vc3QgTkFORHMgYXJlIGZpbmUgd2l0aCB2YWx1ZXMgbG93ZXIgdGhhbg0KPiArCSAq IDQwMG5zLCBzbyB3ZSBzaG91bGQgYmUgc2FmZS4NCj4gKwkgKi8NCj4gKwlpZiAocmV0ICYmIHJl dCAhPSAtRVJBTkdFKQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJbmN5Y2xlcyA9IERJVl9S T1VORF9VUChjb25mLT50aW1pbmdzLnNkci50QVJfbWluLCBtY2twZXJpb2Rwcyk7DQo+ICsJcmV0 ID0gYXRtZWxfc21jX2NzX2NvbmZfc2V0X3RpbWluZyhzbWNjb25mLA0KPiArCQkJCQkgICBBVE1F TF9IU01DX1RJTUlOR1NfVEFSX1NISUZULA0KPiArCQkJCQkgICBuY3ljbGVzKTsNCj4gKwlpZiAo cmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJbmN5Y2xlcyA9IERJVl9ST1VORF9VUChj b25mLT50aW1pbmdzLnNkci50UlJfbWluLCBtY2twZXJpb2Rwcyk7DQo+ICsJcmV0ID0gYXRtZWxf c21jX2NzX2NvbmZfc2V0X3RpbWluZyhzbWNjb25mLA0KPiArCQkJCQkgICBBVE1FTF9IU01DX1RJ TUlOR1NfVFJSX1NISUZULA0KPiArCQkJCQkgICBuY3ljbGVzKTsNCj4gKwlpZiAocmV0KQ0KPiAr CQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJbmN5Y2xlcyA9IERJVl9ST1VORF9VUChjb25mLT50aW1p bmdzLnNkci50V0JfbWF4LCBtY2twZXJpb2Rwcyk7DQo+ICsJcmV0ID0gYXRtZWxfc21jX2NzX2Nv bmZfc2V0X3RpbWluZyhzbWNjb25mLA0KPiArCQkJCQkgICBBVE1FTF9IU01DX1RJTUlOR1NfVFdC X1NISUZULA0KPiArCQkJCQkgICBuY3ljbGVzKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4g cmV0Ow0KPiArDQo+ICsJLyogQXR0YWNoIHRoZSBDUyBsaW5lIHRvIHRoZSBORkMgbG9naWMuICov DQo+ICsJc21jY29uZi0+dGltaW5ncyB8PSBBVE1FTF9IU01DX1RJTUlOR1NfTkZTRUw7DQo+ICsN Cj4gKwkvKiBTZXQgdGhlIGFwcHJvcHJpYXRlIGRhdGEgYnVzIHdpZHRoLiAqLw0KPiArCWlmIChu YW5kLT5iYXNlLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQ0KPiArCQlzbWNjb25mLT5tb2Rl IHw9IEFUTUVMX1NNQ19NT0RFX0RCV18xNjsNCj4gKw0KPiArCS8qIE9wZXJhdGUgaW4gTlJEL05X RSBSRUFEL1dSSVRFTU9ERS4gKi8NCj4gKwlzbWNjb25mLT5tb2RlIHw9IEFUTUVMX1NNQ19NT0RF X1JFQURNT0RFX05SRCB8DQo+ICsJCQkgQVRNRUxfU01DX01PREVfV1JJVEVNT0RFX05XRTsNCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICthdG1lbF9zbWNf bmFuZF9zZXR1cF9kYXRhX2ludGVyZmFjZShzdHJ1Y3QgYXRtZWxfbmFuZCAqbmFuZCwNCj4gKwkJ CQkgICAgaW50IGNzbGluZSwNCj4gKwkJCQkgICAgY29uc3Qgc3RydWN0IG5hbmRfZGF0YV9pbnRl cmZhY2UgKmNvbmYpDQo+ICt7DQo+ICsJc3RydWN0IGF0bWVsX25hbmRfY29udHJvbGxlciAqbmM7 DQo+ICsJc3RydWN0IGF0bWVsX3NtY19jc19jb25mIHNtY2NvbmY7DQo+ICsJc3RydWN0IGF0bWVs X25hbmRfY3MgKmNzOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwluYyA9IHRvX25hbmRfY29udHJv bGxlcihuYW5kLT5jb250cm9sbGVyKTsNCj4gKw0KPiArCXJldCA9IGF0bWVsX3NtY19uYW5kX3By ZXBhcmVfc21jY29uZihuYW5kLCBjb25mLCAmc21jY29uZik7DQo+ICsJaWYgKHJldCkNCj4gKwkJ cmV0dXJuIHJldDsNCj4gKw0KPiArCWlmIChjc2xpbmUgPT0gTkFORF9EQVRBX0lGQUNFX0NIRUNL X09OTFkpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJY3MgPSAmbmFuZC0+Y3NbY3NsaW5lXTsN Cj4gKwljcy0+c21jY29uZiA9IHNtY2NvbmY7DQo+ICsNCj4gKwlhdG1lbF9zbWNfY3NfY29uZl9h cHBseShuYy0+c21jLCBjcy0+aWQsICZjcy0+c21jY29uZik7DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArYXRtZWxfaHNtY19uYW5kX3NldHVwX2RhdGFf aW50ZXJmYWNlKHN0cnVjdCBhdG1lbF9uYW5kICpuYW5kLA0KPiArCQkJCSAgICAgaW50IGNzbGlu ZSwNCj4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuYW5kX2RhdGFfaW50ZXJmYWNlICpjb25mKQ0K PiArew0KPiArCXN0cnVjdCBhdG1lbF9oc21jX25hbmRfY29udHJvbGxlciAqbmM7DQo+ICsJc3Ry dWN0IGF0bWVsX3NtY19jc19jb25mIHNtY2NvbmY7DQo+ICsJc3RydWN0IGF0bWVsX25hbmRfY3Mg KmNzOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwluYyA9IHRvX2hzbWNfbmFuZF9jb250cm9sbGVy KG5hbmQtPmNvbnRyb2xsZXIpOw0KPiArDQo+ICsJcmV0ID0gYXRtZWxfc21jX25hbmRfcHJlcGFy ZV9zbWNjb25mKG5hbmQsIGNvbmYsICZzbWNjb25mKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1 cm4gcmV0Ow0KPiArDQo+ICsJaWYgKGNzbGluZSA9PSBOQU5EX0RBVEFfSUZBQ0VfQ0hFQ0tfT05M WSkNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwljcyA9ICZuYW5kLT5jc1tjc2xpbmVdOw0KPiAr CWNzLT5zbWNjb25mID0gc21jY29uZjsNCj4gKw0KPiArCWlmIChjcy0+cmIudHlwZSA9PSBBVE1F TF9OQU5EX05BVElWRV9SQikNCj4gKwkJY3MtPnNtY2NvbmYudGltaW5ncyB8PSBBVE1FTF9IU01D X1RJTUlOR1NfUkJOU0VMKGNzLT5yYi5pZCk7DQo+ICsNCj4gKwlhdG1lbF9oc21jX2NzX2NvbmZf YXBwbHkobmMtPmJhc2Uuc21jLCBuYy0+aHNtY19sYXlvdXQsIGNzLT5pZCwNCj4gKwkJCQkgJmNz LT5zbWNjb25mKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IGF0bWVsX25hbmRfc2V0dXBfZGF0YV9pbnRlcmZhY2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIGlu dCBjc2xpbmUsDQo+ICsJCQkJCSAgIGNvbnN0IHN0cnVjdCBuYW5kX2RhdGFfaW50ZXJmYWNlICpj b25mKQ0KPiArew0KPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQp Ow0KPiArCXN0cnVjdCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4g KwlzdHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyICpuYzsNCj4gKw0KPiArCW5jID0gdG9fbmFu ZF9jb250cm9sbGVyKG5hbmQtPmNvbnRyb2xsZXIpOw0KPiArDQo+ICsJaWYgKGNzbGluZSA+PSBu YW5kLT5udW1jcyB8fA0KPiArCSAgICAoY3NsaW5lIDwgMCAmJiBjc2xpbmUgIT0gTkFORF9EQVRB X0lGQUNFX0NIRUNLX09OTFkpKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCXJldHVy biBuYy0+Y2Fwcy0+b3BzLT5zZXR1cF9kYXRhX2ludGVyZmFjZShuYW5kLCBjc2xpbmUsIGNvbmYp Ow0KPiArfQ0KPiArDQo+ICsjZGVmaW5lIE5BTkRfS0VFUF9USU1JTkdTICAgICAgIDB4MDA4MDAw MDANCj4gKw0KPiArc3RhdGljIHZvaWQgYXRtZWxfbmFuZF9pbml0KHN0cnVjdCBhdG1lbF9uYW5k X2NvbnRyb2xsZXIgKm5jLA0KPiArCQkJICAgIHN0cnVjdCBhdG1lbF9uYW5kICpuYW5kKQ0KPiAr ew0KPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSAmbmFuZC0+YmFzZTsNCj4gKwlzdHJ1Y3Qg bXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOw0KPiArDQo+ICsJbXRkLT5kZXYtPnBh cmVudCA9IG5jLT5kZXY7DQo+ICsJbmFuZC0+Y29udHJvbGxlciA9ICZuYy0+YmFzZTsNCj4gKwlu YW5kLT5jb250cm9sbGVyID0gJm5jLT5iYXNlOw0KPiArDQo+ICsJY2hpcC0+Y21kX2N0cmwgPSBh dG1lbF9uYW5kX2NtZF9jdHJsOw0KPiArCWNoaXAtPnJlYWRfYnl0ZSA9IGF0bWVsX25hbmRfcmVh ZF9ieXRlOw0KPiArCWNoaXAtPndyaXRlX2J5dGUgPSBhdG1lbF9uYW5kX3dyaXRlX2J5dGU7DQo+ ICsJY2hpcC0+cmVhZF9idWYgPSBhdG1lbF9uYW5kX3JlYWRfYnVmOw0KPiArCWNoaXAtPndyaXRl X2J1ZiA9IGF0bWVsX25hbmRfd3JpdGVfYnVmOw0KPiArCWNoaXAtPnNlbGVjdF9jaGlwID0gYXRt ZWxfbmFuZF9zZWxlY3RfY2hpcDsNCj4gKwljaGlwLT5zZXR1cF9kYXRhX2ludGVyZmFjZSA9IGF0 bWVsX25hbmRfc2V0dXBfZGF0YV9pbnRlcmZhY2U7DQo+ICsNCj4gKwlpZiAoIW5jLT5tY2sgfHwg IW5jLT5jYXBzLT5vcHMtPnNldHVwX2RhdGFfaW50ZXJmYWNlKQ0KPiArCQljaGlwLT5vcHRpb25z IHw9IE5BTkRfS0VFUF9USU1JTkdTOw0KPiArDQo+ICsJLyogU29tZSBOQU5EcyByZXF1aXJlIGEg bG9uZ2VyIGRlbGF5IHRoYW4gdGhlIGRlZmF1bHQgb25lICgyMHVzKS4gKi8NCj4gKwljaGlwLT5j aGlwX2RlbGF5ID0gNDA7DQo+ICsNCj4gKwkvKiBEZWZhdWx0IHRvIEhXIEVDQyBpZiBwbWVjYyBp cyBhdmFpbGFibGUuICovDQo+ICsJaWYgKG5jLT5wbWVjYykNCj4gKwkJY2hpcC0+ZWNjLm1vZGUg PSBOQU5EX0VDQ19IVzsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYXRtZWxfc21jX25hbmRf aW5pdChzdHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyICpuYywNCj4gKwkJCQlzdHJ1Y3QgYXRt ZWxfbmFuZCAqbmFuZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgYXRtZWxfc21jX25hbmRfY29udHJvbGxl ciAqc21jX25jOw0KPiArCWludCBpOw0KPiArDQo+ICsJYXRtZWxfbmFuZF9pbml0KG5jLCBuYW5k KTsNCj4gKw0KPiArCXNtY19uYyA9IHRvX3NtY19uYW5kX2NvbnRyb2xsZXIobmFuZC0+Y29udHJv bGxlcik7DQo+ICsJaWYgKCFzbWNfbmMtPmViaV9jc2FfcmVnbWFwKQ0KPiArCQlyZXR1cm47DQo+ ICsNCj4gKwkvKiBBdHRhY2ggdGhlIENTIHRvIHRoZSBOQU5EIEZsYXNoIGxvZ2ljLiAqLw0KPiAr CWZvciAoaSA9IDA7IGkgPCBuYW5kLT5udW1jczsgaSsrKQ0KPiArCQlyZWdtYXBfdXBkYXRlX2Jp dHMoc21jX25jLT5lYmlfY3NhX3JlZ21hcCwNCj4gKwkJCQkgICBzbWNfbmMtPmViaV9jc2EtPm9m ZnMsDQo+ICsJCQkJICAgQklUKG5hbmQtPmNzW2ldLmlkKSwgQklUKG5hbmQtPmNzW2ldLmlkKSk7 DQo+ICsNCj4gKwlpZiAoc21jX25jLT5lYmlfY3NhLT5uZmQwX29uX2QxNikNCj4gKwkJcmVnbWFw X3VwZGF0ZV9iaXRzKHNtY19uYy0+ZWJpX2NzYV9yZWdtYXAsDQo+ICsJCQkJICAgc21jX25jLT5l YmlfY3NhLT5vZmZzLA0KPiArCQkJCSAgIHNtY19uYy0+ZWJpX2NzYS0+bmZkMF9vbl9kMTYsDQo+ ICsJCQkJICAgc21jX25jLT5lYmlfY3NhLT5uZmQwX29uX2QxNik7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIGF0bWVsX2hzbWNfbmFuZF9pbml0KHN0cnVjdCBhdG1lbF9uYW5kX2NvbnRyb2xs ZXIgKm5jLA0KPiArCQkJCSBzdHJ1Y3QgYXRtZWxfbmFuZCAqbmFuZCkNCj4gK3sNCj4gKwlzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwID0gJm5hbmQtPmJhc2U7DQo+ICsNCj4gKwlhdG1lbF9uYW5kX2lu aXQobmMsIG5hbmQpOw0KPiArDQo+ICsJLyogT3ZlcmxvYWQgc29tZSBtZXRob2RzIGZvciB0aGUg SFNNQyBjb250cm9sbGVyLiAqLw0KPiArCWNoaXAtPmNtZF9jdHJsID0gYXRtZWxfaHNtY19uYW5k X2NtZF9jdHJsOw0KPiArCWNoaXAtPnNlbGVjdF9jaGlwID0gYXRtZWxfaHNtY19uYW5kX3NlbGVj dF9jaGlwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGF0bWVsX25hbmRfY29udHJvbGxlcl9y ZW1vdmVfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZCAqbmFuZCkNCj4gK3sNCj4gKwlsaXN0X2RlbCgm bmFuZC0+bm9kZSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0 cnVjdCBhdG1lbF9uYW5kICphdG1lbF9uYW5kX2NyZWF0ZShzdHJ1Y3QgYXRtZWxfbmFuZF9jb250 cm9sbGVyICpuYywNCj4gKwkJCQkJICAgIG9mbm9kZSBucCwNCj4gKwkJCQkJICAgIGludCByZWdf Y2VsbHMpDQo+ICt7DQo+ICsJc3RydWN0IGF0bWVsX25hbmQgKm5hbmQ7DQo+ICsJb2Zub2RlIG47 DQo+ICsJaW50IG51bWNzID0gMDsNCj4gKwlpbnQgcmV0LCBpOw0KPiArCXUzMiB2YWw7DQo+ICsJ ZmR0MzJfdCBmYWRkcjsNCj4gKwlwaHlzX2FkZHJfdCBiYXNlOw0KPiArDQo+ICsJLyogQ291bnQg bnVtIG9mIG5hbmQgbm9kZXMgKi8NCj4gKwlvZm5vZGVfZm9yX2VhY2hfc3Vibm9kZShuLCBvZm5v ZGVfZ2V0X3BhcmVudChucCkpDQo+ICsJCW51bWNzKys7DQo+ICsJaWYgKG51bWNzIDwgMSkgew0K PiArCQlkZXZfZXJyKG5jLT5kZXYsICJNaXNzaW5nIG9yIGludmFsaWQgcmVnIHByb3BlcnR5XG4i KTsNCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ICsJfQ0KPiArDQo+ICsJbmFuZCA9 IGRldm1fa3phbGxvYyhuYy0+ZGV2LA0KPiArCQkJICAgIHNpemVvZihzdHJ1Y3QgYXRtZWxfbmFu ZCkgKw0KPiArCQkJICAgIChudW1jcyAqIHNpemVvZihzdHJ1Y3QgYXRtZWxfbmFuZF9jcykpLA0K PiArCQkJICAgIEdGUF9LRVJORUwpOw0KPiArCWlmICghbmFuZCkgew0KPiArCQlkZXZfZXJyKG5j LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgTkFORCBvYmplY3RcbiIpOw0KPiArCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsNCj4gKwl9DQo+ICsNCj4gKwluYW5kLT5udW1jcyA9IG51bWNzOw0K PiArDQo+ICsJZ3Bpb19yZXF1ZXN0X2J5X25hbWVfbm9kZXYobnAsICJkZXQtZ3Bpb3MiLCAwLCAm bmFuZC0+Y2RncGlvLA0KPiArCQkJCSAgIEdQSU9EX0lTX0lOKTsNCj4gKw0KPiArCWZvciAoaSA9 IDA7IGkgPCBudW1jczsgaSsrKSB7DQo+ICsJCXJldCA9IG9mbm9kZV9yZWFkX3UzMihucCwgInJl ZyIsICZ2YWwpOw0KPiArCQlpZiAocmV0KSB7DQo+ICsJCQlkZXZfZXJyKG5jLT5kZXYsICJJbnZh bGlkIHJlZyBwcm9wZXJ0eSAoZXJyID0gJWQpXG4iLA0KPiArCQkJCXJldCk7DQo+ICsJCQlyZXR1 cm4gRVJSX1BUUihyZXQpOw0KPiArCQl9DQo+ICsJCW5hbmQtPmNzW2ldLmlkID0gdmFsOw0KPiAr DQo+ICsJCS8qIFJlYWQgYmFzZSBhZGRyZXNzICovDQo+ICsJCXN0cnVjdCByZXNvdXJjZSByZXM7 DQo+ICsNCj4gKwkJaWYgKG9mbm9kZV9yZWFkX3Jlc291cmNlKG5wLCAwLCAmcmVzKSkgew0KPiAr CQkJZGV2X2VycihuYy0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgcmVzb3VyY2VcbiIpOw0KPiArCQkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ICsJCX0NCj4gKw0KPiArCQlmYWRkciA9IGNwdV90 b19mZHQzMih2YWwpOw0KPiArCQliYXNlID0gb2Zub2RlX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCAm ZmFkZHIpOw0KPiArCQluYW5kLT5jc1tpXS5pby52aXJ0ID0gKHZvaWQgKiliYXNlOw0KPiArDQo+ ICsJCWlmICghb2Zub2RlX3JlYWRfdTMyKG5wLCAiYXRtZWwscmIiLCAmdmFsKSkgew0KPiArCQkJ aWYgKHZhbCA+IEFUTUVMX05GQ19NQVhfUkJfSUQpDQo+ICsJCQkJcmV0dXJuIEVSUl9QVFIoLUVJ TlZBTCk7DQo+ICsNCj4gKwkJCW5hbmQtPmNzW2ldLnJiLnR5cGUgPSBBVE1FTF9OQU5EX05BVElW RV9SQjsNCj4gKwkJCW5hbmQtPmNzW2ldLnJiLmlkID0gdmFsOw0KPiArCQl9IGVsc2Ugew0KPiAr CQkJcmV0ID0gZ3Bpb19yZXF1ZXN0X2J5X25hbWVfbm9kZXYobnAsICJyYi1ncGlvcyIsIDAsDQo+ ICsJCQkJCQkJICZuYW5kLT5jc1tpXS5yYi5ncGlvLA0KPiArCQkJCQkJCSBHUElPRF9JU19JTik7 DQo+ICsJCQlpZiAocmV0KSB7DQo+ICsJCQkJZGV2X2VycihuYy0+ZGV2LCAiRmFpbGVkIHRvIGdl dCBSL0IgZ3Bpb1xuIik7DQo+ICsJCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsNCj4gKwkJCX0NCj4g Kw0KPiArCQkJbmFuZC0+Y3NbaV0ucmIudHlwZSA9IEFUTUVMX05BTkRfR1BJT19SQjsNCj4gKwkJ fQ0KPiArDQo+ICsJCXJldCA9IGdwaW9fcmVxdWVzdF9ieV9uYW1lX25vZGV2KG5wLCAiY3MtZ3Bp b3MiLCAwLA0KPiArCQkJCQkJICZuYW5kLT5jc1tpXS5jc2dwaW8sDQo+ICsJCQkJCQkgR1BJT0Rf SVNfT1VUKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCWRldl9lcnIobmMtPmRldiwgIkZhaWxlZCB0 byBnZXQgQ1MgZ3BpbyAoJWQpXG4iLCByZXQpOw0KDQpIaSBCYWxhLA0KDQpBY2NvcmRpbmcgdG8g dGhlIGJpbmRpbmdzLCByYi1ncGlvcyBhbmQgY3MtZ3Bpb3MgYXJlIG9wdGlvbmFsOg0KDQpodHRw czovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51 eC5naXQvdHJlZS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2F0bWVsLW5h bmQudHh0I240MQ0KDQpTbyBwbGVhc2UgcmVtb3ZlIHRoZSByZXR1cm4gb2YgZXJyb3Igd2hlbiBS Qi1ncGlvcyBhcmUgbm90IGZvdW5kLCBhbmQgDQp0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIENTLWdw aW9zIGFyZSBub3QgZm91bmQuDQoNCkkgdGhpbmsgdGhhdCBpZiBzb21lIG9wdGlvbmFsIHRoaW5n cyBhcmUgbm90IGZvdW5kLCB0aGVyZSBzaG91bGQgbm90IGJlIA0KYW55IG1lc3NhZ2UgcHJpbnRl ZC4NCg0KDQpFdWdlbg0KDQoNCj4gKwl9DQo+ICsNCj4gKwluYW5kX3NldF9mbGFzaF9ub2RlKCZu YW5kLT5iYXNlLCBucCk7DQo+ICsNCj4gKwlyZXR1cm4gbmFuZDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBuYW5kX2F0dGFjaChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQ0KPiArew0KPiArCXN0 cnVjdCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKw0KPiArCWlm IChuYW5kLT5jb250cm9sbGVyLT5vcHMgJiYgbmFuZC0+Y29udHJvbGxlci0+b3BzLT5hdHRhY2hf Y2hpcCkNCj4gKwkJcmV0dXJuIG5hbmQtPmNvbnRyb2xsZXItPm9wcy0+YXR0YWNoX2NoaXAoY2hp cCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50IGF0bWVsX25hbmRfc2Nh bihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1heGNoaXBzKQ0KPiArew0KPiArCWludCByZXQ7 DQo+ICsNCj4gKwlyZXQgPSBuYW5kX3NjYW5faWRlbnQobXRkLCBtYXhjaGlwcywgTlVMTCk7DQo+ ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9IG5hbmRfYXR0YWNo KG10ZF90b19uYW5kKG10ZCkpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsN Cj4gKwlyZXQgPSBuYW5kX3NjYW5fdGFpbChtdGQpOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2F0bWVsX25hbmRfY29udHJvbGxlcl9hZGRfbmFuZChzdHJ1 Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyICpuYywNCj4gKwkJCSAgICAgICBzdHJ1Y3QgYXRtZWxf bmFuZCAqbmFuZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gJm5hbmQtPmJh c2U7DQo+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsNCj4gKwlp bnQgcmV0Ow0KPiArDQo+ICsJLyogTm8gY2FyZCBpbnNlcnRlZCwgc2tpcCB0aGlzIE5BTkQuICov DQo+ICsJaWYgKGRtX2dwaW9faXNfdmFsaWQoJm5hbmQtPmNkZ3BpbykgJiYNCj4gKwkgICAgZG1f Z3Bpb19nZXRfdmFsdWUoJm5hbmQtPmNkZ3BpbykpIHsNCj4gKwkJZGV2X2luZm8obmMtPmRldiwg Ik5vIFNtYXJ0TWVkaWEgY2FyZCBpbnNlcnRlZC5cbiIpOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9 DQo+ICsNCj4gKwluYy0+Y2Fwcy0+b3BzLT5uYW5kX2luaXQobmMsIG5hbmQpOw0KPiArDQo+ICsJ cmV0ID0gYXRtZWxfbmFuZF9zY2FuKG10ZCwgbmFuZC0+bnVtY3MpOw0KPiArCWlmIChyZXQpIHsN Cj4gKwkJZGV2X2VycihuYy0+ZGV2LCAiTkFORCBzY2FuIGZhaWxlZDogJWRcbiIsIHJldCk7DQo+ ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gbmFuZF9yZWdpc3RlcigwLCBt dGQpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihuYy0+ZGV2LCAibmFuZCByZWdpc3Rl ciBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiAr CWxpc3RfYWRkX3RhaWwoJm5hbmQtPm5vZGUsICZuYy0+Y2hpcHMpOw0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2F0bWVsX25hbmRfY29udHJvbGxlcl9y ZW1vdmVfbmFuZHMoc3RydWN0IGF0bWVsX25hbmRfY29udHJvbGxlciAqbmMpDQo+ICt7DQo+ICsJ c3RydWN0IGF0bWVsX25hbmQgKm5hbmQsICp0bXA7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShuYW5kLCB0bXAsICZuYy0+Y2hpcHMsIG5vZGUpIHsNCj4g KwkJcmV0ID0gYXRtZWxfbmFuZF9jb250cm9sbGVyX3JlbW92ZV9uYW5kKG5hbmQpOw0KPiArCQlp ZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBhdG1lbF9uYW5kX2NvbnRyb2xsZXJfYWRkX25hbmRzKHN0 cnVjdCBhdG1lbF9uYW5kX2NvbnRyb2xsZXIgKm5jKQ0KPiArew0KPiArCW9mbm9kZSBucDsNCj4g KwlvZm5vZGUgbmFuZF9ucDsNCj4gKwlpbnQgcmV0LCByZWdfY2VsbHM7DQo+ICsJdTMyIHZhbDsN Cj4gKw0KPiArCS8qIFRPRE86DQo+ICsJICogQWRkIHN1cHBvcnQgZm9yIGxlZ2FjeSBuYW5kcw0K PiArCSAqLw0KPiArDQo+ICsJbnAgPSBuYy0+ZGV2LT5ub2RlXzsNCj4gKw0KPiArCXJldCA9IG9m bm9kZV9yZWFkX3UzMihucCwgIiNhZGRyZXNzLWNlbGxzIiwgJnZhbCk7DQo+ICsJaWYgKHJldCkg ew0KPiArCQlkZXZfZXJyKG5jLT5kZXYsICJtaXNzaW5nICNhZGRyZXNzLWNlbGxzIHByb3BlcnR5 XG4iKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlyZWdfY2VsbHMgPSB2YWw7 DQo+ICsNCj4gKwlyZXQgPSBvZm5vZGVfcmVhZF91MzIobnAsICIjc2l6ZS1jZWxscyIsICZ2YWwp Ow0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihuYy0+ZGV2LCAibWlzc2luZyAjc2l6ZS1j ZWxscyBwcm9wZXJ0eVxuIik7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJcmVn X2NlbGxzICs9IHZhbDsNCj4gKw0KPiArCW9mbm9kZV9mb3JfZWFjaF9zdWJub2RlKG5hbmRfbnAs IG5wKSB7DQo+ICsJCXN0cnVjdCBhdG1lbF9uYW5kICpuYW5kOw0KPiArDQo+ICsJCW5hbmQgPSBh dG1lbF9uYW5kX2NyZWF0ZShuYywgbmFuZF9ucCwgcmVnX2NlbGxzKTsNCj4gKwkJaWYgKElTX0VS UihuYW5kKSkgew0KPiArCQkJcmV0ID0gUFRSX0VSUihuYW5kKTsNCj4gKwkJCWdvdG8gZXJyOw0K PiArCQl9DQo+ICsNCj4gKwkJcmV0ID0gYXRtZWxfbmFuZF9jb250cm9sbGVyX2FkZF9uYW5kKG5j LCBuYW5kKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCWdvdG8gZXJyOw0KPiArCX0NCj4gKw0KPiAr CXJldHVybiAwOw0KPiArDQo+ICtlcnI6DQo+ICsJYXRtZWxfbmFuZF9jb250cm9sbGVyX3JlbW92 ZV9uYW5kcyhuYyk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGF0bWVsX3NtY19uYW5kX2ViaV9jc2FfY2ZnIGF0OTFzYW05MjYwX2ViaV9j c2EgPSB7DQo+ICsJLm9mZnMgPSBBVDkxU0FNOTI2MF9NQVRSSVhfRUJJQ1NBLA0KPiArfTsNCj4g Kw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdG1lbF9zbWNfbmFuZF9lYmlfY3NhX2NmZyBhdDkx c2FtOTI2MV9lYmlfY3NhID0gew0KPiArCS5vZmZzID0gQVQ5MVNBTTkyNjFfTUFUUklYX0VCSUNT QSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRtZWxfc21jX25hbmRfZWJp X2NzYV9jZmcgYXQ5MXNhbTkyNjNfZWJpX2NzYSA9IHsNCj4gKwkub2ZmcyA9IEFUOTFTQU05MjYz X01BVFJJWF9FQkkwQ1NBLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdG1l bF9zbWNfbmFuZF9lYmlfY3NhX2NmZyBhdDkxc2FtOXJsX2ViaV9jc2EgPSB7DQo+ICsJLm9mZnMg PSBBVDkxU0FNOVJMX01BVFJJWF9FQklDU0EsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGF0bWVsX3NtY19uYW5kX2ViaV9jc2FfY2ZnIGF0OTFzYW05ZzQ1X2ViaV9jc2EgPSB7 DQo+ICsJLm9mZnMgPSBBVDkxU0FNOUc0NV9NQVRSSVhfRUJJQ1NBLA0KPiArfTsNCj4gKw0KPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBhdG1lbF9zbWNfbmFuZF9lYmlfY3NhX2NmZyBhdDkxc2FtOW4x Ml9lYmlfY3NhID0gew0KPiArCS5vZmZzID0gQVQ5MVNBTTlOMTJfTUFUUklYX0VCSUNTQSwNCj4g K307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRtZWxfc21jX25hbmRfZWJpX2NzYV9j ZmcgYXQ5MXNhbTl4NV9lYmlfY3NhID0gew0KPiArCS5vZmZzID0gQVQ5MVNBTTlYNV9NQVRSSVhf RUJJQ1NBLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdG1lbF9zbWNfbmFu ZF9lYmlfY3NhX2NmZyBzYW05eDYwX2ViaV9jc2EgPSB7DQo+ICsJLm9mZnMgPSBBVDkxX1NGUl9D Q0ZHX0VCSUNTQSwNCj4gKwkubmZkMF9vbl9kMTYgPSBBVDkxX1NGUl9DQ0ZHX05GRDBfT05fRDE2 LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB1ZGV2aWNlX2lkIGF0bWVsX2Vi aV9jc2FfcmVnbWFwX29mX2lkc1tdID0gew0KPiArCXsNCj4gKwkJLmNvbXBhdGlibGUgPSAiYXRt ZWwsYXQ5MXNhbTkyNjAtbWF0cml4IiwNCj4gKwkJLmRhdGEgPSAodWxvbmcpJmF0OTFzYW05MjYw X2ViaV9jc2EsDQo+ICsJfSwNCj4gKwl7DQo+ICsJCS5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFz YW05MjYxLW1hdHJpeCIsDQo+ICsJCS5kYXRhID0gKHVsb25nKSZhdDkxc2FtOTI2MV9lYmlfY3Nh LA0KPiArCX0sDQo+ICsJew0KPiArCQkuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2My1t YXRyaXgiLA0KPiArCQkuZGF0YSA9ICh1bG9uZykmYXQ5MXNhbTkyNjNfZWJpX2NzYSwNCj4gKwl9 LA0KPiArCXsNCj4gKwkJLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTlybC1tYXRyaXgiLA0K PiArCQkuZGF0YSA9ICh1bG9uZykmYXQ5MXNhbTlybF9lYmlfY3NhLA0KPiArCX0sDQo+ICsJew0K PiArCQkuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOWc0NS1tYXRyaXgiLA0KPiArCQkuZGF0 YSA9ICh1bG9uZykmYXQ5MXNhbTlnNDVfZWJpX2NzYSwNCj4gKwl9LA0KPiArCXsNCj4gKwkJLmNv bXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTluMTItbWF0cml4IiwNCj4gKwkJLmRhdGEgPSAodWxv bmcpJmF0OTFzYW05bjEyX2ViaV9jc2EsDQo+ICsJfSwNCj4gKwl7DQo+ICsJCS5jb21wYXRpYmxl ID0gImF0bWVsLGF0OTFzYW05eDUtbWF0cml4IiwNCj4gKwkJLmRhdGEgPSAodWxvbmcpJmF0OTFz YW05eDVfZWJpX2NzYSwNCj4gKwl9LA0KPiArCXsNCj4gKwkJLmNvbXBhdGlibGUgPSAibWljcm9j aGlwLHNhbTl4NjAtc2ZyIiwNCj4gKwkJLmRhdGEgPSAodWxvbmcpJnNhbTl4NjBfZWJpX2NzYSwN Cj4gKwl9LA0KPiArCXsgLyogc2VudGluZWwgKi8gfSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBp bnQgYXRtZWxfbmFuZF9hdHRhY2hfY2hpcChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQ0KPiArew0K PiArCXN0cnVjdCBhdG1lbF9uYW5kICpuYW5kID0gdG9fYXRtZWxfbmFuZChjaGlwKTsNCj4gKwlz dHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyICpuYyA9IHRvX25hbmRfY29udHJvbGxlcihuYW5k LT5jb250cm9sbGVyKTsNCj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNo aXApOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSBuYy0+Y2Fwcy0+b3BzLT5lY2NfaW5p dChjaGlwKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJaWYgKG5j LT5jYXBzLT5sZWdhY3lfb2ZfYmluZGluZ3MgfHwgIW9mbm9kZV92YWxpZChuYy0+ZGV2LT5ub2Rl XykpIHsNCj4gKwkJLyoNCj4gKwkJICogV2Uga2VlcCB0aGUgTVREIG5hbWUgdW5jaGFuZ2VkIHRv IGF2b2lkIGJyZWFraW5nIHBsYXRmb3Jtcw0KPiArCQkgKiB3aGVyZSB0aGUgTVREIGNtZGxpbmUg cGFyc2VyIGlzIHVzZWQgYW5kIHRoZSBib290bG9hZGVyDQo+ICsJCSAqIGhhcyBub3QgYmVlbiB1 cGRhdGVkIHRvIHVzZSB0aGUgbmV3IG5hbWluZyBzY2hlbWUuDQo+ICsJCSAqLw0KPiArCQltdGQt Pm5hbWUgPSAiYXRtZWxfbmFuZCI7DQo+ICsJfSBlbHNlIGlmICghbXRkLT5uYW1lKSB7DQo+ICsJ CS8qDQo+ICsJCSAqIElmIHRoZSBuZXcgYmluZGluZ3MgYXJlIHVzZWQgYW5kIHRoZSBib290bG9h ZGVyIGhhcyBub3QgYmVlbg0KPiArCQkgKiB1cGRhdGVkIHRvIHBhc3MgYSBuZXcgbXRkcGFydHMg cGFyYW1ldGVyIG9uIHRoZSBjbWRsaW5lLCB5b3UNCj4gKwkJICogc2hvdWxkIGRlZmluZSB0aGUg Zm9sbG93aW5nIHByb3BlcnR5IGluIHlvdXIgbmFuZCBub2RlOg0KPiArCQkgKg0KPiArCQkgKgls YWJlbCA9ICJhdG1lbF9uYW5kIjsNCj4gKwkJICoNCj4gKwkJICogVGhpcyB3YXksIG10ZC0+bmFt ZSB3aWxsIGJlIHNldCBieSB0aGUgY29yZSB3aGVuDQo+ICsJCSAqIG5hbmRfc2V0X2ZsYXNoX25v ZGUoKSBpcyBjYWxsZWQuDQo+ICsJCSAqLw0KPiArCQlzcHJpbnRmKG10ZC0+bmFtZSwgIiVzOm5h bmQuJWQiLCBuYy0+ZGV2LT5uYW1lLCBuYW5kLT5jc1swXS5pZCk7DQo+ICsJfQ0KPiArDQo+ICsJ cmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmFuZF9jb250cm9s bGVyX29wcyBhdG1lbF9uYW5kX2NvbnRyb2xsZXJfb3BzID0gew0KPiArCS5hdHRhY2hfY2hpcCA9 IGF0bWVsX25hbmRfYXR0YWNoX2NoaXAsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICth dG1lbF9uYW5kX2NvbnRyb2xsZXJfaW5pdChzdHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyICpu YywNCj4gKwkJCSAgIHN0cnVjdCB1ZGV2aWNlICpkZXYsDQo+ICsJCQkgICBjb25zdCBzdHJ1Y3Qg YXRtZWxfbmFuZF9jb250cm9sbGVyX2NhcHMgKmNhcHMpDQo+ICt7DQo+ICsJc3RydWN0IG9mbm9k ZV9waGFuZGxlX2FyZ3MgYXJnczsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJbmMtPmJhc2Uub3Bz ID0gJmF0bWVsX25hbmRfY29udHJvbGxlcl9vcHM7DQo+ICsJSU5JVF9MSVNUX0hFQUQoJm5jLT5j aGlwcyk7DQo+ICsJbmMtPmRldiA9IGRldjsNCj4gKwluYy0+Y2FwcyA9IGNhcHM7DQo+ICsNCj4g KwluYy0+cG1lY2MgPSBkZXZtX2F0bWVsX3BtZWNjX2dldChkZXYpOw0KPiArCWlmIChJU19FUlIo bmMtPnBtZWNjKSkgew0KPiArCQlyZXQgPSBQVFJfRVJSKG5jLT5wbWVjYyk7DQo+ICsJCWlmIChy ZXQgIT0gLUVQUk9CRV9ERUZFUikNCj4gKwkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGdldCBQ TUVDQyBvYmplY3QgKGVyciA9ICVkKVxuIiwNCj4gKwkJCQlyZXQpOw0KPiArCQlyZXR1cm4gcmV0 Ow0KPiArCX0NCj4gKw0KPiArCS8qIFdlIGRvIG5vdCByZXRyaWV2ZSB0aGUgU01DIHN5c2NvbiB3 aGVuIHBhcnNpbmcgb2xkIERUcy4gKi8NCj4gKwlpZiAobmMtPmNhcHMtPmxlZ2FjeV9vZl9iaW5k aW5ncykNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwluYy0+bWNrID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKG5jLT5tY2spLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIW5jLT5tY2spDQo+ICsJ CXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJY2xrX2dldF9ieV9pbmRleChkZXYtPnBhcmVudCwg MCwgbmMtPm1jayk7DQo+ICsJaWYgKElTX0VSUihuYy0+bWNrKSkgew0KPiArCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byByZXRyaWV2ZSBNQ0sgY2xrXG4iKTsNCj4gKwkJcmV0dXJuIFBUUl9FUlIo bmMtPm1jayk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gb2Zub2RlX3BhcnNlX3BoYW5kbGVfd2l0 aF9hcmdzKGRldi0+cGFyZW50LT5ub2RlXywNCj4gKwkJCQkJICAgICAiYXRtZWwsc21jIiwgTlVM TCwgMCwgMCwgJmFyZ3MpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihkZXYsICJNaXNz aW5nIG9yIGludmFsaWQgYXRtZWwsc21jIHByb3BlcnR5XG4iKTsNCj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ICsJfQ0KPiArDQo+ICsJbmMtPnNtYyA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChhcmdz Lm5vZGUpOw0KPiArCWlmIChJU19FUlIobmMtPnNtYykpIHsNCj4gKwkJcmV0ID0gUFRSX0VSUihu Yy0+c21jKTsNCj4gKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgZ2V0IFNNQyByZWdtYXAgKGVy ciA9ICVkKVxuIiwgcmV0KTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2F0bWVsX3NtY19uYW5kX2NvbnRyb2xs ZXJfaW5pdChzdHJ1Y3QgYXRtZWxfc21jX25hbmRfY29udHJvbGxlciAqbmMpDQo+ICt7DQo+ICsJ c3RydWN0IHVkZXZpY2UgKmRldiA9IG5jLT5iYXNlLmRldjsNCj4gKwlzdHJ1Y3Qgb2Zub2RlX3Bo YW5kbGVfYXJncyBhcmdzOw0KPiArCWNvbnN0IHN0cnVjdCB1ZGV2aWNlX2lkICptYXRjaCA9IE5V TEw7DQo+ICsJY29uc3QgY2hhciAqbmFtZTsNCj4gKwlpbnQgcmV0Ow0KPiArCWludCBsZW47DQo+ ICsJaW50IGk7DQo+ICsNCj4gKwkvKiBXZSBkbyBub3QgcmV0cmlldmUgdGhlIEVCSUNTQSByZWdt YXAgd2hlbiBwYXJzaW5nIG9sZCBEVHMuICovDQo+ICsJaWYgKG5jLT5iYXNlLmNhcHMtPmxlZ2Fj eV9vZl9iaW5kaW5ncykNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwlyZXQgPSBvZm5vZGVfcGFy c2VfcGhhbmRsZV93aXRoX2FyZ3MoZGV2LT5wYXJlbnQtPm5vZGVfLA0KPiArCQkJCQkgICAgIG5j LT5iYXNlLmNhcHMtPmViaV9jc2FfcmVnbWFwX25hbWUsDQo+ICsJCQkJCSAgICAgTlVMTCwgMCwg MCwgJmFyZ3MpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8g cmVhZCBlYmkgY3NhIHJlZ21hcFxuIik7DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4g Kw0KPiArCW5hbWUgPSBvZm5vZGVfZ2V0X3Byb3BlcnR5KGFyZ3Mubm9kZSwgImNvbXBhdGlibGUi LCAmbGVuKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0bWVsX2ViaV9j c2FfcmVnbWFwX29mX2lkcyk7IGkrKykgew0KPiArCQlpZiAoIXN0cmNtcChuYW1lLCBhdG1lbF9l YmlfY3NhX3JlZ21hcF9vZl9pZHNbaV0uY29tcGF0aWJsZSkpIHsNCj4gKwkJCW1hdGNoID0gJmF0 bWVsX2ViaV9jc2FfcmVnbWFwX29mX2lkc1tpXTsNCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsJ fQ0KPiArDQo+ICsJaWYgKCFtYXRjaCkgew0KPiArCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBm aW5kIGViaSBjc2EgY29uZiIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsJbmMt PmViaV9jc2EgPSAoc3RydWN0IGF0bWVsX3NtY19uYW5kX2ViaV9jc2FfY2ZnICopbWF0Y2gtPmRh dGE7DQo+ICsNCj4gKwluYy0+ZWJpX2NzYV9yZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAo YXJncy5ub2RlKTsNCj4gKwlpZiAoSVNfRVJSKG5jLT5lYmlfY3NhX3JlZ21hcCkpIHsNCj4gKwkJ cmV0ID0gUFRSX0VSUihuYy0+ZWJpX2NzYV9yZWdtYXApOw0KPiArCQlkZXZfZXJyKGRldiwgIkNv dWxkIG5vdCBnZXQgRUJJQ1NBIHJlZ21hcCAoZXJyID0gJWQpXG4iLCByZXQpOw0KPiArCQlyZXR1 cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCS8qIFRPRE86DQo+ICsJICogVGhlIGF0OTFzYW05MjYz IGhhcyAyIEVCSXMsIGlmIHRoZSBOQU5EIGNvbnRyb2xsZXIgaXMgdW5kZXIgRUJJMQ0KPiArCSAq IGFkZCA0IHRvIC0+ZWJpX2NzYS0+b2Zmcy4NCj4gKwkgKi8NCj4gKw0KPiArCXJldHVybiAwOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGF0bWVsX2hzbWNfbmFuZF9jb250cm9sbGVyX2luaXQo c3RydWN0IGF0bWVsX2hzbWNfbmFuZF9jb250cm9sbGVyICpuYykNCj4gK3sNCj4gKwlzdHJ1Y3Qg dWRldmljZSAqZGV2ID0gbmMtPmJhc2UuZGV2Ow0KPiArCXN0cnVjdCBvZm5vZGVfcGhhbmRsZV9h cmdzIGFyZ3M7DQo+ICsJc3RydWN0IGNsayBzbWNfY2xrOw0KPiArCWludCByZXQ7DQo+ICsJdTMy IGFkZHI7DQo+ICsNCj4gKwlyZXQgPSBvZm5vZGVfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MoZGV2 LT5wYXJlbnQtPm5vZGVfLA0KPiArCQkJCQkgICAgICJhdG1lbCxzbWMiLCBOVUxMLCAwLCAwLCAm YXJncyk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKGRldiwgIk1pc3Npbmcgb3IgaW52 YWxpZCBhdG1lbCxzbWMgcHJvcGVydHlcbiIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9 DQo+ICsNCj4gKwluYy0+aHNtY19sYXlvdXQgPSBhdG1lbF9oc21jX2dldF9yZWdfbGF5b3V0KGFy Z3Mubm9kZSk7DQo+ICsJaWYgKElTX0VSUihuYy0+aHNtY19sYXlvdXQpKSB7DQo+ICsJCWRldl9l cnIoZGV2LCAiQ291bGQgbm90IGdldCBoc21jIGxheW91dFxuIik7DQo+ICsJCXJldHVybiAtRUlO VkFMOw0KPiArCX0NCj4gKw0KPiArCS8qIEVuYWJsZSBzbWMgY2xvY2sgKi8NCj4gKwlyZXQgPSBj bGtfZ2V0X2J5X2luZGV4X25vZGV2KGFyZ3Mubm9kZSwgMCwgJnNtY19jbGspOw0KPiArCWlmIChy ZXQpIHsNCj4gKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IHNtYyBjbG9jayAoZXJyID0g JWQpIiwgcmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBjbGtf cHJlcGFyZV9lbmFibGUoJnNtY19jbGspOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7 DQo+ICsNCj4gKwlyZXQgPSBvZm5vZGVfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MoZGV2LT5ub2Rl XywNCj4gKwkJCQkJICAgICAiYXRtZWwsbmZjLWlvIiwgTlVMTCwgMCwgMCwgJmFyZ3MpOw0KPiAr CWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihkZXYsICJNaXNzaW5nIG9yIGludmFsaWQgYXRtZWws bmZjLWlvIHByb3BlcnR5XG4iKTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ ICsJbmMtPmlvID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKGFyZ3Mubm9kZSk7DQo+ICsJaWYgKElT X0VSUihuYy0+aW8pKSB7DQo+ICsJCXJldCA9IFBUUl9FUlIobmMtPmlvKTsNCj4gKwkJZGV2X2Vy cihkZXYsICJDb3VsZCBub3QgZ2V0IE5GQyBJTyByZWdtYXBcbiIpOw0KPiArCQlyZXR1cm4gcmV0 Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IG9mbm9kZV9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyhk ZXYtPm5vZGVfLA0KPiArCQkJCQkgICAgICJhdG1lbCxuZmMtc3JhbSIsIE5VTEwsIDAsIDAsICZh cmdzKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBvciBpbnZh bGlkIGF0bWVsLG5mYy1zcmFtIHByb3BlcnR5XG4iKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9 DQo+ICsNCj4gKwlyZXQgPSBvZm5vZGVfcmVhZF91MzIoYXJncy5ub2RlLCAicmVnIiwgJmFkZHIp Ow0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgcmVhZCByZWcg YWRkciBvZiBuZmMgc3JhbSIpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKwluYy0+c3Jh bS52aXJ0ID0gKHZvaWQgKilhZGRyOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQNCj4gK2F0bWVsX2hzbWNfbmFuZF9jb250cm9sbGVyX3JlbW92ZShzdHJ1Y3Qg YXRtZWxfbmFuZF9jb250cm9sbGVyICpuYykNCj4gK3sNCj4gKwlzdHJ1Y3QgYXRtZWxfaHNtY19u YW5kX2NvbnRyb2xsZXIgKmhzbWNfbmM7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IGF0 bWVsX25hbmRfY29udHJvbGxlcl9yZW1vdmVfbmFuZHMobmMpOw0KPiArCWlmIChyZXQpDQo+ICsJ CXJldHVybiByZXQ7DQo+ICsNCj4gKwloc21jX25jID0gY29udGFpbmVyX29mKG5jLCBzdHJ1Y3Qg YXRtZWxfaHNtY19uYW5kX2NvbnRyb2xsZXIsIGJhc2UpOw0KPiArDQo+ICsJaWYgKGhzbWNfbmMt PmNsaykgew0KPiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaHNtY19uYy0+Y2xrKTsNCj4gKwkJ ZGV2bV9jbGtfcHV0KG5jLT5kZXYsIGhzbWNfbmMtPmNsayk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2F0bWVsX2hzbWNfbmFuZF9jb250 cm9sbGVyX3Byb2JlKHN0cnVjdCB1ZGV2aWNlICpkZXYsDQo+ICsJCQkJIGNvbnN0IHN0cnVjdCBh dG1lbF9uYW5kX2NvbnRyb2xsZXJfY2FwcyAqY2FwcykNCj4gK3sNCj4gKwlzdHJ1Y3QgYXRtZWxf aHNtY19uYW5kX2NvbnRyb2xsZXIgKm5jOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwluYyA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqbmMpLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIW5jKQ0K PiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCXJldCA9IGF0bWVsX25hbmRfY29udHJvbGxl cl9pbml0KCZuYy0+YmFzZSwgZGV2LCBjYXBzKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4g cmV0Ow0KPiArDQo+ICsJcmV0ID0gYXRtZWxfaHNtY19uYW5kX2NvbnRyb2xsZXJfaW5pdChuYyk7 DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCS8qIE1ha2Ugc3VyZSBh bGwgaXJxcyBhcmUgbWFza2VkIGJlZm9yZSByZWdpc3RlcmluZyBvdXIgSVJRIGhhbmRsZXIuICov DQo+ICsJcmVnbWFwX3dyaXRlKG5jLT5iYXNlLnNtYywgQVRNRUxfSFNNQ19ORkNfSURSLCAweGZm ZmZmZmZmKTsNCj4gKw0KPiArCS8qIEluaXRpYWwgTkZDIGNvbmZpZ3VyYXRpb24uICovDQo+ICsJ cmVnbWFwX3dyaXRlKG5jLT5iYXNlLnNtYywgQVRNRUxfSFNNQ19ORkNfQ0ZHLA0KPiArCQkgICAg IEFUTUVMX0hTTUNfTkZDX0NGR19EVE9fTUFYKTsNCj4gKw0KPiArCXJldCA9IGF0bWVsX25hbmRf Y29udHJvbGxlcl9hZGRfbmFuZHMoJm5jLT5iYXNlKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlnb3Rv IGVycjsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArDQo+ICtlcnI6DQo+ICsJYXRtZWxfaHNtY19u YW5kX2NvbnRyb2xsZXJfcmVtb3ZlKCZuYy0+YmFzZSk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0K PiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGF0bWVsX25hbmRfY29udHJvbGxlcl9v cHMgYXRtZWxfaHNtY19uY19vcHMgPSB7DQo+ICsJLnByb2JlID0gYXRtZWxfaHNtY19uYW5kX2Nv bnRyb2xsZXJfcHJvYmUsDQo+ICsJLnJlbW92ZSA9IGF0bWVsX2hzbWNfbmFuZF9jb250cm9sbGVy X3JlbW92ZSwNCj4gKwkuZWNjX2luaXQgPSBhdG1lbF9oc21jX25hbmRfZWNjX2luaXQsDQo+ICsJ Lm5hbmRfaW5pdCA9IGF0bWVsX2hzbWNfbmFuZF9pbml0LA0KPiArCS5zZXR1cF9kYXRhX2ludGVy ZmFjZSA9IGF0bWVsX2hzbWNfbmFuZF9zZXR1cF9kYXRhX2ludGVyZmFjZSwNCj4gK307DQo+ICsN Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyX2NhcHMgYXRtZWxf c2FtYTVfbmNfY2FwcyA9IHsNCj4gKwkuaGFzX2RtYSA9IHRydWUsDQo+ICsJLmFsZV9vZmZzID0g QklUKDIxKSwNCj4gKwkuY2xlX29mZnMgPSBCSVQoMjIpLA0KPiArCS5vcHMgPSAmYXRtZWxfaHNt Y19uY19vcHMsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICthdG1lbF9zbWNfbmFuZF9j b250cm9sbGVyX3Byb2JlKHN0cnVjdCB1ZGV2aWNlICpkZXYsDQo+ICsJCQkJY29uc3Qgc3RydWN0 IGF0bWVsX25hbmRfY29udHJvbGxlcl9jYXBzICpjYXBzKQ0KPiArew0KPiArCXN0cnVjdCBhdG1l bF9zbWNfbmFuZF9jb250cm9sbGVyICpuYzsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJbmMgPSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm5jKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFuYykN Cj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlyZXQgPSBhdG1lbF9uYW5kX2NvbnRyb2xs ZXJfaW5pdCgmbmMtPmJhc2UsIGRldiwgY2Fwcyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJu IHJldDsNCj4gKw0KPiArCXJldCA9IGF0bWVsX3NtY19uYW5kX2NvbnRyb2xsZXJfaW5pdChuYyk7 DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldHVybiBhdG1lbF9u YW5kX2NvbnRyb2xsZXJfYWRkX25hbmRzKCZuYy0+YmFzZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQNCj4gK2F0bWVsX3NtY19uYW5kX2NvbnRyb2xsZXJfcmVtb3ZlKHN0cnVjdCBhdG1lbF9u YW5kX2NvbnRyb2xsZXIgKm5jKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSBh dG1lbF9uYW5kX2NvbnRyb2xsZXJfcmVtb3ZlX25hbmRzKG5jKTsNCj4gKwlpZiAocmV0KQ0KPiAr CQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsg KiBUaGUgU01DIHJlZyBsYXlvdXQgb2YgYXQ5MXJtOTIwMCBpcyBjb21wbGV0ZWx5IGRpZmZlcmVu dCB3aGljaCBwcmV2ZW50cyB1cw0KPiArICogZnJvbSByZS11c2luZyBhdG1lbF9zbWNfbmFuZF9z ZXR1cF9kYXRhX2ludGVyZmFjZSgpIGZvciB0aGUNCj4gKyAqIC0+c2V0dXBfZGF0YV9pbnRlcmZh Y2UoKSBob29rLg0KPiArICogQXQgdGhpcyBwb2ludCwgdGhlcmUncyBubyBzdXBwb3J0IGZvciB0 aGUgYXQ5MXJtOTIwMCBTTUMgSVAsIHNvIHdlIGxlYXZlDQo+ICsgKiAtPnNldHVwX2RhdGFfaW50 ZXJmYWNlKCkgdW5hc3NpZ25lZC4NCj4gKyAqLw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdG1l bF9uYW5kX2NvbnRyb2xsZXJfb3BzIGF0OTFybTkyMDBfbmNfb3BzID0gew0KPiArCS5wcm9iZSA9 IGF0bWVsX3NtY19uYW5kX2NvbnRyb2xsZXJfcHJvYmUsDQo+ICsJLnJlbW92ZSA9IGF0bWVsX3Nt Y19uYW5kX2NvbnRyb2xsZXJfcmVtb3ZlLA0KPiArCS5lY2NfaW5pdCA9IGF0bWVsX25hbmRfZWNj X2luaXQsDQo+ICsJLm5hbmRfaW5pdCA9IGF0bWVsX3NtY19uYW5kX2luaXQsDQo+ICt9Ow0KPiAr DQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGF0bWVsX25hbmRfY29udHJvbGxlcl9jYXBzIGF0bWVs X3JtOTIwMF9uY19jYXBzID0gew0KPiArCS5hbGVfb2ZmcyA9IEJJVCgyMSksDQo+ICsJLmNsZV9v ZmZzID0gQklUKDIyKSwNCj4gKwkuZWJpX2NzYV9yZWdtYXBfbmFtZSA9ICJhdG1lbCxtYXRyaXgi LA0KPiArCS5vcHMgPSAmYXQ5MXJtOTIwMF9uY19vcHMsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGF0bWVsX25hbmRfY29udHJvbGxlcl9vcHMgYXRtZWxfc21jX25jX29wcyA9 IHsNCj4gKwkucHJvYmUgPSBhdG1lbF9zbWNfbmFuZF9jb250cm9sbGVyX3Byb2JlLA0KPiArCS5y ZW1vdmUgPSBhdG1lbF9zbWNfbmFuZF9jb250cm9sbGVyX3JlbW92ZSwNCj4gKwkuZWNjX2luaXQg PSBhdG1lbF9uYW5kX2VjY19pbml0LA0KPiArCS5uYW5kX2luaXQgPSBhdG1lbF9zbWNfbmFuZF9p bml0LA0KPiArCS5zZXR1cF9kYXRhX2ludGVyZmFjZSA9IGF0bWVsX3NtY19uYW5kX3NldHVwX2Rh dGFfaW50ZXJmYWNlLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdG1lbF9u YW5kX2NvbnRyb2xsZXJfY2FwcyBhdG1lbF9zYW05MjYwX25jX2NhcHMgPSB7DQo+ICsJLmFsZV9v ZmZzID0gQklUKDIxKSwNCj4gKwkuY2xlX29mZnMgPSBCSVQoMjIpLA0KPiArCS5lYmlfY3NhX3Jl Z21hcF9uYW1lID0gImF0bWVsLG1hdHJpeCIsDQo+ICsJLm9wcyA9ICZhdG1lbF9zbWNfbmNfb3Bz LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdG1lbF9uYW5kX2NvbnRyb2xs ZXJfY2FwcyBhdG1lbF9zYW05MjYxX25jX2NhcHMgPSB7DQo+ICsJLmFsZV9vZmZzID0gQklUKDIy KSwNCj4gKwkuY2xlX29mZnMgPSBCSVQoMjEpLA0KPiArCS5lYmlfY3NhX3JlZ21hcF9uYW1lID0g ImF0bWVsLG1hdHJpeCIsDQo+ICsJLm9wcyA9ICZhdG1lbF9zbWNfbmNfb3BzLA0KPiArfTsNCj4g Kw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdG1lbF9uYW5kX2NvbnRyb2xsZXJfY2FwcyBhdG1l bF9zYW05ZzQ1X25jX2NhcHMgPSB7DQo+ICsJLmhhc19kbWEgPSB0cnVlLA0KPiArCS5hbGVfb2Zm cyA9IEJJVCgyMSksDQo+ICsJLmNsZV9vZmZzID0gQklUKDIyKSwNCj4gKwkuZWJpX2NzYV9yZWdt YXBfbmFtZSA9ICJhdG1lbCxtYXRyaXgiLA0KPiArCS5vcHMgPSAmYXRtZWxfc21jX25jX29wcywN Cj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVy X2NhcHMgbWljcm9jaGlwX3NhbTl4NjBfbmNfY2FwcyA9IHsNCj4gKwkuaGFzX2RtYSA9IHRydWUs DQo+ICsJLmFsZV9vZmZzID0gQklUKDIxKSwNCj4gKwkuY2xlX29mZnMgPSBCSVQoMjIpLA0KPiAr CS5lYmlfY3NhX3JlZ21hcF9uYW1lID0gIm1pY3JvY2hpcCxzZnIiLA0KPiArCS5vcHMgPSAmYXRt ZWxfc21jX25jX29wcywNCj4gK307DQo+ICsNCj4gKy8qIE9ubHkgdXNlZCB0byBwYXJzZSBvbGQg YmluZGluZ3MuICovDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGF0bWVsX25hbmRfY29udHJvbGxl cl9jYXBzIGF0bWVsX3JtOTIwMF9uYW5kX2NhcHMgPSB7DQo+ICsJLmFsZV9vZmZzID0gQklUKDIx KSwNCj4gKwkuY2xlX29mZnMgPSBCSVQoMjIpLA0KPiArCS5vcHMgPSAmYXRtZWxfc21jX25jX29w cywNCj4gKwkubGVnYWN5X29mX2JpbmRpbmdzID0gdHJ1ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdWRldmljZV9pZCBhdG1lbF9uYW5kX2NvbnRyb2xsZXJfb2ZfaWRzW10g PSB7DQo+ICsJew0KPiArCQkuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLW5hbmQtY29u dHJvbGxlciIsDQo+ICsJCS5kYXRhID0gKHVsb25nKSZhdG1lbF9ybTkyMDBfbmNfY2FwcywNCj4g Kwl9LA0KPiArCXsNCj4gKwkJLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjAtbmFuZC1j b250cm9sbGVyIiwNCj4gKwkJLmRhdGEgPSAodWxvbmcpJmF0bWVsX3NhbTkyNjBfbmNfY2FwcywN Cj4gKwl9LA0KPiArCXsNCj4gKwkJLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjEtbmFu ZC1jb250cm9sbGVyIiwNCj4gKwkJLmRhdGEgPSAodWxvbmcpJmF0bWVsX3NhbTkyNjFfbmNfY2Fw cywNCj4gKwl9LA0KPiArCXsNCj4gKwkJLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTlnNDUt bmFuZC1jb250cm9sbGVyIiwNCj4gKwkJLmRhdGEgPSAodWxvbmcpJmF0bWVsX3NhbTlnNDVfbmNf Y2FwcywNCj4gKwl9LA0KPiArCXsNCj4gKwkJLmNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkMy1u YW5kLWNvbnRyb2xsZXIiLA0KPiArCQkuZGF0YSA9ICh1bG9uZykmYXRtZWxfc2FtYTVfbmNfY2Fw cywNCj4gKwl9LA0KPiArCXsNCj4gKwkJLmNvbXBhdGlibGUgPSAibWljcm9jaGlwLHNhbTl4NjAt bmFuZC1jb250cm9sbGVyIiwNCj4gKwkJLmRhdGEgPSAodWxvbmcpJm1pY3JvY2hpcF9zYW05eDYw X25jX2NhcHMsDQo+ICsJfSwNCj4gKwkvKiBTdXBwb3J0IGZvciBvbGQvZGVwcmVjYXRlZCBiaW5k aW5nczogKi8NCj4gKwl7DQo+ICsJCS5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtbmFu ZCIsDQo+ICsJCS5kYXRhID0gKHVsb25nKSZhdG1lbF9ybTkyMDBfbmFuZF9jYXBzLA0KPiArCX0s DQo+ICsJew0KPiArCQkuY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hNWQ0LW5hbmQiLA0KPiArCQku ZGF0YSA9ICh1bG9uZykmYXRtZWxfcm05MjAwX25hbmRfY2FwcywNCj4gKwl9LA0KPiArCXsNCj4g KwkJLmNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkMi1uYW5kIiwNCj4gKwkJLmRhdGEgPSAodWxv bmcpJmF0bWVsX3JtOTIwMF9uYW5kX2NhcHMsDQo+ICsJfSwNCj4gKwl7IC8qIHNlbnRpbmVsICov IH0sDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50IGF0bWVsX25hbmRfY29udHJvbGxlcl9wcm9i ZShzdHJ1Y3QgdWRldmljZSAqZGV2KQ0KPiArew0KPiArCWNvbnN0IHN0cnVjdCBhdG1lbF9uYW5k X2NvbnRyb2xsZXJfY2FwcyAqY2FwczsNCj4gKwlzdHJ1Y3QgdWRldmljZSAqcG1lY2NfZGV2Ow0K PiArDQo+ICsJY2FwcyA9IChzdHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyX2NhcHMgKilkZXZf Z2V0X2RyaXZlcl9kYXRhKGRldik7DQo+ICsJaWYgKCFjYXBzKSB7DQo+ICsJCXByaW50ZigiQ291 bGQgbm90IHJldHJpZXZlIE5GQyBjYXBzXG4iKTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJ fQ0KPiArDQo+ICsJLyogUHJvYmUgcG1lY2MgZHJpdmVyICovDQo+ICsJaWYgKHVjbGFzc19nZXRf ZGV2aWNlKFVDTEFTU19NVEQsIDEsICZwbWVjY19kZXYpKSB7DQo+ICsJCXByaW50ZigiJXM6IGdl dCBkZXZpY2UgZmFpbFxuIiwgX19mdW5jX18pOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9 DQo+ICsNCj4gKwlyZXR1cm4gY2Fwcy0+b3BzLT5wcm9iZShkZXYsIGNhcHMpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IGF0bWVsX25hbmRfY29udHJvbGxlcl9yZW1vdmUoc3RydWN0IHVkZXZp Y2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgYXRtZWxfbmFuZF9jb250cm9sbGVyICpuYzsNCj4g Kw0KPiArCW5jID0gKHN0cnVjdCBhdG1lbF9uYW5kX2NvbnRyb2xsZXIgKilkZXZfZ2V0X2RyaXZl cl9kYXRhKGRldik7DQo+ICsNCj4gKwlyZXR1cm4gbmMtPmNhcHMtPm9wcy0+cmVtb3ZlKG5jKTsN Cj4gK30NCj4gKw0KPiArVV9CT09UX0RSSVZFUihhdG1lbF9uYW5kX2NvbnRyb2xsZXIpID0gew0K PiArCS5uYW1lID0gImF0bWVsLW5hbmQtY29udHJvbGxlciIsDQo+ICsJLmlkID0gVUNMQVNTX01U RCwNCj4gKwkub2ZfbWF0Y2ggPSBhdG1lbF9uYW5kX2NvbnRyb2xsZXJfb2ZfaWRzLA0KPiArCS5w cm9iZSA9IGF0bWVsX25hbmRfY29udHJvbGxlcl9wcm9iZSwNCj4gKwkucmVtb3ZlID0gYXRtZWxf bmFuZF9jb250cm9sbGVyX3JlbW92ZSwNCj4gK307DQo+ICsNCj4gK3ZvaWQgYm9hcmRfbmFuZF9p bml0KHZvaWQpDQo+ICt7DQo+ICsJc3RydWN0IHVkZXZpY2UgKmRldjsNCj4gKwlpbnQgcmV0Ow0K PiArDQo+ICsJcmV0ID0gdWNsYXNzX2dldF9kZXZpY2VfYnlfZHJpdmVyKFVDTEFTU19NVEQsDQo+ ICsJCQkJCSAgRE1fRFJJVkVSX0dFVChhdG1lbF9uYW5kX2NvbnRyb2xsZXIpLA0KPiArCQkJCQkg ICZkZXYpOw0KPiArCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9ERVYpDQo+ICsJCXByaW50ZigiRmFp bGVkIHRvIGluaXRpYWxpemUgTkFORCBjb250cm9sbGVyLiAoZXJyb3IgJWQpXG4iLA0KPiArCQkg ICAgICAgcmV0KTsNCj4gK30NCj4gDQoNCg==