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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 14A31C433EF for ; Tue, 5 Jul 2022 09:11:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231231AbiGEJLH (ORCPT ); Tue, 5 Jul 2022 05:11:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42248 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230513AbiGEJLE (ORCPT ); Tue, 5 Jul 2022 05:11:04 -0400 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2078.outbound.protection.outlook.com [40.107.95.78]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A210A10B5 for ; Tue, 5 Jul 2022 02:11:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gMr+j4fM23CTtk+/07Q58GnbOz0xTbRfOQg0iSQh1jTWBqvZw7zyIbZ3sBDIfquiE9TA0e0ewccix8KuZx1/rOPT4VUpJjB6V2Eio7CHsv/8z6mnSOJTENQ7WZcaH/+0zkHr7iAOSHg/Jg8s+c0kzl4+a7II4hYis50xuJsFN5hRgY3plp3yDUZBktQjhuY30P45QbY53g/ZM7c5dlv6iv/tbj0x2vS8s9ajUqpQqHQmOMmHbG9dvWTfRheFLPWM7+x883Ot3bwcTSLd//i+wmK7CnK+Qq8PZBe2HWslhaTv4gAyp6Krqv0y/Cs0RIhtSkiWOUJ/4AEGyWhl2vlPJw== 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=Gj/NtdgojSIUq7nOCXWTipMd/Zt2eV7hUiMWOs6hexY=; b=NkcoFgqqs3bIm38qzbOUsGip4IKG9BUyh0nlBvGKYwRpYuwSxty5PVW1GnTJXDelR38hCqBExuPoNXo75oi9ywfY8K2H+TqxJebixKlniNmWYHLwO5j2INaZUQXxzY/FN9SZ+ap1YwEL6XuPi91A+kZmYjb5umGVpq/vO4dtb2AhrILJbw6e0KqZZpvkk8gxrksPHNLdWVS9Zo1vsFRcQpww5VPsP7/NeBYuhTZjLW8DjoySEexy3OdvKdpLoHnGuQos2UVmi6DbeRRPo6jSgTcz/gWH+Oz+gg3J1wFZ/Va23mKQk2dvRmS+w1LcTHdJRDaQ9eM/k2G3jU/GqHPEbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Gj/NtdgojSIUq7nOCXWTipMd/Zt2eV7hUiMWOs6hexY=; b=yU+i6VaLsRZvNZcERYBBBr5sX5PvGM5o6/hYsWqyr71xXWkWhau6q+ZzVpxghHECcZzkSNrZyxuValoQLT5Jxqa2T/dygkpXpNDOaptqzIlk4jvN3JpFSau1eFhq+rP+ur5+o+DamOVYXw0sdNQAD0xKfowjjeGYP0OU21IIBxY= Received: from CO6PR12MB5489.namprd12.prod.outlook.com (2603:10b6:303:139::18) by MN2PR12MB3280.namprd12.prod.outlook.com (2603:10b6:208:ad::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.15; Tue, 5 Jul 2022 09:10:52 +0000 Received: from CO6PR12MB5489.namprd12.prod.outlook.com ([fe80::68dc:88ad:eb33:1813]) by CO6PR12MB5489.namprd12.prod.outlook.com ([fe80::68dc:88ad:eb33:1813%9]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 09:10:52 +0000 From: "Lin, Wayne" To: Lyude Paul , "dri-devel@lists.freedesktop.org" , "nouveau@lists.freedesktop.org" , "amd-gfx@lists.freedesktop.org" CC: =?utf-8?B?VmlsbGUgU3lyasOkbMOk?= , "Zuo, Jerry" , Jani Nikula , Imre Deak , Daniel Vetter , Sean Paul , "Wentland, Harry" , "Li, Sun peng (Leo)" , "Siqueira, Rodrigo" , "Deucher, Alexander" , "Koenig, Christian" , "Pan, Xinhui" , David Airlie , Daniel Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Ben Skeggs , Karol Herbst , "Kazlauskas, Nicholas" , "Li, Roman" , "Shih, Jude" , Simon Ser , "Lakha, Bhawanpreet" , Mikita Lipski , Claudio Suarez , "Chen, Ian" , Colin Ian King , "Wu, Hersen" , "Liu, Wenjing" , "Lei, Jun" , "Strauss, Michael" , "Ma, Leo" , Thomas Zimmermann , =?utf-8?B?Sm9zw6kgUm9iZXJ0byBkZSBTb3V6YQ==?= , He Ying , Anshuman Gupta , Andi Shyti , Ashutosh Dixit , Juston Li , Sean Paul , Fernando Ramos , Luo Jiaxing , Javier Martinez Canillas , open list , "open list:INTEL DRM DRIVERS" Subject: RE: [RESEND RFC 18/18] drm/display/dp_mst: Move all payload info into the atomic state Thread-Topic: [RESEND RFC 18/18] drm/display/dp_mst: Move all payload info into the atomic state Thread-Index: AQHYeqbgSVnUwi//gUS5WPmor4cgkq1votDQ Date: Tue, 5 Jul 2022 09:10:51 +0000 Message-ID: References: <20220607192933.1333228-1-lyude@redhat.com> <20220607192933.1333228-19-lyude@redhat.com> In-Reply-To: <20220607192933.1333228-19-lyude@redhat.com> Accept-Language: en-US, zh-TW Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Enabled=true; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SetDate=2022-07-05T09:10:48Z; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Method=Privileged; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Name=Public-AIP 2.0; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ActionId=5cbec1ad-20a7-4d95-b855-d10037ba4231; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ad76e268-f54f-4767-6fc2-08da5e664264 x-ms-traffictypediagnostic: MN2PR12MB3280:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 8zlpuonYuORPr2AmBvFywzeAk8Cy8jLnx0NclNDHqosKtIrnBT733BbBSqY+g3AzoT8ZI2GJ23zA89RXgpCssgsJs3PXp9fSKNZagxEz07Bfq4H8CsrDZh17z6ewsErIb1FCYnElDJ3Buyp8OvsnzDYrzZr5t1tawejh2HPyhwDxun9JXBoDra0QN9sTtu+d9kF6T2nYyceQgbwZCxXnHS+7tOTHNXmJBoC4Jm8s85uCopStKETmqvbtpJpeJj4P9g/1bXFKDV5iYtF2Qq60XGuEMpJh0vcFTx6gVbDkyy8Dp+pnOzR+WG7leM+HIoP5DBFObMlbKxq6IDZjWiR81DKnumJlUqc07srWPo8j3ZhaWxvvKiDyZu/h+2ChrwSvuZfv7aM6uyc0UHmf84klScYhkeZ45UDC61dyGfhErUntUyYzmuGntTvDXZ21fr/Aag2GuSiE634yPmdVtb+wKUS8WSrVnwsNSWpTzslGA6FpKPzBHuGxclNlSq7a3eSvrJLqFNTzJdfG4FZoVhICdjHa9bwpfiz7wvE5XZ5Q7MSBCealmNv9oOjI1aNd1jKb+5aN9CEp19TjZetjc3oRuF+NKB5s2BTc7MagpOXjgKylwoOCXRtCr/C+f+cCBX68M9iShUX0R/73Ssdj1VZktqYItoWqjLF/Vdbu1Tr6ntc1qEtCdeIAXES5rjYf5wdpjwgMVID0O4J5fUAXUw8SaEVSKhfrIqVzKRdkRTo0NwnNT0jZFwkuv5QEuoc8DB+4JxYGKUszu+wTuCtqd3n2/ey/7wlOd3zy5i133QpiFUNcYwD1N04vkSaA/mGL+VpV5GGP9Md9Eo8SCYKdocnrUA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO6PR12MB5489.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(39860400002)(136003)(396003)(346002)(376002)(366004)(38100700002)(66946007)(8676002)(4326008)(76116006)(7696005)(66556008)(66476007)(66446008)(64756008)(6506007)(30864003)(7406005)(5660300002)(7416002)(2906002)(86362001)(55016003)(38070700005)(122000001)(53546011)(8936002)(52536014)(478600001)(41300700001)(71200400001)(66574015)(83380400001)(110136005)(54906003)(316002)(186003)(9686003)(33656002)(26005)(21314003)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bk5XMkt6WHV0YnBsbjAvVGRabnQvQjVCckZFaThFVGlMK0ZnUllhWWpyd2da?= =?utf-8?B?djBoMjFuc0FienF1SStGZnNlbkpIT2tLaDk2WDhJUkE0OThRd3d0Qk1TOEhr?= =?utf-8?B?em4vS3dnWTlRLzZicThlOGZJSlh2Q1o5N3dZRjN3K1hIZlg0ZjRFNnJRNXhE?= =?utf-8?B?eVpXUjFOQlRKTGNQMGc3aWVFNTVUcXpid2RCeVptU3Q0eFFGSWdTZngrOCtz?= =?utf-8?B?dXFRcDNOcUJOQVFZbUdzbWVTMExyd2NUcktJWXgzakh2YXp2d0Q1bXVYa01n?= =?utf-8?B?ZmdkcFRZSVVXaTRCeEdTeEwvTkpQSzVMYld5WG5CeWZaZGlGbjlUVkcwdEI1?= =?utf-8?B?TTBESFYrQmhqeERCWnJUVzQ4dVNRenRINVE0dHl5MGdhWGI0ZXBST0tsMkgz?= =?utf-8?B?YThKdDNyN2dRanNCU3JTNDk4K29jZlpiQ0ZTYjZtUEdsNENubHBQRnJZR2Uv?= =?utf-8?B?R3lOOWYrWjJ4eG51NGdCVTM3UUxWdkhWQXBEczk1VU1NMXZBS3dpenBmSzNZ?= =?utf-8?B?UWJqOHUyV3MvM1BYQkYzemtBZmRWQmdsTG5FdDBDTUhzekxiOGxGOWJjeEJL?= =?utf-8?B?M1dlTTE5MkdFaG5VeFhrZGZKU2pjQ0JORmpLRTJlM05scE1IdGVMSkFGQ0NK?= =?utf-8?B?YzVBcmN0QzBiUVIvMnlubkVTVE9UV20vajZBS1EvOWZLd1VsZnA0SStnY0Nm?= =?utf-8?B?MllvNGsySkNjRTU5YVM3OWdRYWZHcUZjYTdzejlvVnY0NW1HY3g4MGhuVkhj?= =?utf-8?B?dEUxdkRmdkF1Y0pGVHhnZnRReHpNMGt2WkorbDBvRUZwcGZLTzZaamdIVXlJ?= =?utf-8?B?bzBDV2NLRHhnbWk5NWNYeDVLTlhWNVUrY05CWFFpNnM4aC9KYmpVTUN5bzBN?= =?utf-8?B?dnFwUk5BK0Y1R1RkQlpOV1pFenBaTmtURXZCUk5FWE82TVk2WHphbktxSElI?= =?utf-8?B?SDlJTFBoYjJrdk85UTNCNmNBanVZdHBkenZOWlZGU3dDZEtrUXA2VUM1aXgw?= =?utf-8?B?U1QvcEtDTngxaDdxWkEwYXBtaWhKQmNiMW4vcDd2VWNYUkRlc3JEZW5yTWdy?= =?utf-8?B?S2tkMmsvLzU5OHFnb3FzRUZPbGUva0RTRk1vSmFwdzdXMWtOcFlybGJjQzJP?= =?utf-8?B?NEtDSWNlYmI2QkRsTlp4WXVKSitQbHZ2K1VHakdJdFBJOUQrNFl3VXFOcHB5?= =?utf-8?B?R3JhblBNWlhxZjlCOEdlTUpUVE5xN1Rlb0VkZnA4djlGTTFiaVpnQUxsY2h5?= =?utf-8?B?NFl1ZDJDaXZmOTdRcUpKZzRwdnd5SDRUaVJsaFluZ2Z1K29TVWVuclYwckN6?= =?utf-8?B?eTVSbTE1cnBOYUhhbW5yb0EyL2l5Rk05Mkp4SEdvQVFRZW9tOHRvWk1FUisz?= =?utf-8?B?bmNvNFFZOHpsNktqdjdKaDMvVGxYbUN6QWUwUU5mWWxFZFdzaExraHE0T1lQ?= =?utf-8?B?Z2hJMDRaSWJObkU2ZWNOSjBTemNNSmdzVmM0NDFQNVV1dWRsWWtEMU1TQlFi?= =?utf-8?B?VEp5cE5GejJ4enRKQTlDMTkzemNvZ2tweVpiV0V0SkFIT3ZWbnJLblMxRUZi?= =?utf-8?B?K3R3Umo4NlpXLzNiRkZPVW1YOG1paGhJa3M5dThKN1I2bWpXNXpURjFGRlZh?= =?utf-8?B?L2ErR0pEUHFxL2RNQXVIaDBSWWc1encwSmVnVjFlMDVYRVBOUmlCRnZkU0Ju?= =?utf-8?B?Z3l0UHhwSVNuT09GOVFRM0VuOHlmcnBUZ0ZOTjdrQWFMM1VYSWxaNTNjQWFL?= =?utf-8?B?dlBqYmlhY004VWpJTHNQb3NnbkZBck1kU0JqUVZ3NU1nM2c5akRVM3kyVVds?= =?utf-8?B?RzNBcWZZd20zakhkUXJmS3hTZ1B2MEIvMTRHZGJVOTU3ZVhpL3NvUTdOV0xH?= =?utf-8?B?ZklNTGhMblhoU0Qvd1hRY2hId1ZCbi96djhzQWgybDJETDlsUjdsbStab3Nr?= =?utf-8?B?WHRERDkrbUVCV09IMGtXTVNOSjdsMitrQjh2N2ZlMGZQWnNwa0NKQVMrU1Ru?= =?utf-8?B?SDNGeE02bGhGakRldXBBbG0yZExzWmZEYXpQUUZFdWhjK1dVRi9Sbkl3YmNH?= =?utf-8?B?TTdWZ2NXSjk3ZTlpVTlvcVlnTlBZcml1ci9oTDJCcHZ3aHUyVGdWbUdtS1NJ?= =?utf-8?Q?Zz9rO5KlxR1jVY03kYTnufj+N?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO6PR12MB5489.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad76e268-f54f-4767-6fc2-08da5e664264 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Jul 2022 09:10:51.9743 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: a2Gy59UpTwSRezLEg1HrNJt3llLKyUcaC7sQQYlajrFi2RG90T56eOm7IUoewRrP54A53Sm0eJEKiF17BSDFlQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3280 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org W1B1YmxpY10NCg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTHl1 ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4NCj4gU2VudDogV2VkbmVzZGF5LCBKdW5lIDgsIDIw MjIgMzozMCBBTQ0KPiBUbzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgbm91dmVh dUBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGFtZC0NCj4gZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zw0KPiBDYzogTGluLCBXYXluZSA8V2F5bmUuTGluQGFtZC5jb20+OyBWaWxsZSBTeXJqw6Rsw6QN Cj4gPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPjsgWnVvLCBKZXJyeSA8SmVycnkuWnVv QGFtZC5jb20+OyBKYW5pIE5pa3VsYQ0KPiA8amFuaS5uaWt1bGFAaW50ZWwuY29tPjsgSW1yZSBE ZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPjsgRGFuaWVsIFZldHRlcg0KPiA8ZGFuaWVsLnZldHRl ckBmZndsbC5jaD47IFNlYW4gUGF1bCA8c2VhbkBwb29ybHkucnVuPjsgV2VudGxhbmQsIEhhcnJ5 DQo+IDxIYXJyeS5XZW50bGFuZEBhbWQuY29tPjsgTGksIFN1biBwZW5nIChMZW8pIDxTdW5wZW5n LkxpQGFtZC5jb20+Ow0KPiBTaXF1ZWlyYSwgUm9kcmlnbyA8Um9kcmlnby5TaXF1ZWlyYUBhbWQu Y29tPjsgRGV1Y2hlciwgQWxleGFuZGVyDQo+IDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsg S29lbmlnLCBDaHJpc3RpYW4NCj4gPENocmlzdGlhbi5Lb2VuaWdAYW1kLmNvbT47IFBhbiwgWGlu aHVpIDxYaW5odWkuUGFuQGFtZC5jb20+OyBEYXZpZA0KPiBBaXJsaWUgPGFpcmxpZWRAbGludXgu aWU+OyBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+OyBKYW5pIE5pa3VsYQ0KPiA8amFu aS5uaWt1bGFAbGludXguaW50ZWwuY29tPjsgSm9vbmFzIExhaHRpbmVuDQo+IDxqb29uYXMubGFo dGluZW5AbGludXguaW50ZWwuY29tPjsgUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwu Y29tPjsNCj4gVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGxpbnV4LmludGVsLmNvbT47 IEJlbiBTa2VnZ3MNCj4gPGJza2VnZ3NAcmVkaGF0LmNvbT47IEthcm9sIEhlcmJzdCA8a2hlcmJz dEByZWRoYXQuY29tPjsgS2F6bGF1c2thcywNCj4gTmljaG9sYXMgPE5pY2hvbGFzLkthemxhdXNr YXNAYW1kLmNvbT47IExpLCBSb21hbg0KPiA8Um9tYW4uTGlAYW1kLmNvbT47IFNoaWgsIEp1ZGUg PEp1ZGUuU2hpaEBhbWQuY29tPjsgU2ltb24gU2VyDQo+IDxjb250YWN0QGVtZXJzaW9uLmZyPjsg TGFraGEsIEJoYXdhbnByZWV0DQo+IDxCaGF3YW5wcmVldC5MYWtoYUBhbWQuY29tPjsgTWlraXRh IExpcHNraSA8bWlraXRhLmxpcHNraUBhbWQuY29tPjsNCj4gQ2xhdWRpbyBTdWFyZXogPGNzc2tA bmV0LWMuZXM+OyBDaGVuLCBJYW4gPElhbi5DaGVuQGFtZC5jb20+OyBDb2xpbiBJYW4NCj4gS2lu ZyA8Y29saW4ua2luZ0BpbnRlbC5jb20+OyBXdSwgSGVyc2VuIDxoZXJzZW54cy53dUBhbWQuY29t PjsgTGl1LA0KPiBXZW5qaW5nIDxXZW5qaW5nLkxpdUBhbWQuY29tPjsgTGVpLCBKdW4gPEp1bi5M ZWlAYW1kLmNvbT47IFN0cmF1c3MsDQo+IE1pY2hhZWwgPE1pY2hhZWwuU3RyYXVzc0BhbWQuY29t PjsgTWEsIExlbyA8SGFuZ2hvbmcuTWFAYW1kLmNvbT47DQo+IFRob21hcyBaaW1tZXJtYW5uIDx0 emltbWVybWFubkBzdXNlLmRlPjsgSm9zw6kgUm9iZXJ0byBkZSBTb3V6YQ0KPiA8am9zZS5zb3V6 YUBpbnRlbC5jb20+OyBIZSBZaW5nIDxoZXlpbmcyNEBodWF3ZWkuY29tPjsgQW5zaHVtYW4NCj4g R3VwdGEgPGFuc2h1bWFuLmd1cHRhQGludGVsLmNvbT47IEFuZGkgU2h5dGkNCj4gPGFuZGkuc2h5 dGlAbGludXguaW50ZWwuY29tPjsgQXNodXRvc2ggRGl4aXQgPGFzaHV0b3NoLmRpeGl0QGludGVs LmNvbT47DQo+IEp1c3RvbiBMaSA8anVzdG9uLmxpQGludGVsLmNvbT47IFNlYW4gUGF1bCA8c2Vh bnBhdWxAY2hyb21pdW0ub3JnPjsNCj4gRmVybmFuZG8gUmFtb3MgPGdyZWVuZm9vQHU5Mi5ldT47 IEx1byBKaWF4aW5nDQo+IDxsdW9qaWF4aW5nQGh1YXdlaS5jb20+OyBKYXZpZXIgTWFydGluZXog Q2FuaWxsYXMgPGphdmllcm1AcmVkaGF0LmNvbT47DQo+IG9wZW4gbGlzdCA8bGludXgta2VybmVs QHZnZXIua2VybmVsLm9yZz47IG9wZW4gbGlzdDpJTlRFTCBEUk0gRFJJVkVSUw0KPiA8aW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4NCj4gU3ViamVjdDogW1JFU0VORCBSRkMgMTgvMThd IGRybS9kaXNwbGF5L2RwX21zdDogTW92ZSBhbGwgcGF5bG9hZCBpbmZvIGludG8NCj4gdGhlIGF0 b21pYyBzdGF0ZQ0KPiANCj4gTm93IHRoYXQgd2UndmUgZmluYWxseSBnb3R0ZW4gcmlkIG9mIHRo ZSBub24tYXRvbWljIE1TVCB1c2VycyBsZWZ0b3ZlciBpbg0KPiB0aGUga2VybmVsLCB3ZSBjYW4g ZmluYWxseSBnZXQgcmlkIG9mIGFsbCBvZiB0aGUgbGVnYWN5IHBheWxvYWQgY29kZSB3ZQ0KPiBo YXZlIGFuZCBtb3ZlIGFzIG11Y2ggYXMgcG9zc2libGUgaW50byB0aGUgTVNUIGF0b21pYyBzdGF0 ZSBzdHJ1Y3RzLiBUaGUNCj4gbWFpbiBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gbWFrZSB0aGUgTVNU IGNvZGUgYSBsb3QgbGVzcyBjb25mdXNpbmcgdG8gd29yaw0KPiBvbiwgYXMgdGhlcmUncyBhIGxv dCBvZiBkdXBsaWNhdGVkIGxvZ2ljIHRoYXQgZG9lc24ndCByZWFsbHkgbmVlZCB0byBiZQ0KPiBo ZXJlLiBBcyB3ZWxsLCB0aGlzIHNob3VsZCBtYWtlIGludHJvZHVjaW5nIGZlYXR1cmVzIGxpa2Ug ZmFsbGJhY2sgbGluaw0KPiByZXRyYWluaW5nIGFuZCBEU0Mgc3VwcG9ydCBmYXIgZWFzaWVyLg0K PiANCj4gU2luY2UgdGhlIG9sZCBwYXlsb2FkIGNvZGUgd2FzIHByZXR0eSBnbmFybHkgYW5kIHRo ZXJlJ3MgYSBMb3Qgb2YgY2hhbmdlcw0KPiBoZXJlLCBJIGV4cGVjdCB0aGlzIG1pZ2h0IGJlIGEg Yml0IGRpZmZpY3VsdCB0byByZXZpZXcuIFNvIHRvIG1ha2UgdGhpbmdzDQo+IGFzIGVhc3kgYXMg cG9zc2libGUgZm9yIHJldmlld2VycywgSSdsbCBzdW0gdXAgaG93IGJvdGggdGhlIG9sZCBhbmQg bmV3DQo+IGNvZGUgd29ya2VkIGhlcmUgKGl0IHRvb2sgbWUgYSB3aGlsZSB0byBmaWd1cmUgdGhp cyBvdXQgdG9vISkuDQo+IA0KPiBUaGUgb2xkIE1TVCBjb2RlIGJhc2ljYWxseSB3b3JrZWQgYnkg bWFpbnRhaW5pbmcgdHdvIGRpZmZlcmVudCBwYXlsb2FkDQo+IHRhYmxlcyAtIHByb3Bvc2VkX3Zj cGlzLCBhbmQgcGF5bG9hZHMuIHByb3Bvc2VkX3ZjcGlzIHdvdWxkIGhvbGQgdGhlDQo+IG1vZGlm aWVkIHBheWxvYWQgd2Ugd2FudGVkIHRvIHB1c2ggdG8gdGhlIHRvcG9sb2d5LCB3aGlsZSBwYXls b2FkcyBoZWxkDQo+IHRoZQ0KPiBwYXlsb2FkIHRhYmxlIHRoYXQgd2FzIGN1cnJlbnRseSBwcm9n cmFtbWVkIGluIGhhcmR3YXJlLiBNb2RpZmljYXRpb25zIHRvDQo+IHByb3Bvc2VkX3ZjcGlzIHdv dWxkIGJlIGhhbmRsZWQgdGhyb3VnaCBkcm1fZHBfYWxsb2NhdGVfdmNwaSgpLA0KPiBkcm1fZHBf bXN0X2RlYWxsb2NhdGVfdmNwaSgpLCBhbmQgZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKCku IFRoZW4sDQo+IHRoZXkNCj4gd291bGQgYmUgcHVzaGVkIHZpYSBkcm1fZHBfbXN0X3VwZGF0ZV9w YXlsb2FkX3N0ZXAxKCkgYW5kDQo+IGRybV9kcF9tc3RfdXBkYXRlX3BheWxvYWRfc3RlcDIoKS4N Cj4gDQo+IEZ1cnRoZXJtb3JlLCBpdCdzIGltcG9ydGFudCB0byBub3RlIGhvdyBhZGRpbmcgYW5k IHJlbW92aW5nIFZDIHBheWxvYWRzDQo+IGFjdHVhbGx5IHdvcmtlZCB3aXRoIGRybV9kcF9tc3Rf dXBkYXRlX3BheWxvYWRfc3RlcDEoKS4gV2hlbiBhIFZDDQo+IHBheWxvYWQNCj4gaXMgcmVtb3Zl ZCBmcm9tIHRoZSBWQyB0YWJsZSwgYWxsIFZDIHBheWxvYWRzIHdoaWNoIGNvbWUgYWZ0ZXIgdGhl IHJlbW92ZWQNCj4gVkMgcGF5bG9hZCdzIHNsb3RzIG11c3QgaGF2ZSB0aGVpciB0aW1lIHNsb3Rz IHNoaWZ0ZWQgdG93YXJkcyB0aGUgc3RhcnQgb2YNCj4gdGhlIHRhYmxlLiBUaGUgb2xkIGNvZGUg aGFuZGxlcyB0aGlzIGJ5IGxvb3BpbmcgdGhyb3VnaCB0aGUgZW50aXJlIHBheWxvYWQNCj4gdGFi bGUgYW5kIHJlY29tcHV0aW5nIHRoZSBzdGFydCBzbG90IGZvciBldmVyeSBwYXlsb2FkIGluIHRo ZSB0b3BvbG9neSBmcm9tDQo+IHNjcmF0Y2guIFdoaWxlIHZlcnkgbXVjaCBvdmVya2lsbCwgdGhp cyBlbmRzIHVwIGRvaW5nIHRoZSByaWdodCB0aGluZw0KPiBiZWNhdXNlIHdlIGFsd2F5cyBvcmRl ciB0aGUgVkNQSXMgZm9yIHBheWxvYWRzIGZyb20gZmlyc3QgdG8gbGFzdCBzdGFydGluZw0KPiB0 aW1lc2xvdC4NCj4gDQo+IEl0J3MgaW1wb3J0YW50IHRvIGFsc28gbm90ZSB0aGF0IGRybV9kcF9t c3RfdXBkYXRlX3BheWxvYWRfc3RlcDIoKSBpc24ndA0KPiBhY3R1YWxseSBsaW1pdGVkIHRvIHVw ZGF0aW5nIGEgc2luZ2xlIHBheWxvYWQgLSB0aGUgZHJpdmVyIGNhbiB1c2UgaXQgdG8NCj4gcXVl dWUgdXAgbXVsdGlwbGUgcGF5bG9hZCBjaGFuZ2VzIHNvIHRoYXQgYXMgbWFueSBvZiB0aGVtIGNh biBiZSBzZW50IGFzDQo+IHBvc3NpYmxlIGJlZm9yZSB3YWl0aW5nIGZvciB0aGUgQUNULg0KDQpI aSBMeXVkZSwNCg0KSSBoYXZlIGNvbmNlcm4gZm9yIHVwZGF0aW5nIHBheWxvYWQgdGFibGUgbXVs dGlwbGUgdGltZXMgZm9yIG11bHRpcGxlIHBheWxvYWQNCmNoYW5nZXMgYmVmb3JlIHNlbmRpbmcg dGhlIEFDVC4gQWxzbyBjb25zdWx0IHdpdGggb25lIGJyYW5jaCB2ZW5kb3IsIHRoZXkgDQpzYXkg dGhlaXIgZncgd2lsbCBleHBlY3QgcmVjZWl2aW5nIG9uZSBBTExPQ0FURV9QQVlMT0FEIGFmdGVy IHNldHRpbmcgRFBDRA0KMDAyYzBoIGJpdCAwIChWQyBwYXlsb2FkIElEIHRhYmxlIHVwZGF0ZWQp Lg0KDQpUaGFua3MhDQo+IA0KPiBkcm1fZHBfbXN0X3VwZGF0ZV9wYXlsb2FkX3N0ZXAyKCkgaXMg cHJldHR5IHNlbGYgZXhwbGFuYXRvcnkgYW5kDQo+IGJhc2ljYWxseQ0KPiB0aGUgc2FtZSBiZXR3 ZWVuIHRoZSBvbGQgYW5kIG5ldyBjb2RlLCBzYXZlIGZvciB0aGUgZmFjdCB3ZSBkb24ndCBoYXZl IGENCj4gc2Vjb25kIHN0ZXAgZm9yIGRlbGV0aW5nIHBheWxvYWRzIGFueW1vcmUgLWFuZCB0aHVz IHJlbmFtZSBpdCB0bw0KPiBkcm1fZHBfbXN0X2FkZF9wYXlsb2FkX3N0ZXAyKCkuDQo+IA0KPiBU aGUgbmV3IHBheWxvYWQgY29kZSBzdG9yZXMgYWxsIG9mIHRoZSBjdXJyZW50IHBheWxvYWQgaW5m byB3aXRoaW4gdGhlIE1TVA0KPiBhdG9taWMgc3RhdGUgYW5kIGNvbXB1dGVzIGFzIG11Y2ggb2Yg dGhlIHN0YXRlIGFzIHBvc3NpYmxlIGFoZWFkIG9mIHRpbWUuDQo+IFRoaXMgaGFzIHRoZSBvbmUg ZXhjZXB0aW9uIG9mIHRoZSBzdGFydGluZyB0aW1lc2xvdHMgZm9yIHBheWxvYWRzLCB3aGljaA0K PiBjYW4ndCBiZSBkZXRlcm1pbmVkIGF0IGF0b21pYyBjaGVjayB0aW1lIHNpbmNlIHRoZSBzdGFy dGluZyB0aW1lIHNsb3RzIHdpbGwNCj4gdmFyeSBkZXBlbmRpbmcgb24gd2hhdCBvcmRlciBDUlRD cyBhcmUgZW5hYmxlZCBpbiB0aGUgYXRvbWljIHN0YXRlIC0gd2hpY2gNCj4gdmFyaWVzIGZyb20g ZHJpdmVyIHRvIGRyaXZlci4gVGhlc2UgYXJlIHN0aWxsIHN0b3JlZCBpbiB0aGUgYXRvbWljIE1T VA0KPiBzdGF0ZSwgYnV0IGFyZSBvbmx5IGNvcGllZCBmcm9tIHRoZSBvbGQgTVNUIHN0YXRlIGR1 cmluZyBhdG9taWMgY29tbWl0DQo+IHRpbWUuIExpa2V3aXNlLCB0aGlzIGlzIHdoZW4gbmV3IHN0 YXJ0IHNsb3RzIGFyZSBkZXRlcm1pbmVkLg0KPiANCj4gQWRkaW5nL3JlbW92aW5nIHBheWxvYWRz IG5vdyB3b3JrcyBtdWNoIG1vcmUgY2xvc2VseSB0byBob3cgdGhpbmdzIGFyZQ0KPiBkZXNjcmli ZWQgaW4gdGhlIHNwZWMuIFdoZW4gd2UgZGVsZXRlIGEgcGF5bG9hZCwgd2UgbG9vcCB0aHJvdWdo IHRoZQ0KPiBjdXJyZW50IGxpc3Qgb2YgcGF5bG9hZHMgYW5kIHVwZGF0ZSB0aGUgc3RhcnQgc2xv dHMgZm9yIGFueSBwYXlsb2FkcyB3aG9zZQ0KPiB0aW1lIHNsb3RzIGNhbWUgYWZ0ZXIgdGhlIHBh eWxvYWQgd2UganVzdCBkZWxldGVkLiBEZXRlcm1pbmluZyB0aGUgc3RhcnRpbmcNCj4gdGltZSBz bG90cyBmb3IgbmV3IHBheWxvYWRzIGJlaW5nIGFkZGVkIGlzIGRvbmUgYnkgc2ltcGx5IGtlZXBp bmcgdHJhY2sgb2YNCj4gd2hlcmUgdGhlIGVuZCBvZiB0aGUgVkMgdGFibGUgaXMgaW4NCj4gZHJt X2RwX21zdF90b3BvbG9neV9tZ3ItPm5leHRfc3RhcnRfc2xvdC4gQWRkaXRpb25hbGx5LCBpdCdz IHdvcnRoIG5vdGluZw0KPiB0aGF0IHdlIG5vIGxvbmdlciBoYXZlIGEgc2luZ2xlIHVwZGF0ZV9w YXlsb2FkKCkgZnVuY3Rpb24uIEluc3RlYWQsIHdlIG5vdw0KPiBoYXZlIGRybV9kcF9tc3RfYWRk X3BheWxvYWRfc3RlcDF8MigpIGFuZA0KPiBkcm1fZHBfbXN0X3JlbW92ZV9wYXlsb2FkKCkuIEFz DQo+IHN1Y2gsIGl0J3Mgbm93IGxlZnQgaXQgdXAgdG8gdGhlIGRyaXZlciB0byBmaWd1cmUgb3V0 IHdoZW4gdG8gYWRkIG9yIHJlbW92ZQ0KPiBwYXlsb2Fkcy4gVGhlIGRyaXZlciBhbHJlYWR5IGtu b3dzIHdoZW4gaXQncyBkaXNhYmxpbmcvZW5hYmxpbmcgQ1JUQ3MsIHNvDQo+IGl0IGFsc28gYWxy ZWFkeSBrbm93cyB3aGVuIHBheWxvYWRzIHNob3VsZCBiZSBhZGRlZCBvciByZW1vdmVkLiBBbmQs IHRoaXMNCj4gZG9lc24ndCBpbnRlcmZlcmUgd2l0aCB0aGUgYWJpbGl0eSB0byBxdWV1ZSB1cCBt dWx0aXBsZSBwYXlsb2FkIGNoYW5nZXMNCj4gYmVmb3JlIHdhaXRpbmcgZm9yIHRoZSBBQ1QuDQo+ IA0KPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPg0KPiBDYzog V2F5bmUgTGluIDxXYXluZS5MaW5AYW1kLmNvbT4NCj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+DQo+IENjOiBGYW5nemhpIFp1byA8SmVycnkuWnVv QGFtZC5jb20+DQo+IENjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPg0KPiBD YzogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPg0KPiBDYzogRGFuaWVsIFZldHRlciA8 ZGFuaWVsLnZldHRlckBmZndsbC5jaD4NCj4gQ2M6IFNlYW4gUGF1bCA8c2VhbkBwb29ybHkucnVu Pg0KPiAtLS0NCj4gIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0u YyB8ICA1NiArLQ0KPiAgLi4uL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG1faGVscGVy cy5jIHwgMTA3ICstLQ0KPiAgLi4uL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9tc3RfdHlw ZXMuYyAgIHwgIDg1ICstLQ0KPiAgLi4uL2FtZC9kaXNwbGF5L2luY2x1ZGUvbGlua19zZXJ2aWNl X3R5cGVzLmggIHwgICA3ICsNCj4gIGRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3Rf dG9wb2xvZ3kuYyB8IDY5OSArKysrKystLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMgICB8ICA2NCArLQ0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9oZGNwLmMgICAgIHwgIDI0ICstDQo+ICBkcml2ZXJzL2dwdS9k cm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMgICAgICAgfCAxNjMgKystLQ0KPiAgaW5jbHVkZS9k cm0vZGlzcGxheS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgMTc4ICsrLS0tDQo+ICA5IGZp bGVzIGNoYW5nZWQsIDUzNiBpbnNlcnRpb25zKCspLCA4NDcgZGVsZXRpb25zKC0pDQo+IA0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVf ZG0uYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2Rt LmMNCj4gaW5kZXggYWM4NjQ4ZTNjMWM5Li45M2Q1NzJlYTNjNDggMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMNCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYw0KPiBAQCAt NzM3OCw2ICs3Mzc4LDcgQEAgc3RhdGljIGludCBkbV9lbmNvZGVyX2hlbHBlcl9hdG9taWNfY2hl Y2soc3RydWN0DQo+IGRybV9lbmNvZGVyICplbmNvZGVyLA0KPiAgCWNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJmNydGNfc3RhdGUtDQo+ID5hZGp1c3RlZF9t b2RlOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbXN0X21ncjsNCj4gIAlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICptc3RfcG9ydDsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCWVudW0gZGNfY29sb3JfZGVwdGggY29sb3Jf ZGVwdGg7DQo+ICAJaW50IGNsb2NrLCBicHAgPSAwOw0KPiAgCWJvb2wgaXNfeTQyMCA9IGZhbHNl Ow0KPiBAQCAtNzM5MSw2ICs3MzkyLDEzIEBAIHN0YXRpYyBpbnQNCj4gZG1fZW5jb2Rlcl9oZWxw ZXJfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwNCj4gIAlpZiAoIWNy dGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdlZCAmJiAhY3J0Y19zdGF0ZS0NCj4gPm1vZGVfY2hh bmdlZCkNCj4gIAkJcmV0dXJuIDA7DQo+IA0KPiArCW1zdF9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbXN0X21ncik7DQo+ICsJaWYgKElTX0VSUihtc3Rf c3RhdGUpKQ0KPiArCQlyZXR1cm4gUFRSX0VSUihtc3Rfc3RhdGUpOw0KPiArDQo+ICsJaWYgKCFt c3Rfc3RhdGUtPnBibl9kaXYpDQo+ICsJCW1zdF9zdGF0ZS0+cGJuX2RpdiA9DQo+IGRtX21zdF9n ZXRfcGJuX2RpdmlkZXIoYWNvbm5lY3Rvci0+bXN0X3BvcnQtPmRjX2xpbmspOw0KPiArDQo+ICAJ aWYgKCFzdGF0ZS0+ZHVwbGljYXRlZCkgew0KPiAgCQlpbnQgbWF4X2JwYyA9IGNvbm5fc3RhdGUt Pm1heF9yZXF1ZXN0ZWRfYnBjOw0KPiAgCQlpc195NDIwID0gZHJtX21vZGVfaXNfNDIwX2Fsc28o JmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLA0KPiBhZGp1c3RlZF9tb2RlKSAmJg0KPiBAQCAtNzQw MiwxMSArNzQxMCwxMCBAQCBzdGF0aWMgaW50DQo+IGRtX2VuY29kZXJfaGVscGVyX2F0b21pY19j aGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsDQo+ICAJCWNsb2NrID0gYWRqdXN0ZWRf bW9kZS0+Y2xvY2s7DQo+ICAJCWRtX25ld19jb25uZWN0b3Jfc3RhdGUtPnBibiA9DQo+IGRybV9k cF9jYWxjX3Bibl9tb2RlKGNsb2NrLCBicHAsIGZhbHNlKTsNCj4gIAl9DQo+IC0JZG1fbmV3X2Nv bm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyA9DQo+IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Ns b3RzKHN0YXRlLA0KPiAtDQo+IG1zdF9tZ3IsDQo+IC0NCj4gbXN0X3BvcnQsDQo+IC0NCj4gZG1f bmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+cGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2RpdmlkZXIo YWNvbm5lY3Rvci0+ZGNfbGluaykpOw0KPiArDQo+ICsJZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+ dmNwaV9zbG90cyA9DQo+ICsJCWRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCBt c3RfbWdyLCBtc3RfcG9ydCwNCj4gKwkJCQkJICAgICAgZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+ cGJuKTsNCj4gIAlpZiAoZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyA8IDApIHsN Cj4gIAkJRFJNX0RFQlVHX0FUT01JQygiZmFpbGVkIGZpbmRpbmcgdmNwaSBzbG90czogJWRcbiIs DQo+IChpbnQpZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyk7DQo+ICAJCXJldHVy biBkbV9uZXdfY29ubmVjdG9yX3N0YXRlLT52Y3BpX3Nsb3RzOw0KPiBAQCAtNzQ3NiwxOCArNzQ4 MywxMiBAQCBzdGF0aWMgaW50DQo+IGRtX3VwZGF0ZV9tc3RfdmNwaV9zbG90c19mb3JfZHNjKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCWRtX2Nvbm5fc3RhdGUtPnBibiA9 IHBibjsNCj4gIAkJCWRtX2Nvbm5fc3RhdGUtPnZjcGlfc2xvdHMgPSBzbG90X251bTsNCj4gDQo+ IC0JCQlkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLA0KPiAtCQkJCQkJICAgICBh Y29ubmVjdG9yLT5wb3J0LA0KPiAtCQkJCQkJICAgICBkbV9jb25uX3N0YXRlLT5wYm4sDQo+IC0J CQkJCQkgICAgIDAsDQo+ICsJCQlkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLCBh Y29ubmVjdG9yLQ0KPiA+cG9ydCwgZG1fY29ubl9zdGF0ZS0+cGJuLA0KPiAgCQkJCQkJICAgICBm YWxzZSk7DQo+ICAJCQljb250aW51ZTsNCj4gIAkJfQ0KPiANCj4gLQkJdmNwaSA9IGRybV9kcF9t c3RfYXRvbWljX2VuYWJsZV9kc2Moc3RhdGUsDQo+IC0JCQkJCQkgICAgYWNvbm5lY3Rvci0+cG9y dCwNCj4gLQkJCQkJCSAgICBwYm4sIHBibl9kaXYsDQo+IC0JCQkJCQkgICAgdHJ1ZSk7DQo+ICsJ CXZjcGkgPSBkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLCBhY29ubmVjdG9yLQ0K PiA+cG9ydCwgcGJuLCB0cnVlKTsNCj4gIAkJaWYgKHZjcGkgPCAwKQ0KPiAgCQkJcmV0dXJuIHZj cGk7DQo+IA0KPiBAQCAtMTA5NDMsOCArMTA5NDQsNiBAQCBzdGF0aWMgaW50IGFtZGdwdV9kbV9h dG9taWNfY2hlY2soc3RydWN0DQo+IGRybV9kZXZpY2UgKmRldiwNCj4gIAlzdHJ1Y3QgZG1fY3J0 Y19zdGF0ZSAqZG1fb2xkX2NydGNfc3RhdGUsICpkbV9uZXdfY3J0Y19zdGF0ZTsNCj4gICNpZiBk ZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gIAlzdHJ1Y3QgZHNjX21zdF9mYWlybmVz c192YXJzIHZhcnNbTUFYX1BJUEVTXTsNCj4gLQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9z dGF0ZSAqbXN0X3N0YXRlOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy Ow0KPiAgI2VuZGlmDQo+IA0KPiAgCXRyYWNlX2FtZGdwdV9kbV9hdG9taWNfY2hlY2tfYmVnaW4o c3RhdGUpOw0KPiBAQCAtMTExODAsMzMgKzExMTc5LDYgQEAgc3RhdGljIGludCBhbWRncHVfZG1f YXRvbWljX2NoZWNrKHN0cnVjdA0KPiBkcm1fZGV2aWNlICpkZXYsDQo+ICAJCWxvY2tfYW5kX3Zh bGlkYXRpb25fbmVlZGVkID0gdHJ1ZTsNCj4gIAl9DQo+IA0KPiAtI2lmIGRlZmluZWQoQ09ORklH X0RSTV9BTURfRENfRENOKQ0KPiAtCS8qIHNldCB0aGUgc2xvdCBpbmZvIGZvciBlYWNoIG1zdF9z dGF0ZSBiYXNlZCBvbiB0aGUgbGluayBlbmNvZGluZw0KPiBmb3JtYXQgKi8NCj4gLQlmb3JfZWFj aF9uZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsNCj4gLQkJ c3RydWN0IGFtZGdwdV9kbV9jb25uZWN0b3IgKmFjb25uZWN0b3I7DQo+IC0JCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3I7DQo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRl ciBpdGVyOw0KPiAtCQl1OCBsaW5rX2NvZGluZ19jYXA7DQo+IC0NCj4gLQkJaWYgKCFtZ3ItPm1z dF9zdGF0ZSApDQo+IC0JCQljb250aW51ZTsNCj4gLQ0KPiAtCQlkcm1fY29ubmVjdG9yX2xpc3Rf aXRlcl9iZWdpbihkZXYsICZpdGVyKTsNCj4gLQkJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVy KGNvbm5lY3RvciwgJml0ZXIpIHsNCj4gLQkJCWludCBpZCA9IGNvbm5lY3Rvci0+aW5kZXg7DQo+ IC0NCj4gLQkJCWlmIChpZCA9PSBtc3Rfc3RhdGUtPm1nci0+Y29ubl9iYXNlX2lkKSB7DQo+IC0J CQkJYWNvbm5lY3RvciA9DQo+IHRvX2FtZGdwdV9kbV9jb25uZWN0b3IoY29ubmVjdG9yKTsNCj4g LQkJCQlsaW5rX2NvZGluZ19jYXAgPQ0KPiBkY19saW5rX2RwX21zdF9kZWNpZGVfbGlua19lbmNv ZGluZ19mb3JtYXQoYWNvbm5lY3Rvci0+ZGNfbGluayk7DQo+IC0JCQkJZHJtX2RwX21zdF91cGRh dGVfc2xvdHMobXN0X3N0YXRlLA0KPiBsaW5rX2NvZGluZ19jYXApOw0KPiAtDQo+IC0JCQkJYnJl YWs7DQo+IC0JCQl9DQo+IC0JCX0NCj4gLQkJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZp dGVyKTsNCj4gLQ0KPiAtCX0NCj4gLSNlbmRpZg0KPiAgCS8qKg0KPiAgCSAqIFN0cmVhbXMgYW5k IHBsYW5lcyBhcmUgcmVzZXQgd2hlbiB0aGVyZSBhcmUgY2hhbmdlcyB0aGF0IGFmZmVjdA0KPiAg CSAqIGJhbmR3aWR0aC4gQW55dGhpbmcgdGhhdCBhZmZlY3RzIGJhbmR3aWR0aCBuZWVkcyB0byBn byB0aHJvdWdoDQo+IGRpZmYgLS1naXQNCj4gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv YW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gaW5kZXggMWVhYWNhYjAzMzRi Li5mODQzZmQ4Njc4N2YgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9hbWRncHVfZG0vYW1kZ3B1X2RtX2hlbHBlcnMuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gQEAgLTI3LDYgKzI3 LDcgQEANCj4gICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvaTJj Lmg+DQo+IA0KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+DQo+ICAjaW5jbHVkZSA8ZHJt L2RybV9wcm9iZV9oZWxwZXIuaD4NCj4gICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPg0KPiAg I2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPg0KPiBAQCAtMTU0LDQwICsxNTUsMzIgQEAgZW51bSBk Y19lZGlkX3N0YXR1cw0KPiBkbV9oZWxwZXJzX3BhcnNlX2VkaWRfY2FwcygNCj4gIH0NCj4gDQo+ ICBzdGF0aWMgdm9pZA0KPiAtZmlsbF9kY19tc3RfcGF5bG9hZF90YWJsZV9mcm9tX2RybShzdHJ1 Y3QgYW1kZ3B1X2RtX2Nvbm5lY3Rvcg0KPiAqYWNvbm5lY3RvciwNCj4gLQkJCQkgICBzdHJ1Y3Qg ZGNfZHBfbXN0X3N0cmVhbV9hbGxvY2F0aW9uX3RhYmxlDQo+ICpwcm9wb3NlZF90YWJsZSkNCj4g K2ZpbGxfZGNfbXN0X3BheWxvYWRfdGFibGVfZnJvbV9kcm0oc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUNCj4gKm1zdF9zdGF0ZSwNCj4gKwkJCQkgICBzdHJ1Y3QgYW1kZ3B1X2RtX2Nv bm5lY3RvciAqYWNvbm5lY3RvciwNCj4gKwkJCQkgICBzdHJ1Y3QgZGNfZHBfbXN0X3N0cmVhbV9h bGxvY2F0aW9uX3RhYmxlDQo+ICp0YWJsZSkNCj4gIHsNCj4gKwlzdHJ1Y3QgZGNfZHBfbXN0X3N0 cmVhbV9hbGxvY2F0aW9uX3RhYmxlIG5ld190YWJsZSA9IHsgMCB9Ow0KPiArCXN0cnVjdCBkY19k cF9tc3Rfc3RyZWFtX2FsbG9jYXRpb24gKnNhOw0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21p Y19wYXlsb2FkICpwYXlsb2FkOw0KPiAgCWludCBpOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbXN0X21nciA9DQo+IC0JCQkmYWNvbm5lY3Rvci0+bXN0X3BvcnQtPm1zdF9t Z3I7DQo+IA0KPiAtCW11dGV4X2xvY2soJm1zdF9tZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0NCj4g LQlwcm9wb3NlZF90YWJsZS0+c3RyZWFtX2NvdW50ID0gMDsNCj4gLQ0KPiAtCS8qIG51bWJlciBv ZiBhY3RpdmUgc3RyZWFtcyAqLw0KPiAtCWZvciAoaSA9IDA7IGkgPCBtc3RfbWdyLT5tYXhfcGF5 bG9hZHM7IGkrKykgew0KPiAtCQlpZiAobXN0X21nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzID09 IDApDQo+IC0JCQlicmVhazsgLyogZW5kIG9mIHZjcF9pZCB0YWJsZSAqLw0KPiAtDQo+IC0JCUFT U0VSVChtc3RfbWdyLT5wYXlsb2Fkc1tpXS5wYXlsb2FkX3N0YXRlICE9DQo+IC0JCQkJRFBfUEFZ TE9BRF9ERUxFVEVfTE9DQUwpOw0KPiAtDQo+IC0JCWlmIChtc3RfbWdyLT5wYXlsb2Fkc1tpXS5w YXlsb2FkX3N0YXRlID09DQo+IERQX1BBWUxPQURfTE9DQUwgfHwNCj4gLQkJCW1zdF9tZ3ItPnBh eWxvYWRzW2ldLnBheWxvYWRfc3RhdGUgPT0NCj4gLQkJCQkJRFBfUEFZTE9BRF9SRU1PVEUpIHsN Cj4gLQ0KPiAtCQkJc3RydWN0IGRjX2RwX21zdF9zdHJlYW1fYWxsb2NhdGlvbiAqc2EgPQ0KPiAt CQkJCQkmcHJvcG9zZWRfdGFibGUtDQo+ID5zdHJlYW1fYWxsb2NhdGlvbnNbDQo+IC0JCQkJCQlw cm9wb3NlZF90YWJsZS0NCj4gPnN0cmVhbV9jb3VudF07DQo+IC0NCj4gLQkJCXNhLT5zbG90X2Nv dW50ID0gbXN0X21nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzOw0KPiAtCQkJc2EtPnZjcF9pZCA9 IG1zdF9tZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldLT52Y3BpOw0KPiAtCQkJcHJvcG9zZWRfdGFibGUt PnN0cmVhbV9jb3VudCsrOw0KPiAtCQl9DQo+ICsJLyogQ29weSBvdmVyIHBheWxvYWRzICovDQo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXlsb2FkLCAmbXN0X3N0YXRlLT5wYXlsb2FkcywgbmV4 dCkgew0KPiArCQlpZiAocGF5bG9hZC0+ZGVsZXRlKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4g KwkJc2EgPQ0KPiAmbmV3X3RhYmxlLnN0cmVhbV9hbGxvY2F0aW9uc1tuZXdfdGFibGUuc3RyZWFt X2NvdW50XTsNCj4gKwkJc2EtPnNsb3RfY291bnQgPSBwYXlsb2FkLT50aW1lX3Nsb3RzOw0KPiAr CQlzYS0+dmNwX2lkID0gcGF5bG9hZC0+dmNwaTsNCj4gKwkJc2EtPnBvcnQgPSBwYXlsb2FkLT5w b3J0Ow0KPiArCQlkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYyhzYS0+cG9ydCk7DQo+ICsJCW5l d190YWJsZS5zdHJlYW1fY291bnQrKzsNCj4gIAl9DQo+IA0KPiAtCW11dGV4X3VubG9jaygmbXN0 X21nci0+cGF5bG9hZF9sb2NrKTsNCj4gKwkvKiBSZWxlYXNlIHRoZSBvbGQgdGFibGUsIGFuZCBj b3B5IG92ZXIgdGhlIG5ldyBvbmUgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPnN0cmVh bV9jb3VudDsgaSsrKQ0KPiArCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyh0YWJsZS0NCj4g PnN0cmVhbV9hbGxvY2F0aW9uc1tpXS5wb3J0KTsNCj4gKwkqdGFibGUgPSBuZXdfdGFibGU7DQo+ ICB9DQo+IA0KPiAgdm9pZCBkbV9oZWxwZXJzX2RwX3VwZGF0ZV9icmFuY2hfaW5mbygNCj4gQEAg LTIwNSwxMSArMTk4LDkgQEAgYm9vbA0KPiBkbV9oZWxwZXJzX2RwX21zdF93cml0ZV9wYXlsb2Fk X2FsbG9jYXRpb25fdGFibGUoDQo+ICAJCWJvb2wgZW5hYmxlKQ0KPiAgew0KPiAgCXN0cnVjdCBh bWRncHVfZG1fY29ubmVjdG9yICphY29ubmVjdG9yOw0KPiAtCXN0cnVjdCBkbV9jb25uZWN0b3Jf c3RhdGUgKmRtX2Nvbm5fc3RhdGU7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgKm1zdF9zdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAqcGF5 bG9hZDsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1zdF9tZ3I7DQo+IC0J c3RydWN0IGRybV9kcF9tc3RfcG9ydCAqbXN0X3BvcnQ7DQo+IC0JYm9vbCByZXQ7DQo+IC0JdTgg bGlua19jb2RpbmdfY2FwID0gRFBfOGJfMTBiX0VOQ09ESU5HOw0KPiANCj4gIAlhY29ubmVjdG9y ID0gKHN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICopc3RyZWFtLQ0KPiA+ZG1fc3RyZWFtX2Nv bnRleHQ7DQo+ICAJLyogQWNjZXNzaW5nIHRoZSBjb25uZWN0b3Igc3RhdGUgaXMgcmVxdWlyZWQg Zm9yIHZjcGlfc2xvdHMgYWxsb2NhdGlvbg0KPiBAQCAtMjIwLDQwICsyMTEsMjEgQEAgYm9vbA0K PiBkbV9oZWxwZXJzX2RwX21zdF93cml0ZV9wYXlsb2FkX2FsbG9jYXRpb25fdGFibGUoDQo+ICAJ aWYgKCFhY29ubmVjdG9yIHx8ICFhY29ubmVjdG9yLT5tc3RfcG9ydCkNCj4gIAkJcmV0dXJuIGZh bHNlOw0KPiANCj4gLQlkbV9jb25uX3N0YXRlID0gdG9fZG1fY29ubmVjdG9yX3N0YXRlKGFjb25u ZWN0b3ItPmJhc2Uuc3RhdGUpOw0KPiAtDQo+ICAJbXN0X21nciA9ICZhY29ubmVjdG9yLT5tc3Rf cG9ydC0+bXN0X21ncjsNCj4gLQ0KPiAtCWlmICghbXN0X21nci0+bXN0X3N0YXRlKQ0KPiAtCQly ZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQltc3RfcG9ydCA9IGFjb25uZWN0b3ItPnBvcnQ7DQo+IC0N Cj4gLSNpZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gLQlsaW5rX2NvZGluZ19j YXAgPQ0KPiBkY19saW5rX2RwX21zdF9kZWNpZGVfbGlua19lbmNvZGluZ19mb3JtYXQoYWNvbm5l Y3Rvci0+ZGNfbGluayk7DQo+IC0jZW5kaWYNCj4gLQ0KPiAtCWlmIChlbmFibGUpIHsNCj4gLQ0K PiAtCQlyZXQgPSBkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkobXN0X21nciwgbXN0X3BvcnQsDQo+ IC0JCQkJCSAgICAgICBkbV9jb25uX3N0YXRlLT5wYm4sDQo+IC0JCQkJCSAgICAgICBkbV9jb25u X3N0YXRlLT52Y3BpX3Nsb3RzKTsNCj4gLQkJaWYgKCFyZXQpDQo+IC0JCQlyZXR1cm4gZmFsc2U7 DQo+IC0NCj4gLQl9IGVsc2Ugew0KPiAtCQlkcm1fZHBfbXN0X3Jlc2V0X3ZjcGlfc2xvdHMobXN0 X21nciwgbXN0X3BvcnQpOw0KPiAtCX0NCj4gKwltc3Rfc3RhdGUgPSB0b19kcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlKG1zdF9tZ3ItPmJhc2Uuc3RhdGUpOw0KPiANCj4gIAkvKiBJdCdzIE9LIGZv ciB0aGlzIHRvIGZhaWwgKi8NCj4gLQlkcm1fZHBfdXBkYXRlX3BheWxvYWRfcGFydDEobXN0X21n ciwgKGxpbmtfY29kaW5nX2NhcCA9PQ0KPiBEUF9DQVBfQU5TSV8xMjhCMTMyQikgPyAwOjEpOw0K PiArCXBheWxvYWQgPSBkcm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUs DQo+IGFjb25uZWN0b3ItPnBvcnQpOw0KPiArCWlmIChlbmFibGUpDQo+ICsJCWRybV9kcF9hZGRf cGF5bG9hZF9wYXJ0MShtc3RfbWdyLCBtc3Rfc3RhdGUsIHBheWxvYWQpOw0KPiArCWVsc2UNCj4g KwkJZHJtX2RwX3JlbW92ZV9wYXlsb2FkKG1zdF9tZ3IsIG1zdF9zdGF0ZSwgcGF5bG9hZCk7DQo+ IA0KPiAgCS8qIG1zdF9tZ3ItPi0+cGF5bG9hZHMgYXJlIFZDIHBheWxvYWQgbm90aWZ5IE1TVCBi cmFuY2ggdXNpbmcNCj4gRFBDRCBvcg0KPiAgCSAqIEFVWCBtZXNzYWdlLiBUaGUgc2VxdWVuY2Ug aXMgc2xvdCAxLTYzIGFsbG9jYXRlZCBzZXF1ZW5jZSBmb3INCj4gZWFjaA0KPiAgCSAqIHN0cmVh bS4gQU1EIEFTSUMgc3RyZWFtIHNsb3QgYWxsb2NhdGlvbiBzaG91bGQgZm9sbG93IHRoZSBzYW1l DQo+ICAJICogc2VxdWVuY2UuIGNvcHkgRFJNIE1TVCBhbGxvY2F0aW9uIHRvIGRjICovDQo+IC0N Cj4gLQlmaWxsX2RjX21zdF9wYXlsb2FkX3RhYmxlX2Zyb21fZHJtKGFjb25uZWN0b3IsIHByb3Bv c2VkX3RhYmxlKTsNCj4gKwlmaWxsX2RjX21zdF9wYXlsb2FkX3RhYmxlX2Zyb21fZHJtKG1zdF9z dGF0ZSwgYWNvbm5lY3RvciwNCj4gcHJvcG9zZWRfdGFibGUpOw0KPiANCj4gIAlyZXR1cm4gdHJ1 ZTsNCj4gIH0NCj4gQEAgLTMxMCwyNiArMjgyLDIzIEBAIGJvb2wNCj4gZG1faGVscGVyc19kcF9t c3Rfc2VuZF9wYXlsb2FkX2FsbG9jYXRpb24oDQo+ICAJCWJvb2wgZW5hYmxlKQ0KPiAgew0KPiAg CXN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICphY29ubmVjdG9yOw0KPiArCXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptc3RfbWdyOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKm1zdF9w b3J0Ow0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICpwYXlsb2FkOw0KPiAN Cj4gIAlhY29ubmVjdG9yID0gKHN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICopc3RyZWFtLQ0K PiA+ZG1fc3RyZWFtX2NvbnRleHQ7DQo+IA0KPiAgCWlmICghYWNvbm5lY3RvciB8fCAhYWNvbm5l Y3Rvci0+bXN0X3BvcnQpDQo+ICAJCXJldHVybiBmYWxzZTsNCj4gDQo+IC0JbXN0X3BvcnQgPSBh Y29ubmVjdG9yLT5wb3J0Ow0KPiAtDQo+ICAJbXN0X21nciA9ICZhY29ubmVjdG9yLT5tc3RfcG9y dC0+bXN0X21ncjsNCj4gLQ0KPiAtCWlmICghbXN0X21nci0+bXN0X3N0YXRlKQ0KPiAtCQlyZXR1 cm4gZmFsc2U7DQo+ICsJbXN0X3N0YXRlID0gdG9fZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSht c3RfbWdyLT5iYXNlLnN0YXRlKTsNCj4gDQo+ICAJLyogSXQncyBPSyBmb3IgdGhpcyB0byBmYWls ICovDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQyKG1zdF9tZ3IpOw0KPiAtDQo+IC0J aWYgKCFlbmFibGUpDQo+IC0JCWRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKG1zdF9tZ3IsIG1z dF9wb3J0KTsNCj4gKwlpZiAoZW5hYmxlKSB7DQo+ICsJCXBheWxvYWQgPSBkcm1fYXRvbWljX2dl dF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUsDQo+IGFjb25uZWN0b3ItPnBvcnQpOw0KPiAr CQlkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIobXN0X21nciwgbXN0X3N0YXRlLQ0KPiA+YmFzZS5z dGF0ZSwgcGF5bG9hZCk7DQo+ICsJfQ0KPiANCj4gIAlyZXR1cm4gdHJ1ZTsNCj4gIH0NCj4gZGlm ZiAtLWdpdA0KPiBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1 X2RtX21zdF90eXBlcy5jDQo+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9k bS9hbWRncHVfZG1fbXN0X3R5cGVzLmMNCj4gaW5kZXggYjQ0N2M0NTNiNThkLi4xOGRlNGE5OGRm NDAgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0v YW1kZ3B1X2RtX21zdF90eXBlcy5jDQo+ICsrKw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtX21zdF90eXBlcy5jDQo+IEBAIC01MDEsMTUgKzUwMSw4 IEBAIHZvaWQgYW1kZ3B1X2RtX2luaXRpYWxpemVfZHBfY29ubmVjdG9yKHN0cnVjdA0KPiBhbWRn cHVfZGlzcGxheV9tYW5hZ2VyICpkbSwNCj4gDQo+ICAJZGNfbGlua19kcF9nZXRfbWF4X2xpbmtf ZW5jX2NhcChhY29ubmVjdG9yLT5kY19saW5rLA0KPiAmbWF4X2xpbmtfZW5jX2NhcCk7DQo+ICAJ YWNvbm5lY3Rvci0+bXN0X21nci5jYnMgPSAmZG1fbXN0X2NiczsNCj4gLQlkcm1fZHBfbXN0X3Rv cG9sb2d5X21ncl9pbml0KA0KPiAtCQkmYWNvbm5lY3Rvci0+bXN0X21nciwNCj4gLQkJYWRldl90 b19kcm0oZG0tPmFkZXYpLA0KPiAtCQkmYWNvbm5lY3Rvci0+ZG1fZHBfYXV4LmF1eCwNCj4gLQkJ MTYsDQo+IC0JCTQsDQo+IC0JCW1heF9saW5rX2VuY19jYXAubGFuZV9jb3VudCwNCj4gLQ0KPiAJ ZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKG1heF9saW5rX2VuY19jYXAubGlua19yYXRlKSwN Cj4gLQkJYWNvbm5lY3Rvci0+Y29ubmVjdG9yX2lkKTsNCj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5 X21ncl9pbml0KCZhY29ubmVjdG9yLT5tc3RfbWdyLA0KPiBhZGV2X3RvX2RybShkbS0+YWRldiks DQo+ICsJCQkJICAgICAmYWNvbm5lY3Rvci0+ZG1fZHBfYXV4LmF1eCwgMTYsIDQsDQo+IGFjb25u ZWN0b3ItPmNvbm5lY3Rvcl9pZCk7DQo+IA0KPiAgCWRybV9jb25uZWN0b3JfYXR0YWNoX2RwX3N1 YmNvbm5lY3Rvcl9wcm9wZXJ0eSgmYWNvbm5lY3Rvci0NCj4gPmJhc2UpOw0KPiAgfQ0KPiBAQCAt NjE0LDYgKzYwNyw3IEBAIHN0YXRpYyBpbnQgYnBwX3gxNl9mcm9tX3BibihzdHJ1Y3QNCj4gZHNj X21zdF9mYWlybmVzc19wYXJhbXMgcGFyYW0sIGludCBwYm4pDQo+ICB9DQo+IA0KPiAgc3RhdGlj IHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ ICsJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ ICAJCQkgICAgIHN0cnVjdCBkY19saW5rICpkY19saW5rLA0KPiAgCQkJICAgICBzdHJ1Y3QgZHNj X21zdF9mYWlybmVzc19wYXJhbXMgKnBhcmFtcywNCj4gIAkJCSAgICAgc3RydWN0IGRzY19tc3Rf ZmFpcm5lc3NfdmFycyAqdmFycywNCj4gQEAgLTYyNiwxMiArNjIwLDkgQEAgc3RhdGljIHZvaWQg aW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJ aW50IG1pbl9pbml0aWFsX3NsYWNrOw0KPiAgCWludCBuZXh0X2luZGV4Ow0KPiAgCWludCByZW1h aW5pbmdfdG9faW5jcmVhc2UgPSAwOw0KPiAtCWludCBwYm5fcGVyX3RpbWVzbG90Ow0KPiAgCWlu dCBsaW5rX3RpbWVzbG90c191c2VkOw0KPiAgCWludCBmYWlyX3Bibl9hbGxvYzsNCj4gDQo+IC0J cGJuX3Blcl90aW1lc2xvdCA9IGRtX21zdF9nZXRfcGJuX2RpdmlkZXIoZGNfbGluayk7DQo+IC0N Cj4gIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgew0KPiAgCQlpZiAodmFyc1tpICsga10u ZHNjX2VuYWJsZWQpIHsNCj4gIAkJCWluaXRpYWxfc2xhY2tbaV0gPQ0KPiBAQCAtNjYyLDE3ICs2 NTMsMTcgQEAgc3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsDQo+ICAJCWxpbmtfdGltZXNsb3RzX3VzZWQgPSAwOw0KPiANCj4gIAkJ Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspDQo+IC0JCQlsaW5rX3RpbWVzbG90c191c2VkICs9 IERJVl9ST1VORF9VUCh2YXJzW2kgKw0KPiBrXS5wYm4sIHBibl9wZXJfdGltZXNsb3QpOw0KPiAr CQkJbGlua190aW1lc2xvdHNfdXNlZCArPSBESVZfUk9VTkRfVVAodmFyc1tpICsNCj4ga10ucGJu LCBtc3Rfc3RhdGUtPnBibl9kaXYpOw0KPiANCj4gLQkJZmFpcl9wYm5fYWxsb2MgPSAoNjMgLSBs aW5rX3RpbWVzbG90c191c2VkKSAvDQo+IHJlbWFpbmluZ190b19pbmNyZWFzZSAqIHBibl9wZXJf dGltZXNsb3Q7DQo+ICsJCWZhaXJfcGJuX2FsbG9jID0NCj4gKwkJCSg2MyAtIGxpbmtfdGltZXNs b3RzX3VzZWQpIC8gcmVtYWluaW5nX3RvX2luY3JlYXNlICoNCj4gbXN0X3N0YXRlLT5wYm5fZGl2 Ow0KPiANCj4gIAkJaWYgKGluaXRpYWxfc2xhY2tbbmV4dF9pbmRleF0gPiBmYWlyX3Bibl9hbGxv Yykgew0KPiAgCQkJdmFyc1tuZXh0X2luZGV4XS5wYm4gKz0gZmFpcl9wYm5fYWxsb2M7DQo+ICAJ CQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+IA0KPiBwYXJhbXNb bmV4dF9pbmRleF0ucG9ydC0+bWdyLA0KPiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQsDQo+ IC0NCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0JCQkJCQkJICBwYm5fcGVyX3RpbWVzbG90 KSA8DQo+IDApDQo+ICsNCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4pIDwgMCkNCj4gIAkJCQlyZXR1 cm47DQo+ICAJCQlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKSkgew0KPiAgCQkJ CXZhcnNbbmV4dF9pbmRleF0uYnBwX3gxNiA9DQo+IGJwcF94MTZfZnJvbV9wYm4ocGFyYW1zW25l eHRfaW5kZXhdLCB2YXJzW25leHRfaW5kZXhdLnBibik7DQo+IEBAIC02ODEsOCArNjcyLDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0K PiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5wb3J0LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IHBibl9wZXJf dGltZXNsb3QpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJ CQlyZXR1cm47DQo+ICAJCQl9DQo+ICAJCX0gZWxzZSB7DQo+IEBAIC02OTAsOCArNjgwLDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+ IA0KPiBwYXJhbXNbbmV4dF9pbmRleF0ucG9ydC0+bWdyLA0KPiANCj4gcGFyYW1zW25leHRfaW5k ZXhdLnBvcnQsDQo+IC0NCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0JCQkJCQkJICBwYm5f cGVyX3RpbWVzbG90KSA8DQo+IDApDQo+ICsNCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4pIDwgMCkN Cj4gIAkJCQlyZXR1cm47DQo+ICAJCQlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRl KSkgew0KPiAgCQkJCXZhcnNbbmV4dF9pbmRleF0uYnBwX3gxNiA9DQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5id19yYW5nZS5tYXhfdGFyZ2V0X2JwcF94MTY7DQo+IEBAIC03MDAsOCArNjg5LDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0K PiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5wb3J0LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IHBibl9wZXJf dGltZXNsb3QpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJ CQlyZXR1cm47DQo+ICAJCQl9DQo+ICAJCX0NCj4gQEAgLTc1Nyw4ICs3NDUsNyBAQCBzdGF0aWMg dm9pZCB0cnlfZGlzYWJsZV9kc2Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUNCj4gKnN0YXRlLA0K PiAgCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+ICAJCQkJCQkg IHBhcmFtc1tuZXh0X2luZGV4XS5wb3J0LQ0KPiA+bWdyLA0KPiAgCQkJCQkJICBwYXJhbXNbbmV4 dF9pbmRleF0ucG9ydCwNCj4gLQkJCQkJCSAgdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0NCj4g ZG1fbXN0X2dldF9wYm5fZGl2aWRlcihkY19saW5rKSkgPCAwKQ0KPiArCQkJCQkJICB2YXJzW25l eHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJcmV0dXJuOw0KPiANCj4gIAkJaWYgKCFkcm1fZHBf bXN0X2F0b21pY19jaGVjayhzdGF0ZSkpIHsNCj4gQEAgLTc2OSw4ICs3NTYsNyBAQCBzdGF0aWMg dm9pZCB0cnlfZGlzYWJsZV9kc2Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUNCj4gKnN0YXRlLA0K PiAgCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0KPiANCj4gcGFy YW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2luZGV4XS5wb3J0 LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2Rp dmlkZXIoZGNfbGluaykpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0K PiAgCQkJCXJldHVybjsNCj4gIAkJfQ0KPiANCj4gQEAgLTc4MywxNyArNzY5LDI3IEBAIHN0YXRp YyBib29sDQo+IGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkJICAgICBzdHJ1Y3QgZGNfc3RhdGUgKmRjX3N0YXRl LA0KPiAgCQkJCQkgICAgIHN0cnVjdCBkY19saW5rICpkY19saW5rLA0KPiAgCQkJCQkgICAgIHN0 cnVjdCBkc2NfbXN0X2ZhaXJuZXNzX3ZhcnMgKnZhcnMsDQo+ICsJCQkJCSAgICAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3IsDQo+ICAJCQkJCSAgICAgaW50ICpsaW5rX3Zh cnNfc3RhcnRfaW5kZXgpDQo+ICB7DQo+IC0JaW50IGksIGs7DQo+ICAJc3RydWN0IGRjX3N0cmVh bV9zdGF0ZSAqc3RyZWFtOw0KPiAgCXN0cnVjdCBkc2NfbXN0X2ZhaXJuZXNzX3BhcmFtcyBwYXJh bXNbTUFYX1BJUEVTXTsNCj4gIAlzdHJ1Y3QgYW1kZ3B1X2RtX2Nvbm5lY3RvciAqYWNvbm5lY3Rv cjsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4g ZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOw0KPiAgCWludCBj b3VudCA9IDA7DQo+ICsJaW50IGksIGs7DQo+ICAJYm9vbCBkZWJ1Z2ZzX292ZXJ3cml0ZSA9IGZh bHNlOw0KPiANCj4gIAltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7DQo+IA0KPiAr CWlmIChJU19FUlIobXN0X3N0YXRlKSkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJbXN0 X3N0YXRlLT5wYm5fZGl2ID0gZG1fbXN0X2dldF9wYm5fZGl2aWRlcihkY19saW5rKTsNCj4gKyNp ZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gKwlkcm1fZHBfbXN0X3VwZGF0ZV9z bG90cyhtc3Rfc3RhdGUsDQo+IGRjX2xpbmtfZHBfbXN0X2RlY2lkZV9saW5rX2VuY29kaW5nX2Zv cm1hdChkY19saW5rKSk7DQo+ICsjZW5kaWYNCj4gKw0KPiAgCS8qIFNldCB1cCBwYXJhbXMgKi8N Cj4gIAlmb3IgKGkgPSAwOyBpIDwgZGNfc3RhdGUtPnN0cmVhbV9jb3VudDsgaSsrKSB7DQo+ICAJ CXN0cnVjdCBkY19kc2NfcG9saWN5IGRzY19wb2xpY3kgPSB7MH07DQo+IEBAIC04NTIsMTEgKzg0 OCw4IEBAIHN0YXRpYyBib29sDQo+IGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJdmFyc1tpICsga10ucGJuID0NCj4g a2Jwc190b19wZWFrX3BibihwYXJhbXNbaV0uYndfcmFuZ2Uuc3RyZWFtX2ticHMpOw0KPiAgCQl2 YXJzW2kgKyBrXS5kc2NfZW5hYmxlZCA9IGZhbHNlOw0KPiAgCQl2YXJzW2kgKyBrXS5icHBfeDE2 ID0gMDsNCj4gLQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0KPiAt CQkJCQkJICBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiAtCQkJCQkJICBwYXJhbXNbaV0ucG9ydCwN Cj4gLQkJCQkJCSAgdmFyc1tpICsga10ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2Rpdmlk ZXIoZGNfbGluaykpIDwgMCkNCj4gKwkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3Rz KHN0YXRlLCBwYXJhbXNbaV0ucG9ydC0NCj4gPm1nciwgcGFyYW1zW2ldLnBvcnQsDQo+ICsJCQkJ CQkgIHZhcnNbaSArIGtdLnBibikgPCAwKQ0KPiAgCQkJcmV0dXJuIGZhbHNlOw0KPiAgCX0NCj4g IAlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKSAmJiAhZGVidWdmc19vdmVyd3Jp dGUpIHsNCj4gQEAgLTg3MCwyMSArODYzLDE1IEBAIHN0YXRpYyBib29sDQo+IGNvbXB1dGVfbXN0 X2RzY19jb25maWdzX2Zvcl9saW5rKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4g IAkJCXZhcnNbaSArIGtdLnBibiA9DQo+IGticHNfdG9fcGVha19wYm4ocGFyYW1zW2ldLmJ3X3Jh bmdlLm1pbl9rYnBzKTsNCj4gIAkJCXZhcnNbaSArIGtdLmRzY19lbmFibGVkID0gdHJ1ZTsNCj4g IAkJCXZhcnNbaSArIGtdLmJwcF94MTYgPQ0KPiBwYXJhbXNbaV0uYndfcmFuZ2UubWluX3Rhcmdl dF9icHBfeDE2Ow0KPiAtCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRl LA0KPiAtCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQtPm1nciwNCj4gLQkJCQkJCQkgIHBhcmFtc1tp XS5wb3J0LA0KPiAtCQkJCQkJCSAgdmFyc1tpICsga10ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRf cGJuX2RpdmlkZXIoZGNfbGluaykpIDwgMCkNCj4gKwkJCWlmIChkcm1fZHBfYXRvbWljX2ZpbmRf dGltZV9zbG90cyhzdGF0ZSwNCj4gcGFyYW1zW2ldLnBvcnQtPm1nciwNCj4gKwkJCQkJCQkgIHBh cmFtc1tpXS5wb3J0LCB2YXJzW2kNCj4gKyBrXS5wYm4pIDwgMCkNCj4gIAkJCQlyZXR1cm4gZmFs c2U7DQo+ICAJCX0gZWxzZSB7DQo+ICAJCQl2YXJzW2kgKyBrXS5wYm4gPQ0KPiBrYnBzX3RvX3Bl YWtfcGJuKHBhcmFtc1tpXS5id19yYW5nZS5zdHJlYW1fa2Jwcyk7DQo+ICAJCQl2YXJzW2kgKyBr XS5kc2NfZW5hYmxlZCA9IGZhbHNlOw0KPiAgCQkJdmFyc1tpICsga10uYnBwX3gxNiA9IDA7DQo+ IC0JCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+IC0JCQkJCQkJ ICBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiAtCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQsDQo+IC0J CQkJCQkJICB2YXJzW2kgKyBrXS5wYm4sDQo+IC0NCj4gZG1fbXN0X2dldF9wYm5fZGl2aWRlcihk Y19saW5rKSkgPCAwKQ0KPiArCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0 YXRlLA0KPiBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiArCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQs IHZhcnNbaQ0KPiArIGtdLnBibikgPCAwKQ0KPiAgCQkJCXJldHVybiBmYWxzZTsNCj4gIAkJfQ0K PiAgCX0NCj4gQEAgLTg5Miw3ICs4NzksNyBAQCBzdGF0aWMgYm9vbCBjb21wdXRlX21zdF9kc2Nf Y29uZmlnc19mb3JfbGluayhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJ CXJldHVybiBmYWxzZTsNCj4gDQo+ICAJLyogT3B0aW1pemUgZGVncmVlIG9mIGNvbXByZXNzaW9u ICovDQo+IC0JaW5jcmVhc2VfZHNjX2JwcChzdGF0ZSwgZGNfbGluaywgcGFyYW1zLCB2YXJzLCBj b3VudCwgayk7DQo+ICsJaW5jcmVhc2VfZHNjX2JwcChzdGF0ZSwgbXN0X3N0YXRlLCBkY19saW5r LCBwYXJhbXMsIHZhcnMsIGNvdW50LCBrKTsNCj4gDQo+ICAJdHJ5X2Rpc2FibGVfZHNjKHN0YXRl LCBkY19saW5rLCBwYXJhbXMsIHZhcnMsIGNvdW50LCBrKTsNCj4gDQo+IEBAIC0xMDM2LDkgKzEw MjMsOSBAQCBib29sIGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9zdGF0ZShzdHJ1Y3QNCj4g ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJCQljb250aW51ZTsNCj4gDQo+ICAJCW11dGV4 X2xvY2soJmFjb25uZWN0b3ItPm1zdF9tZ3IubG9jayk7DQo+IC0JCWlmICghY29tcHV0ZV9tc3Rf ZHNjX2NvbmZpZ3NfZm9yX2xpbmsoc3RhdGUsIGRjX3N0YXRlLA0KPiBzdHJlYW0tPmxpbmssDQo+ IC0JCQl2YXJzLCAmbGlua192YXJzX3N0YXJ0X2luZGV4KSkgew0KPiAtCQkJbXV0ZXhfdW5sb2Nr KCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiArCQlpZiAoIWNvbXB1dGVfbXN0X2RzY19j b25maWdzX2Zvcl9saW5rKHN0YXRlLCBkY19zdGF0ZSwNCj4gc3RyZWFtLT5saW5rLCB2YXJzLA0K PiArCQkJCQkJICAgICAgJmFjb25uZWN0b3ItPm1zdF9tZ3IsDQo+ICsJCQkJCQkgICAgICAmbGlu a192YXJzX3N0YXJ0X2luZGV4KSkgew0KDQpTaG91bGQgc3RpbGwga2VlcCAibXV0ZXhfdW5sb2Nr KCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOyIgaGVyZS4NCg0KPiAgCQkJcmV0dXJuIGZhbHNl Ow0KPiAgCQl9DQo+ICAJCW11dGV4X3VubG9jaygmYWNvbm5lY3Rvci0+bXN0X21nci5sb2NrKTsN Cj4gQEAgLTEwOTUsMTAgKzEwODIsOCBAQCBzdGF0aWMgYm9vbA0KPiAgCQkJY29udGludWU7DQo+ IA0KPiAgCQltdXRleF9sb2NrKCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiAtCQlpZiAo IWNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0YXRlLA0KPiAtCQkJCQkJICAgICAg ZGNfc3RhdGUsDQo+IC0JCQkJCQkgICAgICBzdHJlYW0tPmxpbmssDQo+IC0JCQkJCQkgICAgICB2 YXJzLA0KPiArCQlpZiAoIWNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0YXRlLCBk Y19zdGF0ZSwNCj4gc3RyZWFtLT5saW5rLCB2YXJzLA0KPiArCQkJCQkJICAgICAgJmFjb25uZWN0 b3ItPm1zdF9tZ3IsDQo+ICAJCQkJCQkgICAgICAmbGlua192YXJzX3N0YXJ0X2luZGV4KSkgew0K PiAgCQkJbXV0ZXhfdW5sb2NrKCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiAgCQkJcmV0 dXJuIGZhbHNlOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvaW5jbHVkZS9saW5rX3NlcnZpY2VfdHlwZXMuaA0KPiBpbmRleCA5MWJmZmM1YmY1MmMuLjE0 M2JhYWI1NGI0MSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2luY2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gQEAgLTI1MCwxMiArMjUwLDE5 IEBAIHVuaW9uIGRwY2RfdHJhaW5pbmdfbGFuZV9zZXQgew0KPiAgICogX09OTFlfIGJlIGZpbGxl ZCBvdXQgZnJvbSBETSBhbmQgdGhlbiBwYXNzZWQgdG8gREMsIGRvIE5PVCB1c2UgdGhlc2UNCj4g Zm9yIF9hbnlfIGtpbmQgb2YgYXRvbWljDQo+ICAgKiBzdGF0ZSBjYWxjdWxhdGlvbnMgaW4gRE0s IG9yIHlvdSB3aWxsIGJyZWFrIHNvbWV0aGluZy4NCj4gICAqLw0KPiArDQo+ICtzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0Ow0KPiArDQo+ICAvKiBEUCBNU1Qgc3RyZWFtIGFsbG9jYXRpb24gKHBheWxv YWQgYmFuZHdpZHRoIG51bWJlcikgKi8NCj4gIHN0cnVjdCBkY19kcF9tc3Rfc3RyZWFtX2FsbG9j YXRpb24gew0KPiAgCXVpbnQ4X3QgdmNwX2lkOw0KPiAgCS8qIG51bWJlciBvZiBzbG90cyByZXF1 aXJlZCBmb3IgdGhlIERQIHN0cmVhbSBpbg0KPiAgCSAqIHRyYW5zcG9ydCBwYWNrZXQgKi8NCj4g IAl1aW50OF90IHNsb3RfY291bnQ7DQo+ICsJLyogVGhlIE1TVCBwb3J0IHRoaXMgaXMgb24sIHRo aXMgaXMgdXNlZCB0byBhc3NvY2lhdGUgREMgTVNUIHBheWxvYWRzDQo+IHdpdGggdGhlaXINCj4g KwkgKiByZXNwZWN0aXZlIERSTSBwYXlsb2FkcyBhbGxvY2F0aW9ucywgYW5kIGNhbiBiZSBpZ25v cmVkIG9uIG5vbi0NCj4gTGludXguDQo+ICsJICovDQoNCklzIGl0IG5lY2Vzc2FyeSBmb3IgYWRk aW5nIHRoaXMgbmV3IG1lbWJlcj8gU2luY2UgdGhpcyBpcyBmb3Igc2V0dGluZyB0aGUgREMNCkhX IGFuZCBub3QgcmVsYXRpbmcgdG8gZHJtLg0KDQo+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAq cG9ydDsNCj4gIH07DQo+IA0KPiAgLyogRFAgTVNUIHN0cmVhbSBhbGxvY2F0aW9uIHRhYmxlICov DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9s b2d5LmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMN Cj4gaW5kZXggMTBkMjZhN2UwMjhjLi5kOGUzMjI2OTU4NWIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYw0KPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMNCj4gQEAgLTY3LDggKzY3LDcg QEAgc3RhdGljIGJvb2wgZHVtcF9kcF9wYXlsb2FkX3RhYmxlKHN0cnVjdA0KPiBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF90b3BvbG9neV9w dXRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0DQo+ICpwb3J0KTsNCj4gDQo+ICBzdGF0aWMg aW50IGRybV9kcF9kcGNkX3dyaXRlX3BheWxvYWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyDQo+ICptZ3IsDQo+IC0JCQkJICAgICBpbnQgaWQsDQo+IC0JCQkJICAgICBzdHJ1Y3QgZHJt X2RwX3BheWxvYWQgKnBheWxvYWQpOw0KPiArCQkJCSAgICAgaW50IGlkLCB1OCBzdGFydF9zbG90 LCB1OCBudW1fc2xvdHMpOw0KPiANCj4gIHN0YXRpYyBpbnQgZHJtX2RwX3NlbmRfZHBjZF9yZWFk KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgCQkJCSBzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0ICpwb3J0LA0KPiBAQCAtMTIzNCw1NyArMTIzMyw2IEBAIGJ1aWxkX3F1ZXJ5 X3N0cmVhbV9lbmNfc3RhdHVzKHN0cnVjdA0KPiBkcm1fZHBfc2lkZWJhbmRfbXNnX3R4ICptc2cs IHU4IHN0cmVhbV9pZCwNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgaW50IGRy bV9kcF9tc3RfYXNzaWduX3BheWxvYWRfaWQoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsDQo+IC0JCQkJCXN0cnVjdCBkcm1fZHBfdmNwaSAqdmNwaSkNCj4gLXsNCj4gLQlp bnQgcmV0LCB2Y3BpX3JldDsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2Nr KTsNCj4gLQlyZXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZtZ3ItPnBheWxvYWRfbWFzaywgbWdy LT5tYXhfcGF5bG9hZHMNCj4gKyAxKTsNCj4gLQlpZiAocmV0ID4gbWdyLT5tYXhfcGF5bG9hZHMp IHsNCj4gLQkJcmV0ID0gLUVJTlZBTDsNCj4gLQkJZHJtX2RiZ19rbXMobWdyLT5kZXYsICJvdXQg b2YgcGF5bG9hZCBpZHMgJWRcbiIsIHJldCk7DQo+IC0JCWdvdG8gb3V0X3VubG9jazsNCj4gLQl9 DQo+IC0NCj4gLQl2Y3BpX3JldCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJm1nci0+dmNwaV9tYXNr LCBtZ3ItDQo+ID5tYXhfcGF5bG9hZHMgKyAxKTsNCj4gLQlpZiAodmNwaV9yZXQgPiBtZ3ItPm1h eF9wYXlsb2Fkcykgew0KPiAtCQlyZXQgPSAtRUlOVkFMOw0KPiAtCQlkcm1fZGJnX2ttcyhtZ3It PmRldiwgIm91dCBvZiB2Y3BpIGlkcyAlZFxuIiwgcmV0KTsNCj4gLQkJZ290byBvdXRfdW5sb2Nr Ow0KPiAtCX0NCj4gLQ0KPiAtCXNldF9iaXQocmV0LCAmbWdyLT5wYXlsb2FkX21hc2spOw0KPiAt CXNldF9iaXQodmNwaV9yZXQsICZtZ3ItPnZjcGlfbWFzayk7DQo+IC0JdmNwaS0+dmNwaSA9IHZj cGlfcmV0ICsgMTsNCj4gLQltZ3ItPnByb3Bvc2VkX3ZjcGlzW3JldCAtIDFdID0gdmNwaTsNCj4g LW91dF91bmxvY2s6DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0J cmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgZHJtX2RwX21zdF9wdXRfcGF5 bG9hZF9pZChzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3INCj4gKm1nciwNCj4gLQkJCQkg ICAgICBpbnQgdmNwaSkNCj4gLXsNCj4gLQlpbnQgaTsNCj4gLQ0KPiAtCWlmICh2Y3BpID09IDAp DQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsN Cj4gLQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgInB1dHRpbmcgcGF5bG9hZCAlZFxuIiwgdmNwaSk7 DQo+IC0JY2xlYXJfYml0KHZjcGkgLSAxLCAmbWdyLT52Y3BpX21hc2spOw0KPiAtDQo+IC0JZm9y IChpID0gMDsgaSA8IG1nci0+bWF4X3BheWxvYWRzOyBpKyspIHsNCj4gLQkJaWYgKG1nci0+cHJv cG9zZWRfdmNwaXNbaV0gJiYNCj4gLQkJICAgIG1nci0+cHJvcG9zZWRfdmNwaXNbaV0tPnZjcGkg PT0gdmNwaSkgew0KPiAtCQkJbWdyLT5wcm9wb3NlZF92Y3Bpc1tpXSA9IE5VTEw7DQo+IC0JCQlj bGVhcl9iaXQoaSArIDEsICZtZ3ItPnBheWxvYWRfbWFzayk7DQo+IC0JCX0NCj4gLQl9DQo+IC0J bXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyBi b29sIGNoZWNrX3R4bXNnX3N0YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LA0KPiAgCQkJICAgICAgc3RydWN0IGRybV9kcF9zaWRlYmFuZF9tc2dfdHggKnR4bXNnKQ0KPiAg ew0KPiBAQCAtMTczNyw3ICsxNjg1LDcgQEAgZHJtX2RwX21zdF9kdW1wX3BvcnRfdG9wb2xvZ3lf aGlzdG9yeShzdHJ1Y3QNCj4gZHJtX2RwX21zdF9wb3J0ICpwb3J0KSB7fQ0KPiAgI2RlZmluZSBz YXZlX3BvcnRfdG9wb2xvZ3lfcmVmKHBvcnQsIHR5cGUpDQo+ICAjZW5kaWYNCj4gDQo+IC1zdGF0 aWMgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKg0KPiArc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKg0KPiAgZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUo c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUNCj4gKnN0YXRlLA0KPiAgCQkJCSBzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQ0KPiAgew0KPiBAQCAtMTc0OSw2ICsxNjk3LDcgQEAg ZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUgKnN0YXRlLA0KPiANCj4gIAlyZXR1cm4gTlVMTDsNCj4gIH0NCj4gK0VYUE9S VF9TWU1CT0woZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUpOw0KPiANCj4gIHN0YXRp YyB2b2lkIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVm KQ0KPiAgew0KPiBAQCAtMzI3Miw2ICszMjIxLDggQEAgaW50DQo+IGRybV9kcF9zZW5kX3F1ZXJ5 X3N0cmVhbV9lbmNfc3RhdHVzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LA0KPiAgCQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAgCQlzdHJ1Y3QgZHJtX2Rw X3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVzX2Fja19yZXBseSAqc3RhdHVzKQ0KPiAgew0KPiArCXN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZDsNCj4gIAlzdHJ1Y3QgZHJtX2RwX3NpZGViYW5k X21zZ190eCAqdHhtc2c7DQo+ICAJdTggbm9uY2VbN107DQo+ICAJaW50IHJldDsNCj4gQEAgLTMy ODgsNiArMzIzOSwxMCBAQCBpbnQNCj4gZHJtX2RwX3NlbmRfcXVlcnlfc3RyZWFtX2VuY19zdGF0 dXMoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+IA0KPiAgCWdldF9y YW5kb21fYnl0ZXMobm9uY2UsIHNpemVvZihub25jZSkpOw0KPiANCj4gKwlkcm1fbW9kZXNldF9s b2NrKCZtZ3ItPmJhc2UubG9jaywgTlVMTCk7DQo+ICsJc3RhdGUgPSB0b19kcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlKG1nci0+YmFzZS5zdGF0ZSk7DQo+ICsJcGF5bG9hZCA9IGRybV9hdG9taWNf Z2V0X21zdF9wYXlsb2FkX3N0YXRlKHN0YXRlLCBwb3J0KTsNCj4gKw0KPiAgCS8qDQo+ICAJICog IlNvdXJjZSBkZXZpY2UgdGFyZ2V0cyB0aGUgUVVFUllfU1RSRUFNX0VOQ1JZUFRJT05fU1RBVFVT DQo+IG1lc3NhZ2UNCj4gIAkgKiAgdHJhbnNhY3Rpb24gYXQgdGhlIE1TVCBCcmFuY2ggZGV2aWNl IGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUNCj4gQEAgLTMyOTUsNyArMzI1MCw3IEBAIGludA0K PiBkcm1fZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyhzdHJ1Y3QNCj4gZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwNCj4gIAkgKi8NCj4gIAl0eG1zZy0+ZHN0ID0gbWdyLT5tc3Rf cHJpbWFyeTsNCj4gDQo+IC0JYnVpbGRfcXVlcnlfc3RyZWFtX2VuY19zdGF0dXModHhtc2csIHBv cnQtPnZjcGkudmNwaSwgbm9uY2UpOw0KPiArCWJ1aWxkX3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVz KHR4bXNnLCBwYXlsb2FkLT52Y3BpLCBub25jZSk7DQo+IA0KPiAgCWRybV9kcF9xdWV1ZV9kb3du X3R4KG1nciwgdHhtc2cpOw0KPiANCj4gQEAgLTMzMTIsNiArMzI2Nyw3IEBAIGludA0KPiBkcm1f ZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyhzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwNCj4gIAltZW1jcHkoc3RhdHVzLCAmdHhtc2ctPnJlcGx5LnUuZW5jX3N0 YXR1cywgc2l6ZW9mKCpzdGF0dXMpKTsNCj4gDQo+ICBvdXQ6DQo+ICsJZHJtX21vZGVzZXRfdW5s b2NrKCZtZ3ItPmJhc2UubG9jayk7DQo+ICAJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChw b3J0KTsNCj4gIG91dF9nZXRfcG9ydDoNCj4gIAlrZnJlZSh0eG1zZyk7DQo+IEBAIC0zMzIwLDIx OSArMzI3NiwxNjEgQEAgaW50DQo+IGRybV9kcF9zZW5kX3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVz KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgRVhQT1JUX1NZTUJP TChkcm1fZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyk7DQo+IA0KPiAgc3RhdGljIGlu dCBkcm1fZHBfY3JlYXRlX3BheWxvYWRfc3RlcDEoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyDQo+ICptZ3IsDQo+IC0JCQkJICAgICAgIGludCBpZCwNCj4gLQkJCQkgICAgICAgc3RydWN0 IGRybV9kcF9wYXlsb2FkICpwYXlsb2FkKQ0KPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21z dF9hdG9taWNfcGF5bG9hZA0KPiAqcGF5bG9hZCkNCj4gIHsNCj4gLQlpbnQgcmV0Ow0KPiAtDQo+ IC0JcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGVfcGF5bG9hZChtZ3IsIGlkLCBwYXlsb2FkKTsNCj4g LQlpZiAocmV0IDwgMCkgew0KPiAtCQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRlID0gMDsNCj4gLQkJ cmV0dXJuIHJldDsNCj4gLQl9DQo+IC0JcGF5bG9hZC0+cGF5bG9hZF9zdGF0ZSA9IERQX1BBWUxP QURfTE9DQUw7DQo+IC0JcmV0dXJuIDA7DQo+ICsJcmV0dXJuIGRybV9kcF9kcGNkX3dyaXRlX3Bh eWxvYWQobWdyLCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0KPiA+dmNfc3RhcnRfc2xvdCwNCj4g KwkJCQkJIHBheWxvYWQtPnRpbWVfc2xvdHMpOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgZHJt X2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAyKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncg0K PiAqbWdyLA0KPiAtCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAt CQkJCSAgICAgICBpbnQgaWQsDQo+IC0JCQkJICAgICAgIHN0cnVjdCBkcm1fZHBfcGF5bG9hZCAq cGF5bG9hZCkNCj4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQN Cj4gKnBheWxvYWQpDQo+ICB7DQo+ICAJaW50IHJldDsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0ID0NCj4gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQobWdy LCBwYXlsb2FkLT5wb3J0KTsNCj4gDQo+IC0JcmV0ID0gZHJtX2RwX3BheWxvYWRfc2VuZF9tc2co bWdyLCBwb3J0LCBpZCwgcG9ydC0+dmNwaS5wYm4pOw0KPiAtCWlmIChyZXQgPCAwKQ0KPiAtCQly ZXR1cm4gcmV0Ow0KPiAtCXBheWxvYWQtPnBheWxvYWRfc3RhdGUgPSBEUF9QQVlMT0FEX1JFTU9U RTsNCj4gKwlpZiAoIXBvcnQpDQo+ICsJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJcmV0ID0gZHJt X2RwX3BheWxvYWRfc2VuZF9tc2cobWdyLCBwb3J0LCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0K PiA+cGJuKTsNCj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOw0KPiAgCXJl dHVybiByZXQ7DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBkcm1fZHBfZGVzdHJveV9wYXlsb2Fk X3N0ZXAxKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCQlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAtCQkJCQlpbnQgaWQsDQo+IC0JCQkJCXN0 cnVjdCBkcm1fZHBfcGF5bG9hZCAqcGF5bG9hZCkNCj4gKwkJCQkJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUNCj4gKm1zdF9zdGF0ZSwNCj4gKwkJCQkJc3RydWN0IGRybV9kcF9tc3Rf YXRvbWljX3BheWxvYWQNCj4gKnBheWxvYWQpDQo+ICB7DQo+ICsNCj4gIAlkcm1fZGJnX2ttcyht Z3ItPmRldiwgIlxuIik7DQo+IC0JLyogaXQncyBva2F5IGZvciB0aGVzZSB0byBmYWlsICovDQo+ IC0JaWYgKHBvcnQpIHsNCj4gLQkJZHJtX2RwX3BheWxvYWRfc2VuZF9tc2cobWdyLCBwb3J0LCBp ZCwgMCk7DQo+IC0JfQ0KPiANCj4gLQlkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKG1nciwgaWQs IHBheWxvYWQpOw0KPiAtCXBheWxvYWQtPnBheWxvYWRfc3RhdGUgPSBEUF9QQVlMT0FEX0RFTEVU RV9MT0NBTDsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gKwkvKiBpdCdzIG9rYXkgZm9yIHRoZXNl IHRvIGZhaWwgKi8NCj4gKwlkcm1fZHBfcGF5bG9hZF9zZW5kX21zZyhtZ3IsIHBheWxvYWQtPnBv cnQsIHBheWxvYWQtPnZjcGksIDApOw0KPiArCWRybV9kcF9kcGNkX3dyaXRlX3BheWxvYWQobWdy LCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0KPiA+dmNfc3RhcnRfc2xvdCwgMCk7DQo+IA0KPiAt c3RhdGljIGludCBkcm1fZHBfZGVzdHJveV9wYXlsb2FkX3N0ZXAyKHN0cnVjdA0KPiBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCQlpbnQgaWQsDQo+IC0JCQkJCXN0cnVjdCBk cm1fZHBfcGF5bG9hZCAqcGF5bG9hZCkNCj4gLXsNCj4gLQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRl ID0gMDsNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+ICAvKioNCj4gLSAqIGRybV9kcF91cGRh dGVfcGF5bG9hZF9wYXJ0MSgpIC0gRXhlY3V0ZSBwYXlsb2FkIHVwZGF0ZSBwYXJ0IDENCj4gLSAq IEBtZ3I6IG1hbmFnZXIgdG8gdXNlLg0KPiAtICogQHN0YXJ0X3Nsb3Q6IHRoaXMgaXMgdGhlIGN1 ciBzbG90DQo+ICsgKiBkcm1fZHBfYWRkX3BheWxvYWRfcGFydDEoKSAtIEV4ZWN1dGUgcGF5bG9h ZCB1cGRhdGUgcGFydCAxDQo+ICsgKiBAbWdyOiBNYW5hZ2VyIHRvIHVzZS4NCj4gKyAqIEBtc3Rf c3RhdGU6IFRoZSBNU1QgYXRvbWljIHN0YXRlDQo+ICsgKiBAcGF5bG9hZDogVGhlIHBheWxvYWQg dG8gd3JpdGUNCj4gICAqDQo+IC0gKiBOT1RFOiBzdGFydF9zbG90IGlzIGEgdGVtcG9yYXJ5IHdv cmthcm91bmQgZm9yIG5vbi1hdG9taWMgZHJpdmVycywNCj4gLSAqIHRoaXMgd2lsbCBiZSByZW1v dmVkIHdoZW4gbm9uLWF0b21pYyBtc3QgaGVscGVycyBhcmUgbW92ZWQgb3V0IG9mIHRoZQ0KPiBo ZWxwZXINCj4gKyAqIERldGVybWluZXMgdGhlIHN0YXJ0aW5nIHRpbWUgc2xvdCBmb3IgdGhlIGdp dmVuIHBheWxvYWQsIGFuZCBwcm9ncmFtcyB0aGUNCj4gVkNQSSBmb3IgdGhpcyBwYXlsb2FkDQo+ ICsgKiBpbnRvIGhhcmR3YXJlLg0KPiAgICoNCj4gLSAqIFRoaXMgaXRlcmF0ZXMgb3ZlciBhbGwg cHJvcG9zZWQgdmlydHVhbCBjaGFubmVscywgYW5kIHRyaWVzIHRvDQo+IC0gKiBhbGxvY2F0ZSBz cGFjZSBpbiB0aGUgbGluayBmb3IgdGhlbS4gRm9yIDAtPnNsb3RzIHRyYW5zaXRpb25zLA0KPiAt ICogdGhpcyBzdGVwIGp1c3Qgd3JpdGVzIHRoZSBWQ1BJIHRvIHRoZSBNU1QgZGV2aWNlLiBGb3Ig c2xvdHMtPjANCj4gLSAqIHRyYW5zaXRpb25zLCB0aGlzIHdyaXRlcyB0aGUgdXBkYXRlZCBWQ1BJ cyBhbmQgcmVtb3ZlcyB0aGUNCj4gLSAqIHJlbW90ZSBWQyBwYXlsb2Fkcy4NCj4gKyAqIEFmdGVy IGNhbGxpbmcgdGhpcywgdGhlIGRyaXZlciBzaG91bGQgZ2VuZXJhdGUgQUNUIGFuZCBwYXlsb2Fk IHBhY2tldHMuDQo+IE5vdGUgdGhhdCB0aGUgZHJpdmVyIG1heQ0KPiArICogZ2VuZXJhdGUgQUNU IG9uY2UgcGVyIHBheWxvYWQgY2hhbmdlLCBvciBvbmx5IG9uY2UgYWZ0ZXIgYWxsIG5ldw0KPiBw YXlsb2FkcyBpbiBhIGdpdmVuIGF0b21pYyBzdGF0ZQ0KPiArICogaGF2ZSBiZWVuIGFkZGVkLg0K PiAgICoNCj4gLSAqIGFmdGVyIGNhbGxpbmcgdGhpcyB0aGUgZHJpdmVyIHNob3VsZCBnZW5lcmF0 ZSBBQ1QgYW5kIHBheWxvYWQNCj4gLSAqIHBhY2tldHMuDQo+ICsgKiBSZXR1cm5zOiAwIG9uIHN1 Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZS4gSW4gdGhlIGV2ZW50IHRoYXQgdGhpcyBmYWls cywNCj4gKyAqIEBwYXlsb2FkLnZjX3N0YXJ0X3Nsb3Qgd2lsbCBhbHNvIGJlIHNldCB0byAtMS4N Cj4gICAqLw0KPiAtaW50IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3INCj4gKm1nciwgaW50IHN0YXJ0X3Nsb3QpDQo+ICtpbnQgZHJtX2Rw X2FkZF9wYXlsb2FkX3BhcnQxKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0K PiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlLA0K PiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZCkNCj4g IHsNCj4gLQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgcmVxX3BheWxvYWQ7DQo+ICAJc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqcG9ydDsNCj4gLQlpbnQgaSwgajsNCj4gLQlpbnQgY3VyX3Nsb3RzID0g c3RhcnRfc2xvdDsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4g LQlmb3IgKGkgPSAwOyBpIDwgbWdyLT5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAtCQlzdHJ1Y3Qg ZHJtX2RwX3ZjcGkgKnZjcGkgPSBtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldOw0KPiAtCQlzdHJ1Y3Qg ZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPSAmbWdyLT5wYXlsb2Fkc1tpXTsNCj4gLQkJYm9vbCBw dXRfcG9ydCA9IGZhbHNlOw0KPiAtDQo+IC0JCS8qIHNvbHZlIHRoZSBjdXJyZW50IHBheWxvYWRz IC0gY29tcGFyZSB0byB0aGUgaHcgb25lcw0KPiAtCQkgICAtIHVwZGF0ZSB0aGUgaHcgdmlldyAq Lw0KPiAtCQlyZXFfcGF5bG9hZC5zdGFydF9zbG90ID0gY3VyX3Nsb3RzOw0KPiAtCQlpZiAodmNw aSkgew0KPiAtCQkJcG9ydCA9IGNvbnRhaW5lcl9vZih2Y3BpLCBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0LA0KPiAtCQkJCQkgICAgdmNwaSk7DQo+IC0NCj4gLQkJCS8qIFZhbGlkYXRlZCBwb3J0cyBk b24ndCBtYXR0ZXIgaWYgd2UncmUgcmVsZWFzaW5nDQo+IC0JCQkgKiBWQ1BJDQo+IC0JCQkgKi8N Cj4gLQkJCWlmICh2Y3BpLT5udW1fc2xvdHMpIHsNCj4gLQkJCQlwb3J0ID0NCj4gZHJtX2RwX21z dF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQoDQo+IC0JCQkJICAgIG1nciwgcG9ydCk7DQo+ IC0JCQkJaWYgKCFwb3J0KSB7DQo+IC0JCQkJCWlmICh2Y3BpLT5udW1fc2xvdHMgPT0gcGF5bG9h ZC0NCj4gPm51bV9zbG90cykgew0KPiAtCQkJCQkJY3VyX3Nsb3RzICs9IHZjcGktPm51bV9zbG90 czsNCj4gLQkJCQkJCXBheWxvYWQtPnN0YXJ0X3Nsb3QgPQ0KPiByZXFfcGF5bG9hZC5zdGFydF9z bG90Ow0KPiAtCQkJCQkJY29udGludWU7DQo+IC0JCQkJCX0gZWxzZSB7DQo+IC0JCQkJCQlkcm1f ZGJnX2ttcyhtZ3ItPmRldiwNCj4gLQkJCQkJCQkgICAgIkZhaWw6c2V0IHBheWxvYWQgdG8NCj4g aW52YWxpZCBzaW5rIik7DQo+IC0JCQkJCQltdXRleF91bmxvY2soJm1nci0NCj4gPnBheWxvYWRf bG9jayk7DQo+IC0JCQkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJCQkJfQ0KPiAtCQkJCX0NCj4g LQkJCQlwdXRfcG9ydCA9IHRydWU7DQo+IC0JCQl9DQo+ICsJaW50IHJldDsNCj4gDQo+IC0JCQly ZXFfcGF5bG9hZC5udW1fc2xvdHMgPSB2Y3BpLT5udW1fc2xvdHM7DQo+IC0JCQlyZXFfcGF5bG9h ZC52Y3BpID0gdmNwaS0+dmNwaTsNCj4gLQkJfSBlbHNlIHsNCj4gLQkJCXBvcnQgPSBOVUxMOw0K PiAtCQkJcmVxX3BheWxvYWQubnVtX3Nsb3RzID0gMDsNCj4gLQkJfQ0KPiArCXBvcnQgPSBkcm1f ZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZChtZ3IsIHBheWxvYWQtDQo+ID5wb3J0 KTsNCj4gKwlpZiAoIXBvcnQpDQo+ICsJCXJldHVybiAwOw0KPiANCj4gLQkJcGF5bG9hZC0+c3Rh cnRfc2xvdCA9IHJlcV9wYXlsb2FkLnN0YXJ0X3Nsb3Q7DQo+IC0JCS8qIHdvcmsgb3V0IHdoYXQg aXMgcmVxdWlyZWQgdG8gaGFwcGVuIHdpdGggdGhpcyBwYXlsb2FkICovDQo+IC0JCWlmIChwYXls b2FkLT5udW1fc2xvdHMgIT0gcmVxX3BheWxvYWQubnVtX3Nsb3RzKSB7DQo+IC0NCj4gLQkJCS8q IG5lZWQgdG8gcHVzaCBhbiB1cGRhdGUgZm9yIHRoaXMgcGF5bG9hZCAqLw0KPiAtCQkJaWYgKHJl cV9wYXlsb2FkLm51bV9zbG90cykgew0KPiAtCQkJCWRybV9kcF9jcmVhdGVfcGF5bG9hZF9zdGVw MShtZ3IsIHZjcGktDQo+ID52Y3BpLA0KPiAtCQkJCQkJCSAgICAmcmVxX3BheWxvYWQpOw0KPiAt CQkJCXBheWxvYWQtPm51bV9zbG90cyA9DQo+IHJlcV9wYXlsb2FkLm51bV9zbG90czsNCj4gLQkJ CQlwYXlsb2FkLT52Y3BpID0gcmVxX3BheWxvYWQudmNwaTsNCj4gLQ0KPiAtCQkJfSBlbHNlIGlm IChwYXlsb2FkLT5udW1fc2xvdHMpIHsNCj4gLQkJCQlwYXlsb2FkLT5udW1fc2xvdHMgPSAwOw0K PiAtCQkJCWRybV9kcF9kZXN0cm95X3BheWxvYWRfc3RlcDEobWdyLCBwb3J0LA0KPiAtCQkJCQkJ CSAgICAgcGF5bG9hZC0+dmNwaSwNCj4gLQkJCQkJCQkgICAgIHBheWxvYWQpOw0KPiAtCQkJCXJl cV9wYXlsb2FkLnBheWxvYWRfc3RhdGUgPQ0KPiAtCQkJCQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRl Ow0KPiAtCQkJCXBheWxvYWQtPnN0YXJ0X3Nsb3QgPSAwOw0KPiAtCQkJfQ0KPiAtCQkJcGF5bG9h ZC0+cGF5bG9hZF9zdGF0ZSA9DQo+IHJlcV9wYXlsb2FkLnBheWxvYWRfc3RhdGU7DQo+IC0JCX0N Cj4gLQkJY3VyX3Nsb3RzICs9IHJlcV9wYXlsb2FkLm51bV9zbG90czsNCj4gKwlpZiAobWdyLT5w YXlsb2FkX2NvdW50ID09IDApDQo+ICsJCW1nci0+bmV4dF9zdGFydF9zbG90ID0gbXN0X3N0YXRl LT5zdGFydF9zbG90Ow0KPiANCj4gLQkJaWYgKHB1dF9wb3J0KQ0KPiAtCQkJZHJtX2RwX21zdF90 b3BvbG9neV9wdXRfcG9ydChwb3J0KTsNCj4gKwlwYXlsb2FkLT52Y19zdGFydF9zbG90ID0gbWdy LT5uZXh0X3N0YXJ0X3Nsb3Q7DQo+ICsJcmV0ID0gZHJtX2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAx KG1nciwgcGF5bG9hZCk7DQo+ICsJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsN Cj4gKwlpZiAocmV0IDwgMCkgew0KPiArCQlkcm1fd2FybihtZ3ItPmRldiwgIkZhaWxlZCB0byBj cmVhdGUgTVNUIHBheWxvYWQgZm9yIHBvcnQNCj4gJXA6ICVkXG4iLA0KPiArCQkJIHBheWxvYWQt PnBvcnQsIHJldCk7DQo+ICsJCXBheWxvYWQtPnZjX3N0YXJ0X3Nsb3QgPSAtMTsNCj4gKwkJcmV0 dXJuIHJldDsNCj4gIAl9DQo+IA0KPiAtCWZvciAoaSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2Fk czsgLyogZG8gbm90aGluZyAqLykgew0KPiAtCQlpZiAobWdyLT5wYXlsb2Fkc1tpXS5wYXlsb2Fk X3N0YXRlICE9DQo+IERQX1BBWUxPQURfREVMRVRFX0xPQ0FMKSB7DQo+IC0JCQlpKys7DQo+IC0J CQljb250aW51ZTsNCj4gLQkJfQ0KPiArCW1nci0+cGF5bG9hZF9jb3VudCsrOw0KPiArCW1nci0+ bmV4dF9zdGFydF9zbG90ICs9IHBheWxvYWQtPnRpbWVfc2xvdHM7DQo+IA0KPiAtCQlkcm1fZGJn X2ttcyhtZ3ItPmRldiwgInJlbW92aW5nIHBheWxvYWQgJWRcbiIsIGkpOw0KPiAtCQlmb3IgKGog PSBpOyBqIDwgbWdyLT5tYXhfcGF5bG9hZHMgLSAxOyBqKyspIHsNCj4gLQkJCW1nci0+cGF5bG9h ZHNbal0gPSBtZ3ItPnBheWxvYWRzW2ogKyAxXTsNCj4gLQkJCW1nci0+cHJvcG9zZWRfdmNwaXNb al0gPSBtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ogKw0KPiAxXTsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQxKTsNCj4gDQo+IC0JCQlp ZiAobWdyLT5wcm9wb3NlZF92Y3Bpc1tqXSAmJg0KPiAtCQkJICAgIG1nci0+cHJvcG9zZWRfdmNw aXNbal0tPm51bV9zbG90cykgew0KPiAtCQkJCXNldF9iaXQoaiArIDEsICZtZ3ItPnBheWxvYWRf bWFzayk7DQo+IC0JCQl9IGVsc2Ugew0KPiAtCQkJCWNsZWFyX2JpdChqICsgMSwgJm1nci0+cGF5 bG9hZF9tYXNrKTsNCj4gLQkJCX0NCj4gLQkJfQ0KPiArLyoqDQo+ICsgKiBkcm1fZHBfcmVtb3Zl X3BheWxvYWQoKSAtIFJlbW92ZSBhbiBNU1QgcGF5bG9hZA0KPiArICogQG1ncjogTWFuYWdlciB0 byB1c2UuDQo+ICsgKiBAbXN0X3N0YXRlOiBUaGUgTVNUIGF0b21pYyBzdGF0ZQ0KPiArICogQHBh eWxvYWQ6IFRoZSBwYXlsb2FkIHRvIHdyaXRlDQo+ICsgKg0KPiArICogUmVtb3ZlcyBhIHBheWxv YWQgZnJvbSBhbiBNU1QgdG9wb2xvZ3kgaWYgaXQgd2FzIHN1Y2Nlc3NmdWxseSBhc3NpZ25lZCBh DQo+IHN0YXJ0IHNsb3QuIEFsc28gdXBkYXRlcw0KPiArICogdGhlIHN0YXJ0aW5nIHRpbWUgc2xv dHMgb2YgYWxsIG90aGVyIHBheWxvYWRzIHdoaWNoIHdvdWxkIGhhdmUgYmVlbg0KPiBzaGlmdGVk IHRvd2FyZHMgdGhlIHN0YXJ0IG9mDQo+ICsgKiB0aGUgVkMgdGFibGUgYXMgYSByZXN1bHQuDQo+ ICsgKg0KPiArICogQWZ0ZXIgY2FsbGluZyB0aGlzLCB0aGUgZHJpdmVyIHNob3VsZCBnZW5lcmF0 ZSBBQ1QgYW5kIHBheWxvYWQgcGFja2V0cy4NCj4gTm90ZSB0aGF0IHRoZSBkcml2ZXIgbWF5DQo+ ICsgKiBnZW5lcmF0ZSBBQ1Qgb25jZSBwZXIgcGF5bG9hZCBjaGFuZ2UsIG9yIG9ubHkgb25jZSBh ZnRlciBhbGwgcGF5bG9hZHMgZm9yDQo+IGEgZ2l2ZW4gYXRvbWljIHN0YXRlDQo+ICsgKiBoYXZl IGJlZW4gcmVtb3ZlZC4NCj4gKyAqLw0KPiArdm9pZCBkcm1fZHBfcmVtb3ZlX3BheWxvYWQoc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCQkgICBzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlLA0KPiArCQkJICAgc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9kcF9tc3Rf YXRvbWljX3BheWxvYWQgKnBvczsNCj4gDQo+IC0JCW1lbXNldCgmbWdyLT5wYXlsb2Fkc1ttZ3It Pm1heF9wYXlsb2FkcyAtIDFdLCAwLA0KPiAtCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fZHBf cGF5bG9hZCkpOw0KPiAtCQltZ3ItPnByb3Bvc2VkX3ZjcGlzW21nci0+bWF4X3BheWxvYWRzIC0g MV0gPSBOVUxMOw0KPiAtCQljbGVhcl9iaXQobWdyLT5tYXhfcGF5bG9hZHMsICZtZ3ItPnBheWxv YWRfbWFzayk7DQo+ICsJLyogV2UgZmFpbGVkIHRvIG1ha2UgdGhlIHBheWxvYWQsIHNvIG5vdGhp bmcgdG8gZG8gKi8NCj4gKwlpZiAocGF5bG9hZC0+dmNfc3RhcnRfc2xvdCA9PSAtMSkNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJZHJtX2RwX2Rlc3Ryb3lfcGF5bG9hZF9zdGVwMShtZ3IsIG1zdF9z dGF0ZSwgcGF5bG9hZCk7DQo+ICsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJm1zdF9z dGF0ZS0+cGF5bG9hZHMsIG5leHQpIHsNCj4gKwkJaWYgKHBvcyAhPSBwYXlsb2FkICYmIHBvcy0+ dmNfc3RhcnRfc2xvdCA+IHBheWxvYWQtDQo+ID52Y19zdGFydF9zbG90KQ0KPiArCQkJcG9zLT52 Y19zdGFydF9zbG90IC09IHBheWxvYWQtPnRpbWVfc2xvdHM7DQo+ICAJfQ0KPiAtCW11dGV4X3Vu bG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiArCXBheWxvYWQtPnZjX3N0YXJ0X3Nsb3QgPSAt MTsNCj4gDQo+IC0JcmV0dXJuIDA7DQo+ICsJbWdyLT5wYXlsb2FkX2NvdW50LS07DQo+ICsJbWdy LT5uZXh0X3N0YXJ0X3Nsb3QgLT0gcGF5bG9hZC0+dGltZV9zbG90czsNCj4gIH0NCj4gLUVYUE9S VF9TWU1CT0woZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKTsNCj4gK0VYUE9SVF9TWU1CT0wo ZHJtX2RwX3JlbW92ZV9wYXlsb2FkKTsNCj4gDQo+ICAvKioNCj4gLSAqIGRybV9kcF91cGRhdGVf cGF5bG9hZF9wYXJ0MigpIC0gRXhlY3V0ZSBwYXlsb2FkIHVwZGF0ZSBwYXJ0IDINCj4gLSAqIEBt Z3I6IG1hbmFnZXIgdG8gdXNlLg0KPiArICogZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQyKCkgLSBF eGVjdXRlIHBheWxvYWQgdXBkYXRlIHBhcnQgMg0KPiArICogQG1ncjogTWFuYWdlciB0byB1c2Uu DQo+ICsgKiBAc3RhdGU6IFRoZSBnbG9iYWwgYXRvbWljIHN0YXRlDQo+ICsgKiBAcGF5bG9hZDog VGhlIHBheWxvYWQgdG8gdXBkYXRlDQo+ICsgKg0KPiArICogSWYgQHBheWxvYWQgd2FzIHN1Y2Nl c3NmdWxseSBhc3NpZ25lZCBhIHN0YXJ0aW5nIHRpbWUgc2xvdCBieQ0KPiBkcm1fZHBfYWRkX3Bh eWxvYWRfcGFydDEoKSwgdGhpcw0KPiArICogZnVuY3Rpb24gd2lsbCBzZW5kIHRoZSBzaWRlYmFu ZCBtZXNzYWdlcyB0byBmaW5pc2ggYWxsb2NhdGluZyB0aGlzIHBheWxvYWQuDQo+ICAgKg0KPiAt ICogVGhpcyBpdGVyYXRlcyBvdmVyIGFsbCBwcm9wb3NlZCB2aXJ0dWFsIGNoYW5uZWxzLCBhbmQg dHJpZXMgdG8NCj4gLSAqIGFsbG9jYXRlIHNwYWNlIGluIHRoZSBsaW5rIGZvciB0aGVtLiBGb3Ig MC0+c2xvdHMgdHJhbnNpdGlvbnMsDQo+IC0gKiB0aGlzIHN0ZXAgd3JpdGVzIHRoZSByZW1vdGUg VkMgcGF5bG9hZCBjb21tYW5kcy4gRm9yIHNsb3RzLT4wDQo+IC0gKiB0aGlzIGp1c3QgcmVzZXRz IHNvbWUgaW50ZXJuYWwgc3RhdGUuDQo+ICsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0 aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4NCj4gICAqLw0KPiAtaW50IGRybV9kcF91cGRhdGVf cGF5bG9hZF9wYXJ0MihzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3INCj4gKm1ncikNCj4g K2ludCBkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsDQo+ICsJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4g KwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQpDQo+ICB7 DQo+IC0Jc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsNCj4gLQlpbnQgaTsNCj4gIAlpbnQg cmV0ID0gMDsNCj4gDQo+IC0JbXV0ZXhfbG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiAtCWZv ciAoaSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0NCj4gLQkJaWYgKCFt Z3ItPnByb3Bvc2VkX3ZjcGlzW2ldKQ0KPiAtCQkJY29udGludWU7DQo+IC0NCj4gLQkJcG9ydCA9 IGNvbnRhaW5lcl9vZihtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldLCBzdHJ1Y3QNCj4gZHJtX2RwX21z dF9wb3J0LCB2Y3BpKTsNCj4gKwkvKiBTa2lwIGZhaWxlZCBwYXlsb2FkcyAqLw0KPiArCWlmIChw YXlsb2FkLT52Y19zdGFydF9zbG90ID09IC0xKSB7DQo+ICsJCWRybV9kYmdfa21zKHN0YXRlLT5k ZXYsICJQYXJ0IDEgb2YgcGF5bG9hZCBjcmVhdGlvbiBmb3IgJXMNCj4gZmFpbGVkLCBza2lwcGlu ZyBwYXJ0IDJcbiIsDQo+ICsJCQkgICAgcGF5bG9hZC0+cG9ydC0+Y29ubmVjdG9yLT5uYW1lKTsN Cj4gKwkJcmV0dXJuIC1FSU87DQo+ICsJfQ0KPiANCj4gLQkJZHJtX2RiZ19rbXMobWdyLT5kZXYs ICJwYXlsb2FkICVkICVkXG4iLCBpLCBtZ3ItDQo+ID5wYXlsb2Fkc1tpXS5wYXlsb2FkX3N0YXRl KTsNCj4gLQkJaWYgKG1nci0+cGF5bG9hZHNbaV0ucGF5bG9hZF9zdGF0ZSA9PSBEUF9QQVlMT0FE X0xPQ0FMKQ0KPiB7DQo+IC0JCQlyZXQgPSBkcm1fZHBfY3JlYXRlX3BheWxvYWRfc3RlcDIobWdy LCBwb3J0LCBtZ3ItDQo+ID5wcm9wb3NlZF92Y3Bpc1tpXS0+dmNwaSwgJm1nci0+cGF5bG9hZHNb aV0pOw0KPiAtCQl9IGVsc2UgaWYgKG1nci0+cGF5bG9hZHNbaV0ucGF5bG9hZF9zdGF0ZSA9PQ0K PiBEUF9QQVlMT0FEX0RFTEVURV9MT0NBTCkgew0KPiAtCQkJcmV0ID0gZHJtX2RwX2Rlc3Ryb3lf cGF5bG9hZF9zdGVwMihtZ3IsIG1nci0NCj4gPnByb3Bvc2VkX3ZjcGlzW2ldLT52Y3BpLCAmbWdy LT5wYXlsb2Fkc1tpXSk7DQo+IC0JCX0NCj4gLQkJaWYgKHJldCkgew0KPiAtCQkJbXV0ZXhfdW5s b2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0JCQlyZXR1cm4gcmV0Ow0KPiAtCQl9DQo+ICsJ cmV0ID0gZHJtX2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAyKG1nciwgcGF5bG9hZCk7DQo+ICsJaWYg KHJldCA8IDApIHsNCj4gKwkJaWYgKCFwYXlsb2FkLT5kZWxldGUpDQo+ICsJCQlkcm1fZXJyKG1n ci0+ZGV2LCAiU3RlcCAyIG9mIGNyZWF0aW5nIE1TVCBwYXlsb2FkDQo+IGZvciAlcCBmYWlsZWQ6 ICVkXG4iLA0KPiArCQkJCXBheWxvYWQtPnBvcnQsIHJldCk7DQo+ICsJCWVsc2UNCj4gKwkJCWRy bV9kYmdfa21zKG1nci0+ZGV2LCAiU3RlcCAyIG9mIHJlbW92aW5nIE1TVA0KPiBwYXlsb2FkIGZv ciAlcCBmYWlsZWQ6ICVkXG4iLA0KPiArCQkJCSAgICBwYXlsb2FkLT5wb3J0LCByZXQpOw0KPiAg CX0NCj4gLQltdXRleF91bmxvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gLQlyZXR1cm4gMDsN Cj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICB9DQo+IC1FWFBPUlRfU1lNQk9MKGRybV9kcF91cGRh dGVfcGF5bG9hZF9wYXJ0Mik7DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9hZGRfcGF5bG9hZF9w YXJ0Mik7DQo+IA0KPiAgc3RhdGljIGludCBkcm1fZHBfc2VuZF9kcGNkX3JlYWQoc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICAJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQsDQo+IEBAIC0zNzEyLDcgKzM2MTAsNiBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9n eV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgYm9v bCBtcw0KPiAgCWludCByZXQgPSAwOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0 YiA9IE5VTEw7DQo+IA0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gIAlt dXRleF9sb2NrKCZtZ3ItPmxvY2spOw0KPiAgCWlmIChtc3Rfc3RhdGUgPT0gbWdyLT5tc3Rfc3Rh dGUpDQo+ICAJCWdvdG8gb3V0X3VubG9jazsNCj4gQEAgLTM3MjAsMTAgKzM2MTcsNiBAQCBpbnQg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwgYm9vbCBtcw0KPiAgCW1nci0+bXN0X3N0YXRlID0gbXN0X3N0YXRlOw0K PiAgCS8qIHNldCB0aGUgZGV2aWNlIGludG8gTVNUIG1vZGUgKi8NCj4gIAlpZiAobXN0X3N0YXRl KSB7DQo+IC0JCXN0cnVjdCBkcm1fZHBfcGF5bG9hZCByZXNldF9wYXk7DQo+IC0JCWludCBsYW5l X2NvdW50Ow0KPiAtCQlpbnQgbGlua19yYXRlOw0KPiAtDQo+ICAJCVdBUk5fT04obWdyLT5tc3Rf cHJpbWFyeSk7DQo+IA0KPiAgCQkvKiBnZXQgZHBjZCBpbmZvICovDQo+IEBAIC0zNzM0LDE2ICsz NjI3LDYgQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3Qoc3RydWN0DQo+IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMNCj4gIAkJCWdvdG8gb3V0X3VubG9j azsNCj4gIAkJfQ0KPiANCj4gLQkJbGFuZV9jb3VudCA9IG1pbl90KGludCwgbWdyLT5kcGNkWzJd ICYNCj4gRFBfTUFYX0xBTkVfQ09VTlRfTUFTSywgbWdyLT5tYXhfbGFuZV9jb3VudCk7DQo+IC0J CWxpbmtfcmF0ZSA9IG1pbl90KGludCwgZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKG1nci0N Cj4gPmRwY2RbMV0pLCBtZ3ItPm1heF9saW5rX3JhdGUpOw0KPiAtCQltZ3ItPnBibl9kaXYgPSBk cm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncobWdyLA0KPiAtCQkJCQkJCWxpbmtfcmF0ZSwNCj4gLQkJ CQkJCQlsYW5lX2NvdW50KTsNCj4gLQkJaWYgKG1nci0+cGJuX2RpdiA9PSAwKSB7DQo+IC0JCQly ZXQgPSAtRUlOVkFMOw0KPiAtCQkJZ290byBvdXRfdW5sb2NrOw0KPiAtCQl9DQo+IC0NCj4gIAkJ LyogYWRkIGluaXRpYWwgYnJhbmNoIGRldmljZSBhdCBMQ1QgMSAqLw0KPiAgCQltc3RiID0gZHJt X2RwX2FkZF9tc3RfYnJhbmNoX2RldmljZSgxLCBOVUxMKTsNCj4gIAkJaWYgKG1zdGIgPT0gTlVM TCkgew0KPiBAQCAtMzc2Myw5ICszNjQ2LDggQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy X3NldF9tc3Qoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMN Cj4gIAkJaWYgKHJldCA8IDApDQo+ICAJCQlnb3RvIG91dF91bmxvY2s7DQo+IA0KPiAtCQlyZXNl dF9wYXkuc3RhcnRfc2xvdCA9IDA7DQo+IC0JCXJlc2V0X3BheS5udW1fc2xvdHMgPSAweDNmOw0K PiAtCQlkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKG1nciwgMCwgJnJlc2V0X3BheSk7DQo+ICsJ CS8qIFdyaXRlIHJlc2V0IHBheWxvYWQgKi8NCj4gKwkJZHJtX2RwX2RwY2Rfd3JpdGVfcGF5bG9h ZChtZ3IsIDAsIDAsIDB4M2YpOw0KPiANCj4gIAkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwg Jm1nci0+d29yayk7DQo+IA0KPiBAQCAtMzc3NywxOSArMzY1OSwxMSBAQCBpbnQgZHJtX2RwX21z dF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwgYm9vbCBtcw0KPiAgCQkvKiB0aGlzIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2UgaXMgZ29u ZSAqLw0KPiAgCQlkcm1fZHBfZHBjZF93cml0ZWIobWdyLT5hdXgsIERQX01TVE1fQ1RSTCwgMCk7 DQo+ICAJCXJldCA9IDA7DQo+IC0JCW1lbXNldChtZ3ItPnBheWxvYWRzLCAwLA0KPiAtCQkgICAg ICAgbWdyLT5tYXhfcGF5bG9hZHMgKiBzaXplb2YobWdyLT5wYXlsb2Fkc1swXSkpOw0KPiAtCQlt ZW1zZXQobWdyLT5wcm9wb3NlZF92Y3BpcywgMCwNCj4gLQkJICAgICAgIG1nci0+bWF4X3BheWxv YWRzICogc2l6ZW9mKG1nci0+cHJvcG9zZWRfdmNwaXNbMF0pKTsNCj4gLQkJbWdyLT5wYXlsb2Fk X21hc2sgPSAwOw0KPiAtCQlzZXRfYml0KDAsICZtZ3ItPnBheWxvYWRfbWFzayk7DQo+IC0JCW1n ci0+dmNwaV9tYXNrID0gMDsNCj4gIAkJbWdyLT5wYXlsb2FkX2lkX3RhYmxlX2NsZWFyZWQgPSBm YWxzZTsNCj4gIAl9DQo+IA0KPiAgb3V0X3VubG9jazoNCj4gIAltdXRleF91bmxvY2soJm1nci0+ bG9jayk7DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+ICAJaWYgKG1z dGIpDQo+ICAJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIobXN0Yik7DQo+ICAJcmV0dXJu IHJldDsNCj4gQEAgLTQzMTAsNjIgKzQxODQsMTggQEAgc3RydWN0IGVkaWQgKmRybV9kcF9tc3Rf Z2V0X2VkaWQoc3RydWN0DQo+IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRybV9k cF8NCj4gIH0NCj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9nZXRfZWRpZCk7DQo+IA0KPiAt LyoqDQo+IC0gKiBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIHRpbWUgc2xvdHMgZm9y IHRoaXMgUEJOIHZhbHVlDQo+IC0gKiBAbWdyOiBtYW5hZ2VyIHRvIHVzZQ0KPiAtICogQHBibjog cGF5bG9hZCBiYW5kd2lkdGggdG8gY29udmVydCBpbnRvIHNsb3RzLg0KPiAtICoNCj4gLSAqIENh bGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHRpbWUgc2xvdHMgdGhhdCB3aWxsIGJlIHJlcXVpcmVkIGZv ciB0aGUgZ2l2ZW4gUEJODQo+IC0gKiB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVk LCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGF0b21pYw0KPiAtICogZHJpdmVycy4NCj4gLSAq DQo+IC0gKiBSRVRVUk5TOg0KPiAtICogVGhlIHRvdGFsIHNsb3RzIHJlcXVpcmVkIGZvciB0aGlz IHBvcnQsIG9yIGVycm9yLg0KPiAtICovDQo+IC1pbnQgZHJtX2RwX2ZpbmRfdmNwaV9zbG90cyhz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgIGludCBwYm4pDQo+ IC17DQo+IC0JaW50IG51bV9zbG90czsNCj4gLQ0KPiAtCW51bV9zbG90cyA9IERJVl9ST1VORF9V UChwYm4sIG1nci0+cGJuX2Rpdik7DQo+IC0NCj4gLQkvKiBtYXguIHRpbWUgc2xvdHMgLSBvbmUg c2xvdCBmb3IgTVRQIGhlYWRlciAqLw0KPiAtCWlmIChudW1fc2xvdHMgPiA2MykNCj4gLQkJcmV0 dXJuIC1FTk9TUEM7DQo+IC0JcmV0dXJuIG51bV9zbG90czsNCj4gLX0NCj4gLUVYUE9SVF9TWU1C T0woZHJtX2RwX2ZpbmRfdmNwaV9zbG90cyk7DQo+IC0NCj4gLXN0YXRpYyBpbnQgZHJtX2RwX2lu aXRfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgICBz dHJ1Y3QgZHJtX2RwX3ZjcGkgKnZjcGksIGludCBwYm4sIGludCBzbG90cykNCj4gLXsNCj4gLQlp bnQgcmV0Ow0KPiAtDQo+IC0JdmNwaS0+cGJuID0gcGJuOw0KPiAtCXZjcGktPmFsaWduZWRfcGJu ID0gc2xvdHMgKiBtZ3ItPnBibl9kaXY7DQo+IC0JdmNwaS0+bnVtX3Nsb3RzID0gc2xvdHM7DQo+ IC0NCj4gLQlyZXQgPSBkcm1fZHBfbXN0X2Fzc2lnbl9wYXlsb2FkX2lkKG1nciwgdmNwaSk7DQo+ IC0JaWYgKHJldCA8IDApDQo+IC0JCXJldHVybiByZXQ7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+ IC0NCj4gIC8qKg0KPiAgICogZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoKSAtIEZpbmQg YW5kIGFkZCB0aW1lIHNsb3RzIHRvIHRoZSBzdGF0ZQ0KPiAgICogQHN0YXRlOiBnbG9iYWwgYXRv bWljIHN0YXRlDQo+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQN Cj4gICAqIEBwb3J0OiBwb3J0IHRvIGZpbmQgdGltZSBzbG90cyBmb3INCj4gICAqIEBwYm46IGJh bmR3aWR0aCByZXF1aXJlZCBmb3IgdGhlIG1vZGUgaW4gUEJODQo+IC0gKiBAcGJuX2RpdjogZGl2 aWRlciBmb3IgRFNDIG1vZGUgdGhhdCB0YWtlcyBGRUMgaW50byBhY2NvdW50DQo+ICAgKg0KPiAt ICogQWxsb2NhdGVzIHRpbWUgc2xvdHMgdG8gQHBvcnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMg dGltZXNsb3QgYWxsb2NhdGlvbnMgaXQNCj4gLSAqIG1heSBoYXZlIGhhZC4gQW55IGF0b21pYyBk cml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzDQo+IGZ1bmN0aW9uDQo+IC0g KiBpbiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxi YWNrIHRvIGNoYW5nZQ0KPiB0aGUNCj4gLSAqIGN1cnJlbnQgdGltZXNsb3QgYWxsb2NhdGlvbiBm b3IgdGhlIG5ldyBzdGF0ZSwgYnV0IG9ubHkgd2hlbg0KPiAtICogJmRybV9jcnRjX3N0YXRlLm1v ZGVfY2hhbmdlZCBvcg0KPiAmZHJtX2NydGNfc3RhdGUuY29ubmVjdG9yc19jaGFuZ2VkIGlzIHNl dA0KPiAtICogdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UgYXBwbGljYXRp b25zIHRoYXQgc3RpbGwgdXNlIHRoZQ0KPiAtICogbGVnYWN5IG1vZGVzZXR0aW5nIFVBUEkuDQo+ ICsgKiBBbGxvY2F0ZXMgdGltZSBzbG90cyB0byBAcG9ydCwgcmVwbGFjaW5nIGFueSBwcmV2aW91 cyB0aW1lIHNsb3QgYWxsb2NhdGlvbnMNCj4gaXQgbWF5DQo+ICsgKiBoYXZlIGhhZC4gQW55IGF0 b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGlu DQo+ICsgKiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNh bGxiYWNrDQo+IHVuY29uZGl0aW9uYWxseSB0bw0KPiArICogY2hhbmdlIHRoZSBjdXJyZW50IHRp bWUgc2xvdCBhbGxvY2F0aW9uIGZvciB0aGUgbmV3IHN0YXRlLCBhbmQgZW5zdXJlIHRoZQ0KPiBN U1QNCj4gKyAqIGF0b21pYyBzdGF0ZSBpcyBhZGRlZCB3aGVuZXZlciB0aGUgc3RhdGUgb2YgcGF5 bG9hZHMgaW4gdGhlIHRvcG9sb2d5DQo+IGNoYW5nZXMuDQo+ICAgKg0KPiAgICogQWxsb2NhdGlv bnMgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gYXJlIG5vdCBjaGVja2VkIGFnYWluc3QgdGhlIGJhbmR3 aWR0aA0KPiAgICogcmVzdHJhaW50cyBvZiBAbWdyIHVudGlsIHRoZSBkcml2ZXIgY2FsbHMgZHJt X2RwX21zdF9hdG9taWNfY2hlY2soKS4NCj4gQEAgLTQzODQsOCArNDIxNCw3IEBAIHN0YXRpYyBp bnQgZHJtX2RwX2luaXRfdmNwaShzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1n ciwNCj4gICAqLw0KPiAgaW50IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X21nciAqbWdyLA0KPiAtCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50 IHBibiwNCj4gLQkJCQkgIGludCBwYm5fZGl2KQ0KPiArCQkJCSAgc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCwgaW50IHBibikNCj4gIHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3Bh eWxvYWQgKnBheWxvYWQgPSBOVUxMOw0KPiBAQCAtNDQxOCwxMCArNDI0Nyw3IEBAIGludCBkcm1f ZHBfYXRvbWljX2ZpbmRfdGltZV9zbG90cyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUsDQo+ICAJCX0NCj4gIAl9DQo+IA0KPiAtCWlmIChwYm5fZGl2IDw9IDApDQo+IC0JCXBibl9k aXYgPSBtZ3ItPnBibl9kaXY7DQo+IC0NCj4gLQlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJu LCBwYm5fZGl2KTsNCj4gKwlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCB0b3BvbG9neV9z dGF0ZS0+cGJuX2Rpdik7DQo+IA0KPiAgCWRybV9kYmdfYXRvbWljKG1nci0+ZGV2LCAiW0NPTk5F Q1RPUjolZDolc10gW01TVCBQT1JUOiVwXQ0KPiBUVSAlZCAtPiAlZFxuIiwNCj4gIAkJICAgICAg IHBvcnQtPmNvbm5lY3Rvci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLA0KPiBAQCAt NDQzMCw3ICs0MjU2LDcgQEAgaW50IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0cnVj dA0KPiBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJICAgICAgIHBvcnQtPmNvbm5lY3Rv ci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLA0KPiAgCQkgICAgICAgcG9ydCwgcHJl dl9idywgcGJuKTsNCj4gDQo+IC0JLyogQWRkIHRoZSBuZXcgYWxsb2NhdGlvbiB0byB0aGUgc3Rh dGUgKi8NCj4gKwkvKiBBZGQgdGhlIG5ldyBhbGxvY2F0aW9uIHRvIHRoZSBzdGF0ZSwgbm90ZSB0 aGUgVkNQSSBpc24ndCBhc3NpZ25lZA0KPiB1bnRpbCB0aGUgZW5kICovDQo+ICAJaWYgKCFwYXls b2FkKSB7DQo+ICAJCXBheWxvYWQgPSBremFsbG9jKHNpemVvZigqcGF5bG9hZCksIEdGUF9LRVJO RUwpOw0KPiAgCQlpZiAoIXBheWxvYWQpDQo+IEBAIC00NDM4LDYgKzQyNjQsNyBAQCBpbnQgZHJt X2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RydWN0DQo+IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLA0KPiANCj4gIAkJZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2MocG9ydCk7DQo+ICAJCXBh eWxvYWQtPnBvcnQgPSBwb3J0Ow0KPiArCQlwYXlsb2FkLT52Y19zdGFydF9zbG90ID0gLTE7DQo+ ICAJCWxpc3RfYWRkKCZwYXlsb2FkLT5uZXh0LCAmdG9wb2xvZ3lfc3RhdGUtPnBheWxvYWRzKTsN Cj4gIAl9DQo+ICAJcGF5bG9hZC0+dGltZV9zbG90cyA9IHJlcV9zbG90czsNCj4gQEAgLTQ0NTQs MTAgKzQyODEsMTIgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdGltZV9z bG90cyk7DQo+ICAgKiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0aGUgdGltZSBzbG90cyBm cm9tDQo+ICAgKg0KPiAgICogUmVsZWFzZXMgYW55IHRpbWUgc2xvdHMgdGhhdCBoYXZlIGJlZW4g YWxsb2NhdGVkIHRvIGEgcG9ydCBpbiB0aGUgYXRvbWljDQo+IC0gKiBzdGF0ZS4gQW55IGF0b21p YyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluDQo+ IC0gKiB0aGVpciAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MuYXRvbWljX2NoZWNrKCkgY2Fs bGJhY2sgd2hlbiB0aGUNCj4gLSAqIGNvbm5lY3RvciB3aWxsIG5vIGxvbmdlciBoYXZlIFZDUEkg YWxsb2NhdGVkIChlLmcuIGJlY2F1c2UgaXRzIENSVEMgd2FzDQo+IC0gKiByZW1vdmVkKSB3aGVu IGl0IGhhZCBWQ1BJIGFsbG9jYXRlZCBpbiB0aGUgcHJldmlvdXMgYXRvbWljIHN0YXRlLg0KPiAr ICogc3RhdGUuIEFueSBhdG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNhbGwg dGhpcyBmdW5jdGlvbg0KPiArICogdW5jb25kaXRpb25hbGx5IGluIHRoZWlyICZkcm1fY29ubmVj dG9yX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKQ0KPiBjYWxsYmFjay4NCj4gKyAqIFRoaXMg aGVscGVyIHdpbGwgY2hlY2sgd2hldGhlciB0aW1lIHNsb3RzIHdvdWxkIGJlIHJlbGVhc2VkIGJ5 IHRoZSBuZXcNCj4gc3RhdGUgYW5kDQo+ICsgKiByZXNwb25kIGFjY29yZGluZ2x5LCBhbG9uZyB3 aXRoIGVuc3VyaW5nIHRoZSBNU1Qgc3RhdGUgaXMgYWx3YXlzIGFkZGVkDQo+IHRvIHRoZQ0KPiAr ICogYXRvbWljIHN0YXRlIHdoZW5ldmVyIGEgbmV3IHN0YXRlIHdvdWxkIG1vZGlmeSB0aGUgc3Rh dGUgb2YgcGF5bG9hZHMNCj4gb24gdGhlDQo+ICsgKiB0b3BvbG9neS4NCj4gICAqDQo+ICAgKiBJ dCBpcyBPSyB0byBjYWxsIHRoaXMgZXZlbiBpZiBAcG9ydCBoYXMgYmVlbiByZW1vdmVkIGZyb20g dGhlIHN5c3RlbS4NCj4gICAqIEFkZGl0aW9uYWxseSwgaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1 bmN0aW9uIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lDQo+IEBAIC00NTE5LDYgKzQzNDgsNyBA QCBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3RpbWVfc2xvdHMoc3RydWN0DQo+IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlLA0KPiAgCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3J0KTsN Cj4gIAkJcGF5bG9hZC0+cGJuID0gMDsNCj4gIAkJcGF5bG9hZC0+ZGVsZXRlID0gdHJ1ZTsNCj4g KwkJdG9wb2xvZ3lfc3RhdGUtPnBheWxvYWRfbWFzayAmPSB+QklUKHBheWxvYWQtPnZjcGkgLSAx KTsNCj4gIAl9DQo+IA0KPiAgCXJldHVybiAwOw0KPiBAQCAtNDU2OSw3ICs0Mzk5LDggQEAgaW50 IGRybV9kcF9tc3RfYXRvbWljX3NldHVwX2NvbW1pdChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpDQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfYXRvbWljX3NldHVwX2NvbW1p dCk7DQo+IA0KPiAgLyoqDQo+IC0gKiBkcm1fZHBfbXN0X2F0b21pY193YWl0X2Zvcl9kZXBlbmRl bmNpZXMoKSAtIFdhaXQgZm9yIGFsbCBwZW5kaW5nDQo+IGNvbW1pdHMgb24gTVNUIHRvcG9sb2dp ZXMNCj4gKyAqIGRybV9kcF9tc3RfYXRvbWljX3dhaXRfZm9yX2RlcGVuZGVuY2llcygpIC0gV2Fp dCBmb3IgYWxsIHBlbmRpbmcNCj4gY29tbWl0cyBvbiBNU1QgdG9wb2xvZ2llcywNCj4gKyAqIHBy ZXBhcmUgbmV3IE1TVCBzdGF0ZSBmb3IgY29tbWl0DQo+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9t aWMgc3RhdGUNCj4gICAqDQo+ICAgKiBHb2VzIHRocm91Z2ggYW55IE1TVCB0b3BvbG9naWVzIGlu IHRoaXMgYXRvbWljIHN0YXRlLCBhbmQgd2FpdHMgZm9yIGFueQ0KPiBwZW5kaW5nIGNvbW1pdHMg d2hpY2gNCj4gQEAgLTQ1ODcsMTcgKzQ0MTgsMzAgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBf bXN0X2F0b21pY19zZXR1cF9jb21taXQpOw0KPiAgICovDQo+ICB2b2lkIGRybV9kcF9tc3RfYXRv bWljX3dhaXRfZm9yX2RlcGVuZGVuY2llcyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUpDQo+ICB7DQo+IC0Jc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm9sZF9tc3Rf c3RhdGU7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm9sZF9tc3Rfc3Rh dGUsDQo+ICpuZXdfbXN0X3N0YXRlOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n ciAqbWdyOw0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICpvbGRfcGF5bG9h ZCwgKm5ld19wYXlsb2FkOw0KPiAgCWludCBpLCBqLCByZXQ7DQo+IA0KPiAtCWZvcl9lYWNoX29s ZF9tc3RfbWdyX2luX3N0YXRlKHN0YXRlLCBtZ3IsIG9sZF9tc3Rfc3RhdGUsIGkpIHsNCj4gKwlm b3JfZWFjaF9vbGRuZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBvbGRfbXN0X3N0YXRl LA0KPiBuZXdfbXN0X3N0YXRlLCBpKSB7DQo+ICAJCWZvciAoaiA9IDA7IGogPCBvbGRfbXN0X3N0 YXRlLT5udW1fY29tbWl0X2RlcHM7IGorKykgew0KPiAgCQkJcmV0ID0gZHJtX2NydGNfY29tbWl0 X3dhaXQob2xkX21zdF9zdGF0ZS0NCj4gPmNvbW1pdF9kZXBzW2pdKTsNCj4gIAkJCWlmIChyZXQg PCAwKQ0KPiAgCQkJCWRybV9lcnIoc3RhdGUtPmRldiwgIkZhaWxlZCB0byB3YWl0IGZvciAlczoN Cj4gJWRcbiIsDQo+ICAJCQkJCW9sZF9tc3Rfc3RhdGUtPmNvbW1pdF9kZXBzW2pdLQ0KPiA+Y3J0 Yy0+bmFtZSwgcmV0KTsNCj4gIAkJfQ0KPiArDQo+ICsJCS8qIE5vdyB0aGF0IHByZXZpb3VzIHN0 YXRlIGlzIGNvbW1pdHRlZCwgaXQncyBzYWZlIHRvIGNvcHkNCj4gb3ZlciB0aGUgc3RhcnQgc2xv dA0KPiArCQkgKiBhc3NpZ25tZW50cw0KPiArCQkgKi8NCj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRy eShvbGRfcGF5bG9hZCwgJm9sZF9tc3Rfc3RhdGUtPnBheWxvYWRzLA0KPiBuZXh0KSB7DQo+ICsJ CQlpZiAob2xkX3BheWxvYWQtPmRlbGV0ZSkNCj4gKwkJCQljb250aW51ZTsNCj4gKw0KPiArCQkJ bmV3X3BheWxvYWQgPQ0KPiBkcm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShuZXdfbXN0 X3N0YXRlLA0KPiArDQo+IG9sZF9wYXlsb2FkLT5wb3J0KTsNCj4gKwkJCW5ld19wYXlsb2FkLT52 Y19zdGFydF9zbG90ID0gb2xkX3BheWxvYWQtDQo+ID52Y19zdGFydF9zbG90Ow0KPiArCQl9DQo+ ICAJfQ0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2F0b21pY193YWl0X2Zvcl9k ZXBlbmRlbmNpZXMpOw0KPiBAQCAtNDY4MiwxMTAgKzQ1MjYsOCBAQCB2b2lkIGRybV9kcF9tc3Rf dXBkYXRlX3Nsb3RzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3Rh dGUsIHVpbnQ4Xw0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X3VwZGF0ZV9zbG90 cyk7DQo+IA0KPiAtLyoqDQo+IC0gKiBkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkoKSAtIEFsbG9j YXRlIGEgdmlydHVhbCBjaGFubmVsDQo+IC0gKiBAbWdyOiBtYW5hZ2VyIGZvciB0aGlzIHBvcnQN Cj4gLSAqIEBwb3J0OiBwb3J0IHRvIGFsbG9jYXRlIGEgdmlydHVhbCBjaGFubmVsIGZvci4NCj4g LSAqIEBwYm46IHBheWxvYWQgYmFuZHdpZHRoIG51bWJlciB0byByZXF1ZXN0DQo+IC0gKiBAc2xv dHM6IHJldHVybmVkIG51bWJlciBvZiBzbG90cyBmb3IgdGhpcyBQQk4uDQo+IC0gKi8NCj4gLWJv b2wgZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n ciAqbWdyLA0KPiAtCQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBi biwgaW50IHNsb3RzKQ0KPiAtew0KPiAtCWludCByZXQ7DQo+IC0NCj4gLQlpZiAoc2xvdHMgPCAw KQ0KPiAtCQlyZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQlwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfcG9ydF92YWxpZGF0ZWQobWdyLCBwb3J0KTsNCj4gLQlpZiAoIXBvcnQpDQo+IC0JCXJl dHVybiBmYWxzZTsNCj4gLQ0KPiAtCWlmIChwb3J0LT52Y3BpLnZjcGkgPiAwKSB7DQo+IC0JCWRy bV9kYmdfa21zKG1nci0+ZGV2LA0KPiAtCQkJICAgICJwYXlsb2FkOiB2Y3BpICVkIGFscmVhZHkg YWxsb2NhdGVkIGZvciBwYm4gJWQgLQ0KPiByZXF1ZXN0ZWQgcGJuICVkXG4iLA0KPiAtCQkJICAg IHBvcnQtPnZjcGkudmNwaSwgcG9ydC0+dmNwaS5wYm4sIHBibik7DQo+IC0JCWlmIChwYm4gPT0g cG9ydC0+dmNwaS5wYm4pIHsNCj4gLQkJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9y dCk7DQo+IC0JCQlyZXR1cm4gdHJ1ZTsNCj4gLQkJfQ0KPiAtCX0NCj4gLQ0KPiAtCXJldCA9IGRy bV9kcF9pbml0X3ZjcGkobWdyLCAmcG9ydC0+dmNwaSwgcGJuLCBzbG90cyk7DQo+IC0JaWYgKHJl dCkgew0KPiAtCQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgImZhaWxlZCB0byBpbml0IHRpbWUgc2xv dHM9JWQNCj4gcmV0PSVkXG4iLA0KPiAtCQkJICAgIERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJu X2RpdiksIHJldCk7DQo+IC0JCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7DQo+ IC0JCWdvdG8gb3V0Ow0KPiAtCX0NCj4gLQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgImluaXRpbmcg dmNwaSBmb3IgcGJuPSVkIHNsb3RzPSVkXG4iLCBwYm4sDQo+IHBvcnQtPnZjcGkubnVtX3Nsb3Rz KTsNCj4gLQ0KPiAtCS8qIEtlZXAgcG9ydCBhbGxvY2F0ZWQgdW50aWwgaXRzIHBheWxvYWQgaGFz IGJlZW4gcmVtb3ZlZCAqLw0KPiAtCWRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKHBvcnQpOw0K PiAtCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7DQo+IC0JcmV0dXJuIHRydWU7 DQo+IC1vdXQ6DQo+IC0JcmV0dXJuIGZhbHNlOw0KPiAtfQ0KPiAtRVhQT1JUX1NZTUJPTChkcm1f ZHBfbXN0X2FsbG9jYXRlX3ZjcGkpOw0KPiAtDQo+IC1pbnQgZHJtX2RwX21zdF9nZXRfdmNwaV9z bG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gc3RydWN0IGRybV9k cF9tc3RfcG9ydCAqcG9ydCkNCj4gLXsNCj4gLQlpbnQgc2xvdHMgPSAwOw0KPiAtDQo+IC0JcG9y dCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKG1nciwgcG9ydCk7DQo+ IC0JaWYgKCFwb3J0KQ0KPiAtCQlyZXR1cm4gc2xvdHM7DQo+IC0NCj4gLQlzbG90cyA9IHBvcnQt PnZjcGkubnVtX3Nsb3RzOw0KPiAtCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7 DQo+IC0JcmV0dXJuIHNsb3RzOw0KPiAtfQ0KPiAtRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2dl dF92Y3BpX3Nsb3RzKTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBkcm1fZHBfbXN0X3Jlc2V0X3ZjcGlf c2xvdHMoKSAtIFJlc2V0IG51bWJlciBvZiBzbG90cyB0byAwIGZvciBWQ1BJDQo+IC0gKiBAbWdy OiBtYW5hZ2VyIGZvciB0aGlzIHBvcnQNCj4gLSAqIEBwb3J0OiB1bnZlcmlmaWVkIHBvaW50ZXIg dG8gYSBwb3J0Lg0KPiAtICoNCj4gLSAqIFRoaXMganVzdCByZXNldHMgdGhlIG51bWJlciBvZiBz bG90cyBmb3IgdGhlIHBvcnRzIFZDUEkgZm9yIGxhdGVyDQo+IHByb2dyYW1taW5nLg0KPiAtICov DQo+IC12b2lkIGRybV9kcF9tc3RfcmVzZXRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3INCj4gKm1nciwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkNCj4gLXsN Cj4gLQkvKg0KPiAtCSAqIEEgcG9ydCB3aXRoIFZDUEkgd2lsbCByZW1haW4gYWxsb2NhdGVkIHVu dGlsIGl0cyBWQ1BJIGlzDQo+IC0JICogcmVsZWFzZWQsIG5vIHZlcmlmaWVkIHJlZiBuZWVkZWQN Cj4gLQkgKi8NCj4gLQ0KPiAtCXBvcnQtPnZjcGkubnVtX3Nsb3RzID0gMDsNCj4gLX0NCj4gLUVY UE9SVF9TWU1CT0woZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKTsNCj4gLQ0KPiAtLyoqDQo+ IC0gKiBkcm1fZHBfbXN0X2RlYWxsb2NhdGVfdmNwaSgpIC0gZGVhbGxvY2F0ZSBhIFZDUEkNCj4g LSAqIEBtZ3I6IG1hbmFnZXIgZm9yIHRoaXMgcG9ydA0KPiAtICogQHBvcnQ6IHBvcnQgdG8gZGVh bGxvY2F0ZSB2Y3BpIGZvcg0KPiAtICoNCj4gLSAqIFRoaXMgY2FuIGJlIGNhbGxlZCB1bmNvbmRp dGlvbmFsbHksIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcg0KPiAtICogZHJtX2RwX21zdF9hbGxvY2F0 ZV92Y3BpKCkgc3VjY2VlZGVkIG9yIG5vdC4NCj4gLSAqLw0KPiAtdm9pZCBkcm1fZHBfbXN0X2Rl YWxsb2NhdGVfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJ CQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQ0KPiAtew0KPiAtCWlmICghcG9ydC0+dmNw aS52Y3BpKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlkcm1fZHBfbXN0X3B1dF9wYXlsb2FkX2lk KG1nciwgcG9ydC0+dmNwaS52Y3BpKTsNCj4gLQlwb3J0LT52Y3BpLm51bV9zbG90cyA9IDA7DQo+ IC0JcG9ydC0+dmNwaS5wYm4gPSAwOw0KPiAtCXBvcnQtPnZjcGkuYWxpZ25lZF9wYm4gPSAwOw0K PiAtCXBvcnQtPnZjcGkudmNwaSA9IDA7DQo+IC0JZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2Mo cG9ydCk7DQo+IC19DQo+IC1FWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3Bp KTsNCj4gLQ0KPiAgc3RhdGljIGludCBkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X21ncg0KPiAqbWdyLA0KPiAtCQkJCSAgICAgaW50IGlkLCBzdHJ1 Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQpDQo+ICsJCQkJICAgICBpbnQgaWQsIHU4IHN0YXJ0 X3Nsb3QsIHU4IG51bV9zbG90cykNCj4gIHsNCj4gIAl1OCBwYXlsb2FkX2FsbG9jWzNdLCBzdGF0 dXM7DQo+ICAJaW50IHJldDsNCj4gQEAgLTQ3OTUsOCArNDUzNyw4IEBAIHN0YXRpYyBpbnQgZHJt X2RwX2RwY2Rfd3JpdGVfcGF5bG9hZChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwNCj4gIAkJCSAgIERQX1BBWUxPQURfVEFCTEVfVVBEQVRFRCk7DQo+IA0KPiAgCXBheWxv YWRfYWxsb2NbMF0gPSBpZDsNCj4gLQlwYXlsb2FkX2FsbG9jWzFdID0gcGF5bG9hZC0+c3RhcnRf c2xvdDsNCj4gLQlwYXlsb2FkX2FsbG9jWzJdID0gcGF5bG9hZC0+bnVtX3Nsb3RzOw0KPiArCXBh eWxvYWRfYWxsb2NbMV0gPSBzdGFydF9zbG90Ow0KPiArCXBheWxvYWRfYWxsb2NbMl0gPSBudW1f c2xvdHM7DQo+IA0KPiAgCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlKG1nci0+YXV4LCBEUF9QQVlM T0FEX0FMTE9DQVRFX1NFVCwNCj4gcGF5bG9hZF9hbGxvYywgMyk7DQo+ICAJaWYgKHJldCAhPSAz KSB7DQo+IEBAIC01MDExLDggKzQ3NTMsOSBAQCBzdGF0aWMgdm9pZCBmZXRjaF9tb25pdG9yX25h bWUoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICB2b2lkIGRybV9k cF9tc3RfZHVtcF90b3BvbG9neShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sDQo+ICAJCQkgICAgICBzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncikNCj4gIHsNCj4gLQlpbnQgaTsNCj4gLQlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Ow0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICpzdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAq cGF5bG9hZDsNCj4gKwlpbnQgaSwgcmV0Ow0KPiANCj4gIAltdXRleF9sb2NrKCZtZ3ItPmxvY2sp Ow0KPiAgCWlmIChtZ3ItPm1zdF9wcmltYXJ5KQ0KPiBAQCAtNTAyMSwzNiArNDc2NCwzNSBAQCB2 b2lkIGRybV9kcF9tc3RfZHVtcF90b3BvbG9neShzdHJ1Y3QNCj4gc2VxX2ZpbGUgKm0sDQo+ICAJ LyogZHVtcCBWQ1BJcyAqLw0KPiAgCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsNCj4gDQo+IC0J bXV0ZXhfbG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiAtCXNlcV9wcmludGYobSwgIlxuKioq IFZDUEkgSW5mbyAqKipcbiIpOw0KPiAtCXNlcV9wcmludGYobSwgInBheWxvYWRfbWFzazogJWx4 LCB2Y3BpX21hc2s6ICVseCwgbWF4X3BheWxvYWRzOg0KPiAlZFxuIiwgbWdyLT5wYXlsb2FkX21h c2ssIG1nci0+dmNwaV9tYXNrLCBtZ3ItPm1heF9wYXlsb2Fkcyk7DQo+ICsJcmV0ID0gZHJtX21v ZGVzZXRfbG9ja19zaW5nbGVfaW50ZXJydXB0aWJsZSgmbWdyLT5iYXNlLmxvY2spOw0KPiArCWlm IChyZXQgPCAwKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlzdGF0ZSA9IHRvX2RybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUobWdyLT5iYXNlLnN0YXRlKTsNCj4gKwlzZXFfcHJpbnRmKG0sICJcbioq KiBBdG9taWMgc3RhdGUgaW5mbyAqKipcbiIpOw0KPiArCXNlcV9wcmludGYobSwgInBheWxvYWRf bWFzazogJXgsIG1heF9wYXlsb2FkczogJWQsIHN0YXJ0X3Nsb3Q6ICV1LA0KPiBwYm5fZGl2OiAl ZFxuIiwNCj4gKwkJICAgc3RhdGUtPnBheWxvYWRfbWFzaywgbWdyLT5tYXhfcGF5bG9hZHMsIHN0 YXRlLQ0KPiA+c3RhcnRfc2xvdCwgc3RhdGUtPnBibl9kaXYpOw0KPiANCj4gLQlzZXFfcHJpbnRm KG0sICJcbnwgICBpZHggICB8ICBwb3J0ICMgfCAgdmNwX2lkIHwgIyBzbG90cyB8ICAgICBzaW5r IG5hbWUNCj4gfFxuIik7DQo+ICsJc2VxX3ByaW50ZihtLCAiXG58IGlkeCB8IHBvcnQgfCB2Y3Bp IHwgc2xvdHMgfCBwYm4gfCBkc2MgfCAgICAgc2luayBuYW1lDQo+IHxcbiIpOw0KPiAgCWZvciAo aSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0JCWlmIChtZ3ItPnByb3Bv c2VkX3ZjcGlzW2ldKSB7DQo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkocGF5bG9hZCwgJnN0YXRl LT5wYXlsb2FkcywgbmV4dCkgew0KPiAgCQkJY2hhciBuYW1lWzE0XTsNCj4gDQo+IC0JCQlwb3J0 ID0gY29udGFpbmVyX29mKG1nci0+cHJvcG9zZWRfdmNwaXNbaV0sIHN0cnVjdA0KPiBkcm1fZHBf bXN0X3BvcnQsIHZjcGkpOw0KPiAtCQkJZmV0Y2hfbW9uaXRvcl9uYW1lKG1nciwgcG9ydCwgbmFt ZSwNCj4gc2l6ZW9mKG5hbWUpKTsNCj4gLQkJCXNlcV9wcmludGYobSwgIiUxMGQlMTBkJTEwZCUx MGQlMjBzXG4iLA0KPiArCQkJaWYgKHBheWxvYWQtPnZjcGkgIT0gaSB8fCBwYXlsb2FkLT5kZWxl dGUpDQo+ICsJCQkJY29udGludWU7DQo+ICsNCj4gKwkJCWZldGNoX21vbml0b3JfbmFtZShtZ3Is IHBheWxvYWQtPnBvcnQsIG5hbWUsDQo+IHNpemVvZihuYW1lKSk7DQo+ICsJCQlzZXFfcHJpbnRm KG0sICIgJTVkICU2ZCAlNmQgJTAyZCAtICUwMmQgJTVkICU1cw0KPiAlMTlzXG4iLA0KPiAgCQkJ CSAgIGksDQo+IC0JCQkJICAgcG9ydC0+cG9ydF9udW0sDQo+IC0JCQkJICAgcG9ydC0+dmNwaS52 Y3BpLA0KPiAtCQkJCSAgIHBvcnQtPnZjcGkubnVtX3Nsb3RzLA0KPiArCQkJCSAgIHBheWxvYWQt PnBvcnQtPnBvcnRfbnVtLA0KPiArCQkJCSAgIHBheWxvYWQtPnZjcGksDQo+ICsJCQkJICAgcGF5 bG9hZC0+dmNfc3RhcnRfc2xvdCwNCj4gKwkJCQkgICBwYXlsb2FkLT52Y19zdGFydF9zbG90ICsg cGF5bG9hZC0NCj4gPnRpbWVfc2xvdHMgLSAxLA0KPiArCQkJCSAgIHBheWxvYWQtPnBibiwNCj4g KwkJCQkgICBwYXlsb2FkLT5kc2NfZW5hYmxlZCA/ICJZIiA6ICJOIiwNCj4gIAkJCQkgICAoKm5h bWUgIT0gMCkgPyBuYW1lIDogIlVua25vd24iKTsNCj4gLQkJfSBlbHNlDQo+IC0JCQlzZXFfcHJp bnRmKG0sICIlNmQgLSBVbnVzZWRcbiIsIGkpOw0KPiAtCX0NCj4gLQlzZXFfcHJpbnRmKG0sICJc bioqKiBQYXlsb2FkIEluZm8gKioqXG4iKTsNCj4gLQlzZXFfcHJpbnRmKG0sICJ8ICAgaWR4ICAg fCAgc3RhdGUgIHwgIHN0YXJ0IHNsb3QgIHwgIyBzbG90cyB8XG4iKTsNCj4gLQlmb3IgKGkgPSAw OyBpIDwgbWdyLT5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAtCQlzZXFfcHJpbnRmKG0sICIlMTBk JTEwZCUxNWQlMTBkXG4iLA0KPiAtCQkJICAgaSwNCj4gLQkJCSAgIG1nci0+cGF5bG9hZHNbaV0u cGF5bG9hZF9zdGF0ZSwNCj4gLQkJCSAgIG1nci0+cGF5bG9hZHNbaV0uc3RhcnRfc2xvdCwNCj4g LQkJCSAgIG1nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzKTsNCj4gKwkJfQ0KPiAgCX0NCj4gLQlt dXRleF91bmxvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gDQo+ICAJc2VxX3ByaW50ZihtLCAi XG4qKiogRFBDRCBJbmZvICoqKlxuIik7DQo+ICAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsNCj4g QEAgLTUwOTcsNyArNDgzOSw3IEBAIHZvaWQgZHJtX2RwX21zdF9kdW1wX3RvcG9sb2d5KHN0cnVj dCBzZXFfZmlsZQ0KPiAqbSwNCj4gDQo+ICBvdXQ6DQo+ICAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxv Y2spOw0KPiAtDQo+ICsJZHJtX21vZGVzZXRfdW5sb2NrKCZtZ3ItPmJhc2UubG9jayk7DQo+ICB9 DQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZHVtcF90b3BvbG9neSk7DQo+IA0KPiBAQCAt NTQxOCw5ICs1MTYwLDIyIEBADQo+IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrX3BheWxvYWRfYWxs b2NfbGltaXRzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyDQo+ICAJCQkJ ICAgICAgIG1nciwgbXN0X3N0YXRlLCBtZ3ItPm1heF9wYXlsb2Fkcyk7DQo+ICAJCQlyZXR1cm4g LUVJTlZBTDsNCj4gIAkJfQ0KPiArDQo+ICsJCS8qIEFzc2lnbiBhIFZDUEkgKi8NCj4gKwkJaWYg KCFwYXlsb2FkLT52Y3BpKSB7DQo+ICsJCQlwYXlsb2FkLT52Y3BpID0gZmZ6KG1zdF9zdGF0ZS0+ cGF5bG9hZF9tYXNrKSArIDE7DQo+ICsJCQlkcm1fZGJnX2F0b21pYyhtZ3ItPmRldiwgIltNU1Qg UE9SVDolcF0NCj4gYXNzaWduZWQgVkNQSSAjJWRcbiIsDQo+ICsJCQkJICAgICAgIHBheWxvYWQt PnBvcnQsIHBheWxvYWQtPnZjcGkpOw0KPiArCQkJbXN0X3N0YXRlLT5wYXlsb2FkX21hc2sgfD0g QklUKHBheWxvYWQtPnZjcGkgLSAxKTsNCj4gKwkJfQ0KPiAgCX0NCj4gLQlkcm1fZGJnX2F0b21p YyhtZ3ItPmRldiwgIltNU1QgTUdSOiVwXSBtc3Qgc3RhdGUgJXAgVFUNCj4gYXZhaWw9JWQgdXNl ZD0lZFxuIiwNCj4gLQkJICAgICAgIG1nciwgbXN0X3N0YXRlLCBhdmFpbF9zbG90cywgbXN0X3N0 YXRlLT50b3RhbF9hdmFpbF9zbG90cyAtDQo+IGF2YWlsX3Nsb3RzKTsNCj4gKw0KPiArCWlmICgh cGF5bG9hZF9jb3VudCkNCj4gKwkJbXN0X3N0YXRlLT5wYm5fZGl2ID0gMDsNCj4gKw0KPiArCWRy bV9kYmdfYXRvbWljKG1nci0+ZGV2LCAiW01TVCBNR1I6JXBdIG1zdCBzdGF0ZSAlcCBUVQ0KPiBw Ym5fZGl2PSVkIGF2YWlsPSVkIHVzZWQ9JWRcbiIsDQo+ICsJCSAgICAgICBtZ3IsIG1zdF9zdGF0 ZSwgbXN0X3N0YXRlLT5wYm5fZGl2LCBhdmFpbF9zbG90cywNCj4gKwkJICAgICAgIG1zdF9zdGF0 ZS0+dG90YWxfYXZhaWxfc2xvdHMgLSBhdmFpbF9zbG90cyk7DQo+IA0KPiAgCXJldHVybiAwOw0K PiAgfQ0KPiBAQCAtNTQ5MSw3ICs1MjQ2LDYgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0 X2FkZF9hZmZlY3RlZF9kc2NfY3J0Y3MpOw0KPiAgICogQHN0YXRlOiBQb2ludGVyIHRvIHRoZSBu ZXcgZHJtX2F0b21pY19zdGF0ZQ0KPiAgICogQHBvcnQ6IFBvaW50ZXIgdG8gdGhlIGFmZmVjdGVk IE1TVCBQb3J0DQo+ICAgKiBAcGJuOiBOZXdseSByZWNhbGN1bGF0ZWQgYncgcmVxdWlyZWQgZm9y IGxpbmsgd2l0aCBEU0MgZW5hYmxlZA0KPiAtICogQHBibl9kaXY6IERpdmlkZXIgdG8gY2FsY3Vs YXRlIGNvcnJlY3QgbnVtYmVyIG9mIHBibiBwZXIgc2xvdA0KPiAgICogQGVuYWJsZTogQm9vbGVh biBmbGFnIHRvIGVuYWJsZSBvciBkaXNhYmxlIERTQyBvbiB0aGUgcG9ydA0KPiAgICoNCj4gICAq IFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBEU0Mgb24gdGhlIGdpdmVuIFBvcnQNCj4gQEAgLTU1MDIs OCArNTI1Niw3IEBADQo+IEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9hZGRfYWZmZWN0ZWRfZHNj X2NydGNzKTsNCj4gICAqLw0KPiAgaW50IGRybV9kcF9tc3RfYXRvbWljX2VuYWJsZV9kc2Moc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAgCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0LA0KPiAtCQkJCSBpbnQgcGJuLCBpbnQgcGJuX2RpdiwNCj4gLQkJCQkgYm9vbCBl bmFibGUpDQo+ICsJCQkJIGludCBwYm4sIGJvb2wgZW5hYmxlKQ0KPiAgew0KPiAgCXN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQ7DQo+IEBAIC01NTI5LDcgKzUyODIsNyBAQCBpbnQg ZHJtX2RwX21zdF9hdG9taWNfZW5hYmxlX2RzYyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJfQ0KPiANCj4gIAlpZiAoZW5hYmxlKSB7DQo+IC0JCXRpbWVfc2xvdHMgPSBk cm1fZHBfYXRvbWljX2ZpbmRfdGltZV9zbG90cyhzdGF0ZSwgcG9ydC0NCj4gPm1nciwgcG9ydCwg cGJuLCBwYm5fZGl2KTsNCj4gKwkJdGltZV9zbG90cyA9IGRybV9kcF9hdG9taWNfZmluZF90aW1l X3Nsb3RzKHN0YXRlLCBwb3J0LQ0KPiA+bWdyLCBwb3J0LCBwYm4pOw0KPiAgCQlkcm1fZGJnX2F0 b21pYyhzdGF0ZS0+ZGV2LA0KPiAgCQkJICAgICAgICJbTVNUIFBPUlQ6JXBdIEVuYWJsaW5nIERT QyBmbGFnLCByZWFsbG9jYXRpbmcNCj4gJWQgdGltZSBzbG90cyBvbiB0aGUgcG9ydFxuIiwNCj4g IAkJCSAgICAgICBwb3J0LCB0aW1lX3Nsb3RzKTsNCj4gQEAgLTU1NDIsNiArNTI5NSw3IEBAIGlu dCBkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0cnVjdA0KPiBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwNCj4gIAlyZXR1cm4gdGltZV9zbG90czsNCj4gIH0NCj4gIEVYUE9SVF9TWU1CT0wo ZHJtX2RwX21zdF9hdG9taWNfZW5hYmxlX2RzYyk7DQo+ICsNCj4gIC8qKg0KPiAgICogZHJtX2Rw X21zdF9hdG9taWNfY2hlY2sgLSBDaGVjayB0aGF0IHRoZSBuZXcgc3RhdGUgb2YgYW4gTVNUDQo+ IHRvcG9sb2d5IGluIGFuDQo+ICAgKiBhdG9taWMgdXBkYXRlIGlzIHZhbGlkDQo+IEBAIC01NTk5 LDcgKzUzNTMsNiBAQA0KPiBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVf ZnVuY3MpOw0KPiANCj4gIC8qKg0KPiAgICogZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0 YXRlOiBnZXQgTVNUIHRvcG9sb2d5IHN0YXRlDQo+IC0gKg0KPiAgICogQHN0YXRlOiBnbG9iYWwg YXRvbWljIHN0YXRlDQo+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciwgYWxzbyB0aGUg cHJpdmF0ZSBvYmplY3QgaW4gdGhpcyBjYXNlDQo+ICAgKg0KPiBAQCAtNTYxOSw2ICs1MzcyLDMx IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlDQo+ICpkcm1fYXRvbWljX2dldF9t c3RfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9hDQo+ICB9DQo+ICBFWFBPUlRfU1lNQk9MKGRy bV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZSk7DQo+IA0KPiArLyoqDQo+ICsgKiBkcm1f YXRvbWljX2dldF9uZXdfbXN0X3RvcG9sb2d5X3N0YXRlOiBnZXQgbmV3IE1TVCB0b3BvbG9neSBz dGF0ZQ0KPiBpbiBhdG9taWMgc3RhdGUsIGlmIGFueQ0KPiArICogQHN0YXRlOiBnbG9iYWwgYXRv bWljIHN0YXRlDQo+ICsgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciwgYWxzbyB0aGUgcHJp dmF0ZSBvYmplY3QgaW4gdGhpcyBjYXNlDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiB3cmFw cyBkcm1fYXRvbWljX2dldF9wcml2X29ial9zdGF0ZSgpIHBhc3NpbmcgaW4gdGhlIE1TVA0KPiBh dG9taWMNCj4gKyAqIHN0YXRlIHZ0YWJsZSBzbyB0aGF0IHRoZSBwcml2YXRlIG9iamVjdCBzdGF0 ZSByZXR1cm5lZCBpcyB0aGF0IG9mIGEgTVNUDQo+ICsgKiB0b3BvbG9neSBvYmplY3QuDQo+ICsg Kg0KPiArICogUmV0dXJuczoNCj4gKyAqDQo+ICsgKiBUaGUgTVNUIHRvcG9sb2d5IHN0YXRlLCBv ciBOVUxMIGlmIHRoZXJlJ3Mgbm8gdG9wb2xvZ3kgc3RhdGUgZm9yIHRoaXMgTVNUDQo+IG1ncg0K PiArICogaW4gdGhlIGdsb2JhbCBhdG9taWMgc3RhdGUNCj4gKyAqLw0KPiArc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUgKg0KPiArZHJtX2F0b21pY19nZXRfbmV3X21zdF90b3BvbG9n eV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQ0KPiAqc3RhdGUsDQo+ICsJCQkJICAgICAg c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpDQo+ICt7DQo+ICsJc3RydWN0IGRy bV9wcml2YXRlX3N0YXRlICpwcml2X3N0YXRlID0NCj4gKwkJZHJtX2F0b21pY19nZXRfbmV3X3By aXZhdGVfb2JqX3N0YXRlKHN0YXRlLCAmbWdyLQ0KPiA+YmFzZSk7DQo+ICsNCj4gKwlyZXR1cm4g cHJpdl9zdGF0ZSA/IHRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShwcml2X3N0YXRlKSA6IE5VTEw7 DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lf c3RhdGUpOw0KPiArDQo+ICAvKioNCj4gICAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2luaXQg LSBpbml0aWFsaXNlIGEgdG9wb2xvZ3kgbWFuYWdlcg0KPiAgICogQG1ncjogbWFuYWdlciBzdHJ1 Y3QgdG8gaW5pdGlhbGlzZQ0KPiBAQCAtNTYyNiw4ICs1NDA0LDYgQEANCj4gRVhQT1JUX1NZTUJP TChkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUpOw0KPiAgICogQGF1eDogRFAgaGVs cGVyIGF1eCBjaGFubmVsIHRvIHRhbGsgdG8gdGhpcyBkZXZpY2UNCj4gICAqIEBtYXhfZHBjZF90 cmFuc2FjdGlvbl9ieXRlczogaHcgc3BlY2lmaWMgRFBDRCB0cmFuc2FjdGlvbiBsaW1pdA0KPiAg ICogQG1heF9wYXlsb2FkczogbWF4aW11bSBudW1iZXIgb2YgcGF5bG9hZHMgdGhpcyBHUFUgY2Fu IHNvdXJjZQ0KPiAtICogQG1heF9sYW5lX2NvdW50OiBtYXhpbXVtIG51bWJlciBvZiBsYW5lcyB0 aGlzIEdQVSBzdXBwb3J0cw0KPiAtICogQG1heF9saW5rX3JhdGU6IG1heGltdW0gbGluayByYXRl IHBlciBsYW5lIHRoaXMgR1BVIHN1cHBvcnRzIGluIGtIeg0KPiAgICogQGNvbm5fYmFzZV9pZDog dGhlIGNvbm5lY3RvciBvYmplY3QgSUQgdGhlIE1TVCBkZXZpY2UgaXMgY29ubmVjdGVkIHRvLg0K PiAgICoNCj4gICAqIFJldHVybiAwIGZvciBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2Rl IG9uIGZhaWx1cmUNCj4gQEAgLTU2MzUsMTQgKzU0MTEsMTIgQEANCj4gRVhQT1JUX1NZTUJPTChk cm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUpOw0KPiAgaW50IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyX2luaXQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3IsDQo+ ICAJCQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZHBfYXV4DQo+ICphdXgs DQo+ICAJCQkJIGludCBtYXhfZHBjZF90cmFuc2FjdGlvbl9ieXRlcywgaW50DQo+IG1heF9wYXls b2FkcywNCj4gLQkJCQkgaW50IG1heF9sYW5lX2NvdW50LCBpbnQgbWF4X2xpbmtfcmF0ZSwNCj4g IAkJCQkgaW50IGNvbm5fYmFzZV9pZCkNCj4gIHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiANCj4gIAltdXRleF9pbml0KCZtZ3ItPmxvY2spOw0K PiAgCW11dGV4X2luaXQoJm1nci0+cWxvY2spOw0KPiAtCW11dGV4X2luaXQoJm1nci0+cGF5bG9h ZF9sb2NrKTsNCj4gIAltdXRleF9pbml0KCZtZ3ItPmRlbGF5ZWRfZGVzdHJveV9sb2NrKTsNCj4g IAltdXRleF9pbml0KCZtZ3ItPnVwX3JlcV9sb2NrKTsNCj4gIAltdXRleF9pbml0KCZtZ3ItPnBy b2JlX2xvY2spOw0KPiBAQCAtNTY3MiwxOSArNTQ0Niw3IEBAIGludCBkcm1fZHBfbXN0X3RvcG9s b2d5X21ncl9pbml0KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAg CW1nci0+YXV4ID0gYXV4Ow0KPiAgCW1nci0+bWF4X2RwY2RfdHJhbnNhY3Rpb25fYnl0ZXMgPSBt YXhfZHBjZF90cmFuc2FjdGlvbl9ieXRlczsNCj4gIAltZ3ItPm1heF9wYXlsb2FkcyA9IG1heF9w YXlsb2FkczsNCj4gLQltZ3ItPm1heF9sYW5lX2NvdW50ID0gbWF4X2xhbmVfY291bnQ7DQo+IC0J bWdyLT5tYXhfbGlua19yYXRlID0gbWF4X2xpbmtfcmF0ZTsNCj4gIAltZ3ItPmNvbm5fYmFzZV9p ZCA9IGNvbm5fYmFzZV9pZDsNCj4gLQlpZiAobWF4X3BheWxvYWRzICsgMSA+IHNpemVvZihtZ3It PnBheWxvYWRfbWFzaykgKiA4IHx8DQo+IC0JICAgIG1heF9wYXlsb2FkcyArIDEgPiBzaXplb2Yo bWdyLT52Y3BpX21hc2spICogOCkNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JbWdyLT5wYXls b2FkcyA9IGtjYWxsb2MobWF4X3BheWxvYWRzLCBzaXplb2Yoc3RydWN0DQo+IGRybV9kcF9wYXls b2FkKSwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKCFtZ3ItPnBheWxvYWRzKQ0KPiAtCQlyZXR1cm4g LUVOT01FTTsNCj4gLQltZ3ItPnByb3Bvc2VkX3ZjcGlzID0ga2NhbGxvYyhtYXhfcGF5bG9hZHMs IHNpemVvZihzdHJ1Y3QNCj4gZHJtX2RwX3ZjcGkgKiksIEdGUF9LRVJORUwpOw0KPiAtCWlmICgh bWdyLT5wcm9wb3NlZF92Y3BpcykNCj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0Jc2V0X2JpdCgw LCAmbWdyLT5wYXlsb2FkX21hc2spOw0KPiANCj4gIAltc3Rfc3RhdGUgPSBremFsbG9jKHNpemVv ZigqbXN0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7DQo+ICAJaWYgKG1zdF9zdGF0ZSA9PSBOVUxMKQ0K PiBAQCAtNTcxNywxOSArNTQ3OSwxMiBAQCB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2Rl c3Ryb3koc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpDQo+ICAJCWRlc3Ry b3lfd29ya3F1ZXVlKG1nci0+ZGVsYXllZF9kZXN0cm95X3dxKTsNCj4gIAkJbWdyLT5kZWxheWVk X2Rlc3Ryb3lfd3EgPSBOVUxMOw0KPiAgCX0NCj4gLQltdXRleF9sb2NrKCZtZ3ItPnBheWxvYWRf bG9jayk7DQo+IC0Ja2ZyZWUobWdyLT5wYXlsb2Fkcyk7DQo+IC0JbWdyLT5wYXlsb2FkcyA9IE5V TEw7DQo+IC0Ja2ZyZWUobWdyLT5wcm9wb3NlZF92Y3Bpcyk7DQo+IC0JbWdyLT5wcm9wb3NlZF92 Y3BpcyA9IE5VTEw7DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+ICAJ bWdyLT5kZXYgPSBOVUxMOw0KPiAgCW1nci0+YXV4ID0gTlVMTDsNCj4gIAlkcm1fYXRvbWljX3By aXZhdGVfb2JqX2ZpbmkoJm1nci0+YmFzZSk7DQo+ICAJbWdyLT5mdW5jcyA9IE5VTEw7DQo+IA0K PiAgCW11dGV4X2Rlc3Ryb3koJm1nci0+ZGVsYXllZF9kZXN0cm95X2xvY2spOw0KPiAtCW11dGV4 X2Rlc3Ryb3koJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gIAltdXRleF9kZXN0cm95KCZtZ3ItPnFs b2NrKTsNCj4gIAltdXRleF9kZXN0cm95KCZtZ3ItPmxvY2spOw0KPiAgCW11dGV4X2Rlc3Ryb3ko Jm1nci0+dXBfcmVxX2xvY2spOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kcF9tc3QuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZHBfbXN0LmMNCj4gaW5kZXggNGIwYWYzYzI2MTc2Li5lYzM4OWUzY2FmMjQgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMNCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9tc3QuYw0KPiBAQCAt NTIsNiArNTIsNyBAQCBzdGF0aWMgaW50IGludGVsX2RwX21zdF9jb21wdXRlX2xpbmtfY29uZmln KHN0cnVjdA0KPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLA0KPiAgCXN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSA9IGNydGNfc3RhdGUtPnVhcGkuc3RhdGU7DQo+ICAJc3RydWN0IGludGVs X2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPSBlbmNfdG9fbXN0KGVuY29kZXIpOw0KPiAgCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmaW50ZWxfbXN0LT5wcmltYXJ5LT5kcDsNCj4gKwlz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCXN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9DQo+ICAJCXRvX2ludGVsX2Nvbm5lY3Rvcihjb25u X3N0YXRlLT5jb25uZWN0b3IpOw0KPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g dG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsNCj4gQEAgLTYwLDIyICs2MSwyOCBAQCBzdGF0 aWMgaW50IGludGVsX2RwX21zdF9jb21wdXRlX2xpbmtfY29uZmlnKHN0cnVjdA0KPiBpbnRlbF9l bmNvZGVyICplbmNvZGVyLA0KPiAgCWJvb2wgY29uc3RhbnRfbiA9IGRybV9kcF9oYXNfcXVpcmso JmludGVsX2RwLT5kZXNjLA0KPiBEUF9EUENEX1FVSVJLX0NPTlNUQU5UX04pOw0KPiAgCWludCBi cHAsIHNsb3RzID0gLUVJTlZBTDsNCj4gDQo+ICsJbXN0X3N0YXRlID0gZHJtX2F0b21pY19nZXRf bXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCAmaW50ZWxfZHAtDQo+ID5tc3RfbWdyKTsNCj4gKwlp ZiAoSVNfRVJSKG1zdF9zdGF0ZSkpDQo+ICsJCXJldHVybiBQVFJfRVJSKG1zdF9zdGF0ZSk7DQo+ ICsNCj4gIAljcnRjX3N0YXRlLT5sYW5lX2NvdW50ID0gbGltaXRzLT5tYXhfbGFuZV9jb3VudDsN Cj4gIAljcnRjX3N0YXRlLT5wb3J0X2Nsb2NrID0gbGltaXRzLT5tYXhfcmF0ZTsNCj4gDQo+ICsJ Ly8gVE9ETzogSGFuZGxlIHBibl9kaXYgY2hhbmdlcyBieSBhZGRpbmcgYSBuZXcgTVNUIGhlbHBl cg0KPiArCWlmICghbXN0X3N0YXRlLT5wYm5fZGl2KSB7DQo+ICsJCW1zdF9zdGF0ZS0+cGJuX2Rp diA9DQo+IGRybV9kcF9nZXRfdmNfcGF5bG9hZF9idygmaW50ZWxfZHAtPm1zdF9tZ3IsDQo+ICsJ CQkJCQkJICAgICAgbGltaXRzLT5tYXhfcmF0ZSwNCj4gKwkJCQkJCQkgICAgICBsaW1pdHMtDQo+ ID5tYXhfbGFuZV9jb3VudCk7DQo+ICsJfQ0KPiArDQo+ICAJZm9yIChicHAgPSBsaW1pdHMtPm1h eF9icHA7IGJwcCA+PSBsaW1pdHMtPm1pbl9icHA7IGJwcCAtPSAyICogMykgew0KPiAgCQljcnRj X3N0YXRlLT5waXBlX2JwcCA9IGJwcDsNCj4gDQo+ICAJCWNydGNfc3RhdGUtPnBibiA9DQo+IGRy bV9kcF9jYWxjX3Bibl9tb2RlKGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2ssDQo+ICAJCQkJCQkg ICAgICAgY3J0Y19zdGF0ZS0+cGlwZV9icHAsDQo+ICAJCQkJCQkgICAgICAgZmFsc2UpOw0KPiAt DQo+ICAJCXNsb3RzID0gZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsICZpbnRl bF9kcC0NCj4gPm1zdF9tZ3IsDQo+IC0JCQkJCQkgICAgICBjb25uZWN0b3ItPnBvcnQsDQo+IC0J CQkJCQkgICAgICBjcnRjX3N0YXRlLT5wYm4sDQo+IC0NCj4gZHJtX2RwX2dldF92Y19wYXlsb2Fk X2J3KCZpbnRlbF9kcC0+bXN0X21nciwNCj4gLQ0KPiBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLA0K PiAtDQo+IGNydGNfc3RhdGUtPmxhbmVfY291bnQpKTsNCj4gKwkJCQkJCSAgICAgIGNvbm5lY3Rv ci0+cG9ydCwNCj4gY3J0Y19zdGF0ZS0+cGJuKTsNCj4gIAkJaWYgKHNsb3RzID09IC1FREVBRExL KQ0KPiAgCQkJcmV0dXJuIHNsb3RzOw0KPiAgCQlpZiAoc2xvdHMgPj0gMCkNCj4gQEAgLTM2MCwy MSArMzY3LDE3IEBAIHN0YXRpYyB2b2lkIGludGVsX21zdF9kaXNhYmxlX2RwKHN0cnVjdA0KPiBp bnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSAmZGlnX3BvcnQtPmRwOw0KPiAgCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9 DQo+ICAJCXRvX2ludGVsX2Nvbm5lY3RvcihvbGRfY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsNCj4g KwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4gKwkJZHJt X2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKCZzdGF0ZS0+YmFzZSwNCj4gJmludGVsX2Rw LT5tc3RfbWdyKTsNCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUo Y29ubmVjdG9yLT5iYXNlLmRldik7DQo+IC0JaW50IHN0YXJ0X3Nsb3QgPSBpbnRlbF9kcF9pc191 aGJyKG9sZF9jcnRjX3N0YXRlKSA/IDAgOiAxOw0KPiAtCWludCByZXQ7DQo+IA0KPiAgCWRybV9k Ymdfa21zKCZpOTE1LT5kcm0sICJhY3RpdmUgbGlua3MgJWRcbiIsDQo+ICAJCSAgICBpbnRlbF9k cC0+YWN0aXZlX21zdF9saW5rcyk7DQo+IA0KPiAgCWludGVsX2hkY3BfZGlzYWJsZShpbnRlbF9t c3QtPmNvbm5lY3Rvcik7DQo+IA0KPiAtCWRybV9kcF9tc3RfcmVzZXRfdmNwaV9zbG90cygmaW50 ZWxfZHAtPm1zdF9tZ3IsIGNvbm5lY3Rvci0NCj4gPnBvcnQpOw0KPiAtDQo+IC0JcmV0ID0gZHJt X2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKCZpbnRlbF9kcC0+bXN0X21nciwNCj4gc3RhcnRfc2xv dCk7DQo+IC0JaWYgKHJldCkgew0KPiAtCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiZmFpbGVk IHRvIHVwZGF0ZSBwYXlsb2FkICVkXG4iLA0KPiByZXQpOw0KPiAtCX0NCj4gKwlkcm1fZHBfcmVt b3ZlX3BheWxvYWQoJmludGVsX2RwLT5tc3RfbWdyLCBtc3Rfc3RhdGUsDQo+ICsJCQkgICAgICBk cm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUsDQo+IGNvbm5lY3Rvci0+ cG9ydCkpOw0KPiANCj4gIAlpbnRlbF9hdWRpb19jb2RlY19kaXNhYmxlKGVuY29kZXIsIG9sZF9j cnRjX3N0YXRlLA0KPiBvbGRfY29ubl9zdGF0ZSk7DQo+ICB9DQo+IEBAIC00MDIsOCArNDA1LDYg QEAgc3RhdGljIHZvaWQgaW50ZWxfbXN0X3Bvc3RfZGlzYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxf YXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gDQo+ICAJaW50ZWxfZGlzYWJsZV90cmFuc2NvZGVyKG9s ZF9jcnRjX3N0YXRlKTsNCj4gDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQyKCZpbnRl bF9kcC0+bXN0X21ncik7DQo+IC0NCj4gIAljbGVhcl9hY3Rfc2VudChlbmNvZGVyLCBvbGRfY3J0 Y19zdGF0ZSk7DQo+IA0KPiAgCWludGVsX2RlX3JtdyhkZXZfcHJpdiwgVFJBTlNfRERJX0ZVTkNf Q1RMKG9sZF9jcnRjX3N0YXRlLQ0KPiA+Y3B1X3RyYW5zY29kZXIpLA0KPiBAQCAtNDExLDggKzQx Miw2IEBAIHN0YXRpYyB2b2lkIGludGVsX21zdF9wb3N0X2Rpc2FibGVfZHAoc3RydWN0DQo+IGlu dGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+IA0KPiAgCXdhaXRfZm9yX2FjdF9zZW50KGVuY29k ZXIsIG9sZF9jcnRjX3N0YXRlKTsNCj4gDQo+IC0JZHJtX2RwX21zdF9kZWFsbG9jYXRlX3ZjcGko JmludGVsX2RwLT5tc3RfbWdyLCBjb25uZWN0b3ItDQo+ID5wb3J0KTsNCj4gLQ0KPiAgCWludGVs X2RkaV9kaXNhYmxlX3RyYW5zY29kZXJfZnVuYyhvbGRfY3J0Y19zdGF0ZSk7DQo+IA0KPiAgCWlm IChESVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gOSkNCj4gQEAgLTQ3OSw3ICs0NzgsOCBAQCBzdGF0 aWMgdm9pZCBpbnRlbF9tc3RfcHJlX2VuYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSwNCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGVuY29kZXItPmJhc2UuZGV2KTsNCj4gIAlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25u ZWN0b3IgPQ0KPiAgCQl0b19pbnRlbF9jb25uZWN0b3IoY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsN Cj4gLQlpbnQgc3RhcnRfc2xvdCA9IGludGVsX2RwX2lzX3VoYnIocGlwZV9jb25maWcpID8gMCA6 IDE7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSA9DQo+ ICsJCWRybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lfc3RhdGUoJnN0YXRlLT5iYXNlLA0K PiAmaW50ZWxfZHAtPm1zdF9tZ3IpOw0KPiAgCWludCByZXQ7DQo+ICAJYm9vbCBmaXJzdF9tc3Rf c3RyZWFtOw0KPiANCj4gQEAgLTUwNSwxNiArNTA1LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX21z dF9wcmVfZW5hYmxlX2RwKHN0cnVjdA0KPiBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAg CQlkaWdfcG9ydC0+YmFzZS5wcmVfZW5hYmxlKHN0YXRlLCAmZGlnX3BvcnQtPmJhc2UsDQo+ICAJ CQkJCQlwaXBlX2NvbmZpZywgTlVMTCk7DQo+IA0KPiAtCXJldCA9IGRybV9kcF9tc3RfYWxsb2Nh dGVfdmNwaSgmaW50ZWxfZHAtPm1zdF9tZ3IsDQo+IC0JCQkJICAgICAgIGNvbm5lY3Rvci0+cG9y dCwNCj4gLQkJCQkgICAgICAgcGlwZV9jb25maWctPnBibiwNCj4gLQkJCQkgICAgICAgcGlwZV9j b25maWctPmRwX21fbi50dSk7DQo+IC0JaWYgKCFyZXQpDQo+IC0JCWRybV9lcnIoJmRldl9wcml2 LT5kcm0sICJmYWlsZWQgdG8gYWxsb2NhdGUgdmNwaVxuIik7DQo+IC0NCj4gIAlpbnRlbF9kcC0+ YWN0aXZlX21zdF9saW5rcysrOw0KPiANCj4gLQlyZXQgPSBkcm1fZHBfdXBkYXRlX3BheWxvYWRf cGFydDEoJmludGVsX2RwLT5tc3RfbWdyLA0KPiBzdGFydF9zbG90KTsNCj4gKwlyZXQgPSBkcm1f ZHBfYWRkX3BheWxvYWRfcGFydDEoJmludGVsX2RwLT5tc3RfbWdyLCBtc3Rfc3RhdGUsDQo+ICsN Cj4gZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUobXN0X3N0YXRlLCBjb25uZWN0b3It PnBvcnQpKTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwg IkZhaWxlZCB0byBjcmVhdGUgTVNUIHBheWxvYWQgZm9yDQo+ICVzOiAlZFxuIiwNCj4gKwkJCWNv bm5lY3Rvci0+YmFzZS5uYW1lLCByZXQpOw0KPiANCj4gIAkvKg0KPiAgCSAqIEJlZm9yZSBHZW4g MTIgdGhpcyBpcyBub3QgZG9uZSBhcyBwYXJ0IG9mDQo+IEBAIC01MzcsNyArNTM0LDEwIEBAIHN0 YXRpYyB2b2lkIGludGVsX21zdF9lbmFibGVfZHAoc3RydWN0DQo+IGludGVsX2F0b21pY19zdGF0 ZSAqc3RhdGUsDQo+ICAJc3RydWN0IGludGVsX2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPSBl bmNfdG9fbXN0KGVuY29kZXIpOw0KPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19w b3J0ID0gaW50ZWxfbXN0LT5wcmltYXJ5Ow0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSAmZGlnX3BvcnQtPmRwOw0KPiArCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9 IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uX3N0YXRlLQ0KPiA+Y29ubmVjdG9yKTsNCj4gIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2 KTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4g KwkJZHJtX2F0b21pY19nZXRfbmV3X21zdF90b3BvbG9neV9zdGF0ZSgmc3RhdGUtPmJhc2UsDQo+ ICZpbnRlbF9kcC0+bXN0X21ncik7DQo+ICAJZW51bSB0cmFuc2NvZGVyIHRyYW5zID0gcGlwZV9j b25maWctPmNwdV90cmFuc2NvZGVyOw0KPiANCj4gIAlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRy bSwgcGlwZV9jb25maWctPmhhc19wY2hfZW5jb2Rlcik7DQo+IEBAIC01NjUsNyArNTY1LDggQEAg c3RhdGljIHZvaWQgaW50ZWxfbXN0X2VuYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSwNCj4gDQo+ICAJd2FpdF9mb3JfYWN0X3NlbnQoZW5jb2RlciwgcGlwZV9jb25m aWcpOw0KPiANCj4gLQlkcm1fZHBfdXBkYXRlX3BheWxvYWRfcGFydDIoJmludGVsX2RwLT5tc3Rf bWdyKTsNCj4gKwlkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIoJmludGVsX2RwLT5tc3RfbWdyLCAm c3RhdGUtPmJhc2UsDQo+ICsNCj4gZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUobXN0 X3N0YXRlLCBjb25uZWN0b3ItPnBvcnQpKTsNCj4gDQo+ICAJaWYgKERJU1BMQVlfVkVSKGRldl9w cml2KSA+PSAxMiAmJiBwaXBlX2NvbmZpZy0+ZmVjX2VuYWJsZSkNCj4gIAkJaW50ZWxfZGVfcm13 KGRldl9wcml2LCBDSElDS0VOX1RSQU5TKHRyYW5zKSwgMCwNCj4gQEAgLTk0OCw4ICs5NDksNiBA QCBpbnRlbF9kcF9tc3RfZW5jb2Rlcl9pbml0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQNCj4g KmRpZ19wb3J0LCBpbnQgY29ubl9iYXNlX2lkKQ0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSAmZGlnX3BvcnQtPmRwOw0KPiAgCWVudW0gcG9ydCBwb3J0ID0gZGlnX3BvcnQtPmJhc2Uu cG9ydDsNCj4gIAlpbnQgcmV0Ow0KPiAtCWludCBtYXhfc291cmNlX3JhdGUgPQ0KPiAtCQlpbnRl bF9kcC0+c291cmNlX3JhdGVzW2ludGVsX2RwLT5udW1fc291cmNlX3JhdGVzIC0gMV07DQo+IA0K PiAgCWlmICghSEFTX0RQX01TVChpOTE1KSB8fCBpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQ0K PiAgCQlyZXR1cm4gMDsNCj4gQEAgLTk2NSwxMCArOTY0LDcgQEAgaW50ZWxfZHBfbXN0X2VuY29k ZXJfaW5pdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0DQo+ICpkaWdfcG9ydCwgaW50IGNvbm5f YmFzZV9pZCkNCj4gIAkvKiBjcmVhdGUgZW5jb2RlcnMgKi8NCj4gIAlpbnRlbF9kcF9jcmVhdGVf ZmFrZV9tc3RfZW5jb2RlcnMoZGlnX3BvcnQpOw0KPiAgCXJldCA9IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyX2luaXQoJmludGVsX2RwLT5tc3RfbWdyLCAmaTkxNS0NCj4gPmRybSwNCj4gLQkJCQkJ ICAgJmludGVsX2RwLT5hdXgsIDE2LCAzLA0KPiAtCQkJCQkgICBkaWdfcG9ydC0+bWF4X2xhbmVz LA0KPiAtCQkJCQkgICBtYXhfc291cmNlX3JhdGUsDQo+IC0JCQkJCSAgIGNvbm5fYmFzZV9pZCk7 DQo+ICsJCQkJCSAgICZpbnRlbF9kcC0+YXV4LCAxNiwgMywNCj4gY29ubl9iYXNlX2lkKTsNCj4g IAlpZiAocmV0KSB7DQo+ICAJCWludGVsX2RwLT5tc3RfbWdyLmNicyA9IE5VTEw7DQo+ICAJCXJl dHVybiByZXQ7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2hkY3AuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfaGRjcC5j DQo+IGluZGV4IDhlYTY2YTJlMWIwOS4uN2RiYzlmMGJiMjRmIDEwMDY0NA0KPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2hkY3AuYw0KPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2hkY3AuYw0KPiBAQCAtMzAsOCArMzAsMzAgQEANCj4g DQo+ICBzdGF0aWMgaW50IGludGVsX2Nvbm5fdG9fdmNwaShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICpjb25uZWN0b3IpDQo+ICB7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICpt Z3I7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQ7DQo+ICsJ c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsNCj4gKwlpbnQgdmNw aSA9IDA7DQo+ICsNCj4gIAkvKiBGb3IgSERNSSB0aGlzIGlzIGZvcmNlZCB0byBiZSAweDAuIEZv ciBEUCBTU1QgYWxzbyB0aGlzIGlzIDB4MC4gKi8NCj4gLQlyZXR1cm4gY29ubmVjdG9yLT5wb3J0 CT8gY29ubmVjdG9yLT5wb3J0LT52Y3BpLnZjcGkgOiAwOw0KPiArCWlmICghY29ubmVjdG9yLT5w b3J0KQ0KPiArCQlyZXR1cm4gMDsNCj4gKwltZ3IgPSBjb25uZWN0b3ItPnBvcnQtPm1ncjsNCj4g Kw0KPiArCWRybV9tb2Rlc2V0X2xvY2soJm1nci0+YmFzZS5sb2NrLCBOVUxMKTsNCj4gKwltc3Rf c3RhdGUgPSB0b19kcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKG1nci0+YmFzZS5zdGF0ZSk7DQo+ ICsJcGF5bG9hZCA9IGRybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKG1zdF9zdGF0ZSwN Cj4gY29ubmVjdG9yLT5wb3J0KTsNCj4gKwlpZiAoZHJtX1dBUk5fT04obWdyLT5kZXYsICFwYXls b2FkKSkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwl2Y3BpID0gcGF5bG9hZC0+dmNwaTsNCj4g KwlpZiAoZHJtX1dBUk5fT04obWdyLT5kZXYsIHZjcGkgPCAwKSkgew0KPiArCQl2Y3BpID0gMDsN Cj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArb3V0Og0KPiArCWRybV9tb2Rlc2V0X3VubG9jaygm bWdyLT5iYXNlLmxvY2spOw0KPiArCXJldHVybiB2Y3BpOw0KPiAgfQ0KPiANCj4gIC8qDQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMNCj4gYi9k cml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMNCj4gaW5kZXggNTdmNzRjZmNk ZWJmLi5lOGY0YzgwNmZhMzkgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1 L2Rpc3BudjUwL2Rpc3AuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1 MC9kaXNwLmMNCj4gQEAgLTkzNyw2ICs5MzcsNyBAQCBzdHJ1Y3QgbnY1MF9tc3RvIHsNCj4gIAlz dHJ1Y3QgbnY1MF9oZWFkICpoZWFkOw0KPiAgCXN0cnVjdCBudjUwX21zdGMgKm1zdGM7DQo+ICAJ Ym9vbCBkaXNhYmxlZDsNCj4gKwlib29sIGVuYWJsZWQ7DQo+ICB9Ow0KPiANCj4gIHN0cnVjdCBu b3V2ZWF1X2VuY29kZXIgKm52NTBfcmVhbF9vdXRwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikNCj4gQEAgLTk1Miw1NyArOTUzLDM3IEBAIHN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52NTBf cmVhbF9vdXRwKHN0cnVjdA0KPiBkcm1fZW5jb2RlciAqZW5jb2RlcikNCj4gIAlyZXR1cm4gbXN0 by0+bXN0Yy0+bXN0bS0+b3V0cDsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgc3RydWN0IGRybV9kcF9w YXlsb2FkICoNCj4gLW52NTBfbXN0b19wYXlsb2FkKHN0cnVjdCBudjUwX21zdG8gKm1zdG8pDQo+ IC17DQo+IC0Jc3RydWN0IG5vdXZlYXVfZHJtICpkcm0gPSBub3V2ZWF1X2RybShtc3RvLT5lbmNv ZGVyLmRldik7DQo+IC0Jc3RydWN0IG52NTBfbXN0YyAqbXN0YyA9IG1zdG8tPm1zdGM7DQo+IC0J c3RydWN0IG52NTBfbXN0bSAqbXN0bSA9IG1zdGMtPm1zdG07DQo+IC0JaW50IHZjcGkgPSBtc3Rj LT5wb3J0LT52Y3BpLnZjcGksIGk7DQo+IC0NCj4gLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQo Jm1zdG0tPm1nci5wYXlsb2FkX2xvY2spKTsNCj4gLQ0KPiAtCU5WX0FUT01JQyhkcm0sICIlczog dmNwaSAlZFxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lLCB2Y3BpKTsNCj4gLQlmb3IgKGkgPSAwOyBp IDwgbXN0bS0+bWdyLm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0JCXN0cnVjdCBkcm1fZHBfcGF5 bG9hZCAqcGF5bG9hZCA9ICZtc3RtLT5tZ3IucGF5bG9hZHNbaV07DQo+IC0JCU5WX0FUT01JQyhk cm0sICIlczogJWQ6IHZjcGkgJWQgc3RhcnQgMHglMDJ4IHNsb3RzDQo+IDB4JTAyeFxuIiwNCj4g LQkJCSAgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLm5hbWUsIGksIHBheWxvYWQtPnZjcGksDQo+IC0J CQkgIHBheWxvYWQtPnN0YXJ0X3Nsb3QsIHBheWxvYWQtPm51bV9zbG90cyk7DQo+IC0JfQ0KPiAt DQo+IC0JZm9yIChpID0gMDsgaSA8IG1zdG0tPm1nci5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAt CQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPSAmbXN0bS0+bWdyLnBheWxvYWRzW2ld Ow0KPiAtCQlpZiAocGF5bG9hZC0+dmNwaSA9PSB2Y3BpKQ0KPiAtCQkJcmV0dXJuIHBheWxvYWQ7 DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIE5VTEw7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyB2b2lk DQo+IC1udjUwX21zdG9fY2xlYW51cChzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiArbnY1MF9t c3RvX2NsZWFudXAoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiArCQkgIHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCSAgc3RydWN0IG52NTBfbXN0byAqbXN0 bykNCj4gIHsNCj4gIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKG1zdG8t PmVuY29kZXIuZGV2KTsNCj4gLQlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsN Cj4gLQlzdHJ1Y3QgbnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gLQ0KPiAtCWlmICgh bXN0by0+ZGlzYWJsZWQpDQo+IC0JCXJldHVybjsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9t aWNfcGF5bG9hZCAqcGF5bG9hZCA9DQo+ICsJCWRybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0 YXRlKG1zdF9zdGF0ZSwgbXN0by0NCj4gPm1zdGMtPnBvcnQpOw0KPiANCj4gIAlOVl9BVE9NSUMo ZHJtLCAiJXM6IG1zdG8gY2xlYW51cFxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lKTsNCj4gDQo+IC0J ZHJtX2RwX21zdF9kZWFsbG9jYXRlX3ZjcGkoJm1zdG0tPm1nciwgbXN0Yy0+cG9ydCk7DQo+IC0N Cj4gLQltc3RvLT5tc3RjID0gTlVMTDsNCj4gLQltc3RvLT5kaXNhYmxlZCA9IGZhbHNlOw0KPiAr CWlmIChtc3RvLT5kaXNhYmxlZCkgew0KPiArCQltc3RvLT5tc3RjID0gTlVMTDsNCj4gKwkJbXN0 by0+ZGlzYWJsZWQgPSBmYWxzZTsNCj4gKwl9IGVsc2UgaWYgKG1zdG8tPmVuYWJsZWQpIHsNCj4g KwkJZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQyKG1nciwgc3RhdGUsIHBheWxvYWQpOw0KPiArCQlt c3RvLT5lbmFibGVkID0gZmFsc2U7DQo+ICsJfQ0KPiAgfQ0KPiANCj4gIHN0YXRpYyB2b2lkDQo+ IC1udjUwX21zdG9fcHJlcGFyZShzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiArbnY1MF9tc3Rv X3ByZXBhcmUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiArCQkgIHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCSAgc3RydWN0IG52NTBfbXN0byAqbXN0bykN Cj4gIHsNCj4gIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKG1zdG8tPmVu Y29kZXIuZGV2KTsNCj4gIAlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4g IAlzdHJ1Y3QgbnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZDsNCj4gIAlzdHJ1Y3Qgew0KPiAgCQlzdHJ1Y3Qg bnY1MF9kaXNwX210aGRfdjEgYmFzZTsNCj4gIAkJc3RydWN0IG52NTBfZGlzcF9zb3JfZHBfbXN0 X3ZjcGlfdjAgdmNwaTsNCj4gQEAgLTEwMTQsMTcgKzk5NSwyMSBAQCBudjUwX21zdG9fcHJlcGFy ZShzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiAgCQkJICAgICAgICgweDAxMDAgPDwgbXN0by0+ aGVhZC0+YmFzZS5pbmRleCksDQo+ICAJfTsNCj4gDQo+IC0JbXV0ZXhfbG9jaygmbXN0bS0+bWdy LnBheWxvYWRfbG9jayk7DQo+IC0NCj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6IG1zdG8gcHJlcGFy ZVxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lKTsNCj4gLQlpZiAobXN0Yy0+cG9ydC0+dmNwaS52Y3Bp ID4gMCkgew0KPiAtCQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPQ0KPiBudjUwX21z dG9fcGF5bG9hZChtc3RvKTsNCj4gLQkJaWYgKHBheWxvYWQpIHsNCj4gLQkJCWFyZ3MudmNwaS5z dGFydF9zbG90ID0gcGF5bG9hZC0+c3RhcnRfc2xvdDsNCj4gLQkJCWFyZ3MudmNwaS5udW1fc2xv dHMgPSBwYXlsb2FkLT5udW1fc2xvdHM7DQo+IC0JCQlhcmdzLnZjcGkucGJuID0gbXN0Yy0+cG9y dC0+dmNwaS5wYm47DQo+IC0JCQlhcmdzLnZjcGkuYWxpZ25lZF9wYm4gPSBtc3RjLT5wb3J0LQ0K PiA+dmNwaS5hbGlnbmVkX3BibjsNCj4gLQkJfQ0KPiArDQo+ICsJcGF5bG9hZCA9IGRybV9hdG9t aWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKG1zdF9zdGF0ZSwgbXN0Yy0NCj4gPnBvcnQpOw0KPiAr DQo+ICsJLy8gVE9ETzogRmlndXJlIG91dCBpZiB3ZSB3YW50IHRvIGRvIGEgYmV0dGVyIGpvYiBv ZiBoYW5kbGluZyBWQ1BJDQo+IGFsbG9jYXRpb24gZmFpbHVyZXMgaGVyZT8NCj4gKwlpZiAobXN0 by0+ZGlzYWJsZWQpIHsNCj4gKwkJZHJtX2RwX3JlbW92ZV9wYXlsb2FkKG1nciwgbXN0X3N0YXRl LCBwYXlsb2FkKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpZiAobXN0by0+ZW5hYmxlZCkNCj4gKwkJ CWRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MShtZ3IsIG1zdF9zdGF0ZSwNCj4gcGF5bG9hZCk7DQo+ ICsNCj4gKwkJYXJncy52Y3BpLnN0YXJ0X3Nsb3QgPSBwYXlsb2FkLT52Y19zdGFydF9zbG90Ow0K PiArCQlhcmdzLnZjcGkubnVtX3Nsb3RzID0gcGF5bG9hZC0+dGltZV9zbG90czsNCj4gKwkJYXJn cy52Y3BpLnBibiA9IHBheWxvYWQtPnBibjsNCj4gKwkJYXJncy52Y3BpLmFsaWduZWRfcGJuID0g cGF5bG9hZC0+dGltZV9zbG90cyAqIG1zdF9zdGF0ZS0NCj4gPnBibl9kaXY7DQo+ICAJfQ0KPiAN Cj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6ICVzOiAlMDJ4ICUwMnggJTA0eCAlMDR4XG4iLA0KPiBA QCAtMTAzMyw3ICsxMDE4LDYgQEAgbnY1MF9tc3RvX3ByZXBhcmUoc3RydWN0IG52NTBfbXN0byAq bXN0bykNCj4gIAkJICBhcmdzLnZjcGkucGJuLCBhcmdzLnZjcGkuYWxpZ25lZF9wYm4pOw0KPiAN Cj4gIAludmlmX210aGQoJmRybS0+ZGlzcGxheS0+ZGlzcC5vYmplY3QsIDAsICZhcmdzLCBzaXpl b2YoYXJncykpOw0KPiAtCW11dGV4X3VubG9jaygmbXN0bS0+bWdyLnBheWxvYWRfbG9jayk7DQo+ ICB9DQo+IA0KPiAgc3RhdGljIGludA0KPiBAQCAtMTA0Myw2ICsxMDI3LDcgQEAgbnY1MF9tc3Rv X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXINCj4gKmVuY29kZXIsDQo+ICB7DQo+ICAJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY3J0Y19zdGF0ZS0+c3RhdGU7DQo+ICAJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5fc3RhdGUtPmNvbm5lY3RvcjsN Cj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCXN0 cnVjdCBudjUwX21zdGMgKm1zdGMgPSBudjUwX21zdGMoY29ubmVjdG9yKTsNCj4gIAlzdHJ1Y3Qg bnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gIAlzdHJ1Y3QgbnY1MF9oZWFkX2F0b20g KmFzeWggPSBudjUwX2hlYWRfYXRvbShjcnRjX3N0YXRlKTsNCj4gQEAgLTEwNzAsOCArMTA1NSwx OCBAQCBudjUwX21zdG9fYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2Rlcg0KPiAqZW5jb2Rl ciwNCj4gIAkJCQkJCSAgICBmYWxzZSk7DQo+ICAJfQ0KPiANCj4gLQlzbG90cyA9IGRybV9kcF9h dG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCAmbXN0bS0+bWdyLCBtc3RjLQ0KPiA+cG9ydCwN Cj4gLQkJCQkJICAgICAgYXN5aC0+ZHAucGJuLCAwKTsNCj4gKwltc3Rfc3RhdGUgPSBkcm1fYXRv bWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUsICZtc3RtLQ0KPiA+bWdyKTsNCj4gKwlp ZiAoSVNfRVJSKG1zdF9zdGF0ZSkpDQo+ICsJCXJldHVybiBQVFJfRVJSKG1zdF9zdGF0ZSk7DQo+ ICsNCj4gKwlpZiAoIW1zdF9zdGF0ZS0+cGJuX2Rpdikgew0KPiArCQlzdHJ1Y3Qgbm91dmVhdV9l bmNvZGVyICpvdXRwID0gbXN0Yy0+bXN0bS0+b3V0cDsNCj4gKw0KPiArCQltc3Rfc3RhdGUtPnBi bl9kaXYgPQ0KPiBkcm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncoJm1zdG0tPm1nciwNCj4gKwkJCQkJ CQkgICAgICBvdXRwLT5kcC5saW5rX2J3LA0KPiBvdXRwLT5kcC5saW5rX25yKTsNCj4gKwl9DQo+ ICsNCj4gKwlzbG90cyA9IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCAmbXN0 bS0+bWdyLCBtc3RjLQ0KPiA+cG9ydCwgYXN5aC0+ZHAucGJuKTsNCj4gIAlpZiAoc2xvdHMgPCAw KQ0KPiAgCQlyZXR1cm4gc2xvdHM7DQo+IA0KPiBAQCAtMTEwMyw3ICsxMDk4LDYgQEAgbnY1MF9t c3RvX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyDQo+ICplbmNvZGVyLCBzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3QNCj4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y Ow0KPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7DQo+ICAJdTgg cHJvdG87DQo+IC0JYm9vbCByOw0KPiANCj4gIAlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdp bihlbmNvZGVyLT5kZXYsICZjb25uX2l0ZXIpOw0KPiAgCWRybV9mb3JfZWFjaF9jb25uZWN0b3Jf aXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsNCj4gQEAgLTExMTgsMTAgKzExMTIsNiBAQCBu djUwX21zdG9fYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXINCj4gKmVuY29kZXIsIHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdA0KPiAgCWlmIChXQVJOX09OKCFtc3RjKSkNCj4gIAkJ cmV0dXJuOw0KPiANCj4gLQlyID0gZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKCZtc3RtLT5tZ3Is IG1zdGMtPnBvcnQsIGFzeWgtDQo+ID5kcC5wYm4sIGFzeWgtPmRwLnR1KTsNCj4gLQlpZiAoIXIp DQo+IC0JCURSTV9ERUJVR19LTVMoIkZhaWxlZCB0byBhbGxvY2F0ZSBWQ1BJXG4iKTsNCj4gLQ0K PiAgCWlmICghbXN0bS0+bGlua3MrKykNCj4gIAkJbnY1MF9vdXRwX2FjcXVpcmUobXN0bS0+b3V0 cCwgZmFsc2UgLypYWFg6IE1TVCBhdWRpby4qLyk7DQo+IA0KPiBAQCAtMTEzNCw2ICsxMTI0LDcg QEAgbnY1MF9tc3RvX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyDQo+ICplbmNvZGVy LCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3QNCj4gIAkJCSAgIG52NTBfZHBfYnBjX3RvX2Rl cHRoKGFzeWgtPm9yLmJwYykpOw0KPiANCj4gIAltc3RvLT5tc3RjID0gbXN0YzsNCj4gKwltc3Rv LT5lbmFibGVkID0gdHJ1ZTsNCj4gIAltc3RtLT5tb2RpZmllZCA9IHRydWU7DQo+ICB9DQo+IA0K PiBAQCAtMTE0NCw4ICsxMTM1LDYgQEAgbnY1MF9tc3RvX2F0b21pY19kaXNhYmxlKHN0cnVjdCBk cm1fZW5jb2Rlcg0KPiAqZW5jb2Rlciwgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnMNCj4gIAlz dHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4gIAlzdHJ1Y3QgbnY1MF9tc3Rt ICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gDQo+IC0JZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3Rz KCZtc3RtLT5tZ3IsIG1zdGMtPnBvcnQpOw0KPiAtDQo+ICAJbXN0bS0+b3V0cC0+dXBkYXRlKG1z dG0tPm91dHAsIG1zdG8tPmhlYWQtPmJhc2UuaW5kZXgsIE5VTEwsDQo+IDAsIDApOw0KPiAgCW1z dG0tPm1vZGlmaWVkID0gdHJ1ZTsNCj4gIAlpZiAoIS0tbXN0bS0+bGlua3MpDQo+IEBAIC0xMzY1 LDcgKzEzNTQsOSBAQCBudjUwX21zdGNfbmV3KHN0cnVjdCBudjUwX21zdG0gKm1zdG0sIHN0cnVj dA0KPiBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsDQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQNCj4g LW52NTBfbXN0bV9jbGVhbnVwKHN0cnVjdCBudjUwX21zdG0gKm1zdG0pDQo+ICtudjUwX21zdG1f Y2xlYW51cChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSwNCj4gKwkJICBzdHJ1Y3QgbnY1MF9t c3RtICptc3RtKQ0KPiAgew0KPiAgCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gbm91dmVhdV9k cm0obXN0bS0+b3V0cC0NCj4gPmJhc2UuYmFzZS5kZXYpOw0KPiAgCXN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcjsNCj4gQEAgLTEzNzMsMTQgKzEzNjQsMTIgQEAgbnY1MF9tc3RtX2NsZWFudXAo c3RydWN0IG52NTBfbXN0bSAqbXN0bSkNCj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6IG1zdG0gY2xl YW51cFxuIiwgbXN0bS0+b3V0cC0NCj4gPmJhc2UuYmFzZS5uYW1lKTsNCj4gIAlkcm1fZHBfY2hl Y2tfYWN0X3N0YXR1cygmbXN0bS0+bWdyKTsNCj4gDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2Fk X3BhcnQyKCZtc3RtLT5tZ3IpOw0KPiAtDQo+ICAJZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2Rl ciwgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLmRldikgew0KPiAgCQlpZiAoZW5jb2Rlci0+ZW5jb2Rl cl90eXBlID09DQo+IERSTV9NT0RFX0VOQ09ERVJfRFBNU1QpIHsNCj4gIAkJCXN0cnVjdCBudjUw X21zdG8gKm1zdG8gPSBudjUwX21zdG8oZW5jb2Rlcik7DQo+ICAJCQlzdHJ1Y3QgbnY1MF9tc3Rj ICptc3RjID0gbXN0by0+bXN0YzsNCj4gIAkJCWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0 bSkNCj4gLQkJCQludjUwX21zdG9fY2xlYW51cChtc3RvKTsNCj4gKwkJCQludjUwX21zdG9fY2xl YW51cChzdGF0ZSwgbXN0X3N0YXRlLA0KPiAmbXN0bS0+bWdyLCBtc3RvKTsNCj4gIAkJfQ0KPiAg CX0NCj4gDQo+IEBAIC0xMzg4LDIwICsxMzc3LDM0IEBAIG52NTBfbXN0bV9jbGVhbnVwKHN0cnVj dCBudjUwX21zdG0gKm1zdG0pDQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQNCj4gLW52NTBfbXN0 bV9wcmVwYXJlKHN0cnVjdCBudjUwX21zdG0gKm1zdG0pDQo+ICtudjUwX21zdG1fcHJlcGFyZShz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSwNCj4gKwkJICBzdHJ1Y3QgbnY1MF9tc3RtICptc3Rt KQ0KPiAgew0KPiAgCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gbm91dmVhdV9kcm0obXN0bS0+ b3V0cC0NCj4gPmJhc2UuYmFzZS5kZXYpOw0KPiAgCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cjsNCj4gDQo+ICAJTlZfQVRPTUlDKGRybSwgIiVzOiBtc3RtIHByZXBhcmVcbiIsIG1zdG0tPm91 dHAtDQo+ID5iYXNlLmJhc2UubmFtZSk7DQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQx KCZtc3RtLT5tZ3IsIDEpOw0KPiANCj4gKwkvKiBEaXNhYmxlIHBheWxvYWRzIGZpcnN0ICovDQo+ ICAJZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2RlciwgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLmRl dikgew0KPiAgCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID09DQo+IERSTV9NT0RFX0VOQ09E RVJfRFBNU1QpIHsNCj4gIAkJCXN0cnVjdCBudjUwX21zdG8gKm1zdG8gPSBudjUwX21zdG8oZW5j b2Rlcik7DQo+ICAJCQlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4gLQkJ CWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0bSkNCj4gLQkJCQludjUwX21zdG9fcHJlcGFy ZShtc3RvKTsNCj4gKwkJCWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0bSAmJiBtc3RvLT5k aXNhYmxlZCkNCj4gKwkJCQludjUwX21zdG9fcHJlcGFyZShzdGF0ZSwgbXN0X3N0YXRlLA0KPiAm bXN0bS0+bWdyLCBtc3RvKTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCS8qIEFkZCBwYXlsb2Fk cyBmb3IgbmV3IGhlYWRzLCB3aGlsZSBhbHNvIHVwZGF0aW5nIHRoZSBzdGFydCBzbG90cyBvZg0K PiBhbnkgdW5tb2RpZmllZCAoYnV0DQo+ICsJICogYWN0aXZlKSBoZWFkcyB0aGF0IG1heSBoYXZl IGhhZCB0aGVpciBWQyBzbG90cyBzaGlmdGVkIGxlZnQgYWZ0ZXIgdGhlDQo+IHByZXZpb3VzIHN0 ZXANCj4gKwkgKi8NCj4gKwlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBtc3RtLT5vdXRw LT5iYXNlLmJhc2UuZGV2KSB7DQo+ICsJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgPT0NCj4g RFJNX01PREVfRU5DT0RFUl9EUE1TVCkgew0KPiArCQkJc3RydWN0IG52NTBfbXN0byAqbXN0byA9 IG52NTBfbXN0byhlbmNvZGVyKTsNCj4gKwkJCXN0cnVjdCBudjUwX21zdGMgKm1zdGMgPSBtc3Rv LT5tc3RjOw0KPiArCQkJaWYgKG1zdGMgJiYgbXN0Yy0+bXN0bSA9PSBtc3RtICYmICFtc3RvLQ0K PiA+ZGlzYWJsZWQpDQo+ICsJCQkJbnY1MF9tc3RvX3ByZXBhcmUoc3RhdGUsIG1zdF9zdGF0ZSwN Cj4gJm1zdG0tPm1nciwgbXN0byk7DQo+ICAJCX0NCj4gIAl9DQo+IA0KPiBAQCAtMTU5OCw5ICsx NjAxLDcgQEAgbnY1MF9tc3RtX25ldyhzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpvdXRwLA0KPiBz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBpbnQgYXV4X21heCwNCj4gIAltc3RtLT5tZ3IuY2JzID0g Jm52NTBfbXN0bTsNCj4gDQo+ICAJcmV0ID0gZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdCgm bXN0bS0+bWdyLCBkZXYsIGF1eCwNCj4gYXV4X21heCwNCj4gLQkJCQkJICAgbWF4X3BheWxvYWRz LCBvdXRwLT5kY2ItDQo+ID5kcGNvbmYubGlua19uciwNCj4gLQ0KPiBkcm1fZHBfYndfY29kZV90 b19saW5rX3JhdGUob3V0cC0+ZGNiLT5kcGNvbmYubGlua19idyksDQo+IC0JCQkJCSAgIGNvbm5f YmFzZV9pZCk7DQo+ICsJCQkJCSAgIG1heF9wYXlsb2FkcywgY29ubl9iYXNlX2lkKTsNCj4gIAlp ZiAocmV0KQ0KPiAgCQlyZXR1cm4gcmV0Ow0KPiANCj4gQEAgLTIwNDUsMjAgKzIwNDYsMjAgQEAg bnY1MF9waW9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcg0KPiAqY29ubmVjdG9yLCBzdHJ1 Y3QgZGNiX291dHB1dCAqZGNiZSkNCj4gIHN0YXRpYyB2b2lkDQo+ICBudjUwX2Rpc3BfYXRvbWlj X2NvbW1pdF9jb3JlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwgdTMyDQo+ICppbnRl cmxvY2spDQo+ICB7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7DQo+ ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsNCj4gIAlzdHJ1 Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKHN0YXRlLT5kZXYpOw0KPiAgCXN0cnVj dCBudjUwX2Rpc3AgKmRpc3AgPSBudjUwX2Rpc3AoZHJtLT5kZXYpOw0KPiAgCXN0cnVjdCBudjUw X2NvcmUgKmNvcmUgPSBkaXNwLT5jb3JlOw0KPiAgCXN0cnVjdCBudjUwX21zdG0gKm1zdG07DQo+ IC0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOw0KPiArCWludCBpOw0KPiANCj4gIAlOVl9B VE9NSUMoZHJtLCAiY29tbWl0IGNvcmUgJTA4eFxuIiwNCj4gaW50ZXJsb2NrW05WNTBfRElTUF9J TlRFUkxPQ0tfQkFTRV0pOw0KPiANCj4gLQlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBk cm0tPmRldikgew0KPiAtCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9DQo+IERSTV9NT0RF X0VOQ09ERVJfRFBNU1QpIHsNCj4gLQkJCW1zdG0gPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcikt PmRwLm1zdG07DQo+IC0JCQlpZiAobXN0bSAmJiBtc3RtLT5tb2RpZmllZCkNCj4gLQkJCQludjUw X21zdG1fcHJlcGFyZShtc3RtKTsNCj4gLQkJfQ0KPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2lu X3N0YXRlKHN0YXRlLCBtZ3IsIG1zdF9zdGF0ZSwgaSkgew0KPiArCQltc3RtID0gbnY1MF9tc3Rt KG1ncik7DQo+ICsJCWlmIChtc3RtLT5tb2RpZmllZCkNCj4gKwkJCW52NTBfbXN0bV9wcmVwYXJl KHN0YXRlLCBtc3Rfc3RhdGUsIG1zdG0pOw0KPiAgCX0NCj4gDQo+ICAJY29yZS0+ZnVuYy0+bnRm eV9pbml0KGRpc3AtPnN5bmMsIE5WNTBfRElTUF9DT1JFX05URlkpOw0KPiBAQCAtMjA2NywxMiAr MjA2OCwxMCBAQCBudjUwX2Rpc3BfYXRvbWljX2NvbW1pdF9jb3JlKHN0cnVjdA0KPiBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwgdTMyICppbnRlcmxvY2spDQo+ICAJCQkJICAgICAgIGRpc3AtPmNv cmUtPmNoYW4uYmFzZS5kZXZpY2UpKQ0KPiAgCQlOVl9FUlJPUihkcm0sICJjb3JlIG5vdGlmaWVy IHRpbWVvdXRcbiIpOw0KPiANCj4gLQlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBkcm0t PmRldikgew0KPiAtCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9DQo+IERSTV9NT0RFX0VO Q09ERVJfRFBNU1QpIHsNCj4gLQkJCW1zdG0gPSBub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPmRw Lm1zdG07DQo+IC0JCQlpZiAobXN0bSAmJiBtc3RtLT5tb2RpZmllZCkNCj4gLQkJCQludjUwX21z dG1fY2xlYW51cChtc3RtKTsNCj4gLQkJfQ0KPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2luX3N0 YXRlKHN0YXRlLCBtZ3IsIG1zdF9zdGF0ZSwgaSkgew0KPiArCQltc3RtID0gbnY1MF9tc3RtKG1n cik7DQo+ICsJCWlmIChtc3RtLT5tb2RpZmllZCkNCj4gKwkJCW52NTBfbXN0bV9jbGVhbnVwKHN0 YXRlLCBtc3Rfc3RhdGUsIG1zdG0pOw0KPiAgCX0NCj4gIH0NCj4gDQo+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4gYi9pbmNsdWRlL2RybS9k aXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4gaW5kZXggZWNkMTMwMDI4MzM3Li42MzE3ODMx NzA1YWIgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF9oZWxw ZXIuaA0KPiArKysgYi9pbmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4g QEAgLTQ4LDIwICs0OCw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl9oaXN0b3J5 IHsNCj4gDQo+ICBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2g7DQo+IA0KPiAtLyoqDQo+IC0gKiBz dHJ1Y3QgZHJtX2RwX3ZjcGkgLSBWaXJ0dWFsIENoYW5uZWwgUGF5bG9hZCBJZGVudGlmaWVyDQo+ IC0gKiBAdmNwaTogVmlydHVhbCBjaGFubmVsIElELg0KPiAtICogQHBibjogUGF5bG9hZCBCYW5k d2lkdGggTnVtYmVyIGZvciB0aGlzIGNoYW5uZWwNCj4gLSAqIEBhbGlnbmVkX3BibjogUEJOIGFs aWduZWQgd2l0aCBzbG90IHNpemUNCj4gLSAqIEBudW1fc2xvdHM6IG51bWJlciBvZiBzbG90cyBm b3IgdGhpcyBQQk4NCj4gLSAqLw0KPiAtc3RydWN0IGRybV9kcF92Y3BpIHsNCj4gLQlpbnQgdmNw aTsNCj4gLQlpbnQgcGJuOw0KPiAtCWludCBhbGlnbmVkX3BibjsNCj4gLQlpbnQgbnVtX3Nsb3Rz Ow0KPiAtfTsNCj4gLQ0KPiAgLyoqDQo+ICAgKiBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IC0gTVNU IHBvcnQNCj4gICAqIEBwb3J0X251bTogcG9ydCBudW1iZXINCj4gQEAgLTE0Miw3ICsxMjgsNiBA QCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX2F1eCBhdXg7IC8q IGkyYyBidXMgZm9yIHRoaXMgcG9ydD8gKi8NCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg KnBhcmVudDsNCj4gDQo+IC0Jc3RydWN0IGRybV9kcF92Y3BpIHZjcGk7DQo+ICAJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1ncjsNCj4gDQo+IEBAIC01MjcsMTkgKzUxMiw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X2NicyB7DQo+ICAJdm9pZCAoKnBvbGxfaHBkX2lycSkoc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IpOw0KPiAgfTsNCj4gDQo+IC0jZGVmaW5lIERQX01BWF9QQVlMT0FE IChzaXplb2YodW5zaWduZWQgbG9uZykgKiA4KQ0KPiAtDQo+IC0jZGVmaW5lIERQX1BBWUxPQURf TE9DQUwgMQ0KPiAtI2RlZmluZSBEUF9QQVlMT0FEX1JFTU9URSAyDQo+IC0jZGVmaW5lIERQX1BB WUxPQURfREVMRVRFX0xPQ0FMIDMNCj4gLQ0KPiAtc3RydWN0IGRybV9kcF9wYXlsb2FkIHsNCj4g LQlpbnQgcGF5bG9hZF9zdGF0ZTsNCj4gLQlpbnQgc3RhcnRfc2xvdDsNCj4gLQlpbnQgbnVtX3Ns b3RzOw0KPiAtCWludCB2Y3BpOw0KPiAtfTsNCj4gLQ0KPiAgI2RlZmluZSB0b19kcF9tc3RfdG9w b2xvZ3lfc3RhdGUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlLCBiYXNlKQ0KPiANCj4gIC8qKg0KPiBAQCAtNTUxLDYgKzUyMywzNSBAQCBzdHJ1 Y3QgZHJtX2RwX3BheWxvYWQgew0KPiAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQg ew0KPiAgCS8qKiBAcG9ydDogVGhlIE1TVCBwb3J0IGFzc2lnbmVkIHRvIHRoaXMgcGF5bG9hZCAq Lw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7DQo+ICsNCj4gKwkvKioNCj4gKwkg KiBAdmNfc3RhcnRfc2xvdDogVGhlIHRpbWUgc2xvdCB0aGF0IHRoaXMgcGF5bG9hZCBzdGFydHMg b24uIEJlY2F1c2UNCj4gcGF5bG9hZCBzdGFydCBzbG90cw0KPiArCSAqIGNhbid0IGJlIGRldGVy bWluZWQgYWhlYWQgb2YgdGltZSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdmFsdWUgYXJlDQo+IFVO REVGSU5FRCBhdCBhdG9taWMNCj4gKwkgKiBjaGVjayB0aW1lLiBUaGlzIHNob3VsZG4ndCB1c3Vh bGx5IG1hdHRlciwgYXMgdGhlIHN0YXJ0IHNsb3Qgc2hvdWxkDQo+IG5ldmVyIGJlIHJlbGV2YW50 IGZvcg0KPiArCSAqIGF0b21pYyBzdGF0ZSBjb21wdXRhdGlvbnMuDQo+ICsJICoNCj4gKwkgKiBT aW5jZSB0aGlzIHZhbHVlIGlzIGRldGVybWluZWQgYXQgY29tbWl0IHRpbWUgaW5zdGVhZCBvZiBj aGVjaw0KPiB0aW1lLCB0aGlzIHZhbHVlIGlzDQo+ICsJICogcHJvdGVjdGVkIGJ5IHRoZSBNU1Qg aGVscGVycyBlbnN1cmluZyB0aGF0IGFzeW5jIGNvbW1pdHMNCj4gb3BlcmF0aW5nIG9uIHRoZSBn aXZlbiB0b3BvbG9neQ0KPiArCSAqIG5ldmVyIHJ1biBpbiBwYXJhbGxlbC4gSW4gdGhlIGV2ZW50 IHRoYXQgYSBkcml2ZXIgZG9lcyBuZWVkIHRvIHJlYWQNCj4gdGhpcyB2YWx1ZSAoZS5nLiB0bw0K PiArCSAqIGluZm9ybSBoYXJkd2FyZSBvZiB0aGUgc3RhcnRpbmcgdGltZXNsb3QgZm9yIGEgcGF5 bG9hZCksIHRoZSBkcml2ZXINCj4gbWF5IGVpdGhlcjoNCj4gKwkgKg0KPiArCSAqICogUmVhZCB0 aGlzIGZpZWxkIGR1cmluZyB0aGUgYXRvbWljIGNvbW1pdCBhZnRlcg0KPiArCSAqICAgZHJtX2Rw X21zdF9hdG9taWNfd2FpdF9mb3JfZGVwZW5kZW5jaWVzKCkgaGFzIGJlZW4gY2FsbGVkLA0KPiB3 aGljaCB3aWxsIGVuc3VyZSB0aGUNCj4gKwkgKiAgIHByZXZpb3VzIE1TVCBzdGF0ZXMgcGF5bG9h ZCBzdGFydCBzbG90cyBoYXZlIGJlZW4gY29waWVkIG92ZXIgdG8NCj4gdGhlIG5ldyBzdGF0ZS4g Tm90ZQ0KPiArCSAqICAgdGhhdCBhIG5ldyBzdGFydCBzbG90IHdvbid0IGJlIGFzc2lnbmVkL3Jl bW92ZWQgZnJvbSB0aGlzDQo+IHBheWxvYWQgdW50aWwNCj4gKwkgKiAgIGRybV9kcF9hZGRfcGF5 bG9hZF9wYXJ0MSgpL2RybV9kcF9yZW1vdmVfcGF5bG9hZCgpIGhhdmUNCj4gYmVlbiBjYWxsZWQu DQo+ICsJICogKiBBY3F1aXJlIHRoZSBNU1QgbW9kZXNldHRpbmcgbG9jaywgYW5kIHRoZW4gd2Fp dCBmb3IgYW55DQo+IHBlbmRpbmcgTVNULXJlbGF0ZWQgY29tbWl0cyB0bw0KPiArCSAqICAgZ2V0 IGNvbW1pdHRlZCB0byBoYXJkd2FyZSBieSBjYWxsaW5nIGRybV9jcnRjX2NvbW1pdF93YWl0KCkg b24NCj4gZWFjaCBvZiB0aGUNCj4gKwkgKiAgICZkcm1fY3J0Y19jb21taXQgc3RydWN0cyBpbg0K PiAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS5jb21taXRfZGVwcy4NCj4gKwkgKg0KPiArCSAq IElmIG5laXRoZXIgb2YgdGhlIHR3byBhYm92ZSBzb2x1dGlvbnMgc3VmZmljZSAoZS5nLiB0aGUg ZHJpdmVyIG5lZWRzDQo+IHRvIHJlYWQgdGhlIHN0YXJ0DQo+ICsJICogc2xvdCBpbiB0aGUgbWlk ZGxlIG9mIGFuIGF0b21pYyBjb21taXQgd2l0aG91dCB3YWl0aW5nIGZvciBzb21lDQo+IHJlYXNv biksIHRoZW4gZHJpdmVycw0KPiArCSAqIHNob3VsZCBjYWNoZSB0aGlzIHZhbHVlIHRoZW1zZWx2 ZXMgYWZ0ZXIgY2hhbmdpbmcgcGF5bG9hZHMuDQo+ICsJICovDQo+ICsJczggdmNfc3RhcnRfc2xv dDsNCj4gKw0KPiArCS8qKiBAdmNwaTogVGhlIFZpcnR1YWwgQ2hhbm5lbCBQYXlsb2FkIElkZW50 aWZpZXIgKi8NCj4gKwl1OCB2Y3BpOw0KPiAgCS8qKiBAdGltZV9zbG90czogVGhlIG51bWJlciBv ZiB0aW1lc2xvdHMgYWxsb2NhdGVkIHRvIHRoaXMgcGF5bG9hZA0KPiAqLw0KPiAgCWludCB0aW1l X3Nsb3RzOw0KPiAgCS8qKiBAcGJuOiBUaGUgcGF5bG9hZCBiYW5kd2lkdGggZm9yIHRoaXMgcGF5 bG9hZCAqLw0KPiBAQCAtNTc0LDggKzU3NSw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlIHsNCj4gIAkvKiogQGJhc2U6IEJhc2UgcHJpdmF0ZSBzdGF0ZSBmb3IgYXRvbWljICov DQo+ICAJc3RydWN0IGRybV9wcml2YXRlX3N0YXRlIGJhc2U7DQo+IA0KPiAtCS8qKiBAcGF5bG9h ZHM6IFRoZSBsaXN0IG9mIHBheWxvYWRzIGJlaW5nIGNyZWF0ZWQvZGVzdHJveWVkIGluIHRoaXMN Cj4gc3RhdGUgKi8NCj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIHBheWxvYWRzOw0KPiAgCS8qKiBAbWdy OiBUaGUgdG9wb2xvZ3kgbWFuYWdlciAqLw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyOw0KPiANCj4gQEAgLTU5MiwxMCArNTkxLDIxIEBAIHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X3N0YXRlIHsNCj4gIAkvKiogQG51bV9jb21taXRfZGVwczogVGhlIG51bWJlciBv ZiBDUlRDIGNvbW1pdHMgaW4NCj4gQGNvbW1pdF9kZXBzICovDQo+ICAJc2l6ZV90IG51bV9jb21t aXRfZGVwczsNCj4gDQo+ICsJLyoqIEBwYXlsb2FkX21hc2s6IEEgYml0bWFzayBvZiBhbGxvY2F0 ZWQgVkNQSXMsIHVzZWQgZm9yIFZDUEkNCj4gYXNzaWdubWVudHMgKi8NCj4gKwl1MzIgcGF5bG9h ZF9tYXNrOw0KPiArCS8qKiBAcGF5bG9hZHM6IFRoZSBsaXN0IG9mIHBheWxvYWRzIGJlaW5nIGNy ZWF0ZWQvZGVzdHJveWVkIGluIHRoaXMNCj4gc3RhdGUgKi8NCj4gKwlzdHJ1Y3QgbGlzdF9oZWFk IHBheWxvYWRzOw0KPiArDQo+ICAJLyoqIEB0b3RhbF9hdmFpbF9zbG90czogVGhlIHRvdGFsIG51 bWJlciBvZiBzbG90cyB0aGlzIHRvcG9sb2d5IGNhbg0KPiBoYW5kbGUgKDYzIG9yIDY0KSAqLw0K PiAgCXU4IHRvdGFsX2F2YWlsX3Nsb3RzOw0KPiAgCS8qKiBAc3RhcnRfc2xvdDogVGhlIGZpcnN0 IHVzYWJsZSB0aW1lIHNsb3QgaW4gdGhpcyB0b3BvbG9neSAoMSBvciAwKSAqLw0KPiAgCXU4IHN0 YXJ0X3Nsb3Q7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAcGJuX2RpdjogVGhlIGN1cnJlbnQgUEJO IGRpdmlzb3IgZm9yIHRoaXMgdG9wb2xvZ3kuIFRoZSBkcml2ZXIgaXMNCj4gZXhwZWN0ZWQgdG8g ZmlsbCB0aGlzDQo+ICsJICogb3V0IGl0c2VsZi4NCj4gKwkgKi8NCj4gKwlpbnQgcGJuX2RpdjsN Cj4gIH07DQo+IA0KPiAgI2RlZmluZSB0b19kcF9tc3RfdG9wb2xvZ3lfbWdyKHgpIGNvbnRhaW5l cl9vZih4LCBzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IsIGJhc2UpDQo+IEBAIC02 MzUsMTQgKzY0NSw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciB7DQo+ICAJICog QG1heF9wYXlsb2FkczogbWF4aW11bSBudW1iZXIgb2YgcGF5bG9hZHMgdGhlIEdQVSBjYW4NCj4g Z2VuZXJhdGUuDQo+ICAJICovDQo+ICAJaW50IG1heF9wYXlsb2FkczsNCj4gLQkvKioNCj4gLQkg KiBAbWF4X2xhbmVfY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIGxhbmVzIHRoZSBHUFUgY2FuIGRy aXZlLg0KPiAtCSAqLw0KPiAtCWludCBtYXhfbGFuZV9jb3VudDsNCj4gLQkvKioNCj4gLQkgKiBA bWF4X2xpbmtfcmF0ZTogbWF4aW11bSBsaW5rIHJhdGUgcGVyIGxhbmUgR1BVIGNhbiBvdXRwdXQs IGluDQo+IGtIei4NCj4gLQkgKi8NCj4gLQlpbnQgbWF4X2xpbmtfcmF0ZTsNCj4gIAkvKioNCj4g IAkgKiBAY29ubl9iYXNlX2lkOiBEUk0gY29ubmVjdG9yIElEIHRoaXMgbWdyIGlzIGNvbm5lY3Rl ZCB0by4gT25seQ0KPiB1c2VkDQo+ICAJICogdG8gYnVpbGQgdGhlIE1TVCBjb25uZWN0b3IgcGF0 aCB2YWx1ZS4NCj4gQEAgLTY4NSw2ICs2ODcsMjAgQEAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyIHsNCj4gIAkgKi8NCj4gIAlib29sIHBheWxvYWRfaWRfdGFibGVfY2xlYXJlZCA6IDE7 DQo+IA0KPiArCS8qKg0KPiArCSAqIEBwYXlsb2FkX2NvdW50OiBUaGUgbnVtYmVyIG9mIGN1cnJl bnRseSBhY3RpdmUgcGF5bG9hZHMgaW4NCj4gaGFyZHdhcmUuIFRoaXMgdmFsdWUgaXMgb25seQ0K PiArCSAqIGludGVuZGVkIHRvIGJlIHVzZWQgaW50ZXJuYWxseSBieSBNU1QgaGVscGVycyBmb3Ig cGF5bG9hZCB0cmFja2luZywNCj4gYW5kIGlzIG9ubHkgc2FmZSB0bw0KPiArCSAqIHJlYWQvd3Jp dGUgZnJvbSB0aGUgYXRvbWljIGNvbW1pdCAobm90IGNoZWNrKSBjb250ZXh0Lg0KPiArCSAqLw0K PiArCXU4IHBheWxvYWRfY291bnQ7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAbmV4dF9zdGFydF9z bG90OiBUaGUgc3RhcnRpbmcgdGltZXNsb3QgdG8gdXNlIGZvciBuZXcgVkMgcGF5bG9hZHMuDQo+ IFRoaXMgdmFsdWUgaXMgdXNlZA0KPiArCSAqIGludGVybmFsbHkgYnkgTVNUIGhlbHBlcnMgZm9y IHBheWxvYWQgdHJhY2tpbmcsIGFuZCBpcyBvbmx5IHNhZmUgdG8NCj4gcmVhZC93cml0ZSBmcm9t IHRoZQ0KPiArCSAqIGF0b21pYyBjb21taXQgKG5vdCBjaGVjaykgY29udGV4dC4NCj4gKwkgKi8N Cj4gKwl1OCBuZXh0X3N0YXJ0X3Nsb3Q7DQo+ICsNCj4gIAkvKioNCj4gIAkgKiBAbXN0X3ByaW1h cnk6IFBvaW50ZXIgdG8gdGhlIHByaW1hcnkvZmlyc3QgYnJhbmNoIGRldmljZS4NCj4gIAkgKi8N Cj4gQEAgLTY5OCwxMCArNzE0LDYgQEAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyIHsN Cj4gIAkgKiBAc2lua19jb3VudDogU2luayBjb3VudCBmcm9tIERFVklDRV9TRVJWSUNFX0lSUV9W RUNUT1JfRVNJMC4NCj4gIAkgKi8NCj4gIAl1OCBzaW5rX2NvdW50Ow0KPiAtCS8qKg0KPiAtCSAq IEBwYm5fZGl2OiBQQk4gdG8gc2xvdHMgZGl2aXNvci4NCj4gLQkgKi8NCj4gLQlpbnQgcGJuX2Rp djsNCj4gDQo+ICAJLyoqDQo+ICAJICogQGZ1bmNzOiBBdG9taWMgaGVscGVyIGNhbGxiYWNrcw0K PiBAQCAtNzE4LDMyICs3MzAsNiBAQCBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Igew0K PiAgCSAqLw0KPiAgCXN0cnVjdCBsaXN0X2hlYWQgdHhfbXNnX2Rvd25xOw0KPiANCj4gLQkvKioN Cj4gLQkgKiBAcGF5bG9hZF9sb2NrOiBQcm90ZWN0IHBheWxvYWQgaW5mb3JtYXRpb24uDQo+IC0J ICovDQo+IC0Jc3RydWN0IG11dGV4IHBheWxvYWRfbG9jazsNCj4gLQkvKioNCj4gLQkgKiBAcHJv cG9zZWRfdmNwaXM6IEFycmF5IG9mIHBvaW50ZXJzIGZvciB0aGUgbmV3IFZDUEkgYWxsb2NhdGlv bi4NCj4gVGhlDQo+IC0JICogVkNQSSBzdHJ1Y3R1cmUgaXRzZWxmIGlzICZkcm1fZHBfbXN0X3Bv cnQudmNwaSwgYW5kIHRoZSBzaXplIG9mDQo+IC0JICogdGhpcyBhcnJheSBpcyBkZXRlcm1pbmVk IGJ5IEBtYXhfcGF5bG9hZHMuDQo+IC0JICovDQo+IC0Jc3RydWN0IGRybV9kcF92Y3BpICoqcHJv cG9zZWRfdmNwaXM7DQo+IC0JLyoqDQo+IC0JICogQHBheWxvYWRzOiBBcnJheSBvZiBwYXlsb2Fk cy4gVGhlIHNpemUgb2YgdGhpcyBhcnJheSBpcyBkZXRlcm1pbmVkDQo+IC0JICogYnkgQG1heF9w YXlsb2Fkcy4NCj4gLQkgKi8NCj4gLQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWRzOw0K PiAtCS8qKg0KPiAtCSAqIEBwYXlsb2FkX21hc2s6IEVsZW1lbnRzIG9mIEBwYXlsb2FkcyBhY3R1 YWxseSBpbiB1c2UuIFNpbmNlDQo+IC0JICogcmVhbGxvY2F0aW9uIG9mIGFjdGl2ZSBvdXRwdXRz IGlzbid0IHBvc3NpYmxlIGdhcHMgY2FuIGJlIGNyZWF0ZWQgYnkNCj4gLQkgKiBkaXNhYmxpbmcg b3V0cHV0cyBvdXQgb2Ygb3JkZXIgY29tcGFyZWQgdG8gaG93IHRoZXkndmUgYmVlbg0KPiBlbmFi bGVkLg0KPiAtCSAqLw0KPiAtCXVuc2lnbmVkIGxvbmcgcGF5bG9hZF9tYXNrOw0KPiAtCS8qKg0K PiAtCSAqIEB2Y3BpX21hc2s6IFNpbWlsYXIgdG8gQHBheWxvYWRfbWFzaywgYnV0IGZvciBAcHJv cG9zZWRfdmNwaXMuDQo+IC0JICovDQo+IC0JdW5zaWduZWQgbG9uZyB2Y3BpX21hc2s7DQo+IC0N Cj4gIAkvKioNCj4gIAkgKiBAdHhfd2FpdHE6IFdhaXQgdG8gcXVldWUgc3RhbGwgZm9yIHRoZSB0 eCB3b3JrZXIuDQo+ICAJICovDQo+IEBAIC04MTUsOSArODAxLDcgQEAgc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyIHsNCj4gIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9pbml0KHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncg0KPiAqbWdyLA0KPiAgCQkJCSBzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2RwX2F1eA0KPiAqYXV4LA0KPiAgCQkJCSBpbnQgbWF4 X2RwY2RfdHJhbnNhY3Rpb25fYnl0ZXMsDQo+IC0JCQkJIGludCBtYXhfcGF5bG9hZHMsDQo+IC0J CQkJIGludCBtYXhfbGFuZV9jb3VudCwgaW50IG1heF9saW5rX3JhdGUsDQo+IC0JCQkJIGludCBj b25uX2Jhc2VfaWQpOw0KPiArCQkJCSBpbnQgbWF4X3BheWxvYWRzLCBpbnQgY29ubl9iYXNlX2lk KTsNCj4gDQo+ICB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2Rlc3Ryb3koc3RydWN0DQo+ IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOw0KPiANCj4gQEAgLTg0MCwyOCArODI0LDE3 IEBAIGludCBkcm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncoY29uc3Qgc3RydWN0DQo+IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+IA0KPiAgaW50IGRybV9kcF9jYWxjX3Bibl9tb2RlKGlu dCBjbG9jaywgaW50IGJwcCwgYm9vbCBkc2MpOw0KPiANCj4gLWJvb2wgZHJtX2RwX21zdF9hbGxv Y2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJICAg ICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibiwgaW50IHNsb3RzKTsNCj4g LQ0KPiAtaW50IGRybV9kcF9tc3RfZ2V0X3ZjcGlfc2xvdHMoc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyICptZ3IsDQo+IHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiAtDQo+ IC0NCj4gLXZvaWQgZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21ncg0KPiAqbWdyLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsNCj4g LQ0KPiAgdm9pZCBkcm1fZHBfbXN0X3VwZGF0ZV9zbG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZQ0KPiAqbXN0X3N0YXRlLCB1aW50OF90IGxpbmtfZW5jb2RpbmdfY2FwKTsNCj4g DQo+IC12b2lkIGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0K PiAtDQo+IC0NCj4gLWludCBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJICAgaW50IHBibik7DQo+IC0NCj4gLQ0KPiAtaW50 IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3INCj4gKm1nciwgaW50IHN0YXJ0X3Nsb3QpOw0KPiAtDQo+IC0NCj4gLWludCBkcm1fZHBfdXBk YXRlX3BheWxvYWRfcGFydDIoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3Ip Ow0KPiAraW50IGRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgKm1zdF9zdGF0ZSwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxv YWQgKnBheWxvYWQpOw0KPiAraW50IGRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MihzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlLA0KPiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9h ZCAqcGF5bG9hZCk7DQo+ICt2b2lkIGRybV9kcF9yZW1vdmVfcGF5bG9hZChzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCQkgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNf cGF5bG9hZCAqcGF5bG9hZCk7DQo+IA0KPiAgaW50IGRybV9kcF9jaGVja19hY3Rfc3RhdHVzKHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gDQo+IEBAIC04ODMsMTcgKzg1 NiwyMiBAQCBpbnQgZHJtX2RwX21zdF9jb25uZWN0b3JfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QNCj4g ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLA0KPiAgdm9pZCBkcm1fZHBfbXN0X2Nvbm5lY3Rvcl9l YXJseV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yDQo+ICpjb25uZWN0b3IsDQo+ICAJ CQkJCSAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiANCj4gLXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlDQo+ICpkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3Rh dGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAtCQkJCQkJCQkgICAgc3RydWN0 DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOw0KPiArc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgKg0KPiArZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gKwkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gK3N0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRl ICoNCj4gK2RybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9h dG9taWNfc3RhdGUNCj4gKnN0YXRlLA0KPiArCQkJCSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyKTsNCj4gK3N0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICoN Cj4gK2RybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlDQo+ICpzdGF0ZSwNCj4gKwkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAq cG9ydCk7DQo+ICBpbnQgX19tdXN0X2NoZWNrDQo+ICBkcm1fZHBfYXRvbWljX2ZpbmRfdGltZV9z bG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJCQkgICAgICBzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgICAgIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQsIGludCBwYm4sDQo+IC0JCQkgICAgICBpbnQgcGJuX2Rpdik7DQo+ICsJ CQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsNCj4gIGludCBk cm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwNCj4gIAkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwNCj4gLQkJCQkgaW50IHBi biwgaW50IHBibl9kaXYsDQo+IC0JCQkJIGJvb2wgZW5hYmxlKTsNCj4gKwkJCQkgaW50IHBibiwg Ym9vbCBlbmFibGUpOw0KPiAgaW50IF9fbXVzdF9jaGVjaw0KPiAgZHJtX2RwX21zdF9hZGRfYWZm ZWN0ZWRfZHNjX2NydGNzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkg IHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gQEAgLTkxNyw2ICs4OTUs MTIgQEAgdm9pZCBkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhzdHJ1Y3QNCj4gZHJtX2RwX21z dF9wb3J0ICpwb3J0KTsNCj4gDQo+ICBzdHJ1Y3QgZHJtX2RwX2F1eCAqZHJtX2RwX21zdF9kc2Nf YXV4X2Zvcl9wb3J0KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiANCj4gK3N0 YXRpYyBpbmxpbmUgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKg0KPiArdG9fZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKQ0K PiArew0KPiArCXJldHVybiBjb250YWluZXJfb2Yoc3RhdGUsIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlLA0KPiBiYXNlKTsNCj4gK30NCj4gKw0KPiAgZXh0ZXJuIGNvbnN0IHN0cnVj dCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcw0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1 bmNzOw0KPiANCj4gIC8qKg0KPiAtLQ0KPiAyLjM1LjMNCg0KLS0NClJlZ2FyZHMsDQpXYXluZSBM aW4NCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C504AC43334 for ; Tue, 5 Jul 2022 11:33:22 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2C21C10FDB4; Tue, 5 Jul 2022 11:30:32 +0000 (UTC) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2051.outbound.protection.outlook.com [40.107.95.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4AEF410E021; Tue, 5 Jul 2022 09:11:00 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gMr+j4fM23CTtk+/07Q58GnbOz0xTbRfOQg0iSQh1jTWBqvZw7zyIbZ3sBDIfquiE9TA0e0ewccix8KuZx1/rOPT4VUpJjB6V2Eio7CHsv/8z6mnSOJTENQ7WZcaH/+0zkHr7iAOSHg/Jg8s+c0kzl4+a7II4hYis50xuJsFN5hRgY3plp3yDUZBktQjhuY30P45QbY53g/ZM7c5dlv6iv/tbj0x2vS8s9ajUqpQqHQmOMmHbG9dvWTfRheFLPWM7+x883Ot3bwcTSLd//i+wmK7CnK+Qq8PZBe2HWslhaTv4gAyp6Krqv0y/Cs0RIhtSkiWOUJ/4AEGyWhl2vlPJw== 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=Gj/NtdgojSIUq7nOCXWTipMd/Zt2eV7hUiMWOs6hexY=; b=NkcoFgqqs3bIm38qzbOUsGip4IKG9BUyh0nlBvGKYwRpYuwSxty5PVW1GnTJXDelR38hCqBExuPoNXo75oi9ywfY8K2H+TqxJebixKlniNmWYHLwO5j2INaZUQXxzY/FN9SZ+ap1YwEL6XuPi91A+kZmYjb5umGVpq/vO4dtb2AhrILJbw6e0KqZZpvkk8gxrksPHNLdWVS9Zo1vsFRcQpww5VPsP7/NeBYuhTZjLW8DjoySEexy3OdvKdpLoHnGuQos2UVmi6DbeRRPo6jSgTcz/gWH+Oz+gg3J1wFZ/Va23mKQk2dvRmS+w1LcTHdJRDaQ9eM/k2G3jU/GqHPEbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Gj/NtdgojSIUq7nOCXWTipMd/Zt2eV7hUiMWOs6hexY=; b=yU+i6VaLsRZvNZcERYBBBr5sX5PvGM5o6/hYsWqyr71xXWkWhau6q+ZzVpxghHECcZzkSNrZyxuValoQLT5Jxqa2T/dygkpXpNDOaptqzIlk4jvN3JpFSau1eFhq+rP+ur5+o+DamOVYXw0sdNQAD0xKfowjjeGYP0OU21IIBxY= Received: from CO6PR12MB5489.namprd12.prod.outlook.com (2603:10b6:303:139::18) by MN2PR12MB3280.namprd12.prod.outlook.com (2603:10b6:208:ad::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.15; Tue, 5 Jul 2022 09:10:52 +0000 Received: from CO6PR12MB5489.namprd12.prod.outlook.com ([fe80::68dc:88ad:eb33:1813]) by CO6PR12MB5489.namprd12.prod.outlook.com ([fe80::68dc:88ad:eb33:1813%9]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 09:10:52 +0000 From: "Lin, Wayne" To: Lyude Paul , "dri-devel@lists.freedesktop.org" , "nouveau@lists.freedesktop.org" , "amd-gfx@lists.freedesktop.org" Subject: RE: [RESEND RFC 18/18] drm/display/dp_mst: Move all payload info into the atomic state Thread-Topic: [RESEND RFC 18/18] drm/display/dp_mst: Move all payload info into the atomic state Thread-Index: AQHYeqbgSVnUwi//gUS5WPmor4cgkq1votDQ Date: Tue, 5 Jul 2022 09:10:51 +0000 Message-ID: References: <20220607192933.1333228-1-lyude@redhat.com> <20220607192933.1333228-19-lyude@redhat.com> In-Reply-To: <20220607192933.1333228-19-lyude@redhat.com> Accept-Language: en-US, zh-TW Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Enabled=true; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SetDate=2022-07-05T09:10:48Z; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Method=Privileged; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Name=Public-AIP 2.0; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ActionId=5cbec1ad-20a7-4d95-b855-d10037ba4231; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ad76e268-f54f-4767-6fc2-08da5e664264 x-ms-traffictypediagnostic: MN2PR12MB3280:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 8zlpuonYuORPr2AmBvFywzeAk8Cy8jLnx0NclNDHqosKtIrnBT733BbBSqY+g3AzoT8ZI2GJ23zA89RXgpCssgsJs3PXp9fSKNZagxEz07Bfq4H8CsrDZh17z6ewsErIb1FCYnElDJ3Buyp8OvsnzDYrzZr5t1tawejh2HPyhwDxun9JXBoDra0QN9sTtu+d9kF6T2nYyceQgbwZCxXnHS+7tOTHNXmJBoC4Jm8s85uCopStKETmqvbtpJpeJj4P9g/1bXFKDV5iYtF2Qq60XGuEMpJh0vcFTx6gVbDkyy8Dp+pnOzR+WG7leM+HIoP5DBFObMlbKxq6IDZjWiR81DKnumJlUqc07srWPo8j3ZhaWxvvKiDyZu/h+2ChrwSvuZfv7aM6uyc0UHmf84klScYhkeZ45UDC61dyGfhErUntUyYzmuGntTvDXZ21fr/Aag2GuSiE634yPmdVtb+wKUS8WSrVnwsNSWpTzslGA6FpKPzBHuGxclNlSq7a3eSvrJLqFNTzJdfG4FZoVhICdjHa9bwpfiz7wvE5XZ5Q7MSBCealmNv9oOjI1aNd1jKb+5aN9CEp19TjZetjc3oRuF+NKB5s2BTc7MagpOXjgKylwoOCXRtCr/C+f+cCBX68M9iShUX0R/73Ssdj1VZktqYItoWqjLF/Vdbu1Tr6ntc1qEtCdeIAXES5rjYf5wdpjwgMVID0O4J5fUAXUw8SaEVSKhfrIqVzKRdkRTo0NwnNT0jZFwkuv5QEuoc8DB+4JxYGKUszu+wTuCtqd3n2/ey/7wlOd3zy5i133QpiFUNcYwD1N04vkSaA/mGL+VpV5GGP9Md9Eo8SCYKdocnrUA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR12MB5489.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(39860400002)(136003)(396003)(346002)(376002)(366004)(38100700002)(66946007)(8676002)(4326008)(76116006)(7696005)(66556008)(66476007)(66446008)(64756008)(6506007)(30864003)(7406005)(5660300002)(7416002)(2906002)(86362001)(55016003)(38070700005)(122000001)(53546011)(8936002)(52536014)(478600001)(41300700001)(71200400001)(66574015)(83380400001)(110136005)(54906003)(316002)(186003)(9686003)(33656002)(26005)(21314003)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bk5XMkt6WHV0YnBsbjAvVGRabnQvQjVCckZFaThFVGlMK0ZnUllhWWpyd2da?= =?utf-8?B?djBoMjFuc0FienF1SStGZnNlbkpIT2tLaDk2WDhJUkE0OThRd3d0Qk1TOEhr?= =?utf-8?B?em4vS3dnWTlRLzZicThlOGZJSlh2Q1o5N3dZRjN3K1hIZlg0ZjRFNnJRNXhE?= =?utf-8?B?eVpXUjFOQlRKTGNQMGc3aWVFNTVUcXpid2RCeVptU3Q0eFFGSWdTZngrOCtz?= =?utf-8?B?dXFRcDNOcUJOQVFZbUdzbWVTMExyd2NUcktJWXgzakh2YXp2d0Q1bXVYa01n?= =?utf-8?B?ZmdkcFRZSVVXaTRCeEdTeEwvTkpQSzVMYld5WG5CeWZaZGlGbjlUVkcwdEI1?= =?utf-8?B?TTBESFYrQmhqeERCWnJUVzQ4dVNRenRINVE0dHl5MGdhWGI0ZXBST0tsMkgz?= =?utf-8?B?YThKdDNyN2dRanNCU3JTNDk4K29jZlpiQ0ZTYjZtUEdsNENubHBQRnJZR2Uv?= =?utf-8?B?R3lOOWYrWjJ4eG51NGdCVTM3UUxWdkhWQXBEczk1VU1NMXZBS3dpenBmSzNZ?= =?utf-8?B?UWJqOHUyV3MvM1BYQkYzemtBZmRWQmdsTG5FdDBDTUhzekxiOGxGOWJjeEJL?= =?utf-8?B?M1dlTTE5MkdFaG5VeFhrZGZKU2pjQ0JORmpLRTJlM05scE1IdGVMSkFGQ0NK?= =?utf-8?B?YzVBcmN0QzBiUVIvMnlubkVTVE9UV20vajZBS1EvOWZLd1VsZnA0SStnY0Nm?= =?utf-8?B?MllvNGsySkNjRTU5YVM3OWdRYWZHcUZjYTdzejlvVnY0NW1HY3g4MGhuVkhj?= =?utf-8?B?dEUxdkRmdkF1Y0pGVHhnZnRReHpNMGt2WkorbDBvRUZwcGZLTzZaamdIVXlJ?= =?utf-8?B?bzBDV2NLRHhnbWk5NWNYeDVLTlhWNVUrY05CWFFpNnM4aC9KYmpVTUN5bzBN?= =?utf-8?B?dnFwUk5BK0Y1R1RkQlpOV1pFenBaTmtURXZCUk5FWE82TVk2WHphbktxSElI?= =?utf-8?B?SDlJTFBoYjJrdk85UTNCNmNBanVZdHBkenZOWlZGU3dDZEtrUXA2VUM1aXgw?= =?utf-8?B?U1QvcEtDTngxaDdxWkEwYXBtaWhKQmNiMW4vcDd2VWNYUkRlc3JEZW5yTWdy?= =?utf-8?B?S2tkMmsvLzU5OHFnb3FzRUZPbGUva0RTRk1vSmFwdzdXMWtOcFlybGJjQzJP?= =?utf-8?B?NEtDSWNlYmI2QkRsTlp4WXVKSitQbHZ2K1VHakdJdFBJOUQrNFl3VXFOcHB5?= =?utf-8?B?R3JhblBNWlhxZjlCOEdlTUpUVE5xN1Rlb0VkZnA4djlGTTFiaVpnQUxsY2h5?= =?utf-8?B?NFl1ZDJDaXZmOTdRcUpKZzRwdnd5SDRUaVJsaFluZ2Z1K29TVWVuclYwckN6?= =?utf-8?B?eTVSbTE1cnBOYUhhbW5yb0EyL2l5Rk05Mkp4SEdvQVFRZW9tOHRvWk1FUisz?= =?utf-8?B?bmNvNFFZOHpsNktqdjdKaDMvVGxYbUN6QWUwUU5mWWxFZFdzaExraHE0T1lQ?= =?utf-8?B?Z2hJMDRaSWJObkU2ZWNOSjBTemNNSmdzVmM0NDFQNVV1dWRsWWtEMU1TQlFi?= =?utf-8?B?VEp5cE5GejJ4enRKQTlDMTkzemNvZ2tweVpiV0V0SkFIT3ZWbnJLblMxRUZi?= =?utf-8?B?K3R3Umo4NlpXLzNiRkZPVW1YOG1paGhJa3M5dThKN1I2bWpXNXpURjFGRlZh?= =?utf-8?B?L2ErR0pEUHFxL2RNQXVIaDBSWWc1encwSmVnVjFlMDVYRVBOUmlCRnZkU0Ju?= =?utf-8?B?Z3l0UHhwSVNuT09GOVFRM0VuOHlmcnBUZ0ZOTjdrQWFMM1VYSWxaNTNjQWFL?= =?utf-8?B?dlBqYmlhY004VWpJTHNQb3NnbkZBck1kU0JqUVZ3NU1nM2c5akRVM3kyVVds?= =?utf-8?B?RzNBcWZZd20zakhkUXJmS3hTZ1B2MEIvMTRHZGJVOTU3ZVhpL3NvUTdOV0xH?= =?utf-8?B?ZklNTGhMblhoU0Qvd1hRY2hId1ZCbi96djhzQWgybDJETDlsUjdsbStab3Nr?= =?utf-8?B?WHRERDkrbUVCV09IMGtXTVNOSjdsMitrQjh2N2ZlMGZQWnNwa0NKQVMrU1Ru?= =?utf-8?B?SDNGeE02bGhGakRldXBBbG0yZExzWmZEYXpQUUZFdWhjK1dVRi9Sbkl3YmNH?= =?utf-8?B?TTdWZ2NXSjk3ZTlpVTlvcVlnTlBZcml1ci9oTDJCcHZ3aHUyVGdWbUdtS1NJ?= =?utf-8?Q?Zz9rO5KlxR1jVY03kYTnufj+N?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO6PR12MB5489.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad76e268-f54f-4767-6fc2-08da5e664264 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Jul 2022 09:10:51.9743 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: a2Gy59UpTwSRezLEg1HrNJt3llLKyUcaC7sQQYlajrFi2RG90T56eOm7IUoewRrP54A53Sm0eJEKiF17BSDFlQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3280 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Chen, Ian" , Karol Herbst , David Airlie , Daniel Vetter , Imre Deak , Joonas Lahtinen , =?utf-8?B?Sm9zw6kgUm9iZXJ0byBkZSBTb3V6YQ==?= , open list , "Lei, Jun" , =?utf-8?B?VmlsbGUgU3lyasOkbMOk?= , "Lakha, Bhawanpreet" , "Siqueira, Rodrigo" , Javier Martinez Canillas , "Li, Sun peng \(Leo\)" , "Zuo, Jerry" , "Shih, Jude" , Ben Skeggs , Andi Shyti , "Strauss, Michael" , "Wentland, Harry" , Juston Li , Thomas Zimmermann , Jani Nikula , Anshuman Gupta , "open list:INTEL DRM DRIVERS" , Luo Jiaxing , Jani Nikula , "Liu, Wenjing" , "Wu, Hersen" , Rodrigo Vivi , "Ma, Leo" , Mikita Lipski , Sean Paul , He Ying , Tvrtko Ursulin , Simon Ser , "Pan, Xinhui" , "Li, Roman" , "Koenig, Christian" , Ashutosh Dixit , Claudio Suarez , Daniel Vetter , "Deucher, Alexander" , Sean Paul , Colin Ian King , "Kazlauskas, Nicholas" , Fernando Ramos Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" W1B1YmxpY10NCg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTHl1 ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4NCj4gU2VudDogV2VkbmVzZGF5LCBKdW5lIDgsIDIw MjIgMzozMCBBTQ0KPiBUbzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgbm91dmVh dUBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGFtZC0NCj4gZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zw0KPiBDYzogTGluLCBXYXluZSA8V2F5bmUuTGluQGFtZC5jb20+OyBWaWxsZSBTeXJqw6Rsw6QN Cj4gPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPjsgWnVvLCBKZXJyeSA8SmVycnkuWnVv QGFtZC5jb20+OyBKYW5pIE5pa3VsYQ0KPiA8amFuaS5uaWt1bGFAaW50ZWwuY29tPjsgSW1yZSBE ZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPjsgRGFuaWVsIFZldHRlcg0KPiA8ZGFuaWVsLnZldHRl ckBmZndsbC5jaD47IFNlYW4gUGF1bCA8c2VhbkBwb29ybHkucnVuPjsgV2VudGxhbmQsIEhhcnJ5 DQo+IDxIYXJyeS5XZW50bGFuZEBhbWQuY29tPjsgTGksIFN1biBwZW5nIChMZW8pIDxTdW5wZW5n LkxpQGFtZC5jb20+Ow0KPiBTaXF1ZWlyYSwgUm9kcmlnbyA8Um9kcmlnby5TaXF1ZWlyYUBhbWQu Y29tPjsgRGV1Y2hlciwgQWxleGFuZGVyDQo+IDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsg S29lbmlnLCBDaHJpc3RpYW4NCj4gPENocmlzdGlhbi5Lb2VuaWdAYW1kLmNvbT47IFBhbiwgWGlu aHVpIDxYaW5odWkuUGFuQGFtZC5jb20+OyBEYXZpZA0KPiBBaXJsaWUgPGFpcmxpZWRAbGludXgu aWU+OyBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+OyBKYW5pIE5pa3VsYQ0KPiA8amFu aS5uaWt1bGFAbGludXguaW50ZWwuY29tPjsgSm9vbmFzIExhaHRpbmVuDQo+IDxqb29uYXMubGFo dGluZW5AbGludXguaW50ZWwuY29tPjsgUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwu Y29tPjsNCj4gVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGxpbnV4LmludGVsLmNvbT47 IEJlbiBTa2VnZ3MNCj4gPGJza2VnZ3NAcmVkaGF0LmNvbT47IEthcm9sIEhlcmJzdCA8a2hlcmJz dEByZWRoYXQuY29tPjsgS2F6bGF1c2thcywNCj4gTmljaG9sYXMgPE5pY2hvbGFzLkthemxhdXNr YXNAYW1kLmNvbT47IExpLCBSb21hbg0KPiA8Um9tYW4uTGlAYW1kLmNvbT47IFNoaWgsIEp1ZGUg PEp1ZGUuU2hpaEBhbWQuY29tPjsgU2ltb24gU2VyDQo+IDxjb250YWN0QGVtZXJzaW9uLmZyPjsg TGFraGEsIEJoYXdhbnByZWV0DQo+IDxCaGF3YW5wcmVldC5MYWtoYUBhbWQuY29tPjsgTWlraXRh IExpcHNraSA8bWlraXRhLmxpcHNraUBhbWQuY29tPjsNCj4gQ2xhdWRpbyBTdWFyZXogPGNzc2tA bmV0LWMuZXM+OyBDaGVuLCBJYW4gPElhbi5DaGVuQGFtZC5jb20+OyBDb2xpbiBJYW4NCj4gS2lu ZyA8Y29saW4ua2luZ0BpbnRlbC5jb20+OyBXdSwgSGVyc2VuIDxoZXJzZW54cy53dUBhbWQuY29t PjsgTGl1LA0KPiBXZW5qaW5nIDxXZW5qaW5nLkxpdUBhbWQuY29tPjsgTGVpLCBKdW4gPEp1bi5M ZWlAYW1kLmNvbT47IFN0cmF1c3MsDQo+IE1pY2hhZWwgPE1pY2hhZWwuU3RyYXVzc0BhbWQuY29t PjsgTWEsIExlbyA8SGFuZ2hvbmcuTWFAYW1kLmNvbT47DQo+IFRob21hcyBaaW1tZXJtYW5uIDx0 emltbWVybWFubkBzdXNlLmRlPjsgSm9zw6kgUm9iZXJ0byBkZSBTb3V6YQ0KPiA8am9zZS5zb3V6 YUBpbnRlbC5jb20+OyBIZSBZaW5nIDxoZXlpbmcyNEBodWF3ZWkuY29tPjsgQW5zaHVtYW4NCj4g R3VwdGEgPGFuc2h1bWFuLmd1cHRhQGludGVsLmNvbT47IEFuZGkgU2h5dGkNCj4gPGFuZGkuc2h5 dGlAbGludXguaW50ZWwuY29tPjsgQXNodXRvc2ggRGl4aXQgPGFzaHV0b3NoLmRpeGl0QGludGVs LmNvbT47DQo+IEp1c3RvbiBMaSA8anVzdG9uLmxpQGludGVsLmNvbT47IFNlYW4gUGF1bCA8c2Vh bnBhdWxAY2hyb21pdW0ub3JnPjsNCj4gRmVybmFuZG8gUmFtb3MgPGdyZWVuZm9vQHU5Mi5ldT47 IEx1byBKaWF4aW5nDQo+IDxsdW9qaWF4aW5nQGh1YXdlaS5jb20+OyBKYXZpZXIgTWFydGluZXog Q2FuaWxsYXMgPGphdmllcm1AcmVkaGF0LmNvbT47DQo+IG9wZW4gbGlzdCA8bGludXgta2VybmVs QHZnZXIua2VybmVsLm9yZz47IG9wZW4gbGlzdDpJTlRFTCBEUk0gRFJJVkVSUw0KPiA8aW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4NCj4gU3ViamVjdDogW1JFU0VORCBSRkMgMTgvMThd IGRybS9kaXNwbGF5L2RwX21zdDogTW92ZSBhbGwgcGF5bG9hZCBpbmZvIGludG8NCj4gdGhlIGF0 b21pYyBzdGF0ZQ0KPiANCj4gTm93IHRoYXQgd2UndmUgZmluYWxseSBnb3R0ZW4gcmlkIG9mIHRo ZSBub24tYXRvbWljIE1TVCB1c2VycyBsZWZ0b3ZlciBpbg0KPiB0aGUga2VybmVsLCB3ZSBjYW4g ZmluYWxseSBnZXQgcmlkIG9mIGFsbCBvZiB0aGUgbGVnYWN5IHBheWxvYWQgY29kZSB3ZQ0KPiBo YXZlIGFuZCBtb3ZlIGFzIG11Y2ggYXMgcG9zc2libGUgaW50byB0aGUgTVNUIGF0b21pYyBzdGF0 ZSBzdHJ1Y3RzLiBUaGUNCj4gbWFpbiBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gbWFrZSB0aGUgTVNU IGNvZGUgYSBsb3QgbGVzcyBjb25mdXNpbmcgdG8gd29yaw0KPiBvbiwgYXMgdGhlcmUncyBhIGxv dCBvZiBkdXBsaWNhdGVkIGxvZ2ljIHRoYXQgZG9lc24ndCByZWFsbHkgbmVlZCB0byBiZQ0KPiBo ZXJlLiBBcyB3ZWxsLCB0aGlzIHNob3VsZCBtYWtlIGludHJvZHVjaW5nIGZlYXR1cmVzIGxpa2Ug ZmFsbGJhY2sgbGluaw0KPiByZXRyYWluaW5nIGFuZCBEU0Mgc3VwcG9ydCBmYXIgZWFzaWVyLg0K PiANCj4gU2luY2UgdGhlIG9sZCBwYXlsb2FkIGNvZGUgd2FzIHByZXR0eSBnbmFybHkgYW5kIHRo ZXJlJ3MgYSBMb3Qgb2YgY2hhbmdlcw0KPiBoZXJlLCBJIGV4cGVjdCB0aGlzIG1pZ2h0IGJlIGEg Yml0IGRpZmZpY3VsdCB0byByZXZpZXcuIFNvIHRvIG1ha2UgdGhpbmdzDQo+IGFzIGVhc3kgYXMg cG9zc2libGUgZm9yIHJldmlld2VycywgSSdsbCBzdW0gdXAgaG93IGJvdGggdGhlIG9sZCBhbmQg bmV3DQo+IGNvZGUgd29ya2VkIGhlcmUgKGl0IHRvb2sgbWUgYSB3aGlsZSB0byBmaWd1cmUgdGhp cyBvdXQgdG9vISkuDQo+IA0KPiBUaGUgb2xkIE1TVCBjb2RlIGJhc2ljYWxseSB3b3JrZWQgYnkg bWFpbnRhaW5pbmcgdHdvIGRpZmZlcmVudCBwYXlsb2FkDQo+IHRhYmxlcyAtIHByb3Bvc2VkX3Zj cGlzLCBhbmQgcGF5bG9hZHMuIHByb3Bvc2VkX3ZjcGlzIHdvdWxkIGhvbGQgdGhlDQo+IG1vZGlm aWVkIHBheWxvYWQgd2Ugd2FudGVkIHRvIHB1c2ggdG8gdGhlIHRvcG9sb2d5LCB3aGlsZSBwYXls b2FkcyBoZWxkDQo+IHRoZQ0KPiBwYXlsb2FkIHRhYmxlIHRoYXQgd2FzIGN1cnJlbnRseSBwcm9n cmFtbWVkIGluIGhhcmR3YXJlLiBNb2RpZmljYXRpb25zIHRvDQo+IHByb3Bvc2VkX3ZjcGlzIHdv dWxkIGJlIGhhbmRsZWQgdGhyb3VnaCBkcm1fZHBfYWxsb2NhdGVfdmNwaSgpLA0KPiBkcm1fZHBf bXN0X2RlYWxsb2NhdGVfdmNwaSgpLCBhbmQgZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKCku IFRoZW4sDQo+IHRoZXkNCj4gd291bGQgYmUgcHVzaGVkIHZpYSBkcm1fZHBfbXN0X3VwZGF0ZV9w YXlsb2FkX3N0ZXAxKCkgYW5kDQo+IGRybV9kcF9tc3RfdXBkYXRlX3BheWxvYWRfc3RlcDIoKS4N Cj4gDQo+IEZ1cnRoZXJtb3JlLCBpdCdzIGltcG9ydGFudCB0byBub3RlIGhvdyBhZGRpbmcgYW5k IHJlbW92aW5nIFZDIHBheWxvYWRzDQo+IGFjdHVhbGx5IHdvcmtlZCB3aXRoIGRybV9kcF9tc3Rf dXBkYXRlX3BheWxvYWRfc3RlcDEoKS4gV2hlbiBhIFZDDQo+IHBheWxvYWQNCj4gaXMgcmVtb3Zl ZCBmcm9tIHRoZSBWQyB0YWJsZSwgYWxsIFZDIHBheWxvYWRzIHdoaWNoIGNvbWUgYWZ0ZXIgdGhl IHJlbW92ZWQNCj4gVkMgcGF5bG9hZCdzIHNsb3RzIG11c3QgaGF2ZSB0aGVpciB0aW1lIHNsb3Rz IHNoaWZ0ZWQgdG93YXJkcyB0aGUgc3RhcnQgb2YNCj4gdGhlIHRhYmxlLiBUaGUgb2xkIGNvZGUg aGFuZGxlcyB0aGlzIGJ5IGxvb3BpbmcgdGhyb3VnaCB0aGUgZW50aXJlIHBheWxvYWQNCj4gdGFi bGUgYW5kIHJlY29tcHV0aW5nIHRoZSBzdGFydCBzbG90IGZvciBldmVyeSBwYXlsb2FkIGluIHRo ZSB0b3BvbG9neSBmcm9tDQo+IHNjcmF0Y2guIFdoaWxlIHZlcnkgbXVjaCBvdmVya2lsbCwgdGhp cyBlbmRzIHVwIGRvaW5nIHRoZSByaWdodCB0aGluZw0KPiBiZWNhdXNlIHdlIGFsd2F5cyBvcmRl ciB0aGUgVkNQSXMgZm9yIHBheWxvYWRzIGZyb20gZmlyc3QgdG8gbGFzdCBzdGFydGluZw0KPiB0 aW1lc2xvdC4NCj4gDQo+IEl0J3MgaW1wb3J0YW50IHRvIGFsc28gbm90ZSB0aGF0IGRybV9kcF9t c3RfdXBkYXRlX3BheWxvYWRfc3RlcDIoKSBpc24ndA0KPiBhY3R1YWxseSBsaW1pdGVkIHRvIHVw ZGF0aW5nIGEgc2luZ2xlIHBheWxvYWQgLSB0aGUgZHJpdmVyIGNhbiB1c2UgaXQgdG8NCj4gcXVl dWUgdXAgbXVsdGlwbGUgcGF5bG9hZCBjaGFuZ2VzIHNvIHRoYXQgYXMgbWFueSBvZiB0aGVtIGNh biBiZSBzZW50IGFzDQo+IHBvc3NpYmxlIGJlZm9yZSB3YWl0aW5nIGZvciB0aGUgQUNULg0KDQpI aSBMeXVkZSwNCg0KSSBoYXZlIGNvbmNlcm4gZm9yIHVwZGF0aW5nIHBheWxvYWQgdGFibGUgbXVs dGlwbGUgdGltZXMgZm9yIG11bHRpcGxlIHBheWxvYWQNCmNoYW5nZXMgYmVmb3JlIHNlbmRpbmcg dGhlIEFDVC4gQWxzbyBjb25zdWx0IHdpdGggb25lIGJyYW5jaCB2ZW5kb3IsIHRoZXkgDQpzYXkg dGhlaXIgZncgd2lsbCBleHBlY3QgcmVjZWl2aW5nIG9uZSBBTExPQ0FURV9QQVlMT0FEIGFmdGVy IHNldHRpbmcgRFBDRA0KMDAyYzBoIGJpdCAwIChWQyBwYXlsb2FkIElEIHRhYmxlIHVwZGF0ZWQp Lg0KDQpUaGFua3MhDQo+IA0KPiBkcm1fZHBfbXN0X3VwZGF0ZV9wYXlsb2FkX3N0ZXAyKCkgaXMg cHJldHR5IHNlbGYgZXhwbGFuYXRvcnkgYW5kDQo+IGJhc2ljYWxseQ0KPiB0aGUgc2FtZSBiZXR3 ZWVuIHRoZSBvbGQgYW5kIG5ldyBjb2RlLCBzYXZlIGZvciB0aGUgZmFjdCB3ZSBkb24ndCBoYXZl IGENCj4gc2Vjb25kIHN0ZXAgZm9yIGRlbGV0aW5nIHBheWxvYWRzIGFueW1vcmUgLWFuZCB0aHVz IHJlbmFtZSBpdCB0bw0KPiBkcm1fZHBfbXN0X2FkZF9wYXlsb2FkX3N0ZXAyKCkuDQo+IA0KPiBU aGUgbmV3IHBheWxvYWQgY29kZSBzdG9yZXMgYWxsIG9mIHRoZSBjdXJyZW50IHBheWxvYWQgaW5m byB3aXRoaW4gdGhlIE1TVA0KPiBhdG9taWMgc3RhdGUgYW5kIGNvbXB1dGVzIGFzIG11Y2ggb2Yg dGhlIHN0YXRlIGFzIHBvc3NpYmxlIGFoZWFkIG9mIHRpbWUuDQo+IFRoaXMgaGFzIHRoZSBvbmUg ZXhjZXB0aW9uIG9mIHRoZSBzdGFydGluZyB0aW1lc2xvdHMgZm9yIHBheWxvYWRzLCB3aGljaA0K PiBjYW4ndCBiZSBkZXRlcm1pbmVkIGF0IGF0b21pYyBjaGVjayB0aW1lIHNpbmNlIHRoZSBzdGFy dGluZyB0aW1lIHNsb3RzIHdpbGwNCj4gdmFyeSBkZXBlbmRpbmcgb24gd2hhdCBvcmRlciBDUlRD cyBhcmUgZW5hYmxlZCBpbiB0aGUgYXRvbWljIHN0YXRlIC0gd2hpY2gNCj4gdmFyaWVzIGZyb20g ZHJpdmVyIHRvIGRyaXZlci4gVGhlc2UgYXJlIHN0aWxsIHN0b3JlZCBpbiB0aGUgYXRvbWljIE1T VA0KPiBzdGF0ZSwgYnV0IGFyZSBvbmx5IGNvcGllZCBmcm9tIHRoZSBvbGQgTVNUIHN0YXRlIGR1 cmluZyBhdG9taWMgY29tbWl0DQo+IHRpbWUuIExpa2V3aXNlLCB0aGlzIGlzIHdoZW4gbmV3IHN0 YXJ0IHNsb3RzIGFyZSBkZXRlcm1pbmVkLg0KPiANCj4gQWRkaW5nL3JlbW92aW5nIHBheWxvYWRz IG5vdyB3b3JrcyBtdWNoIG1vcmUgY2xvc2VseSB0byBob3cgdGhpbmdzIGFyZQ0KPiBkZXNjcmli ZWQgaW4gdGhlIHNwZWMuIFdoZW4gd2UgZGVsZXRlIGEgcGF5bG9hZCwgd2UgbG9vcCB0aHJvdWdo IHRoZQ0KPiBjdXJyZW50IGxpc3Qgb2YgcGF5bG9hZHMgYW5kIHVwZGF0ZSB0aGUgc3RhcnQgc2xv dHMgZm9yIGFueSBwYXlsb2FkcyB3aG9zZQ0KPiB0aW1lIHNsb3RzIGNhbWUgYWZ0ZXIgdGhlIHBh eWxvYWQgd2UganVzdCBkZWxldGVkLiBEZXRlcm1pbmluZyB0aGUgc3RhcnRpbmcNCj4gdGltZSBz bG90cyBmb3IgbmV3IHBheWxvYWRzIGJlaW5nIGFkZGVkIGlzIGRvbmUgYnkgc2ltcGx5IGtlZXBp bmcgdHJhY2sgb2YNCj4gd2hlcmUgdGhlIGVuZCBvZiB0aGUgVkMgdGFibGUgaXMgaW4NCj4gZHJt X2RwX21zdF90b3BvbG9neV9tZ3ItPm5leHRfc3RhcnRfc2xvdC4gQWRkaXRpb25hbGx5LCBpdCdz IHdvcnRoIG5vdGluZw0KPiB0aGF0IHdlIG5vIGxvbmdlciBoYXZlIGEgc2luZ2xlIHVwZGF0ZV9w YXlsb2FkKCkgZnVuY3Rpb24uIEluc3RlYWQsIHdlIG5vdw0KPiBoYXZlIGRybV9kcF9tc3RfYWRk X3BheWxvYWRfc3RlcDF8MigpIGFuZA0KPiBkcm1fZHBfbXN0X3JlbW92ZV9wYXlsb2FkKCkuIEFz DQo+IHN1Y2gsIGl0J3Mgbm93IGxlZnQgaXQgdXAgdG8gdGhlIGRyaXZlciB0byBmaWd1cmUgb3V0 IHdoZW4gdG8gYWRkIG9yIHJlbW92ZQ0KPiBwYXlsb2Fkcy4gVGhlIGRyaXZlciBhbHJlYWR5IGtu b3dzIHdoZW4gaXQncyBkaXNhYmxpbmcvZW5hYmxpbmcgQ1JUQ3MsIHNvDQo+IGl0IGFsc28gYWxy ZWFkeSBrbm93cyB3aGVuIHBheWxvYWRzIHNob3VsZCBiZSBhZGRlZCBvciByZW1vdmVkLiBBbmQs IHRoaXMNCj4gZG9lc24ndCBpbnRlcmZlcmUgd2l0aCB0aGUgYWJpbGl0eSB0byBxdWV1ZSB1cCBt dWx0aXBsZSBwYXlsb2FkIGNoYW5nZXMNCj4gYmVmb3JlIHdhaXRpbmcgZm9yIHRoZSBBQ1QuDQo+ IA0KPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPg0KPiBDYzog V2F5bmUgTGluIDxXYXluZS5MaW5AYW1kLmNvbT4NCj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+DQo+IENjOiBGYW5nemhpIFp1byA8SmVycnkuWnVv QGFtZC5jb20+DQo+IENjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPg0KPiBD YzogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPg0KPiBDYzogRGFuaWVsIFZldHRlciA8 ZGFuaWVsLnZldHRlckBmZndsbC5jaD4NCj4gQ2M6IFNlYW4gUGF1bCA8c2VhbkBwb29ybHkucnVu Pg0KPiAtLS0NCj4gIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0u YyB8ICA1NiArLQ0KPiAgLi4uL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG1faGVscGVy cy5jIHwgMTA3ICstLQ0KPiAgLi4uL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9tc3RfdHlw ZXMuYyAgIHwgIDg1ICstLQ0KPiAgLi4uL2FtZC9kaXNwbGF5L2luY2x1ZGUvbGlua19zZXJ2aWNl X3R5cGVzLmggIHwgICA3ICsNCj4gIGRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3Rf dG9wb2xvZ3kuYyB8IDY5OSArKysrKystLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMgICB8ICA2NCArLQ0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9oZGNwLmMgICAgIHwgIDI0ICstDQo+ICBkcml2ZXJzL2dwdS9k cm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMgICAgICAgfCAxNjMgKystLQ0KPiAgaW5jbHVkZS9k cm0vZGlzcGxheS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgMTc4ICsrLS0tDQo+ICA5IGZp bGVzIGNoYW5nZWQsIDUzNiBpbnNlcnRpb25zKCspLCA4NDcgZGVsZXRpb25zKC0pDQo+IA0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVf ZG0uYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2Rt LmMNCj4gaW5kZXggYWM4NjQ4ZTNjMWM5Li45M2Q1NzJlYTNjNDggMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMNCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYw0KPiBAQCAt NzM3OCw2ICs3Mzc4LDcgQEAgc3RhdGljIGludCBkbV9lbmNvZGVyX2hlbHBlcl9hdG9taWNfY2hl Y2soc3RydWN0DQo+IGRybV9lbmNvZGVyICplbmNvZGVyLA0KPiAgCWNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJmNydGNfc3RhdGUtDQo+ID5hZGp1c3RlZF9t b2RlOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbXN0X21ncjsNCj4gIAlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICptc3RfcG9ydDsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCWVudW0gZGNfY29sb3JfZGVwdGggY29sb3Jf ZGVwdGg7DQo+ICAJaW50IGNsb2NrLCBicHAgPSAwOw0KPiAgCWJvb2wgaXNfeTQyMCA9IGZhbHNl Ow0KPiBAQCAtNzM5MSw2ICs3MzkyLDEzIEBAIHN0YXRpYyBpbnQNCj4gZG1fZW5jb2Rlcl9oZWxw ZXJfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwNCj4gIAlpZiAoIWNy dGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdlZCAmJiAhY3J0Y19zdGF0ZS0NCj4gPm1vZGVfY2hh bmdlZCkNCj4gIAkJcmV0dXJuIDA7DQo+IA0KPiArCW1zdF9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbXN0X21ncik7DQo+ICsJaWYgKElTX0VSUihtc3Rf c3RhdGUpKQ0KPiArCQlyZXR1cm4gUFRSX0VSUihtc3Rfc3RhdGUpOw0KPiArDQo+ICsJaWYgKCFt c3Rfc3RhdGUtPnBibl9kaXYpDQo+ICsJCW1zdF9zdGF0ZS0+cGJuX2RpdiA9DQo+IGRtX21zdF9n ZXRfcGJuX2RpdmlkZXIoYWNvbm5lY3Rvci0+bXN0X3BvcnQtPmRjX2xpbmspOw0KPiArDQo+ICAJ aWYgKCFzdGF0ZS0+ZHVwbGljYXRlZCkgew0KPiAgCQlpbnQgbWF4X2JwYyA9IGNvbm5fc3RhdGUt Pm1heF9yZXF1ZXN0ZWRfYnBjOw0KPiAgCQlpc195NDIwID0gZHJtX21vZGVfaXNfNDIwX2Fsc28o JmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLA0KPiBhZGp1c3RlZF9tb2RlKSAmJg0KPiBAQCAtNzQw MiwxMSArNzQxMCwxMCBAQCBzdGF0aWMgaW50DQo+IGRtX2VuY29kZXJfaGVscGVyX2F0b21pY19j aGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsDQo+ICAJCWNsb2NrID0gYWRqdXN0ZWRf bW9kZS0+Y2xvY2s7DQo+ICAJCWRtX25ld19jb25uZWN0b3Jfc3RhdGUtPnBibiA9DQo+IGRybV9k cF9jYWxjX3Bibl9tb2RlKGNsb2NrLCBicHAsIGZhbHNlKTsNCj4gIAl9DQo+IC0JZG1fbmV3X2Nv bm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyA9DQo+IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Ns b3RzKHN0YXRlLA0KPiAtDQo+IG1zdF9tZ3IsDQo+IC0NCj4gbXN0X3BvcnQsDQo+IC0NCj4gZG1f bmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+cGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2RpdmlkZXIo YWNvbm5lY3Rvci0+ZGNfbGluaykpOw0KPiArDQo+ICsJZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+ dmNwaV9zbG90cyA9DQo+ICsJCWRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCBt c3RfbWdyLCBtc3RfcG9ydCwNCj4gKwkJCQkJICAgICAgZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+ cGJuKTsNCj4gIAlpZiAoZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyA8IDApIHsN Cj4gIAkJRFJNX0RFQlVHX0FUT01JQygiZmFpbGVkIGZpbmRpbmcgdmNwaSBzbG90czogJWRcbiIs DQo+IChpbnQpZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyk7DQo+ICAJCXJldHVy biBkbV9uZXdfY29ubmVjdG9yX3N0YXRlLT52Y3BpX3Nsb3RzOw0KPiBAQCAtNzQ3NiwxOCArNzQ4 MywxMiBAQCBzdGF0aWMgaW50DQo+IGRtX3VwZGF0ZV9tc3RfdmNwaV9zbG90c19mb3JfZHNjKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCWRtX2Nvbm5fc3RhdGUtPnBibiA9 IHBibjsNCj4gIAkJCWRtX2Nvbm5fc3RhdGUtPnZjcGlfc2xvdHMgPSBzbG90X251bTsNCj4gDQo+ IC0JCQlkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLA0KPiAtCQkJCQkJICAgICBh Y29ubmVjdG9yLT5wb3J0LA0KPiAtCQkJCQkJICAgICBkbV9jb25uX3N0YXRlLT5wYm4sDQo+IC0J CQkJCQkgICAgIDAsDQo+ICsJCQlkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLCBh Y29ubmVjdG9yLQ0KPiA+cG9ydCwgZG1fY29ubl9zdGF0ZS0+cGJuLA0KPiAgCQkJCQkJICAgICBm YWxzZSk7DQo+ICAJCQljb250aW51ZTsNCj4gIAkJfQ0KPiANCj4gLQkJdmNwaSA9IGRybV9kcF9t c3RfYXRvbWljX2VuYWJsZV9kc2Moc3RhdGUsDQo+IC0JCQkJCQkgICAgYWNvbm5lY3Rvci0+cG9y dCwNCj4gLQkJCQkJCSAgICBwYm4sIHBibl9kaXYsDQo+IC0JCQkJCQkgICAgdHJ1ZSk7DQo+ICsJ CXZjcGkgPSBkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLCBhY29ubmVjdG9yLQ0K PiA+cG9ydCwgcGJuLCB0cnVlKTsNCj4gIAkJaWYgKHZjcGkgPCAwKQ0KPiAgCQkJcmV0dXJuIHZj cGk7DQo+IA0KPiBAQCAtMTA5NDMsOCArMTA5NDQsNiBAQCBzdGF0aWMgaW50IGFtZGdwdV9kbV9h dG9taWNfY2hlY2soc3RydWN0DQo+IGRybV9kZXZpY2UgKmRldiwNCj4gIAlzdHJ1Y3QgZG1fY3J0 Y19zdGF0ZSAqZG1fb2xkX2NydGNfc3RhdGUsICpkbV9uZXdfY3J0Y19zdGF0ZTsNCj4gICNpZiBk ZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gIAlzdHJ1Y3QgZHNjX21zdF9mYWlybmVz c192YXJzIHZhcnNbTUFYX1BJUEVTXTsNCj4gLQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9z dGF0ZSAqbXN0X3N0YXRlOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy Ow0KPiAgI2VuZGlmDQo+IA0KPiAgCXRyYWNlX2FtZGdwdV9kbV9hdG9taWNfY2hlY2tfYmVnaW4o c3RhdGUpOw0KPiBAQCAtMTExODAsMzMgKzExMTc5LDYgQEAgc3RhdGljIGludCBhbWRncHVfZG1f YXRvbWljX2NoZWNrKHN0cnVjdA0KPiBkcm1fZGV2aWNlICpkZXYsDQo+ICAJCWxvY2tfYW5kX3Zh bGlkYXRpb25fbmVlZGVkID0gdHJ1ZTsNCj4gIAl9DQo+IA0KPiAtI2lmIGRlZmluZWQoQ09ORklH X0RSTV9BTURfRENfRENOKQ0KPiAtCS8qIHNldCB0aGUgc2xvdCBpbmZvIGZvciBlYWNoIG1zdF9z dGF0ZSBiYXNlZCBvbiB0aGUgbGluayBlbmNvZGluZw0KPiBmb3JtYXQgKi8NCj4gLQlmb3JfZWFj aF9uZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsNCj4gLQkJ c3RydWN0IGFtZGdwdV9kbV9jb25uZWN0b3IgKmFjb25uZWN0b3I7DQo+IC0JCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3I7DQo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRl ciBpdGVyOw0KPiAtCQl1OCBsaW5rX2NvZGluZ19jYXA7DQo+IC0NCj4gLQkJaWYgKCFtZ3ItPm1z dF9zdGF0ZSApDQo+IC0JCQljb250aW51ZTsNCj4gLQ0KPiAtCQlkcm1fY29ubmVjdG9yX2xpc3Rf aXRlcl9iZWdpbihkZXYsICZpdGVyKTsNCj4gLQkJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVy KGNvbm5lY3RvciwgJml0ZXIpIHsNCj4gLQkJCWludCBpZCA9IGNvbm5lY3Rvci0+aW5kZXg7DQo+ IC0NCj4gLQkJCWlmIChpZCA9PSBtc3Rfc3RhdGUtPm1nci0+Y29ubl9iYXNlX2lkKSB7DQo+IC0J CQkJYWNvbm5lY3RvciA9DQo+IHRvX2FtZGdwdV9kbV9jb25uZWN0b3IoY29ubmVjdG9yKTsNCj4g LQkJCQlsaW5rX2NvZGluZ19jYXAgPQ0KPiBkY19saW5rX2RwX21zdF9kZWNpZGVfbGlua19lbmNv ZGluZ19mb3JtYXQoYWNvbm5lY3Rvci0+ZGNfbGluayk7DQo+IC0JCQkJZHJtX2RwX21zdF91cGRh dGVfc2xvdHMobXN0X3N0YXRlLA0KPiBsaW5rX2NvZGluZ19jYXApOw0KPiAtDQo+IC0JCQkJYnJl YWs7DQo+IC0JCQl9DQo+IC0JCX0NCj4gLQkJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZp dGVyKTsNCj4gLQ0KPiAtCX0NCj4gLSNlbmRpZg0KPiAgCS8qKg0KPiAgCSAqIFN0cmVhbXMgYW5k IHBsYW5lcyBhcmUgcmVzZXQgd2hlbiB0aGVyZSBhcmUgY2hhbmdlcyB0aGF0IGFmZmVjdA0KPiAg CSAqIGJhbmR3aWR0aC4gQW55dGhpbmcgdGhhdCBhZmZlY3RzIGJhbmR3aWR0aCBuZWVkcyB0byBn byB0aHJvdWdoDQo+IGRpZmYgLS1naXQNCj4gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv YW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gaW5kZXggMWVhYWNhYjAzMzRi Li5mODQzZmQ4Njc4N2YgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9hbWRncHVfZG0vYW1kZ3B1X2RtX2hlbHBlcnMuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gQEAgLTI3LDYgKzI3 LDcgQEANCj4gICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvaTJj Lmg+DQo+IA0KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+DQo+ICAjaW5jbHVkZSA8ZHJt L2RybV9wcm9iZV9oZWxwZXIuaD4NCj4gICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPg0KPiAg I2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPg0KPiBAQCAtMTU0LDQwICsxNTUsMzIgQEAgZW51bSBk Y19lZGlkX3N0YXR1cw0KPiBkbV9oZWxwZXJzX3BhcnNlX2VkaWRfY2FwcygNCj4gIH0NCj4gDQo+ ICBzdGF0aWMgdm9pZA0KPiAtZmlsbF9kY19tc3RfcGF5bG9hZF90YWJsZV9mcm9tX2RybShzdHJ1 Y3QgYW1kZ3B1X2RtX2Nvbm5lY3Rvcg0KPiAqYWNvbm5lY3RvciwNCj4gLQkJCQkgICBzdHJ1Y3Qg ZGNfZHBfbXN0X3N0cmVhbV9hbGxvY2F0aW9uX3RhYmxlDQo+ICpwcm9wb3NlZF90YWJsZSkNCj4g K2ZpbGxfZGNfbXN0X3BheWxvYWRfdGFibGVfZnJvbV9kcm0oc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUNCj4gKm1zdF9zdGF0ZSwNCj4gKwkJCQkgICBzdHJ1Y3QgYW1kZ3B1X2RtX2Nv bm5lY3RvciAqYWNvbm5lY3RvciwNCj4gKwkJCQkgICBzdHJ1Y3QgZGNfZHBfbXN0X3N0cmVhbV9h bGxvY2F0aW9uX3RhYmxlDQo+ICp0YWJsZSkNCj4gIHsNCj4gKwlzdHJ1Y3QgZGNfZHBfbXN0X3N0 cmVhbV9hbGxvY2F0aW9uX3RhYmxlIG5ld190YWJsZSA9IHsgMCB9Ow0KPiArCXN0cnVjdCBkY19k cF9tc3Rfc3RyZWFtX2FsbG9jYXRpb24gKnNhOw0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21p Y19wYXlsb2FkICpwYXlsb2FkOw0KPiAgCWludCBpOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbXN0X21nciA9DQo+IC0JCQkmYWNvbm5lY3Rvci0+bXN0X3BvcnQtPm1zdF9t Z3I7DQo+IA0KPiAtCW11dGV4X2xvY2soJm1zdF9tZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0NCj4g LQlwcm9wb3NlZF90YWJsZS0+c3RyZWFtX2NvdW50ID0gMDsNCj4gLQ0KPiAtCS8qIG51bWJlciBv ZiBhY3RpdmUgc3RyZWFtcyAqLw0KPiAtCWZvciAoaSA9IDA7IGkgPCBtc3RfbWdyLT5tYXhfcGF5 bG9hZHM7IGkrKykgew0KPiAtCQlpZiAobXN0X21nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzID09 IDApDQo+IC0JCQlicmVhazsgLyogZW5kIG9mIHZjcF9pZCB0YWJsZSAqLw0KPiAtDQo+IC0JCUFT U0VSVChtc3RfbWdyLT5wYXlsb2Fkc1tpXS5wYXlsb2FkX3N0YXRlICE9DQo+IC0JCQkJRFBfUEFZ TE9BRF9ERUxFVEVfTE9DQUwpOw0KPiAtDQo+IC0JCWlmIChtc3RfbWdyLT5wYXlsb2Fkc1tpXS5w YXlsb2FkX3N0YXRlID09DQo+IERQX1BBWUxPQURfTE9DQUwgfHwNCj4gLQkJCW1zdF9tZ3ItPnBh eWxvYWRzW2ldLnBheWxvYWRfc3RhdGUgPT0NCj4gLQkJCQkJRFBfUEFZTE9BRF9SRU1PVEUpIHsN Cj4gLQ0KPiAtCQkJc3RydWN0IGRjX2RwX21zdF9zdHJlYW1fYWxsb2NhdGlvbiAqc2EgPQ0KPiAt CQkJCQkmcHJvcG9zZWRfdGFibGUtDQo+ID5zdHJlYW1fYWxsb2NhdGlvbnNbDQo+IC0JCQkJCQlw cm9wb3NlZF90YWJsZS0NCj4gPnN0cmVhbV9jb3VudF07DQo+IC0NCj4gLQkJCXNhLT5zbG90X2Nv dW50ID0gbXN0X21nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzOw0KPiAtCQkJc2EtPnZjcF9pZCA9 IG1zdF9tZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldLT52Y3BpOw0KPiAtCQkJcHJvcG9zZWRfdGFibGUt PnN0cmVhbV9jb3VudCsrOw0KPiAtCQl9DQo+ICsJLyogQ29weSBvdmVyIHBheWxvYWRzICovDQo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXlsb2FkLCAmbXN0X3N0YXRlLT5wYXlsb2FkcywgbmV4 dCkgew0KPiArCQlpZiAocGF5bG9hZC0+ZGVsZXRlKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4g KwkJc2EgPQ0KPiAmbmV3X3RhYmxlLnN0cmVhbV9hbGxvY2F0aW9uc1tuZXdfdGFibGUuc3RyZWFt X2NvdW50XTsNCj4gKwkJc2EtPnNsb3RfY291bnQgPSBwYXlsb2FkLT50aW1lX3Nsb3RzOw0KPiAr CQlzYS0+dmNwX2lkID0gcGF5bG9hZC0+dmNwaTsNCj4gKwkJc2EtPnBvcnQgPSBwYXlsb2FkLT5w b3J0Ow0KPiArCQlkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYyhzYS0+cG9ydCk7DQo+ICsJCW5l d190YWJsZS5zdHJlYW1fY291bnQrKzsNCj4gIAl9DQo+IA0KPiAtCW11dGV4X3VubG9jaygmbXN0 X21nci0+cGF5bG9hZF9sb2NrKTsNCj4gKwkvKiBSZWxlYXNlIHRoZSBvbGQgdGFibGUsIGFuZCBj b3B5IG92ZXIgdGhlIG5ldyBvbmUgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPnN0cmVh bV9jb3VudDsgaSsrKQ0KPiArCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyh0YWJsZS0NCj4g PnN0cmVhbV9hbGxvY2F0aW9uc1tpXS5wb3J0KTsNCj4gKwkqdGFibGUgPSBuZXdfdGFibGU7DQo+ ICB9DQo+IA0KPiAgdm9pZCBkbV9oZWxwZXJzX2RwX3VwZGF0ZV9icmFuY2hfaW5mbygNCj4gQEAg LTIwNSwxMSArMTk4LDkgQEAgYm9vbA0KPiBkbV9oZWxwZXJzX2RwX21zdF93cml0ZV9wYXlsb2Fk X2FsbG9jYXRpb25fdGFibGUoDQo+ICAJCWJvb2wgZW5hYmxlKQ0KPiAgew0KPiAgCXN0cnVjdCBh bWRncHVfZG1fY29ubmVjdG9yICphY29ubmVjdG9yOw0KPiAtCXN0cnVjdCBkbV9jb25uZWN0b3Jf c3RhdGUgKmRtX2Nvbm5fc3RhdGU7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgKm1zdF9zdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAqcGF5 bG9hZDsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1zdF9tZ3I7DQo+IC0J c3RydWN0IGRybV9kcF9tc3RfcG9ydCAqbXN0X3BvcnQ7DQo+IC0JYm9vbCByZXQ7DQo+IC0JdTgg bGlua19jb2RpbmdfY2FwID0gRFBfOGJfMTBiX0VOQ09ESU5HOw0KPiANCj4gIAlhY29ubmVjdG9y ID0gKHN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICopc3RyZWFtLQ0KPiA+ZG1fc3RyZWFtX2Nv bnRleHQ7DQo+ICAJLyogQWNjZXNzaW5nIHRoZSBjb25uZWN0b3Igc3RhdGUgaXMgcmVxdWlyZWQg Zm9yIHZjcGlfc2xvdHMgYWxsb2NhdGlvbg0KPiBAQCAtMjIwLDQwICsyMTEsMjEgQEAgYm9vbA0K PiBkbV9oZWxwZXJzX2RwX21zdF93cml0ZV9wYXlsb2FkX2FsbG9jYXRpb25fdGFibGUoDQo+ICAJ aWYgKCFhY29ubmVjdG9yIHx8ICFhY29ubmVjdG9yLT5tc3RfcG9ydCkNCj4gIAkJcmV0dXJuIGZh bHNlOw0KPiANCj4gLQlkbV9jb25uX3N0YXRlID0gdG9fZG1fY29ubmVjdG9yX3N0YXRlKGFjb25u ZWN0b3ItPmJhc2Uuc3RhdGUpOw0KPiAtDQo+ICAJbXN0X21nciA9ICZhY29ubmVjdG9yLT5tc3Rf cG9ydC0+bXN0X21ncjsNCj4gLQ0KPiAtCWlmICghbXN0X21nci0+bXN0X3N0YXRlKQ0KPiAtCQly ZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQltc3RfcG9ydCA9IGFjb25uZWN0b3ItPnBvcnQ7DQo+IC0N Cj4gLSNpZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gLQlsaW5rX2NvZGluZ19j YXAgPQ0KPiBkY19saW5rX2RwX21zdF9kZWNpZGVfbGlua19lbmNvZGluZ19mb3JtYXQoYWNvbm5l Y3Rvci0+ZGNfbGluayk7DQo+IC0jZW5kaWYNCj4gLQ0KPiAtCWlmIChlbmFibGUpIHsNCj4gLQ0K PiAtCQlyZXQgPSBkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkobXN0X21nciwgbXN0X3BvcnQsDQo+ IC0JCQkJCSAgICAgICBkbV9jb25uX3N0YXRlLT5wYm4sDQo+IC0JCQkJCSAgICAgICBkbV9jb25u X3N0YXRlLT52Y3BpX3Nsb3RzKTsNCj4gLQkJaWYgKCFyZXQpDQo+IC0JCQlyZXR1cm4gZmFsc2U7 DQo+IC0NCj4gLQl9IGVsc2Ugew0KPiAtCQlkcm1fZHBfbXN0X3Jlc2V0X3ZjcGlfc2xvdHMobXN0 X21nciwgbXN0X3BvcnQpOw0KPiAtCX0NCj4gKwltc3Rfc3RhdGUgPSB0b19kcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlKG1zdF9tZ3ItPmJhc2Uuc3RhdGUpOw0KPiANCj4gIAkvKiBJdCdzIE9LIGZv ciB0aGlzIHRvIGZhaWwgKi8NCj4gLQlkcm1fZHBfdXBkYXRlX3BheWxvYWRfcGFydDEobXN0X21n ciwgKGxpbmtfY29kaW5nX2NhcCA9PQ0KPiBEUF9DQVBfQU5TSV8xMjhCMTMyQikgPyAwOjEpOw0K PiArCXBheWxvYWQgPSBkcm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUs DQo+IGFjb25uZWN0b3ItPnBvcnQpOw0KPiArCWlmIChlbmFibGUpDQo+ICsJCWRybV9kcF9hZGRf cGF5bG9hZF9wYXJ0MShtc3RfbWdyLCBtc3Rfc3RhdGUsIHBheWxvYWQpOw0KPiArCWVsc2UNCj4g KwkJZHJtX2RwX3JlbW92ZV9wYXlsb2FkKG1zdF9tZ3IsIG1zdF9zdGF0ZSwgcGF5bG9hZCk7DQo+ IA0KPiAgCS8qIG1zdF9tZ3ItPi0+cGF5bG9hZHMgYXJlIFZDIHBheWxvYWQgbm90aWZ5IE1TVCBi cmFuY2ggdXNpbmcNCj4gRFBDRCBvcg0KPiAgCSAqIEFVWCBtZXNzYWdlLiBUaGUgc2VxdWVuY2Ug aXMgc2xvdCAxLTYzIGFsbG9jYXRlZCBzZXF1ZW5jZSBmb3INCj4gZWFjaA0KPiAgCSAqIHN0cmVh bS4gQU1EIEFTSUMgc3RyZWFtIHNsb3QgYWxsb2NhdGlvbiBzaG91bGQgZm9sbG93IHRoZSBzYW1l DQo+ICAJICogc2VxdWVuY2UuIGNvcHkgRFJNIE1TVCBhbGxvY2F0aW9uIHRvIGRjICovDQo+IC0N Cj4gLQlmaWxsX2RjX21zdF9wYXlsb2FkX3RhYmxlX2Zyb21fZHJtKGFjb25uZWN0b3IsIHByb3Bv c2VkX3RhYmxlKTsNCj4gKwlmaWxsX2RjX21zdF9wYXlsb2FkX3RhYmxlX2Zyb21fZHJtKG1zdF9z dGF0ZSwgYWNvbm5lY3RvciwNCj4gcHJvcG9zZWRfdGFibGUpOw0KPiANCj4gIAlyZXR1cm4gdHJ1 ZTsNCj4gIH0NCj4gQEAgLTMxMCwyNiArMjgyLDIzIEBAIGJvb2wNCj4gZG1faGVscGVyc19kcF9t c3Rfc2VuZF9wYXlsb2FkX2FsbG9jYXRpb24oDQo+ICAJCWJvb2wgZW5hYmxlKQ0KPiAgew0KPiAg CXN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICphY29ubmVjdG9yOw0KPiArCXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptc3RfbWdyOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKm1zdF9w b3J0Ow0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICpwYXlsb2FkOw0KPiAN Cj4gIAlhY29ubmVjdG9yID0gKHN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICopc3RyZWFtLQ0K PiA+ZG1fc3RyZWFtX2NvbnRleHQ7DQo+IA0KPiAgCWlmICghYWNvbm5lY3RvciB8fCAhYWNvbm5l Y3Rvci0+bXN0X3BvcnQpDQo+ICAJCXJldHVybiBmYWxzZTsNCj4gDQo+IC0JbXN0X3BvcnQgPSBh Y29ubmVjdG9yLT5wb3J0Ow0KPiAtDQo+ICAJbXN0X21nciA9ICZhY29ubmVjdG9yLT5tc3RfcG9y dC0+bXN0X21ncjsNCj4gLQ0KPiAtCWlmICghbXN0X21nci0+bXN0X3N0YXRlKQ0KPiAtCQlyZXR1 cm4gZmFsc2U7DQo+ICsJbXN0X3N0YXRlID0gdG9fZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSht c3RfbWdyLT5iYXNlLnN0YXRlKTsNCj4gDQo+ICAJLyogSXQncyBPSyBmb3IgdGhpcyB0byBmYWls ICovDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQyKG1zdF9tZ3IpOw0KPiAtDQo+IC0J aWYgKCFlbmFibGUpDQo+IC0JCWRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKG1zdF9tZ3IsIG1z dF9wb3J0KTsNCj4gKwlpZiAoZW5hYmxlKSB7DQo+ICsJCXBheWxvYWQgPSBkcm1fYXRvbWljX2dl dF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUsDQo+IGFjb25uZWN0b3ItPnBvcnQpOw0KPiAr CQlkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIobXN0X21nciwgbXN0X3N0YXRlLQ0KPiA+YmFzZS5z dGF0ZSwgcGF5bG9hZCk7DQo+ICsJfQ0KPiANCj4gIAlyZXR1cm4gdHJ1ZTsNCj4gIH0NCj4gZGlm ZiAtLWdpdA0KPiBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1 X2RtX21zdF90eXBlcy5jDQo+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9k bS9hbWRncHVfZG1fbXN0X3R5cGVzLmMNCj4gaW5kZXggYjQ0N2M0NTNiNThkLi4xOGRlNGE5OGRm NDAgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0v YW1kZ3B1X2RtX21zdF90eXBlcy5jDQo+ICsrKw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtX21zdF90eXBlcy5jDQo+IEBAIC01MDEsMTUgKzUwMSw4 IEBAIHZvaWQgYW1kZ3B1X2RtX2luaXRpYWxpemVfZHBfY29ubmVjdG9yKHN0cnVjdA0KPiBhbWRn cHVfZGlzcGxheV9tYW5hZ2VyICpkbSwNCj4gDQo+ICAJZGNfbGlua19kcF9nZXRfbWF4X2xpbmtf ZW5jX2NhcChhY29ubmVjdG9yLT5kY19saW5rLA0KPiAmbWF4X2xpbmtfZW5jX2NhcCk7DQo+ICAJ YWNvbm5lY3Rvci0+bXN0X21nci5jYnMgPSAmZG1fbXN0X2NiczsNCj4gLQlkcm1fZHBfbXN0X3Rv cG9sb2d5X21ncl9pbml0KA0KPiAtCQkmYWNvbm5lY3Rvci0+bXN0X21nciwNCj4gLQkJYWRldl90 b19kcm0oZG0tPmFkZXYpLA0KPiAtCQkmYWNvbm5lY3Rvci0+ZG1fZHBfYXV4LmF1eCwNCj4gLQkJ MTYsDQo+IC0JCTQsDQo+IC0JCW1heF9saW5rX2VuY19jYXAubGFuZV9jb3VudCwNCj4gLQ0KPiAJ ZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKG1heF9saW5rX2VuY19jYXAubGlua19yYXRlKSwN Cj4gLQkJYWNvbm5lY3Rvci0+Y29ubmVjdG9yX2lkKTsNCj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5 X21ncl9pbml0KCZhY29ubmVjdG9yLT5tc3RfbWdyLA0KPiBhZGV2X3RvX2RybShkbS0+YWRldiks DQo+ICsJCQkJICAgICAmYWNvbm5lY3Rvci0+ZG1fZHBfYXV4LmF1eCwgMTYsIDQsDQo+IGFjb25u ZWN0b3ItPmNvbm5lY3Rvcl9pZCk7DQo+IA0KPiAgCWRybV9jb25uZWN0b3JfYXR0YWNoX2RwX3N1 YmNvbm5lY3Rvcl9wcm9wZXJ0eSgmYWNvbm5lY3Rvci0NCj4gPmJhc2UpOw0KPiAgfQ0KPiBAQCAt NjE0LDYgKzYwNyw3IEBAIHN0YXRpYyBpbnQgYnBwX3gxNl9mcm9tX3BibihzdHJ1Y3QNCj4gZHNj X21zdF9mYWlybmVzc19wYXJhbXMgcGFyYW0sIGludCBwYm4pDQo+ICB9DQo+IA0KPiAgc3RhdGlj IHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ ICsJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ ICAJCQkgICAgIHN0cnVjdCBkY19saW5rICpkY19saW5rLA0KPiAgCQkJICAgICBzdHJ1Y3QgZHNj X21zdF9mYWlybmVzc19wYXJhbXMgKnBhcmFtcywNCj4gIAkJCSAgICAgc3RydWN0IGRzY19tc3Rf ZmFpcm5lc3NfdmFycyAqdmFycywNCj4gQEAgLTYyNiwxMiArNjIwLDkgQEAgc3RhdGljIHZvaWQg aW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJ aW50IG1pbl9pbml0aWFsX3NsYWNrOw0KPiAgCWludCBuZXh0X2luZGV4Ow0KPiAgCWludCByZW1h aW5pbmdfdG9faW5jcmVhc2UgPSAwOw0KPiAtCWludCBwYm5fcGVyX3RpbWVzbG90Ow0KPiAgCWlu dCBsaW5rX3RpbWVzbG90c191c2VkOw0KPiAgCWludCBmYWlyX3Bibl9hbGxvYzsNCj4gDQo+IC0J cGJuX3Blcl90aW1lc2xvdCA9IGRtX21zdF9nZXRfcGJuX2RpdmlkZXIoZGNfbGluayk7DQo+IC0N Cj4gIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgew0KPiAgCQlpZiAodmFyc1tpICsga10u ZHNjX2VuYWJsZWQpIHsNCj4gIAkJCWluaXRpYWxfc2xhY2tbaV0gPQ0KPiBAQCAtNjYyLDE3ICs2 NTMsMTcgQEAgc3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsDQo+ICAJCWxpbmtfdGltZXNsb3RzX3VzZWQgPSAwOw0KPiANCj4gIAkJ Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspDQo+IC0JCQlsaW5rX3RpbWVzbG90c191c2VkICs9 IERJVl9ST1VORF9VUCh2YXJzW2kgKw0KPiBrXS5wYm4sIHBibl9wZXJfdGltZXNsb3QpOw0KPiAr CQkJbGlua190aW1lc2xvdHNfdXNlZCArPSBESVZfUk9VTkRfVVAodmFyc1tpICsNCj4ga10ucGJu LCBtc3Rfc3RhdGUtPnBibl9kaXYpOw0KPiANCj4gLQkJZmFpcl9wYm5fYWxsb2MgPSAoNjMgLSBs aW5rX3RpbWVzbG90c191c2VkKSAvDQo+IHJlbWFpbmluZ190b19pbmNyZWFzZSAqIHBibl9wZXJf dGltZXNsb3Q7DQo+ICsJCWZhaXJfcGJuX2FsbG9jID0NCj4gKwkJCSg2MyAtIGxpbmtfdGltZXNs b3RzX3VzZWQpIC8gcmVtYWluaW5nX3RvX2luY3JlYXNlICoNCj4gbXN0X3N0YXRlLT5wYm5fZGl2 Ow0KPiANCj4gIAkJaWYgKGluaXRpYWxfc2xhY2tbbmV4dF9pbmRleF0gPiBmYWlyX3Bibl9hbGxv Yykgew0KPiAgCQkJdmFyc1tuZXh0X2luZGV4XS5wYm4gKz0gZmFpcl9wYm5fYWxsb2M7DQo+ICAJ CQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+IA0KPiBwYXJhbXNb bmV4dF9pbmRleF0ucG9ydC0+bWdyLA0KPiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQsDQo+ IC0NCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0JCQkJCQkJICBwYm5fcGVyX3RpbWVzbG90 KSA8DQo+IDApDQo+ICsNCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4pIDwgMCkNCj4gIAkJCQlyZXR1 cm47DQo+ICAJCQlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKSkgew0KPiAgCQkJ CXZhcnNbbmV4dF9pbmRleF0uYnBwX3gxNiA9DQo+IGJwcF94MTZfZnJvbV9wYm4ocGFyYW1zW25l eHRfaW5kZXhdLCB2YXJzW25leHRfaW5kZXhdLnBibik7DQo+IEBAIC02ODEsOCArNjcyLDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0K PiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5wb3J0LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IHBibl9wZXJf dGltZXNsb3QpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJ CQlyZXR1cm47DQo+ICAJCQl9DQo+ICAJCX0gZWxzZSB7DQo+IEBAIC02OTAsOCArNjgwLDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+ IA0KPiBwYXJhbXNbbmV4dF9pbmRleF0ucG9ydC0+bWdyLA0KPiANCj4gcGFyYW1zW25leHRfaW5k ZXhdLnBvcnQsDQo+IC0NCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0JCQkJCQkJICBwYm5f cGVyX3RpbWVzbG90KSA8DQo+IDApDQo+ICsNCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4pIDwgMCkN Cj4gIAkJCQlyZXR1cm47DQo+ICAJCQlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRl KSkgew0KPiAgCQkJCXZhcnNbbmV4dF9pbmRleF0uYnBwX3gxNiA9DQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5id19yYW5nZS5tYXhfdGFyZ2V0X2JwcF94MTY7DQo+IEBAIC03MDAsOCArNjg5LDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0K PiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5wb3J0LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IHBibl9wZXJf dGltZXNsb3QpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJ CQlyZXR1cm47DQo+ICAJCQl9DQo+ICAJCX0NCj4gQEAgLTc1Nyw4ICs3NDUsNyBAQCBzdGF0aWMg dm9pZCB0cnlfZGlzYWJsZV9kc2Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUNCj4gKnN0YXRlLA0K PiAgCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+ICAJCQkJCQkg IHBhcmFtc1tuZXh0X2luZGV4XS5wb3J0LQ0KPiA+bWdyLA0KPiAgCQkJCQkJICBwYXJhbXNbbmV4 dF9pbmRleF0ucG9ydCwNCj4gLQkJCQkJCSAgdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0NCj4g ZG1fbXN0X2dldF9wYm5fZGl2aWRlcihkY19saW5rKSkgPCAwKQ0KPiArCQkJCQkJICB2YXJzW25l eHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJcmV0dXJuOw0KPiANCj4gIAkJaWYgKCFkcm1fZHBf bXN0X2F0b21pY19jaGVjayhzdGF0ZSkpIHsNCj4gQEAgLTc2OSw4ICs3NTYsNyBAQCBzdGF0aWMg dm9pZCB0cnlfZGlzYWJsZV9kc2Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUNCj4gKnN0YXRlLA0K PiAgCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0KPiANCj4gcGFy YW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2luZGV4XS5wb3J0 LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2Rp dmlkZXIoZGNfbGluaykpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0K PiAgCQkJCXJldHVybjsNCj4gIAkJfQ0KPiANCj4gQEAgLTc4MywxNyArNzY5LDI3IEBAIHN0YXRp YyBib29sDQo+IGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkJICAgICBzdHJ1Y3QgZGNfc3RhdGUgKmRjX3N0YXRl LA0KPiAgCQkJCQkgICAgIHN0cnVjdCBkY19saW5rICpkY19saW5rLA0KPiAgCQkJCQkgICAgIHN0 cnVjdCBkc2NfbXN0X2ZhaXJuZXNzX3ZhcnMgKnZhcnMsDQo+ICsJCQkJCSAgICAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3IsDQo+ICAJCQkJCSAgICAgaW50ICpsaW5rX3Zh cnNfc3RhcnRfaW5kZXgpDQo+ICB7DQo+IC0JaW50IGksIGs7DQo+ICAJc3RydWN0IGRjX3N0cmVh bV9zdGF0ZSAqc3RyZWFtOw0KPiAgCXN0cnVjdCBkc2NfbXN0X2ZhaXJuZXNzX3BhcmFtcyBwYXJh bXNbTUFYX1BJUEVTXTsNCj4gIAlzdHJ1Y3QgYW1kZ3B1X2RtX2Nvbm5lY3RvciAqYWNvbm5lY3Rv cjsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4g ZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOw0KPiAgCWludCBj b3VudCA9IDA7DQo+ICsJaW50IGksIGs7DQo+ICAJYm9vbCBkZWJ1Z2ZzX292ZXJ3cml0ZSA9IGZh bHNlOw0KPiANCj4gIAltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7DQo+IA0KPiAr CWlmIChJU19FUlIobXN0X3N0YXRlKSkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJbXN0 X3N0YXRlLT5wYm5fZGl2ID0gZG1fbXN0X2dldF9wYm5fZGl2aWRlcihkY19saW5rKTsNCj4gKyNp ZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gKwlkcm1fZHBfbXN0X3VwZGF0ZV9z bG90cyhtc3Rfc3RhdGUsDQo+IGRjX2xpbmtfZHBfbXN0X2RlY2lkZV9saW5rX2VuY29kaW5nX2Zv cm1hdChkY19saW5rKSk7DQo+ICsjZW5kaWYNCj4gKw0KPiAgCS8qIFNldCB1cCBwYXJhbXMgKi8N Cj4gIAlmb3IgKGkgPSAwOyBpIDwgZGNfc3RhdGUtPnN0cmVhbV9jb3VudDsgaSsrKSB7DQo+ICAJ CXN0cnVjdCBkY19kc2NfcG9saWN5IGRzY19wb2xpY3kgPSB7MH07DQo+IEBAIC04NTIsMTEgKzg0 OCw4IEBAIHN0YXRpYyBib29sDQo+IGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJdmFyc1tpICsga10ucGJuID0NCj4g a2Jwc190b19wZWFrX3BibihwYXJhbXNbaV0uYndfcmFuZ2Uuc3RyZWFtX2ticHMpOw0KPiAgCQl2 YXJzW2kgKyBrXS5kc2NfZW5hYmxlZCA9IGZhbHNlOw0KPiAgCQl2YXJzW2kgKyBrXS5icHBfeDE2 ID0gMDsNCj4gLQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0KPiAt CQkJCQkJICBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiAtCQkJCQkJICBwYXJhbXNbaV0ucG9ydCwN Cj4gLQkJCQkJCSAgdmFyc1tpICsga10ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2Rpdmlk ZXIoZGNfbGluaykpIDwgMCkNCj4gKwkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3Rz KHN0YXRlLCBwYXJhbXNbaV0ucG9ydC0NCj4gPm1nciwgcGFyYW1zW2ldLnBvcnQsDQo+ICsJCQkJ CQkgIHZhcnNbaSArIGtdLnBibikgPCAwKQ0KPiAgCQkJcmV0dXJuIGZhbHNlOw0KPiAgCX0NCj4g IAlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKSAmJiAhZGVidWdmc19vdmVyd3Jp dGUpIHsNCj4gQEAgLTg3MCwyMSArODYzLDE1IEBAIHN0YXRpYyBib29sDQo+IGNvbXB1dGVfbXN0 X2RzY19jb25maWdzX2Zvcl9saW5rKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4g IAkJCXZhcnNbaSArIGtdLnBibiA9DQo+IGticHNfdG9fcGVha19wYm4ocGFyYW1zW2ldLmJ3X3Jh bmdlLm1pbl9rYnBzKTsNCj4gIAkJCXZhcnNbaSArIGtdLmRzY19lbmFibGVkID0gdHJ1ZTsNCj4g IAkJCXZhcnNbaSArIGtdLmJwcF94MTYgPQ0KPiBwYXJhbXNbaV0uYndfcmFuZ2UubWluX3Rhcmdl dF9icHBfeDE2Ow0KPiAtCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRl LA0KPiAtCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQtPm1nciwNCj4gLQkJCQkJCQkgIHBhcmFtc1tp XS5wb3J0LA0KPiAtCQkJCQkJCSAgdmFyc1tpICsga10ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRf cGJuX2RpdmlkZXIoZGNfbGluaykpIDwgMCkNCj4gKwkJCWlmIChkcm1fZHBfYXRvbWljX2ZpbmRf dGltZV9zbG90cyhzdGF0ZSwNCj4gcGFyYW1zW2ldLnBvcnQtPm1nciwNCj4gKwkJCQkJCQkgIHBh cmFtc1tpXS5wb3J0LCB2YXJzW2kNCj4gKyBrXS5wYm4pIDwgMCkNCj4gIAkJCQlyZXR1cm4gZmFs c2U7DQo+ICAJCX0gZWxzZSB7DQo+ICAJCQl2YXJzW2kgKyBrXS5wYm4gPQ0KPiBrYnBzX3RvX3Bl YWtfcGJuKHBhcmFtc1tpXS5id19yYW5nZS5zdHJlYW1fa2Jwcyk7DQo+ICAJCQl2YXJzW2kgKyBr XS5kc2NfZW5hYmxlZCA9IGZhbHNlOw0KPiAgCQkJdmFyc1tpICsga10uYnBwX3gxNiA9IDA7DQo+ IC0JCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+IC0JCQkJCQkJ ICBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiAtCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQsDQo+IC0J CQkJCQkJICB2YXJzW2kgKyBrXS5wYm4sDQo+IC0NCj4gZG1fbXN0X2dldF9wYm5fZGl2aWRlcihk Y19saW5rKSkgPCAwKQ0KPiArCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0 YXRlLA0KPiBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiArCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQs IHZhcnNbaQ0KPiArIGtdLnBibikgPCAwKQ0KPiAgCQkJCXJldHVybiBmYWxzZTsNCj4gIAkJfQ0K PiAgCX0NCj4gQEAgLTg5Miw3ICs4NzksNyBAQCBzdGF0aWMgYm9vbCBjb21wdXRlX21zdF9kc2Nf Y29uZmlnc19mb3JfbGluayhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJ CXJldHVybiBmYWxzZTsNCj4gDQo+ICAJLyogT3B0aW1pemUgZGVncmVlIG9mIGNvbXByZXNzaW9u ICovDQo+IC0JaW5jcmVhc2VfZHNjX2JwcChzdGF0ZSwgZGNfbGluaywgcGFyYW1zLCB2YXJzLCBj b3VudCwgayk7DQo+ICsJaW5jcmVhc2VfZHNjX2JwcChzdGF0ZSwgbXN0X3N0YXRlLCBkY19saW5r LCBwYXJhbXMsIHZhcnMsIGNvdW50LCBrKTsNCj4gDQo+ICAJdHJ5X2Rpc2FibGVfZHNjKHN0YXRl LCBkY19saW5rLCBwYXJhbXMsIHZhcnMsIGNvdW50LCBrKTsNCj4gDQo+IEBAIC0xMDM2LDkgKzEw MjMsOSBAQCBib29sIGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9zdGF0ZShzdHJ1Y3QNCj4g ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJCQljb250aW51ZTsNCj4gDQo+ICAJCW11dGV4 X2xvY2soJmFjb25uZWN0b3ItPm1zdF9tZ3IubG9jayk7DQo+IC0JCWlmICghY29tcHV0ZV9tc3Rf ZHNjX2NvbmZpZ3NfZm9yX2xpbmsoc3RhdGUsIGRjX3N0YXRlLA0KPiBzdHJlYW0tPmxpbmssDQo+ IC0JCQl2YXJzLCAmbGlua192YXJzX3N0YXJ0X2luZGV4KSkgew0KPiAtCQkJbXV0ZXhfdW5sb2Nr KCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiArCQlpZiAoIWNvbXB1dGVfbXN0X2RzY19j b25maWdzX2Zvcl9saW5rKHN0YXRlLCBkY19zdGF0ZSwNCj4gc3RyZWFtLT5saW5rLCB2YXJzLA0K PiArCQkJCQkJICAgICAgJmFjb25uZWN0b3ItPm1zdF9tZ3IsDQo+ICsJCQkJCQkgICAgICAmbGlu a192YXJzX3N0YXJ0X2luZGV4KSkgew0KDQpTaG91bGQgc3RpbGwga2VlcCAibXV0ZXhfdW5sb2Nr KCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOyIgaGVyZS4NCg0KPiAgCQkJcmV0dXJuIGZhbHNl Ow0KPiAgCQl9DQo+ICAJCW11dGV4X3VubG9jaygmYWNvbm5lY3Rvci0+bXN0X21nci5sb2NrKTsN Cj4gQEAgLTEwOTUsMTAgKzEwODIsOCBAQCBzdGF0aWMgYm9vbA0KPiAgCQkJY29udGludWU7DQo+ IA0KPiAgCQltdXRleF9sb2NrKCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiAtCQlpZiAo IWNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0YXRlLA0KPiAtCQkJCQkJICAgICAg ZGNfc3RhdGUsDQo+IC0JCQkJCQkgICAgICBzdHJlYW0tPmxpbmssDQo+IC0JCQkJCQkgICAgICB2 YXJzLA0KPiArCQlpZiAoIWNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0YXRlLCBk Y19zdGF0ZSwNCj4gc3RyZWFtLT5saW5rLCB2YXJzLA0KPiArCQkJCQkJICAgICAgJmFjb25uZWN0 b3ItPm1zdF9tZ3IsDQo+ICAJCQkJCQkgICAgICAmbGlua192YXJzX3N0YXJ0X2luZGV4KSkgew0K PiAgCQkJbXV0ZXhfdW5sb2NrKCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiAgCQkJcmV0 dXJuIGZhbHNlOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvaW5jbHVkZS9saW5rX3NlcnZpY2VfdHlwZXMuaA0KPiBpbmRleCA5MWJmZmM1YmY1MmMuLjE0 M2JhYWI1NGI0MSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2luY2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gQEAgLTI1MCwxMiArMjUwLDE5 IEBAIHVuaW9uIGRwY2RfdHJhaW5pbmdfbGFuZV9zZXQgew0KPiAgICogX09OTFlfIGJlIGZpbGxl ZCBvdXQgZnJvbSBETSBhbmQgdGhlbiBwYXNzZWQgdG8gREMsIGRvIE5PVCB1c2UgdGhlc2UNCj4g Zm9yIF9hbnlfIGtpbmQgb2YgYXRvbWljDQo+ICAgKiBzdGF0ZSBjYWxjdWxhdGlvbnMgaW4gRE0s IG9yIHlvdSB3aWxsIGJyZWFrIHNvbWV0aGluZy4NCj4gICAqLw0KPiArDQo+ICtzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0Ow0KPiArDQo+ICAvKiBEUCBNU1Qgc3RyZWFtIGFsbG9jYXRpb24gKHBheWxv YWQgYmFuZHdpZHRoIG51bWJlcikgKi8NCj4gIHN0cnVjdCBkY19kcF9tc3Rfc3RyZWFtX2FsbG9j YXRpb24gew0KPiAgCXVpbnQ4X3QgdmNwX2lkOw0KPiAgCS8qIG51bWJlciBvZiBzbG90cyByZXF1 aXJlZCBmb3IgdGhlIERQIHN0cmVhbSBpbg0KPiAgCSAqIHRyYW5zcG9ydCBwYWNrZXQgKi8NCj4g IAl1aW50OF90IHNsb3RfY291bnQ7DQo+ICsJLyogVGhlIE1TVCBwb3J0IHRoaXMgaXMgb24sIHRo aXMgaXMgdXNlZCB0byBhc3NvY2lhdGUgREMgTVNUIHBheWxvYWRzDQo+IHdpdGggdGhlaXINCj4g KwkgKiByZXNwZWN0aXZlIERSTSBwYXlsb2FkcyBhbGxvY2F0aW9ucywgYW5kIGNhbiBiZSBpZ25v cmVkIG9uIG5vbi0NCj4gTGludXguDQo+ICsJICovDQoNCklzIGl0IG5lY2Vzc2FyeSBmb3IgYWRk aW5nIHRoaXMgbmV3IG1lbWJlcj8gU2luY2UgdGhpcyBpcyBmb3Igc2V0dGluZyB0aGUgREMNCkhX IGFuZCBub3QgcmVsYXRpbmcgdG8gZHJtLg0KDQo+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAq cG9ydDsNCj4gIH07DQo+IA0KPiAgLyogRFAgTVNUIHN0cmVhbSBhbGxvY2F0aW9uIHRhYmxlICov DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9s b2d5LmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMN Cj4gaW5kZXggMTBkMjZhN2UwMjhjLi5kOGUzMjI2OTU4NWIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYw0KPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMNCj4gQEAgLTY3LDggKzY3LDcg QEAgc3RhdGljIGJvb2wgZHVtcF9kcF9wYXlsb2FkX3RhYmxlKHN0cnVjdA0KPiBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF90b3BvbG9neV9w dXRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0DQo+ICpwb3J0KTsNCj4gDQo+ICBzdGF0aWMg aW50IGRybV9kcF9kcGNkX3dyaXRlX3BheWxvYWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyDQo+ICptZ3IsDQo+IC0JCQkJICAgICBpbnQgaWQsDQo+IC0JCQkJICAgICBzdHJ1Y3QgZHJt X2RwX3BheWxvYWQgKnBheWxvYWQpOw0KPiArCQkJCSAgICAgaW50IGlkLCB1OCBzdGFydF9zbG90 LCB1OCBudW1fc2xvdHMpOw0KPiANCj4gIHN0YXRpYyBpbnQgZHJtX2RwX3NlbmRfZHBjZF9yZWFk KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgCQkJCSBzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0ICpwb3J0LA0KPiBAQCAtMTIzNCw1NyArMTIzMyw2IEBAIGJ1aWxkX3F1ZXJ5 X3N0cmVhbV9lbmNfc3RhdHVzKHN0cnVjdA0KPiBkcm1fZHBfc2lkZWJhbmRfbXNnX3R4ICptc2cs IHU4IHN0cmVhbV9pZCwNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgaW50IGRy bV9kcF9tc3RfYXNzaWduX3BheWxvYWRfaWQoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsDQo+IC0JCQkJCXN0cnVjdCBkcm1fZHBfdmNwaSAqdmNwaSkNCj4gLXsNCj4gLQlp bnQgcmV0LCB2Y3BpX3JldDsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2Nr KTsNCj4gLQlyZXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZtZ3ItPnBheWxvYWRfbWFzaywgbWdy LT5tYXhfcGF5bG9hZHMNCj4gKyAxKTsNCj4gLQlpZiAocmV0ID4gbWdyLT5tYXhfcGF5bG9hZHMp IHsNCj4gLQkJcmV0ID0gLUVJTlZBTDsNCj4gLQkJZHJtX2RiZ19rbXMobWdyLT5kZXYsICJvdXQg b2YgcGF5bG9hZCBpZHMgJWRcbiIsIHJldCk7DQo+IC0JCWdvdG8gb3V0X3VubG9jazsNCj4gLQl9 DQo+IC0NCj4gLQl2Y3BpX3JldCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJm1nci0+dmNwaV9tYXNr LCBtZ3ItDQo+ID5tYXhfcGF5bG9hZHMgKyAxKTsNCj4gLQlpZiAodmNwaV9yZXQgPiBtZ3ItPm1h eF9wYXlsb2Fkcykgew0KPiAtCQlyZXQgPSAtRUlOVkFMOw0KPiAtCQlkcm1fZGJnX2ttcyhtZ3It PmRldiwgIm91dCBvZiB2Y3BpIGlkcyAlZFxuIiwgcmV0KTsNCj4gLQkJZ290byBvdXRfdW5sb2Nr Ow0KPiAtCX0NCj4gLQ0KPiAtCXNldF9iaXQocmV0LCAmbWdyLT5wYXlsb2FkX21hc2spOw0KPiAt CXNldF9iaXQodmNwaV9yZXQsICZtZ3ItPnZjcGlfbWFzayk7DQo+IC0JdmNwaS0+dmNwaSA9IHZj cGlfcmV0ICsgMTsNCj4gLQltZ3ItPnByb3Bvc2VkX3ZjcGlzW3JldCAtIDFdID0gdmNwaTsNCj4g LW91dF91bmxvY2s6DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0J cmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgZHJtX2RwX21zdF9wdXRfcGF5 bG9hZF9pZChzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3INCj4gKm1nciwNCj4gLQkJCQkg ICAgICBpbnQgdmNwaSkNCj4gLXsNCj4gLQlpbnQgaTsNCj4gLQ0KPiAtCWlmICh2Y3BpID09IDAp DQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsN Cj4gLQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgInB1dHRpbmcgcGF5bG9hZCAlZFxuIiwgdmNwaSk7 DQo+IC0JY2xlYXJfYml0KHZjcGkgLSAxLCAmbWdyLT52Y3BpX21hc2spOw0KPiAtDQo+IC0JZm9y IChpID0gMDsgaSA8IG1nci0+bWF4X3BheWxvYWRzOyBpKyspIHsNCj4gLQkJaWYgKG1nci0+cHJv cG9zZWRfdmNwaXNbaV0gJiYNCj4gLQkJICAgIG1nci0+cHJvcG9zZWRfdmNwaXNbaV0tPnZjcGkg PT0gdmNwaSkgew0KPiAtCQkJbWdyLT5wcm9wb3NlZF92Y3Bpc1tpXSA9IE5VTEw7DQo+IC0JCQlj bGVhcl9iaXQoaSArIDEsICZtZ3ItPnBheWxvYWRfbWFzayk7DQo+IC0JCX0NCj4gLQl9DQo+IC0J bXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyBi b29sIGNoZWNrX3R4bXNnX3N0YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LA0KPiAgCQkJICAgICAgc3RydWN0IGRybV9kcF9zaWRlYmFuZF9tc2dfdHggKnR4bXNnKQ0KPiAg ew0KPiBAQCAtMTczNyw3ICsxNjg1LDcgQEAgZHJtX2RwX21zdF9kdW1wX3BvcnRfdG9wb2xvZ3lf aGlzdG9yeShzdHJ1Y3QNCj4gZHJtX2RwX21zdF9wb3J0ICpwb3J0KSB7fQ0KPiAgI2RlZmluZSBz YXZlX3BvcnRfdG9wb2xvZ3lfcmVmKHBvcnQsIHR5cGUpDQo+ICAjZW5kaWYNCj4gDQo+IC1zdGF0 aWMgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKg0KPiArc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKg0KPiAgZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUo c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUNCj4gKnN0YXRlLA0KPiAgCQkJCSBzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQ0KPiAgew0KPiBAQCAtMTc0OSw2ICsxNjk3LDcgQEAg ZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUgKnN0YXRlLA0KPiANCj4gIAlyZXR1cm4gTlVMTDsNCj4gIH0NCj4gK0VYUE9S VF9TWU1CT0woZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUpOw0KPiANCj4gIHN0YXRp YyB2b2lkIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVm KQ0KPiAgew0KPiBAQCAtMzI3Miw2ICszMjIxLDggQEAgaW50DQo+IGRybV9kcF9zZW5kX3F1ZXJ5 X3N0cmVhbV9lbmNfc3RhdHVzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LA0KPiAgCQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAgCQlzdHJ1Y3QgZHJtX2Rw X3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVzX2Fja19yZXBseSAqc3RhdHVzKQ0KPiAgew0KPiArCXN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZDsNCj4gIAlzdHJ1Y3QgZHJtX2RwX3NpZGViYW5k X21zZ190eCAqdHhtc2c7DQo+ICAJdTggbm9uY2VbN107DQo+ICAJaW50IHJldDsNCj4gQEAgLTMy ODgsNiArMzIzOSwxMCBAQCBpbnQNCj4gZHJtX2RwX3NlbmRfcXVlcnlfc3RyZWFtX2VuY19zdGF0 dXMoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+IA0KPiAgCWdldF9y YW5kb21fYnl0ZXMobm9uY2UsIHNpemVvZihub25jZSkpOw0KPiANCj4gKwlkcm1fbW9kZXNldF9s b2NrKCZtZ3ItPmJhc2UubG9jaywgTlVMTCk7DQo+ICsJc3RhdGUgPSB0b19kcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlKG1nci0+YmFzZS5zdGF0ZSk7DQo+ICsJcGF5bG9hZCA9IGRybV9hdG9taWNf Z2V0X21zdF9wYXlsb2FkX3N0YXRlKHN0YXRlLCBwb3J0KTsNCj4gKw0KPiAgCS8qDQo+ICAJICog IlNvdXJjZSBkZXZpY2UgdGFyZ2V0cyB0aGUgUVVFUllfU1RSRUFNX0VOQ1JZUFRJT05fU1RBVFVT DQo+IG1lc3NhZ2UNCj4gIAkgKiAgdHJhbnNhY3Rpb24gYXQgdGhlIE1TVCBCcmFuY2ggZGV2aWNl IGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUNCj4gQEAgLTMyOTUsNyArMzI1MCw3IEBAIGludA0K PiBkcm1fZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyhzdHJ1Y3QNCj4gZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwNCj4gIAkgKi8NCj4gIAl0eG1zZy0+ZHN0ID0gbWdyLT5tc3Rf cHJpbWFyeTsNCj4gDQo+IC0JYnVpbGRfcXVlcnlfc3RyZWFtX2VuY19zdGF0dXModHhtc2csIHBv cnQtPnZjcGkudmNwaSwgbm9uY2UpOw0KPiArCWJ1aWxkX3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVz KHR4bXNnLCBwYXlsb2FkLT52Y3BpLCBub25jZSk7DQo+IA0KPiAgCWRybV9kcF9xdWV1ZV9kb3du X3R4KG1nciwgdHhtc2cpOw0KPiANCj4gQEAgLTMzMTIsNiArMzI2Nyw3IEBAIGludA0KPiBkcm1f ZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyhzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwNCj4gIAltZW1jcHkoc3RhdHVzLCAmdHhtc2ctPnJlcGx5LnUuZW5jX3N0 YXR1cywgc2l6ZW9mKCpzdGF0dXMpKTsNCj4gDQo+ICBvdXQ6DQo+ICsJZHJtX21vZGVzZXRfdW5s b2NrKCZtZ3ItPmJhc2UubG9jayk7DQo+ICAJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChw b3J0KTsNCj4gIG91dF9nZXRfcG9ydDoNCj4gIAlrZnJlZSh0eG1zZyk7DQo+IEBAIC0zMzIwLDIx OSArMzI3NiwxNjEgQEAgaW50DQo+IGRybV9kcF9zZW5kX3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVz KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgRVhQT1JUX1NZTUJP TChkcm1fZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyk7DQo+IA0KPiAgc3RhdGljIGlu dCBkcm1fZHBfY3JlYXRlX3BheWxvYWRfc3RlcDEoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyDQo+ICptZ3IsDQo+IC0JCQkJICAgICAgIGludCBpZCwNCj4gLQkJCQkgICAgICAgc3RydWN0 IGRybV9kcF9wYXlsb2FkICpwYXlsb2FkKQ0KPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21z dF9hdG9taWNfcGF5bG9hZA0KPiAqcGF5bG9hZCkNCj4gIHsNCj4gLQlpbnQgcmV0Ow0KPiAtDQo+ IC0JcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGVfcGF5bG9hZChtZ3IsIGlkLCBwYXlsb2FkKTsNCj4g LQlpZiAocmV0IDwgMCkgew0KPiAtCQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRlID0gMDsNCj4gLQkJ cmV0dXJuIHJldDsNCj4gLQl9DQo+IC0JcGF5bG9hZC0+cGF5bG9hZF9zdGF0ZSA9IERQX1BBWUxP QURfTE9DQUw7DQo+IC0JcmV0dXJuIDA7DQo+ICsJcmV0dXJuIGRybV9kcF9kcGNkX3dyaXRlX3Bh eWxvYWQobWdyLCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0KPiA+dmNfc3RhcnRfc2xvdCwNCj4g KwkJCQkJIHBheWxvYWQtPnRpbWVfc2xvdHMpOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgZHJt X2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAyKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncg0K PiAqbWdyLA0KPiAtCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAt CQkJCSAgICAgICBpbnQgaWQsDQo+IC0JCQkJICAgICAgIHN0cnVjdCBkcm1fZHBfcGF5bG9hZCAq cGF5bG9hZCkNCj4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQN Cj4gKnBheWxvYWQpDQo+ICB7DQo+ICAJaW50IHJldDsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0ID0NCj4gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQobWdy LCBwYXlsb2FkLT5wb3J0KTsNCj4gDQo+IC0JcmV0ID0gZHJtX2RwX3BheWxvYWRfc2VuZF9tc2co bWdyLCBwb3J0LCBpZCwgcG9ydC0+dmNwaS5wYm4pOw0KPiAtCWlmIChyZXQgPCAwKQ0KPiAtCQly ZXR1cm4gcmV0Ow0KPiAtCXBheWxvYWQtPnBheWxvYWRfc3RhdGUgPSBEUF9QQVlMT0FEX1JFTU9U RTsNCj4gKwlpZiAoIXBvcnQpDQo+ICsJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJcmV0ID0gZHJt X2RwX3BheWxvYWRfc2VuZF9tc2cobWdyLCBwb3J0LCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0K PiA+cGJuKTsNCj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOw0KPiAgCXJl dHVybiByZXQ7DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBkcm1fZHBfZGVzdHJveV9wYXlsb2Fk X3N0ZXAxKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCQlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAtCQkJCQlpbnQgaWQsDQo+IC0JCQkJCXN0 cnVjdCBkcm1fZHBfcGF5bG9hZCAqcGF5bG9hZCkNCj4gKwkJCQkJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUNCj4gKm1zdF9zdGF0ZSwNCj4gKwkJCQkJc3RydWN0IGRybV9kcF9tc3Rf YXRvbWljX3BheWxvYWQNCj4gKnBheWxvYWQpDQo+ICB7DQo+ICsNCj4gIAlkcm1fZGJnX2ttcyht Z3ItPmRldiwgIlxuIik7DQo+IC0JLyogaXQncyBva2F5IGZvciB0aGVzZSB0byBmYWlsICovDQo+ IC0JaWYgKHBvcnQpIHsNCj4gLQkJZHJtX2RwX3BheWxvYWRfc2VuZF9tc2cobWdyLCBwb3J0LCBp ZCwgMCk7DQo+IC0JfQ0KPiANCj4gLQlkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKG1nciwgaWQs IHBheWxvYWQpOw0KPiAtCXBheWxvYWQtPnBheWxvYWRfc3RhdGUgPSBEUF9QQVlMT0FEX0RFTEVU RV9MT0NBTDsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gKwkvKiBpdCdzIG9rYXkgZm9yIHRoZXNl IHRvIGZhaWwgKi8NCj4gKwlkcm1fZHBfcGF5bG9hZF9zZW5kX21zZyhtZ3IsIHBheWxvYWQtPnBv cnQsIHBheWxvYWQtPnZjcGksIDApOw0KPiArCWRybV9kcF9kcGNkX3dyaXRlX3BheWxvYWQobWdy LCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0KPiA+dmNfc3RhcnRfc2xvdCwgMCk7DQo+IA0KPiAt c3RhdGljIGludCBkcm1fZHBfZGVzdHJveV9wYXlsb2FkX3N0ZXAyKHN0cnVjdA0KPiBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCQlpbnQgaWQsDQo+IC0JCQkJCXN0cnVjdCBk cm1fZHBfcGF5bG9hZCAqcGF5bG9hZCkNCj4gLXsNCj4gLQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRl ID0gMDsNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+ICAvKioNCj4gLSAqIGRybV9kcF91cGRh dGVfcGF5bG9hZF9wYXJ0MSgpIC0gRXhlY3V0ZSBwYXlsb2FkIHVwZGF0ZSBwYXJ0IDENCj4gLSAq IEBtZ3I6IG1hbmFnZXIgdG8gdXNlLg0KPiAtICogQHN0YXJ0X3Nsb3Q6IHRoaXMgaXMgdGhlIGN1 ciBzbG90DQo+ICsgKiBkcm1fZHBfYWRkX3BheWxvYWRfcGFydDEoKSAtIEV4ZWN1dGUgcGF5bG9h ZCB1cGRhdGUgcGFydCAxDQo+ICsgKiBAbWdyOiBNYW5hZ2VyIHRvIHVzZS4NCj4gKyAqIEBtc3Rf c3RhdGU6IFRoZSBNU1QgYXRvbWljIHN0YXRlDQo+ICsgKiBAcGF5bG9hZDogVGhlIHBheWxvYWQg dG8gd3JpdGUNCj4gICAqDQo+IC0gKiBOT1RFOiBzdGFydF9zbG90IGlzIGEgdGVtcG9yYXJ5IHdv cmthcm91bmQgZm9yIG5vbi1hdG9taWMgZHJpdmVycywNCj4gLSAqIHRoaXMgd2lsbCBiZSByZW1v dmVkIHdoZW4gbm9uLWF0b21pYyBtc3QgaGVscGVycyBhcmUgbW92ZWQgb3V0IG9mIHRoZQ0KPiBo ZWxwZXINCj4gKyAqIERldGVybWluZXMgdGhlIHN0YXJ0aW5nIHRpbWUgc2xvdCBmb3IgdGhlIGdp dmVuIHBheWxvYWQsIGFuZCBwcm9ncmFtcyB0aGUNCj4gVkNQSSBmb3IgdGhpcyBwYXlsb2FkDQo+ ICsgKiBpbnRvIGhhcmR3YXJlLg0KPiAgICoNCj4gLSAqIFRoaXMgaXRlcmF0ZXMgb3ZlciBhbGwg cHJvcG9zZWQgdmlydHVhbCBjaGFubmVscywgYW5kIHRyaWVzIHRvDQo+IC0gKiBhbGxvY2F0ZSBz cGFjZSBpbiB0aGUgbGluayBmb3IgdGhlbS4gRm9yIDAtPnNsb3RzIHRyYW5zaXRpb25zLA0KPiAt ICogdGhpcyBzdGVwIGp1c3Qgd3JpdGVzIHRoZSBWQ1BJIHRvIHRoZSBNU1QgZGV2aWNlLiBGb3Ig c2xvdHMtPjANCj4gLSAqIHRyYW5zaXRpb25zLCB0aGlzIHdyaXRlcyB0aGUgdXBkYXRlZCBWQ1BJ cyBhbmQgcmVtb3ZlcyB0aGUNCj4gLSAqIHJlbW90ZSBWQyBwYXlsb2Fkcy4NCj4gKyAqIEFmdGVy IGNhbGxpbmcgdGhpcywgdGhlIGRyaXZlciBzaG91bGQgZ2VuZXJhdGUgQUNUIGFuZCBwYXlsb2Fk IHBhY2tldHMuDQo+IE5vdGUgdGhhdCB0aGUgZHJpdmVyIG1heQ0KPiArICogZ2VuZXJhdGUgQUNU IG9uY2UgcGVyIHBheWxvYWQgY2hhbmdlLCBvciBvbmx5IG9uY2UgYWZ0ZXIgYWxsIG5ldw0KPiBw YXlsb2FkcyBpbiBhIGdpdmVuIGF0b21pYyBzdGF0ZQ0KPiArICogaGF2ZSBiZWVuIGFkZGVkLg0K PiAgICoNCj4gLSAqIGFmdGVyIGNhbGxpbmcgdGhpcyB0aGUgZHJpdmVyIHNob3VsZCBnZW5lcmF0 ZSBBQ1QgYW5kIHBheWxvYWQNCj4gLSAqIHBhY2tldHMuDQo+ICsgKiBSZXR1cm5zOiAwIG9uIHN1 Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZS4gSW4gdGhlIGV2ZW50IHRoYXQgdGhpcyBmYWls cywNCj4gKyAqIEBwYXlsb2FkLnZjX3N0YXJ0X3Nsb3Qgd2lsbCBhbHNvIGJlIHNldCB0byAtMS4N Cj4gICAqLw0KPiAtaW50IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3INCj4gKm1nciwgaW50IHN0YXJ0X3Nsb3QpDQo+ICtpbnQgZHJtX2Rw X2FkZF9wYXlsb2FkX3BhcnQxKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0K PiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlLA0K PiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZCkNCj4g IHsNCj4gLQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgcmVxX3BheWxvYWQ7DQo+ICAJc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqcG9ydDsNCj4gLQlpbnQgaSwgajsNCj4gLQlpbnQgY3VyX3Nsb3RzID0g c3RhcnRfc2xvdDsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4g LQlmb3IgKGkgPSAwOyBpIDwgbWdyLT5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAtCQlzdHJ1Y3Qg ZHJtX2RwX3ZjcGkgKnZjcGkgPSBtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldOw0KPiAtCQlzdHJ1Y3Qg ZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPSAmbWdyLT5wYXlsb2Fkc1tpXTsNCj4gLQkJYm9vbCBw dXRfcG9ydCA9IGZhbHNlOw0KPiAtDQo+IC0JCS8qIHNvbHZlIHRoZSBjdXJyZW50IHBheWxvYWRz IC0gY29tcGFyZSB0byB0aGUgaHcgb25lcw0KPiAtCQkgICAtIHVwZGF0ZSB0aGUgaHcgdmlldyAq Lw0KPiAtCQlyZXFfcGF5bG9hZC5zdGFydF9zbG90ID0gY3VyX3Nsb3RzOw0KPiAtCQlpZiAodmNw aSkgew0KPiAtCQkJcG9ydCA9IGNvbnRhaW5lcl9vZih2Y3BpLCBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0LA0KPiAtCQkJCQkgICAgdmNwaSk7DQo+IC0NCj4gLQkJCS8qIFZhbGlkYXRlZCBwb3J0cyBk b24ndCBtYXR0ZXIgaWYgd2UncmUgcmVsZWFzaW5nDQo+IC0JCQkgKiBWQ1BJDQo+IC0JCQkgKi8N Cj4gLQkJCWlmICh2Y3BpLT5udW1fc2xvdHMpIHsNCj4gLQkJCQlwb3J0ID0NCj4gZHJtX2RwX21z dF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQoDQo+IC0JCQkJICAgIG1nciwgcG9ydCk7DQo+ IC0JCQkJaWYgKCFwb3J0KSB7DQo+IC0JCQkJCWlmICh2Y3BpLT5udW1fc2xvdHMgPT0gcGF5bG9h ZC0NCj4gPm51bV9zbG90cykgew0KPiAtCQkJCQkJY3VyX3Nsb3RzICs9IHZjcGktPm51bV9zbG90 czsNCj4gLQkJCQkJCXBheWxvYWQtPnN0YXJ0X3Nsb3QgPQ0KPiByZXFfcGF5bG9hZC5zdGFydF9z bG90Ow0KPiAtCQkJCQkJY29udGludWU7DQo+IC0JCQkJCX0gZWxzZSB7DQo+IC0JCQkJCQlkcm1f ZGJnX2ttcyhtZ3ItPmRldiwNCj4gLQkJCQkJCQkgICAgIkZhaWw6c2V0IHBheWxvYWQgdG8NCj4g aW52YWxpZCBzaW5rIik7DQo+IC0JCQkJCQltdXRleF91bmxvY2soJm1nci0NCj4gPnBheWxvYWRf bG9jayk7DQo+IC0JCQkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJCQkJfQ0KPiAtCQkJCX0NCj4g LQkJCQlwdXRfcG9ydCA9IHRydWU7DQo+IC0JCQl9DQo+ICsJaW50IHJldDsNCj4gDQo+IC0JCQly ZXFfcGF5bG9hZC5udW1fc2xvdHMgPSB2Y3BpLT5udW1fc2xvdHM7DQo+IC0JCQlyZXFfcGF5bG9h ZC52Y3BpID0gdmNwaS0+dmNwaTsNCj4gLQkJfSBlbHNlIHsNCj4gLQkJCXBvcnQgPSBOVUxMOw0K PiAtCQkJcmVxX3BheWxvYWQubnVtX3Nsb3RzID0gMDsNCj4gLQkJfQ0KPiArCXBvcnQgPSBkcm1f ZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZChtZ3IsIHBheWxvYWQtDQo+ID5wb3J0 KTsNCj4gKwlpZiAoIXBvcnQpDQo+ICsJCXJldHVybiAwOw0KPiANCj4gLQkJcGF5bG9hZC0+c3Rh cnRfc2xvdCA9IHJlcV9wYXlsb2FkLnN0YXJ0X3Nsb3Q7DQo+IC0JCS8qIHdvcmsgb3V0IHdoYXQg aXMgcmVxdWlyZWQgdG8gaGFwcGVuIHdpdGggdGhpcyBwYXlsb2FkICovDQo+IC0JCWlmIChwYXls b2FkLT5udW1fc2xvdHMgIT0gcmVxX3BheWxvYWQubnVtX3Nsb3RzKSB7DQo+IC0NCj4gLQkJCS8q IG5lZWQgdG8gcHVzaCBhbiB1cGRhdGUgZm9yIHRoaXMgcGF5bG9hZCAqLw0KPiAtCQkJaWYgKHJl cV9wYXlsb2FkLm51bV9zbG90cykgew0KPiAtCQkJCWRybV9kcF9jcmVhdGVfcGF5bG9hZF9zdGVw MShtZ3IsIHZjcGktDQo+ID52Y3BpLA0KPiAtCQkJCQkJCSAgICAmcmVxX3BheWxvYWQpOw0KPiAt CQkJCXBheWxvYWQtPm51bV9zbG90cyA9DQo+IHJlcV9wYXlsb2FkLm51bV9zbG90czsNCj4gLQkJ CQlwYXlsb2FkLT52Y3BpID0gcmVxX3BheWxvYWQudmNwaTsNCj4gLQ0KPiAtCQkJfSBlbHNlIGlm IChwYXlsb2FkLT5udW1fc2xvdHMpIHsNCj4gLQkJCQlwYXlsb2FkLT5udW1fc2xvdHMgPSAwOw0K PiAtCQkJCWRybV9kcF9kZXN0cm95X3BheWxvYWRfc3RlcDEobWdyLCBwb3J0LA0KPiAtCQkJCQkJ CSAgICAgcGF5bG9hZC0+dmNwaSwNCj4gLQkJCQkJCQkgICAgIHBheWxvYWQpOw0KPiAtCQkJCXJl cV9wYXlsb2FkLnBheWxvYWRfc3RhdGUgPQ0KPiAtCQkJCQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRl Ow0KPiAtCQkJCXBheWxvYWQtPnN0YXJ0X3Nsb3QgPSAwOw0KPiAtCQkJfQ0KPiAtCQkJcGF5bG9h ZC0+cGF5bG9hZF9zdGF0ZSA9DQo+IHJlcV9wYXlsb2FkLnBheWxvYWRfc3RhdGU7DQo+IC0JCX0N Cj4gLQkJY3VyX3Nsb3RzICs9IHJlcV9wYXlsb2FkLm51bV9zbG90czsNCj4gKwlpZiAobWdyLT5w YXlsb2FkX2NvdW50ID09IDApDQo+ICsJCW1nci0+bmV4dF9zdGFydF9zbG90ID0gbXN0X3N0YXRl LT5zdGFydF9zbG90Ow0KPiANCj4gLQkJaWYgKHB1dF9wb3J0KQ0KPiAtCQkJZHJtX2RwX21zdF90 b3BvbG9neV9wdXRfcG9ydChwb3J0KTsNCj4gKwlwYXlsb2FkLT52Y19zdGFydF9zbG90ID0gbWdy LT5uZXh0X3N0YXJ0X3Nsb3Q7DQo+ICsJcmV0ID0gZHJtX2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAx KG1nciwgcGF5bG9hZCk7DQo+ICsJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsN Cj4gKwlpZiAocmV0IDwgMCkgew0KPiArCQlkcm1fd2FybihtZ3ItPmRldiwgIkZhaWxlZCB0byBj cmVhdGUgTVNUIHBheWxvYWQgZm9yIHBvcnQNCj4gJXA6ICVkXG4iLA0KPiArCQkJIHBheWxvYWQt PnBvcnQsIHJldCk7DQo+ICsJCXBheWxvYWQtPnZjX3N0YXJ0X3Nsb3QgPSAtMTsNCj4gKwkJcmV0 dXJuIHJldDsNCj4gIAl9DQo+IA0KPiAtCWZvciAoaSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2Fk czsgLyogZG8gbm90aGluZyAqLykgew0KPiAtCQlpZiAobWdyLT5wYXlsb2Fkc1tpXS5wYXlsb2Fk X3N0YXRlICE9DQo+IERQX1BBWUxPQURfREVMRVRFX0xPQ0FMKSB7DQo+IC0JCQlpKys7DQo+IC0J CQljb250aW51ZTsNCj4gLQkJfQ0KPiArCW1nci0+cGF5bG9hZF9jb3VudCsrOw0KPiArCW1nci0+ bmV4dF9zdGFydF9zbG90ICs9IHBheWxvYWQtPnRpbWVfc2xvdHM7DQo+IA0KPiAtCQlkcm1fZGJn X2ttcyhtZ3ItPmRldiwgInJlbW92aW5nIHBheWxvYWQgJWRcbiIsIGkpOw0KPiAtCQlmb3IgKGog PSBpOyBqIDwgbWdyLT5tYXhfcGF5bG9hZHMgLSAxOyBqKyspIHsNCj4gLQkJCW1nci0+cGF5bG9h ZHNbal0gPSBtZ3ItPnBheWxvYWRzW2ogKyAxXTsNCj4gLQkJCW1nci0+cHJvcG9zZWRfdmNwaXNb al0gPSBtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ogKw0KPiAxXTsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQxKTsNCj4gDQo+IC0JCQlp ZiAobWdyLT5wcm9wb3NlZF92Y3Bpc1tqXSAmJg0KPiAtCQkJICAgIG1nci0+cHJvcG9zZWRfdmNw aXNbal0tPm51bV9zbG90cykgew0KPiAtCQkJCXNldF9iaXQoaiArIDEsICZtZ3ItPnBheWxvYWRf bWFzayk7DQo+IC0JCQl9IGVsc2Ugew0KPiAtCQkJCWNsZWFyX2JpdChqICsgMSwgJm1nci0+cGF5 bG9hZF9tYXNrKTsNCj4gLQkJCX0NCj4gLQkJfQ0KPiArLyoqDQo+ICsgKiBkcm1fZHBfcmVtb3Zl X3BheWxvYWQoKSAtIFJlbW92ZSBhbiBNU1QgcGF5bG9hZA0KPiArICogQG1ncjogTWFuYWdlciB0 byB1c2UuDQo+ICsgKiBAbXN0X3N0YXRlOiBUaGUgTVNUIGF0b21pYyBzdGF0ZQ0KPiArICogQHBh eWxvYWQ6IFRoZSBwYXlsb2FkIHRvIHdyaXRlDQo+ICsgKg0KPiArICogUmVtb3ZlcyBhIHBheWxv YWQgZnJvbSBhbiBNU1QgdG9wb2xvZ3kgaWYgaXQgd2FzIHN1Y2Nlc3NmdWxseSBhc3NpZ25lZCBh DQo+IHN0YXJ0IHNsb3QuIEFsc28gdXBkYXRlcw0KPiArICogdGhlIHN0YXJ0aW5nIHRpbWUgc2xv dHMgb2YgYWxsIG90aGVyIHBheWxvYWRzIHdoaWNoIHdvdWxkIGhhdmUgYmVlbg0KPiBzaGlmdGVk IHRvd2FyZHMgdGhlIHN0YXJ0IG9mDQo+ICsgKiB0aGUgVkMgdGFibGUgYXMgYSByZXN1bHQuDQo+ ICsgKg0KPiArICogQWZ0ZXIgY2FsbGluZyB0aGlzLCB0aGUgZHJpdmVyIHNob3VsZCBnZW5lcmF0 ZSBBQ1QgYW5kIHBheWxvYWQgcGFja2V0cy4NCj4gTm90ZSB0aGF0IHRoZSBkcml2ZXIgbWF5DQo+ ICsgKiBnZW5lcmF0ZSBBQ1Qgb25jZSBwZXIgcGF5bG9hZCBjaGFuZ2UsIG9yIG9ubHkgb25jZSBh ZnRlciBhbGwgcGF5bG9hZHMgZm9yDQo+IGEgZ2l2ZW4gYXRvbWljIHN0YXRlDQo+ICsgKiBoYXZl IGJlZW4gcmVtb3ZlZC4NCj4gKyAqLw0KPiArdm9pZCBkcm1fZHBfcmVtb3ZlX3BheWxvYWQoc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCQkgICBzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlLA0KPiArCQkJICAgc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9kcF9tc3Rf YXRvbWljX3BheWxvYWQgKnBvczsNCj4gDQo+IC0JCW1lbXNldCgmbWdyLT5wYXlsb2Fkc1ttZ3It Pm1heF9wYXlsb2FkcyAtIDFdLCAwLA0KPiAtCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fZHBf cGF5bG9hZCkpOw0KPiAtCQltZ3ItPnByb3Bvc2VkX3ZjcGlzW21nci0+bWF4X3BheWxvYWRzIC0g MV0gPSBOVUxMOw0KPiAtCQljbGVhcl9iaXQobWdyLT5tYXhfcGF5bG9hZHMsICZtZ3ItPnBheWxv YWRfbWFzayk7DQo+ICsJLyogV2UgZmFpbGVkIHRvIG1ha2UgdGhlIHBheWxvYWQsIHNvIG5vdGhp bmcgdG8gZG8gKi8NCj4gKwlpZiAocGF5bG9hZC0+dmNfc3RhcnRfc2xvdCA9PSAtMSkNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJZHJtX2RwX2Rlc3Ryb3lfcGF5bG9hZF9zdGVwMShtZ3IsIG1zdF9z dGF0ZSwgcGF5bG9hZCk7DQo+ICsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJm1zdF9z dGF0ZS0+cGF5bG9hZHMsIG5leHQpIHsNCj4gKwkJaWYgKHBvcyAhPSBwYXlsb2FkICYmIHBvcy0+ dmNfc3RhcnRfc2xvdCA+IHBheWxvYWQtDQo+ID52Y19zdGFydF9zbG90KQ0KPiArCQkJcG9zLT52 Y19zdGFydF9zbG90IC09IHBheWxvYWQtPnRpbWVfc2xvdHM7DQo+ICAJfQ0KPiAtCW11dGV4X3Vu bG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiArCXBheWxvYWQtPnZjX3N0YXJ0X3Nsb3QgPSAt MTsNCj4gDQo+IC0JcmV0dXJuIDA7DQo+ICsJbWdyLT5wYXlsb2FkX2NvdW50LS07DQo+ICsJbWdy LT5uZXh0X3N0YXJ0X3Nsb3QgLT0gcGF5bG9hZC0+dGltZV9zbG90czsNCj4gIH0NCj4gLUVYUE9S VF9TWU1CT0woZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKTsNCj4gK0VYUE9SVF9TWU1CT0wo ZHJtX2RwX3JlbW92ZV9wYXlsb2FkKTsNCj4gDQo+ICAvKioNCj4gLSAqIGRybV9kcF91cGRhdGVf cGF5bG9hZF9wYXJ0MigpIC0gRXhlY3V0ZSBwYXlsb2FkIHVwZGF0ZSBwYXJ0IDINCj4gLSAqIEBt Z3I6IG1hbmFnZXIgdG8gdXNlLg0KPiArICogZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQyKCkgLSBF eGVjdXRlIHBheWxvYWQgdXBkYXRlIHBhcnQgMg0KPiArICogQG1ncjogTWFuYWdlciB0byB1c2Uu DQo+ICsgKiBAc3RhdGU6IFRoZSBnbG9iYWwgYXRvbWljIHN0YXRlDQo+ICsgKiBAcGF5bG9hZDog VGhlIHBheWxvYWQgdG8gdXBkYXRlDQo+ICsgKg0KPiArICogSWYgQHBheWxvYWQgd2FzIHN1Y2Nl c3NmdWxseSBhc3NpZ25lZCBhIHN0YXJ0aW5nIHRpbWUgc2xvdCBieQ0KPiBkcm1fZHBfYWRkX3Bh eWxvYWRfcGFydDEoKSwgdGhpcw0KPiArICogZnVuY3Rpb24gd2lsbCBzZW5kIHRoZSBzaWRlYmFu ZCBtZXNzYWdlcyB0byBmaW5pc2ggYWxsb2NhdGluZyB0aGlzIHBheWxvYWQuDQo+ICAgKg0KPiAt ICogVGhpcyBpdGVyYXRlcyBvdmVyIGFsbCBwcm9wb3NlZCB2aXJ0dWFsIGNoYW5uZWxzLCBhbmQg dHJpZXMgdG8NCj4gLSAqIGFsbG9jYXRlIHNwYWNlIGluIHRoZSBsaW5rIGZvciB0aGVtLiBGb3Ig MC0+c2xvdHMgdHJhbnNpdGlvbnMsDQo+IC0gKiB0aGlzIHN0ZXAgd3JpdGVzIHRoZSByZW1vdGUg VkMgcGF5bG9hZCBjb21tYW5kcy4gRm9yIHNsb3RzLT4wDQo+IC0gKiB0aGlzIGp1c3QgcmVzZXRz IHNvbWUgaW50ZXJuYWwgc3RhdGUuDQo+ICsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0 aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4NCj4gICAqLw0KPiAtaW50IGRybV9kcF91cGRhdGVf cGF5bG9hZF9wYXJ0MihzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3INCj4gKm1ncikNCj4g K2ludCBkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsDQo+ICsJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4g KwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQpDQo+ICB7 DQo+IC0Jc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsNCj4gLQlpbnQgaTsNCj4gIAlpbnQg cmV0ID0gMDsNCj4gDQo+IC0JbXV0ZXhfbG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiAtCWZv ciAoaSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0NCj4gLQkJaWYgKCFt Z3ItPnByb3Bvc2VkX3ZjcGlzW2ldKQ0KPiAtCQkJY29udGludWU7DQo+IC0NCj4gLQkJcG9ydCA9 IGNvbnRhaW5lcl9vZihtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldLCBzdHJ1Y3QNCj4gZHJtX2RwX21z dF9wb3J0LCB2Y3BpKTsNCj4gKwkvKiBTa2lwIGZhaWxlZCBwYXlsb2FkcyAqLw0KPiArCWlmIChw YXlsb2FkLT52Y19zdGFydF9zbG90ID09IC0xKSB7DQo+ICsJCWRybV9kYmdfa21zKHN0YXRlLT5k ZXYsICJQYXJ0IDEgb2YgcGF5bG9hZCBjcmVhdGlvbiBmb3IgJXMNCj4gZmFpbGVkLCBza2lwcGlu ZyBwYXJ0IDJcbiIsDQo+ICsJCQkgICAgcGF5bG9hZC0+cG9ydC0+Y29ubmVjdG9yLT5uYW1lKTsN Cj4gKwkJcmV0dXJuIC1FSU87DQo+ICsJfQ0KPiANCj4gLQkJZHJtX2RiZ19rbXMobWdyLT5kZXYs ICJwYXlsb2FkICVkICVkXG4iLCBpLCBtZ3ItDQo+ID5wYXlsb2Fkc1tpXS5wYXlsb2FkX3N0YXRl KTsNCj4gLQkJaWYgKG1nci0+cGF5bG9hZHNbaV0ucGF5bG9hZF9zdGF0ZSA9PSBEUF9QQVlMT0FE X0xPQ0FMKQ0KPiB7DQo+IC0JCQlyZXQgPSBkcm1fZHBfY3JlYXRlX3BheWxvYWRfc3RlcDIobWdy LCBwb3J0LCBtZ3ItDQo+ID5wcm9wb3NlZF92Y3Bpc1tpXS0+dmNwaSwgJm1nci0+cGF5bG9hZHNb aV0pOw0KPiAtCQl9IGVsc2UgaWYgKG1nci0+cGF5bG9hZHNbaV0ucGF5bG9hZF9zdGF0ZSA9PQ0K PiBEUF9QQVlMT0FEX0RFTEVURV9MT0NBTCkgew0KPiAtCQkJcmV0ID0gZHJtX2RwX2Rlc3Ryb3lf cGF5bG9hZF9zdGVwMihtZ3IsIG1nci0NCj4gPnByb3Bvc2VkX3ZjcGlzW2ldLT52Y3BpLCAmbWdy LT5wYXlsb2Fkc1tpXSk7DQo+IC0JCX0NCj4gLQkJaWYgKHJldCkgew0KPiAtCQkJbXV0ZXhfdW5s b2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0JCQlyZXR1cm4gcmV0Ow0KPiAtCQl9DQo+ICsJ cmV0ID0gZHJtX2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAyKG1nciwgcGF5bG9hZCk7DQo+ICsJaWYg KHJldCA8IDApIHsNCj4gKwkJaWYgKCFwYXlsb2FkLT5kZWxldGUpDQo+ICsJCQlkcm1fZXJyKG1n ci0+ZGV2LCAiU3RlcCAyIG9mIGNyZWF0aW5nIE1TVCBwYXlsb2FkDQo+IGZvciAlcCBmYWlsZWQ6 ICVkXG4iLA0KPiArCQkJCXBheWxvYWQtPnBvcnQsIHJldCk7DQo+ICsJCWVsc2UNCj4gKwkJCWRy bV9kYmdfa21zKG1nci0+ZGV2LCAiU3RlcCAyIG9mIHJlbW92aW5nIE1TVA0KPiBwYXlsb2FkIGZv ciAlcCBmYWlsZWQ6ICVkXG4iLA0KPiArCQkJCSAgICBwYXlsb2FkLT5wb3J0LCByZXQpOw0KPiAg CX0NCj4gLQltdXRleF91bmxvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gLQlyZXR1cm4gMDsN Cj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICB9DQo+IC1FWFBPUlRfU1lNQk9MKGRybV9kcF91cGRh dGVfcGF5bG9hZF9wYXJ0Mik7DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9hZGRfcGF5bG9hZF9w YXJ0Mik7DQo+IA0KPiAgc3RhdGljIGludCBkcm1fZHBfc2VuZF9kcGNkX3JlYWQoc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICAJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQsDQo+IEBAIC0zNzEyLDcgKzM2MTAsNiBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9n eV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgYm9v bCBtcw0KPiAgCWludCByZXQgPSAwOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0 YiA9IE5VTEw7DQo+IA0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gIAlt dXRleF9sb2NrKCZtZ3ItPmxvY2spOw0KPiAgCWlmIChtc3Rfc3RhdGUgPT0gbWdyLT5tc3Rfc3Rh dGUpDQo+ICAJCWdvdG8gb3V0X3VubG9jazsNCj4gQEAgLTM3MjAsMTAgKzM2MTcsNiBAQCBpbnQg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwgYm9vbCBtcw0KPiAgCW1nci0+bXN0X3N0YXRlID0gbXN0X3N0YXRlOw0K PiAgCS8qIHNldCB0aGUgZGV2aWNlIGludG8gTVNUIG1vZGUgKi8NCj4gIAlpZiAobXN0X3N0YXRl KSB7DQo+IC0JCXN0cnVjdCBkcm1fZHBfcGF5bG9hZCByZXNldF9wYXk7DQo+IC0JCWludCBsYW5l X2NvdW50Ow0KPiAtCQlpbnQgbGlua19yYXRlOw0KPiAtDQo+ICAJCVdBUk5fT04obWdyLT5tc3Rf cHJpbWFyeSk7DQo+IA0KPiAgCQkvKiBnZXQgZHBjZCBpbmZvICovDQo+IEBAIC0zNzM0LDE2ICsz NjI3LDYgQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3Qoc3RydWN0DQo+IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMNCj4gIAkJCWdvdG8gb3V0X3VubG9j azsNCj4gIAkJfQ0KPiANCj4gLQkJbGFuZV9jb3VudCA9IG1pbl90KGludCwgbWdyLT5kcGNkWzJd ICYNCj4gRFBfTUFYX0xBTkVfQ09VTlRfTUFTSywgbWdyLT5tYXhfbGFuZV9jb3VudCk7DQo+IC0J CWxpbmtfcmF0ZSA9IG1pbl90KGludCwgZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKG1nci0N Cj4gPmRwY2RbMV0pLCBtZ3ItPm1heF9saW5rX3JhdGUpOw0KPiAtCQltZ3ItPnBibl9kaXYgPSBk cm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncobWdyLA0KPiAtCQkJCQkJCWxpbmtfcmF0ZSwNCj4gLQkJ CQkJCQlsYW5lX2NvdW50KTsNCj4gLQkJaWYgKG1nci0+cGJuX2RpdiA9PSAwKSB7DQo+IC0JCQly ZXQgPSAtRUlOVkFMOw0KPiAtCQkJZ290byBvdXRfdW5sb2NrOw0KPiAtCQl9DQo+IC0NCj4gIAkJ LyogYWRkIGluaXRpYWwgYnJhbmNoIGRldmljZSBhdCBMQ1QgMSAqLw0KPiAgCQltc3RiID0gZHJt X2RwX2FkZF9tc3RfYnJhbmNoX2RldmljZSgxLCBOVUxMKTsNCj4gIAkJaWYgKG1zdGIgPT0gTlVM TCkgew0KPiBAQCAtMzc2Myw5ICszNjQ2LDggQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy X3NldF9tc3Qoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMN Cj4gIAkJaWYgKHJldCA8IDApDQo+ICAJCQlnb3RvIG91dF91bmxvY2s7DQo+IA0KPiAtCQlyZXNl dF9wYXkuc3RhcnRfc2xvdCA9IDA7DQo+IC0JCXJlc2V0X3BheS5udW1fc2xvdHMgPSAweDNmOw0K PiAtCQlkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKG1nciwgMCwgJnJlc2V0X3BheSk7DQo+ICsJ CS8qIFdyaXRlIHJlc2V0IHBheWxvYWQgKi8NCj4gKwkJZHJtX2RwX2RwY2Rfd3JpdGVfcGF5bG9h ZChtZ3IsIDAsIDAsIDB4M2YpOw0KPiANCj4gIAkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwg Jm1nci0+d29yayk7DQo+IA0KPiBAQCAtMzc3NywxOSArMzY1OSwxMSBAQCBpbnQgZHJtX2RwX21z dF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwgYm9vbCBtcw0KPiAgCQkvKiB0aGlzIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2UgaXMgZ29u ZSAqLw0KPiAgCQlkcm1fZHBfZHBjZF93cml0ZWIobWdyLT5hdXgsIERQX01TVE1fQ1RSTCwgMCk7 DQo+ICAJCXJldCA9IDA7DQo+IC0JCW1lbXNldChtZ3ItPnBheWxvYWRzLCAwLA0KPiAtCQkgICAg ICAgbWdyLT5tYXhfcGF5bG9hZHMgKiBzaXplb2YobWdyLT5wYXlsb2Fkc1swXSkpOw0KPiAtCQlt ZW1zZXQobWdyLT5wcm9wb3NlZF92Y3BpcywgMCwNCj4gLQkJICAgICAgIG1nci0+bWF4X3BheWxv YWRzICogc2l6ZW9mKG1nci0+cHJvcG9zZWRfdmNwaXNbMF0pKTsNCj4gLQkJbWdyLT5wYXlsb2Fk X21hc2sgPSAwOw0KPiAtCQlzZXRfYml0KDAsICZtZ3ItPnBheWxvYWRfbWFzayk7DQo+IC0JCW1n ci0+dmNwaV9tYXNrID0gMDsNCj4gIAkJbWdyLT5wYXlsb2FkX2lkX3RhYmxlX2NsZWFyZWQgPSBm YWxzZTsNCj4gIAl9DQo+IA0KPiAgb3V0X3VubG9jazoNCj4gIAltdXRleF91bmxvY2soJm1nci0+ bG9jayk7DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+ICAJaWYgKG1z dGIpDQo+ICAJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIobXN0Yik7DQo+ICAJcmV0dXJu IHJldDsNCj4gQEAgLTQzMTAsNjIgKzQxODQsMTggQEAgc3RydWN0IGVkaWQgKmRybV9kcF9tc3Rf Z2V0X2VkaWQoc3RydWN0DQo+IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRybV9k cF8NCj4gIH0NCj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9nZXRfZWRpZCk7DQo+IA0KPiAt LyoqDQo+IC0gKiBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIHRpbWUgc2xvdHMgZm9y IHRoaXMgUEJOIHZhbHVlDQo+IC0gKiBAbWdyOiBtYW5hZ2VyIHRvIHVzZQ0KPiAtICogQHBibjog cGF5bG9hZCBiYW5kd2lkdGggdG8gY29udmVydCBpbnRvIHNsb3RzLg0KPiAtICoNCj4gLSAqIENh bGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHRpbWUgc2xvdHMgdGhhdCB3aWxsIGJlIHJlcXVpcmVkIGZv ciB0aGUgZ2l2ZW4gUEJODQo+IC0gKiB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVk LCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGF0b21pYw0KPiAtICogZHJpdmVycy4NCj4gLSAq DQo+IC0gKiBSRVRVUk5TOg0KPiAtICogVGhlIHRvdGFsIHNsb3RzIHJlcXVpcmVkIGZvciB0aGlz IHBvcnQsIG9yIGVycm9yLg0KPiAtICovDQo+IC1pbnQgZHJtX2RwX2ZpbmRfdmNwaV9zbG90cyhz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgIGludCBwYm4pDQo+ IC17DQo+IC0JaW50IG51bV9zbG90czsNCj4gLQ0KPiAtCW51bV9zbG90cyA9IERJVl9ST1VORF9V UChwYm4sIG1nci0+cGJuX2Rpdik7DQo+IC0NCj4gLQkvKiBtYXguIHRpbWUgc2xvdHMgLSBvbmUg c2xvdCBmb3IgTVRQIGhlYWRlciAqLw0KPiAtCWlmIChudW1fc2xvdHMgPiA2MykNCj4gLQkJcmV0 dXJuIC1FTk9TUEM7DQo+IC0JcmV0dXJuIG51bV9zbG90czsNCj4gLX0NCj4gLUVYUE9SVF9TWU1C T0woZHJtX2RwX2ZpbmRfdmNwaV9zbG90cyk7DQo+IC0NCj4gLXN0YXRpYyBpbnQgZHJtX2RwX2lu aXRfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgICBz dHJ1Y3QgZHJtX2RwX3ZjcGkgKnZjcGksIGludCBwYm4sIGludCBzbG90cykNCj4gLXsNCj4gLQlp bnQgcmV0Ow0KPiAtDQo+IC0JdmNwaS0+cGJuID0gcGJuOw0KPiAtCXZjcGktPmFsaWduZWRfcGJu ID0gc2xvdHMgKiBtZ3ItPnBibl9kaXY7DQo+IC0JdmNwaS0+bnVtX3Nsb3RzID0gc2xvdHM7DQo+ IC0NCj4gLQlyZXQgPSBkcm1fZHBfbXN0X2Fzc2lnbl9wYXlsb2FkX2lkKG1nciwgdmNwaSk7DQo+ IC0JaWYgKHJldCA8IDApDQo+IC0JCXJldHVybiByZXQ7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+ IC0NCj4gIC8qKg0KPiAgICogZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoKSAtIEZpbmQg YW5kIGFkZCB0aW1lIHNsb3RzIHRvIHRoZSBzdGF0ZQ0KPiAgICogQHN0YXRlOiBnbG9iYWwgYXRv bWljIHN0YXRlDQo+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQN Cj4gICAqIEBwb3J0OiBwb3J0IHRvIGZpbmQgdGltZSBzbG90cyBmb3INCj4gICAqIEBwYm46IGJh bmR3aWR0aCByZXF1aXJlZCBmb3IgdGhlIG1vZGUgaW4gUEJODQo+IC0gKiBAcGJuX2RpdjogZGl2 aWRlciBmb3IgRFNDIG1vZGUgdGhhdCB0YWtlcyBGRUMgaW50byBhY2NvdW50DQo+ICAgKg0KPiAt ICogQWxsb2NhdGVzIHRpbWUgc2xvdHMgdG8gQHBvcnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMg dGltZXNsb3QgYWxsb2NhdGlvbnMgaXQNCj4gLSAqIG1heSBoYXZlIGhhZC4gQW55IGF0b21pYyBk cml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzDQo+IGZ1bmN0aW9uDQo+IC0g KiBpbiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxi YWNrIHRvIGNoYW5nZQ0KPiB0aGUNCj4gLSAqIGN1cnJlbnQgdGltZXNsb3QgYWxsb2NhdGlvbiBm b3IgdGhlIG5ldyBzdGF0ZSwgYnV0IG9ubHkgd2hlbg0KPiAtICogJmRybV9jcnRjX3N0YXRlLm1v ZGVfY2hhbmdlZCBvcg0KPiAmZHJtX2NydGNfc3RhdGUuY29ubmVjdG9yc19jaGFuZ2VkIGlzIHNl dA0KPiAtICogdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UgYXBwbGljYXRp b25zIHRoYXQgc3RpbGwgdXNlIHRoZQ0KPiAtICogbGVnYWN5IG1vZGVzZXR0aW5nIFVBUEkuDQo+ ICsgKiBBbGxvY2F0ZXMgdGltZSBzbG90cyB0byBAcG9ydCwgcmVwbGFjaW5nIGFueSBwcmV2aW91 cyB0aW1lIHNsb3QgYWxsb2NhdGlvbnMNCj4gaXQgbWF5DQo+ICsgKiBoYXZlIGhhZC4gQW55IGF0 b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGlu DQo+ICsgKiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNh bGxiYWNrDQo+IHVuY29uZGl0aW9uYWxseSB0bw0KPiArICogY2hhbmdlIHRoZSBjdXJyZW50IHRp bWUgc2xvdCBhbGxvY2F0aW9uIGZvciB0aGUgbmV3IHN0YXRlLCBhbmQgZW5zdXJlIHRoZQ0KPiBN U1QNCj4gKyAqIGF0b21pYyBzdGF0ZSBpcyBhZGRlZCB3aGVuZXZlciB0aGUgc3RhdGUgb2YgcGF5 bG9hZHMgaW4gdGhlIHRvcG9sb2d5DQo+IGNoYW5nZXMuDQo+ICAgKg0KPiAgICogQWxsb2NhdGlv bnMgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gYXJlIG5vdCBjaGVja2VkIGFnYWluc3QgdGhlIGJhbmR3 aWR0aA0KPiAgICogcmVzdHJhaW50cyBvZiBAbWdyIHVudGlsIHRoZSBkcml2ZXIgY2FsbHMgZHJt X2RwX21zdF9hdG9taWNfY2hlY2soKS4NCj4gQEAgLTQzODQsOCArNDIxNCw3IEBAIHN0YXRpYyBp bnQgZHJtX2RwX2luaXRfdmNwaShzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1n ciwNCj4gICAqLw0KPiAgaW50IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X21nciAqbWdyLA0KPiAtCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50 IHBibiwNCj4gLQkJCQkgIGludCBwYm5fZGl2KQ0KPiArCQkJCSAgc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCwgaW50IHBibikNCj4gIHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3Bh eWxvYWQgKnBheWxvYWQgPSBOVUxMOw0KPiBAQCAtNDQxOCwxMCArNDI0Nyw3IEBAIGludCBkcm1f ZHBfYXRvbWljX2ZpbmRfdGltZV9zbG90cyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUsDQo+ICAJCX0NCj4gIAl9DQo+IA0KPiAtCWlmIChwYm5fZGl2IDw9IDApDQo+IC0JCXBibl9k aXYgPSBtZ3ItPnBibl9kaXY7DQo+IC0NCj4gLQlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJu LCBwYm5fZGl2KTsNCj4gKwlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCB0b3BvbG9neV9z dGF0ZS0+cGJuX2Rpdik7DQo+IA0KPiAgCWRybV9kYmdfYXRvbWljKG1nci0+ZGV2LCAiW0NPTk5F Q1RPUjolZDolc10gW01TVCBQT1JUOiVwXQ0KPiBUVSAlZCAtPiAlZFxuIiwNCj4gIAkJICAgICAg IHBvcnQtPmNvbm5lY3Rvci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLA0KPiBAQCAt NDQzMCw3ICs0MjU2LDcgQEAgaW50IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0cnVj dA0KPiBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJICAgICAgIHBvcnQtPmNvbm5lY3Rv ci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLA0KPiAgCQkgICAgICAgcG9ydCwgcHJl dl9idywgcGJuKTsNCj4gDQo+IC0JLyogQWRkIHRoZSBuZXcgYWxsb2NhdGlvbiB0byB0aGUgc3Rh dGUgKi8NCj4gKwkvKiBBZGQgdGhlIG5ldyBhbGxvY2F0aW9uIHRvIHRoZSBzdGF0ZSwgbm90ZSB0 aGUgVkNQSSBpc24ndCBhc3NpZ25lZA0KPiB1bnRpbCB0aGUgZW5kICovDQo+ICAJaWYgKCFwYXls b2FkKSB7DQo+ICAJCXBheWxvYWQgPSBremFsbG9jKHNpemVvZigqcGF5bG9hZCksIEdGUF9LRVJO RUwpOw0KPiAgCQlpZiAoIXBheWxvYWQpDQo+IEBAIC00NDM4LDYgKzQyNjQsNyBAQCBpbnQgZHJt X2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RydWN0DQo+IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLA0KPiANCj4gIAkJZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2MocG9ydCk7DQo+ICAJCXBh eWxvYWQtPnBvcnQgPSBwb3J0Ow0KPiArCQlwYXlsb2FkLT52Y19zdGFydF9zbG90ID0gLTE7DQo+ ICAJCWxpc3RfYWRkKCZwYXlsb2FkLT5uZXh0LCAmdG9wb2xvZ3lfc3RhdGUtPnBheWxvYWRzKTsN Cj4gIAl9DQo+ICAJcGF5bG9hZC0+dGltZV9zbG90cyA9IHJlcV9zbG90czsNCj4gQEAgLTQ0NTQs MTAgKzQyODEsMTIgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdGltZV9z bG90cyk7DQo+ICAgKiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0aGUgdGltZSBzbG90cyBm cm9tDQo+ICAgKg0KPiAgICogUmVsZWFzZXMgYW55IHRpbWUgc2xvdHMgdGhhdCBoYXZlIGJlZW4g YWxsb2NhdGVkIHRvIGEgcG9ydCBpbiB0aGUgYXRvbWljDQo+IC0gKiBzdGF0ZS4gQW55IGF0b21p YyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluDQo+ IC0gKiB0aGVpciAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MuYXRvbWljX2NoZWNrKCkgY2Fs bGJhY2sgd2hlbiB0aGUNCj4gLSAqIGNvbm5lY3RvciB3aWxsIG5vIGxvbmdlciBoYXZlIFZDUEkg YWxsb2NhdGVkIChlLmcuIGJlY2F1c2UgaXRzIENSVEMgd2FzDQo+IC0gKiByZW1vdmVkKSB3aGVu IGl0IGhhZCBWQ1BJIGFsbG9jYXRlZCBpbiB0aGUgcHJldmlvdXMgYXRvbWljIHN0YXRlLg0KPiAr ICogc3RhdGUuIEFueSBhdG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNhbGwg dGhpcyBmdW5jdGlvbg0KPiArICogdW5jb25kaXRpb25hbGx5IGluIHRoZWlyICZkcm1fY29ubmVj dG9yX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKQ0KPiBjYWxsYmFjay4NCj4gKyAqIFRoaXMg aGVscGVyIHdpbGwgY2hlY2sgd2hldGhlciB0aW1lIHNsb3RzIHdvdWxkIGJlIHJlbGVhc2VkIGJ5 IHRoZSBuZXcNCj4gc3RhdGUgYW5kDQo+ICsgKiByZXNwb25kIGFjY29yZGluZ2x5LCBhbG9uZyB3 aXRoIGVuc3VyaW5nIHRoZSBNU1Qgc3RhdGUgaXMgYWx3YXlzIGFkZGVkDQo+IHRvIHRoZQ0KPiAr ICogYXRvbWljIHN0YXRlIHdoZW5ldmVyIGEgbmV3IHN0YXRlIHdvdWxkIG1vZGlmeSB0aGUgc3Rh dGUgb2YgcGF5bG9hZHMNCj4gb24gdGhlDQo+ICsgKiB0b3BvbG9neS4NCj4gICAqDQo+ICAgKiBJ dCBpcyBPSyB0byBjYWxsIHRoaXMgZXZlbiBpZiBAcG9ydCBoYXMgYmVlbiByZW1vdmVkIGZyb20g dGhlIHN5c3RlbS4NCj4gICAqIEFkZGl0aW9uYWxseSwgaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1 bmN0aW9uIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lDQo+IEBAIC00NTE5LDYgKzQzNDgsNyBA QCBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3RpbWVfc2xvdHMoc3RydWN0DQo+IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlLA0KPiAgCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3J0KTsN Cj4gIAkJcGF5bG9hZC0+cGJuID0gMDsNCj4gIAkJcGF5bG9hZC0+ZGVsZXRlID0gdHJ1ZTsNCj4g KwkJdG9wb2xvZ3lfc3RhdGUtPnBheWxvYWRfbWFzayAmPSB+QklUKHBheWxvYWQtPnZjcGkgLSAx KTsNCj4gIAl9DQo+IA0KPiAgCXJldHVybiAwOw0KPiBAQCAtNDU2OSw3ICs0Mzk5LDggQEAgaW50 IGRybV9kcF9tc3RfYXRvbWljX3NldHVwX2NvbW1pdChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpDQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfYXRvbWljX3NldHVwX2NvbW1p dCk7DQo+IA0KPiAgLyoqDQo+IC0gKiBkcm1fZHBfbXN0X2F0b21pY193YWl0X2Zvcl9kZXBlbmRl bmNpZXMoKSAtIFdhaXQgZm9yIGFsbCBwZW5kaW5nDQo+IGNvbW1pdHMgb24gTVNUIHRvcG9sb2dp ZXMNCj4gKyAqIGRybV9kcF9tc3RfYXRvbWljX3dhaXRfZm9yX2RlcGVuZGVuY2llcygpIC0gV2Fp dCBmb3IgYWxsIHBlbmRpbmcNCj4gY29tbWl0cyBvbiBNU1QgdG9wb2xvZ2llcywNCj4gKyAqIHBy ZXBhcmUgbmV3IE1TVCBzdGF0ZSBmb3IgY29tbWl0DQo+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9t aWMgc3RhdGUNCj4gICAqDQo+ICAgKiBHb2VzIHRocm91Z2ggYW55IE1TVCB0b3BvbG9naWVzIGlu IHRoaXMgYXRvbWljIHN0YXRlLCBhbmQgd2FpdHMgZm9yIGFueQ0KPiBwZW5kaW5nIGNvbW1pdHMg d2hpY2gNCj4gQEAgLTQ1ODcsMTcgKzQ0MTgsMzAgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBf bXN0X2F0b21pY19zZXR1cF9jb21taXQpOw0KPiAgICovDQo+ICB2b2lkIGRybV9kcF9tc3RfYXRv bWljX3dhaXRfZm9yX2RlcGVuZGVuY2llcyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUpDQo+ICB7DQo+IC0Jc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm9sZF9tc3Rf c3RhdGU7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm9sZF9tc3Rfc3Rh dGUsDQo+ICpuZXdfbXN0X3N0YXRlOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n ciAqbWdyOw0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICpvbGRfcGF5bG9h ZCwgKm5ld19wYXlsb2FkOw0KPiAgCWludCBpLCBqLCByZXQ7DQo+IA0KPiAtCWZvcl9lYWNoX29s ZF9tc3RfbWdyX2luX3N0YXRlKHN0YXRlLCBtZ3IsIG9sZF9tc3Rfc3RhdGUsIGkpIHsNCj4gKwlm b3JfZWFjaF9vbGRuZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBvbGRfbXN0X3N0YXRl LA0KPiBuZXdfbXN0X3N0YXRlLCBpKSB7DQo+ICAJCWZvciAoaiA9IDA7IGogPCBvbGRfbXN0X3N0 YXRlLT5udW1fY29tbWl0X2RlcHM7IGorKykgew0KPiAgCQkJcmV0ID0gZHJtX2NydGNfY29tbWl0 X3dhaXQob2xkX21zdF9zdGF0ZS0NCj4gPmNvbW1pdF9kZXBzW2pdKTsNCj4gIAkJCWlmIChyZXQg PCAwKQ0KPiAgCQkJCWRybV9lcnIoc3RhdGUtPmRldiwgIkZhaWxlZCB0byB3YWl0IGZvciAlczoN Cj4gJWRcbiIsDQo+ICAJCQkJCW9sZF9tc3Rfc3RhdGUtPmNvbW1pdF9kZXBzW2pdLQ0KPiA+Y3J0 Yy0+bmFtZSwgcmV0KTsNCj4gIAkJfQ0KPiArDQo+ICsJCS8qIE5vdyB0aGF0IHByZXZpb3VzIHN0 YXRlIGlzIGNvbW1pdHRlZCwgaXQncyBzYWZlIHRvIGNvcHkNCj4gb3ZlciB0aGUgc3RhcnQgc2xv dA0KPiArCQkgKiBhc3NpZ25tZW50cw0KPiArCQkgKi8NCj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRy eShvbGRfcGF5bG9hZCwgJm9sZF9tc3Rfc3RhdGUtPnBheWxvYWRzLA0KPiBuZXh0KSB7DQo+ICsJ CQlpZiAob2xkX3BheWxvYWQtPmRlbGV0ZSkNCj4gKwkJCQljb250aW51ZTsNCj4gKw0KPiArCQkJ bmV3X3BheWxvYWQgPQ0KPiBkcm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShuZXdfbXN0 X3N0YXRlLA0KPiArDQo+IG9sZF9wYXlsb2FkLT5wb3J0KTsNCj4gKwkJCW5ld19wYXlsb2FkLT52 Y19zdGFydF9zbG90ID0gb2xkX3BheWxvYWQtDQo+ID52Y19zdGFydF9zbG90Ow0KPiArCQl9DQo+ ICAJfQ0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2F0b21pY193YWl0X2Zvcl9k ZXBlbmRlbmNpZXMpOw0KPiBAQCAtNDY4MiwxMTAgKzQ1MjYsOCBAQCB2b2lkIGRybV9kcF9tc3Rf dXBkYXRlX3Nsb3RzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3Rh dGUsIHVpbnQ4Xw0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X3VwZGF0ZV9zbG90 cyk7DQo+IA0KPiAtLyoqDQo+IC0gKiBkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkoKSAtIEFsbG9j YXRlIGEgdmlydHVhbCBjaGFubmVsDQo+IC0gKiBAbWdyOiBtYW5hZ2VyIGZvciB0aGlzIHBvcnQN Cj4gLSAqIEBwb3J0OiBwb3J0IHRvIGFsbG9jYXRlIGEgdmlydHVhbCBjaGFubmVsIGZvci4NCj4g LSAqIEBwYm46IHBheWxvYWQgYmFuZHdpZHRoIG51bWJlciB0byByZXF1ZXN0DQo+IC0gKiBAc2xv dHM6IHJldHVybmVkIG51bWJlciBvZiBzbG90cyBmb3IgdGhpcyBQQk4uDQo+IC0gKi8NCj4gLWJv b2wgZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n ciAqbWdyLA0KPiAtCQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBi biwgaW50IHNsb3RzKQ0KPiAtew0KPiAtCWludCByZXQ7DQo+IC0NCj4gLQlpZiAoc2xvdHMgPCAw KQ0KPiAtCQlyZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQlwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfcG9ydF92YWxpZGF0ZWQobWdyLCBwb3J0KTsNCj4gLQlpZiAoIXBvcnQpDQo+IC0JCXJl dHVybiBmYWxzZTsNCj4gLQ0KPiAtCWlmIChwb3J0LT52Y3BpLnZjcGkgPiAwKSB7DQo+IC0JCWRy bV9kYmdfa21zKG1nci0+ZGV2LA0KPiAtCQkJICAgICJwYXlsb2FkOiB2Y3BpICVkIGFscmVhZHkg YWxsb2NhdGVkIGZvciBwYm4gJWQgLQ0KPiByZXF1ZXN0ZWQgcGJuICVkXG4iLA0KPiAtCQkJICAg IHBvcnQtPnZjcGkudmNwaSwgcG9ydC0+dmNwaS5wYm4sIHBibik7DQo+IC0JCWlmIChwYm4gPT0g cG9ydC0+dmNwaS5wYm4pIHsNCj4gLQkJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9y dCk7DQo+IC0JCQlyZXR1cm4gdHJ1ZTsNCj4gLQkJfQ0KPiAtCX0NCj4gLQ0KPiAtCXJldCA9IGRy bV9kcF9pbml0X3ZjcGkobWdyLCAmcG9ydC0+dmNwaSwgcGJuLCBzbG90cyk7DQo+IC0JaWYgKHJl dCkgew0KPiAtCQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgImZhaWxlZCB0byBpbml0IHRpbWUgc2xv dHM9JWQNCj4gcmV0PSVkXG4iLA0KPiAtCQkJICAgIERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJu X2RpdiksIHJldCk7DQo+IC0JCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7DQo+ IC0JCWdvdG8gb3V0Ow0KPiAtCX0NCj4gLQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgImluaXRpbmcg dmNwaSBmb3IgcGJuPSVkIHNsb3RzPSVkXG4iLCBwYm4sDQo+IHBvcnQtPnZjcGkubnVtX3Nsb3Rz KTsNCj4gLQ0KPiAtCS8qIEtlZXAgcG9ydCBhbGxvY2F0ZWQgdW50aWwgaXRzIHBheWxvYWQgaGFz IGJlZW4gcmVtb3ZlZCAqLw0KPiAtCWRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKHBvcnQpOw0K PiAtCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7DQo+IC0JcmV0dXJuIHRydWU7 DQo+IC1vdXQ6DQo+IC0JcmV0dXJuIGZhbHNlOw0KPiAtfQ0KPiAtRVhQT1JUX1NZTUJPTChkcm1f ZHBfbXN0X2FsbG9jYXRlX3ZjcGkpOw0KPiAtDQo+IC1pbnQgZHJtX2RwX21zdF9nZXRfdmNwaV9z bG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gc3RydWN0IGRybV9k cF9tc3RfcG9ydCAqcG9ydCkNCj4gLXsNCj4gLQlpbnQgc2xvdHMgPSAwOw0KPiAtDQo+IC0JcG9y dCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKG1nciwgcG9ydCk7DQo+ IC0JaWYgKCFwb3J0KQ0KPiAtCQlyZXR1cm4gc2xvdHM7DQo+IC0NCj4gLQlzbG90cyA9IHBvcnQt PnZjcGkubnVtX3Nsb3RzOw0KPiAtCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7 DQo+IC0JcmV0dXJuIHNsb3RzOw0KPiAtfQ0KPiAtRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2dl dF92Y3BpX3Nsb3RzKTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBkcm1fZHBfbXN0X3Jlc2V0X3ZjcGlf c2xvdHMoKSAtIFJlc2V0IG51bWJlciBvZiBzbG90cyB0byAwIGZvciBWQ1BJDQo+IC0gKiBAbWdy OiBtYW5hZ2VyIGZvciB0aGlzIHBvcnQNCj4gLSAqIEBwb3J0OiB1bnZlcmlmaWVkIHBvaW50ZXIg dG8gYSBwb3J0Lg0KPiAtICoNCj4gLSAqIFRoaXMganVzdCByZXNldHMgdGhlIG51bWJlciBvZiBz bG90cyBmb3IgdGhlIHBvcnRzIFZDUEkgZm9yIGxhdGVyDQo+IHByb2dyYW1taW5nLg0KPiAtICov DQo+IC12b2lkIGRybV9kcF9tc3RfcmVzZXRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3INCj4gKm1nciwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkNCj4gLXsN Cj4gLQkvKg0KPiAtCSAqIEEgcG9ydCB3aXRoIFZDUEkgd2lsbCByZW1haW4gYWxsb2NhdGVkIHVu dGlsIGl0cyBWQ1BJIGlzDQo+IC0JICogcmVsZWFzZWQsIG5vIHZlcmlmaWVkIHJlZiBuZWVkZWQN Cj4gLQkgKi8NCj4gLQ0KPiAtCXBvcnQtPnZjcGkubnVtX3Nsb3RzID0gMDsNCj4gLX0NCj4gLUVY UE9SVF9TWU1CT0woZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKTsNCj4gLQ0KPiAtLyoqDQo+ IC0gKiBkcm1fZHBfbXN0X2RlYWxsb2NhdGVfdmNwaSgpIC0gZGVhbGxvY2F0ZSBhIFZDUEkNCj4g LSAqIEBtZ3I6IG1hbmFnZXIgZm9yIHRoaXMgcG9ydA0KPiAtICogQHBvcnQ6IHBvcnQgdG8gZGVh bGxvY2F0ZSB2Y3BpIGZvcg0KPiAtICoNCj4gLSAqIFRoaXMgY2FuIGJlIGNhbGxlZCB1bmNvbmRp dGlvbmFsbHksIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcg0KPiAtICogZHJtX2RwX21zdF9hbGxvY2F0 ZV92Y3BpKCkgc3VjY2VlZGVkIG9yIG5vdC4NCj4gLSAqLw0KPiAtdm9pZCBkcm1fZHBfbXN0X2Rl YWxsb2NhdGVfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJ CQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQ0KPiAtew0KPiAtCWlmICghcG9ydC0+dmNw aS52Y3BpKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlkcm1fZHBfbXN0X3B1dF9wYXlsb2FkX2lk KG1nciwgcG9ydC0+dmNwaS52Y3BpKTsNCj4gLQlwb3J0LT52Y3BpLm51bV9zbG90cyA9IDA7DQo+ IC0JcG9ydC0+dmNwaS5wYm4gPSAwOw0KPiAtCXBvcnQtPnZjcGkuYWxpZ25lZF9wYm4gPSAwOw0K PiAtCXBvcnQtPnZjcGkudmNwaSA9IDA7DQo+IC0JZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2Mo cG9ydCk7DQo+IC19DQo+IC1FWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3Bp KTsNCj4gLQ0KPiAgc3RhdGljIGludCBkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X21ncg0KPiAqbWdyLA0KPiAtCQkJCSAgICAgaW50IGlkLCBzdHJ1 Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQpDQo+ICsJCQkJICAgICBpbnQgaWQsIHU4IHN0YXJ0 X3Nsb3QsIHU4IG51bV9zbG90cykNCj4gIHsNCj4gIAl1OCBwYXlsb2FkX2FsbG9jWzNdLCBzdGF0 dXM7DQo+ICAJaW50IHJldDsNCj4gQEAgLTQ3OTUsOCArNDUzNyw4IEBAIHN0YXRpYyBpbnQgZHJt X2RwX2RwY2Rfd3JpdGVfcGF5bG9hZChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwNCj4gIAkJCSAgIERQX1BBWUxPQURfVEFCTEVfVVBEQVRFRCk7DQo+IA0KPiAgCXBheWxv YWRfYWxsb2NbMF0gPSBpZDsNCj4gLQlwYXlsb2FkX2FsbG9jWzFdID0gcGF5bG9hZC0+c3RhcnRf c2xvdDsNCj4gLQlwYXlsb2FkX2FsbG9jWzJdID0gcGF5bG9hZC0+bnVtX3Nsb3RzOw0KPiArCXBh eWxvYWRfYWxsb2NbMV0gPSBzdGFydF9zbG90Ow0KPiArCXBheWxvYWRfYWxsb2NbMl0gPSBudW1f c2xvdHM7DQo+IA0KPiAgCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlKG1nci0+YXV4LCBEUF9QQVlM T0FEX0FMTE9DQVRFX1NFVCwNCj4gcGF5bG9hZF9hbGxvYywgMyk7DQo+ICAJaWYgKHJldCAhPSAz KSB7DQo+IEBAIC01MDExLDggKzQ3NTMsOSBAQCBzdGF0aWMgdm9pZCBmZXRjaF9tb25pdG9yX25h bWUoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICB2b2lkIGRybV9k cF9tc3RfZHVtcF90b3BvbG9neShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sDQo+ICAJCQkgICAgICBzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncikNCj4gIHsNCj4gLQlpbnQgaTsNCj4gLQlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Ow0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICpzdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAq cGF5bG9hZDsNCj4gKwlpbnQgaSwgcmV0Ow0KPiANCj4gIAltdXRleF9sb2NrKCZtZ3ItPmxvY2sp Ow0KPiAgCWlmIChtZ3ItPm1zdF9wcmltYXJ5KQ0KPiBAQCAtNTAyMSwzNiArNDc2NCwzNSBAQCB2 b2lkIGRybV9kcF9tc3RfZHVtcF90b3BvbG9neShzdHJ1Y3QNCj4gc2VxX2ZpbGUgKm0sDQo+ICAJ LyogZHVtcCBWQ1BJcyAqLw0KPiAgCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsNCj4gDQo+IC0J bXV0ZXhfbG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiAtCXNlcV9wcmludGYobSwgIlxuKioq IFZDUEkgSW5mbyAqKipcbiIpOw0KPiAtCXNlcV9wcmludGYobSwgInBheWxvYWRfbWFzazogJWx4 LCB2Y3BpX21hc2s6ICVseCwgbWF4X3BheWxvYWRzOg0KPiAlZFxuIiwgbWdyLT5wYXlsb2FkX21h c2ssIG1nci0+dmNwaV9tYXNrLCBtZ3ItPm1heF9wYXlsb2Fkcyk7DQo+ICsJcmV0ID0gZHJtX21v ZGVzZXRfbG9ja19zaW5nbGVfaW50ZXJydXB0aWJsZSgmbWdyLT5iYXNlLmxvY2spOw0KPiArCWlm IChyZXQgPCAwKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlzdGF0ZSA9IHRvX2RybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUobWdyLT5iYXNlLnN0YXRlKTsNCj4gKwlzZXFfcHJpbnRmKG0sICJcbioq KiBBdG9taWMgc3RhdGUgaW5mbyAqKipcbiIpOw0KPiArCXNlcV9wcmludGYobSwgInBheWxvYWRf bWFzazogJXgsIG1heF9wYXlsb2FkczogJWQsIHN0YXJ0X3Nsb3Q6ICV1LA0KPiBwYm5fZGl2OiAl ZFxuIiwNCj4gKwkJICAgc3RhdGUtPnBheWxvYWRfbWFzaywgbWdyLT5tYXhfcGF5bG9hZHMsIHN0 YXRlLQ0KPiA+c3RhcnRfc2xvdCwgc3RhdGUtPnBibl9kaXYpOw0KPiANCj4gLQlzZXFfcHJpbnRm KG0sICJcbnwgICBpZHggICB8ICBwb3J0ICMgfCAgdmNwX2lkIHwgIyBzbG90cyB8ICAgICBzaW5r IG5hbWUNCj4gfFxuIik7DQo+ICsJc2VxX3ByaW50ZihtLCAiXG58IGlkeCB8IHBvcnQgfCB2Y3Bp IHwgc2xvdHMgfCBwYm4gfCBkc2MgfCAgICAgc2luayBuYW1lDQo+IHxcbiIpOw0KPiAgCWZvciAo aSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0JCWlmIChtZ3ItPnByb3Bv c2VkX3ZjcGlzW2ldKSB7DQo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkocGF5bG9hZCwgJnN0YXRl LT5wYXlsb2FkcywgbmV4dCkgew0KPiAgCQkJY2hhciBuYW1lWzE0XTsNCj4gDQo+IC0JCQlwb3J0 ID0gY29udGFpbmVyX29mKG1nci0+cHJvcG9zZWRfdmNwaXNbaV0sIHN0cnVjdA0KPiBkcm1fZHBf bXN0X3BvcnQsIHZjcGkpOw0KPiAtCQkJZmV0Y2hfbW9uaXRvcl9uYW1lKG1nciwgcG9ydCwgbmFt ZSwNCj4gc2l6ZW9mKG5hbWUpKTsNCj4gLQkJCXNlcV9wcmludGYobSwgIiUxMGQlMTBkJTEwZCUx MGQlMjBzXG4iLA0KPiArCQkJaWYgKHBheWxvYWQtPnZjcGkgIT0gaSB8fCBwYXlsb2FkLT5kZWxl dGUpDQo+ICsJCQkJY29udGludWU7DQo+ICsNCj4gKwkJCWZldGNoX21vbml0b3JfbmFtZShtZ3Is IHBheWxvYWQtPnBvcnQsIG5hbWUsDQo+IHNpemVvZihuYW1lKSk7DQo+ICsJCQlzZXFfcHJpbnRm KG0sICIgJTVkICU2ZCAlNmQgJTAyZCAtICUwMmQgJTVkICU1cw0KPiAlMTlzXG4iLA0KPiAgCQkJ CSAgIGksDQo+IC0JCQkJICAgcG9ydC0+cG9ydF9udW0sDQo+IC0JCQkJICAgcG9ydC0+dmNwaS52 Y3BpLA0KPiAtCQkJCSAgIHBvcnQtPnZjcGkubnVtX3Nsb3RzLA0KPiArCQkJCSAgIHBheWxvYWQt PnBvcnQtPnBvcnRfbnVtLA0KPiArCQkJCSAgIHBheWxvYWQtPnZjcGksDQo+ICsJCQkJICAgcGF5 bG9hZC0+dmNfc3RhcnRfc2xvdCwNCj4gKwkJCQkgICBwYXlsb2FkLT52Y19zdGFydF9zbG90ICsg cGF5bG9hZC0NCj4gPnRpbWVfc2xvdHMgLSAxLA0KPiArCQkJCSAgIHBheWxvYWQtPnBibiwNCj4g KwkJCQkgICBwYXlsb2FkLT5kc2NfZW5hYmxlZCA/ICJZIiA6ICJOIiwNCj4gIAkJCQkgICAoKm5h bWUgIT0gMCkgPyBuYW1lIDogIlVua25vd24iKTsNCj4gLQkJfSBlbHNlDQo+IC0JCQlzZXFfcHJp bnRmKG0sICIlNmQgLSBVbnVzZWRcbiIsIGkpOw0KPiAtCX0NCj4gLQlzZXFfcHJpbnRmKG0sICJc bioqKiBQYXlsb2FkIEluZm8gKioqXG4iKTsNCj4gLQlzZXFfcHJpbnRmKG0sICJ8ICAgaWR4ICAg fCAgc3RhdGUgIHwgIHN0YXJ0IHNsb3QgIHwgIyBzbG90cyB8XG4iKTsNCj4gLQlmb3IgKGkgPSAw OyBpIDwgbWdyLT5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAtCQlzZXFfcHJpbnRmKG0sICIlMTBk JTEwZCUxNWQlMTBkXG4iLA0KPiAtCQkJICAgaSwNCj4gLQkJCSAgIG1nci0+cGF5bG9hZHNbaV0u cGF5bG9hZF9zdGF0ZSwNCj4gLQkJCSAgIG1nci0+cGF5bG9hZHNbaV0uc3RhcnRfc2xvdCwNCj4g LQkJCSAgIG1nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzKTsNCj4gKwkJfQ0KPiAgCX0NCj4gLQlt dXRleF91bmxvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gDQo+ICAJc2VxX3ByaW50ZihtLCAi XG4qKiogRFBDRCBJbmZvICoqKlxuIik7DQo+ICAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsNCj4g QEAgLTUwOTcsNyArNDgzOSw3IEBAIHZvaWQgZHJtX2RwX21zdF9kdW1wX3RvcG9sb2d5KHN0cnVj dCBzZXFfZmlsZQ0KPiAqbSwNCj4gDQo+ICBvdXQ6DQo+ICAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxv Y2spOw0KPiAtDQo+ICsJZHJtX21vZGVzZXRfdW5sb2NrKCZtZ3ItPmJhc2UubG9jayk7DQo+ICB9 DQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZHVtcF90b3BvbG9neSk7DQo+IA0KPiBAQCAt NTQxOCw5ICs1MTYwLDIyIEBADQo+IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrX3BheWxvYWRfYWxs b2NfbGltaXRzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyDQo+ICAJCQkJ ICAgICAgIG1nciwgbXN0X3N0YXRlLCBtZ3ItPm1heF9wYXlsb2Fkcyk7DQo+ICAJCQlyZXR1cm4g LUVJTlZBTDsNCj4gIAkJfQ0KPiArDQo+ICsJCS8qIEFzc2lnbiBhIFZDUEkgKi8NCj4gKwkJaWYg KCFwYXlsb2FkLT52Y3BpKSB7DQo+ICsJCQlwYXlsb2FkLT52Y3BpID0gZmZ6KG1zdF9zdGF0ZS0+ cGF5bG9hZF9tYXNrKSArIDE7DQo+ICsJCQlkcm1fZGJnX2F0b21pYyhtZ3ItPmRldiwgIltNU1Qg UE9SVDolcF0NCj4gYXNzaWduZWQgVkNQSSAjJWRcbiIsDQo+ICsJCQkJICAgICAgIHBheWxvYWQt PnBvcnQsIHBheWxvYWQtPnZjcGkpOw0KPiArCQkJbXN0X3N0YXRlLT5wYXlsb2FkX21hc2sgfD0g QklUKHBheWxvYWQtPnZjcGkgLSAxKTsNCj4gKwkJfQ0KPiAgCX0NCj4gLQlkcm1fZGJnX2F0b21p YyhtZ3ItPmRldiwgIltNU1QgTUdSOiVwXSBtc3Qgc3RhdGUgJXAgVFUNCj4gYXZhaWw9JWQgdXNl ZD0lZFxuIiwNCj4gLQkJICAgICAgIG1nciwgbXN0X3N0YXRlLCBhdmFpbF9zbG90cywgbXN0X3N0 YXRlLT50b3RhbF9hdmFpbF9zbG90cyAtDQo+IGF2YWlsX3Nsb3RzKTsNCj4gKw0KPiArCWlmICgh cGF5bG9hZF9jb3VudCkNCj4gKwkJbXN0X3N0YXRlLT5wYm5fZGl2ID0gMDsNCj4gKw0KPiArCWRy bV9kYmdfYXRvbWljKG1nci0+ZGV2LCAiW01TVCBNR1I6JXBdIG1zdCBzdGF0ZSAlcCBUVQ0KPiBw Ym5fZGl2PSVkIGF2YWlsPSVkIHVzZWQ9JWRcbiIsDQo+ICsJCSAgICAgICBtZ3IsIG1zdF9zdGF0 ZSwgbXN0X3N0YXRlLT5wYm5fZGl2LCBhdmFpbF9zbG90cywNCj4gKwkJICAgICAgIG1zdF9zdGF0 ZS0+dG90YWxfYXZhaWxfc2xvdHMgLSBhdmFpbF9zbG90cyk7DQo+IA0KPiAgCXJldHVybiAwOw0K PiAgfQ0KPiBAQCAtNTQ5MSw3ICs1MjQ2LDYgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0 X2FkZF9hZmZlY3RlZF9kc2NfY3J0Y3MpOw0KPiAgICogQHN0YXRlOiBQb2ludGVyIHRvIHRoZSBu ZXcgZHJtX2F0b21pY19zdGF0ZQ0KPiAgICogQHBvcnQ6IFBvaW50ZXIgdG8gdGhlIGFmZmVjdGVk IE1TVCBQb3J0DQo+ICAgKiBAcGJuOiBOZXdseSByZWNhbGN1bGF0ZWQgYncgcmVxdWlyZWQgZm9y IGxpbmsgd2l0aCBEU0MgZW5hYmxlZA0KPiAtICogQHBibl9kaXY6IERpdmlkZXIgdG8gY2FsY3Vs YXRlIGNvcnJlY3QgbnVtYmVyIG9mIHBibiBwZXIgc2xvdA0KPiAgICogQGVuYWJsZTogQm9vbGVh biBmbGFnIHRvIGVuYWJsZSBvciBkaXNhYmxlIERTQyBvbiB0aGUgcG9ydA0KPiAgICoNCj4gICAq IFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBEU0Mgb24gdGhlIGdpdmVuIFBvcnQNCj4gQEAgLTU1MDIs OCArNTI1Niw3IEBADQo+IEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9hZGRfYWZmZWN0ZWRfZHNj X2NydGNzKTsNCj4gICAqLw0KPiAgaW50IGRybV9kcF9tc3RfYXRvbWljX2VuYWJsZV9kc2Moc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAgCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0LA0KPiAtCQkJCSBpbnQgcGJuLCBpbnQgcGJuX2RpdiwNCj4gLQkJCQkgYm9vbCBl bmFibGUpDQo+ICsJCQkJIGludCBwYm4sIGJvb2wgZW5hYmxlKQ0KPiAgew0KPiAgCXN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQ7DQo+IEBAIC01NTI5LDcgKzUyODIsNyBAQCBpbnQg ZHJtX2RwX21zdF9hdG9taWNfZW5hYmxlX2RzYyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJfQ0KPiANCj4gIAlpZiAoZW5hYmxlKSB7DQo+IC0JCXRpbWVfc2xvdHMgPSBk cm1fZHBfYXRvbWljX2ZpbmRfdGltZV9zbG90cyhzdGF0ZSwgcG9ydC0NCj4gPm1nciwgcG9ydCwg cGJuLCBwYm5fZGl2KTsNCj4gKwkJdGltZV9zbG90cyA9IGRybV9kcF9hdG9taWNfZmluZF90aW1l X3Nsb3RzKHN0YXRlLCBwb3J0LQ0KPiA+bWdyLCBwb3J0LCBwYm4pOw0KPiAgCQlkcm1fZGJnX2F0 b21pYyhzdGF0ZS0+ZGV2LA0KPiAgCQkJICAgICAgICJbTVNUIFBPUlQ6JXBdIEVuYWJsaW5nIERT QyBmbGFnLCByZWFsbG9jYXRpbmcNCj4gJWQgdGltZSBzbG90cyBvbiB0aGUgcG9ydFxuIiwNCj4g IAkJCSAgICAgICBwb3J0LCB0aW1lX3Nsb3RzKTsNCj4gQEAgLTU1NDIsNiArNTI5NSw3IEBAIGlu dCBkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0cnVjdA0KPiBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwNCj4gIAlyZXR1cm4gdGltZV9zbG90czsNCj4gIH0NCj4gIEVYUE9SVF9TWU1CT0wo ZHJtX2RwX21zdF9hdG9taWNfZW5hYmxlX2RzYyk7DQo+ICsNCj4gIC8qKg0KPiAgICogZHJtX2Rw X21zdF9hdG9taWNfY2hlY2sgLSBDaGVjayB0aGF0IHRoZSBuZXcgc3RhdGUgb2YgYW4gTVNUDQo+ IHRvcG9sb2d5IGluIGFuDQo+ICAgKiBhdG9taWMgdXBkYXRlIGlzIHZhbGlkDQo+IEBAIC01NTk5 LDcgKzUzNTMsNiBAQA0KPiBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVf ZnVuY3MpOw0KPiANCj4gIC8qKg0KPiAgICogZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0 YXRlOiBnZXQgTVNUIHRvcG9sb2d5IHN0YXRlDQo+IC0gKg0KPiAgICogQHN0YXRlOiBnbG9iYWwg YXRvbWljIHN0YXRlDQo+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciwgYWxzbyB0aGUg cHJpdmF0ZSBvYmplY3QgaW4gdGhpcyBjYXNlDQo+ICAgKg0KPiBAQCAtNTYxOSw2ICs1MzcyLDMx IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlDQo+ICpkcm1fYXRvbWljX2dldF9t c3RfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9hDQo+ICB9DQo+ICBFWFBPUlRfU1lNQk9MKGRy bV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZSk7DQo+IA0KPiArLyoqDQo+ICsgKiBkcm1f YXRvbWljX2dldF9uZXdfbXN0X3RvcG9sb2d5X3N0YXRlOiBnZXQgbmV3IE1TVCB0b3BvbG9neSBz dGF0ZQ0KPiBpbiBhdG9taWMgc3RhdGUsIGlmIGFueQ0KPiArICogQHN0YXRlOiBnbG9iYWwgYXRv bWljIHN0YXRlDQo+ICsgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciwgYWxzbyB0aGUgcHJp dmF0ZSBvYmplY3QgaW4gdGhpcyBjYXNlDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiB3cmFw cyBkcm1fYXRvbWljX2dldF9wcml2X29ial9zdGF0ZSgpIHBhc3NpbmcgaW4gdGhlIE1TVA0KPiBh dG9taWMNCj4gKyAqIHN0YXRlIHZ0YWJsZSBzbyB0aGF0IHRoZSBwcml2YXRlIG9iamVjdCBzdGF0 ZSByZXR1cm5lZCBpcyB0aGF0IG9mIGEgTVNUDQo+ICsgKiB0b3BvbG9neSBvYmplY3QuDQo+ICsg Kg0KPiArICogUmV0dXJuczoNCj4gKyAqDQo+ICsgKiBUaGUgTVNUIHRvcG9sb2d5IHN0YXRlLCBv ciBOVUxMIGlmIHRoZXJlJ3Mgbm8gdG9wb2xvZ3kgc3RhdGUgZm9yIHRoaXMgTVNUDQo+IG1ncg0K PiArICogaW4gdGhlIGdsb2JhbCBhdG9taWMgc3RhdGUNCj4gKyAqLw0KPiArc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUgKg0KPiArZHJtX2F0b21pY19nZXRfbmV3X21zdF90b3BvbG9n eV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQ0KPiAqc3RhdGUsDQo+ICsJCQkJICAgICAg c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpDQo+ICt7DQo+ICsJc3RydWN0IGRy bV9wcml2YXRlX3N0YXRlICpwcml2X3N0YXRlID0NCj4gKwkJZHJtX2F0b21pY19nZXRfbmV3X3By aXZhdGVfb2JqX3N0YXRlKHN0YXRlLCAmbWdyLQ0KPiA+YmFzZSk7DQo+ICsNCj4gKwlyZXR1cm4g cHJpdl9zdGF0ZSA/IHRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShwcml2X3N0YXRlKSA6IE5VTEw7 DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lf c3RhdGUpOw0KPiArDQo+ICAvKioNCj4gICAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2luaXQg LSBpbml0aWFsaXNlIGEgdG9wb2xvZ3kgbWFuYWdlcg0KPiAgICogQG1ncjogbWFuYWdlciBzdHJ1 Y3QgdG8gaW5pdGlhbGlzZQ0KPiBAQCAtNTYyNiw4ICs1NDA0LDYgQEANCj4gRVhQT1JUX1NZTUJP TChkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUpOw0KPiAgICogQGF1eDogRFAgaGVs cGVyIGF1eCBjaGFubmVsIHRvIHRhbGsgdG8gdGhpcyBkZXZpY2UNCj4gICAqIEBtYXhfZHBjZF90 cmFuc2FjdGlvbl9ieXRlczogaHcgc3BlY2lmaWMgRFBDRCB0cmFuc2FjdGlvbiBsaW1pdA0KPiAg ICogQG1heF9wYXlsb2FkczogbWF4aW11bSBudW1iZXIgb2YgcGF5bG9hZHMgdGhpcyBHUFUgY2Fu IHNvdXJjZQ0KPiAtICogQG1heF9sYW5lX2NvdW50OiBtYXhpbXVtIG51bWJlciBvZiBsYW5lcyB0 aGlzIEdQVSBzdXBwb3J0cw0KPiAtICogQG1heF9saW5rX3JhdGU6IG1heGltdW0gbGluayByYXRl IHBlciBsYW5lIHRoaXMgR1BVIHN1cHBvcnRzIGluIGtIeg0KPiAgICogQGNvbm5fYmFzZV9pZDog dGhlIGNvbm5lY3RvciBvYmplY3QgSUQgdGhlIE1TVCBkZXZpY2UgaXMgY29ubmVjdGVkIHRvLg0K PiAgICoNCj4gICAqIFJldHVybiAwIGZvciBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2Rl IG9uIGZhaWx1cmUNCj4gQEAgLTU2MzUsMTQgKzU0MTEsMTIgQEANCj4gRVhQT1JUX1NZTUJPTChk cm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUpOw0KPiAgaW50IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyX2luaXQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3IsDQo+ ICAJCQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZHBfYXV4DQo+ICphdXgs DQo+ICAJCQkJIGludCBtYXhfZHBjZF90cmFuc2FjdGlvbl9ieXRlcywgaW50DQo+IG1heF9wYXls b2FkcywNCj4gLQkJCQkgaW50IG1heF9sYW5lX2NvdW50LCBpbnQgbWF4X2xpbmtfcmF0ZSwNCj4g IAkJCQkgaW50IGNvbm5fYmFzZV9pZCkNCj4gIHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiANCj4gIAltdXRleF9pbml0KCZtZ3ItPmxvY2spOw0K PiAgCW11dGV4X2luaXQoJm1nci0+cWxvY2spOw0KPiAtCW11dGV4X2luaXQoJm1nci0+cGF5bG9h ZF9sb2NrKTsNCj4gIAltdXRleF9pbml0KCZtZ3ItPmRlbGF5ZWRfZGVzdHJveV9sb2NrKTsNCj4g IAltdXRleF9pbml0KCZtZ3ItPnVwX3JlcV9sb2NrKTsNCj4gIAltdXRleF9pbml0KCZtZ3ItPnBy b2JlX2xvY2spOw0KPiBAQCAtNTY3MiwxOSArNTQ0Niw3IEBAIGludCBkcm1fZHBfbXN0X3RvcG9s b2d5X21ncl9pbml0KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAg CW1nci0+YXV4ID0gYXV4Ow0KPiAgCW1nci0+bWF4X2RwY2RfdHJhbnNhY3Rpb25fYnl0ZXMgPSBt YXhfZHBjZF90cmFuc2FjdGlvbl9ieXRlczsNCj4gIAltZ3ItPm1heF9wYXlsb2FkcyA9IG1heF9w YXlsb2FkczsNCj4gLQltZ3ItPm1heF9sYW5lX2NvdW50ID0gbWF4X2xhbmVfY291bnQ7DQo+IC0J bWdyLT5tYXhfbGlua19yYXRlID0gbWF4X2xpbmtfcmF0ZTsNCj4gIAltZ3ItPmNvbm5fYmFzZV9p ZCA9IGNvbm5fYmFzZV9pZDsNCj4gLQlpZiAobWF4X3BheWxvYWRzICsgMSA+IHNpemVvZihtZ3It PnBheWxvYWRfbWFzaykgKiA4IHx8DQo+IC0JICAgIG1heF9wYXlsb2FkcyArIDEgPiBzaXplb2Yo bWdyLT52Y3BpX21hc2spICogOCkNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JbWdyLT5wYXls b2FkcyA9IGtjYWxsb2MobWF4X3BheWxvYWRzLCBzaXplb2Yoc3RydWN0DQo+IGRybV9kcF9wYXls b2FkKSwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKCFtZ3ItPnBheWxvYWRzKQ0KPiAtCQlyZXR1cm4g LUVOT01FTTsNCj4gLQltZ3ItPnByb3Bvc2VkX3ZjcGlzID0ga2NhbGxvYyhtYXhfcGF5bG9hZHMs IHNpemVvZihzdHJ1Y3QNCj4gZHJtX2RwX3ZjcGkgKiksIEdGUF9LRVJORUwpOw0KPiAtCWlmICgh bWdyLT5wcm9wb3NlZF92Y3BpcykNCj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0Jc2V0X2JpdCgw LCAmbWdyLT5wYXlsb2FkX21hc2spOw0KPiANCj4gIAltc3Rfc3RhdGUgPSBremFsbG9jKHNpemVv ZigqbXN0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7DQo+ICAJaWYgKG1zdF9zdGF0ZSA9PSBOVUxMKQ0K PiBAQCAtNTcxNywxOSArNTQ3OSwxMiBAQCB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2Rl c3Ryb3koc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpDQo+ICAJCWRlc3Ry b3lfd29ya3F1ZXVlKG1nci0+ZGVsYXllZF9kZXN0cm95X3dxKTsNCj4gIAkJbWdyLT5kZWxheWVk X2Rlc3Ryb3lfd3EgPSBOVUxMOw0KPiAgCX0NCj4gLQltdXRleF9sb2NrKCZtZ3ItPnBheWxvYWRf bG9jayk7DQo+IC0Ja2ZyZWUobWdyLT5wYXlsb2Fkcyk7DQo+IC0JbWdyLT5wYXlsb2FkcyA9IE5V TEw7DQo+IC0Ja2ZyZWUobWdyLT5wcm9wb3NlZF92Y3Bpcyk7DQo+IC0JbWdyLT5wcm9wb3NlZF92 Y3BpcyA9IE5VTEw7DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+ICAJ bWdyLT5kZXYgPSBOVUxMOw0KPiAgCW1nci0+YXV4ID0gTlVMTDsNCj4gIAlkcm1fYXRvbWljX3By aXZhdGVfb2JqX2ZpbmkoJm1nci0+YmFzZSk7DQo+ICAJbWdyLT5mdW5jcyA9IE5VTEw7DQo+IA0K PiAgCW11dGV4X2Rlc3Ryb3koJm1nci0+ZGVsYXllZF9kZXN0cm95X2xvY2spOw0KPiAtCW11dGV4 X2Rlc3Ryb3koJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gIAltdXRleF9kZXN0cm95KCZtZ3ItPnFs b2NrKTsNCj4gIAltdXRleF9kZXN0cm95KCZtZ3ItPmxvY2spOw0KPiAgCW11dGV4X2Rlc3Ryb3ko Jm1nci0+dXBfcmVxX2xvY2spOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kcF9tc3QuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZHBfbXN0LmMNCj4gaW5kZXggNGIwYWYzYzI2MTc2Li5lYzM4OWUzY2FmMjQgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMNCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9tc3QuYw0KPiBAQCAt NTIsNiArNTIsNyBAQCBzdGF0aWMgaW50IGludGVsX2RwX21zdF9jb21wdXRlX2xpbmtfY29uZmln KHN0cnVjdA0KPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLA0KPiAgCXN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSA9IGNydGNfc3RhdGUtPnVhcGkuc3RhdGU7DQo+ICAJc3RydWN0IGludGVs X2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPSBlbmNfdG9fbXN0KGVuY29kZXIpOw0KPiAgCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmaW50ZWxfbXN0LT5wcmltYXJ5LT5kcDsNCj4gKwlz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCXN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9DQo+ICAJCXRvX2ludGVsX2Nvbm5lY3Rvcihjb25u X3N0YXRlLT5jb25uZWN0b3IpOw0KPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g dG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsNCj4gQEAgLTYwLDIyICs2MSwyOCBAQCBzdGF0 aWMgaW50IGludGVsX2RwX21zdF9jb21wdXRlX2xpbmtfY29uZmlnKHN0cnVjdA0KPiBpbnRlbF9l bmNvZGVyICplbmNvZGVyLA0KPiAgCWJvb2wgY29uc3RhbnRfbiA9IGRybV9kcF9oYXNfcXVpcmso JmludGVsX2RwLT5kZXNjLA0KPiBEUF9EUENEX1FVSVJLX0NPTlNUQU5UX04pOw0KPiAgCWludCBi cHAsIHNsb3RzID0gLUVJTlZBTDsNCj4gDQo+ICsJbXN0X3N0YXRlID0gZHJtX2F0b21pY19nZXRf bXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCAmaW50ZWxfZHAtDQo+ID5tc3RfbWdyKTsNCj4gKwlp ZiAoSVNfRVJSKG1zdF9zdGF0ZSkpDQo+ICsJCXJldHVybiBQVFJfRVJSKG1zdF9zdGF0ZSk7DQo+ ICsNCj4gIAljcnRjX3N0YXRlLT5sYW5lX2NvdW50ID0gbGltaXRzLT5tYXhfbGFuZV9jb3VudDsN Cj4gIAljcnRjX3N0YXRlLT5wb3J0X2Nsb2NrID0gbGltaXRzLT5tYXhfcmF0ZTsNCj4gDQo+ICsJ Ly8gVE9ETzogSGFuZGxlIHBibl9kaXYgY2hhbmdlcyBieSBhZGRpbmcgYSBuZXcgTVNUIGhlbHBl cg0KPiArCWlmICghbXN0X3N0YXRlLT5wYm5fZGl2KSB7DQo+ICsJCW1zdF9zdGF0ZS0+cGJuX2Rp diA9DQo+IGRybV9kcF9nZXRfdmNfcGF5bG9hZF9idygmaW50ZWxfZHAtPm1zdF9tZ3IsDQo+ICsJ CQkJCQkJICAgICAgbGltaXRzLT5tYXhfcmF0ZSwNCj4gKwkJCQkJCQkgICAgICBsaW1pdHMtDQo+ ID5tYXhfbGFuZV9jb3VudCk7DQo+ICsJfQ0KPiArDQo+ICAJZm9yIChicHAgPSBsaW1pdHMtPm1h eF9icHA7IGJwcCA+PSBsaW1pdHMtPm1pbl9icHA7IGJwcCAtPSAyICogMykgew0KPiAgCQljcnRj X3N0YXRlLT5waXBlX2JwcCA9IGJwcDsNCj4gDQo+ICAJCWNydGNfc3RhdGUtPnBibiA9DQo+IGRy bV9kcF9jYWxjX3Bibl9tb2RlKGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2ssDQo+ICAJCQkJCQkg ICAgICAgY3J0Y19zdGF0ZS0+cGlwZV9icHAsDQo+ICAJCQkJCQkgICAgICAgZmFsc2UpOw0KPiAt DQo+ICAJCXNsb3RzID0gZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsICZpbnRl bF9kcC0NCj4gPm1zdF9tZ3IsDQo+IC0JCQkJCQkgICAgICBjb25uZWN0b3ItPnBvcnQsDQo+IC0J CQkJCQkgICAgICBjcnRjX3N0YXRlLT5wYm4sDQo+IC0NCj4gZHJtX2RwX2dldF92Y19wYXlsb2Fk X2J3KCZpbnRlbF9kcC0+bXN0X21nciwNCj4gLQ0KPiBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLA0K PiAtDQo+IGNydGNfc3RhdGUtPmxhbmVfY291bnQpKTsNCj4gKwkJCQkJCSAgICAgIGNvbm5lY3Rv ci0+cG9ydCwNCj4gY3J0Y19zdGF0ZS0+cGJuKTsNCj4gIAkJaWYgKHNsb3RzID09IC1FREVBRExL KQ0KPiAgCQkJcmV0dXJuIHNsb3RzOw0KPiAgCQlpZiAoc2xvdHMgPj0gMCkNCj4gQEAgLTM2MCwy MSArMzY3LDE3IEBAIHN0YXRpYyB2b2lkIGludGVsX21zdF9kaXNhYmxlX2RwKHN0cnVjdA0KPiBp bnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSAmZGlnX3BvcnQtPmRwOw0KPiAgCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9 DQo+ICAJCXRvX2ludGVsX2Nvbm5lY3RvcihvbGRfY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsNCj4g KwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4gKwkJZHJt X2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKCZzdGF0ZS0+YmFzZSwNCj4gJmludGVsX2Rw LT5tc3RfbWdyKTsNCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUo Y29ubmVjdG9yLT5iYXNlLmRldik7DQo+IC0JaW50IHN0YXJ0X3Nsb3QgPSBpbnRlbF9kcF9pc191 aGJyKG9sZF9jcnRjX3N0YXRlKSA/IDAgOiAxOw0KPiAtCWludCByZXQ7DQo+IA0KPiAgCWRybV9k Ymdfa21zKCZpOTE1LT5kcm0sICJhY3RpdmUgbGlua3MgJWRcbiIsDQo+ICAJCSAgICBpbnRlbF9k cC0+YWN0aXZlX21zdF9saW5rcyk7DQo+IA0KPiAgCWludGVsX2hkY3BfZGlzYWJsZShpbnRlbF9t c3QtPmNvbm5lY3Rvcik7DQo+IA0KPiAtCWRybV9kcF9tc3RfcmVzZXRfdmNwaV9zbG90cygmaW50 ZWxfZHAtPm1zdF9tZ3IsIGNvbm5lY3Rvci0NCj4gPnBvcnQpOw0KPiAtDQo+IC0JcmV0ID0gZHJt X2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKCZpbnRlbF9kcC0+bXN0X21nciwNCj4gc3RhcnRfc2xv dCk7DQo+IC0JaWYgKHJldCkgew0KPiAtCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiZmFpbGVk IHRvIHVwZGF0ZSBwYXlsb2FkICVkXG4iLA0KPiByZXQpOw0KPiAtCX0NCj4gKwlkcm1fZHBfcmVt b3ZlX3BheWxvYWQoJmludGVsX2RwLT5tc3RfbWdyLCBtc3Rfc3RhdGUsDQo+ICsJCQkgICAgICBk cm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUsDQo+IGNvbm5lY3Rvci0+ cG9ydCkpOw0KPiANCj4gIAlpbnRlbF9hdWRpb19jb2RlY19kaXNhYmxlKGVuY29kZXIsIG9sZF9j cnRjX3N0YXRlLA0KPiBvbGRfY29ubl9zdGF0ZSk7DQo+ICB9DQo+IEBAIC00MDIsOCArNDA1LDYg QEAgc3RhdGljIHZvaWQgaW50ZWxfbXN0X3Bvc3RfZGlzYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxf YXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gDQo+ICAJaW50ZWxfZGlzYWJsZV90cmFuc2NvZGVyKG9s ZF9jcnRjX3N0YXRlKTsNCj4gDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQyKCZpbnRl bF9kcC0+bXN0X21ncik7DQo+IC0NCj4gIAljbGVhcl9hY3Rfc2VudChlbmNvZGVyLCBvbGRfY3J0 Y19zdGF0ZSk7DQo+IA0KPiAgCWludGVsX2RlX3JtdyhkZXZfcHJpdiwgVFJBTlNfRERJX0ZVTkNf Q1RMKG9sZF9jcnRjX3N0YXRlLQ0KPiA+Y3B1X3RyYW5zY29kZXIpLA0KPiBAQCAtNDExLDggKzQx Miw2IEBAIHN0YXRpYyB2b2lkIGludGVsX21zdF9wb3N0X2Rpc2FibGVfZHAoc3RydWN0DQo+IGlu dGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+IA0KPiAgCXdhaXRfZm9yX2FjdF9zZW50KGVuY29k ZXIsIG9sZF9jcnRjX3N0YXRlKTsNCj4gDQo+IC0JZHJtX2RwX21zdF9kZWFsbG9jYXRlX3ZjcGko JmludGVsX2RwLT5tc3RfbWdyLCBjb25uZWN0b3ItDQo+ID5wb3J0KTsNCj4gLQ0KPiAgCWludGVs X2RkaV9kaXNhYmxlX3RyYW5zY29kZXJfZnVuYyhvbGRfY3J0Y19zdGF0ZSk7DQo+IA0KPiAgCWlm IChESVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gOSkNCj4gQEAgLTQ3OSw3ICs0NzgsOCBAQCBzdGF0 aWMgdm9pZCBpbnRlbF9tc3RfcHJlX2VuYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSwNCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGVuY29kZXItPmJhc2UuZGV2KTsNCj4gIAlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25u ZWN0b3IgPQ0KPiAgCQl0b19pbnRlbF9jb25uZWN0b3IoY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsN Cj4gLQlpbnQgc3RhcnRfc2xvdCA9IGludGVsX2RwX2lzX3VoYnIocGlwZV9jb25maWcpID8gMCA6 IDE7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSA9DQo+ ICsJCWRybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lfc3RhdGUoJnN0YXRlLT5iYXNlLA0K PiAmaW50ZWxfZHAtPm1zdF9tZ3IpOw0KPiAgCWludCByZXQ7DQo+ICAJYm9vbCBmaXJzdF9tc3Rf c3RyZWFtOw0KPiANCj4gQEAgLTUwNSwxNiArNTA1LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX21z dF9wcmVfZW5hYmxlX2RwKHN0cnVjdA0KPiBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAg CQlkaWdfcG9ydC0+YmFzZS5wcmVfZW5hYmxlKHN0YXRlLCAmZGlnX3BvcnQtPmJhc2UsDQo+ICAJ CQkJCQlwaXBlX2NvbmZpZywgTlVMTCk7DQo+IA0KPiAtCXJldCA9IGRybV9kcF9tc3RfYWxsb2Nh dGVfdmNwaSgmaW50ZWxfZHAtPm1zdF9tZ3IsDQo+IC0JCQkJICAgICAgIGNvbm5lY3Rvci0+cG9y dCwNCj4gLQkJCQkgICAgICAgcGlwZV9jb25maWctPnBibiwNCj4gLQkJCQkgICAgICAgcGlwZV9j b25maWctPmRwX21fbi50dSk7DQo+IC0JaWYgKCFyZXQpDQo+IC0JCWRybV9lcnIoJmRldl9wcml2 LT5kcm0sICJmYWlsZWQgdG8gYWxsb2NhdGUgdmNwaVxuIik7DQo+IC0NCj4gIAlpbnRlbF9kcC0+ YWN0aXZlX21zdF9saW5rcysrOw0KPiANCj4gLQlyZXQgPSBkcm1fZHBfdXBkYXRlX3BheWxvYWRf cGFydDEoJmludGVsX2RwLT5tc3RfbWdyLA0KPiBzdGFydF9zbG90KTsNCj4gKwlyZXQgPSBkcm1f ZHBfYWRkX3BheWxvYWRfcGFydDEoJmludGVsX2RwLT5tc3RfbWdyLCBtc3Rfc3RhdGUsDQo+ICsN Cj4gZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUobXN0X3N0YXRlLCBjb25uZWN0b3It PnBvcnQpKTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwg IkZhaWxlZCB0byBjcmVhdGUgTVNUIHBheWxvYWQgZm9yDQo+ICVzOiAlZFxuIiwNCj4gKwkJCWNv bm5lY3Rvci0+YmFzZS5uYW1lLCByZXQpOw0KPiANCj4gIAkvKg0KPiAgCSAqIEJlZm9yZSBHZW4g MTIgdGhpcyBpcyBub3QgZG9uZSBhcyBwYXJ0IG9mDQo+IEBAIC01MzcsNyArNTM0LDEwIEBAIHN0 YXRpYyB2b2lkIGludGVsX21zdF9lbmFibGVfZHAoc3RydWN0DQo+IGludGVsX2F0b21pY19zdGF0 ZSAqc3RhdGUsDQo+ICAJc3RydWN0IGludGVsX2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPSBl bmNfdG9fbXN0KGVuY29kZXIpOw0KPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19w b3J0ID0gaW50ZWxfbXN0LT5wcmltYXJ5Ow0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSAmZGlnX3BvcnQtPmRwOw0KPiArCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9 IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uX3N0YXRlLQ0KPiA+Y29ubmVjdG9yKTsNCj4gIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2 KTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4g KwkJZHJtX2F0b21pY19nZXRfbmV3X21zdF90b3BvbG9neV9zdGF0ZSgmc3RhdGUtPmJhc2UsDQo+ ICZpbnRlbF9kcC0+bXN0X21ncik7DQo+ICAJZW51bSB0cmFuc2NvZGVyIHRyYW5zID0gcGlwZV9j b25maWctPmNwdV90cmFuc2NvZGVyOw0KPiANCj4gIAlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRy bSwgcGlwZV9jb25maWctPmhhc19wY2hfZW5jb2Rlcik7DQo+IEBAIC01NjUsNyArNTY1LDggQEAg c3RhdGljIHZvaWQgaW50ZWxfbXN0X2VuYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSwNCj4gDQo+ICAJd2FpdF9mb3JfYWN0X3NlbnQoZW5jb2RlciwgcGlwZV9jb25m aWcpOw0KPiANCj4gLQlkcm1fZHBfdXBkYXRlX3BheWxvYWRfcGFydDIoJmludGVsX2RwLT5tc3Rf bWdyKTsNCj4gKwlkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIoJmludGVsX2RwLT5tc3RfbWdyLCAm c3RhdGUtPmJhc2UsDQo+ICsNCj4gZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUobXN0 X3N0YXRlLCBjb25uZWN0b3ItPnBvcnQpKTsNCj4gDQo+ICAJaWYgKERJU1BMQVlfVkVSKGRldl9w cml2KSA+PSAxMiAmJiBwaXBlX2NvbmZpZy0+ZmVjX2VuYWJsZSkNCj4gIAkJaW50ZWxfZGVfcm13 KGRldl9wcml2LCBDSElDS0VOX1RSQU5TKHRyYW5zKSwgMCwNCj4gQEAgLTk0OCw4ICs5NDksNiBA QCBpbnRlbF9kcF9tc3RfZW5jb2Rlcl9pbml0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQNCj4g KmRpZ19wb3J0LCBpbnQgY29ubl9iYXNlX2lkKQ0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSAmZGlnX3BvcnQtPmRwOw0KPiAgCWVudW0gcG9ydCBwb3J0ID0gZGlnX3BvcnQtPmJhc2Uu cG9ydDsNCj4gIAlpbnQgcmV0Ow0KPiAtCWludCBtYXhfc291cmNlX3JhdGUgPQ0KPiAtCQlpbnRl bF9kcC0+c291cmNlX3JhdGVzW2ludGVsX2RwLT5udW1fc291cmNlX3JhdGVzIC0gMV07DQo+IA0K PiAgCWlmICghSEFTX0RQX01TVChpOTE1KSB8fCBpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQ0K PiAgCQlyZXR1cm4gMDsNCj4gQEAgLTk2NSwxMCArOTY0LDcgQEAgaW50ZWxfZHBfbXN0X2VuY29k ZXJfaW5pdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0DQo+ICpkaWdfcG9ydCwgaW50IGNvbm5f YmFzZV9pZCkNCj4gIAkvKiBjcmVhdGUgZW5jb2RlcnMgKi8NCj4gIAlpbnRlbF9kcF9jcmVhdGVf ZmFrZV9tc3RfZW5jb2RlcnMoZGlnX3BvcnQpOw0KPiAgCXJldCA9IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyX2luaXQoJmludGVsX2RwLT5tc3RfbWdyLCAmaTkxNS0NCj4gPmRybSwNCj4gLQkJCQkJ ICAgJmludGVsX2RwLT5hdXgsIDE2LCAzLA0KPiAtCQkJCQkgICBkaWdfcG9ydC0+bWF4X2xhbmVz LA0KPiAtCQkJCQkgICBtYXhfc291cmNlX3JhdGUsDQo+IC0JCQkJCSAgIGNvbm5fYmFzZV9pZCk7 DQo+ICsJCQkJCSAgICZpbnRlbF9kcC0+YXV4LCAxNiwgMywNCj4gY29ubl9iYXNlX2lkKTsNCj4g IAlpZiAocmV0KSB7DQo+ICAJCWludGVsX2RwLT5tc3RfbWdyLmNicyA9IE5VTEw7DQo+ICAJCXJl dHVybiByZXQ7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2hkY3AuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfaGRjcC5j DQo+IGluZGV4IDhlYTY2YTJlMWIwOS4uN2RiYzlmMGJiMjRmIDEwMDY0NA0KPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2hkY3AuYw0KPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2hkY3AuYw0KPiBAQCAtMzAsOCArMzAsMzAgQEANCj4g DQo+ICBzdGF0aWMgaW50IGludGVsX2Nvbm5fdG9fdmNwaShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICpjb25uZWN0b3IpDQo+ICB7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICpt Z3I7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQ7DQo+ICsJ c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsNCj4gKwlpbnQgdmNw aSA9IDA7DQo+ICsNCj4gIAkvKiBGb3IgSERNSSB0aGlzIGlzIGZvcmNlZCB0byBiZSAweDAuIEZv ciBEUCBTU1QgYWxzbyB0aGlzIGlzIDB4MC4gKi8NCj4gLQlyZXR1cm4gY29ubmVjdG9yLT5wb3J0 CT8gY29ubmVjdG9yLT5wb3J0LT52Y3BpLnZjcGkgOiAwOw0KPiArCWlmICghY29ubmVjdG9yLT5w b3J0KQ0KPiArCQlyZXR1cm4gMDsNCj4gKwltZ3IgPSBjb25uZWN0b3ItPnBvcnQtPm1ncjsNCj4g Kw0KPiArCWRybV9tb2Rlc2V0X2xvY2soJm1nci0+YmFzZS5sb2NrLCBOVUxMKTsNCj4gKwltc3Rf c3RhdGUgPSB0b19kcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKG1nci0+YmFzZS5zdGF0ZSk7DQo+ ICsJcGF5bG9hZCA9IGRybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKG1zdF9zdGF0ZSwN Cj4gY29ubmVjdG9yLT5wb3J0KTsNCj4gKwlpZiAoZHJtX1dBUk5fT04obWdyLT5kZXYsICFwYXls b2FkKSkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwl2Y3BpID0gcGF5bG9hZC0+dmNwaTsNCj4g KwlpZiAoZHJtX1dBUk5fT04obWdyLT5kZXYsIHZjcGkgPCAwKSkgew0KPiArCQl2Y3BpID0gMDsN Cj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArb3V0Og0KPiArCWRybV9tb2Rlc2V0X3VubG9jaygm bWdyLT5iYXNlLmxvY2spOw0KPiArCXJldHVybiB2Y3BpOw0KPiAgfQ0KPiANCj4gIC8qDQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMNCj4gYi9k cml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMNCj4gaW5kZXggNTdmNzRjZmNk ZWJmLi5lOGY0YzgwNmZhMzkgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1 L2Rpc3BudjUwL2Rpc3AuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1 MC9kaXNwLmMNCj4gQEAgLTkzNyw2ICs5MzcsNyBAQCBzdHJ1Y3QgbnY1MF9tc3RvIHsNCj4gIAlz dHJ1Y3QgbnY1MF9oZWFkICpoZWFkOw0KPiAgCXN0cnVjdCBudjUwX21zdGMgKm1zdGM7DQo+ICAJ Ym9vbCBkaXNhYmxlZDsNCj4gKwlib29sIGVuYWJsZWQ7DQo+ICB9Ow0KPiANCj4gIHN0cnVjdCBu b3V2ZWF1X2VuY29kZXIgKm52NTBfcmVhbF9vdXRwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikNCj4gQEAgLTk1Miw1NyArOTUzLDM3IEBAIHN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52NTBf cmVhbF9vdXRwKHN0cnVjdA0KPiBkcm1fZW5jb2RlciAqZW5jb2RlcikNCj4gIAlyZXR1cm4gbXN0 by0+bXN0Yy0+bXN0bS0+b3V0cDsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgc3RydWN0IGRybV9kcF9w YXlsb2FkICoNCj4gLW52NTBfbXN0b19wYXlsb2FkKHN0cnVjdCBudjUwX21zdG8gKm1zdG8pDQo+ IC17DQo+IC0Jc3RydWN0IG5vdXZlYXVfZHJtICpkcm0gPSBub3V2ZWF1X2RybShtc3RvLT5lbmNv ZGVyLmRldik7DQo+IC0Jc3RydWN0IG52NTBfbXN0YyAqbXN0YyA9IG1zdG8tPm1zdGM7DQo+IC0J c3RydWN0IG52NTBfbXN0bSAqbXN0bSA9IG1zdGMtPm1zdG07DQo+IC0JaW50IHZjcGkgPSBtc3Rj LT5wb3J0LT52Y3BpLnZjcGksIGk7DQo+IC0NCj4gLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQo Jm1zdG0tPm1nci5wYXlsb2FkX2xvY2spKTsNCj4gLQ0KPiAtCU5WX0FUT01JQyhkcm0sICIlczog dmNwaSAlZFxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lLCB2Y3BpKTsNCj4gLQlmb3IgKGkgPSAwOyBp IDwgbXN0bS0+bWdyLm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0JCXN0cnVjdCBkcm1fZHBfcGF5 bG9hZCAqcGF5bG9hZCA9ICZtc3RtLT5tZ3IucGF5bG9hZHNbaV07DQo+IC0JCU5WX0FUT01JQyhk cm0sICIlczogJWQ6IHZjcGkgJWQgc3RhcnQgMHglMDJ4IHNsb3RzDQo+IDB4JTAyeFxuIiwNCj4g LQkJCSAgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLm5hbWUsIGksIHBheWxvYWQtPnZjcGksDQo+IC0J CQkgIHBheWxvYWQtPnN0YXJ0X3Nsb3QsIHBheWxvYWQtPm51bV9zbG90cyk7DQo+IC0JfQ0KPiAt DQo+IC0JZm9yIChpID0gMDsgaSA8IG1zdG0tPm1nci5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAt CQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPSAmbXN0bS0+bWdyLnBheWxvYWRzW2ld Ow0KPiAtCQlpZiAocGF5bG9hZC0+dmNwaSA9PSB2Y3BpKQ0KPiAtCQkJcmV0dXJuIHBheWxvYWQ7 DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIE5VTEw7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyB2b2lk DQo+IC1udjUwX21zdG9fY2xlYW51cChzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiArbnY1MF9t c3RvX2NsZWFudXAoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiArCQkgIHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCSAgc3RydWN0IG52NTBfbXN0byAqbXN0 bykNCj4gIHsNCj4gIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKG1zdG8t PmVuY29kZXIuZGV2KTsNCj4gLQlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsN Cj4gLQlzdHJ1Y3QgbnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gLQ0KPiAtCWlmICgh bXN0by0+ZGlzYWJsZWQpDQo+IC0JCXJldHVybjsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9t aWNfcGF5bG9hZCAqcGF5bG9hZCA9DQo+ICsJCWRybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0 YXRlKG1zdF9zdGF0ZSwgbXN0by0NCj4gPm1zdGMtPnBvcnQpOw0KPiANCj4gIAlOVl9BVE9NSUMo ZHJtLCAiJXM6IG1zdG8gY2xlYW51cFxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lKTsNCj4gDQo+IC0J ZHJtX2RwX21zdF9kZWFsbG9jYXRlX3ZjcGkoJm1zdG0tPm1nciwgbXN0Yy0+cG9ydCk7DQo+IC0N Cj4gLQltc3RvLT5tc3RjID0gTlVMTDsNCj4gLQltc3RvLT5kaXNhYmxlZCA9IGZhbHNlOw0KPiAr CWlmIChtc3RvLT5kaXNhYmxlZCkgew0KPiArCQltc3RvLT5tc3RjID0gTlVMTDsNCj4gKwkJbXN0 by0+ZGlzYWJsZWQgPSBmYWxzZTsNCj4gKwl9IGVsc2UgaWYgKG1zdG8tPmVuYWJsZWQpIHsNCj4g KwkJZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQyKG1nciwgc3RhdGUsIHBheWxvYWQpOw0KPiArCQlt c3RvLT5lbmFibGVkID0gZmFsc2U7DQo+ICsJfQ0KPiAgfQ0KPiANCj4gIHN0YXRpYyB2b2lkDQo+ IC1udjUwX21zdG9fcHJlcGFyZShzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiArbnY1MF9tc3Rv X3ByZXBhcmUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiArCQkgIHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCSAgc3RydWN0IG52NTBfbXN0byAqbXN0bykN Cj4gIHsNCj4gIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKG1zdG8tPmVu Y29kZXIuZGV2KTsNCj4gIAlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4g IAlzdHJ1Y3QgbnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZDsNCj4gIAlzdHJ1Y3Qgew0KPiAgCQlzdHJ1Y3Qg bnY1MF9kaXNwX210aGRfdjEgYmFzZTsNCj4gIAkJc3RydWN0IG52NTBfZGlzcF9zb3JfZHBfbXN0 X3ZjcGlfdjAgdmNwaTsNCj4gQEAgLTEwMTQsMTcgKzk5NSwyMSBAQCBudjUwX21zdG9fcHJlcGFy ZShzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiAgCQkJICAgICAgICgweDAxMDAgPDwgbXN0by0+ aGVhZC0+YmFzZS5pbmRleCksDQo+ICAJfTsNCj4gDQo+IC0JbXV0ZXhfbG9jaygmbXN0bS0+bWdy LnBheWxvYWRfbG9jayk7DQo+IC0NCj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6IG1zdG8gcHJlcGFy ZVxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lKTsNCj4gLQlpZiAobXN0Yy0+cG9ydC0+dmNwaS52Y3Bp ID4gMCkgew0KPiAtCQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPQ0KPiBudjUwX21z dG9fcGF5bG9hZChtc3RvKTsNCj4gLQkJaWYgKHBheWxvYWQpIHsNCj4gLQkJCWFyZ3MudmNwaS5z dGFydF9zbG90ID0gcGF5bG9hZC0+c3RhcnRfc2xvdDsNCj4gLQkJCWFyZ3MudmNwaS5udW1fc2xv dHMgPSBwYXlsb2FkLT5udW1fc2xvdHM7DQo+IC0JCQlhcmdzLnZjcGkucGJuID0gbXN0Yy0+cG9y dC0+dmNwaS5wYm47DQo+IC0JCQlhcmdzLnZjcGkuYWxpZ25lZF9wYm4gPSBtc3RjLT5wb3J0LQ0K PiA+dmNwaS5hbGlnbmVkX3BibjsNCj4gLQkJfQ0KPiArDQo+ICsJcGF5bG9hZCA9IGRybV9hdG9t aWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKG1zdF9zdGF0ZSwgbXN0Yy0NCj4gPnBvcnQpOw0KPiAr DQo+ICsJLy8gVE9ETzogRmlndXJlIG91dCBpZiB3ZSB3YW50IHRvIGRvIGEgYmV0dGVyIGpvYiBv ZiBoYW5kbGluZyBWQ1BJDQo+IGFsbG9jYXRpb24gZmFpbHVyZXMgaGVyZT8NCj4gKwlpZiAobXN0 by0+ZGlzYWJsZWQpIHsNCj4gKwkJZHJtX2RwX3JlbW92ZV9wYXlsb2FkKG1nciwgbXN0X3N0YXRl LCBwYXlsb2FkKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpZiAobXN0by0+ZW5hYmxlZCkNCj4gKwkJ CWRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MShtZ3IsIG1zdF9zdGF0ZSwNCj4gcGF5bG9hZCk7DQo+ ICsNCj4gKwkJYXJncy52Y3BpLnN0YXJ0X3Nsb3QgPSBwYXlsb2FkLT52Y19zdGFydF9zbG90Ow0K PiArCQlhcmdzLnZjcGkubnVtX3Nsb3RzID0gcGF5bG9hZC0+dGltZV9zbG90czsNCj4gKwkJYXJn cy52Y3BpLnBibiA9IHBheWxvYWQtPnBibjsNCj4gKwkJYXJncy52Y3BpLmFsaWduZWRfcGJuID0g cGF5bG9hZC0+dGltZV9zbG90cyAqIG1zdF9zdGF0ZS0NCj4gPnBibl9kaXY7DQo+ICAJfQ0KPiAN Cj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6ICVzOiAlMDJ4ICUwMnggJTA0eCAlMDR4XG4iLA0KPiBA QCAtMTAzMyw3ICsxMDE4LDYgQEAgbnY1MF9tc3RvX3ByZXBhcmUoc3RydWN0IG52NTBfbXN0byAq bXN0bykNCj4gIAkJICBhcmdzLnZjcGkucGJuLCBhcmdzLnZjcGkuYWxpZ25lZF9wYm4pOw0KPiAN Cj4gIAludmlmX210aGQoJmRybS0+ZGlzcGxheS0+ZGlzcC5vYmplY3QsIDAsICZhcmdzLCBzaXpl b2YoYXJncykpOw0KPiAtCW11dGV4X3VubG9jaygmbXN0bS0+bWdyLnBheWxvYWRfbG9jayk7DQo+ ICB9DQo+IA0KPiAgc3RhdGljIGludA0KPiBAQCAtMTA0Myw2ICsxMDI3LDcgQEAgbnY1MF9tc3Rv X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXINCj4gKmVuY29kZXIsDQo+ICB7DQo+ICAJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY3J0Y19zdGF0ZS0+c3RhdGU7DQo+ICAJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5fc3RhdGUtPmNvbm5lY3RvcjsN Cj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCXN0 cnVjdCBudjUwX21zdGMgKm1zdGMgPSBudjUwX21zdGMoY29ubmVjdG9yKTsNCj4gIAlzdHJ1Y3Qg bnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gIAlzdHJ1Y3QgbnY1MF9oZWFkX2F0b20g KmFzeWggPSBudjUwX2hlYWRfYXRvbShjcnRjX3N0YXRlKTsNCj4gQEAgLTEwNzAsOCArMTA1NSwx OCBAQCBudjUwX21zdG9fYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2Rlcg0KPiAqZW5jb2Rl ciwNCj4gIAkJCQkJCSAgICBmYWxzZSk7DQo+ICAJfQ0KPiANCj4gLQlzbG90cyA9IGRybV9kcF9h dG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCAmbXN0bS0+bWdyLCBtc3RjLQ0KPiA+cG9ydCwN Cj4gLQkJCQkJICAgICAgYXN5aC0+ZHAucGJuLCAwKTsNCj4gKwltc3Rfc3RhdGUgPSBkcm1fYXRv bWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUsICZtc3RtLQ0KPiA+bWdyKTsNCj4gKwlp ZiAoSVNfRVJSKG1zdF9zdGF0ZSkpDQo+ICsJCXJldHVybiBQVFJfRVJSKG1zdF9zdGF0ZSk7DQo+ ICsNCj4gKwlpZiAoIW1zdF9zdGF0ZS0+cGJuX2Rpdikgew0KPiArCQlzdHJ1Y3Qgbm91dmVhdV9l bmNvZGVyICpvdXRwID0gbXN0Yy0+bXN0bS0+b3V0cDsNCj4gKw0KPiArCQltc3Rfc3RhdGUtPnBi bl9kaXYgPQ0KPiBkcm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncoJm1zdG0tPm1nciwNCj4gKwkJCQkJ CQkgICAgICBvdXRwLT5kcC5saW5rX2J3LA0KPiBvdXRwLT5kcC5saW5rX25yKTsNCj4gKwl9DQo+ ICsNCj4gKwlzbG90cyA9IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCAmbXN0 bS0+bWdyLCBtc3RjLQ0KPiA+cG9ydCwgYXN5aC0+ZHAucGJuKTsNCj4gIAlpZiAoc2xvdHMgPCAw KQ0KPiAgCQlyZXR1cm4gc2xvdHM7DQo+IA0KPiBAQCAtMTEwMyw3ICsxMDk4LDYgQEAgbnY1MF9t c3RvX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyDQo+ICplbmNvZGVyLCBzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3QNCj4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y Ow0KPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7DQo+ICAJdTgg cHJvdG87DQo+IC0JYm9vbCByOw0KPiANCj4gIAlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdp bihlbmNvZGVyLT5kZXYsICZjb25uX2l0ZXIpOw0KPiAgCWRybV9mb3JfZWFjaF9jb25uZWN0b3Jf aXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsNCj4gQEAgLTExMTgsMTAgKzExMTIsNiBAQCBu djUwX21zdG9fYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXINCj4gKmVuY29kZXIsIHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdA0KPiAgCWlmIChXQVJOX09OKCFtc3RjKSkNCj4gIAkJ cmV0dXJuOw0KPiANCj4gLQlyID0gZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKCZtc3RtLT5tZ3Is IG1zdGMtPnBvcnQsIGFzeWgtDQo+ID5kcC5wYm4sIGFzeWgtPmRwLnR1KTsNCj4gLQlpZiAoIXIp DQo+IC0JCURSTV9ERUJVR19LTVMoIkZhaWxlZCB0byBhbGxvY2F0ZSBWQ1BJXG4iKTsNCj4gLQ0K PiAgCWlmICghbXN0bS0+bGlua3MrKykNCj4gIAkJbnY1MF9vdXRwX2FjcXVpcmUobXN0bS0+b3V0 cCwgZmFsc2UgLypYWFg6IE1TVCBhdWRpby4qLyk7DQo+IA0KPiBAQCAtMTEzNCw2ICsxMTI0LDcg QEAgbnY1MF9tc3RvX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyDQo+ICplbmNvZGVy LCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3QNCj4gIAkJCSAgIG52NTBfZHBfYnBjX3RvX2Rl cHRoKGFzeWgtPm9yLmJwYykpOw0KPiANCj4gIAltc3RvLT5tc3RjID0gbXN0YzsNCj4gKwltc3Rv LT5lbmFibGVkID0gdHJ1ZTsNCj4gIAltc3RtLT5tb2RpZmllZCA9IHRydWU7DQo+ICB9DQo+IA0K PiBAQCAtMTE0NCw4ICsxMTM1LDYgQEAgbnY1MF9tc3RvX2F0b21pY19kaXNhYmxlKHN0cnVjdCBk cm1fZW5jb2Rlcg0KPiAqZW5jb2Rlciwgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnMNCj4gIAlz dHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4gIAlzdHJ1Y3QgbnY1MF9tc3Rt ICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gDQo+IC0JZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3Rz KCZtc3RtLT5tZ3IsIG1zdGMtPnBvcnQpOw0KPiAtDQo+ICAJbXN0bS0+b3V0cC0+dXBkYXRlKG1z dG0tPm91dHAsIG1zdG8tPmhlYWQtPmJhc2UuaW5kZXgsIE5VTEwsDQo+IDAsIDApOw0KPiAgCW1z dG0tPm1vZGlmaWVkID0gdHJ1ZTsNCj4gIAlpZiAoIS0tbXN0bS0+bGlua3MpDQo+IEBAIC0xMzY1 LDcgKzEzNTQsOSBAQCBudjUwX21zdGNfbmV3KHN0cnVjdCBudjUwX21zdG0gKm1zdG0sIHN0cnVj dA0KPiBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsDQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQNCj4g LW52NTBfbXN0bV9jbGVhbnVwKHN0cnVjdCBudjUwX21zdG0gKm1zdG0pDQo+ICtudjUwX21zdG1f Y2xlYW51cChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSwNCj4gKwkJICBzdHJ1Y3QgbnY1MF9t c3RtICptc3RtKQ0KPiAgew0KPiAgCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gbm91dmVhdV9k cm0obXN0bS0+b3V0cC0NCj4gPmJhc2UuYmFzZS5kZXYpOw0KPiAgCXN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcjsNCj4gQEAgLTEzNzMsMTQgKzEzNjQsMTIgQEAgbnY1MF9tc3RtX2NsZWFudXAo c3RydWN0IG52NTBfbXN0bSAqbXN0bSkNCj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6IG1zdG0gY2xl YW51cFxuIiwgbXN0bS0+b3V0cC0NCj4gPmJhc2UuYmFzZS5uYW1lKTsNCj4gIAlkcm1fZHBfY2hl Y2tfYWN0X3N0YXR1cygmbXN0bS0+bWdyKTsNCj4gDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2Fk X3BhcnQyKCZtc3RtLT5tZ3IpOw0KPiAtDQo+ICAJZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2Rl ciwgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLmRldikgew0KPiAgCQlpZiAoZW5jb2Rlci0+ZW5jb2Rl cl90eXBlID09DQo+IERSTV9NT0RFX0VOQ09ERVJfRFBNU1QpIHsNCj4gIAkJCXN0cnVjdCBudjUw X21zdG8gKm1zdG8gPSBudjUwX21zdG8oZW5jb2Rlcik7DQo+ICAJCQlzdHJ1Y3QgbnY1MF9tc3Rj ICptc3RjID0gbXN0by0+bXN0YzsNCj4gIAkJCWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0 bSkNCj4gLQkJCQludjUwX21zdG9fY2xlYW51cChtc3RvKTsNCj4gKwkJCQludjUwX21zdG9fY2xl YW51cChzdGF0ZSwgbXN0X3N0YXRlLA0KPiAmbXN0bS0+bWdyLCBtc3RvKTsNCj4gIAkJfQ0KPiAg CX0NCj4gDQo+IEBAIC0xMzg4LDIwICsxMzc3LDM0IEBAIG52NTBfbXN0bV9jbGVhbnVwKHN0cnVj dCBudjUwX21zdG0gKm1zdG0pDQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQNCj4gLW52NTBfbXN0 bV9wcmVwYXJlKHN0cnVjdCBudjUwX21zdG0gKm1zdG0pDQo+ICtudjUwX21zdG1fcHJlcGFyZShz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSwNCj4gKwkJICBzdHJ1Y3QgbnY1MF9tc3RtICptc3Rt KQ0KPiAgew0KPiAgCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gbm91dmVhdV9kcm0obXN0bS0+ b3V0cC0NCj4gPmJhc2UuYmFzZS5kZXYpOw0KPiAgCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cjsNCj4gDQo+ICAJTlZfQVRPTUlDKGRybSwgIiVzOiBtc3RtIHByZXBhcmVcbiIsIG1zdG0tPm91 dHAtDQo+ID5iYXNlLmJhc2UubmFtZSk7DQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQx KCZtc3RtLT5tZ3IsIDEpOw0KPiANCj4gKwkvKiBEaXNhYmxlIHBheWxvYWRzIGZpcnN0ICovDQo+ ICAJZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2RlciwgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLmRl dikgew0KPiAgCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID09DQo+IERSTV9NT0RFX0VOQ09E RVJfRFBNU1QpIHsNCj4gIAkJCXN0cnVjdCBudjUwX21zdG8gKm1zdG8gPSBudjUwX21zdG8oZW5j b2Rlcik7DQo+ICAJCQlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4gLQkJ CWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0bSkNCj4gLQkJCQludjUwX21zdG9fcHJlcGFy ZShtc3RvKTsNCj4gKwkJCWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0bSAmJiBtc3RvLT5k aXNhYmxlZCkNCj4gKwkJCQludjUwX21zdG9fcHJlcGFyZShzdGF0ZSwgbXN0X3N0YXRlLA0KPiAm bXN0bS0+bWdyLCBtc3RvKTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCS8qIEFkZCBwYXlsb2Fk cyBmb3IgbmV3IGhlYWRzLCB3aGlsZSBhbHNvIHVwZGF0aW5nIHRoZSBzdGFydCBzbG90cyBvZg0K PiBhbnkgdW5tb2RpZmllZCAoYnV0DQo+ICsJICogYWN0aXZlKSBoZWFkcyB0aGF0IG1heSBoYXZl IGhhZCB0aGVpciBWQyBzbG90cyBzaGlmdGVkIGxlZnQgYWZ0ZXIgdGhlDQo+IHByZXZpb3VzIHN0 ZXANCj4gKwkgKi8NCj4gKwlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBtc3RtLT5vdXRw LT5iYXNlLmJhc2UuZGV2KSB7DQo+ICsJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgPT0NCj4g RFJNX01PREVfRU5DT0RFUl9EUE1TVCkgew0KPiArCQkJc3RydWN0IG52NTBfbXN0byAqbXN0byA9 IG52NTBfbXN0byhlbmNvZGVyKTsNCj4gKwkJCXN0cnVjdCBudjUwX21zdGMgKm1zdGMgPSBtc3Rv LT5tc3RjOw0KPiArCQkJaWYgKG1zdGMgJiYgbXN0Yy0+bXN0bSA9PSBtc3RtICYmICFtc3RvLQ0K PiA+ZGlzYWJsZWQpDQo+ICsJCQkJbnY1MF9tc3RvX3ByZXBhcmUoc3RhdGUsIG1zdF9zdGF0ZSwN Cj4gJm1zdG0tPm1nciwgbXN0byk7DQo+ICAJCX0NCj4gIAl9DQo+IA0KPiBAQCAtMTU5OCw5ICsx NjAxLDcgQEAgbnY1MF9tc3RtX25ldyhzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpvdXRwLA0KPiBz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBpbnQgYXV4X21heCwNCj4gIAltc3RtLT5tZ3IuY2JzID0g Jm52NTBfbXN0bTsNCj4gDQo+ICAJcmV0ID0gZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdCgm bXN0bS0+bWdyLCBkZXYsIGF1eCwNCj4gYXV4X21heCwNCj4gLQkJCQkJICAgbWF4X3BheWxvYWRz LCBvdXRwLT5kY2ItDQo+ID5kcGNvbmYubGlua19uciwNCj4gLQ0KPiBkcm1fZHBfYndfY29kZV90 b19saW5rX3JhdGUob3V0cC0+ZGNiLT5kcGNvbmYubGlua19idyksDQo+IC0JCQkJCSAgIGNvbm5f YmFzZV9pZCk7DQo+ICsJCQkJCSAgIG1heF9wYXlsb2FkcywgY29ubl9iYXNlX2lkKTsNCj4gIAlp ZiAocmV0KQ0KPiAgCQlyZXR1cm4gcmV0Ow0KPiANCj4gQEAgLTIwNDUsMjAgKzIwNDYsMjAgQEAg bnY1MF9waW9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcg0KPiAqY29ubmVjdG9yLCBzdHJ1 Y3QgZGNiX291dHB1dCAqZGNiZSkNCj4gIHN0YXRpYyB2b2lkDQo+ICBudjUwX2Rpc3BfYXRvbWlj X2NvbW1pdF9jb3JlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwgdTMyDQo+ICppbnRl cmxvY2spDQo+ICB7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7DQo+ ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsNCj4gIAlzdHJ1 Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKHN0YXRlLT5kZXYpOw0KPiAgCXN0cnVj dCBudjUwX2Rpc3AgKmRpc3AgPSBudjUwX2Rpc3AoZHJtLT5kZXYpOw0KPiAgCXN0cnVjdCBudjUw X2NvcmUgKmNvcmUgPSBkaXNwLT5jb3JlOw0KPiAgCXN0cnVjdCBudjUwX21zdG0gKm1zdG07DQo+ IC0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOw0KPiArCWludCBpOw0KPiANCj4gIAlOVl9B VE9NSUMoZHJtLCAiY29tbWl0IGNvcmUgJTA4eFxuIiwNCj4gaW50ZXJsb2NrW05WNTBfRElTUF9J TlRFUkxPQ0tfQkFTRV0pOw0KPiANCj4gLQlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBk cm0tPmRldikgew0KPiAtCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9DQo+IERSTV9NT0RF X0VOQ09ERVJfRFBNU1QpIHsNCj4gLQkJCW1zdG0gPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcikt PmRwLm1zdG07DQo+IC0JCQlpZiAobXN0bSAmJiBtc3RtLT5tb2RpZmllZCkNCj4gLQkJCQludjUw X21zdG1fcHJlcGFyZShtc3RtKTsNCj4gLQkJfQ0KPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2lu X3N0YXRlKHN0YXRlLCBtZ3IsIG1zdF9zdGF0ZSwgaSkgew0KPiArCQltc3RtID0gbnY1MF9tc3Rt KG1ncik7DQo+ICsJCWlmIChtc3RtLT5tb2RpZmllZCkNCj4gKwkJCW52NTBfbXN0bV9wcmVwYXJl KHN0YXRlLCBtc3Rfc3RhdGUsIG1zdG0pOw0KPiAgCX0NCj4gDQo+ICAJY29yZS0+ZnVuYy0+bnRm eV9pbml0KGRpc3AtPnN5bmMsIE5WNTBfRElTUF9DT1JFX05URlkpOw0KPiBAQCAtMjA2NywxMiAr MjA2OCwxMCBAQCBudjUwX2Rpc3BfYXRvbWljX2NvbW1pdF9jb3JlKHN0cnVjdA0KPiBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwgdTMyICppbnRlcmxvY2spDQo+ICAJCQkJICAgICAgIGRpc3AtPmNv cmUtPmNoYW4uYmFzZS5kZXZpY2UpKQ0KPiAgCQlOVl9FUlJPUihkcm0sICJjb3JlIG5vdGlmaWVy IHRpbWVvdXRcbiIpOw0KPiANCj4gLQlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBkcm0t PmRldikgew0KPiAtCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9DQo+IERSTV9NT0RFX0VO Q09ERVJfRFBNU1QpIHsNCj4gLQkJCW1zdG0gPSBub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPmRw Lm1zdG07DQo+IC0JCQlpZiAobXN0bSAmJiBtc3RtLT5tb2RpZmllZCkNCj4gLQkJCQludjUwX21z dG1fY2xlYW51cChtc3RtKTsNCj4gLQkJfQ0KPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2luX3N0 YXRlKHN0YXRlLCBtZ3IsIG1zdF9zdGF0ZSwgaSkgew0KPiArCQltc3RtID0gbnY1MF9tc3RtKG1n cik7DQo+ICsJCWlmIChtc3RtLT5tb2RpZmllZCkNCj4gKwkJCW52NTBfbXN0bV9jbGVhbnVwKHN0 YXRlLCBtc3Rfc3RhdGUsIG1zdG0pOw0KPiAgCX0NCj4gIH0NCj4gDQo+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4gYi9pbmNsdWRlL2RybS9k aXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4gaW5kZXggZWNkMTMwMDI4MzM3Li42MzE3ODMx NzA1YWIgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF9oZWxw ZXIuaA0KPiArKysgYi9pbmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4g QEAgLTQ4LDIwICs0OCw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl9oaXN0b3J5 IHsNCj4gDQo+ICBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2g7DQo+IA0KPiAtLyoqDQo+IC0gKiBz dHJ1Y3QgZHJtX2RwX3ZjcGkgLSBWaXJ0dWFsIENoYW5uZWwgUGF5bG9hZCBJZGVudGlmaWVyDQo+ IC0gKiBAdmNwaTogVmlydHVhbCBjaGFubmVsIElELg0KPiAtICogQHBibjogUGF5bG9hZCBCYW5k d2lkdGggTnVtYmVyIGZvciB0aGlzIGNoYW5uZWwNCj4gLSAqIEBhbGlnbmVkX3BibjogUEJOIGFs aWduZWQgd2l0aCBzbG90IHNpemUNCj4gLSAqIEBudW1fc2xvdHM6IG51bWJlciBvZiBzbG90cyBm b3IgdGhpcyBQQk4NCj4gLSAqLw0KPiAtc3RydWN0IGRybV9kcF92Y3BpIHsNCj4gLQlpbnQgdmNw aTsNCj4gLQlpbnQgcGJuOw0KPiAtCWludCBhbGlnbmVkX3BibjsNCj4gLQlpbnQgbnVtX3Nsb3Rz Ow0KPiAtfTsNCj4gLQ0KPiAgLyoqDQo+ICAgKiBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IC0gTVNU IHBvcnQNCj4gICAqIEBwb3J0X251bTogcG9ydCBudW1iZXINCj4gQEAgLTE0Miw3ICsxMjgsNiBA QCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX2F1eCBhdXg7IC8q IGkyYyBidXMgZm9yIHRoaXMgcG9ydD8gKi8NCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg KnBhcmVudDsNCj4gDQo+IC0Jc3RydWN0IGRybV9kcF92Y3BpIHZjcGk7DQo+ICAJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1ncjsNCj4gDQo+IEBAIC01MjcsMTkgKzUxMiw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X2NicyB7DQo+ICAJdm9pZCAoKnBvbGxfaHBkX2lycSkoc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IpOw0KPiAgfTsNCj4gDQo+IC0jZGVmaW5lIERQX01BWF9QQVlMT0FE IChzaXplb2YodW5zaWduZWQgbG9uZykgKiA4KQ0KPiAtDQo+IC0jZGVmaW5lIERQX1BBWUxPQURf TE9DQUwgMQ0KPiAtI2RlZmluZSBEUF9QQVlMT0FEX1JFTU9URSAyDQo+IC0jZGVmaW5lIERQX1BB WUxPQURfREVMRVRFX0xPQ0FMIDMNCj4gLQ0KPiAtc3RydWN0IGRybV9kcF9wYXlsb2FkIHsNCj4g LQlpbnQgcGF5bG9hZF9zdGF0ZTsNCj4gLQlpbnQgc3RhcnRfc2xvdDsNCj4gLQlpbnQgbnVtX3Ns b3RzOw0KPiAtCWludCB2Y3BpOw0KPiAtfTsNCj4gLQ0KPiAgI2RlZmluZSB0b19kcF9tc3RfdG9w b2xvZ3lfc3RhdGUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlLCBiYXNlKQ0KPiANCj4gIC8qKg0KPiBAQCAtNTUxLDYgKzUyMywzNSBAQCBzdHJ1 Y3QgZHJtX2RwX3BheWxvYWQgew0KPiAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQg ew0KPiAgCS8qKiBAcG9ydDogVGhlIE1TVCBwb3J0IGFzc2lnbmVkIHRvIHRoaXMgcGF5bG9hZCAq Lw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7DQo+ICsNCj4gKwkvKioNCj4gKwkg KiBAdmNfc3RhcnRfc2xvdDogVGhlIHRpbWUgc2xvdCB0aGF0IHRoaXMgcGF5bG9hZCBzdGFydHMg b24uIEJlY2F1c2UNCj4gcGF5bG9hZCBzdGFydCBzbG90cw0KPiArCSAqIGNhbid0IGJlIGRldGVy bWluZWQgYWhlYWQgb2YgdGltZSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdmFsdWUgYXJlDQo+IFVO REVGSU5FRCBhdCBhdG9taWMNCj4gKwkgKiBjaGVjayB0aW1lLiBUaGlzIHNob3VsZG4ndCB1c3Vh bGx5IG1hdHRlciwgYXMgdGhlIHN0YXJ0IHNsb3Qgc2hvdWxkDQo+IG5ldmVyIGJlIHJlbGV2YW50 IGZvcg0KPiArCSAqIGF0b21pYyBzdGF0ZSBjb21wdXRhdGlvbnMuDQo+ICsJICoNCj4gKwkgKiBT aW5jZSB0aGlzIHZhbHVlIGlzIGRldGVybWluZWQgYXQgY29tbWl0IHRpbWUgaW5zdGVhZCBvZiBj aGVjaw0KPiB0aW1lLCB0aGlzIHZhbHVlIGlzDQo+ICsJICogcHJvdGVjdGVkIGJ5IHRoZSBNU1Qg aGVscGVycyBlbnN1cmluZyB0aGF0IGFzeW5jIGNvbW1pdHMNCj4gb3BlcmF0aW5nIG9uIHRoZSBn aXZlbiB0b3BvbG9neQ0KPiArCSAqIG5ldmVyIHJ1biBpbiBwYXJhbGxlbC4gSW4gdGhlIGV2ZW50 IHRoYXQgYSBkcml2ZXIgZG9lcyBuZWVkIHRvIHJlYWQNCj4gdGhpcyB2YWx1ZSAoZS5nLiB0bw0K PiArCSAqIGluZm9ybSBoYXJkd2FyZSBvZiB0aGUgc3RhcnRpbmcgdGltZXNsb3QgZm9yIGEgcGF5 bG9hZCksIHRoZSBkcml2ZXINCj4gbWF5IGVpdGhlcjoNCj4gKwkgKg0KPiArCSAqICogUmVhZCB0 aGlzIGZpZWxkIGR1cmluZyB0aGUgYXRvbWljIGNvbW1pdCBhZnRlcg0KPiArCSAqICAgZHJtX2Rw X21zdF9hdG9taWNfd2FpdF9mb3JfZGVwZW5kZW5jaWVzKCkgaGFzIGJlZW4gY2FsbGVkLA0KPiB3 aGljaCB3aWxsIGVuc3VyZSB0aGUNCj4gKwkgKiAgIHByZXZpb3VzIE1TVCBzdGF0ZXMgcGF5bG9h ZCBzdGFydCBzbG90cyBoYXZlIGJlZW4gY29waWVkIG92ZXIgdG8NCj4gdGhlIG5ldyBzdGF0ZS4g Tm90ZQ0KPiArCSAqICAgdGhhdCBhIG5ldyBzdGFydCBzbG90IHdvbid0IGJlIGFzc2lnbmVkL3Jl bW92ZWQgZnJvbSB0aGlzDQo+IHBheWxvYWQgdW50aWwNCj4gKwkgKiAgIGRybV9kcF9hZGRfcGF5 bG9hZF9wYXJ0MSgpL2RybV9kcF9yZW1vdmVfcGF5bG9hZCgpIGhhdmUNCj4gYmVlbiBjYWxsZWQu DQo+ICsJICogKiBBY3F1aXJlIHRoZSBNU1QgbW9kZXNldHRpbmcgbG9jaywgYW5kIHRoZW4gd2Fp dCBmb3IgYW55DQo+IHBlbmRpbmcgTVNULXJlbGF0ZWQgY29tbWl0cyB0bw0KPiArCSAqICAgZ2V0 IGNvbW1pdHRlZCB0byBoYXJkd2FyZSBieSBjYWxsaW5nIGRybV9jcnRjX2NvbW1pdF93YWl0KCkg b24NCj4gZWFjaCBvZiB0aGUNCj4gKwkgKiAgICZkcm1fY3J0Y19jb21taXQgc3RydWN0cyBpbg0K PiAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS5jb21taXRfZGVwcy4NCj4gKwkgKg0KPiArCSAq IElmIG5laXRoZXIgb2YgdGhlIHR3byBhYm92ZSBzb2x1dGlvbnMgc3VmZmljZSAoZS5nLiB0aGUg ZHJpdmVyIG5lZWRzDQo+IHRvIHJlYWQgdGhlIHN0YXJ0DQo+ICsJICogc2xvdCBpbiB0aGUgbWlk ZGxlIG9mIGFuIGF0b21pYyBjb21taXQgd2l0aG91dCB3YWl0aW5nIGZvciBzb21lDQo+IHJlYXNv biksIHRoZW4gZHJpdmVycw0KPiArCSAqIHNob3VsZCBjYWNoZSB0aGlzIHZhbHVlIHRoZW1zZWx2 ZXMgYWZ0ZXIgY2hhbmdpbmcgcGF5bG9hZHMuDQo+ICsJICovDQo+ICsJczggdmNfc3RhcnRfc2xv dDsNCj4gKw0KPiArCS8qKiBAdmNwaTogVGhlIFZpcnR1YWwgQ2hhbm5lbCBQYXlsb2FkIElkZW50 aWZpZXIgKi8NCj4gKwl1OCB2Y3BpOw0KPiAgCS8qKiBAdGltZV9zbG90czogVGhlIG51bWJlciBv ZiB0aW1lc2xvdHMgYWxsb2NhdGVkIHRvIHRoaXMgcGF5bG9hZA0KPiAqLw0KPiAgCWludCB0aW1l X3Nsb3RzOw0KPiAgCS8qKiBAcGJuOiBUaGUgcGF5bG9hZCBiYW5kd2lkdGggZm9yIHRoaXMgcGF5 bG9hZCAqLw0KPiBAQCAtNTc0LDggKzU3NSw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlIHsNCj4gIAkvKiogQGJhc2U6IEJhc2UgcHJpdmF0ZSBzdGF0ZSBmb3IgYXRvbWljICov DQo+ICAJc3RydWN0IGRybV9wcml2YXRlX3N0YXRlIGJhc2U7DQo+IA0KPiAtCS8qKiBAcGF5bG9h ZHM6IFRoZSBsaXN0IG9mIHBheWxvYWRzIGJlaW5nIGNyZWF0ZWQvZGVzdHJveWVkIGluIHRoaXMN Cj4gc3RhdGUgKi8NCj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIHBheWxvYWRzOw0KPiAgCS8qKiBAbWdy OiBUaGUgdG9wb2xvZ3kgbWFuYWdlciAqLw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyOw0KPiANCj4gQEAgLTU5MiwxMCArNTkxLDIxIEBAIHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X3N0YXRlIHsNCj4gIAkvKiogQG51bV9jb21taXRfZGVwczogVGhlIG51bWJlciBv ZiBDUlRDIGNvbW1pdHMgaW4NCj4gQGNvbW1pdF9kZXBzICovDQo+ICAJc2l6ZV90IG51bV9jb21t aXRfZGVwczsNCj4gDQo+ICsJLyoqIEBwYXlsb2FkX21hc2s6IEEgYml0bWFzayBvZiBhbGxvY2F0 ZWQgVkNQSXMsIHVzZWQgZm9yIFZDUEkNCj4gYXNzaWdubWVudHMgKi8NCj4gKwl1MzIgcGF5bG9h ZF9tYXNrOw0KPiArCS8qKiBAcGF5bG9hZHM6IFRoZSBsaXN0IG9mIHBheWxvYWRzIGJlaW5nIGNy ZWF0ZWQvZGVzdHJveWVkIGluIHRoaXMNCj4gc3RhdGUgKi8NCj4gKwlzdHJ1Y3QgbGlzdF9oZWFk IHBheWxvYWRzOw0KPiArDQo+ICAJLyoqIEB0b3RhbF9hdmFpbF9zbG90czogVGhlIHRvdGFsIG51 bWJlciBvZiBzbG90cyB0aGlzIHRvcG9sb2d5IGNhbg0KPiBoYW5kbGUgKDYzIG9yIDY0KSAqLw0K PiAgCXU4IHRvdGFsX2F2YWlsX3Nsb3RzOw0KPiAgCS8qKiBAc3RhcnRfc2xvdDogVGhlIGZpcnN0 IHVzYWJsZSB0aW1lIHNsb3QgaW4gdGhpcyB0b3BvbG9neSAoMSBvciAwKSAqLw0KPiAgCXU4IHN0 YXJ0X3Nsb3Q7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAcGJuX2RpdjogVGhlIGN1cnJlbnQgUEJO IGRpdmlzb3IgZm9yIHRoaXMgdG9wb2xvZ3kuIFRoZSBkcml2ZXIgaXMNCj4gZXhwZWN0ZWQgdG8g ZmlsbCB0aGlzDQo+ICsJICogb3V0IGl0c2VsZi4NCj4gKwkgKi8NCj4gKwlpbnQgcGJuX2RpdjsN Cj4gIH07DQo+IA0KPiAgI2RlZmluZSB0b19kcF9tc3RfdG9wb2xvZ3lfbWdyKHgpIGNvbnRhaW5l cl9vZih4LCBzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IsIGJhc2UpDQo+IEBAIC02 MzUsMTQgKzY0NSw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciB7DQo+ICAJICog QG1heF9wYXlsb2FkczogbWF4aW11bSBudW1iZXIgb2YgcGF5bG9hZHMgdGhlIEdQVSBjYW4NCj4g Z2VuZXJhdGUuDQo+ICAJICovDQo+ICAJaW50IG1heF9wYXlsb2FkczsNCj4gLQkvKioNCj4gLQkg KiBAbWF4X2xhbmVfY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIGxhbmVzIHRoZSBHUFUgY2FuIGRy aXZlLg0KPiAtCSAqLw0KPiAtCWludCBtYXhfbGFuZV9jb3VudDsNCj4gLQkvKioNCj4gLQkgKiBA bWF4X2xpbmtfcmF0ZTogbWF4aW11bSBsaW5rIHJhdGUgcGVyIGxhbmUgR1BVIGNhbiBvdXRwdXQs IGluDQo+IGtIei4NCj4gLQkgKi8NCj4gLQlpbnQgbWF4X2xpbmtfcmF0ZTsNCj4gIAkvKioNCj4g IAkgKiBAY29ubl9iYXNlX2lkOiBEUk0gY29ubmVjdG9yIElEIHRoaXMgbWdyIGlzIGNvbm5lY3Rl ZCB0by4gT25seQ0KPiB1c2VkDQo+ICAJICogdG8gYnVpbGQgdGhlIE1TVCBjb25uZWN0b3IgcGF0 aCB2YWx1ZS4NCj4gQEAgLTY4NSw2ICs2ODcsMjAgQEAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyIHsNCj4gIAkgKi8NCj4gIAlib29sIHBheWxvYWRfaWRfdGFibGVfY2xlYXJlZCA6IDE7 DQo+IA0KPiArCS8qKg0KPiArCSAqIEBwYXlsb2FkX2NvdW50OiBUaGUgbnVtYmVyIG9mIGN1cnJl bnRseSBhY3RpdmUgcGF5bG9hZHMgaW4NCj4gaGFyZHdhcmUuIFRoaXMgdmFsdWUgaXMgb25seQ0K PiArCSAqIGludGVuZGVkIHRvIGJlIHVzZWQgaW50ZXJuYWxseSBieSBNU1QgaGVscGVycyBmb3Ig cGF5bG9hZCB0cmFja2luZywNCj4gYW5kIGlzIG9ubHkgc2FmZSB0bw0KPiArCSAqIHJlYWQvd3Jp dGUgZnJvbSB0aGUgYXRvbWljIGNvbW1pdCAobm90IGNoZWNrKSBjb250ZXh0Lg0KPiArCSAqLw0K PiArCXU4IHBheWxvYWRfY291bnQ7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAbmV4dF9zdGFydF9z bG90OiBUaGUgc3RhcnRpbmcgdGltZXNsb3QgdG8gdXNlIGZvciBuZXcgVkMgcGF5bG9hZHMuDQo+ IFRoaXMgdmFsdWUgaXMgdXNlZA0KPiArCSAqIGludGVybmFsbHkgYnkgTVNUIGhlbHBlcnMgZm9y IHBheWxvYWQgdHJhY2tpbmcsIGFuZCBpcyBvbmx5IHNhZmUgdG8NCj4gcmVhZC93cml0ZSBmcm9t IHRoZQ0KPiArCSAqIGF0b21pYyBjb21taXQgKG5vdCBjaGVjaykgY29udGV4dC4NCj4gKwkgKi8N Cj4gKwl1OCBuZXh0X3N0YXJ0X3Nsb3Q7DQo+ICsNCj4gIAkvKioNCj4gIAkgKiBAbXN0X3ByaW1h cnk6IFBvaW50ZXIgdG8gdGhlIHByaW1hcnkvZmlyc3QgYnJhbmNoIGRldmljZS4NCj4gIAkgKi8N Cj4gQEAgLTY5OCwxMCArNzE0LDYgQEAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyIHsN Cj4gIAkgKiBAc2lua19jb3VudDogU2luayBjb3VudCBmcm9tIERFVklDRV9TRVJWSUNFX0lSUV9W RUNUT1JfRVNJMC4NCj4gIAkgKi8NCj4gIAl1OCBzaW5rX2NvdW50Ow0KPiAtCS8qKg0KPiAtCSAq IEBwYm5fZGl2OiBQQk4gdG8gc2xvdHMgZGl2aXNvci4NCj4gLQkgKi8NCj4gLQlpbnQgcGJuX2Rp djsNCj4gDQo+ICAJLyoqDQo+ICAJICogQGZ1bmNzOiBBdG9taWMgaGVscGVyIGNhbGxiYWNrcw0K PiBAQCAtNzE4LDMyICs3MzAsNiBAQCBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Igew0K PiAgCSAqLw0KPiAgCXN0cnVjdCBsaXN0X2hlYWQgdHhfbXNnX2Rvd25xOw0KPiANCj4gLQkvKioN Cj4gLQkgKiBAcGF5bG9hZF9sb2NrOiBQcm90ZWN0IHBheWxvYWQgaW5mb3JtYXRpb24uDQo+IC0J ICovDQo+IC0Jc3RydWN0IG11dGV4IHBheWxvYWRfbG9jazsNCj4gLQkvKioNCj4gLQkgKiBAcHJv cG9zZWRfdmNwaXM6IEFycmF5IG9mIHBvaW50ZXJzIGZvciB0aGUgbmV3IFZDUEkgYWxsb2NhdGlv bi4NCj4gVGhlDQo+IC0JICogVkNQSSBzdHJ1Y3R1cmUgaXRzZWxmIGlzICZkcm1fZHBfbXN0X3Bv cnQudmNwaSwgYW5kIHRoZSBzaXplIG9mDQo+IC0JICogdGhpcyBhcnJheSBpcyBkZXRlcm1pbmVk IGJ5IEBtYXhfcGF5bG9hZHMuDQo+IC0JICovDQo+IC0Jc3RydWN0IGRybV9kcF92Y3BpICoqcHJv cG9zZWRfdmNwaXM7DQo+IC0JLyoqDQo+IC0JICogQHBheWxvYWRzOiBBcnJheSBvZiBwYXlsb2Fk cy4gVGhlIHNpemUgb2YgdGhpcyBhcnJheSBpcyBkZXRlcm1pbmVkDQo+IC0JICogYnkgQG1heF9w YXlsb2Fkcy4NCj4gLQkgKi8NCj4gLQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWRzOw0K PiAtCS8qKg0KPiAtCSAqIEBwYXlsb2FkX21hc2s6IEVsZW1lbnRzIG9mIEBwYXlsb2FkcyBhY3R1 YWxseSBpbiB1c2UuIFNpbmNlDQo+IC0JICogcmVhbGxvY2F0aW9uIG9mIGFjdGl2ZSBvdXRwdXRz IGlzbid0IHBvc3NpYmxlIGdhcHMgY2FuIGJlIGNyZWF0ZWQgYnkNCj4gLQkgKiBkaXNhYmxpbmcg b3V0cHV0cyBvdXQgb2Ygb3JkZXIgY29tcGFyZWQgdG8gaG93IHRoZXkndmUgYmVlbg0KPiBlbmFi bGVkLg0KPiAtCSAqLw0KPiAtCXVuc2lnbmVkIGxvbmcgcGF5bG9hZF9tYXNrOw0KPiAtCS8qKg0K PiAtCSAqIEB2Y3BpX21hc2s6IFNpbWlsYXIgdG8gQHBheWxvYWRfbWFzaywgYnV0IGZvciBAcHJv cG9zZWRfdmNwaXMuDQo+IC0JICovDQo+IC0JdW5zaWduZWQgbG9uZyB2Y3BpX21hc2s7DQo+IC0N Cj4gIAkvKioNCj4gIAkgKiBAdHhfd2FpdHE6IFdhaXQgdG8gcXVldWUgc3RhbGwgZm9yIHRoZSB0 eCB3b3JrZXIuDQo+ICAJICovDQo+IEBAIC04MTUsOSArODAxLDcgQEAgc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyIHsNCj4gIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9pbml0KHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncg0KPiAqbWdyLA0KPiAgCQkJCSBzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2RwX2F1eA0KPiAqYXV4LA0KPiAgCQkJCSBpbnQgbWF4 X2RwY2RfdHJhbnNhY3Rpb25fYnl0ZXMsDQo+IC0JCQkJIGludCBtYXhfcGF5bG9hZHMsDQo+IC0J CQkJIGludCBtYXhfbGFuZV9jb3VudCwgaW50IG1heF9saW5rX3JhdGUsDQo+IC0JCQkJIGludCBj b25uX2Jhc2VfaWQpOw0KPiArCQkJCSBpbnQgbWF4X3BheWxvYWRzLCBpbnQgY29ubl9iYXNlX2lk KTsNCj4gDQo+ICB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2Rlc3Ryb3koc3RydWN0DQo+ IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOw0KPiANCj4gQEAgLTg0MCwyOCArODI0LDE3 IEBAIGludCBkcm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncoY29uc3Qgc3RydWN0DQo+IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+IA0KPiAgaW50IGRybV9kcF9jYWxjX3Bibl9tb2RlKGlu dCBjbG9jaywgaW50IGJwcCwgYm9vbCBkc2MpOw0KPiANCj4gLWJvb2wgZHJtX2RwX21zdF9hbGxv Y2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJICAg ICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibiwgaW50IHNsb3RzKTsNCj4g LQ0KPiAtaW50IGRybV9kcF9tc3RfZ2V0X3ZjcGlfc2xvdHMoc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyICptZ3IsDQo+IHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiAtDQo+ IC0NCj4gLXZvaWQgZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21ncg0KPiAqbWdyLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsNCj4g LQ0KPiAgdm9pZCBkcm1fZHBfbXN0X3VwZGF0ZV9zbG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZQ0KPiAqbXN0X3N0YXRlLCB1aW50OF90IGxpbmtfZW5jb2RpbmdfY2FwKTsNCj4g DQo+IC12b2lkIGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0K PiAtDQo+IC0NCj4gLWludCBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJICAgaW50IHBibik7DQo+IC0NCj4gLQ0KPiAtaW50 IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3INCj4gKm1nciwgaW50IHN0YXJ0X3Nsb3QpOw0KPiAtDQo+IC0NCj4gLWludCBkcm1fZHBfdXBk YXRlX3BheWxvYWRfcGFydDIoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3Ip Ow0KPiAraW50IGRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgKm1zdF9zdGF0ZSwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxv YWQgKnBheWxvYWQpOw0KPiAraW50IGRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MihzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlLA0KPiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9h ZCAqcGF5bG9hZCk7DQo+ICt2b2lkIGRybV9kcF9yZW1vdmVfcGF5bG9hZChzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCQkgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNf cGF5bG9hZCAqcGF5bG9hZCk7DQo+IA0KPiAgaW50IGRybV9kcF9jaGVja19hY3Rfc3RhdHVzKHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gDQo+IEBAIC04ODMsMTcgKzg1 NiwyMiBAQCBpbnQgZHJtX2RwX21zdF9jb25uZWN0b3JfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QNCj4g ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLA0KPiAgdm9pZCBkcm1fZHBfbXN0X2Nvbm5lY3Rvcl9l YXJseV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yDQo+ICpjb25uZWN0b3IsDQo+ICAJ CQkJCSAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiANCj4gLXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlDQo+ICpkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3Rh dGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAtCQkJCQkJCQkgICAgc3RydWN0 DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOw0KPiArc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgKg0KPiArZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gKwkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gK3N0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRl ICoNCj4gK2RybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9h dG9taWNfc3RhdGUNCj4gKnN0YXRlLA0KPiArCQkJCSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyKTsNCj4gK3N0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICoN Cj4gK2RybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlDQo+ICpzdGF0ZSwNCj4gKwkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAq cG9ydCk7DQo+ICBpbnQgX19tdXN0X2NoZWNrDQo+ICBkcm1fZHBfYXRvbWljX2ZpbmRfdGltZV9z bG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJCQkgICAgICBzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgICAgIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQsIGludCBwYm4sDQo+IC0JCQkgICAgICBpbnQgcGJuX2Rpdik7DQo+ICsJ CQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsNCj4gIGludCBk cm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwNCj4gIAkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwNCj4gLQkJCQkgaW50IHBi biwgaW50IHBibl9kaXYsDQo+IC0JCQkJIGJvb2wgZW5hYmxlKTsNCj4gKwkJCQkgaW50IHBibiwg Ym9vbCBlbmFibGUpOw0KPiAgaW50IF9fbXVzdF9jaGVjaw0KPiAgZHJtX2RwX21zdF9hZGRfYWZm ZWN0ZWRfZHNjX2NydGNzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkg IHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gQEAgLTkxNyw2ICs4OTUs MTIgQEAgdm9pZCBkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhzdHJ1Y3QNCj4gZHJtX2RwX21z dF9wb3J0ICpwb3J0KTsNCj4gDQo+ICBzdHJ1Y3QgZHJtX2RwX2F1eCAqZHJtX2RwX21zdF9kc2Nf YXV4X2Zvcl9wb3J0KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiANCj4gK3N0 YXRpYyBpbmxpbmUgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKg0KPiArdG9fZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKQ0K PiArew0KPiArCXJldHVybiBjb250YWluZXJfb2Yoc3RhdGUsIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlLA0KPiBiYXNlKTsNCj4gK30NCj4gKw0KPiAgZXh0ZXJuIGNvbnN0IHN0cnVj dCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcw0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1 bmNzOw0KPiANCj4gIC8qKg0KPiAtLQ0KPiAyLjM1LjMNCg0KLS0NClJlZ2FyZHMsDQpXYXluZSBM aW4NCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 29EB8C433EF for ; Tue, 5 Jul 2022 11:34:33 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 501031127EE; Tue, 5 Jul 2022 11:30:51 +0000 (UTC) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2051.outbound.protection.outlook.com [40.107.95.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4AEF410E021; Tue, 5 Jul 2022 09:11:00 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gMr+j4fM23CTtk+/07Q58GnbOz0xTbRfOQg0iSQh1jTWBqvZw7zyIbZ3sBDIfquiE9TA0e0ewccix8KuZx1/rOPT4VUpJjB6V2Eio7CHsv/8z6mnSOJTENQ7WZcaH/+0zkHr7iAOSHg/Jg8s+c0kzl4+a7II4hYis50xuJsFN5hRgY3plp3yDUZBktQjhuY30P45QbY53g/ZM7c5dlv6iv/tbj0x2vS8s9ajUqpQqHQmOMmHbG9dvWTfRheFLPWM7+x883Ot3bwcTSLd//i+wmK7CnK+Qq8PZBe2HWslhaTv4gAyp6Krqv0y/Cs0RIhtSkiWOUJ/4AEGyWhl2vlPJw== 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=Gj/NtdgojSIUq7nOCXWTipMd/Zt2eV7hUiMWOs6hexY=; b=NkcoFgqqs3bIm38qzbOUsGip4IKG9BUyh0nlBvGKYwRpYuwSxty5PVW1GnTJXDelR38hCqBExuPoNXo75oi9ywfY8K2H+TqxJebixKlniNmWYHLwO5j2INaZUQXxzY/FN9SZ+ap1YwEL6XuPi91A+kZmYjb5umGVpq/vO4dtb2AhrILJbw6e0KqZZpvkk8gxrksPHNLdWVS9Zo1vsFRcQpww5VPsP7/NeBYuhTZjLW8DjoySEexy3OdvKdpLoHnGuQos2UVmi6DbeRRPo6jSgTcz/gWH+Oz+gg3J1wFZ/Va23mKQk2dvRmS+w1LcTHdJRDaQ9eM/k2G3jU/GqHPEbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Gj/NtdgojSIUq7nOCXWTipMd/Zt2eV7hUiMWOs6hexY=; b=yU+i6VaLsRZvNZcERYBBBr5sX5PvGM5o6/hYsWqyr71xXWkWhau6q+ZzVpxghHECcZzkSNrZyxuValoQLT5Jxqa2T/dygkpXpNDOaptqzIlk4jvN3JpFSau1eFhq+rP+ur5+o+DamOVYXw0sdNQAD0xKfowjjeGYP0OU21IIBxY= Received: from CO6PR12MB5489.namprd12.prod.outlook.com (2603:10b6:303:139::18) by MN2PR12MB3280.namprd12.prod.outlook.com (2603:10b6:208:ad::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.15; Tue, 5 Jul 2022 09:10:52 +0000 Received: from CO6PR12MB5489.namprd12.prod.outlook.com ([fe80::68dc:88ad:eb33:1813]) by CO6PR12MB5489.namprd12.prod.outlook.com ([fe80::68dc:88ad:eb33:1813%9]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 09:10:52 +0000 From: "Lin, Wayne" To: Lyude Paul , "dri-devel@lists.freedesktop.org" , "nouveau@lists.freedesktop.org" , "amd-gfx@lists.freedesktop.org" Subject: RE: [RESEND RFC 18/18] drm/display/dp_mst: Move all payload info into the atomic state Thread-Topic: [RESEND RFC 18/18] drm/display/dp_mst: Move all payload info into the atomic state Thread-Index: AQHYeqbgSVnUwi//gUS5WPmor4cgkq1votDQ Date: Tue, 5 Jul 2022 09:10:51 +0000 Message-ID: References: <20220607192933.1333228-1-lyude@redhat.com> <20220607192933.1333228-19-lyude@redhat.com> In-Reply-To: <20220607192933.1333228-19-lyude@redhat.com> Accept-Language: en-US, zh-TW Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Enabled=true; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SetDate=2022-07-05T09:10:48Z; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Method=Privileged; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Name=Public-AIP 2.0; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ActionId=5cbec1ad-20a7-4d95-b855-d10037ba4231; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ad76e268-f54f-4767-6fc2-08da5e664264 x-ms-traffictypediagnostic: MN2PR12MB3280:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 8zlpuonYuORPr2AmBvFywzeAk8Cy8jLnx0NclNDHqosKtIrnBT733BbBSqY+g3AzoT8ZI2GJ23zA89RXgpCssgsJs3PXp9fSKNZagxEz07Bfq4H8CsrDZh17z6ewsErIb1FCYnElDJ3Buyp8OvsnzDYrzZr5t1tawejh2HPyhwDxun9JXBoDra0QN9sTtu+d9kF6T2nYyceQgbwZCxXnHS+7tOTHNXmJBoC4Jm8s85uCopStKETmqvbtpJpeJj4P9g/1bXFKDV5iYtF2Qq60XGuEMpJh0vcFTx6gVbDkyy8Dp+pnOzR+WG7leM+HIoP5DBFObMlbKxq6IDZjWiR81DKnumJlUqc07srWPo8j3ZhaWxvvKiDyZu/h+2ChrwSvuZfv7aM6uyc0UHmf84klScYhkeZ45UDC61dyGfhErUntUyYzmuGntTvDXZ21fr/Aag2GuSiE634yPmdVtb+wKUS8WSrVnwsNSWpTzslGA6FpKPzBHuGxclNlSq7a3eSvrJLqFNTzJdfG4FZoVhICdjHa9bwpfiz7wvE5XZ5Q7MSBCealmNv9oOjI1aNd1jKb+5aN9CEp19TjZetjc3oRuF+NKB5s2BTc7MagpOXjgKylwoOCXRtCr/C+f+cCBX68M9iShUX0R/73Ssdj1VZktqYItoWqjLF/Vdbu1Tr6ntc1qEtCdeIAXES5rjYf5wdpjwgMVID0O4J5fUAXUw8SaEVSKhfrIqVzKRdkRTo0NwnNT0jZFwkuv5QEuoc8DB+4JxYGKUszu+wTuCtqd3n2/ey/7wlOd3zy5i133QpiFUNcYwD1N04vkSaA/mGL+VpV5GGP9Md9Eo8SCYKdocnrUA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR12MB5489.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(39860400002)(136003)(396003)(346002)(376002)(366004)(38100700002)(66946007)(8676002)(4326008)(76116006)(7696005)(66556008)(66476007)(66446008)(64756008)(6506007)(30864003)(7406005)(5660300002)(7416002)(2906002)(86362001)(55016003)(38070700005)(122000001)(53546011)(8936002)(52536014)(478600001)(41300700001)(71200400001)(66574015)(83380400001)(110136005)(54906003)(316002)(186003)(9686003)(33656002)(26005)(21314003)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bk5XMkt6WHV0YnBsbjAvVGRabnQvQjVCckZFaThFVGlMK0ZnUllhWWpyd2da?= =?utf-8?B?djBoMjFuc0FienF1SStGZnNlbkpIT2tLaDk2WDhJUkE0OThRd3d0Qk1TOEhr?= =?utf-8?B?em4vS3dnWTlRLzZicThlOGZJSlh2Q1o5N3dZRjN3K1hIZlg0ZjRFNnJRNXhE?= =?utf-8?B?eVpXUjFOQlRKTGNQMGc3aWVFNTVUcXpid2RCeVptU3Q0eFFGSWdTZngrOCtz?= =?utf-8?B?dXFRcDNOcUJOQVFZbUdzbWVTMExyd2NUcktJWXgzakh2YXp2d0Q1bXVYa01n?= =?utf-8?B?ZmdkcFRZSVVXaTRCeEdTeEwvTkpQSzVMYld5WG5CeWZaZGlGbjlUVkcwdEI1?= =?utf-8?B?TTBESFYrQmhqeERCWnJUVzQ4dVNRenRINVE0dHl5MGdhWGI0ZXBST0tsMkgz?= =?utf-8?B?YThKdDNyN2dRanNCU3JTNDk4K29jZlpiQ0ZTYjZtUEdsNENubHBQRnJZR2Uv?= =?utf-8?B?R3lOOWYrWjJ4eG51NGdCVTM3UUxWdkhWQXBEczk1VU1NMXZBS3dpenBmSzNZ?= =?utf-8?B?UWJqOHUyV3MvM1BYQkYzemtBZmRWQmdsTG5FdDBDTUhzekxiOGxGOWJjeEJL?= =?utf-8?B?M1dlTTE5MkdFaG5VeFhrZGZKU2pjQ0JORmpLRTJlM05scE1IdGVMSkFGQ0NK?= =?utf-8?B?YzVBcmN0QzBiUVIvMnlubkVTVE9UV20vajZBS1EvOWZLd1VsZnA0SStnY0Nm?= =?utf-8?B?MllvNGsySkNjRTU5YVM3OWdRYWZHcUZjYTdzejlvVnY0NW1HY3g4MGhuVkhj?= =?utf-8?B?dEUxdkRmdkF1Y0pGVHhnZnRReHpNMGt2WkorbDBvRUZwcGZLTzZaamdIVXlJ?= =?utf-8?B?bzBDV2NLRHhnbWk5NWNYeDVLTlhWNVUrY05CWFFpNnM4aC9KYmpVTUN5bzBN?= =?utf-8?B?dnFwUk5BK0Y1R1RkQlpOV1pFenBaTmtURXZCUk5FWE82TVk2WHphbktxSElI?= =?utf-8?B?SDlJTFBoYjJrdk85UTNCNmNBanVZdHBkenZOWlZGU3dDZEtrUXA2VUM1aXgw?= =?utf-8?B?U1QvcEtDTngxaDdxWkEwYXBtaWhKQmNiMW4vcDd2VWNYUkRlc3JEZW5yTWdy?= =?utf-8?B?S2tkMmsvLzU5OHFnb3FzRUZPbGUva0RTRk1vSmFwdzdXMWtOcFlybGJjQzJP?= =?utf-8?B?NEtDSWNlYmI2QkRsTlp4WXVKSitQbHZ2K1VHakdJdFBJOUQrNFl3VXFOcHB5?= =?utf-8?B?R3JhblBNWlhxZjlCOEdlTUpUVE5xN1Rlb0VkZnA4djlGTTFiaVpnQUxsY2h5?= =?utf-8?B?NFl1ZDJDaXZmOTdRcUpKZzRwdnd5SDRUaVJsaFluZ2Z1K29TVWVuclYwckN6?= =?utf-8?B?eTVSbTE1cnBOYUhhbW5yb0EyL2l5Rk05Mkp4SEdvQVFRZW9tOHRvWk1FUisz?= =?utf-8?B?bmNvNFFZOHpsNktqdjdKaDMvVGxYbUN6QWUwUU5mWWxFZFdzaExraHE0T1lQ?= =?utf-8?B?Z2hJMDRaSWJObkU2ZWNOSjBTemNNSmdzVmM0NDFQNVV1dWRsWWtEMU1TQlFi?= =?utf-8?B?VEp5cE5GejJ4enRKQTlDMTkzemNvZ2tweVpiV0V0SkFIT3ZWbnJLblMxRUZi?= =?utf-8?B?K3R3Umo4NlpXLzNiRkZPVW1YOG1paGhJa3M5dThKN1I2bWpXNXpURjFGRlZh?= =?utf-8?B?L2ErR0pEUHFxL2RNQXVIaDBSWWc1encwSmVnVjFlMDVYRVBOUmlCRnZkU0Ju?= =?utf-8?B?Z3l0UHhwSVNuT09GOVFRM0VuOHlmcnBUZ0ZOTjdrQWFMM1VYSWxaNTNjQWFL?= =?utf-8?B?dlBqYmlhY004VWpJTHNQb3NnbkZBck1kU0JqUVZ3NU1nM2c5akRVM3kyVVds?= =?utf-8?B?RzNBcWZZd20zakhkUXJmS3hTZ1B2MEIvMTRHZGJVOTU3ZVhpL3NvUTdOV0xH?= =?utf-8?B?ZklNTGhMblhoU0Qvd1hRY2hId1ZCbi96djhzQWgybDJETDlsUjdsbStab3Nr?= =?utf-8?B?WHRERDkrbUVCV09IMGtXTVNOSjdsMitrQjh2N2ZlMGZQWnNwa0NKQVMrU1Ru?= =?utf-8?B?SDNGeE02bGhGakRldXBBbG0yZExzWmZEYXpQUUZFdWhjK1dVRi9Sbkl3YmNH?= =?utf-8?B?TTdWZ2NXSjk3ZTlpVTlvcVlnTlBZcml1ci9oTDJCcHZ3aHUyVGdWbUdtS1NJ?= =?utf-8?Q?Zz9rO5KlxR1jVY03kYTnufj+N?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO6PR12MB5489.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad76e268-f54f-4767-6fc2-08da5e664264 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Jul 2022 09:10:51.9743 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: a2Gy59UpTwSRezLEg1HrNJt3llLKyUcaC7sQQYlajrFi2RG90T56eOm7IUoewRrP54A53Sm0eJEKiF17BSDFlQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3280 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Chen, Ian" , Karol Herbst , David Airlie , Daniel Vetter , =?utf-8?B?Sm9zw6kgUm9iZXJ0byBkZSBTb3V6YQ==?= , open list , "Lei, Jun" , "Lakha, Bhawanpreet" , "Siqueira, Rodrigo" , Javier Martinez Canillas , "Li, Sun peng \(Leo\)" , "Zuo, Jerry" , "Shih, Jude" , Ben Skeggs , Andi Shyti , "Strauss, Michael" , Juston Li , Thomas Zimmermann , Jani Nikula , Anshuman Gupta , "open list:INTEL DRM DRIVERS" , Luo Jiaxing , "Liu, Wenjing" , "Wu, Hersen" , Rodrigo Vivi , "Ma, Leo" , Mikita Lipski , Sean Paul , He Ying , Tvrtko Ursulin , "Pan, Xinhui" , "Li, Roman" , "Koenig, Christian" , Ashutosh Dixit , Claudio Suarez , "Deucher, Alexander" , Sean Paul , Colin Ian King , "Kazlauskas, Nicholas" , Fernando Ramos Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" W1B1YmxpY10NCg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTHl1 ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4NCj4gU2VudDogV2VkbmVzZGF5LCBKdW5lIDgsIDIw MjIgMzozMCBBTQ0KPiBUbzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgbm91dmVh dUBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGFtZC0NCj4gZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zw0KPiBDYzogTGluLCBXYXluZSA8V2F5bmUuTGluQGFtZC5jb20+OyBWaWxsZSBTeXJqw6Rsw6QN Cj4gPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPjsgWnVvLCBKZXJyeSA8SmVycnkuWnVv QGFtZC5jb20+OyBKYW5pIE5pa3VsYQ0KPiA8amFuaS5uaWt1bGFAaW50ZWwuY29tPjsgSW1yZSBE ZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPjsgRGFuaWVsIFZldHRlcg0KPiA8ZGFuaWVsLnZldHRl ckBmZndsbC5jaD47IFNlYW4gUGF1bCA8c2VhbkBwb29ybHkucnVuPjsgV2VudGxhbmQsIEhhcnJ5 DQo+IDxIYXJyeS5XZW50bGFuZEBhbWQuY29tPjsgTGksIFN1biBwZW5nIChMZW8pIDxTdW5wZW5n LkxpQGFtZC5jb20+Ow0KPiBTaXF1ZWlyYSwgUm9kcmlnbyA8Um9kcmlnby5TaXF1ZWlyYUBhbWQu Y29tPjsgRGV1Y2hlciwgQWxleGFuZGVyDQo+IDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsg S29lbmlnLCBDaHJpc3RpYW4NCj4gPENocmlzdGlhbi5Lb2VuaWdAYW1kLmNvbT47IFBhbiwgWGlu aHVpIDxYaW5odWkuUGFuQGFtZC5jb20+OyBEYXZpZA0KPiBBaXJsaWUgPGFpcmxpZWRAbGludXgu aWU+OyBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+OyBKYW5pIE5pa3VsYQ0KPiA8amFu aS5uaWt1bGFAbGludXguaW50ZWwuY29tPjsgSm9vbmFzIExhaHRpbmVuDQo+IDxqb29uYXMubGFo dGluZW5AbGludXguaW50ZWwuY29tPjsgUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwu Y29tPjsNCj4gVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGxpbnV4LmludGVsLmNvbT47 IEJlbiBTa2VnZ3MNCj4gPGJza2VnZ3NAcmVkaGF0LmNvbT47IEthcm9sIEhlcmJzdCA8a2hlcmJz dEByZWRoYXQuY29tPjsgS2F6bGF1c2thcywNCj4gTmljaG9sYXMgPE5pY2hvbGFzLkthemxhdXNr YXNAYW1kLmNvbT47IExpLCBSb21hbg0KPiA8Um9tYW4uTGlAYW1kLmNvbT47IFNoaWgsIEp1ZGUg PEp1ZGUuU2hpaEBhbWQuY29tPjsgU2ltb24gU2VyDQo+IDxjb250YWN0QGVtZXJzaW9uLmZyPjsg TGFraGEsIEJoYXdhbnByZWV0DQo+IDxCaGF3YW5wcmVldC5MYWtoYUBhbWQuY29tPjsgTWlraXRh IExpcHNraSA8bWlraXRhLmxpcHNraUBhbWQuY29tPjsNCj4gQ2xhdWRpbyBTdWFyZXogPGNzc2tA bmV0LWMuZXM+OyBDaGVuLCBJYW4gPElhbi5DaGVuQGFtZC5jb20+OyBDb2xpbiBJYW4NCj4gS2lu ZyA8Y29saW4ua2luZ0BpbnRlbC5jb20+OyBXdSwgSGVyc2VuIDxoZXJzZW54cy53dUBhbWQuY29t PjsgTGl1LA0KPiBXZW5qaW5nIDxXZW5qaW5nLkxpdUBhbWQuY29tPjsgTGVpLCBKdW4gPEp1bi5M ZWlAYW1kLmNvbT47IFN0cmF1c3MsDQo+IE1pY2hhZWwgPE1pY2hhZWwuU3RyYXVzc0BhbWQuY29t PjsgTWEsIExlbyA8SGFuZ2hvbmcuTWFAYW1kLmNvbT47DQo+IFRob21hcyBaaW1tZXJtYW5uIDx0 emltbWVybWFubkBzdXNlLmRlPjsgSm9zw6kgUm9iZXJ0byBkZSBTb3V6YQ0KPiA8am9zZS5zb3V6 YUBpbnRlbC5jb20+OyBIZSBZaW5nIDxoZXlpbmcyNEBodWF3ZWkuY29tPjsgQW5zaHVtYW4NCj4g R3VwdGEgPGFuc2h1bWFuLmd1cHRhQGludGVsLmNvbT47IEFuZGkgU2h5dGkNCj4gPGFuZGkuc2h5 dGlAbGludXguaW50ZWwuY29tPjsgQXNodXRvc2ggRGl4aXQgPGFzaHV0b3NoLmRpeGl0QGludGVs LmNvbT47DQo+IEp1c3RvbiBMaSA8anVzdG9uLmxpQGludGVsLmNvbT47IFNlYW4gUGF1bCA8c2Vh bnBhdWxAY2hyb21pdW0ub3JnPjsNCj4gRmVybmFuZG8gUmFtb3MgPGdyZWVuZm9vQHU5Mi5ldT47 IEx1byBKaWF4aW5nDQo+IDxsdW9qaWF4aW5nQGh1YXdlaS5jb20+OyBKYXZpZXIgTWFydGluZXog Q2FuaWxsYXMgPGphdmllcm1AcmVkaGF0LmNvbT47DQo+IG9wZW4gbGlzdCA8bGludXgta2VybmVs QHZnZXIua2VybmVsLm9yZz47IG9wZW4gbGlzdDpJTlRFTCBEUk0gRFJJVkVSUw0KPiA8aW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4NCj4gU3ViamVjdDogW1JFU0VORCBSRkMgMTgvMThd IGRybS9kaXNwbGF5L2RwX21zdDogTW92ZSBhbGwgcGF5bG9hZCBpbmZvIGludG8NCj4gdGhlIGF0 b21pYyBzdGF0ZQ0KPiANCj4gTm93IHRoYXQgd2UndmUgZmluYWxseSBnb3R0ZW4gcmlkIG9mIHRo ZSBub24tYXRvbWljIE1TVCB1c2VycyBsZWZ0b3ZlciBpbg0KPiB0aGUga2VybmVsLCB3ZSBjYW4g ZmluYWxseSBnZXQgcmlkIG9mIGFsbCBvZiB0aGUgbGVnYWN5IHBheWxvYWQgY29kZSB3ZQ0KPiBo YXZlIGFuZCBtb3ZlIGFzIG11Y2ggYXMgcG9zc2libGUgaW50byB0aGUgTVNUIGF0b21pYyBzdGF0 ZSBzdHJ1Y3RzLiBUaGUNCj4gbWFpbiBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gbWFrZSB0aGUgTVNU IGNvZGUgYSBsb3QgbGVzcyBjb25mdXNpbmcgdG8gd29yaw0KPiBvbiwgYXMgdGhlcmUncyBhIGxv dCBvZiBkdXBsaWNhdGVkIGxvZ2ljIHRoYXQgZG9lc24ndCByZWFsbHkgbmVlZCB0byBiZQ0KPiBo ZXJlLiBBcyB3ZWxsLCB0aGlzIHNob3VsZCBtYWtlIGludHJvZHVjaW5nIGZlYXR1cmVzIGxpa2Ug ZmFsbGJhY2sgbGluaw0KPiByZXRyYWluaW5nIGFuZCBEU0Mgc3VwcG9ydCBmYXIgZWFzaWVyLg0K PiANCj4gU2luY2UgdGhlIG9sZCBwYXlsb2FkIGNvZGUgd2FzIHByZXR0eSBnbmFybHkgYW5kIHRo ZXJlJ3MgYSBMb3Qgb2YgY2hhbmdlcw0KPiBoZXJlLCBJIGV4cGVjdCB0aGlzIG1pZ2h0IGJlIGEg Yml0IGRpZmZpY3VsdCB0byByZXZpZXcuIFNvIHRvIG1ha2UgdGhpbmdzDQo+IGFzIGVhc3kgYXMg cG9zc2libGUgZm9yIHJldmlld2VycywgSSdsbCBzdW0gdXAgaG93IGJvdGggdGhlIG9sZCBhbmQg bmV3DQo+IGNvZGUgd29ya2VkIGhlcmUgKGl0IHRvb2sgbWUgYSB3aGlsZSB0byBmaWd1cmUgdGhp cyBvdXQgdG9vISkuDQo+IA0KPiBUaGUgb2xkIE1TVCBjb2RlIGJhc2ljYWxseSB3b3JrZWQgYnkg bWFpbnRhaW5pbmcgdHdvIGRpZmZlcmVudCBwYXlsb2FkDQo+IHRhYmxlcyAtIHByb3Bvc2VkX3Zj cGlzLCBhbmQgcGF5bG9hZHMuIHByb3Bvc2VkX3ZjcGlzIHdvdWxkIGhvbGQgdGhlDQo+IG1vZGlm aWVkIHBheWxvYWQgd2Ugd2FudGVkIHRvIHB1c2ggdG8gdGhlIHRvcG9sb2d5LCB3aGlsZSBwYXls b2FkcyBoZWxkDQo+IHRoZQ0KPiBwYXlsb2FkIHRhYmxlIHRoYXQgd2FzIGN1cnJlbnRseSBwcm9n cmFtbWVkIGluIGhhcmR3YXJlLiBNb2RpZmljYXRpb25zIHRvDQo+IHByb3Bvc2VkX3ZjcGlzIHdv dWxkIGJlIGhhbmRsZWQgdGhyb3VnaCBkcm1fZHBfYWxsb2NhdGVfdmNwaSgpLA0KPiBkcm1fZHBf bXN0X2RlYWxsb2NhdGVfdmNwaSgpLCBhbmQgZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKCku IFRoZW4sDQo+IHRoZXkNCj4gd291bGQgYmUgcHVzaGVkIHZpYSBkcm1fZHBfbXN0X3VwZGF0ZV9w YXlsb2FkX3N0ZXAxKCkgYW5kDQo+IGRybV9kcF9tc3RfdXBkYXRlX3BheWxvYWRfc3RlcDIoKS4N Cj4gDQo+IEZ1cnRoZXJtb3JlLCBpdCdzIGltcG9ydGFudCB0byBub3RlIGhvdyBhZGRpbmcgYW5k IHJlbW92aW5nIFZDIHBheWxvYWRzDQo+IGFjdHVhbGx5IHdvcmtlZCB3aXRoIGRybV9kcF9tc3Rf dXBkYXRlX3BheWxvYWRfc3RlcDEoKS4gV2hlbiBhIFZDDQo+IHBheWxvYWQNCj4gaXMgcmVtb3Zl ZCBmcm9tIHRoZSBWQyB0YWJsZSwgYWxsIFZDIHBheWxvYWRzIHdoaWNoIGNvbWUgYWZ0ZXIgdGhl IHJlbW92ZWQNCj4gVkMgcGF5bG9hZCdzIHNsb3RzIG11c3QgaGF2ZSB0aGVpciB0aW1lIHNsb3Rz IHNoaWZ0ZWQgdG93YXJkcyB0aGUgc3RhcnQgb2YNCj4gdGhlIHRhYmxlLiBUaGUgb2xkIGNvZGUg aGFuZGxlcyB0aGlzIGJ5IGxvb3BpbmcgdGhyb3VnaCB0aGUgZW50aXJlIHBheWxvYWQNCj4gdGFi bGUgYW5kIHJlY29tcHV0aW5nIHRoZSBzdGFydCBzbG90IGZvciBldmVyeSBwYXlsb2FkIGluIHRo ZSB0b3BvbG9neSBmcm9tDQo+IHNjcmF0Y2guIFdoaWxlIHZlcnkgbXVjaCBvdmVya2lsbCwgdGhp cyBlbmRzIHVwIGRvaW5nIHRoZSByaWdodCB0aGluZw0KPiBiZWNhdXNlIHdlIGFsd2F5cyBvcmRl ciB0aGUgVkNQSXMgZm9yIHBheWxvYWRzIGZyb20gZmlyc3QgdG8gbGFzdCBzdGFydGluZw0KPiB0 aW1lc2xvdC4NCj4gDQo+IEl0J3MgaW1wb3J0YW50IHRvIGFsc28gbm90ZSB0aGF0IGRybV9kcF9t c3RfdXBkYXRlX3BheWxvYWRfc3RlcDIoKSBpc24ndA0KPiBhY3R1YWxseSBsaW1pdGVkIHRvIHVw ZGF0aW5nIGEgc2luZ2xlIHBheWxvYWQgLSB0aGUgZHJpdmVyIGNhbiB1c2UgaXQgdG8NCj4gcXVl dWUgdXAgbXVsdGlwbGUgcGF5bG9hZCBjaGFuZ2VzIHNvIHRoYXQgYXMgbWFueSBvZiB0aGVtIGNh biBiZSBzZW50IGFzDQo+IHBvc3NpYmxlIGJlZm9yZSB3YWl0aW5nIGZvciB0aGUgQUNULg0KDQpI aSBMeXVkZSwNCg0KSSBoYXZlIGNvbmNlcm4gZm9yIHVwZGF0aW5nIHBheWxvYWQgdGFibGUgbXVs dGlwbGUgdGltZXMgZm9yIG11bHRpcGxlIHBheWxvYWQNCmNoYW5nZXMgYmVmb3JlIHNlbmRpbmcg dGhlIEFDVC4gQWxzbyBjb25zdWx0IHdpdGggb25lIGJyYW5jaCB2ZW5kb3IsIHRoZXkgDQpzYXkg dGhlaXIgZncgd2lsbCBleHBlY3QgcmVjZWl2aW5nIG9uZSBBTExPQ0FURV9QQVlMT0FEIGFmdGVy IHNldHRpbmcgRFBDRA0KMDAyYzBoIGJpdCAwIChWQyBwYXlsb2FkIElEIHRhYmxlIHVwZGF0ZWQp Lg0KDQpUaGFua3MhDQo+IA0KPiBkcm1fZHBfbXN0X3VwZGF0ZV9wYXlsb2FkX3N0ZXAyKCkgaXMg cHJldHR5IHNlbGYgZXhwbGFuYXRvcnkgYW5kDQo+IGJhc2ljYWxseQ0KPiB0aGUgc2FtZSBiZXR3 ZWVuIHRoZSBvbGQgYW5kIG5ldyBjb2RlLCBzYXZlIGZvciB0aGUgZmFjdCB3ZSBkb24ndCBoYXZl IGENCj4gc2Vjb25kIHN0ZXAgZm9yIGRlbGV0aW5nIHBheWxvYWRzIGFueW1vcmUgLWFuZCB0aHVz IHJlbmFtZSBpdCB0bw0KPiBkcm1fZHBfbXN0X2FkZF9wYXlsb2FkX3N0ZXAyKCkuDQo+IA0KPiBU aGUgbmV3IHBheWxvYWQgY29kZSBzdG9yZXMgYWxsIG9mIHRoZSBjdXJyZW50IHBheWxvYWQgaW5m byB3aXRoaW4gdGhlIE1TVA0KPiBhdG9taWMgc3RhdGUgYW5kIGNvbXB1dGVzIGFzIG11Y2ggb2Yg dGhlIHN0YXRlIGFzIHBvc3NpYmxlIGFoZWFkIG9mIHRpbWUuDQo+IFRoaXMgaGFzIHRoZSBvbmUg ZXhjZXB0aW9uIG9mIHRoZSBzdGFydGluZyB0aW1lc2xvdHMgZm9yIHBheWxvYWRzLCB3aGljaA0K PiBjYW4ndCBiZSBkZXRlcm1pbmVkIGF0IGF0b21pYyBjaGVjayB0aW1lIHNpbmNlIHRoZSBzdGFy dGluZyB0aW1lIHNsb3RzIHdpbGwNCj4gdmFyeSBkZXBlbmRpbmcgb24gd2hhdCBvcmRlciBDUlRD cyBhcmUgZW5hYmxlZCBpbiB0aGUgYXRvbWljIHN0YXRlIC0gd2hpY2gNCj4gdmFyaWVzIGZyb20g ZHJpdmVyIHRvIGRyaXZlci4gVGhlc2UgYXJlIHN0aWxsIHN0b3JlZCBpbiB0aGUgYXRvbWljIE1T VA0KPiBzdGF0ZSwgYnV0IGFyZSBvbmx5IGNvcGllZCBmcm9tIHRoZSBvbGQgTVNUIHN0YXRlIGR1 cmluZyBhdG9taWMgY29tbWl0DQo+IHRpbWUuIExpa2V3aXNlLCB0aGlzIGlzIHdoZW4gbmV3IHN0 YXJ0IHNsb3RzIGFyZSBkZXRlcm1pbmVkLg0KPiANCj4gQWRkaW5nL3JlbW92aW5nIHBheWxvYWRz IG5vdyB3b3JrcyBtdWNoIG1vcmUgY2xvc2VseSB0byBob3cgdGhpbmdzIGFyZQ0KPiBkZXNjcmli ZWQgaW4gdGhlIHNwZWMuIFdoZW4gd2UgZGVsZXRlIGEgcGF5bG9hZCwgd2UgbG9vcCB0aHJvdWdo IHRoZQ0KPiBjdXJyZW50IGxpc3Qgb2YgcGF5bG9hZHMgYW5kIHVwZGF0ZSB0aGUgc3RhcnQgc2xv dHMgZm9yIGFueSBwYXlsb2FkcyB3aG9zZQ0KPiB0aW1lIHNsb3RzIGNhbWUgYWZ0ZXIgdGhlIHBh eWxvYWQgd2UganVzdCBkZWxldGVkLiBEZXRlcm1pbmluZyB0aGUgc3RhcnRpbmcNCj4gdGltZSBz bG90cyBmb3IgbmV3IHBheWxvYWRzIGJlaW5nIGFkZGVkIGlzIGRvbmUgYnkgc2ltcGx5IGtlZXBp bmcgdHJhY2sgb2YNCj4gd2hlcmUgdGhlIGVuZCBvZiB0aGUgVkMgdGFibGUgaXMgaW4NCj4gZHJt X2RwX21zdF90b3BvbG9neV9tZ3ItPm5leHRfc3RhcnRfc2xvdC4gQWRkaXRpb25hbGx5LCBpdCdz IHdvcnRoIG5vdGluZw0KPiB0aGF0IHdlIG5vIGxvbmdlciBoYXZlIGEgc2luZ2xlIHVwZGF0ZV9w YXlsb2FkKCkgZnVuY3Rpb24uIEluc3RlYWQsIHdlIG5vdw0KPiBoYXZlIGRybV9kcF9tc3RfYWRk X3BheWxvYWRfc3RlcDF8MigpIGFuZA0KPiBkcm1fZHBfbXN0X3JlbW92ZV9wYXlsb2FkKCkuIEFz DQo+IHN1Y2gsIGl0J3Mgbm93IGxlZnQgaXQgdXAgdG8gdGhlIGRyaXZlciB0byBmaWd1cmUgb3V0 IHdoZW4gdG8gYWRkIG9yIHJlbW92ZQ0KPiBwYXlsb2Fkcy4gVGhlIGRyaXZlciBhbHJlYWR5IGtu b3dzIHdoZW4gaXQncyBkaXNhYmxpbmcvZW5hYmxpbmcgQ1JUQ3MsIHNvDQo+IGl0IGFsc28gYWxy ZWFkeSBrbm93cyB3aGVuIHBheWxvYWRzIHNob3VsZCBiZSBhZGRlZCBvciByZW1vdmVkLiBBbmQs IHRoaXMNCj4gZG9lc24ndCBpbnRlcmZlcmUgd2l0aCB0aGUgYWJpbGl0eSB0byBxdWV1ZSB1cCBt dWx0aXBsZSBwYXlsb2FkIGNoYW5nZXMNCj4gYmVmb3JlIHdhaXRpbmcgZm9yIHRoZSBBQ1QuDQo+ IA0KPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPg0KPiBDYzog V2F5bmUgTGluIDxXYXluZS5MaW5AYW1kLmNvbT4NCj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+DQo+IENjOiBGYW5nemhpIFp1byA8SmVycnkuWnVv QGFtZC5jb20+DQo+IENjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPg0KPiBD YzogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPg0KPiBDYzogRGFuaWVsIFZldHRlciA8 ZGFuaWVsLnZldHRlckBmZndsbC5jaD4NCj4gQ2M6IFNlYW4gUGF1bCA8c2VhbkBwb29ybHkucnVu Pg0KPiAtLS0NCj4gIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0u YyB8ICA1NiArLQ0KPiAgLi4uL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG1faGVscGVy cy5jIHwgMTA3ICstLQ0KPiAgLi4uL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9tc3RfdHlw ZXMuYyAgIHwgIDg1ICstLQ0KPiAgLi4uL2FtZC9kaXNwbGF5L2luY2x1ZGUvbGlua19zZXJ2aWNl X3R5cGVzLmggIHwgICA3ICsNCj4gIGRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3Rf dG9wb2xvZ3kuYyB8IDY5OSArKysrKystLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMgICB8ICA2NCArLQ0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9oZGNwLmMgICAgIHwgIDI0ICstDQo+ICBkcml2ZXJzL2dwdS9k cm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMgICAgICAgfCAxNjMgKystLQ0KPiAgaW5jbHVkZS9k cm0vZGlzcGxheS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgMTc4ICsrLS0tDQo+ICA5IGZp bGVzIGNoYW5nZWQsIDUzNiBpbnNlcnRpb25zKCspLCA4NDcgZGVsZXRpb25zKC0pDQo+IA0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVf ZG0uYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2Rt LmMNCj4gaW5kZXggYWM4NjQ4ZTNjMWM5Li45M2Q1NzJlYTNjNDggMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMNCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYw0KPiBAQCAt NzM3OCw2ICs3Mzc4LDcgQEAgc3RhdGljIGludCBkbV9lbmNvZGVyX2hlbHBlcl9hdG9taWNfY2hl Y2soc3RydWN0DQo+IGRybV9lbmNvZGVyICplbmNvZGVyLA0KPiAgCWNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJmNydGNfc3RhdGUtDQo+ID5hZGp1c3RlZF9t b2RlOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbXN0X21ncjsNCj4gIAlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICptc3RfcG9ydDsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCWVudW0gZGNfY29sb3JfZGVwdGggY29sb3Jf ZGVwdGg7DQo+ICAJaW50IGNsb2NrLCBicHAgPSAwOw0KPiAgCWJvb2wgaXNfeTQyMCA9IGZhbHNl Ow0KPiBAQCAtNzM5MSw2ICs3MzkyLDEzIEBAIHN0YXRpYyBpbnQNCj4gZG1fZW5jb2Rlcl9oZWxw ZXJfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwNCj4gIAlpZiAoIWNy dGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdlZCAmJiAhY3J0Y19zdGF0ZS0NCj4gPm1vZGVfY2hh bmdlZCkNCj4gIAkJcmV0dXJuIDA7DQo+IA0KPiArCW1zdF9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbXN0X21ncik7DQo+ICsJaWYgKElTX0VSUihtc3Rf c3RhdGUpKQ0KPiArCQlyZXR1cm4gUFRSX0VSUihtc3Rfc3RhdGUpOw0KPiArDQo+ICsJaWYgKCFt c3Rfc3RhdGUtPnBibl9kaXYpDQo+ICsJCW1zdF9zdGF0ZS0+cGJuX2RpdiA9DQo+IGRtX21zdF9n ZXRfcGJuX2RpdmlkZXIoYWNvbm5lY3Rvci0+bXN0X3BvcnQtPmRjX2xpbmspOw0KPiArDQo+ICAJ aWYgKCFzdGF0ZS0+ZHVwbGljYXRlZCkgew0KPiAgCQlpbnQgbWF4X2JwYyA9IGNvbm5fc3RhdGUt Pm1heF9yZXF1ZXN0ZWRfYnBjOw0KPiAgCQlpc195NDIwID0gZHJtX21vZGVfaXNfNDIwX2Fsc28o JmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLA0KPiBhZGp1c3RlZF9tb2RlKSAmJg0KPiBAQCAtNzQw MiwxMSArNzQxMCwxMCBAQCBzdGF0aWMgaW50DQo+IGRtX2VuY29kZXJfaGVscGVyX2F0b21pY19j aGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsDQo+ICAJCWNsb2NrID0gYWRqdXN0ZWRf bW9kZS0+Y2xvY2s7DQo+ICAJCWRtX25ld19jb25uZWN0b3Jfc3RhdGUtPnBibiA9DQo+IGRybV9k cF9jYWxjX3Bibl9tb2RlKGNsb2NrLCBicHAsIGZhbHNlKTsNCj4gIAl9DQo+IC0JZG1fbmV3X2Nv bm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyA9DQo+IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Ns b3RzKHN0YXRlLA0KPiAtDQo+IG1zdF9tZ3IsDQo+IC0NCj4gbXN0X3BvcnQsDQo+IC0NCj4gZG1f bmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+cGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2RpdmlkZXIo YWNvbm5lY3Rvci0+ZGNfbGluaykpOw0KPiArDQo+ICsJZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+ dmNwaV9zbG90cyA9DQo+ICsJCWRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCBt c3RfbWdyLCBtc3RfcG9ydCwNCj4gKwkJCQkJICAgICAgZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+ cGJuKTsNCj4gIAlpZiAoZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyA8IDApIHsN Cj4gIAkJRFJNX0RFQlVHX0FUT01JQygiZmFpbGVkIGZpbmRpbmcgdmNwaSBzbG90czogJWRcbiIs DQo+IChpbnQpZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyk7DQo+ICAJCXJldHVy biBkbV9uZXdfY29ubmVjdG9yX3N0YXRlLT52Y3BpX3Nsb3RzOw0KPiBAQCAtNzQ3NiwxOCArNzQ4 MywxMiBAQCBzdGF0aWMgaW50DQo+IGRtX3VwZGF0ZV9tc3RfdmNwaV9zbG90c19mb3JfZHNjKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCWRtX2Nvbm5fc3RhdGUtPnBibiA9 IHBibjsNCj4gIAkJCWRtX2Nvbm5fc3RhdGUtPnZjcGlfc2xvdHMgPSBzbG90X251bTsNCj4gDQo+ IC0JCQlkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLA0KPiAtCQkJCQkJICAgICBh Y29ubmVjdG9yLT5wb3J0LA0KPiAtCQkJCQkJICAgICBkbV9jb25uX3N0YXRlLT5wYm4sDQo+IC0J CQkJCQkgICAgIDAsDQo+ICsJCQlkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLCBh Y29ubmVjdG9yLQ0KPiA+cG9ydCwgZG1fY29ubl9zdGF0ZS0+cGJuLA0KPiAgCQkJCQkJICAgICBm YWxzZSk7DQo+ICAJCQljb250aW51ZTsNCj4gIAkJfQ0KPiANCj4gLQkJdmNwaSA9IGRybV9kcF9t c3RfYXRvbWljX2VuYWJsZV9kc2Moc3RhdGUsDQo+IC0JCQkJCQkgICAgYWNvbm5lY3Rvci0+cG9y dCwNCj4gLQkJCQkJCSAgICBwYm4sIHBibl9kaXYsDQo+IC0JCQkJCQkgICAgdHJ1ZSk7DQo+ICsJ CXZjcGkgPSBkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLCBhY29ubmVjdG9yLQ0K PiA+cG9ydCwgcGJuLCB0cnVlKTsNCj4gIAkJaWYgKHZjcGkgPCAwKQ0KPiAgCQkJcmV0dXJuIHZj cGk7DQo+IA0KPiBAQCAtMTA5NDMsOCArMTA5NDQsNiBAQCBzdGF0aWMgaW50IGFtZGdwdV9kbV9h dG9taWNfY2hlY2soc3RydWN0DQo+IGRybV9kZXZpY2UgKmRldiwNCj4gIAlzdHJ1Y3QgZG1fY3J0 Y19zdGF0ZSAqZG1fb2xkX2NydGNfc3RhdGUsICpkbV9uZXdfY3J0Y19zdGF0ZTsNCj4gICNpZiBk ZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gIAlzdHJ1Y3QgZHNjX21zdF9mYWlybmVz c192YXJzIHZhcnNbTUFYX1BJUEVTXTsNCj4gLQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9z dGF0ZSAqbXN0X3N0YXRlOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy Ow0KPiAgI2VuZGlmDQo+IA0KPiAgCXRyYWNlX2FtZGdwdV9kbV9hdG9taWNfY2hlY2tfYmVnaW4o c3RhdGUpOw0KPiBAQCAtMTExODAsMzMgKzExMTc5LDYgQEAgc3RhdGljIGludCBhbWRncHVfZG1f YXRvbWljX2NoZWNrKHN0cnVjdA0KPiBkcm1fZGV2aWNlICpkZXYsDQo+ICAJCWxvY2tfYW5kX3Zh bGlkYXRpb25fbmVlZGVkID0gdHJ1ZTsNCj4gIAl9DQo+IA0KPiAtI2lmIGRlZmluZWQoQ09ORklH X0RSTV9BTURfRENfRENOKQ0KPiAtCS8qIHNldCB0aGUgc2xvdCBpbmZvIGZvciBlYWNoIG1zdF9z dGF0ZSBiYXNlZCBvbiB0aGUgbGluayBlbmNvZGluZw0KPiBmb3JtYXQgKi8NCj4gLQlmb3JfZWFj aF9uZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsNCj4gLQkJ c3RydWN0IGFtZGdwdV9kbV9jb25uZWN0b3IgKmFjb25uZWN0b3I7DQo+IC0JCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3I7DQo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRl ciBpdGVyOw0KPiAtCQl1OCBsaW5rX2NvZGluZ19jYXA7DQo+IC0NCj4gLQkJaWYgKCFtZ3ItPm1z dF9zdGF0ZSApDQo+IC0JCQljb250aW51ZTsNCj4gLQ0KPiAtCQlkcm1fY29ubmVjdG9yX2xpc3Rf aXRlcl9iZWdpbihkZXYsICZpdGVyKTsNCj4gLQkJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVy KGNvbm5lY3RvciwgJml0ZXIpIHsNCj4gLQkJCWludCBpZCA9IGNvbm5lY3Rvci0+aW5kZXg7DQo+ IC0NCj4gLQkJCWlmIChpZCA9PSBtc3Rfc3RhdGUtPm1nci0+Y29ubl9iYXNlX2lkKSB7DQo+IC0J CQkJYWNvbm5lY3RvciA9DQo+IHRvX2FtZGdwdV9kbV9jb25uZWN0b3IoY29ubmVjdG9yKTsNCj4g LQkJCQlsaW5rX2NvZGluZ19jYXAgPQ0KPiBkY19saW5rX2RwX21zdF9kZWNpZGVfbGlua19lbmNv ZGluZ19mb3JtYXQoYWNvbm5lY3Rvci0+ZGNfbGluayk7DQo+IC0JCQkJZHJtX2RwX21zdF91cGRh dGVfc2xvdHMobXN0X3N0YXRlLA0KPiBsaW5rX2NvZGluZ19jYXApOw0KPiAtDQo+IC0JCQkJYnJl YWs7DQo+IC0JCQl9DQo+IC0JCX0NCj4gLQkJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZp dGVyKTsNCj4gLQ0KPiAtCX0NCj4gLSNlbmRpZg0KPiAgCS8qKg0KPiAgCSAqIFN0cmVhbXMgYW5k IHBsYW5lcyBhcmUgcmVzZXQgd2hlbiB0aGVyZSBhcmUgY2hhbmdlcyB0aGF0IGFmZmVjdA0KPiAg CSAqIGJhbmR3aWR0aC4gQW55dGhpbmcgdGhhdCBhZmZlY3RzIGJhbmR3aWR0aCBuZWVkcyB0byBn byB0aHJvdWdoDQo+IGRpZmYgLS1naXQNCj4gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv YW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gaW5kZXggMWVhYWNhYjAzMzRi Li5mODQzZmQ4Njc4N2YgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9hbWRncHVfZG0vYW1kZ3B1X2RtX2hlbHBlcnMuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gQEAgLTI3LDYgKzI3 LDcgQEANCj4gICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvaTJj Lmg+DQo+IA0KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+DQo+ICAjaW5jbHVkZSA8ZHJt L2RybV9wcm9iZV9oZWxwZXIuaD4NCj4gICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPg0KPiAg I2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPg0KPiBAQCAtMTU0LDQwICsxNTUsMzIgQEAgZW51bSBk Y19lZGlkX3N0YXR1cw0KPiBkbV9oZWxwZXJzX3BhcnNlX2VkaWRfY2FwcygNCj4gIH0NCj4gDQo+ ICBzdGF0aWMgdm9pZA0KPiAtZmlsbF9kY19tc3RfcGF5bG9hZF90YWJsZV9mcm9tX2RybShzdHJ1 Y3QgYW1kZ3B1X2RtX2Nvbm5lY3Rvcg0KPiAqYWNvbm5lY3RvciwNCj4gLQkJCQkgICBzdHJ1Y3Qg ZGNfZHBfbXN0X3N0cmVhbV9hbGxvY2F0aW9uX3RhYmxlDQo+ICpwcm9wb3NlZF90YWJsZSkNCj4g K2ZpbGxfZGNfbXN0X3BheWxvYWRfdGFibGVfZnJvbV9kcm0oc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUNCj4gKm1zdF9zdGF0ZSwNCj4gKwkJCQkgICBzdHJ1Y3QgYW1kZ3B1X2RtX2Nv bm5lY3RvciAqYWNvbm5lY3RvciwNCj4gKwkJCQkgICBzdHJ1Y3QgZGNfZHBfbXN0X3N0cmVhbV9h bGxvY2F0aW9uX3RhYmxlDQo+ICp0YWJsZSkNCj4gIHsNCj4gKwlzdHJ1Y3QgZGNfZHBfbXN0X3N0 cmVhbV9hbGxvY2F0aW9uX3RhYmxlIG5ld190YWJsZSA9IHsgMCB9Ow0KPiArCXN0cnVjdCBkY19k cF9tc3Rfc3RyZWFtX2FsbG9jYXRpb24gKnNhOw0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21p Y19wYXlsb2FkICpwYXlsb2FkOw0KPiAgCWludCBpOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbXN0X21nciA9DQo+IC0JCQkmYWNvbm5lY3Rvci0+bXN0X3BvcnQtPm1zdF9t Z3I7DQo+IA0KPiAtCW11dGV4X2xvY2soJm1zdF9tZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0NCj4g LQlwcm9wb3NlZF90YWJsZS0+c3RyZWFtX2NvdW50ID0gMDsNCj4gLQ0KPiAtCS8qIG51bWJlciBv ZiBhY3RpdmUgc3RyZWFtcyAqLw0KPiAtCWZvciAoaSA9IDA7IGkgPCBtc3RfbWdyLT5tYXhfcGF5 bG9hZHM7IGkrKykgew0KPiAtCQlpZiAobXN0X21nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzID09 IDApDQo+IC0JCQlicmVhazsgLyogZW5kIG9mIHZjcF9pZCB0YWJsZSAqLw0KPiAtDQo+IC0JCUFT U0VSVChtc3RfbWdyLT5wYXlsb2Fkc1tpXS5wYXlsb2FkX3N0YXRlICE9DQo+IC0JCQkJRFBfUEFZ TE9BRF9ERUxFVEVfTE9DQUwpOw0KPiAtDQo+IC0JCWlmIChtc3RfbWdyLT5wYXlsb2Fkc1tpXS5w YXlsb2FkX3N0YXRlID09DQo+IERQX1BBWUxPQURfTE9DQUwgfHwNCj4gLQkJCW1zdF9tZ3ItPnBh eWxvYWRzW2ldLnBheWxvYWRfc3RhdGUgPT0NCj4gLQkJCQkJRFBfUEFZTE9BRF9SRU1PVEUpIHsN Cj4gLQ0KPiAtCQkJc3RydWN0IGRjX2RwX21zdF9zdHJlYW1fYWxsb2NhdGlvbiAqc2EgPQ0KPiAt CQkJCQkmcHJvcG9zZWRfdGFibGUtDQo+ID5zdHJlYW1fYWxsb2NhdGlvbnNbDQo+IC0JCQkJCQlw cm9wb3NlZF90YWJsZS0NCj4gPnN0cmVhbV9jb3VudF07DQo+IC0NCj4gLQkJCXNhLT5zbG90X2Nv dW50ID0gbXN0X21nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzOw0KPiAtCQkJc2EtPnZjcF9pZCA9 IG1zdF9tZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldLT52Y3BpOw0KPiAtCQkJcHJvcG9zZWRfdGFibGUt PnN0cmVhbV9jb3VudCsrOw0KPiAtCQl9DQo+ICsJLyogQ29weSBvdmVyIHBheWxvYWRzICovDQo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXlsb2FkLCAmbXN0X3N0YXRlLT5wYXlsb2FkcywgbmV4 dCkgew0KPiArCQlpZiAocGF5bG9hZC0+ZGVsZXRlKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4g KwkJc2EgPQ0KPiAmbmV3X3RhYmxlLnN0cmVhbV9hbGxvY2F0aW9uc1tuZXdfdGFibGUuc3RyZWFt X2NvdW50XTsNCj4gKwkJc2EtPnNsb3RfY291bnQgPSBwYXlsb2FkLT50aW1lX3Nsb3RzOw0KPiAr CQlzYS0+dmNwX2lkID0gcGF5bG9hZC0+dmNwaTsNCj4gKwkJc2EtPnBvcnQgPSBwYXlsb2FkLT5w b3J0Ow0KPiArCQlkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYyhzYS0+cG9ydCk7DQo+ICsJCW5l d190YWJsZS5zdHJlYW1fY291bnQrKzsNCj4gIAl9DQo+IA0KPiAtCW11dGV4X3VubG9jaygmbXN0 X21nci0+cGF5bG9hZF9sb2NrKTsNCj4gKwkvKiBSZWxlYXNlIHRoZSBvbGQgdGFibGUsIGFuZCBj b3B5IG92ZXIgdGhlIG5ldyBvbmUgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPnN0cmVh bV9jb3VudDsgaSsrKQ0KPiArCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyh0YWJsZS0NCj4g PnN0cmVhbV9hbGxvY2F0aW9uc1tpXS5wb3J0KTsNCj4gKwkqdGFibGUgPSBuZXdfdGFibGU7DQo+ ICB9DQo+IA0KPiAgdm9pZCBkbV9oZWxwZXJzX2RwX3VwZGF0ZV9icmFuY2hfaW5mbygNCj4gQEAg LTIwNSwxMSArMTk4LDkgQEAgYm9vbA0KPiBkbV9oZWxwZXJzX2RwX21zdF93cml0ZV9wYXlsb2Fk X2FsbG9jYXRpb25fdGFibGUoDQo+ICAJCWJvb2wgZW5hYmxlKQ0KPiAgew0KPiAgCXN0cnVjdCBh bWRncHVfZG1fY29ubmVjdG9yICphY29ubmVjdG9yOw0KPiAtCXN0cnVjdCBkbV9jb25uZWN0b3Jf c3RhdGUgKmRtX2Nvbm5fc3RhdGU7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgKm1zdF9zdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAqcGF5 bG9hZDsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1zdF9tZ3I7DQo+IC0J c3RydWN0IGRybV9kcF9tc3RfcG9ydCAqbXN0X3BvcnQ7DQo+IC0JYm9vbCByZXQ7DQo+IC0JdTgg bGlua19jb2RpbmdfY2FwID0gRFBfOGJfMTBiX0VOQ09ESU5HOw0KPiANCj4gIAlhY29ubmVjdG9y ID0gKHN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICopc3RyZWFtLQ0KPiA+ZG1fc3RyZWFtX2Nv bnRleHQ7DQo+ICAJLyogQWNjZXNzaW5nIHRoZSBjb25uZWN0b3Igc3RhdGUgaXMgcmVxdWlyZWQg Zm9yIHZjcGlfc2xvdHMgYWxsb2NhdGlvbg0KPiBAQCAtMjIwLDQwICsyMTEsMjEgQEAgYm9vbA0K PiBkbV9oZWxwZXJzX2RwX21zdF93cml0ZV9wYXlsb2FkX2FsbG9jYXRpb25fdGFibGUoDQo+ICAJ aWYgKCFhY29ubmVjdG9yIHx8ICFhY29ubmVjdG9yLT5tc3RfcG9ydCkNCj4gIAkJcmV0dXJuIGZh bHNlOw0KPiANCj4gLQlkbV9jb25uX3N0YXRlID0gdG9fZG1fY29ubmVjdG9yX3N0YXRlKGFjb25u ZWN0b3ItPmJhc2Uuc3RhdGUpOw0KPiAtDQo+ICAJbXN0X21nciA9ICZhY29ubmVjdG9yLT5tc3Rf cG9ydC0+bXN0X21ncjsNCj4gLQ0KPiAtCWlmICghbXN0X21nci0+bXN0X3N0YXRlKQ0KPiAtCQly ZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQltc3RfcG9ydCA9IGFjb25uZWN0b3ItPnBvcnQ7DQo+IC0N Cj4gLSNpZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gLQlsaW5rX2NvZGluZ19j YXAgPQ0KPiBkY19saW5rX2RwX21zdF9kZWNpZGVfbGlua19lbmNvZGluZ19mb3JtYXQoYWNvbm5l Y3Rvci0+ZGNfbGluayk7DQo+IC0jZW5kaWYNCj4gLQ0KPiAtCWlmIChlbmFibGUpIHsNCj4gLQ0K PiAtCQlyZXQgPSBkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkobXN0X21nciwgbXN0X3BvcnQsDQo+ IC0JCQkJCSAgICAgICBkbV9jb25uX3N0YXRlLT5wYm4sDQo+IC0JCQkJCSAgICAgICBkbV9jb25u X3N0YXRlLT52Y3BpX3Nsb3RzKTsNCj4gLQkJaWYgKCFyZXQpDQo+IC0JCQlyZXR1cm4gZmFsc2U7 DQo+IC0NCj4gLQl9IGVsc2Ugew0KPiAtCQlkcm1fZHBfbXN0X3Jlc2V0X3ZjcGlfc2xvdHMobXN0 X21nciwgbXN0X3BvcnQpOw0KPiAtCX0NCj4gKwltc3Rfc3RhdGUgPSB0b19kcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlKG1zdF9tZ3ItPmJhc2Uuc3RhdGUpOw0KPiANCj4gIAkvKiBJdCdzIE9LIGZv ciB0aGlzIHRvIGZhaWwgKi8NCj4gLQlkcm1fZHBfdXBkYXRlX3BheWxvYWRfcGFydDEobXN0X21n ciwgKGxpbmtfY29kaW5nX2NhcCA9PQ0KPiBEUF9DQVBfQU5TSV8xMjhCMTMyQikgPyAwOjEpOw0K PiArCXBheWxvYWQgPSBkcm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUs DQo+IGFjb25uZWN0b3ItPnBvcnQpOw0KPiArCWlmIChlbmFibGUpDQo+ICsJCWRybV9kcF9hZGRf cGF5bG9hZF9wYXJ0MShtc3RfbWdyLCBtc3Rfc3RhdGUsIHBheWxvYWQpOw0KPiArCWVsc2UNCj4g KwkJZHJtX2RwX3JlbW92ZV9wYXlsb2FkKG1zdF9tZ3IsIG1zdF9zdGF0ZSwgcGF5bG9hZCk7DQo+ IA0KPiAgCS8qIG1zdF9tZ3ItPi0+cGF5bG9hZHMgYXJlIFZDIHBheWxvYWQgbm90aWZ5IE1TVCBi cmFuY2ggdXNpbmcNCj4gRFBDRCBvcg0KPiAgCSAqIEFVWCBtZXNzYWdlLiBUaGUgc2VxdWVuY2Ug aXMgc2xvdCAxLTYzIGFsbG9jYXRlZCBzZXF1ZW5jZSBmb3INCj4gZWFjaA0KPiAgCSAqIHN0cmVh bS4gQU1EIEFTSUMgc3RyZWFtIHNsb3QgYWxsb2NhdGlvbiBzaG91bGQgZm9sbG93IHRoZSBzYW1l DQo+ICAJICogc2VxdWVuY2UuIGNvcHkgRFJNIE1TVCBhbGxvY2F0aW9uIHRvIGRjICovDQo+IC0N Cj4gLQlmaWxsX2RjX21zdF9wYXlsb2FkX3RhYmxlX2Zyb21fZHJtKGFjb25uZWN0b3IsIHByb3Bv c2VkX3RhYmxlKTsNCj4gKwlmaWxsX2RjX21zdF9wYXlsb2FkX3RhYmxlX2Zyb21fZHJtKG1zdF9z dGF0ZSwgYWNvbm5lY3RvciwNCj4gcHJvcG9zZWRfdGFibGUpOw0KPiANCj4gIAlyZXR1cm4gdHJ1 ZTsNCj4gIH0NCj4gQEAgLTMxMCwyNiArMjgyLDIzIEBAIGJvb2wNCj4gZG1faGVscGVyc19kcF9t c3Rfc2VuZF9wYXlsb2FkX2FsbG9jYXRpb24oDQo+ICAJCWJvb2wgZW5hYmxlKQ0KPiAgew0KPiAg CXN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICphY29ubmVjdG9yOw0KPiArCXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptc3RfbWdyOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKm1zdF9w b3J0Ow0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICpwYXlsb2FkOw0KPiAN Cj4gIAlhY29ubmVjdG9yID0gKHN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICopc3RyZWFtLQ0K PiA+ZG1fc3RyZWFtX2NvbnRleHQ7DQo+IA0KPiAgCWlmICghYWNvbm5lY3RvciB8fCAhYWNvbm5l Y3Rvci0+bXN0X3BvcnQpDQo+ICAJCXJldHVybiBmYWxzZTsNCj4gDQo+IC0JbXN0X3BvcnQgPSBh Y29ubmVjdG9yLT5wb3J0Ow0KPiAtDQo+ICAJbXN0X21nciA9ICZhY29ubmVjdG9yLT5tc3RfcG9y dC0+bXN0X21ncjsNCj4gLQ0KPiAtCWlmICghbXN0X21nci0+bXN0X3N0YXRlKQ0KPiAtCQlyZXR1 cm4gZmFsc2U7DQo+ICsJbXN0X3N0YXRlID0gdG9fZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSht c3RfbWdyLT5iYXNlLnN0YXRlKTsNCj4gDQo+ICAJLyogSXQncyBPSyBmb3IgdGhpcyB0byBmYWls ICovDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQyKG1zdF9tZ3IpOw0KPiAtDQo+IC0J aWYgKCFlbmFibGUpDQo+IC0JCWRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKG1zdF9tZ3IsIG1z dF9wb3J0KTsNCj4gKwlpZiAoZW5hYmxlKSB7DQo+ICsJCXBheWxvYWQgPSBkcm1fYXRvbWljX2dl dF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUsDQo+IGFjb25uZWN0b3ItPnBvcnQpOw0KPiAr CQlkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIobXN0X21nciwgbXN0X3N0YXRlLQ0KPiA+YmFzZS5z dGF0ZSwgcGF5bG9hZCk7DQo+ICsJfQ0KPiANCj4gIAlyZXR1cm4gdHJ1ZTsNCj4gIH0NCj4gZGlm ZiAtLWdpdA0KPiBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1 X2RtX21zdF90eXBlcy5jDQo+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9k bS9hbWRncHVfZG1fbXN0X3R5cGVzLmMNCj4gaW5kZXggYjQ0N2M0NTNiNThkLi4xOGRlNGE5OGRm NDAgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0v YW1kZ3B1X2RtX21zdF90eXBlcy5jDQo+ICsrKw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtX21zdF90eXBlcy5jDQo+IEBAIC01MDEsMTUgKzUwMSw4 IEBAIHZvaWQgYW1kZ3B1X2RtX2luaXRpYWxpemVfZHBfY29ubmVjdG9yKHN0cnVjdA0KPiBhbWRn cHVfZGlzcGxheV9tYW5hZ2VyICpkbSwNCj4gDQo+ICAJZGNfbGlua19kcF9nZXRfbWF4X2xpbmtf ZW5jX2NhcChhY29ubmVjdG9yLT5kY19saW5rLA0KPiAmbWF4X2xpbmtfZW5jX2NhcCk7DQo+ICAJ YWNvbm5lY3Rvci0+bXN0X21nci5jYnMgPSAmZG1fbXN0X2NiczsNCj4gLQlkcm1fZHBfbXN0X3Rv cG9sb2d5X21ncl9pbml0KA0KPiAtCQkmYWNvbm5lY3Rvci0+bXN0X21nciwNCj4gLQkJYWRldl90 b19kcm0oZG0tPmFkZXYpLA0KPiAtCQkmYWNvbm5lY3Rvci0+ZG1fZHBfYXV4LmF1eCwNCj4gLQkJ MTYsDQo+IC0JCTQsDQo+IC0JCW1heF9saW5rX2VuY19jYXAubGFuZV9jb3VudCwNCj4gLQ0KPiAJ ZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKG1heF9saW5rX2VuY19jYXAubGlua19yYXRlKSwN Cj4gLQkJYWNvbm5lY3Rvci0+Y29ubmVjdG9yX2lkKTsNCj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5 X21ncl9pbml0KCZhY29ubmVjdG9yLT5tc3RfbWdyLA0KPiBhZGV2X3RvX2RybShkbS0+YWRldiks DQo+ICsJCQkJICAgICAmYWNvbm5lY3Rvci0+ZG1fZHBfYXV4LmF1eCwgMTYsIDQsDQo+IGFjb25u ZWN0b3ItPmNvbm5lY3Rvcl9pZCk7DQo+IA0KPiAgCWRybV9jb25uZWN0b3JfYXR0YWNoX2RwX3N1 YmNvbm5lY3Rvcl9wcm9wZXJ0eSgmYWNvbm5lY3Rvci0NCj4gPmJhc2UpOw0KPiAgfQ0KPiBAQCAt NjE0LDYgKzYwNyw3IEBAIHN0YXRpYyBpbnQgYnBwX3gxNl9mcm9tX3BibihzdHJ1Y3QNCj4gZHNj X21zdF9mYWlybmVzc19wYXJhbXMgcGFyYW0sIGludCBwYm4pDQo+ICB9DQo+IA0KPiAgc3RhdGlj IHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ ICsJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ ICAJCQkgICAgIHN0cnVjdCBkY19saW5rICpkY19saW5rLA0KPiAgCQkJICAgICBzdHJ1Y3QgZHNj X21zdF9mYWlybmVzc19wYXJhbXMgKnBhcmFtcywNCj4gIAkJCSAgICAgc3RydWN0IGRzY19tc3Rf ZmFpcm5lc3NfdmFycyAqdmFycywNCj4gQEAgLTYyNiwxMiArNjIwLDkgQEAgc3RhdGljIHZvaWQg aW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJ aW50IG1pbl9pbml0aWFsX3NsYWNrOw0KPiAgCWludCBuZXh0X2luZGV4Ow0KPiAgCWludCByZW1h aW5pbmdfdG9faW5jcmVhc2UgPSAwOw0KPiAtCWludCBwYm5fcGVyX3RpbWVzbG90Ow0KPiAgCWlu dCBsaW5rX3RpbWVzbG90c191c2VkOw0KPiAgCWludCBmYWlyX3Bibl9hbGxvYzsNCj4gDQo+IC0J cGJuX3Blcl90aW1lc2xvdCA9IGRtX21zdF9nZXRfcGJuX2RpdmlkZXIoZGNfbGluayk7DQo+IC0N Cj4gIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgew0KPiAgCQlpZiAodmFyc1tpICsga10u ZHNjX2VuYWJsZWQpIHsNCj4gIAkJCWluaXRpYWxfc2xhY2tbaV0gPQ0KPiBAQCAtNjYyLDE3ICs2 NTMsMTcgQEAgc3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsDQo+ICAJCWxpbmtfdGltZXNsb3RzX3VzZWQgPSAwOw0KPiANCj4gIAkJ Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspDQo+IC0JCQlsaW5rX3RpbWVzbG90c191c2VkICs9 IERJVl9ST1VORF9VUCh2YXJzW2kgKw0KPiBrXS5wYm4sIHBibl9wZXJfdGltZXNsb3QpOw0KPiAr CQkJbGlua190aW1lc2xvdHNfdXNlZCArPSBESVZfUk9VTkRfVVAodmFyc1tpICsNCj4ga10ucGJu LCBtc3Rfc3RhdGUtPnBibl9kaXYpOw0KPiANCj4gLQkJZmFpcl9wYm5fYWxsb2MgPSAoNjMgLSBs aW5rX3RpbWVzbG90c191c2VkKSAvDQo+IHJlbWFpbmluZ190b19pbmNyZWFzZSAqIHBibl9wZXJf dGltZXNsb3Q7DQo+ICsJCWZhaXJfcGJuX2FsbG9jID0NCj4gKwkJCSg2MyAtIGxpbmtfdGltZXNs b3RzX3VzZWQpIC8gcmVtYWluaW5nX3RvX2luY3JlYXNlICoNCj4gbXN0X3N0YXRlLT5wYm5fZGl2 Ow0KPiANCj4gIAkJaWYgKGluaXRpYWxfc2xhY2tbbmV4dF9pbmRleF0gPiBmYWlyX3Bibl9hbGxv Yykgew0KPiAgCQkJdmFyc1tuZXh0X2luZGV4XS5wYm4gKz0gZmFpcl9wYm5fYWxsb2M7DQo+ICAJ CQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+IA0KPiBwYXJhbXNb bmV4dF9pbmRleF0ucG9ydC0+bWdyLA0KPiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQsDQo+ IC0NCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0JCQkJCQkJICBwYm5fcGVyX3RpbWVzbG90 KSA8DQo+IDApDQo+ICsNCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4pIDwgMCkNCj4gIAkJCQlyZXR1 cm47DQo+ICAJCQlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKSkgew0KPiAgCQkJ CXZhcnNbbmV4dF9pbmRleF0uYnBwX3gxNiA9DQo+IGJwcF94MTZfZnJvbV9wYm4ocGFyYW1zW25l eHRfaW5kZXhdLCB2YXJzW25leHRfaW5kZXhdLnBibik7DQo+IEBAIC02ODEsOCArNjcyLDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0K PiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5wb3J0LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IHBibl9wZXJf dGltZXNsb3QpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJ CQlyZXR1cm47DQo+ICAJCQl9DQo+ICAJCX0gZWxzZSB7DQo+IEBAIC02OTAsOCArNjgwLDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+ IA0KPiBwYXJhbXNbbmV4dF9pbmRleF0ucG9ydC0+bWdyLA0KPiANCj4gcGFyYW1zW25leHRfaW5k ZXhdLnBvcnQsDQo+IC0NCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0JCQkJCQkJICBwYm5f cGVyX3RpbWVzbG90KSA8DQo+IDApDQo+ICsNCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4pIDwgMCkN Cj4gIAkJCQlyZXR1cm47DQo+ICAJCQlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRl KSkgew0KPiAgCQkJCXZhcnNbbmV4dF9pbmRleF0uYnBwX3gxNiA9DQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5id19yYW5nZS5tYXhfdGFyZ2V0X2JwcF94MTY7DQo+IEBAIC03MDAsOCArNjg5LDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0K PiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5wb3J0LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IHBibl9wZXJf dGltZXNsb3QpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJ CQlyZXR1cm47DQo+ICAJCQl9DQo+ICAJCX0NCj4gQEAgLTc1Nyw4ICs3NDUsNyBAQCBzdGF0aWMg dm9pZCB0cnlfZGlzYWJsZV9kc2Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUNCj4gKnN0YXRlLA0K PiAgCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+ICAJCQkJCQkg IHBhcmFtc1tuZXh0X2luZGV4XS5wb3J0LQ0KPiA+bWdyLA0KPiAgCQkJCQkJICBwYXJhbXNbbmV4 dF9pbmRleF0ucG9ydCwNCj4gLQkJCQkJCSAgdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0NCj4g ZG1fbXN0X2dldF9wYm5fZGl2aWRlcihkY19saW5rKSkgPCAwKQ0KPiArCQkJCQkJICB2YXJzW25l eHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJcmV0dXJuOw0KPiANCj4gIAkJaWYgKCFkcm1fZHBf bXN0X2F0b21pY19jaGVjayhzdGF0ZSkpIHsNCj4gQEAgLTc2OSw4ICs3NTYsNyBAQCBzdGF0aWMg dm9pZCB0cnlfZGlzYWJsZV9kc2Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUNCj4gKnN0YXRlLA0K PiAgCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0KPiANCj4gcGFy YW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2luZGV4XS5wb3J0 LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2Rp dmlkZXIoZGNfbGluaykpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0K PiAgCQkJCXJldHVybjsNCj4gIAkJfQ0KPiANCj4gQEAgLTc4MywxNyArNzY5LDI3IEBAIHN0YXRp YyBib29sDQo+IGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkJICAgICBzdHJ1Y3QgZGNfc3RhdGUgKmRjX3N0YXRl LA0KPiAgCQkJCQkgICAgIHN0cnVjdCBkY19saW5rICpkY19saW5rLA0KPiAgCQkJCQkgICAgIHN0 cnVjdCBkc2NfbXN0X2ZhaXJuZXNzX3ZhcnMgKnZhcnMsDQo+ICsJCQkJCSAgICAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3IsDQo+ICAJCQkJCSAgICAgaW50ICpsaW5rX3Zh cnNfc3RhcnRfaW5kZXgpDQo+ICB7DQo+IC0JaW50IGksIGs7DQo+ICAJc3RydWN0IGRjX3N0cmVh bV9zdGF0ZSAqc3RyZWFtOw0KPiAgCXN0cnVjdCBkc2NfbXN0X2ZhaXJuZXNzX3BhcmFtcyBwYXJh bXNbTUFYX1BJUEVTXTsNCj4gIAlzdHJ1Y3QgYW1kZ3B1X2RtX2Nvbm5lY3RvciAqYWNvbm5lY3Rv cjsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4g ZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOw0KPiAgCWludCBj b3VudCA9IDA7DQo+ICsJaW50IGksIGs7DQo+ICAJYm9vbCBkZWJ1Z2ZzX292ZXJ3cml0ZSA9IGZh bHNlOw0KPiANCj4gIAltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7DQo+IA0KPiAr CWlmIChJU19FUlIobXN0X3N0YXRlKSkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJbXN0 X3N0YXRlLT5wYm5fZGl2ID0gZG1fbXN0X2dldF9wYm5fZGl2aWRlcihkY19saW5rKTsNCj4gKyNp ZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gKwlkcm1fZHBfbXN0X3VwZGF0ZV9z bG90cyhtc3Rfc3RhdGUsDQo+IGRjX2xpbmtfZHBfbXN0X2RlY2lkZV9saW5rX2VuY29kaW5nX2Zv cm1hdChkY19saW5rKSk7DQo+ICsjZW5kaWYNCj4gKw0KPiAgCS8qIFNldCB1cCBwYXJhbXMgKi8N Cj4gIAlmb3IgKGkgPSAwOyBpIDwgZGNfc3RhdGUtPnN0cmVhbV9jb3VudDsgaSsrKSB7DQo+ICAJ CXN0cnVjdCBkY19kc2NfcG9saWN5IGRzY19wb2xpY3kgPSB7MH07DQo+IEBAIC04NTIsMTEgKzg0 OCw4IEBAIHN0YXRpYyBib29sDQo+IGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJdmFyc1tpICsga10ucGJuID0NCj4g a2Jwc190b19wZWFrX3BibihwYXJhbXNbaV0uYndfcmFuZ2Uuc3RyZWFtX2ticHMpOw0KPiAgCQl2 YXJzW2kgKyBrXS5kc2NfZW5hYmxlZCA9IGZhbHNlOw0KPiAgCQl2YXJzW2kgKyBrXS5icHBfeDE2 ID0gMDsNCj4gLQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0KPiAt CQkJCQkJICBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiAtCQkJCQkJICBwYXJhbXNbaV0ucG9ydCwN Cj4gLQkJCQkJCSAgdmFyc1tpICsga10ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2Rpdmlk ZXIoZGNfbGluaykpIDwgMCkNCj4gKwkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3Rz KHN0YXRlLCBwYXJhbXNbaV0ucG9ydC0NCj4gPm1nciwgcGFyYW1zW2ldLnBvcnQsDQo+ICsJCQkJ CQkgIHZhcnNbaSArIGtdLnBibikgPCAwKQ0KPiAgCQkJcmV0dXJuIGZhbHNlOw0KPiAgCX0NCj4g IAlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKSAmJiAhZGVidWdmc19vdmVyd3Jp dGUpIHsNCj4gQEAgLTg3MCwyMSArODYzLDE1IEBAIHN0YXRpYyBib29sDQo+IGNvbXB1dGVfbXN0 X2RzY19jb25maWdzX2Zvcl9saW5rKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4g IAkJCXZhcnNbaSArIGtdLnBibiA9DQo+IGticHNfdG9fcGVha19wYm4ocGFyYW1zW2ldLmJ3X3Jh bmdlLm1pbl9rYnBzKTsNCj4gIAkJCXZhcnNbaSArIGtdLmRzY19lbmFibGVkID0gdHJ1ZTsNCj4g IAkJCXZhcnNbaSArIGtdLmJwcF94MTYgPQ0KPiBwYXJhbXNbaV0uYndfcmFuZ2UubWluX3Rhcmdl dF9icHBfeDE2Ow0KPiAtCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRl LA0KPiAtCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQtPm1nciwNCj4gLQkJCQkJCQkgIHBhcmFtc1tp XS5wb3J0LA0KPiAtCQkJCQkJCSAgdmFyc1tpICsga10ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRf cGJuX2RpdmlkZXIoZGNfbGluaykpIDwgMCkNCj4gKwkJCWlmIChkcm1fZHBfYXRvbWljX2ZpbmRf dGltZV9zbG90cyhzdGF0ZSwNCj4gcGFyYW1zW2ldLnBvcnQtPm1nciwNCj4gKwkJCQkJCQkgIHBh cmFtc1tpXS5wb3J0LCB2YXJzW2kNCj4gKyBrXS5wYm4pIDwgMCkNCj4gIAkJCQlyZXR1cm4gZmFs c2U7DQo+ICAJCX0gZWxzZSB7DQo+ICAJCQl2YXJzW2kgKyBrXS5wYm4gPQ0KPiBrYnBzX3RvX3Bl YWtfcGJuKHBhcmFtc1tpXS5id19yYW5nZS5zdHJlYW1fa2Jwcyk7DQo+ICAJCQl2YXJzW2kgKyBr XS5kc2NfZW5hYmxlZCA9IGZhbHNlOw0KPiAgCQkJdmFyc1tpICsga10uYnBwX3gxNiA9IDA7DQo+ IC0JCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+IC0JCQkJCQkJ ICBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiAtCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQsDQo+IC0J CQkJCQkJICB2YXJzW2kgKyBrXS5wYm4sDQo+IC0NCj4gZG1fbXN0X2dldF9wYm5fZGl2aWRlcihk Y19saW5rKSkgPCAwKQ0KPiArCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0 YXRlLA0KPiBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiArCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQs IHZhcnNbaQ0KPiArIGtdLnBibikgPCAwKQ0KPiAgCQkJCXJldHVybiBmYWxzZTsNCj4gIAkJfQ0K PiAgCX0NCj4gQEAgLTg5Miw3ICs4NzksNyBAQCBzdGF0aWMgYm9vbCBjb21wdXRlX21zdF9kc2Nf Y29uZmlnc19mb3JfbGluayhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJ CXJldHVybiBmYWxzZTsNCj4gDQo+ICAJLyogT3B0aW1pemUgZGVncmVlIG9mIGNvbXByZXNzaW9u ICovDQo+IC0JaW5jcmVhc2VfZHNjX2JwcChzdGF0ZSwgZGNfbGluaywgcGFyYW1zLCB2YXJzLCBj b3VudCwgayk7DQo+ICsJaW5jcmVhc2VfZHNjX2JwcChzdGF0ZSwgbXN0X3N0YXRlLCBkY19saW5r LCBwYXJhbXMsIHZhcnMsIGNvdW50LCBrKTsNCj4gDQo+ICAJdHJ5X2Rpc2FibGVfZHNjKHN0YXRl LCBkY19saW5rLCBwYXJhbXMsIHZhcnMsIGNvdW50LCBrKTsNCj4gDQo+IEBAIC0xMDM2LDkgKzEw MjMsOSBAQCBib29sIGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9zdGF0ZShzdHJ1Y3QNCj4g ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJCQljb250aW51ZTsNCj4gDQo+ICAJCW11dGV4 X2xvY2soJmFjb25uZWN0b3ItPm1zdF9tZ3IubG9jayk7DQo+IC0JCWlmICghY29tcHV0ZV9tc3Rf ZHNjX2NvbmZpZ3NfZm9yX2xpbmsoc3RhdGUsIGRjX3N0YXRlLA0KPiBzdHJlYW0tPmxpbmssDQo+ IC0JCQl2YXJzLCAmbGlua192YXJzX3N0YXJ0X2luZGV4KSkgew0KPiAtCQkJbXV0ZXhfdW5sb2Nr KCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiArCQlpZiAoIWNvbXB1dGVfbXN0X2RzY19j b25maWdzX2Zvcl9saW5rKHN0YXRlLCBkY19zdGF0ZSwNCj4gc3RyZWFtLT5saW5rLCB2YXJzLA0K PiArCQkJCQkJICAgICAgJmFjb25uZWN0b3ItPm1zdF9tZ3IsDQo+ICsJCQkJCQkgICAgICAmbGlu a192YXJzX3N0YXJ0X2luZGV4KSkgew0KDQpTaG91bGQgc3RpbGwga2VlcCAibXV0ZXhfdW5sb2Nr KCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOyIgaGVyZS4NCg0KPiAgCQkJcmV0dXJuIGZhbHNl Ow0KPiAgCQl9DQo+ICAJCW11dGV4X3VubG9jaygmYWNvbm5lY3Rvci0+bXN0X21nci5sb2NrKTsN Cj4gQEAgLTEwOTUsMTAgKzEwODIsOCBAQCBzdGF0aWMgYm9vbA0KPiAgCQkJY29udGludWU7DQo+ IA0KPiAgCQltdXRleF9sb2NrKCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiAtCQlpZiAo IWNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0YXRlLA0KPiAtCQkJCQkJICAgICAg ZGNfc3RhdGUsDQo+IC0JCQkJCQkgICAgICBzdHJlYW0tPmxpbmssDQo+IC0JCQkJCQkgICAgICB2 YXJzLA0KPiArCQlpZiAoIWNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0YXRlLCBk Y19zdGF0ZSwNCj4gc3RyZWFtLT5saW5rLCB2YXJzLA0KPiArCQkJCQkJICAgICAgJmFjb25uZWN0 b3ItPm1zdF9tZ3IsDQo+ICAJCQkJCQkgICAgICAmbGlua192YXJzX3N0YXJ0X2luZGV4KSkgew0K PiAgCQkJbXV0ZXhfdW5sb2NrKCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiAgCQkJcmV0 dXJuIGZhbHNlOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvaW5jbHVkZS9saW5rX3NlcnZpY2VfdHlwZXMuaA0KPiBpbmRleCA5MWJmZmM1YmY1MmMuLjE0 M2JhYWI1NGI0MSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2luY2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gQEAgLTI1MCwxMiArMjUwLDE5 IEBAIHVuaW9uIGRwY2RfdHJhaW5pbmdfbGFuZV9zZXQgew0KPiAgICogX09OTFlfIGJlIGZpbGxl ZCBvdXQgZnJvbSBETSBhbmQgdGhlbiBwYXNzZWQgdG8gREMsIGRvIE5PVCB1c2UgdGhlc2UNCj4g Zm9yIF9hbnlfIGtpbmQgb2YgYXRvbWljDQo+ICAgKiBzdGF0ZSBjYWxjdWxhdGlvbnMgaW4gRE0s IG9yIHlvdSB3aWxsIGJyZWFrIHNvbWV0aGluZy4NCj4gICAqLw0KPiArDQo+ICtzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0Ow0KPiArDQo+ICAvKiBEUCBNU1Qgc3RyZWFtIGFsbG9jYXRpb24gKHBheWxv YWQgYmFuZHdpZHRoIG51bWJlcikgKi8NCj4gIHN0cnVjdCBkY19kcF9tc3Rfc3RyZWFtX2FsbG9j YXRpb24gew0KPiAgCXVpbnQ4X3QgdmNwX2lkOw0KPiAgCS8qIG51bWJlciBvZiBzbG90cyByZXF1 aXJlZCBmb3IgdGhlIERQIHN0cmVhbSBpbg0KPiAgCSAqIHRyYW5zcG9ydCBwYWNrZXQgKi8NCj4g IAl1aW50OF90IHNsb3RfY291bnQ7DQo+ICsJLyogVGhlIE1TVCBwb3J0IHRoaXMgaXMgb24sIHRo aXMgaXMgdXNlZCB0byBhc3NvY2lhdGUgREMgTVNUIHBheWxvYWRzDQo+IHdpdGggdGhlaXINCj4g KwkgKiByZXNwZWN0aXZlIERSTSBwYXlsb2FkcyBhbGxvY2F0aW9ucywgYW5kIGNhbiBiZSBpZ25v cmVkIG9uIG5vbi0NCj4gTGludXguDQo+ICsJICovDQoNCklzIGl0IG5lY2Vzc2FyeSBmb3IgYWRk aW5nIHRoaXMgbmV3IG1lbWJlcj8gU2luY2UgdGhpcyBpcyBmb3Igc2V0dGluZyB0aGUgREMNCkhX IGFuZCBub3QgcmVsYXRpbmcgdG8gZHJtLg0KDQo+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAq cG9ydDsNCj4gIH07DQo+IA0KPiAgLyogRFAgTVNUIHN0cmVhbSBhbGxvY2F0aW9uIHRhYmxlICov DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9s b2d5LmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMN Cj4gaW5kZXggMTBkMjZhN2UwMjhjLi5kOGUzMjI2OTU4NWIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYw0KPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMNCj4gQEAgLTY3LDggKzY3LDcg QEAgc3RhdGljIGJvb2wgZHVtcF9kcF9wYXlsb2FkX3RhYmxlKHN0cnVjdA0KPiBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF90b3BvbG9neV9w dXRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0DQo+ICpwb3J0KTsNCj4gDQo+ICBzdGF0aWMg aW50IGRybV9kcF9kcGNkX3dyaXRlX3BheWxvYWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyDQo+ICptZ3IsDQo+IC0JCQkJICAgICBpbnQgaWQsDQo+IC0JCQkJICAgICBzdHJ1Y3QgZHJt X2RwX3BheWxvYWQgKnBheWxvYWQpOw0KPiArCQkJCSAgICAgaW50IGlkLCB1OCBzdGFydF9zbG90 LCB1OCBudW1fc2xvdHMpOw0KPiANCj4gIHN0YXRpYyBpbnQgZHJtX2RwX3NlbmRfZHBjZF9yZWFk KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgCQkJCSBzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0ICpwb3J0LA0KPiBAQCAtMTIzNCw1NyArMTIzMyw2IEBAIGJ1aWxkX3F1ZXJ5 X3N0cmVhbV9lbmNfc3RhdHVzKHN0cnVjdA0KPiBkcm1fZHBfc2lkZWJhbmRfbXNnX3R4ICptc2cs IHU4IHN0cmVhbV9pZCwNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgaW50IGRy bV9kcF9tc3RfYXNzaWduX3BheWxvYWRfaWQoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsDQo+IC0JCQkJCXN0cnVjdCBkcm1fZHBfdmNwaSAqdmNwaSkNCj4gLXsNCj4gLQlp bnQgcmV0LCB2Y3BpX3JldDsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2Nr KTsNCj4gLQlyZXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZtZ3ItPnBheWxvYWRfbWFzaywgbWdy LT5tYXhfcGF5bG9hZHMNCj4gKyAxKTsNCj4gLQlpZiAocmV0ID4gbWdyLT5tYXhfcGF5bG9hZHMp IHsNCj4gLQkJcmV0ID0gLUVJTlZBTDsNCj4gLQkJZHJtX2RiZ19rbXMobWdyLT5kZXYsICJvdXQg b2YgcGF5bG9hZCBpZHMgJWRcbiIsIHJldCk7DQo+IC0JCWdvdG8gb3V0X3VubG9jazsNCj4gLQl9 DQo+IC0NCj4gLQl2Y3BpX3JldCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJm1nci0+dmNwaV9tYXNr LCBtZ3ItDQo+ID5tYXhfcGF5bG9hZHMgKyAxKTsNCj4gLQlpZiAodmNwaV9yZXQgPiBtZ3ItPm1h eF9wYXlsb2Fkcykgew0KPiAtCQlyZXQgPSAtRUlOVkFMOw0KPiAtCQlkcm1fZGJnX2ttcyhtZ3It PmRldiwgIm91dCBvZiB2Y3BpIGlkcyAlZFxuIiwgcmV0KTsNCj4gLQkJZ290byBvdXRfdW5sb2Nr Ow0KPiAtCX0NCj4gLQ0KPiAtCXNldF9iaXQocmV0LCAmbWdyLT5wYXlsb2FkX21hc2spOw0KPiAt CXNldF9iaXQodmNwaV9yZXQsICZtZ3ItPnZjcGlfbWFzayk7DQo+IC0JdmNwaS0+dmNwaSA9IHZj cGlfcmV0ICsgMTsNCj4gLQltZ3ItPnByb3Bvc2VkX3ZjcGlzW3JldCAtIDFdID0gdmNwaTsNCj4g LW91dF91bmxvY2s6DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0J cmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgZHJtX2RwX21zdF9wdXRfcGF5 bG9hZF9pZChzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3INCj4gKm1nciwNCj4gLQkJCQkg ICAgICBpbnQgdmNwaSkNCj4gLXsNCj4gLQlpbnQgaTsNCj4gLQ0KPiAtCWlmICh2Y3BpID09IDAp DQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsN Cj4gLQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgInB1dHRpbmcgcGF5bG9hZCAlZFxuIiwgdmNwaSk7 DQo+IC0JY2xlYXJfYml0KHZjcGkgLSAxLCAmbWdyLT52Y3BpX21hc2spOw0KPiAtDQo+IC0JZm9y IChpID0gMDsgaSA8IG1nci0+bWF4X3BheWxvYWRzOyBpKyspIHsNCj4gLQkJaWYgKG1nci0+cHJv cG9zZWRfdmNwaXNbaV0gJiYNCj4gLQkJICAgIG1nci0+cHJvcG9zZWRfdmNwaXNbaV0tPnZjcGkg PT0gdmNwaSkgew0KPiAtCQkJbWdyLT5wcm9wb3NlZF92Y3Bpc1tpXSA9IE5VTEw7DQo+IC0JCQlj bGVhcl9iaXQoaSArIDEsICZtZ3ItPnBheWxvYWRfbWFzayk7DQo+IC0JCX0NCj4gLQl9DQo+IC0J bXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyBi b29sIGNoZWNrX3R4bXNnX3N0YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LA0KPiAgCQkJICAgICAgc3RydWN0IGRybV9kcF9zaWRlYmFuZF9tc2dfdHggKnR4bXNnKQ0KPiAg ew0KPiBAQCAtMTczNyw3ICsxNjg1LDcgQEAgZHJtX2RwX21zdF9kdW1wX3BvcnRfdG9wb2xvZ3lf aGlzdG9yeShzdHJ1Y3QNCj4gZHJtX2RwX21zdF9wb3J0ICpwb3J0KSB7fQ0KPiAgI2RlZmluZSBz YXZlX3BvcnRfdG9wb2xvZ3lfcmVmKHBvcnQsIHR5cGUpDQo+ICAjZW5kaWYNCj4gDQo+IC1zdGF0 aWMgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKg0KPiArc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKg0KPiAgZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUo c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUNCj4gKnN0YXRlLA0KPiAgCQkJCSBzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQ0KPiAgew0KPiBAQCAtMTc0OSw2ICsxNjk3LDcgQEAg ZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUgKnN0YXRlLA0KPiANCj4gIAlyZXR1cm4gTlVMTDsNCj4gIH0NCj4gK0VYUE9S VF9TWU1CT0woZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUpOw0KPiANCj4gIHN0YXRp YyB2b2lkIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVm KQ0KPiAgew0KPiBAQCAtMzI3Miw2ICszMjIxLDggQEAgaW50DQo+IGRybV9kcF9zZW5kX3F1ZXJ5 X3N0cmVhbV9lbmNfc3RhdHVzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LA0KPiAgCQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAgCQlzdHJ1Y3QgZHJtX2Rw X3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVzX2Fja19yZXBseSAqc3RhdHVzKQ0KPiAgew0KPiArCXN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZDsNCj4gIAlzdHJ1Y3QgZHJtX2RwX3NpZGViYW5k X21zZ190eCAqdHhtc2c7DQo+ICAJdTggbm9uY2VbN107DQo+ICAJaW50IHJldDsNCj4gQEAgLTMy ODgsNiArMzIzOSwxMCBAQCBpbnQNCj4gZHJtX2RwX3NlbmRfcXVlcnlfc3RyZWFtX2VuY19zdGF0 dXMoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+IA0KPiAgCWdldF9y YW5kb21fYnl0ZXMobm9uY2UsIHNpemVvZihub25jZSkpOw0KPiANCj4gKwlkcm1fbW9kZXNldF9s b2NrKCZtZ3ItPmJhc2UubG9jaywgTlVMTCk7DQo+ICsJc3RhdGUgPSB0b19kcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlKG1nci0+YmFzZS5zdGF0ZSk7DQo+ICsJcGF5bG9hZCA9IGRybV9hdG9taWNf Z2V0X21zdF9wYXlsb2FkX3N0YXRlKHN0YXRlLCBwb3J0KTsNCj4gKw0KPiAgCS8qDQo+ICAJICog IlNvdXJjZSBkZXZpY2UgdGFyZ2V0cyB0aGUgUVVFUllfU1RSRUFNX0VOQ1JZUFRJT05fU1RBVFVT DQo+IG1lc3NhZ2UNCj4gIAkgKiAgdHJhbnNhY3Rpb24gYXQgdGhlIE1TVCBCcmFuY2ggZGV2aWNl IGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUNCj4gQEAgLTMyOTUsNyArMzI1MCw3IEBAIGludA0K PiBkcm1fZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyhzdHJ1Y3QNCj4gZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwNCj4gIAkgKi8NCj4gIAl0eG1zZy0+ZHN0ID0gbWdyLT5tc3Rf cHJpbWFyeTsNCj4gDQo+IC0JYnVpbGRfcXVlcnlfc3RyZWFtX2VuY19zdGF0dXModHhtc2csIHBv cnQtPnZjcGkudmNwaSwgbm9uY2UpOw0KPiArCWJ1aWxkX3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVz KHR4bXNnLCBwYXlsb2FkLT52Y3BpLCBub25jZSk7DQo+IA0KPiAgCWRybV9kcF9xdWV1ZV9kb3du X3R4KG1nciwgdHhtc2cpOw0KPiANCj4gQEAgLTMzMTIsNiArMzI2Nyw3IEBAIGludA0KPiBkcm1f ZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyhzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwNCj4gIAltZW1jcHkoc3RhdHVzLCAmdHhtc2ctPnJlcGx5LnUuZW5jX3N0 YXR1cywgc2l6ZW9mKCpzdGF0dXMpKTsNCj4gDQo+ICBvdXQ6DQo+ICsJZHJtX21vZGVzZXRfdW5s b2NrKCZtZ3ItPmJhc2UubG9jayk7DQo+ICAJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChw b3J0KTsNCj4gIG91dF9nZXRfcG9ydDoNCj4gIAlrZnJlZSh0eG1zZyk7DQo+IEBAIC0zMzIwLDIx OSArMzI3NiwxNjEgQEAgaW50DQo+IGRybV9kcF9zZW5kX3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVz KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgRVhQT1JUX1NZTUJP TChkcm1fZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyk7DQo+IA0KPiAgc3RhdGljIGlu dCBkcm1fZHBfY3JlYXRlX3BheWxvYWRfc3RlcDEoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyDQo+ICptZ3IsDQo+IC0JCQkJICAgICAgIGludCBpZCwNCj4gLQkJCQkgICAgICAgc3RydWN0 IGRybV9kcF9wYXlsb2FkICpwYXlsb2FkKQ0KPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21z dF9hdG9taWNfcGF5bG9hZA0KPiAqcGF5bG9hZCkNCj4gIHsNCj4gLQlpbnQgcmV0Ow0KPiAtDQo+ IC0JcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGVfcGF5bG9hZChtZ3IsIGlkLCBwYXlsb2FkKTsNCj4g LQlpZiAocmV0IDwgMCkgew0KPiAtCQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRlID0gMDsNCj4gLQkJ cmV0dXJuIHJldDsNCj4gLQl9DQo+IC0JcGF5bG9hZC0+cGF5bG9hZF9zdGF0ZSA9IERQX1BBWUxP QURfTE9DQUw7DQo+IC0JcmV0dXJuIDA7DQo+ICsJcmV0dXJuIGRybV9kcF9kcGNkX3dyaXRlX3Bh eWxvYWQobWdyLCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0KPiA+dmNfc3RhcnRfc2xvdCwNCj4g KwkJCQkJIHBheWxvYWQtPnRpbWVfc2xvdHMpOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgZHJt X2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAyKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncg0K PiAqbWdyLA0KPiAtCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAt CQkJCSAgICAgICBpbnQgaWQsDQo+IC0JCQkJICAgICAgIHN0cnVjdCBkcm1fZHBfcGF5bG9hZCAq cGF5bG9hZCkNCj4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQN Cj4gKnBheWxvYWQpDQo+ICB7DQo+ICAJaW50IHJldDsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0ID0NCj4gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQobWdy LCBwYXlsb2FkLT5wb3J0KTsNCj4gDQo+IC0JcmV0ID0gZHJtX2RwX3BheWxvYWRfc2VuZF9tc2co bWdyLCBwb3J0LCBpZCwgcG9ydC0+dmNwaS5wYm4pOw0KPiAtCWlmIChyZXQgPCAwKQ0KPiAtCQly ZXR1cm4gcmV0Ow0KPiAtCXBheWxvYWQtPnBheWxvYWRfc3RhdGUgPSBEUF9QQVlMT0FEX1JFTU9U RTsNCj4gKwlpZiAoIXBvcnQpDQo+ICsJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJcmV0ID0gZHJt X2RwX3BheWxvYWRfc2VuZF9tc2cobWdyLCBwb3J0LCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0K PiA+cGJuKTsNCj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOw0KPiAgCXJl dHVybiByZXQ7DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBkcm1fZHBfZGVzdHJveV9wYXlsb2Fk X3N0ZXAxKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCQlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAtCQkJCQlpbnQgaWQsDQo+IC0JCQkJCXN0 cnVjdCBkcm1fZHBfcGF5bG9hZCAqcGF5bG9hZCkNCj4gKwkJCQkJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUNCj4gKm1zdF9zdGF0ZSwNCj4gKwkJCQkJc3RydWN0IGRybV9kcF9tc3Rf YXRvbWljX3BheWxvYWQNCj4gKnBheWxvYWQpDQo+ICB7DQo+ICsNCj4gIAlkcm1fZGJnX2ttcyht Z3ItPmRldiwgIlxuIik7DQo+IC0JLyogaXQncyBva2F5IGZvciB0aGVzZSB0byBmYWlsICovDQo+ IC0JaWYgKHBvcnQpIHsNCj4gLQkJZHJtX2RwX3BheWxvYWRfc2VuZF9tc2cobWdyLCBwb3J0LCBp ZCwgMCk7DQo+IC0JfQ0KPiANCj4gLQlkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKG1nciwgaWQs IHBheWxvYWQpOw0KPiAtCXBheWxvYWQtPnBheWxvYWRfc3RhdGUgPSBEUF9QQVlMT0FEX0RFTEVU RV9MT0NBTDsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gKwkvKiBpdCdzIG9rYXkgZm9yIHRoZXNl IHRvIGZhaWwgKi8NCj4gKwlkcm1fZHBfcGF5bG9hZF9zZW5kX21zZyhtZ3IsIHBheWxvYWQtPnBv cnQsIHBheWxvYWQtPnZjcGksIDApOw0KPiArCWRybV9kcF9kcGNkX3dyaXRlX3BheWxvYWQobWdy LCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0KPiA+dmNfc3RhcnRfc2xvdCwgMCk7DQo+IA0KPiAt c3RhdGljIGludCBkcm1fZHBfZGVzdHJveV9wYXlsb2FkX3N0ZXAyKHN0cnVjdA0KPiBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCQlpbnQgaWQsDQo+IC0JCQkJCXN0cnVjdCBk cm1fZHBfcGF5bG9hZCAqcGF5bG9hZCkNCj4gLXsNCj4gLQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRl ID0gMDsNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+ICAvKioNCj4gLSAqIGRybV9kcF91cGRh dGVfcGF5bG9hZF9wYXJ0MSgpIC0gRXhlY3V0ZSBwYXlsb2FkIHVwZGF0ZSBwYXJ0IDENCj4gLSAq IEBtZ3I6IG1hbmFnZXIgdG8gdXNlLg0KPiAtICogQHN0YXJ0X3Nsb3Q6IHRoaXMgaXMgdGhlIGN1 ciBzbG90DQo+ICsgKiBkcm1fZHBfYWRkX3BheWxvYWRfcGFydDEoKSAtIEV4ZWN1dGUgcGF5bG9h ZCB1cGRhdGUgcGFydCAxDQo+ICsgKiBAbWdyOiBNYW5hZ2VyIHRvIHVzZS4NCj4gKyAqIEBtc3Rf c3RhdGU6IFRoZSBNU1QgYXRvbWljIHN0YXRlDQo+ICsgKiBAcGF5bG9hZDogVGhlIHBheWxvYWQg dG8gd3JpdGUNCj4gICAqDQo+IC0gKiBOT1RFOiBzdGFydF9zbG90IGlzIGEgdGVtcG9yYXJ5IHdv cmthcm91bmQgZm9yIG5vbi1hdG9taWMgZHJpdmVycywNCj4gLSAqIHRoaXMgd2lsbCBiZSByZW1v dmVkIHdoZW4gbm9uLWF0b21pYyBtc3QgaGVscGVycyBhcmUgbW92ZWQgb3V0IG9mIHRoZQ0KPiBo ZWxwZXINCj4gKyAqIERldGVybWluZXMgdGhlIHN0YXJ0aW5nIHRpbWUgc2xvdCBmb3IgdGhlIGdp dmVuIHBheWxvYWQsIGFuZCBwcm9ncmFtcyB0aGUNCj4gVkNQSSBmb3IgdGhpcyBwYXlsb2FkDQo+ ICsgKiBpbnRvIGhhcmR3YXJlLg0KPiAgICoNCj4gLSAqIFRoaXMgaXRlcmF0ZXMgb3ZlciBhbGwg cHJvcG9zZWQgdmlydHVhbCBjaGFubmVscywgYW5kIHRyaWVzIHRvDQo+IC0gKiBhbGxvY2F0ZSBz cGFjZSBpbiB0aGUgbGluayBmb3IgdGhlbS4gRm9yIDAtPnNsb3RzIHRyYW5zaXRpb25zLA0KPiAt ICogdGhpcyBzdGVwIGp1c3Qgd3JpdGVzIHRoZSBWQ1BJIHRvIHRoZSBNU1QgZGV2aWNlLiBGb3Ig c2xvdHMtPjANCj4gLSAqIHRyYW5zaXRpb25zLCB0aGlzIHdyaXRlcyB0aGUgdXBkYXRlZCBWQ1BJ cyBhbmQgcmVtb3ZlcyB0aGUNCj4gLSAqIHJlbW90ZSBWQyBwYXlsb2Fkcy4NCj4gKyAqIEFmdGVy IGNhbGxpbmcgdGhpcywgdGhlIGRyaXZlciBzaG91bGQgZ2VuZXJhdGUgQUNUIGFuZCBwYXlsb2Fk IHBhY2tldHMuDQo+IE5vdGUgdGhhdCB0aGUgZHJpdmVyIG1heQ0KPiArICogZ2VuZXJhdGUgQUNU IG9uY2UgcGVyIHBheWxvYWQgY2hhbmdlLCBvciBvbmx5IG9uY2UgYWZ0ZXIgYWxsIG5ldw0KPiBw YXlsb2FkcyBpbiBhIGdpdmVuIGF0b21pYyBzdGF0ZQ0KPiArICogaGF2ZSBiZWVuIGFkZGVkLg0K PiAgICoNCj4gLSAqIGFmdGVyIGNhbGxpbmcgdGhpcyB0aGUgZHJpdmVyIHNob3VsZCBnZW5lcmF0 ZSBBQ1QgYW5kIHBheWxvYWQNCj4gLSAqIHBhY2tldHMuDQo+ICsgKiBSZXR1cm5zOiAwIG9uIHN1 Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZS4gSW4gdGhlIGV2ZW50IHRoYXQgdGhpcyBmYWls cywNCj4gKyAqIEBwYXlsb2FkLnZjX3N0YXJ0X3Nsb3Qgd2lsbCBhbHNvIGJlIHNldCB0byAtMS4N Cj4gICAqLw0KPiAtaW50IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3INCj4gKm1nciwgaW50IHN0YXJ0X3Nsb3QpDQo+ICtpbnQgZHJtX2Rw X2FkZF9wYXlsb2FkX3BhcnQxKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0K PiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlLA0K PiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZCkNCj4g IHsNCj4gLQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgcmVxX3BheWxvYWQ7DQo+ICAJc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqcG9ydDsNCj4gLQlpbnQgaSwgajsNCj4gLQlpbnQgY3VyX3Nsb3RzID0g c3RhcnRfc2xvdDsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4g LQlmb3IgKGkgPSAwOyBpIDwgbWdyLT5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAtCQlzdHJ1Y3Qg ZHJtX2RwX3ZjcGkgKnZjcGkgPSBtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldOw0KPiAtCQlzdHJ1Y3Qg ZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPSAmbWdyLT5wYXlsb2Fkc1tpXTsNCj4gLQkJYm9vbCBw dXRfcG9ydCA9IGZhbHNlOw0KPiAtDQo+IC0JCS8qIHNvbHZlIHRoZSBjdXJyZW50IHBheWxvYWRz IC0gY29tcGFyZSB0byB0aGUgaHcgb25lcw0KPiAtCQkgICAtIHVwZGF0ZSB0aGUgaHcgdmlldyAq Lw0KPiAtCQlyZXFfcGF5bG9hZC5zdGFydF9zbG90ID0gY3VyX3Nsb3RzOw0KPiAtCQlpZiAodmNw aSkgew0KPiAtCQkJcG9ydCA9IGNvbnRhaW5lcl9vZih2Y3BpLCBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0LA0KPiAtCQkJCQkgICAgdmNwaSk7DQo+IC0NCj4gLQkJCS8qIFZhbGlkYXRlZCBwb3J0cyBk b24ndCBtYXR0ZXIgaWYgd2UncmUgcmVsZWFzaW5nDQo+IC0JCQkgKiBWQ1BJDQo+IC0JCQkgKi8N Cj4gLQkJCWlmICh2Y3BpLT5udW1fc2xvdHMpIHsNCj4gLQkJCQlwb3J0ID0NCj4gZHJtX2RwX21z dF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQoDQo+IC0JCQkJICAgIG1nciwgcG9ydCk7DQo+ IC0JCQkJaWYgKCFwb3J0KSB7DQo+IC0JCQkJCWlmICh2Y3BpLT5udW1fc2xvdHMgPT0gcGF5bG9h ZC0NCj4gPm51bV9zbG90cykgew0KPiAtCQkJCQkJY3VyX3Nsb3RzICs9IHZjcGktPm51bV9zbG90 czsNCj4gLQkJCQkJCXBheWxvYWQtPnN0YXJ0X3Nsb3QgPQ0KPiByZXFfcGF5bG9hZC5zdGFydF9z bG90Ow0KPiAtCQkJCQkJY29udGludWU7DQo+IC0JCQkJCX0gZWxzZSB7DQo+IC0JCQkJCQlkcm1f ZGJnX2ttcyhtZ3ItPmRldiwNCj4gLQkJCQkJCQkgICAgIkZhaWw6c2V0IHBheWxvYWQgdG8NCj4g aW52YWxpZCBzaW5rIik7DQo+IC0JCQkJCQltdXRleF91bmxvY2soJm1nci0NCj4gPnBheWxvYWRf bG9jayk7DQo+IC0JCQkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJCQkJfQ0KPiAtCQkJCX0NCj4g LQkJCQlwdXRfcG9ydCA9IHRydWU7DQo+IC0JCQl9DQo+ICsJaW50IHJldDsNCj4gDQo+IC0JCQly ZXFfcGF5bG9hZC5udW1fc2xvdHMgPSB2Y3BpLT5udW1fc2xvdHM7DQo+IC0JCQlyZXFfcGF5bG9h ZC52Y3BpID0gdmNwaS0+dmNwaTsNCj4gLQkJfSBlbHNlIHsNCj4gLQkJCXBvcnQgPSBOVUxMOw0K PiAtCQkJcmVxX3BheWxvYWQubnVtX3Nsb3RzID0gMDsNCj4gLQkJfQ0KPiArCXBvcnQgPSBkcm1f ZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZChtZ3IsIHBheWxvYWQtDQo+ID5wb3J0 KTsNCj4gKwlpZiAoIXBvcnQpDQo+ICsJCXJldHVybiAwOw0KPiANCj4gLQkJcGF5bG9hZC0+c3Rh cnRfc2xvdCA9IHJlcV9wYXlsb2FkLnN0YXJ0X3Nsb3Q7DQo+IC0JCS8qIHdvcmsgb3V0IHdoYXQg aXMgcmVxdWlyZWQgdG8gaGFwcGVuIHdpdGggdGhpcyBwYXlsb2FkICovDQo+IC0JCWlmIChwYXls b2FkLT5udW1fc2xvdHMgIT0gcmVxX3BheWxvYWQubnVtX3Nsb3RzKSB7DQo+IC0NCj4gLQkJCS8q IG5lZWQgdG8gcHVzaCBhbiB1cGRhdGUgZm9yIHRoaXMgcGF5bG9hZCAqLw0KPiAtCQkJaWYgKHJl cV9wYXlsb2FkLm51bV9zbG90cykgew0KPiAtCQkJCWRybV9kcF9jcmVhdGVfcGF5bG9hZF9zdGVw MShtZ3IsIHZjcGktDQo+ID52Y3BpLA0KPiAtCQkJCQkJCSAgICAmcmVxX3BheWxvYWQpOw0KPiAt CQkJCXBheWxvYWQtPm51bV9zbG90cyA9DQo+IHJlcV9wYXlsb2FkLm51bV9zbG90czsNCj4gLQkJ CQlwYXlsb2FkLT52Y3BpID0gcmVxX3BheWxvYWQudmNwaTsNCj4gLQ0KPiAtCQkJfSBlbHNlIGlm IChwYXlsb2FkLT5udW1fc2xvdHMpIHsNCj4gLQkJCQlwYXlsb2FkLT5udW1fc2xvdHMgPSAwOw0K PiAtCQkJCWRybV9kcF9kZXN0cm95X3BheWxvYWRfc3RlcDEobWdyLCBwb3J0LA0KPiAtCQkJCQkJ CSAgICAgcGF5bG9hZC0+dmNwaSwNCj4gLQkJCQkJCQkgICAgIHBheWxvYWQpOw0KPiAtCQkJCXJl cV9wYXlsb2FkLnBheWxvYWRfc3RhdGUgPQ0KPiAtCQkJCQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRl Ow0KPiAtCQkJCXBheWxvYWQtPnN0YXJ0X3Nsb3QgPSAwOw0KPiAtCQkJfQ0KPiAtCQkJcGF5bG9h ZC0+cGF5bG9hZF9zdGF0ZSA9DQo+IHJlcV9wYXlsb2FkLnBheWxvYWRfc3RhdGU7DQo+IC0JCX0N Cj4gLQkJY3VyX3Nsb3RzICs9IHJlcV9wYXlsb2FkLm51bV9zbG90czsNCj4gKwlpZiAobWdyLT5w YXlsb2FkX2NvdW50ID09IDApDQo+ICsJCW1nci0+bmV4dF9zdGFydF9zbG90ID0gbXN0X3N0YXRl LT5zdGFydF9zbG90Ow0KPiANCj4gLQkJaWYgKHB1dF9wb3J0KQ0KPiAtCQkJZHJtX2RwX21zdF90 b3BvbG9neV9wdXRfcG9ydChwb3J0KTsNCj4gKwlwYXlsb2FkLT52Y19zdGFydF9zbG90ID0gbWdy LT5uZXh0X3N0YXJ0X3Nsb3Q7DQo+ICsJcmV0ID0gZHJtX2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAx KG1nciwgcGF5bG9hZCk7DQo+ICsJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsN Cj4gKwlpZiAocmV0IDwgMCkgew0KPiArCQlkcm1fd2FybihtZ3ItPmRldiwgIkZhaWxlZCB0byBj cmVhdGUgTVNUIHBheWxvYWQgZm9yIHBvcnQNCj4gJXA6ICVkXG4iLA0KPiArCQkJIHBheWxvYWQt PnBvcnQsIHJldCk7DQo+ICsJCXBheWxvYWQtPnZjX3N0YXJ0X3Nsb3QgPSAtMTsNCj4gKwkJcmV0 dXJuIHJldDsNCj4gIAl9DQo+IA0KPiAtCWZvciAoaSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2Fk czsgLyogZG8gbm90aGluZyAqLykgew0KPiAtCQlpZiAobWdyLT5wYXlsb2Fkc1tpXS5wYXlsb2Fk X3N0YXRlICE9DQo+IERQX1BBWUxPQURfREVMRVRFX0xPQ0FMKSB7DQo+IC0JCQlpKys7DQo+IC0J CQljb250aW51ZTsNCj4gLQkJfQ0KPiArCW1nci0+cGF5bG9hZF9jb3VudCsrOw0KPiArCW1nci0+ bmV4dF9zdGFydF9zbG90ICs9IHBheWxvYWQtPnRpbWVfc2xvdHM7DQo+IA0KPiAtCQlkcm1fZGJn X2ttcyhtZ3ItPmRldiwgInJlbW92aW5nIHBheWxvYWQgJWRcbiIsIGkpOw0KPiAtCQlmb3IgKGog PSBpOyBqIDwgbWdyLT5tYXhfcGF5bG9hZHMgLSAxOyBqKyspIHsNCj4gLQkJCW1nci0+cGF5bG9h ZHNbal0gPSBtZ3ItPnBheWxvYWRzW2ogKyAxXTsNCj4gLQkJCW1nci0+cHJvcG9zZWRfdmNwaXNb al0gPSBtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ogKw0KPiAxXTsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQxKTsNCj4gDQo+IC0JCQlp ZiAobWdyLT5wcm9wb3NlZF92Y3Bpc1tqXSAmJg0KPiAtCQkJICAgIG1nci0+cHJvcG9zZWRfdmNw aXNbal0tPm51bV9zbG90cykgew0KPiAtCQkJCXNldF9iaXQoaiArIDEsICZtZ3ItPnBheWxvYWRf bWFzayk7DQo+IC0JCQl9IGVsc2Ugew0KPiAtCQkJCWNsZWFyX2JpdChqICsgMSwgJm1nci0+cGF5 bG9hZF9tYXNrKTsNCj4gLQkJCX0NCj4gLQkJfQ0KPiArLyoqDQo+ICsgKiBkcm1fZHBfcmVtb3Zl X3BheWxvYWQoKSAtIFJlbW92ZSBhbiBNU1QgcGF5bG9hZA0KPiArICogQG1ncjogTWFuYWdlciB0 byB1c2UuDQo+ICsgKiBAbXN0X3N0YXRlOiBUaGUgTVNUIGF0b21pYyBzdGF0ZQ0KPiArICogQHBh eWxvYWQ6IFRoZSBwYXlsb2FkIHRvIHdyaXRlDQo+ICsgKg0KPiArICogUmVtb3ZlcyBhIHBheWxv YWQgZnJvbSBhbiBNU1QgdG9wb2xvZ3kgaWYgaXQgd2FzIHN1Y2Nlc3NmdWxseSBhc3NpZ25lZCBh DQo+IHN0YXJ0IHNsb3QuIEFsc28gdXBkYXRlcw0KPiArICogdGhlIHN0YXJ0aW5nIHRpbWUgc2xv dHMgb2YgYWxsIG90aGVyIHBheWxvYWRzIHdoaWNoIHdvdWxkIGhhdmUgYmVlbg0KPiBzaGlmdGVk IHRvd2FyZHMgdGhlIHN0YXJ0IG9mDQo+ICsgKiB0aGUgVkMgdGFibGUgYXMgYSByZXN1bHQuDQo+ ICsgKg0KPiArICogQWZ0ZXIgY2FsbGluZyB0aGlzLCB0aGUgZHJpdmVyIHNob3VsZCBnZW5lcmF0 ZSBBQ1QgYW5kIHBheWxvYWQgcGFja2V0cy4NCj4gTm90ZSB0aGF0IHRoZSBkcml2ZXIgbWF5DQo+ ICsgKiBnZW5lcmF0ZSBBQ1Qgb25jZSBwZXIgcGF5bG9hZCBjaGFuZ2UsIG9yIG9ubHkgb25jZSBh ZnRlciBhbGwgcGF5bG9hZHMgZm9yDQo+IGEgZ2l2ZW4gYXRvbWljIHN0YXRlDQo+ICsgKiBoYXZl IGJlZW4gcmVtb3ZlZC4NCj4gKyAqLw0KPiArdm9pZCBkcm1fZHBfcmVtb3ZlX3BheWxvYWQoc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCQkgICBzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlLA0KPiArCQkJICAgc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9kcF9tc3Rf YXRvbWljX3BheWxvYWQgKnBvczsNCj4gDQo+IC0JCW1lbXNldCgmbWdyLT5wYXlsb2Fkc1ttZ3It Pm1heF9wYXlsb2FkcyAtIDFdLCAwLA0KPiAtCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fZHBf cGF5bG9hZCkpOw0KPiAtCQltZ3ItPnByb3Bvc2VkX3ZjcGlzW21nci0+bWF4X3BheWxvYWRzIC0g MV0gPSBOVUxMOw0KPiAtCQljbGVhcl9iaXQobWdyLT5tYXhfcGF5bG9hZHMsICZtZ3ItPnBheWxv YWRfbWFzayk7DQo+ICsJLyogV2UgZmFpbGVkIHRvIG1ha2UgdGhlIHBheWxvYWQsIHNvIG5vdGhp bmcgdG8gZG8gKi8NCj4gKwlpZiAocGF5bG9hZC0+dmNfc3RhcnRfc2xvdCA9PSAtMSkNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJZHJtX2RwX2Rlc3Ryb3lfcGF5bG9hZF9zdGVwMShtZ3IsIG1zdF9z dGF0ZSwgcGF5bG9hZCk7DQo+ICsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJm1zdF9z dGF0ZS0+cGF5bG9hZHMsIG5leHQpIHsNCj4gKwkJaWYgKHBvcyAhPSBwYXlsb2FkICYmIHBvcy0+ dmNfc3RhcnRfc2xvdCA+IHBheWxvYWQtDQo+ID52Y19zdGFydF9zbG90KQ0KPiArCQkJcG9zLT52 Y19zdGFydF9zbG90IC09IHBheWxvYWQtPnRpbWVfc2xvdHM7DQo+ICAJfQ0KPiAtCW11dGV4X3Vu bG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiArCXBheWxvYWQtPnZjX3N0YXJ0X3Nsb3QgPSAt MTsNCj4gDQo+IC0JcmV0dXJuIDA7DQo+ICsJbWdyLT5wYXlsb2FkX2NvdW50LS07DQo+ICsJbWdy LT5uZXh0X3N0YXJ0X3Nsb3QgLT0gcGF5bG9hZC0+dGltZV9zbG90czsNCj4gIH0NCj4gLUVYUE9S VF9TWU1CT0woZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKTsNCj4gK0VYUE9SVF9TWU1CT0wo ZHJtX2RwX3JlbW92ZV9wYXlsb2FkKTsNCj4gDQo+ICAvKioNCj4gLSAqIGRybV9kcF91cGRhdGVf cGF5bG9hZF9wYXJ0MigpIC0gRXhlY3V0ZSBwYXlsb2FkIHVwZGF0ZSBwYXJ0IDINCj4gLSAqIEBt Z3I6IG1hbmFnZXIgdG8gdXNlLg0KPiArICogZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQyKCkgLSBF eGVjdXRlIHBheWxvYWQgdXBkYXRlIHBhcnQgMg0KPiArICogQG1ncjogTWFuYWdlciB0byB1c2Uu DQo+ICsgKiBAc3RhdGU6IFRoZSBnbG9iYWwgYXRvbWljIHN0YXRlDQo+ICsgKiBAcGF5bG9hZDog VGhlIHBheWxvYWQgdG8gdXBkYXRlDQo+ICsgKg0KPiArICogSWYgQHBheWxvYWQgd2FzIHN1Y2Nl c3NmdWxseSBhc3NpZ25lZCBhIHN0YXJ0aW5nIHRpbWUgc2xvdCBieQ0KPiBkcm1fZHBfYWRkX3Bh eWxvYWRfcGFydDEoKSwgdGhpcw0KPiArICogZnVuY3Rpb24gd2lsbCBzZW5kIHRoZSBzaWRlYmFu ZCBtZXNzYWdlcyB0byBmaW5pc2ggYWxsb2NhdGluZyB0aGlzIHBheWxvYWQuDQo+ICAgKg0KPiAt ICogVGhpcyBpdGVyYXRlcyBvdmVyIGFsbCBwcm9wb3NlZCB2aXJ0dWFsIGNoYW5uZWxzLCBhbmQg dHJpZXMgdG8NCj4gLSAqIGFsbG9jYXRlIHNwYWNlIGluIHRoZSBsaW5rIGZvciB0aGVtLiBGb3Ig MC0+c2xvdHMgdHJhbnNpdGlvbnMsDQo+IC0gKiB0aGlzIHN0ZXAgd3JpdGVzIHRoZSByZW1vdGUg VkMgcGF5bG9hZCBjb21tYW5kcy4gRm9yIHNsb3RzLT4wDQo+IC0gKiB0aGlzIGp1c3QgcmVzZXRz IHNvbWUgaW50ZXJuYWwgc3RhdGUuDQo+ICsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0 aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4NCj4gICAqLw0KPiAtaW50IGRybV9kcF91cGRhdGVf cGF5bG9hZF9wYXJ0MihzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3INCj4gKm1ncikNCj4g K2ludCBkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsDQo+ICsJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4g KwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQpDQo+ICB7 DQo+IC0Jc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsNCj4gLQlpbnQgaTsNCj4gIAlpbnQg cmV0ID0gMDsNCj4gDQo+IC0JbXV0ZXhfbG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiAtCWZv ciAoaSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0NCj4gLQkJaWYgKCFt Z3ItPnByb3Bvc2VkX3ZjcGlzW2ldKQ0KPiAtCQkJY29udGludWU7DQo+IC0NCj4gLQkJcG9ydCA9 IGNvbnRhaW5lcl9vZihtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldLCBzdHJ1Y3QNCj4gZHJtX2RwX21z dF9wb3J0LCB2Y3BpKTsNCj4gKwkvKiBTa2lwIGZhaWxlZCBwYXlsb2FkcyAqLw0KPiArCWlmIChw YXlsb2FkLT52Y19zdGFydF9zbG90ID09IC0xKSB7DQo+ICsJCWRybV9kYmdfa21zKHN0YXRlLT5k ZXYsICJQYXJ0IDEgb2YgcGF5bG9hZCBjcmVhdGlvbiBmb3IgJXMNCj4gZmFpbGVkLCBza2lwcGlu ZyBwYXJ0IDJcbiIsDQo+ICsJCQkgICAgcGF5bG9hZC0+cG9ydC0+Y29ubmVjdG9yLT5uYW1lKTsN Cj4gKwkJcmV0dXJuIC1FSU87DQo+ICsJfQ0KPiANCj4gLQkJZHJtX2RiZ19rbXMobWdyLT5kZXYs ICJwYXlsb2FkICVkICVkXG4iLCBpLCBtZ3ItDQo+ID5wYXlsb2Fkc1tpXS5wYXlsb2FkX3N0YXRl KTsNCj4gLQkJaWYgKG1nci0+cGF5bG9hZHNbaV0ucGF5bG9hZF9zdGF0ZSA9PSBEUF9QQVlMT0FE X0xPQ0FMKQ0KPiB7DQo+IC0JCQlyZXQgPSBkcm1fZHBfY3JlYXRlX3BheWxvYWRfc3RlcDIobWdy LCBwb3J0LCBtZ3ItDQo+ID5wcm9wb3NlZF92Y3Bpc1tpXS0+dmNwaSwgJm1nci0+cGF5bG9hZHNb aV0pOw0KPiAtCQl9IGVsc2UgaWYgKG1nci0+cGF5bG9hZHNbaV0ucGF5bG9hZF9zdGF0ZSA9PQ0K PiBEUF9QQVlMT0FEX0RFTEVURV9MT0NBTCkgew0KPiAtCQkJcmV0ID0gZHJtX2RwX2Rlc3Ryb3lf cGF5bG9hZF9zdGVwMihtZ3IsIG1nci0NCj4gPnByb3Bvc2VkX3ZjcGlzW2ldLT52Y3BpLCAmbWdy LT5wYXlsb2Fkc1tpXSk7DQo+IC0JCX0NCj4gLQkJaWYgKHJldCkgew0KPiAtCQkJbXV0ZXhfdW5s b2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0JCQlyZXR1cm4gcmV0Ow0KPiAtCQl9DQo+ICsJ cmV0ID0gZHJtX2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAyKG1nciwgcGF5bG9hZCk7DQo+ICsJaWYg KHJldCA8IDApIHsNCj4gKwkJaWYgKCFwYXlsb2FkLT5kZWxldGUpDQo+ICsJCQlkcm1fZXJyKG1n ci0+ZGV2LCAiU3RlcCAyIG9mIGNyZWF0aW5nIE1TVCBwYXlsb2FkDQo+IGZvciAlcCBmYWlsZWQ6 ICVkXG4iLA0KPiArCQkJCXBheWxvYWQtPnBvcnQsIHJldCk7DQo+ICsJCWVsc2UNCj4gKwkJCWRy bV9kYmdfa21zKG1nci0+ZGV2LCAiU3RlcCAyIG9mIHJlbW92aW5nIE1TVA0KPiBwYXlsb2FkIGZv ciAlcCBmYWlsZWQ6ICVkXG4iLA0KPiArCQkJCSAgICBwYXlsb2FkLT5wb3J0LCByZXQpOw0KPiAg CX0NCj4gLQltdXRleF91bmxvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gLQlyZXR1cm4gMDsN Cj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICB9DQo+IC1FWFBPUlRfU1lNQk9MKGRybV9kcF91cGRh dGVfcGF5bG9hZF9wYXJ0Mik7DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9hZGRfcGF5bG9hZF9w YXJ0Mik7DQo+IA0KPiAgc3RhdGljIGludCBkcm1fZHBfc2VuZF9kcGNkX3JlYWQoc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICAJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQsDQo+IEBAIC0zNzEyLDcgKzM2MTAsNiBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9n eV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgYm9v bCBtcw0KPiAgCWludCByZXQgPSAwOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0 YiA9IE5VTEw7DQo+IA0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gIAlt dXRleF9sb2NrKCZtZ3ItPmxvY2spOw0KPiAgCWlmIChtc3Rfc3RhdGUgPT0gbWdyLT5tc3Rfc3Rh dGUpDQo+ICAJCWdvdG8gb3V0X3VubG9jazsNCj4gQEAgLTM3MjAsMTAgKzM2MTcsNiBAQCBpbnQg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwgYm9vbCBtcw0KPiAgCW1nci0+bXN0X3N0YXRlID0gbXN0X3N0YXRlOw0K PiAgCS8qIHNldCB0aGUgZGV2aWNlIGludG8gTVNUIG1vZGUgKi8NCj4gIAlpZiAobXN0X3N0YXRl KSB7DQo+IC0JCXN0cnVjdCBkcm1fZHBfcGF5bG9hZCByZXNldF9wYXk7DQo+IC0JCWludCBsYW5l X2NvdW50Ow0KPiAtCQlpbnQgbGlua19yYXRlOw0KPiAtDQo+ICAJCVdBUk5fT04obWdyLT5tc3Rf cHJpbWFyeSk7DQo+IA0KPiAgCQkvKiBnZXQgZHBjZCBpbmZvICovDQo+IEBAIC0zNzM0LDE2ICsz NjI3LDYgQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3Qoc3RydWN0DQo+IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMNCj4gIAkJCWdvdG8gb3V0X3VubG9j azsNCj4gIAkJfQ0KPiANCj4gLQkJbGFuZV9jb3VudCA9IG1pbl90KGludCwgbWdyLT5kcGNkWzJd ICYNCj4gRFBfTUFYX0xBTkVfQ09VTlRfTUFTSywgbWdyLT5tYXhfbGFuZV9jb3VudCk7DQo+IC0J CWxpbmtfcmF0ZSA9IG1pbl90KGludCwgZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKG1nci0N Cj4gPmRwY2RbMV0pLCBtZ3ItPm1heF9saW5rX3JhdGUpOw0KPiAtCQltZ3ItPnBibl9kaXYgPSBk cm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncobWdyLA0KPiAtCQkJCQkJCWxpbmtfcmF0ZSwNCj4gLQkJ CQkJCQlsYW5lX2NvdW50KTsNCj4gLQkJaWYgKG1nci0+cGJuX2RpdiA9PSAwKSB7DQo+IC0JCQly ZXQgPSAtRUlOVkFMOw0KPiAtCQkJZ290byBvdXRfdW5sb2NrOw0KPiAtCQl9DQo+IC0NCj4gIAkJ LyogYWRkIGluaXRpYWwgYnJhbmNoIGRldmljZSBhdCBMQ1QgMSAqLw0KPiAgCQltc3RiID0gZHJt X2RwX2FkZF9tc3RfYnJhbmNoX2RldmljZSgxLCBOVUxMKTsNCj4gIAkJaWYgKG1zdGIgPT0gTlVM TCkgew0KPiBAQCAtMzc2Myw5ICszNjQ2LDggQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy X3NldF9tc3Qoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMN Cj4gIAkJaWYgKHJldCA8IDApDQo+ICAJCQlnb3RvIG91dF91bmxvY2s7DQo+IA0KPiAtCQlyZXNl dF9wYXkuc3RhcnRfc2xvdCA9IDA7DQo+IC0JCXJlc2V0X3BheS5udW1fc2xvdHMgPSAweDNmOw0K PiAtCQlkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKG1nciwgMCwgJnJlc2V0X3BheSk7DQo+ICsJ CS8qIFdyaXRlIHJlc2V0IHBheWxvYWQgKi8NCj4gKwkJZHJtX2RwX2RwY2Rfd3JpdGVfcGF5bG9h ZChtZ3IsIDAsIDAsIDB4M2YpOw0KPiANCj4gIAkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwg Jm1nci0+d29yayk7DQo+IA0KPiBAQCAtMzc3NywxOSArMzY1OSwxMSBAQCBpbnQgZHJtX2RwX21z dF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwgYm9vbCBtcw0KPiAgCQkvKiB0aGlzIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2UgaXMgZ29u ZSAqLw0KPiAgCQlkcm1fZHBfZHBjZF93cml0ZWIobWdyLT5hdXgsIERQX01TVE1fQ1RSTCwgMCk7 DQo+ICAJCXJldCA9IDA7DQo+IC0JCW1lbXNldChtZ3ItPnBheWxvYWRzLCAwLA0KPiAtCQkgICAg ICAgbWdyLT5tYXhfcGF5bG9hZHMgKiBzaXplb2YobWdyLT5wYXlsb2Fkc1swXSkpOw0KPiAtCQlt ZW1zZXQobWdyLT5wcm9wb3NlZF92Y3BpcywgMCwNCj4gLQkJICAgICAgIG1nci0+bWF4X3BheWxv YWRzICogc2l6ZW9mKG1nci0+cHJvcG9zZWRfdmNwaXNbMF0pKTsNCj4gLQkJbWdyLT5wYXlsb2Fk X21hc2sgPSAwOw0KPiAtCQlzZXRfYml0KDAsICZtZ3ItPnBheWxvYWRfbWFzayk7DQo+IC0JCW1n ci0+dmNwaV9tYXNrID0gMDsNCj4gIAkJbWdyLT5wYXlsb2FkX2lkX3RhYmxlX2NsZWFyZWQgPSBm YWxzZTsNCj4gIAl9DQo+IA0KPiAgb3V0X3VubG9jazoNCj4gIAltdXRleF91bmxvY2soJm1nci0+ bG9jayk7DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+ICAJaWYgKG1z dGIpDQo+ICAJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIobXN0Yik7DQo+ICAJcmV0dXJu IHJldDsNCj4gQEAgLTQzMTAsNjIgKzQxODQsMTggQEAgc3RydWN0IGVkaWQgKmRybV9kcF9tc3Rf Z2V0X2VkaWQoc3RydWN0DQo+IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRybV9k cF8NCj4gIH0NCj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9nZXRfZWRpZCk7DQo+IA0KPiAt LyoqDQo+IC0gKiBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIHRpbWUgc2xvdHMgZm9y IHRoaXMgUEJOIHZhbHVlDQo+IC0gKiBAbWdyOiBtYW5hZ2VyIHRvIHVzZQ0KPiAtICogQHBibjog cGF5bG9hZCBiYW5kd2lkdGggdG8gY29udmVydCBpbnRvIHNsb3RzLg0KPiAtICoNCj4gLSAqIENh bGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHRpbWUgc2xvdHMgdGhhdCB3aWxsIGJlIHJlcXVpcmVkIGZv ciB0aGUgZ2l2ZW4gUEJODQo+IC0gKiB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVk LCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGF0b21pYw0KPiAtICogZHJpdmVycy4NCj4gLSAq DQo+IC0gKiBSRVRVUk5TOg0KPiAtICogVGhlIHRvdGFsIHNsb3RzIHJlcXVpcmVkIGZvciB0aGlz IHBvcnQsIG9yIGVycm9yLg0KPiAtICovDQo+IC1pbnQgZHJtX2RwX2ZpbmRfdmNwaV9zbG90cyhz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgIGludCBwYm4pDQo+ IC17DQo+IC0JaW50IG51bV9zbG90czsNCj4gLQ0KPiAtCW51bV9zbG90cyA9IERJVl9ST1VORF9V UChwYm4sIG1nci0+cGJuX2Rpdik7DQo+IC0NCj4gLQkvKiBtYXguIHRpbWUgc2xvdHMgLSBvbmUg c2xvdCBmb3IgTVRQIGhlYWRlciAqLw0KPiAtCWlmIChudW1fc2xvdHMgPiA2MykNCj4gLQkJcmV0 dXJuIC1FTk9TUEM7DQo+IC0JcmV0dXJuIG51bV9zbG90czsNCj4gLX0NCj4gLUVYUE9SVF9TWU1C T0woZHJtX2RwX2ZpbmRfdmNwaV9zbG90cyk7DQo+IC0NCj4gLXN0YXRpYyBpbnQgZHJtX2RwX2lu aXRfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgICBz dHJ1Y3QgZHJtX2RwX3ZjcGkgKnZjcGksIGludCBwYm4sIGludCBzbG90cykNCj4gLXsNCj4gLQlp bnQgcmV0Ow0KPiAtDQo+IC0JdmNwaS0+cGJuID0gcGJuOw0KPiAtCXZjcGktPmFsaWduZWRfcGJu ID0gc2xvdHMgKiBtZ3ItPnBibl9kaXY7DQo+IC0JdmNwaS0+bnVtX3Nsb3RzID0gc2xvdHM7DQo+ IC0NCj4gLQlyZXQgPSBkcm1fZHBfbXN0X2Fzc2lnbl9wYXlsb2FkX2lkKG1nciwgdmNwaSk7DQo+ IC0JaWYgKHJldCA8IDApDQo+IC0JCXJldHVybiByZXQ7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+ IC0NCj4gIC8qKg0KPiAgICogZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoKSAtIEZpbmQg YW5kIGFkZCB0aW1lIHNsb3RzIHRvIHRoZSBzdGF0ZQ0KPiAgICogQHN0YXRlOiBnbG9iYWwgYXRv bWljIHN0YXRlDQo+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQN Cj4gICAqIEBwb3J0OiBwb3J0IHRvIGZpbmQgdGltZSBzbG90cyBmb3INCj4gICAqIEBwYm46IGJh bmR3aWR0aCByZXF1aXJlZCBmb3IgdGhlIG1vZGUgaW4gUEJODQo+IC0gKiBAcGJuX2RpdjogZGl2 aWRlciBmb3IgRFNDIG1vZGUgdGhhdCB0YWtlcyBGRUMgaW50byBhY2NvdW50DQo+ICAgKg0KPiAt ICogQWxsb2NhdGVzIHRpbWUgc2xvdHMgdG8gQHBvcnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMg dGltZXNsb3QgYWxsb2NhdGlvbnMgaXQNCj4gLSAqIG1heSBoYXZlIGhhZC4gQW55IGF0b21pYyBk cml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzDQo+IGZ1bmN0aW9uDQo+IC0g KiBpbiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxi YWNrIHRvIGNoYW5nZQ0KPiB0aGUNCj4gLSAqIGN1cnJlbnQgdGltZXNsb3QgYWxsb2NhdGlvbiBm b3IgdGhlIG5ldyBzdGF0ZSwgYnV0IG9ubHkgd2hlbg0KPiAtICogJmRybV9jcnRjX3N0YXRlLm1v ZGVfY2hhbmdlZCBvcg0KPiAmZHJtX2NydGNfc3RhdGUuY29ubmVjdG9yc19jaGFuZ2VkIGlzIHNl dA0KPiAtICogdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UgYXBwbGljYXRp b25zIHRoYXQgc3RpbGwgdXNlIHRoZQ0KPiAtICogbGVnYWN5IG1vZGVzZXR0aW5nIFVBUEkuDQo+ ICsgKiBBbGxvY2F0ZXMgdGltZSBzbG90cyB0byBAcG9ydCwgcmVwbGFjaW5nIGFueSBwcmV2aW91 cyB0aW1lIHNsb3QgYWxsb2NhdGlvbnMNCj4gaXQgbWF5DQo+ICsgKiBoYXZlIGhhZC4gQW55IGF0 b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGlu DQo+ICsgKiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNh bGxiYWNrDQo+IHVuY29uZGl0aW9uYWxseSB0bw0KPiArICogY2hhbmdlIHRoZSBjdXJyZW50IHRp bWUgc2xvdCBhbGxvY2F0aW9uIGZvciB0aGUgbmV3IHN0YXRlLCBhbmQgZW5zdXJlIHRoZQ0KPiBN U1QNCj4gKyAqIGF0b21pYyBzdGF0ZSBpcyBhZGRlZCB3aGVuZXZlciB0aGUgc3RhdGUgb2YgcGF5 bG9hZHMgaW4gdGhlIHRvcG9sb2d5DQo+IGNoYW5nZXMuDQo+ICAgKg0KPiAgICogQWxsb2NhdGlv bnMgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gYXJlIG5vdCBjaGVja2VkIGFnYWluc3QgdGhlIGJhbmR3 aWR0aA0KPiAgICogcmVzdHJhaW50cyBvZiBAbWdyIHVudGlsIHRoZSBkcml2ZXIgY2FsbHMgZHJt X2RwX21zdF9hdG9taWNfY2hlY2soKS4NCj4gQEAgLTQzODQsOCArNDIxNCw3IEBAIHN0YXRpYyBp bnQgZHJtX2RwX2luaXRfdmNwaShzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1n ciwNCj4gICAqLw0KPiAgaW50IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X21nciAqbWdyLA0KPiAtCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50 IHBibiwNCj4gLQkJCQkgIGludCBwYm5fZGl2KQ0KPiArCQkJCSAgc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCwgaW50IHBibikNCj4gIHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3Bh eWxvYWQgKnBheWxvYWQgPSBOVUxMOw0KPiBAQCAtNDQxOCwxMCArNDI0Nyw3IEBAIGludCBkcm1f ZHBfYXRvbWljX2ZpbmRfdGltZV9zbG90cyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUsDQo+ICAJCX0NCj4gIAl9DQo+IA0KPiAtCWlmIChwYm5fZGl2IDw9IDApDQo+IC0JCXBibl9k aXYgPSBtZ3ItPnBibl9kaXY7DQo+IC0NCj4gLQlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJu LCBwYm5fZGl2KTsNCj4gKwlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCB0b3BvbG9neV9z dGF0ZS0+cGJuX2Rpdik7DQo+IA0KPiAgCWRybV9kYmdfYXRvbWljKG1nci0+ZGV2LCAiW0NPTk5F Q1RPUjolZDolc10gW01TVCBQT1JUOiVwXQ0KPiBUVSAlZCAtPiAlZFxuIiwNCj4gIAkJICAgICAg IHBvcnQtPmNvbm5lY3Rvci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLA0KPiBAQCAt NDQzMCw3ICs0MjU2LDcgQEAgaW50IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0cnVj dA0KPiBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJICAgICAgIHBvcnQtPmNvbm5lY3Rv ci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLA0KPiAgCQkgICAgICAgcG9ydCwgcHJl dl9idywgcGJuKTsNCj4gDQo+IC0JLyogQWRkIHRoZSBuZXcgYWxsb2NhdGlvbiB0byB0aGUgc3Rh dGUgKi8NCj4gKwkvKiBBZGQgdGhlIG5ldyBhbGxvY2F0aW9uIHRvIHRoZSBzdGF0ZSwgbm90ZSB0 aGUgVkNQSSBpc24ndCBhc3NpZ25lZA0KPiB1bnRpbCB0aGUgZW5kICovDQo+ICAJaWYgKCFwYXls b2FkKSB7DQo+ICAJCXBheWxvYWQgPSBremFsbG9jKHNpemVvZigqcGF5bG9hZCksIEdGUF9LRVJO RUwpOw0KPiAgCQlpZiAoIXBheWxvYWQpDQo+IEBAIC00NDM4LDYgKzQyNjQsNyBAQCBpbnQgZHJt X2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RydWN0DQo+IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLA0KPiANCj4gIAkJZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2MocG9ydCk7DQo+ICAJCXBh eWxvYWQtPnBvcnQgPSBwb3J0Ow0KPiArCQlwYXlsb2FkLT52Y19zdGFydF9zbG90ID0gLTE7DQo+ ICAJCWxpc3RfYWRkKCZwYXlsb2FkLT5uZXh0LCAmdG9wb2xvZ3lfc3RhdGUtPnBheWxvYWRzKTsN Cj4gIAl9DQo+ICAJcGF5bG9hZC0+dGltZV9zbG90cyA9IHJlcV9zbG90czsNCj4gQEAgLTQ0NTQs MTAgKzQyODEsMTIgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdGltZV9z bG90cyk7DQo+ICAgKiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0aGUgdGltZSBzbG90cyBm cm9tDQo+ICAgKg0KPiAgICogUmVsZWFzZXMgYW55IHRpbWUgc2xvdHMgdGhhdCBoYXZlIGJlZW4g YWxsb2NhdGVkIHRvIGEgcG9ydCBpbiB0aGUgYXRvbWljDQo+IC0gKiBzdGF0ZS4gQW55IGF0b21p YyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluDQo+ IC0gKiB0aGVpciAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MuYXRvbWljX2NoZWNrKCkgY2Fs bGJhY2sgd2hlbiB0aGUNCj4gLSAqIGNvbm5lY3RvciB3aWxsIG5vIGxvbmdlciBoYXZlIFZDUEkg YWxsb2NhdGVkIChlLmcuIGJlY2F1c2UgaXRzIENSVEMgd2FzDQo+IC0gKiByZW1vdmVkKSB3aGVu IGl0IGhhZCBWQ1BJIGFsbG9jYXRlZCBpbiB0aGUgcHJldmlvdXMgYXRvbWljIHN0YXRlLg0KPiAr ICogc3RhdGUuIEFueSBhdG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNhbGwg dGhpcyBmdW5jdGlvbg0KPiArICogdW5jb25kaXRpb25hbGx5IGluIHRoZWlyICZkcm1fY29ubmVj dG9yX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKQ0KPiBjYWxsYmFjay4NCj4gKyAqIFRoaXMg aGVscGVyIHdpbGwgY2hlY2sgd2hldGhlciB0aW1lIHNsb3RzIHdvdWxkIGJlIHJlbGVhc2VkIGJ5 IHRoZSBuZXcNCj4gc3RhdGUgYW5kDQo+ICsgKiByZXNwb25kIGFjY29yZGluZ2x5LCBhbG9uZyB3 aXRoIGVuc3VyaW5nIHRoZSBNU1Qgc3RhdGUgaXMgYWx3YXlzIGFkZGVkDQo+IHRvIHRoZQ0KPiAr ICogYXRvbWljIHN0YXRlIHdoZW5ldmVyIGEgbmV3IHN0YXRlIHdvdWxkIG1vZGlmeSB0aGUgc3Rh dGUgb2YgcGF5bG9hZHMNCj4gb24gdGhlDQo+ICsgKiB0b3BvbG9neS4NCj4gICAqDQo+ICAgKiBJ dCBpcyBPSyB0byBjYWxsIHRoaXMgZXZlbiBpZiBAcG9ydCBoYXMgYmVlbiByZW1vdmVkIGZyb20g dGhlIHN5c3RlbS4NCj4gICAqIEFkZGl0aW9uYWxseSwgaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1 bmN0aW9uIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lDQo+IEBAIC00NTE5LDYgKzQzNDgsNyBA QCBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3RpbWVfc2xvdHMoc3RydWN0DQo+IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlLA0KPiAgCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3J0KTsN Cj4gIAkJcGF5bG9hZC0+cGJuID0gMDsNCj4gIAkJcGF5bG9hZC0+ZGVsZXRlID0gdHJ1ZTsNCj4g KwkJdG9wb2xvZ3lfc3RhdGUtPnBheWxvYWRfbWFzayAmPSB+QklUKHBheWxvYWQtPnZjcGkgLSAx KTsNCj4gIAl9DQo+IA0KPiAgCXJldHVybiAwOw0KPiBAQCAtNDU2OSw3ICs0Mzk5LDggQEAgaW50 IGRybV9kcF9tc3RfYXRvbWljX3NldHVwX2NvbW1pdChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpDQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfYXRvbWljX3NldHVwX2NvbW1p dCk7DQo+IA0KPiAgLyoqDQo+IC0gKiBkcm1fZHBfbXN0X2F0b21pY193YWl0X2Zvcl9kZXBlbmRl bmNpZXMoKSAtIFdhaXQgZm9yIGFsbCBwZW5kaW5nDQo+IGNvbW1pdHMgb24gTVNUIHRvcG9sb2dp ZXMNCj4gKyAqIGRybV9kcF9tc3RfYXRvbWljX3dhaXRfZm9yX2RlcGVuZGVuY2llcygpIC0gV2Fp dCBmb3IgYWxsIHBlbmRpbmcNCj4gY29tbWl0cyBvbiBNU1QgdG9wb2xvZ2llcywNCj4gKyAqIHBy ZXBhcmUgbmV3IE1TVCBzdGF0ZSBmb3IgY29tbWl0DQo+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9t aWMgc3RhdGUNCj4gICAqDQo+ICAgKiBHb2VzIHRocm91Z2ggYW55IE1TVCB0b3BvbG9naWVzIGlu IHRoaXMgYXRvbWljIHN0YXRlLCBhbmQgd2FpdHMgZm9yIGFueQ0KPiBwZW5kaW5nIGNvbW1pdHMg d2hpY2gNCj4gQEAgLTQ1ODcsMTcgKzQ0MTgsMzAgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBf bXN0X2F0b21pY19zZXR1cF9jb21taXQpOw0KPiAgICovDQo+ICB2b2lkIGRybV9kcF9tc3RfYXRv bWljX3dhaXRfZm9yX2RlcGVuZGVuY2llcyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUpDQo+ICB7DQo+IC0Jc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm9sZF9tc3Rf c3RhdGU7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm9sZF9tc3Rfc3Rh dGUsDQo+ICpuZXdfbXN0X3N0YXRlOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n ciAqbWdyOw0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICpvbGRfcGF5bG9h ZCwgKm5ld19wYXlsb2FkOw0KPiAgCWludCBpLCBqLCByZXQ7DQo+IA0KPiAtCWZvcl9lYWNoX29s ZF9tc3RfbWdyX2luX3N0YXRlKHN0YXRlLCBtZ3IsIG9sZF9tc3Rfc3RhdGUsIGkpIHsNCj4gKwlm b3JfZWFjaF9vbGRuZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBvbGRfbXN0X3N0YXRl LA0KPiBuZXdfbXN0X3N0YXRlLCBpKSB7DQo+ICAJCWZvciAoaiA9IDA7IGogPCBvbGRfbXN0X3N0 YXRlLT5udW1fY29tbWl0X2RlcHM7IGorKykgew0KPiAgCQkJcmV0ID0gZHJtX2NydGNfY29tbWl0 X3dhaXQob2xkX21zdF9zdGF0ZS0NCj4gPmNvbW1pdF9kZXBzW2pdKTsNCj4gIAkJCWlmIChyZXQg PCAwKQ0KPiAgCQkJCWRybV9lcnIoc3RhdGUtPmRldiwgIkZhaWxlZCB0byB3YWl0IGZvciAlczoN Cj4gJWRcbiIsDQo+ICAJCQkJCW9sZF9tc3Rfc3RhdGUtPmNvbW1pdF9kZXBzW2pdLQ0KPiA+Y3J0 Yy0+bmFtZSwgcmV0KTsNCj4gIAkJfQ0KPiArDQo+ICsJCS8qIE5vdyB0aGF0IHByZXZpb3VzIHN0 YXRlIGlzIGNvbW1pdHRlZCwgaXQncyBzYWZlIHRvIGNvcHkNCj4gb3ZlciB0aGUgc3RhcnQgc2xv dA0KPiArCQkgKiBhc3NpZ25tZW50cw0KPiArCQkgKi8NCj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRy eShvbGRfcGF5bG9hZCwgJm9sZF9tc3Rfc3RhdGUtPnBheWxvYWRzLA0KPiBuZXh0KSB7DQo+ICsJ CQlpZiAob2xkX3BheWxvYWQtPmRlbGV0ZSkNCj4gKwkJCQljb250aW51ZTsNCj4gKw0KPiArCQkJ bmV3X3BheWxvYWQgPQ0KPiBkcm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShuZXdfbXN0 X3N0YXRlLA0KPiArDQo+IG9sZF9wYXlsb2FkLT5wb3J0KTsNCj4gKwkJCW5ld19wYXlsb2FkLT52 Y19zdGFydF9zbG90ID0gb2xkX3BheWxvYWQtDQo+ID52Y19zdGFydF9zbG90Ow0KPiArCQl9DQo+ ICAJfQ0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2F0b21pY193YWl0X2Zvcl9k ZXBlbmRlbmNpZXMpOw0KPiBAQCAtNDY4MiwxMTAgKzQ1MjYsOCBAQCB2b2lkIGRybV9kcF9tc3Rf dXBkYXRlX3Nsb3RzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3Rh dGUsIHVpbnQ4Xw0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X3VwZGF0ZV9zbG90 cyk7DQo+IA0KPiAtLyoqDQo+IC0gKiBkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkoKSAtIEFsbG9j YXRlIGEgdmlydHVhbCBjaGFubmVsDQo+IC0gKiBAbWdyOiBtYW5hZ2VyIGZvciB0aGlzIHBvcnQN Cj4gLSAqIEBwb3J0OiBwb3J0IHRvIGFsbG9jYXRlIGEgdmlydHVhbCBjaGFubmVsIGZvci4NCj4g LSAqIEBwYm46IHBheWxvYWQgYmFuZHdpZHRoIG51bWJlciB0byByZXF1ZXN0DQo+IC0gKiBAc2xv dHM6IHJldHVybmVkIG51bWJlciBvZiBzbG90cyBmb3IgdGhpcyBQQk4uDQo+IC0gKi8NCj4gLWJv b2wgZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n ciAqbWdyLA0KPiAtCQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBi biwgaW50IHNsb3RzKQ0KPiAtew0KPiAtCWludCByZXQ7DQo+IC0NCj4gLQlpZiAoc2xvdHMgPCAw KQ0KPiAtCQlyZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQlwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfcG9ydF92YWxpZGF0ZWQobWdyLCBwb3J0KTsNCj4gLQlpZiAoIXBvcnQpDQo+IC0JCXJl dHVybiBmYWxzZTsNCj4gLQ0KPiAtCWlmIChwb3J0LT52Y3BpLnZjcGkgPiAwKSB7DQo+IC0JCWRy bV9kYmdfa21zKG1nci0+ZGV2LA0KPiAtCQkJICAgICJwYXlsb2FkOiB2Y3BpICVkIGFscmVhZHkg YWxsb2NhdGVkIGZvciBwYm4gJWQgLQ0KPiByZXF1ZXN0ZWQgcGJuICVkXG4iLA0KPiAtCQkJICAg IHBvcnQtPnZjcGkudmNwaSwgcG9ydC0+dmNwaS5wYm4sIHBibik7DQo+IC0JCWlmIChwYm4gPT0g cG9ydC0+dmNwaS5wYm4pIHsNCj4gLQkJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9y dCk7DQo+IC0JCQlyZXR1cm4gdHJ1ZTsNCj4gLQkJfQ0KPiAtCX0NCj4gLQ0KPiAtCXJldCA9IGRy bV9kcF9pbml0X3ZjcGkobWdyLCAmcG9ydC0+dmNwaSwgcGJuLCBzbG90cyk7DQo+IC0JaWYgKHJl dCkgew0KPiAtCQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgImZhaWxlZCB0byBpbml0IHRpbWUgc2xv dHM9JWQNCj4gcmV0PSVkXG4iLA0KPiAtCQkJICAgIERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJu X2RpdiksIHJldCk7DQo+IC0JCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7DQo+ IC0JCWdvdG8gb3V0Ow0KPiAtCX0NCj4gLQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgImluaXRpbmcg dmNwaSBmb3IgcGJuPSVkIHNsb3RzPSVkXG4iLCBwYm4sDQo+IHBvcnQtPnZjcGkubnVtX3Nsb3Rz KTsNCj4gLQ0KPiAtCS8qIEtlZXAgcG9ydCBhbGxvY2F0ZWQgdW50aWwgaXRzIHBheWxvYWQgaGFz IGJlZW4gcmVtb3ZlZCAqLw0KPiAtCWRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKHBvcnQpOw0K PiAtCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7DQo+IC0JcmV0dXJuIHRydWU7 DQo+IC1vdXQ6DQo+IC0JcmV0dXJuIGZhbHNlOw0KPiAtfQ0KPiAtRVhQT1JUX1NZTUJPTChkcm1f ZHBfbXN0X2FsbG9jYXRlX3ZjcGkpOw0KPiAtDQo+IC1pbnQgZHJtX2RwX21zdF9nZXRfdmNwaV9z bG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gc3RydWN0IGRybV9k cF9tc3RfcG9ydCAqcG9ydCkNCj4gLXsNCj4gLQlpbnQgc2xvdHMgPSAwOw0KPiAtDQo+IC0JcG9y dCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKG1nciwgcG9ydCk7DQo+ IC0JaWYgKCFwb3J0KQ0KPiAtCQlyZXR1cm4gc2xvdHM7DQo+IC0NCj4gLQlzbG90cyA9IHBvcnQt PnZjcGkubnVtX3Nsb3RzOw0KPiAtCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7 DQo+IC0JcmV0dXJuIHNsb3RzOw0KPiAtfQ0KPiAtRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2dl dF92Y3BpX3Nsb3RzKTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBkcm1fZHBfbXN0X3Jlc2V0X3ZjcGlf c2xvdHMoKSAtIFJlc2V0IG51bWJlciBvZiBzbG90cyB0byAwIGZvciBWQ1BJDQo+IC0gKiBAbWdy OiBtYW5hZ2VyIGZvciB0aGlzIHBvcnQNCj4gLSAqIEBwb3J0OiB1bnZlcmlmaWVkIHBvaW50ZXIg dG8gYSBwb3J0Lg0KPiAtICoNCj4gLSAqIFRoaXMganVzdCByZXNldHMgdGhlIG51bWJlciBvZiBz bG90cyBmb3IgdGhlIHBvcnRzIFZDUEkgZm9yIGxhdGVyDQo+IHByb2dyYW1taW5nLg0KPiAtICov DQo+IC12b2lkIGRybV9kcF9tc3RfcmVzZXRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3INCj4gKm1nciwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkNCj4gLXsN Cj4gLQkvKg0KPiAtCSAqIEEgcG9ydCB3aXRoIFZDUEkgd2lsbCByZW1haW4gYWxsb2NhdGVkIHVu dGlsIGl0cyBWQ1BJIGlzDQo+IC0JICogcmVsZWFzZWQsIG5vIHZlcmlmaWVkIHJlZiBuZWVkZWQN Cj4gLQkgKi8NCj4gLQ0KPiAtCXBvcnQtPnZjcGkubnVtX3Nsb3RzID0gMDsNCj4gLX0NCj4gLUVY UE9SVF9TWU1CT0woZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKTsNCj4gLQ0KPiAtLyoqDQo+ IC0gKiBkcm1fZHBfbXN0X2RlYWxsb2NhdGVfdmNwaSgpIC0gZGVhbGxvY2F0ZSBhIFZDUEkNCj4g LSAqIEBtZ3I6IG1hbmFnZXIgZm9yIHRoaXMgcG9ydA0KPiAtICogQHBvcnQ6IHBvcnQgdG8gZGVh bGxvY2F0ZSB2Y3BpIGZvcg0KPiAtICoNCj4gLSAqIFRoaXMgY2FuIGJlIGNhbGxlZCB1bmNvbmRp dGlvbmFsbHksIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcg0KPiAtICogZHJtX2RwX21zdF9hbGxvY2F0 ZV92Y3BpKCkgc3VjY2VlZGVkIG9yIG5vdC4NCj4gLSAqLw0KPiAtdm9pZCBkcm1fZHBfbXN0X2Rl YWxsb2NhdGVfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJ CQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQ0KPiAtew0KPiAtCWlmICghcG9ydC0+dmNw aS52Y3BpKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlkcm1fZHBfbXN0X3B1dF9wYXlsb2FkX2lk KG1nciwgcG9ydC0+dmNwaS52Y3BpKTsNCj4gLQlwb3J0LT52Y3BpLm51bV9zbG90cyA9IDA7DQo+ IC0JcG9ydC0+dmNwaS5wYm4gPSAwOw0KPiAtCXBvcnQtPnZjcGkuYWxpZ25lZF9wYm4gPSAwOw0K PiAtCXBvcnQtPnZjcGkudmNwaSA9IDA7DQo+IC0JZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2Mo cG9ydCk7DQo+IC19DQo+IC1FWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3Bp KTsNCj4gLQ0KPiAgc3RhdGljIGludCBkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X21ncg0KPiAqbWdyLA0KPiAtCQkJCSAgICAgaW50IGlkLCBzdHJ1 Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQpDQo+ICsJCQkJICAgICBpbnQgaWQsIHU4IHN0YXJ0 X3Nsb3QsIHU4IG51bV9zbG90cykNCj4gIHsNCj4gIAl1OCBwYXlsb2FkX2FsbG9jWzNdLCBzdGF0 dXM7DQo+ICAJaW50IHJldDsNCj4gQEAgLTQ3OTUsOCArNDUzNyw4IEBAIHN0YXRpYyBpbnQgZHJt X2RwX2RwY2Rfd3JpdGVfcGF5bG9hZChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwNCj4gIAkJCSAgIERQX1BBWUxPQURfVEFCTEVfVVBEQVRFRCk7DQo+IA0KPiAgCXBheWxv YWRfYWxsb2NbMF0gPSBpZDsNCj4gLQlwYXlsb2FkX2FsbG9jWzFdID0gcGF5bG9hZC0+c3RhcnRf c2xvdDsNCj4gLQlwYXlsb2FkX2FsbG9jWzJdID0gcGF5bG9hZC0+bnVtX3Nsb3RzOw0KPiArCXBh eWxvYWRfYWxsb2NbMV0gPSBzdGFydF9zbG90Ow0KPiArCXBheWxvYWRfYWxsb2NbMl0gPSBudW1f c2xvdHM7DQo+IA0KPiAgCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlKG1nci0+YXV4LCBEUF9QQVlM T0FEX0FMTE9DQVRFX1NFVCwNCj4gcGF5bG9hZF9hbGxvYywgMyk7DQo+ICAJaWYgKHJldCAhPSAz KSB7DQo+IEBAIC01MDExLDggKzQ3NTMsOSBAQCBzdGF0aWMgdm9pZCBmZXRjaF9tb25pdG9yX25h bWUoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICB2b2lkIGRybV9k cF9tc3RfZHVtcF90b3BvbG9neShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sDQo+ICAJCQkgICAgICBzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncikNCj4gIHsNCj4gLQlpbnQgaTsNCj4gLQlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Ow0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICpzdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAq cGF5bG9hZDsNCj4gKwlpbnQgaSwgcmV0Ow0KPiANCj4gIAltdXRleF9sb2NrKCZtZ3ItPmxvY2sp Ow0KPiAgCWlmIChtZ3ItPm1zdF9wcmltYXJ5KQ0KPiBAQCAtNTAyMSwzNiArNDc2NCwzNSBAQCB2 b2lkIGRybV9kcF9tc3RfZHVtcF90b3BvbG9neShzdHJ1Y3QNCj4gc2VxX2ZpbGUgKm0sDQo+ICAJ LyogZHVtcCBWQ1BJcyAqLw0KPiAgCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsNCj4gDQo+IC0J bXV0ZXhfbG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiAtCXNlcV9wcmludGYobSwgIlxuKioq IFZDUEkgSW5mbyAqKipcbiIpOw0KPiAtCXNlcV9wcmludGYobSwgInBheWxvYWRfbWFzazogJWx4 LCB2Y3BpX21hc2s6ICVseCwgbWF4X3BheWxvYWRzOg0KPiAlZFxuIiwgbWdyLT5wYXlsb2FkX21h c2ssIG1nci0+dmNwaV9tYXNrLCBtZ3ItPm1heF9wYXlsb2Fkcyk7DQo+ICsJcmV0ID0gZHJtX21v ZGVzZXRfbG9ja19zaW5nbGVfaW50ZXJydXB0aWJsZSgmbWdyLT5iYXNlLmxvY2spOw0KPiArCWlm IChyZXQgPCAwKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlzdGF0ZSA9IHRvX2RybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUobWdyLT5iYXNlLnN0YXRlKTsNCj4gKwlzZXFfcHJpbnRmKG0sICJcbioq KiBBdG9taWMgc3RhdGUgaW5mbyAqKipcbiIpOw0KPiArCXNlcV9wcmludGYobSwgInBheWxvYWRf bWFzazogJXgsIG1heF9wYXlsb2FkczogJWQsIHN0YXJ0X3Nsb3Q6ICV1LA0KPiBwYm5fZGl2OiAl ZFxuIiwNCj4gKwkJICAgc3RhdGUtPnBheWxvYWRfbWFzaywgbWdyLT5tYXhfcGF5bG9hZHMsIHN0 YXRlLQ0KPiA+c3RhcnRfc2xvdCwgc3RhdGUtPnBibl9kaXYpOw0KPiANCj4gLQlzZXFfcHJpbnRm KG0sICJcbnwgICBpZHggICB8ICBwb3J0ICMgfCAgdmNwX2lkIHwgIyBzbG90cyB8ICAgICBzaW5r IG5hbWUNCj4gfFxuIik7DQo+ICsJc2VxX3ByaW50ZihtLCAiXG58IGlkeCB8IHBvcnQgfCB2Y3Bp IHwgc2xvdHMgfCBwYm4gfCBkc2MgfCAgICAgc2luayBuYW1lDQo+IHxcbiIpOw0KPiAgCWZvciAo aSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0JCWlmIChtZ3ItPnByb3Bv c2VkX3ZjcGlzW2ldKSB7DQo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkocGF5bG9hZCwgJnN0YXRl LT5wYXlsb2FkcywgbmV4dCkgew0KPiAgCQkJY2hhciBuYW1lWzE0XTsNCj4gDQo+IC0JCQlwb3J0 ID0gY29udGFpbmVyX29mKG1nci0+cHJvcG9zZWRfdmNwaXNbaV0sIHN0cnVjdA0KPiBkcm1fZHBf bXN0X3BvcnQsIHZjcGkpOw0KPiAtCQkJZmV0Y2hfbW9uaXRvcl9uYW1lKG1nciwgcG9ydCwgbmFt ZSwNCj4gc2l6ZW9mKG5hbWUpKTsNCj4gLQkJCXNlcV9wcmludGYobSwgIiUxMGQlMTBkJTEwZCUx MGQlMjBzXG4iLA0KPiArCQkJaWYgKHBheWxvYWQtPnZjcGkgIT0gaSB8fCBwYXlsb2FkLT5kZWxl dGUpDQo+ICsJCQkJY29udGludWU7DQo+ICsNCj4gKwkJCWZldGNoX21vbml0b3JfbmFtZShtZ3Is IHBheWxvYWQtPnBvcnQsIG5hbWUsDQo+IHNpemVvZihuYW1lKSk7DQo+ICsJCQlzZXFfcHJpbnRm KG0sICIgJTVkICU2ZCAlNmQgJTAyZCAtICUwMmQgJTVkICU1cw0KPiAlMTlzXG4iLA0KPiAgCQkJ CSAgIGksDQo+IC0JCQkJICAgcG9ydC0+cG9ydF9udW0sDQo+IC0JCQkJICAgcG9ydC0+dmNwaS52 Y3BpLA0KPiAtCQkJCSAgIHBvcnQtPnZjcGkubnVtX3Nsb3RzLA0KPiArCQkJCSAgIHBheWxvYWQt PnBvcnQtPnBvcnRfbnVtLA0KPiArCQkJCSAgIHBheWxvYWQtPnZjcGksDQo+ICsJCQkJICAgcGF5 bG9hZC0+dmNfc3RhcnRfc2xvdCwNCj4gKwkJCQkgICBwYXlsb2FkLT52Y19zdGFydF9zbG90ICsg cGF5bG9hZC0NCj4gPnRpbWVfc2xvdHMgLSAxLA0KPiArCQkJCSAgIHBheWxvYWQtPnBibiwNCj4g KwkJCQkgICBwYXlsb2FkLT5kc2NfZW5hYmxlZCA/ICJZIiA6ICJOIiwNCj4gIAkJCQkgICAoKm5h bWUgIT0gMCkgPyBuYW1lIDogIlVua25vd24iKTsNCj4gLQkJfSBlbHNlDQo+IC0JCQlzZXFfcHJp bnRmKG0sICIlNmQgLSBVbnVzZWRcbiIsIGkpOw0KPiAtCX0NCj4gLQlzZXFfcHJpbnRmKG0sICJc bioqKiBQYXlsb2FkIEluZm8gKioqXG4iKTsNCj4gLQlzZXFfcHJpbnRmKG0sICJ8ICAgaWR4ICAg fCAgc3RhdGUgIHwgIHN0YXJ0IHNsb3QgIHwgIyBzbG90cyB8XG4iKTsNCj4gLQlmb3IgKGkgPSAw OyBpIDwgbWdyLT5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAtCQlzZXFfcHJpbnRmKG0sICIlMTBk JTEwZCUxNWQlMTBkXG4iLA0KPiAtCQkJICAgaSwNCj4gLQkJCSAgIG1nci0+cGF5bG9hZHNbaV0u cGF5bG9hZF9zdGF0ZSwNCj4gLQkJCSAgIG1nci0+cGF5bG9hZHNbaV0uc3RhcnRfc2xvdCwNCj4g LQkJCSAgIG1nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzKTsNCj4gKwkJfQ0KPiAgCX0NCj4gLQlt dXRleF91bmxvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gDQo+ICAJc2VxX3ByaW50ZihtLCAi XG4qKiogRFBDRCBJbmZvICoqKlxuIik7DQo+ICAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsNCj4g QEAgLTUwOTcsNyArNDgzOSw3IEBAIHZvaWQgZHJtX2RwX21zdF9kdW1wX3RvcG9sb2d5KHN0cnVj dCBzZXFfZmlsZQ0KPiAqbSwNCj4gDQo+ICBvdXQ6DQo+ICAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxv Y2spOw0KPiAtDQo+ICsJZHJtX21vZGVzZXRfdW5sb2NrKCZtZ3ItPmJhc2UubG9jayk7DQo+ICB9 DQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZHVtcF90b3BvbG9neSk7DQo+IA0KPiBAQCAt NTQxOCw5ICs1MTYwLDIyIEBADQo+IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrX3BheWxvYWRfYWxs b2NfbGltaXRzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyDQo+ICAJCQkJ ICAgICAgIG1nciwgbXN0X3N0YXRlLCBtZ3ItPm1heF9wYXlsb2Fkcyk7DQo+ICAJCQlyZXR1cm4g LUVJTlZBTDsNCj4gIAkJfQ0KPiArDQo+ICsJCS8qIEFzc2lnbiBhIFZDUEkgKi8NCj4gKwkJaWYg KCFwYXlsb2FkLT52Y3BpKSB7DQo+ICsJCQlwYXlsb2FkLT52Y3BpID0gZmZ6KG1zdF9zdGF0ZS0+ cGF5bG9hZF9tYXNrKSArIDE7DQo+ICsJCQlkcm1fZGJnX2F0b21pYyhtZ3ItPmRldiwgIltNU1Qg UE9SVDolcF0NCj4gYXNzaWduZWQgVkNQSSAjJWRcbiIsDQo+ICsJCQkJICAgICAgIHBheWxvYWQt PnBvcnQsIHBheWxvYWQtPnZjcGkpOw0KPiArCQkJbXN0X3N0YXRlLT5wYXlsb2FkX21hc2sgfD0g QklUKHBheWxvYWQtPnZjcGkgLSAxKTsNCj4gKwkJfQ0KPiAgCX0NCj4gLQlkcm1fZGJnX2F0b21p YyhtZ3ItPmRldiwgIltNU1QgTUdSOiVwXSBtc3Qgc3RhdGUgJXAgVFUNCj4gYXZhaWw9JWQgdXNl ZD0lZFxuIiwNCj4gLQkJICAgICAgIG1nciwgbXN0X3N0YXRlLCBhdmFpbF9zbG90cywgbXN0X3N0 YXRlLT50b3RhbF9hdmFpbF9zbG90cyAtDQo+IGF2YWlsX3Nsb3RzKTsNCj4gKw0KPiArCWlmICgh cGF5bG9hZF9jb3VudCkNCj4gKwkJbXN0X3N0YXRlLT5wYm5fZGl2ID0gMDsNCj4gKw0KPiArCWRy bV9kYmdfYXRvbWljKG1nci0+ZGV2LCAiW01TVCBNR1I6JXBdIG1zdCBzdGF0ZSAlcCBUVQ0KPiBw Ym5fZGl2PSVkIGF2YWlsPSVkIHVzZWQ9JWRcbiIsDQo+ICsJCSAgICAgICBtZ3IsIG1zdF9zdGF0 ZSwgbXN0X3N0YXRlLT5wYm5fZGl2LCBhdmFpbF9zbG90cywNCj4gKwkJICAgICAgIG1zdF9zdGF0 ZS0+dG90YWxfYXZhaWxfc2xvdHMgLSBhdmFpbF9zbG90cyk7DQo+IA0KPiAgCXJldHVybiAwOw0K PiAgfQ0KPiBAQCAtNTQ5MSw3ICs1MjQ2LDYgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0 X2FkZF9hZmZlY3RlZF9kc2NfY3J0Y3MpOw0KPiAgICogQHN0YXRlOiBQb2ludGVyIHRvIHRoZSBu ZXcgZHJtX2F0b21pY19zdGF0ZQ0KPiAgICogQHBvcnQ6IFBvaW50ZXIgdG8gdGhlIGFmZmVjdGVk IE1TVCBQb3J0DQo+ICAgKiBAcGJuOiBOZXdseSByZWNhbGN1bGF0ZWQgYncgcmVxdWlyZWQgZm9y IGxpbmsgd2l0aCBEU0MgZW5hYmxlZA0KPiAtICogQHBibl9kaXY6IERpdmlkZXIgdG8gY2FsY3Vs YXRlIGNvcnJlY3QgbnVtYmVyIG9mIHBibiBwZXIgc2xvdA0KPiAgICogQGVuYWJsZTogQm9vbGVh biBmbGFnIHRvIGVuYWJsZSBvciBkaXNhYmxlIERTQyBvbiB0aGUgcG9ydA0KPiAgICoNCj4gICAq IFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBEU0Mgb24gdGhlIGdpdmVuIFBvcnQNCj4gQEAgLTU1MDIs OCArNTI1Niw3IEBADQo+IEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9hZGRfYWZmZWN0ZWRfZHNj X2NydGNzKTsNCj4gICAqLw0KPiAgaW50IGRybV9kcF9tc3RfYXRvbWljX2VuYWJsZV9kc2Moc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAgCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0LA0KPiAtCQkJCSBpbnQgcGJuLCBpbnQgcGJuX2RpdiwNCj4gLQkJCQkgYm9vbCBl bmFibGUpDQo+ICsJCQkJIGludCBwYm4sIGJvb2wgZW5hYmxlKQ0KPiAgew0KPiAgCXN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQ7DQo+IEBAIC01NTI5LDcgKzUyODIsNyBAQCBpbnQg ZHJtX2RwX21zdF9hdG9taWNfZW5hYmxlX2RzYyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJfQ0KPiANCj4gIAlpZiAoZW5hYmxlKSB7DQo+IC0JCXRpbWVfc2xvdHMgPSBk cm1fZHBfYXRvbWljX2ZpbmRfdGltZV9zbG90cyhzdGF0ZSwgcG9ydC0NCj4gPm1nciwgcG9ydCwg cGJuLCBwYm5fZGl2KTsNCj4gKwkJdGltZV9zbG90cyA9IGRybV9kcF9hdG9taWNfZmluZF90aW1l X3Nsb3RzKHN0YXRlLCBwb3J0LQ0KPiA+bWdyLCBwb3J0LCBwYm4pOw0KPiAgCQlkcm1fZGJnX2F0 b21pYyhzdGF0ZS0+ZGV2LA0KPiAgCQkJICAgICAgICJbTVNUIFBPUlQ6JXBdIEVuYWJsaW5nIERT QyBmbGFnLCByZWFsbG9jYXRpbmcNCj4gJWQgdGltZSBzbG90cyBvbiB0aGUgcG9ydFxuIiwNCj4g IAkJCSAgICAgICBwb3J0LCB0aW1lX3Nsb3RzKTsNCj4gQEAgLTU1NDIsNiArNTI5NSw3IEBAIGlu dCBkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0cnVjdA0KPiBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwNCj4gIAlyZXR1cm4gdGltZV9zbG90czsNCj4gIH0NCj4gIEVYUE9SVF9TWU1CT0wo ZHJtX2RwX21zdF9hdG9taWNfZW5hYmxlX2RzYyk7DQo+ICsNCj4gIC8qKg0KPiAgICogZHJtX2Rw X21zdF9hdG9taWNfY2hlY2sgLSBDaGVjayB0aGF0IHRoZSBuZXcgc3RhdGUgb2YgYW4gTVNUDQo+ IHRvcG9sb2d5IGluIGFuDQo+ICAgKiBhdG9taWMgdXBkYXRlIGlzIHZhbGlkDQo+IEBAIC01NTk5 LDcgKzUzNTMsNiBAQA0KPiBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVf ZnVuY3MpOw0KPiANCj4gIC8qKg0KPiAgICogZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0 YXRlOiBnZXQgTVNUIHRvcG9sb2d5IHN0YXRlDQo+IC0gKg0KPiAgICogQHN0YXRlOiBnbG9iYWwg YXRvbWljIHN0YXRlDQo+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciwgYWxzbyB0aGUg cHJpdmF0ZSBvYmplY3QgaW4gdGhpcyBjYXNlDQo+ICAgKg0KPiBAQCAtNTYxOSw2ICs1MzcyLDMx IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlDQo+ICpkcm1fYXRvbWljX2dldF9t c3RfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9hDQo+ICB9DQo+ICBFWFBPUlRfU1lNQk9MKGRy bV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZSk7DQo+IA0KPiArLyoqDQo+ICsgKiBkcm1f YXRvbWljX2dldF9uZXdfbXN0X3RvcG9sb2d5X3N0YXRlOiBnZXQgbmV3IE1TVCB0b3BvbG9neSBz dGF0ZQ0KPiBpbiBhdG9taWMgc3RhdGUsIGlmIGFueQ0KPiArICogQHN0YXRlOiBnbG9iYWwgYXRv bWljIHN0YXRlDQo+ICsgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciwgYWxzbyB0aGUgcHJp dmF0ZSBvYmplY3QgaW4gdGhpcyBjYXNlDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiB3cmFw cyBkcm1fYXRvbWljX2dldF9wcml2X29ial9zdGF0ZSgpIHBhc3NpbmcgaW4gdGhlIE1TVA0KPiBh dG9taWMNCj4gKyAqIHN0YXRlIHZ0YWJsZSBzbyB0aGF0IHRoZSBwcml2YXRlIG9iamVjdCBzdGF0 ZSByZXR1cm5lZCBpcyB0aGF0IG9mIGEgTVNUDQo+ICsgKiB0b3BvbG9neSBvYmplY3QuDQo+ICsg Kg0KPiArICogUmV0dXJuczoNCj4gKyAqDQo+ICsgKiBUaGUgTVNUIHRvcG9sb2d5IHN0YXRlLCBv ciBOVUxMIGlmIHRoZXJlJ3Mgbm8gdG9wb2xvZ3kgc3RhdGUgZm9yIHRoaXMgTVNUDQo+IG1ncg0K PiArICogaW4gdGhlIGdsb2JhbCBhdG9taWMgc3RhdGUNCj4gKyAqLw0KPiArc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUgKg0KPiArZHJtX2F0b21pY19nZXRfbmV3X21zdF90b3BvbG9n eV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQ0KPiAqc3RhdGUsDQo+ICsJCQkJICAgICAg c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpDQo+ICt7DQo+ICsJc3RydWN0IGRy bV9wcml2YXRlX3N0YXRlICpwcml2X3N0YXRlID0NCj4gKwkJZHJtX2F0b21pY19nZXRfbmV3X3By aXZhdGVfb2JqX3N0YXRlKHN0YXRlLCAmbWdyLQ0KPiA+YmFzZSk7DQo+ICsNCj4gKwlyZXR1cm4g cHJpdl9zdGF0ZSA/IHRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShwcml2X3N0YXRlKSA6IE5VTEw7 DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lf c3RhdGUpOw0KPiArDQo+ICAvKioNCj4gICAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2luaXQg LSBpbml0aWFsaXNlIGEgdG9wb2xvZ3kgbWFuYWdlcg0KPiAgICogQG1ncjogbWFuYWdlciBzdHJ1 Y3QgdG8gaW5pdGlhbGlzZQ0KPiBAQCAtNTYyNiw4ICs1NDA0LDYgQEANCj4gRVhQT1JUX1NZTUJP TChkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUpOw0KPiAgICogQGF1eDogRFAgaGVs cGVyIGF1eCBjaGFubmVsIHRvIHRhbGsgdG8gdGhpcyBkZXZpY2UNCj4gICAqIEBtYXhfZHBjZF90 cmFuc2FjdGlvbl9ieXRlczogaHcgc3BlY2lmaWMgRFBDRCB0cmFuc2FjdGlvbiBsaW1pdA0KPiAg ICogQG1heF9wYXlsb2FkczogbWF4aW11bSBudW1iZXIgb2YgcGF5bG9hZHMgdGhpcyBHUFUgY2Fu IHNvdXJjZQ0KPiAtICogQG1heF9sYW5lX2NvdW50OiBtYXhpbXVtIG51bWJlciBvZiBsYW5lcyB0 aGlzIEdQVSBzdXBwb3J0cw0KPiAtICogQG1heF9saW5rX3JhdGU6IG1heGltdW0gbGluayByYXRl IHBlciBsYW5lIHRoaXMgR1BVIHN1cHBvcnRzIGluIGtIeg0KPiAgICogQGNvbm5fYmFzZV9pZDog dGhlIGNvbm5lY3RvciBvYmplY3QgSUQgdGhlIE1TVCBkZXZpY2UgaXMgY29ubmVjdGVkIHRvLg0K PiAgICoNCj4gICAqIFJldHVybiAwIGZvciBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2Rl IG9uIGZhaWx1cmUNCj4gQEAgLTU2MzUsMTQgKzU0MTEsMTIgQEANCj4gRVhQT1JUX1NZTUJPTChk cm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUpOw0KPiAgaW50IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyX2luaXQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3IsDQo+ ICAJCQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZHBfYXV4DQo+ICphdXgs DQo+ICAJCQkJIGludCBtYXhfZHBjZF90cmFuc2FjdGlvbl9ieXRlcywgaW50DQo+IG1heF9wYXls b2FkcywNCj4gLQkJCQkgaW50IG1heF9sYW5lX2NvdW50LCBpbnQgbWF4X2xpbmtfcmF0ZSwNCj4g IAkJCQkgaW50IGNvbm5fYmFzZV9pZCkNCj4gIHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiANCj4gIAltdXRleF9pbml0KCZtZ3ItPmxvY2spOw0K PiAgCW11dGV4X2luaXQoJm1nci0+cWxvY2spOw0KPiAtCW11dGV4X2luaXQoJm1nci0+cGF5bG9h ZF9sb2NrKTsNCj4gIAltdXRleF9pbml0KCZtZ3ItPmRlbGF5ZWRfZGVzdHJveV9sb2NrKTsNCj4g IAltdXRleF9pbml0KCZtZ3ItPnVwX3JlcV9sb2NrKTsNCj4gIAltdXRleF9pbml0KCZtZ3ItPnBy b2JlX2xvY2spOw0KPiBAQCAtNTY3MiwxOSArNTQ0Niw3IEBAIGludCBkcm1fZHBfbXN0X3RvcG9s b2d5X21ncl9pbml0KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAg CW1nci0+YXV4ID0gYXV4Ow0KPiAgCW1nci0+bWF4X2RwY2RfdHJhbnNhY3Rpb25fYnl0ZXMgPSBt YXhfZHBjZF90cmFuc2FjdGlvbl9ieXRlczsNCj4gIAltZ3ItPm1heF9wYXlsb2FkcyA9IG1heF9w YXlsb2FkczsNCj4gLQltZ3ItPm1heF9sYW5lX2NvdW50ID0gbWF4X2xhbmVfY291bnQ7DQo+IC0J bWdyLT5tYXhfbGlua19yYXRlID0gbWF4X2xpbmtfcmF0ZTsNCj4gIAltZ3ItPmNvbm5fYmFzZV9p ZCA9IGNvbm5fYmFzZV9pZDsNCj4gLQlpZiAobWF4X3BheWxvYWRzICsgMSA+IHNpemVvZihtZ3It PnBheWxvYWRfbWFzaykgKiA4IHx8DQo+IC0JICAgIG1heF9wYXlsb2FkcyArIDEgPiBzaXplb2Yo bWdyLT52Y3BpX21hc2spICogOCkNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JbWdyLT5wYXls b2FkcyA9IGtjYWxsb2MobWF4X3BheWxvYWRzLCBzaXplb2Yoc3RydWN0DQo+IGRybV9kcF9wYXls b2FkKSwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKCFtZ3ItPnBheWxvYWRzKQ0KPiAtCQlyZXR1cm4g LUVOT01FTTsNCj4gLQltZ3ItPnByb3Bvc2VkX3ZjcGlzID0ga2NhbGxvYyhtYXhfcGF5bG9hZHMs IHNpemVvZihzdHJ1Y3QNCj4gZHJtX2RwX3ZjcGkgKiksIEdGUF9LRVJORUwpOw0KPiAtCWlmICgh bWdyLT5wcm9wb3NlZF92Y3BpcykNCj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0Jc2V0X2JpdCgw LCAmbWdyLT5wYXlsb2FkX21hc2spOw0KPiANCj4gIAltc3Rfc3RhdGUgPSBremFsbG9jKHNpemVv ZigqbXN0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7DQo+ICAJaWYgKG1zdF9zdGF0ZSA9PSBOVUxMKQ0K PiBAQCAtNTcxNywxOSArNTQ3OSwxMiBAQCB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2Rl c3Ryb3koc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpDQo+ICAJCWRlc3Ry b3lfd29ya3F1ZXVlKG1nci0+ZGVsYXllZF9kZXN0cm95X3dxKTsNCj4gIAkJbWdyLT5kZWxheWVk X2Rlc3Ryb3lfd3EgPSBOVUxMOw0KPiAgCX0NCj4gLQltdXRleF9sb2NrKCZtZ3ItPnBheWxvYWRf bG9jayk7DQo+IC0Ja2ZyZWUobWdyLT5wYXlsb2Fkcyk7DQo+IC0JbWdyLT5wYXlsb2FkcyA9IE5V TEw7DQo+IC0Ja2ZyZWUobWdyLT5wcm9wb3NlZF92Y3Bpcyk7DQo+IC0JbWdyLT5wcm9wb3NlZF92 Y3BpcyA9IE5VTEw7DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+ICAJ bWdyLT5kZXYgPSBOVUxMOw0KPiAgCW1nci0+YXV4ID0gTlVMTDsNCj4gIAlkcm1fYXRvbWljX3By aXZhdGVfb2JqX2ZpbmkoJm1nci0+YmFzZSk7DQo+ICAJbWdyLT5mdW5jcyA9IE5VTEw7DQo+IA0K PiAgCW11dGV4X2Rlc3Ryb3koJm1nci0+ZGVsYXllZF9kZXN0cm95X2xvY2spOw0KPiAtCW11dGV4 X2Rlc3Ryb3koJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gIAltdXRleF9kZXN0cm95KCZtZ3ItPnFs b2NrKTsNCj4gIAltdXRleF9kZXN0cm95KCZtZ3ItPmxvY2spOw0KPiAgCW11dGV4X2Rlc3Ryb3ko Jm1nci0+dXBfcmVxX2xvY2spOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kcF9tc3QuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZHBfbXN0LmMNCj4gaW5kZXggNGIwYWYzYzI2MTc2Li5lYzM4OWUzY2FmMjQgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMNCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9tc3QuYw0KPiBAQCAt NTIsNiArNTIsNyBAQCBzdGF0aWMgaW50IGludGVsX2RwX21zdF9jb21wdXRlX2xpbmtfY29uZmln KHN0cnVjdA0KPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLA0KPiAgCXN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSA9IGNydGNfc3RhdGUtPnVhcGkuc3RhdGU7DQo+ICAJc3RydWN0IGludGVs X2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPSBlbmNfdG9fbXN0KGVuY29kZXIpOw0KPiAgCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmaW50ZWxfbXN0LT5wcmltYXJ5LT5kcDsNCj4gKwlz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCXN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9DQo+ICAJCXRvX2ludGVsX2Nvbm5lY3Rvcihjb25u X3N0YXRlLT5jb25uZWN0b3IpOw0KPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g dG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsNCj4gQEAgLTYwLDIyICs2MSwyOCBAQCBzdGF0 aWMgaW50IGludGVsX2RwX21zdF9jb21wdXRlX2xpbmtfY29uZmlnKHN0cnVjdA0KPiBpbnRlbF9l bmNvZGVyICplbmNvZGVyLA0KPiAgCWJvb2wgY29uc3RhbnRfbiA9IGRybV9kcF9oYXNfcXVpcmso JmludGVsX2RwLT5kZXNjLA0KPiBEUF9EUENEX1FVSVJLX0NPTlNUQU5UX04pOw0KPiAgCWludCBi cHAsIHNsb3RzID0gLUVJTlZBTDsNCj4gDQo+ICsJbXN0X3N0YXRlID0gZHJtX2F0b21pY19nZXRf bXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCAmaW50ZWxfZHAtDQo+ID5tc3RfbWdyKTsNCj4gKwlp ZiAoSVNfRVJSKG1zdF9zdGF0ZSkpDQo+ICsJCXJldHVybiBQVFJfRVJSKG1zdF9zdGF0ZSk7DQo+ ICsNCj4gIAljcnRjX3N0YXRlLT5sYW5lX2NvdW50ID0gbGltaXRzLT5tYXhfbGFuZV9jb3VudDsN Cj4gIAljcnRjX3N0YXRlLT5wb3J0X2Nsb2NrID0gbGltaXRzLT5tYXhfcmF0ZTsNCj4gDQo+ICsJ Ly8gVE9ETzogSGFuZGxlIHBibl9kaXYgY2hhbmdlcyBieSBhZGRpbmcgYSBuZXcgTVNUIGhlbHBl cg0KPiArCWlmICghbXN0X3N0YXRlLT5wYm5fZGl2KSB7DQo+ICsJCW1zdF9zdGF0ZS0+cGJuX2Rp diA9DQo+IGRybV9kcF9nZXRfdmNfcGF5bG9hZF9idygmaW50ZWxfZHAtPm1zdF9tZ3IsDQo+ICsJ CQkJCQkJICAgICAgbGltaXRzLT5tYXhfcmF0ZSwNCj4gKwkJCQkJCQkgICAgICBsaW1pdHMtDQo+ ID5tYXhfbGFuZV9jb3VudCk7DQo+ICsJfQ0KPiArDQo+ICAJZm9yIChicHAgPSBsaW1pdHMtPm1h eF9icHA7IGJwcCA+PSBsaW1pdHMtPm1pbl9icHA7IGJwcCAtPSAyICogMykgew0KPiAgCQljcnRj X3N0YXRlLT5waXBlX2JwcCA9IGJwcDsNCj4gDQo+ICAJCWNydGNfc3RhdGUtPnBibiA9DQo+IGRy bV9kcF9jYWxjX3Bibl9tb2RlKGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2ssDQo+ICAJCQkJCQkg ICAgICAgY3J0Y19zdGF0ZS0+cGlwZV9icHAsDQo+ICAJCQkJCQkgICAgICAgZmFsc2UpOw0KPiAt DQo+ICAJCXNsb3RzID0gZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsICZpbnRl bF9kcC0NCj4gPm1zdF9tZ3IsDQo+IC0JCQkJCQkgICAgICBjb25uZWN0b3ItPnBvcnQsDQo+IC0J CQkJCQkgICAgICBjcnRjX3N0YXRlLT5wYm4sDQo+IC0NCj4gZHJtX2RwX2dldF92Y19wYXlsb2Fk X2J3KCZpbnRlbF9kcC0+bXN0X21nciwNCj4gLQ0KPiBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLA0K PiAtDQo+IGNydGNfc3RhdGUtPmxhbmVfY291bnQpKTsNCj4gKwkJCQkJCSAgICAgIGNvbm5lY3Rv ci0+cG9ydCwNCj4gY3J0Y19zdGF0ZS0+cGJuKTsNCj4gIAkJaWYgKHNsb3RzID09IC1FREVBRExL KQ0KPiAgCQkJcmV0dXJuIHNsb3RzOw0KPiAgCQlpZiAoc2xvdHMgPj0gMCkNCj4gQEAgLTM2MCwy MSArMzY3LDE3IEBAIHN0YXRpYyB2b2lkIGludGVsX21zdF9kaXNhYmxlX2RwKHN0cnVjdA0KPiBp bnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSAmZGlnX3BvcnQtPmRwOw0KPiAgCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9 DQo+ICAJCXRvX2ludGVsX2Nvbm5lY3RvcihvbGRfY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsNCj4g KwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4gKwkJZHJt X2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKCZzdGF0ZS0+YmFzZSwNCj4gJmludGVsX2Rw LT5tc3RfbWdyKTsNCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUo Y29ubmVjdG9yLT5iYXNlLmRldik7DQo+IC0JaW50IHN0YXJ0X3Nsb3QgPSBpbnRlbF9kcF9pc191 aGJyKG9sZF9jcnRjX3N0YXRlKSA/IDAgOiAxOw0KPiAtCWludCByZXQ7DQo+IA0KPiAgCWRybV9k Ymdfa21zKCZpOTE1LT5kcm0sICJhY3RpdmUgbGlua3MgJWRcbiIsDQo+ICAJCSAgICBpbnRlbF9k cC0+YWN0aXZlX21zdF9saW5rcyk7DQo+IA0KPiAgCWludGVsX2hkY3BfZGlzYWJsZShpbnRlbF9t c3QtPmNvbm5lY3Rvcik7DQo+IA0KPiAtCWRybV9kcF9tc3RfcmVzZXRfdmNwaV9zbG90cygmaW50 ZWxfZHAtPm1zdF9tZ3IsIGNvbm5lY3Rvci0NCj4gPnBvcnQpOw0KPiAtDQo+IC0JcmV0ID0gZHJt X2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKCZpbnRlbF9kcC0+bXN0X21nciwNCj4gc3RhcnRfc2xv dCk7DQo+IC0JaWYgKHJldCkgew0KPiAtCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiZmFpbGVk IHRvIHVwZGF0ZSBwYXlsb2FkICVkXG4iLA0KPiByZXQpOw0KPiAtCX0NCj4gKwlkcm1fZHBfcmVt b3ZlX3BheWxvYWQoJmludGVsX2RwLT5tc3RfbWdyLCBtc3Rfc3RhdGUsDQo+ICsJCQkgICAgICBk cm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUsDQo+IGNvbm5lY3Rvci0+ cG9ydCkpOw0KPiANCj4gIAlpbnRlbF9hdWRpb19jb2RlY19kaXNhYmxlKGVuY29kZXIsIG9sZF9j cnRjX3N0YXRlLA0KPiBvbGRfY29ubl9zdGF0ZSk7DQo+ICB9DQo+IEBAIC00MDIsOCArNDA1LDYg QEAgc3RhdGljIHZvaWQgaW50ZWxfbXN0X3Bvc3RfZGlzYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxf YXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gDQo+ICAJaW50ZWxfZGlzYWJsZV90cmFuc2NvZGVyKG9s ZF9jcnRjX3N0YXRlKTsNCj4gDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQyKCZpbnRl bF9kcC0+bXN0X21ncik7DQo+IC0NCj4gIAljbGVhcl9hY3Rfc2VudChlbmNvZGVyLCBvbGRfY3J0 Y19zdGF0ZSk7DQo+IA0KPiAgCWludGVsX2RlX3JtdyhkZXZfcHJpdiwgVFJBTlNfRERJX0ZVTkNf Q1RMKG9sZF9jcnRjX3N0YXRlLQ0KPiA+Y3B1X3RyYW5zY29kZXIpLA0KPiBAQCAtNDExLDggKzQx Miw2IEBAIHN0YXRpYyB2b2lkIGludGVsX21zdF9wb3N0X2Rpc2FibGVfZHAoc3RydWN0DQo+IGlu dGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+IA0KPiAgCXdhaXRfZm9yX2FjdF9zZW50KGVuY29k ZXIsIG9sZF9jcnRjX3N0YXRlKTsNCj4gDQo+IC0JZHJtX2RwX21zdF9kZWFsbG9jYXRlX3ZjcGko JmludGVsX2RwLT5tc3RfbWdyLCBjb25uZWN0b3ItDQo+ID5wb3J0KTsNCj4gLQ0KPiAgCWludGVs X2RkaV9kaXNhYmxlX3RyYW5zY29kZXJfZnVuYyhvbGRfY3J0Y19zdGF0ZSk7DQo+IA0KPiAgCWlm IChESVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gOSkNCj4gQEAgLTQ3OSw3ICs0NzgsOCBAQCBzdGF0 aWMgdm9pZCBpbnRlbF9tc3RfcHJlX2VuYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSwNCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGVuY29kZXItPmJhc2UuZGV2KTsNCj4gIAlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25u ZWN0b3IgPQ0KPiAgCQl0b19pbnRlbF9jb25uZWN0b3IoY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsN Cj4gLQlpbnQgc3RhcnRfc2xvdCA9IGludGVsX2RwX2lzX3VoYnIocGlwZV9jb25maWcpID8gMCA6 IDE7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSA9DQo+ ICsJCWRybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lfc3RhdGUoJnN0YXRlLT5iYXNlLA0K PiAmaW50ZWxfZHAtPm1zdF9tZ3IpOw0KPiAgCWludCByZXQ7DQo+ICAJYm9vbCBmaXJzdF9tc3Rf c3RyZWFtOw0KPiANCj4gQEAgLTUwNSwxNiArNTA1LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX21z dF9wcmVfZW5hYmxlX2RwKHN0cnVjdA0KPiBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAg CQlkaWdfcG9ydC0+YmFzZS5wcmVfZW5hYmxlKHN0YXRlLCAmZGlnX3BvcnQtPmJhc2UsDQo+ICAJ CQkJCQlwaXBlX2NvbmZpZywgTlVMTCk7DQo+IA0KPiAtCXJldCA9IGRybV9kcF9tc3RfYWxsb2Nh dGVfdmNwaSgmaW50ZWxfZHAtPm1zdF9tZ3IsDQo+IC0JCQkJICAgICAgIGNvbm5lY3Rvci0+cG9y dCwNCj4gLQkJCQkgICAgICAgcGlwZV9jb25maWctPnBibiwNCj4gLQkJCQkgICAgICAgcGlwZV9j b25maWctPmRwX21fbi50dSk7DQo+IC0JaWYgKCFyZXQpDQo+IC0JCWRybV9lcnIoJmRldl9wcml2 LT5kcm0sICJmYWlsZWQgdG8gYWxsb2NhdGUgdmNwaVxuIik7DQo+IC0NCj4gIAlpbnRlbF9kcC0+ YWN0aXZlX21zdF9saW5rcysrOw0KPiANCj4gLQlyZXQgPSBkcm1fZHBfdXBkYXRlX3BheWxvYWRf cGFydDEoJmludGVsX2RwLT5tc3RfbWdyLA0KPiBzdGFydF9zbG90KTsNCj4gKwlyZXQgPSBkcm1f ZHBfYWRkX3BheWxvYWRfcGFydDEoJmludGVsX2RwLT5tc3RfbWdyLCBtc3Rfc3RhdGUsDQo+ICsN Cj4gZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUobXN0X3N0YXRlLCBjb25uZWN0b3It PnBvcnQpKTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwg IkZhaWxlZCB0byBjcmVhdGUgTVNUIHBheWxvYWQgZm9yDQo+ICVzOiAlZFxuIiwNCj4gKwkJCWNv bm5lY3Rvci0+YmFzZS5uYW1lLCByZXQpOw0KPiANCj4gIAkvKg0KPiAgCSAqIEJlZm9yZSBHZW4g MTIgdGhpcyBpcyBub3QgZG9uZSBhcyBwYXJ0IG9mDQo+IEBAIC01MzcsNyArNTM0LDEwIEBAIHN0 YXRpYyB2b2lkIGludGVsX21zdF9lbmFibGVfZHAoc3RydWN0DQo+IGludGVsX2F0b21pY19zdGF0 ZSAqc3RhdGUsDQo+ICAJc3RydWN0IGludGVsX2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPSBl bmNfdG9fbXN0KGVuY29kZXIpOw0KPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19w b3J0ID0gaW50ZWxfbXN0LT5wcmltYXJ5Ow0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSAmZGlnX3BvcnQtPmRwOw0KPiArCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9 IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uX3N0YXRlLQ0KPiA+Y29ubmVjdG9yKTsNCj4gIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2 KTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4g KwkJZHJtX2F0b21pY19nZXRfbmV3X21zdF90b3BvbG9neV9zdGF0ZSgmc3RhdGUtPmJhc2UsDQo+ ICZpbnRlbF9kcC0+bXN0X21ncik7DQo+ICAJZW51bSB0cmFuc2NvZGVyIHRyYW5zID0gcGlwZV9j b25maWctPmNwdV90cmFuc2NvZGVyOw0KPiANCj4gIAlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRy bSwgcGlwZV9jb25maWctPmhhc19wY2hfZW5jb2Rlcik7DQo+IEBAIC01NjUsNyArNTY1LDggQEAg c3RhdGljIHZvaWQgaW50ZWxfbXN0X2VuYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSwNCj4gDQo+ICAJd2FpdF9mb3JfYWN0X3NlbnQoZW5jb2RlciwgcGlwZV9jb25m aWcpOw0KPiANCj4gLQlkcm1fZHBfdXBkYXRlX3BheWxvYWRfcGFydDIoJmludGVsX2RwLT5tc3Rf bWdyKTsNCj4gKwlkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIoJmludGVsX2RwLT5tc3RfbWdyLCAm c3RhdGUtPmJhc2UsDQo+ICsNCj4gZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUobXN0 X3N0YXRlLCBjb25uZWN0b3ItPnBvcnQpKTsNCj4gDQo+ICAJaWYgKERJU1BMQVlfVkVSKGRldl9w cml2KSA+PSAxMiAmJiBwaXBlX2NvbmZpZy0+ZmVjX2VuYWJsZSkNCj4gIAkJaW50ZWxfZGVfcm13 KGRldl9wcml2LCBDSElDS0VOX1RSQU5TKHRyYW5zKSwgMCwNCj4gQEAgLTk0OCw4ICs5NDksNiBA QCBpbnRlbF9kcF9tc3RfZW5jb2Rlcl9pbml0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQNCj4g KmRpZ19wb3J0LCBpbnQgY29ubl9iYXNlX2lkKQ0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSAmZGlnX3BvcnQtPmRwOw0KPiAgCWVudW0gcG9ydCBwb3J0ID0gZGlnX3BvcnQtPmJhc2Uu cG9ydDsNCj4gIAlpbnQgcmV0Ow0KPiAtCWludCBtYXhfc291cmNlX3JhdGUgPQ0KPiAtCQlpbnRl bF9kcC0+c291cmNlX3JhdGVzW2ludGVsX2RwLT5udW1fc291cmNlX3JhdGVzIC0gMV07DQo+IA0K PiAgCWlmICghSEFTX0RQX01TVChpOTE1KSB8fCBpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQ0K PiAgCQlyZXR1cm4gMDsNCj4gQEAgLTk2NSwxMCArOTY0LDcgQEAgaW50ZWxfZHBfbXN0X2VuY29k ZXJfaW5pdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0DQo+ICpkaWdfcG9ydCwgaW50IGNvbm5f YmFzZV9pZCkNCj4gIAkvKiBjcmVhdGUgZW5jb2RlcnMgKi8NCj4gIAlpbnRlbF9kcF9jcmVhdGVf ZmFrZV9tc3RfZW5jb2RlcnMoZGlnX3BvcnQpOw0KPiAgCXJldCA9IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyX2luaXQoJmludGVsX2RwLT5tc3RfbWdyLCAmaTkxNS0NCj4gPmRybSwNCj4gLQkJCQkJ ICAgJmludGVsX2RwLT5hdXgsIDE2LCAzLA0KPiAtCQkJCQkgICBkaWdfcG9ydC0+bWF4X2xhbmVz LA0KPiAtCQkJCQkgICBtYXhfc291cmNlX3JhdGUsDQo+IC0JCQkJCSAgIGNvbm5fYmFzZV9pZCk7 DQo+ICsJCQkJCSAgICZpbnRlbF9kcC0+YXV4LCAxNiwgMywNCj4gY29ubl9iYXNlX2lkKTsNCj4g IAlpZiAocmV0KSB7DQo+ICAJCWludGVsX2RwLT5tc3RfbWdyLmNicyA9IE5VTEw7DQo+ICAJCXJl dHVybiByZXQ7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2hkY3AuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfaGRjcC5j DQo+IGluZGV4IDhlYTY2YTJlMWIwOS4uN2RiYzlmMGJiMjRmIDEwMDY0NA0KPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2hkY3AuYw0KPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2hkY3AuYw0KPiBAQCAtMzAsOCArMzAsMzAgQEANCj4g DQo+ICBzdGF0aWMgaW50IGludGVsX2Nvbm5fdG9fdmNwaShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICpjb25uZWN0b3IpDQo+ICB7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICpt Z3I7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQ7DQo+ICsJ c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsNCj4gKwlpbnQgdmNw aSA9IDA7DQo+ICsNCj4gIAkvKiBGb3IgSERNSSB0aGlzIGlzIGZvcmNlZCB0byBiZSAweDAuIEZv ciBEUCBTU1QgYWxzbyB0aGlzIGlzIDB4MC4gKi8NCj4gLQlyZXR1cm4gY29ubmVjdG9yLT5wb3J0 CT8gY29ubmVjdG9yLT5wb3J0LT52Y3BpLnZjcGkgOiAwOw0KPiArCWlmICghY29ubmVjdG9yLT5w b3J0KQ0KPiArCQlyZXR1cm4gMDsNCj4gKwltZ3IgPSBjb25uZWN0b3ItPnBvcnQtPm1ncjsNCj4g Kw0KPiArCWRybV9tb2Rlc2V0X2xvY2soJm1nci0+YmFzZS5sb2NrLCBOVUxMKTsNCj4gKwltc3Rf c3RhdGUgPSB0b19kcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKG1nci0+YmFzZS5zdGF0ZSk7DQo+ ICsJcGF5bG9hZCA9IGRybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKG1zdF9zdGF0ZSwN Cj4gY29ubmVjdG9yLT5wb3J0KTsNCj4gKwlpZiAoZHJtX1dBUk5fT04obWdyLT5kZXYsICFwYXls b2FkKSkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwl2Y3BpID0gcGF5bG9hZC0+dmNwaTsNCj4g KwlpZiAoZHJtX1dBUk5fT04obWdyLT5kZXYsIHZjcGkgPCAwKSkgew0KPiArCQl2Y3BpID0gMDsN Cj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArb3V0Og0KPiArCWRybV9tb2Rlc2V0X3VubG9jaygm bWdyLT5iYXNlLmxvY2spOw0KPiArCXJldHVybiB2Y3BpOw0KPiAgfQ0KPiANCj4gIC8qDQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMNCj4gYi9k cml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMNCj4gaW5kZXggNTdmNzRjZmNk ZWJmLi5lOGY0YzgwNmZhMzkgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1 L2Rpc3BudjUwL2Rpc3AuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1 MC9kaXNwLmMNCj4gQEAgLTkzNyw2ICs5MzcsNyBAQCBzdHJ1Y3QgbnY1MF9tc3RvIHsNCj4gIAlz dHJ1Y3QgbnY1MF9oZWFkICpoZWFkOw0KPiAgCXN0cnVjdCBudjUwX21zdGMgKm1zdGM7DQo+ICAJ Ym9vbCBkaXNhYmxlZDsNCj4gKwlib29sIGVuYWJsZWQ7DQo+ICB9Ow0KPiANCj4gIHN0cnVjdCBu b3V2ZWF1X2VuY29kZXIgKm52NTBfcmVhbF9vdXRwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikNCj4gQEAgLTk1Miw1NyArOTUzLDM3IEBAIHN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52NTBf cmVhbF9vdXRwKHN0cnVjdA0KPiBkcm1fZW5jb2RlciAqZW5jb2RlcikNCj4gIAlyZXR1cm4gbXN0 by0+bXN0Yy0+bXN0bS0+b3V0cDsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgc3RydWN0IGRybV9kcF9w YXlsb2FkICoNCj4gLW52NTBfbXN0b19wYXlsb2FkKHN0cnVjdCBudjUwX21zdG8gKm1zdG8pDQo+ IC17DQo+IC0Jc3RydWN0IG5vdXZlYXVfZHJtICpkcm0gPSBub3V2ZWF1X2RybShtc3RvLT5lbmNv ZGVyLmRldik7DQo+IC0Jc3RydWN0IG52NTBfbXN0YyAqbXN0YyA9IG1zdG8tPm1zdGM7DQo+IC0J c3RydWN0IG52NTBfbXN0bSAqbXN0bSA9IG1zdGMtPm1zdG07DQo+IC0JaW50IHZjcGkgPSBtc3Rj LT5wb3J0LT52Y3BpLnZjcGksIGk7DQo+IC0NCj4gLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQo Jm1zdG0tPm1nci5wYXlsb2FkX2xvY2spKTsNCj4gLQ0KPiAtCU5WX0FUT01JQyhkcm0sICIlczog dmNwaSAlZFxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lLCB2Y3BpKTsNCj4gLQlmb3IgKGkgPSAwOyBp IDwgbXN0bS0+bWdyLm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0JCXN0cnVjdCBkcm1fZHBfcGF5 bG9hZCAqcGF5bG9hZCA9ICZtc3RtLT5tZ3IucGF5bG9hZHNbaV07DQo+IC0JCU5WX0FUT01JQyhk cm0sICIlczogJWQ6IHZjcGkgJWQgc3RhcnQgMHglMDJ4IHNsb3RzDQo+IDB4JTAyeFxuIiwNCj4g LQkJCSAgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLm5hbWUsIGksIHBheWxvYWQtPnZjcGksDQo+IC0J CQkgIHBheWxvYWQtPnN0YXJ0X3Nsb3QsIHBheWxvYWQtPm51bV9zbG90cyk7DQo+IC0JfQ0KPiAt DQo+IC0JZm9yIChpID0gMDsgaSA8IG1zdG0tPm1nci5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAt CQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPSAmbXN0bS0+bWdyLnBheWxvYWRzW2ld Ow0KPiAtCQlpZiAocGF5bG9hZC0+dmNwaSA9PSB2Y3BpKQ0KPiAtCQkJcmV0dXJuIHBheWxvYWQ7 DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIE5VTEw7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyB2b2lk DQo+IC1udjUwX21zdG9fY2xlYW51cChzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiArbnY1MF9t c3RvX2NsZWFudXAoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiArCQkgIHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCSAgc3RydWN0IG52NTBfbXN0byAqbXN0 bykNCj4gIHsNCj4gIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKG1zdG8t PmVuY29kZXIuZGV2KTsNCj4gLQlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsN Cj4gLQlzdHJ1Y3QgbnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gLQ0KPiAtCWlmICgh bXN0by0+ZGlzYWJsZWQpDQo+IC0JCXJldHVybjsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9t aWNfcGF5bG9hZCAqcGF5bG9hZCA9DQo+ICsJCWRybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0 YXRlKG1zdF9zdGF0ZSwgbXN0by0NCj4gPm1zdGMtPnBvcnQpOw0KPiANCj4gIAlOVl9BVE9NSUMo ZHJtLCAiJXM6IG1zdG8gY2xlYW51cFxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lKTsNCj4gDQo+IC0J ZHJtX2RwX21zdF9kZWFsbG9jYXRlX3ZjcGkoJm1zdG0tPm1nciwgbXN0Yy0+cG9ydCk7DQo+IC0N Cj4gLQltc3RvLT5tc3RjID0gTlVMTDsNCj4gLQltc3RvLT5kaXNhYmxlZCA9IGZhbHNlOw0KPiAr CWlmIChtc3RvLT5kaXNhYmxlZCkgew0KPiArCQltc3RvLT5tc3RjID0gTlVMTDsNCj4gKwkJbXN0 by0+ZGlzYWJsZWQgPSBmYWxzZTsNCj4gKwl9IGVsc2UgaWYgKG1zdG8tPmVuYWJsZWQpIHsNCj4g KwkJZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQyKG1nciwgc3RhdGUsIHBheWxvYWQpOw0KPiArCQlt c3RvLT5lbmFibGVkID0gZmFsc2U7DQo+ICsJfQ0KPiAgfQ0KPiANCj4gIHN0YXRpYyB2b2lkDQo+ IC1udjUwX21zdG9fcHJlcGFyZShzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiArbnY1MF9tc3Rv X3ByZXBhcmUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiArCQkgIHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCSAgc3RydWN0IG52NTBfbXN0byAqbXN0bykN Cj4gIHsNCj4gIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKG1zdG8tPmVu Y29kZXIuZGV2KTsNCj4gIAlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4g IAlzdHJ1Y3QgbnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZDsNCj4gIAlzdHJ1Y3Qgew0KPiAgCQlzdHJ1Y3Qg bnY1MF9kaXNwX210aGRfdjEgYmFzZTsNCj4gIAkJc3RydWN0IG52NTBfZGlzcF9zb3JfZHBfbXN0 X3ZjcGlfdjAgdmNwaTsNCj4gQEAgLTEwMTQsMTcgKzk5NSwyMSBAQCBudjUwX21zdG9fcHJlcGFy ZShzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiAgCQkJICAgICAgICgweDAxMDAgPDwgbXN0by0+ aGVhZC0+YmFzZS5pbmRleCksDQo+ICAJfTsNCj4gDQo+IC0JbXV0ZXhfbG9jaygmbXN0bS0+bWdy LnBheWxvYWRfbG9jayk7DQo+IC0NCj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6IG1zdG8gcHJlcGFy ZVxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lKTsNCj4gLQlpZiAobXN0Yy0+cG9ydC0+dmNwaS52Y3Bp ID4gMCkgew0KPiAtCQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPQ0KPiBudjUwX21z dG9fcGF5bG9hZChtc3RvKTsNCj4gLQkJaWYgKHBheWxvYWQpIHsNCj4gLQkJCWFyZ3MudmNwaS5z dGFydF9zbG90ID0gcGF5bG9hZC0+c3RhcnRfc2xvdDsNCj4gLQkJCWFyZ3MudmNwaS5udW1fc2xv dHMgPSBwYXlsb2FkLT5udW1fc2xvdHM7DQo+IC0JCQlhcmdzLnZjcGkucGJuID0gbXN0Yy0+cG9y dC0+dmNwaS5wYm47DQo+IC0JCQlhcmdzLnZjcGkuYWxpZ25lZF9wYm4gPSBtc3RjLT5wb3J0LQ0K PiA+dmNwaS5hbGlnbmVkX3BibjsNCj4gLQkJfQ0KPiArDQo+ICsJcGF5bG9hZCA9IGRybV9hdG9t aWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKG1zdF9zdGF0ZSwgbXN0Yy0NCj4gPnBvcnQpOw0KPiAr DQo+ICsJLy8gVE9ETzogRmlndXJlIG91dCBpZiB3ZSB3YW50IHRvIGRvIGEgYmV0dGVyIGpvYiBv ZiBoYW5kbGluZyBWQ1BJDQo+IGFsbG9jYXRpb24gZmFpbHVyZXMgaGVyZT8NCj4gKwlpZiAobXN0 by0+ZGlzYWJsZWQpIHsNCj4gKwkJZHJtX2RwX3JlbW92ZV9wYXlsb2FkKG1nciwgbXN0X3N0YXRl LCBwYXlsb2FkKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpZiAobXN0by0+ZW5hYmxlZCkNCj4gKwkJ CWRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MShtZ3IsIG1zdF9zdGF0ZSwNCj4gcGF5bG9hZCk7DQo+ ICsNCj4gKwkJYXJncy52Y3BpLnN0YXJ0X3Nsb3QgPSBwYXlsb2FkLT52Y19zdGFydF9zbG90Ow0K PiArCQlhcmdzLnZjcGkubnVtX3Nsb3RzID0gcGF5bG9hZC0+dGltZV9zbG90czsNCj4gKwkJYXJn cy52Y3BpLnBibiA9IHBheWxvYWQtPnBibjsNCj4gKwkJYXJncy52Y3BpLmFsaWduZWRfcGJuID0g cGF5bG9hZC0+dGltZV9zbG90cyAqIG1zdF9zdGF0ZS0NCj4gPnBibl9kaXY7DQo+ICAJfQ0KPiAN Cj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6ICVzOiAlMDJ4ICUwMnggJTA0eCAlMDR4XG4iLA0KPiBA QCAtMTAzMyw3ICsxMDE4LDYgQEAgbnY1MF9tc3RvX3ByZXBhcmUoc3RydWN0IG52NTBfbXN0byAq bXN0bykNCj4gIAkJICBhcmdzLnZjcGkucGJuLCBhcmdzLnZjcGkuYWxpZ25lZF9wYm4pOw0KPiAN Cj4gIAludmlmX210aGQoJmRybS0+ZGlzcGxheS0+ZGlzcC5vYmplY3QsIDAsICZhcmdzLCBzaXpl b2YoYXJncykpOw0KPiAtCW11dGV4X3VubG9jaygmbXN0bS0+bWdyLnBheWxvYWRfbG9jayk7DQo+ ICB9DQo+IA0KPiAgc3RhdGljIGludA0KPiBAQCAtMTA0Myw2ICsxMDI3LDcgQEAgbnY1MF9tc3Rv X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXINCj4gKmVuY29kZXIsDQo+ICB7DQo+ICAJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY3J0Y19zdGF0ZS0+c3RhdGU7DQo+ICAJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5fc3RhdGUtPmNvbm5lY3RvcjsN Cj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCXN0 cnVjdCBudjUwX21zdGMgKm1zdGMgPSBudjUwX21zdGMoY29ubmVjdG9yKTsNCj4gIAlzdHJ1Y3Qg bnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gIAlzdHJ1Y3QgbnY1MF9oZWFkX2F0b20g KmFzeWggPSBudjUwX2hlYWRfYXRvbShjcnRjX3N0YXRlKTsNCj4gQEAgLTEwNzAsOCArMTA1NSwx OCBAQCBudjUwX21zdG9fYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2Rlcg0KPiAqZW5jb2Rl ciwNCj4gIAkJCQkJCSAgICBmYWxzZSk7DQo+ICAJfQ0KPiANCj4gLQlzbG90cyA9IGRybV9kcF9h dG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCAmbXN0bS0+bWdyLCBtc3RjLQ0KPiA+cG9ydCwN Cj4gLQkJCQkJICAgICAgYXN5aC0+ZHAucGJuLCAwKTsNCj4gKwltc3Rfc3RhdGUgPSBkcm1fYXRv bWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUsICZtc3RtLQ0KPiA+bWdyKTsNCj4gKwlp ZiAoSVNfRVJSKG1zdF9zdGF0ZSkpDQo+ICsJCXJldHVybiBQVFJfRVJSKG1zdF9zdGF0ZSk7DQo+ ICsNCj4gKwlpZiAoIW1zdF9zdGF0ZS0+cGJuX2Rpdikgew0KPiArCQlzdHJ1Y3Qgbm91dmVhdV9l bmNvZGVyICpvdXRwID0gbXN0Yy0+bXN0bS0+b3V0cDsNCj4gKw0KPiArCQltc3Rfc3RhdGUtPnBi bl9kaXYgPQ0KPiBkcm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncoJm1zdG0tPm1nciwNCj4gKwkJCQkJ CQkgICAgICBvdXRwLT5kcC5saW5rX2J3LA0KPiBvdXRwLT5kcC5saW5rX25yKTsNCj4gKwl9DQo+ ICsNCj4gKwlzbG90cyA9IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCAmbXN0 bS0+bWdyLCBtc3RjLQ0KPiA+cG9ydCwgYXN5aC0+ZHAucGJuKTsNCj4gIAlpZiAoc2xvdHMgPCAw KQ0KPiAgCQlyZXR1cm4gc2xvdHM7DQo+IA0KPiBAQCAtMTEwMyw3ICsxMDk4LDYgQEAgbnY1MF9t c3RvX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyDQo+ICplbmNvZGVyLCBzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3QNCj4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y Ow0KPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7DQo+ICAJdTgg cHJvdG87DQo+IC0JYm9vbCByOw0KPiANCj4gIAlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdp bihlbmNvZGVyLT5kZXYsICZjb25uX2l0ZXIpOw0KPiAgCWRybV9mb3JfZWFjaF9jb25uZWN0b3Jf aXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsNCj4gQEAgLTExMTgsMTAgKzExMTIsNiBAQCBu djUwX21zdG9fYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXINCj4gKmVuY29kZXIsIHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdA0KPiAgCWlmIChXQVJOX09OKCFtc3RjKSkNCj4gIAkJ cmV0dXJuOw0KPiANCj4gLQlyID0gZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKCZtc3RtLT5tZ3Is IG1zdGMtPnBvcnQsIGFzeWgtDQo+ID5kcC5wYm4sIGFzeWgtPmRwLnR1KTsNCj4gLQlpZiAoIXIp DQo+IC0JCURSTV9ERUJVR19LTVMoIkZhaWxlZCB0byBhbGxvY2F0ZSBWQ1BJXG4iKTsNCj4gLQ0K PiAgCWlmICghbXN0bS0+bGlua3MrKykNCj4gIAkJbnY1MF9vdXRwX2FjcXVpcmUobXN0bS0+b3V0 cCwgZmFsc2UgLypYWFg6IE1TVCBhdWRpby4qLyk7DQo+IA0KPiBAQCAtMTEzNCw2ICsxMTI0LDcg QEAgbnY1MF9tc3RvX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyDQo+ICplbmNvZGVy LCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3QNCj4gIAkJCSAgIG52NTBfZHBfYnBjX3RvX2Rl cHRoKGFzeWgtPm9yLmJwYykpOw0KPiANCj4gIAltc3RvLT5tc3RjID0gbXN0YzsNCj4gKwltc3Rv LT5lbmFibGVkID0gdHJ1ZTsNCj4gIAltc3RtLT5tb2RpZmllZCA9IHRydWU7DQo+ICB9DQo+IA0K PiBAQCAtMTE0NCw4ICsxMTM1LDYgQEAgbnY1MF9tc3RvX2F0b21pY19kaXNhYmxlKHN0cnVjdCBk cm1fZW5jb2Rlcg0KPiAqZW5jb2Rlciwgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnMNCj4gIAlz dHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4gIAlzdHJ1Y3QgbnY1MF9tc3Rt ICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gDQo+IC0JZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3Rz KCZtc3RtLT5tZ3IsIG1zdGMtPnBvcnQpOw0KPiAtDQo+ICAJbXN0bS0+b3V0cC0+dXBkYXRlKG1z dG0tPm91dHAsIG1zdG8tPmhlYWQtPmJhc2UuaW5kZXgsIE5VTEwsDQo+IDAsIDApOw0KPiAgCW1z dG0tPm1vZGlmaWVkID0gdHJ1ZTsNCj4gIAlpZiAoIS0tbXN0bS0+bGlua3MpDQo+IEBAIC0xMzY1 LDcgKzEzNTQsOSBAQCBudjUwX21zdGNfbmV3KHN0cnVjdCBudjUwX21zdG0gKm1zdG0sIHN0cnVj dA0KPiBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsDQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQNCj4g LW52NTBfbXN0bV9jbGVhbnVwKHN0cnVjdCBudjUwX21zdG0gKm1zdG0pDQo+ICtudjUwX21zdG1f Y2xlYW51cChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSwNCj4gKwkJICBzdHJ1Y3QgbnY1MF9t c3RtICptc3RtKQ0KPiAgew0KPiAgCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gbm91dmVhdV9k cm0obXN0bS0+b3V0cC0NCj4gPmJhc2UuYmFzZS5kZXYpOw0KPiAgCXN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcjsNCj4gQEAgLTEzNzMsMTQgKzEzNjQsMTIgQEAgbnY1MF9tc3RtX2NsZWFudXAo c3RydWN0IG52NTBfbXN0bSAqbXN0bSkNCj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6IG1zdG0gY2xl YW51cFxuIiwgbXN0bS0+b3V0cC0NCj4gPmJhc2UuYmFzZS5uYW1lKTsNCj4gIAlkcm1fZHBfY2hl Y2tfYWN0X3N0YXR1cygmbXN0bS0+bWdyKTsNCj4gDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2Fk X3BhcnQyKCZtc3RtLT5tZ3IpOw0KPiAtDQo+ICAJZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2Rl ciwgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLmRldikgew0KPiAgCQlpZiAoZW5jb2Rlci0+ZW5jb2Rl cl90eXBlID09DQo+IERSTV9NT0RFX0VOQ09ERVJfRFBNU1QpIHsNCj4gIAkJCXN0cnVjdCBudjUw X21zdG8gKm1zdG8gPSBudjUwX21zdG8oZW5jb2Rlcik7DQo+ICAJCQlzdHJ1Y3QgbnY1MF9tc3Rj ICptc3RjID0gbXN0by0+bXN0YzsNCj4gIAkJCWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0 bSkNCj4gLQkJCQludjUwX21zdG9fY2xlYW51cChtc3RvKTsNCj4gKwkJCQludjUwX21zdG9fY2xl YW51cChzdGF0ZSwgbXN0X3N0YXRlLA0KPiAmbXN0bS0+bWdyLCBtc3RvKTsNCj4gIAkJfQ0KPiAg CX0NCj4gDQo+IEBAIC0xMzg4LDIwICsxMzc3LDM0IEBAIG52NTBfbXN0bV9jbGVhbnVwKHN0cnVj dCBudjUwX21zdG0gKm1zdG0pDQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQNCj4gLW52NTBfbXN0 bV9wcmVwYXJlKHN0cnVjdCBudjUwX21zdG0gKm1zdG0pDQo+ICtudjUwX21zdG1fcHJlcGFyZShz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSwNCj4gKwkJICBzdHJ1Y3QgbnY1MF9tc3RtICptc3Rt KQ0KPiAgew0KPiAgCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gbm91dmVhdV9kcm0obXN0bS0+ b3V0cC0NCj4gPmJhc2UuYmFzZS5kZXYpOw0KPiAgCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cjsNCj4gDQo+ICAJTlZfQVRPTUlDKGRybSwgIiVzOiBtc3RtIHByZXBhcmVcbiIsIG1zdG0tPm91 dHAtDQo+ID5iYXNlLmJhc2UubmFtZSk7DQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQx KCZtc3RtLT5tZ3IsIDEpOw0KPiANCj4gKwkvKiBEaXNhYmxlIHBheWxvYWRzIGZpcnN0ICovDQo+ ICAJZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2RlciwgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLmRl dikgew0KPiAgCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID09DQo+IERSTV9NT0RFX0VOQ09E RVJfRFBNU1QpIHsNCj4gIAkJCXN0cnVjdCBudjUwX21zdG8gKm1zdG8gPSBudjUwX21zdG8oZW5j b2Rlcik7DQo+ICAJCQlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4gLQkJ CWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0bSkNCj4gLQkJCQludjUwX21zdG9fcHJlcGFy ZShtc3RvKTsNCj4gKwkJCWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0bSAmJiBtc3RvLT5k aXNhYmxlZCkNCj4gKwkJCQludjUwX21zdG9fcHJlcGFyZShzdGF0ZSwgbXN0X3N0YXRlLA0KPiAm bXN0bS0+bWdyLCBtc3RvKTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCS8qIEFkZCBwYXlsb2Fk cyBmb3IgbmV3IGhlYWRzLCB3aGlsZSBhbHNvIHVwZGF0aW5nIHRoZSBzdGFydCBzbG90cyBvZg0K PiBhbnkgdW5tb2RpZmllZCAoYnV0DQo+ICsJICogYWN0aXZlKSBoZWFkcyB0aGF0IG1heSBoYXZl IGhhZCB0aGVpciBWQyBzbG90cyBzaGlmdGVkIGxlZnQgYWZ0ZXIgdGhlDQo+IHByZXZpb3VzIHN0 ZXANCj4gKwkgKi8NCj4gKwlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBtc3RtLT5vdXRw LT5iYXNlLmJhc2UuZGV2KSB7DQo+ICsJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgPT0NCj4g RFJNX01PREVfRU5DT0RFUl9EUE1TVCkgew0KPiArCQkJc3RydWN0IG52NTBfbXN0byAqbXN0byA9 IG52NTBfbXN0byhlbmNvZGVyKTsNCj4gKwkJCXN0cnVjdCBudjUwX21zdGMgKm1zdGMgPSBtc3Rv LT5tc3RjOw0KPiArCQkJaWYgKG1zdGMgJiYgbXN0Yy0+bXN0bSA9PSBtc3RtICYmICFtc3RvLQ0K PiA+ZGlzYWJsZWQpDQo+ICsJCQkJbnY1MF9tc3RvX3ByZXBhcmUoc3RhdGUsIG1zdF9zdGF0ZSwN Cj4gJm1zdG0tPm1nciwgbXN0byk7DQo+ICAJCX0NCj4gIAl9DQo+IA0KPiBAQCAtMTU5OCw5ICsx NjAxLDcgQEAgbnY1MF9tc3RtX25ldyhzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpvdXRwLA0KPiBz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBpbnQgYXV4X21heCwNCj4gIAltc3RtLT5tZ3IuY2JzID0g Jm52NTBfbXN0bTsNCj4gDQo+ICAJcmV0ID0gZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdCgm bXN0bS0+bWdyLCBkZXYsIGF1eCwNCj4gYXV4X21heCwNCj4gLQkJCQkJICAgbWF4X3BheWxvYWRz LCBvdXRwLT5kY2ItDQo+ID5kcGNvbmYubGlua19uciwNCj4gLQ0KPiBkcm1fZHBfYndfY29kZV90 b19saW5rX3JhdGUob3V0cC0+ZGNiLT5kcGNvbmYubGlua19idyksDQo+IC0JCQkJCSAgIGNvbm5f YmFzZV9pZCk7DQo+ICsJCQkJCSAgIG1heF9wYXlsb2FkcywgY29ubl9iYXNlX2lkKTsNCj4gIAlp ZiAocmV0KQ0KPiAgCQlyZXR1cm4gcmV0Ow0KPiANCj4gQEAgLTIwNDUsMjAgKzIwNDYsMjAgQEAg bnY1MF9waW9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcg0KPiAqY29ubmVjdG9yLCBzdHJ1 Y3QgZGNiX291dHB1dCAqZGNiZSkNCj4gIHN0YXRpYyB2b2lkDQo+ICBudjUwX2Rpc3BfYXRvbWlj X2NvbW1pdF9jb3JlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwgdTMyDQo+ICppbnRl cmxvY2spDQo+ICB7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7DQo+ ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsNCj4gIAlzdHJ1 Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKHN0YXRlLT5kZXYpOw0KPiAgCXN0cnVj dCBudjUwX2Rpc3AgKmRpc3AgPSBudjUwX2Rpc3AoZHJtLT5kZXYpOw0KPiAgCXN0cnVjdCBudjUw X2NvcmUgKmNvcmUgPSBkaXNwLT5jb3JlOw0KPiAgCXN0cnVjdCBudjUwX21zdG0gKm1zdG07DQo+ IC0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOw0KPiArCWludCBpOw0KPiANCj4gIAlOVl9B VE9NSUMoZHJtLCAiY29tbWl0IGNvcmUgJTA4eFxuIiwNCj4gaW50ZXJsb2NrW05WNTBfRElTUF9J TlRFUkxPQ0tfQkFTRV0pOw0KPiANCj4gLQlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBk cm0tPmRldikgew0KPiAtCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9DQo+IERSTV9NT0RF X0VOQ09ERVJfRFBNU1QpIHsNCj4gLQkJCW1zdG0gPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcikt PmRwLm1zdG07DQo+IC0JCQlpZiAobXN0bSAmJiBtc3RtLT5tb2RpZmllZCkNCj4gLQkJCQludjUw X21zdG1fcHJlcGFyZShtc3RtKTsNCj4gLQkJfQ0KPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2lu X3N0YXRlKHN0YXRlLCBtZ3IsIG1zdF9zdGF0ZSwgaSkgew0KPiArCQltc3RtID0gbnY1MF9tc3Rt KG1ncik7DQo+ICsJCWlmIChtc3RtLT5tb2RpZmllZCkNCj4gKwkJCW52NTBfbXN0bV9wcmVwYXJl KHN0YXRlLCBtc3Rfc3RhdGUsIG1zdG0pOw0KPiAgCX0NCj4gDQo+ICAJY29yZS0+ZnVuYy0+bnRm eV9pbml0KGRpc3AtPnN5bmMsIE5WNTBfRElTUF9DT1JFX05URlkpOw0KPiBAQCAtMjA2NywxMiAr MjA2OCwxMCBAQCBudjUwX2Rpc3BfYXRvbWljX2NvbW1pdF9jb3JlKHN0cnVjdA0KPiBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwgdTMyICppbnRlcmxvY2spDQo+ICAJCQkJICAgICAgIGRpc3AtPmNv cmUtPmNoYW4uYmFzZS5kZXZpY2UpKQ0KPiAgCQlOVl9FUlJPUihkcm0sICJjb3JlIG5vdGlmaWVy IHRpbWVvdXRcbiIpOw0KPiANCj4gLQlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBkcm0t PmRldikgew0KPiAtCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9DQo+IERSTV9NT0RFX0VO Q09ERVJfRFBNU1QpIHsNCj4gLQkJCW1zdG0gPSBub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPmRw Lm1zdG07DQo+IC0JCQlpZiAobXN0bSAmJiBtc3RtLT5tb2RpZmllZCkNCj4gLQkJCQludjUwX21z dG1fY2xlYW51cChtc3RtKTsNCj4gLQkJfQ0KPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2luX3N0 YXRlKHN0YXRlLCBtZ3IsIG1zdF9zdGF0ZSwgaSkgew0KPiArCQltc3RtID0gbnY1MF9tc3RtKG1n cik7DQo+ICsJCWlmIChtc3RtLT5tb2RpZmllZCkNCj4gKwkJCW52NTBfbXN0bV9jbGVhbnVwKHN0 YXRlLCBtc3Rfc3RhdGUsIG1zdG0pOw0KPiAgCX0NCj4gIH0NCj4gDQo+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4gYi9pbmNsdWRlL2RybS9k aXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4gaW5kZXggZWNkMTMwMDI4MzM3Li42MzE3ODMx NzA1YWIgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF9oZWxw ZXIuaA0KPiArKysgYi9pbmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4g QEAgLTQ4LDIwICs0OCw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl9oaXN0b3J5 IHsNCj4gDQo+ICBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2g7DQo+IA0KPiAtLyoqDQo+IC0gKiBz dHJ1Y3QgZHJtX2RwX3ZjcGkgLSBWaXJ0dWFsIENoYW5uZWwgUGF5bG9hZCBJZGVudGlmaWVyDQo+ IC0gKiBAdmNwaTogVmlydHVhbCBjaGFubmVsIElELg0KPiAtICogQHBibjogUGF5bG9hZCBCYW5k d2lkdGggTnVtYmVyIGZvciB0aGlzIGNoYW5uZWwNCj4gLSAqIEBhbGlnbmVkX3BibjogUEJOIGFs aWduZWQgd2l0aCBzbG90IHNpemUNCj4gLSAqIEBudW1fc2xvdHM6IG51bWJlciBvZiBzbG90cyBm b3IgdGhpcyBQQk4NCj4gLSAqLw0KPiAtc3RydWN0IGRybV9kcF92Y3BpIHsNCj4gLQlpbnQgdmNw aTsNCj4gLQlpbnQgcGJuOw0KPiAtCWludCBhbGlnbmVkX3BibjsNCj4gLQlpbnQgbnVtX3Nsb3Rz Ow0KPiAtfTsNCj4gLQ0KPiAgLyoqDQo+ICAgKiBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IC0gTVNU IHBvcnQNCj4gICAqIEBwb3J0X251bTogcG9ydCBudW1iZXINCj4gQEAgLTE0Miw3ICsxMjgsNiBA QCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX2F1eCBhdXg7IC8q IGkyYyBidXMgZm9yIHRoaXMgcG9ydD8gKi8NCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg KnBhcmVudDsNCj4gDQo+IC0Jc3RydWN0IGRybV9kcF92Y3BpIHZjcGk7DQo+ICAJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1ncjsNCj4gDQo+IEBAIC01MjcsMTkgKzUxMiw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X2NicyB7DQo+ICAJdm9pZCAoKnBvbGxfaHBkX2lycSkoc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IpOw0KPiAgfTsNCj4gDQo+IC0jZGVmaW5lIERQX01BWF9QQVlMT0FE IChzaXplb2YodW5zaWduZWQgbG9uZykgKiA4KQ0KPiAtDQo+IC0jZGVmaW5lIERQX1BBWUxPQURf TE9DQUwgMQ0KPiAtI2RlZmluZSBEUF9QQVlMT0FEX1JFTU9URSAyDQo+IC0jZGVmaW5lIERQX1BB WUxPQURfREVMRVRFX0xPQ0FMIDMNCj4gLQ0KPiAtc3RydWN0IGRybV9kcF9wYXlsb2FkIHsNCj4g LQlpbnQgcGF5bG9hZF9zdGF0ZTsNCj4gLQlpbnQgc3RhcnRfc2xvdDsNCj4gLQlpbnQgbnVtX3Ns b3RzOw0KPiAtCWludCB2Y3BpOw0KPiAtfTsNCj4gLQ0KPiAgI2RlZmluZSB0b19kcF9tc3RfdG9w b2xvZ3lfc3RhdGUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlLCBiYXNlKQ0KPiANCj4gIC8qKg0KPiBAQCAtNTUxLDYgKzUyMywzNSBAQCBzdHJ1 Y3QgZHJtX2RwX3BheWxvYWQgew0KPiAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQg ew0KPiAgCS8qKiBAcG9ydDogVGhlIE1TVCBwb3J0IGFzc2lnbmVkIHRvIHRoaXMgcGF5bG9hZCAq Lw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7DQo+ICsNCj4gKwkvKioNCj4gKwkg KiBAdmNfc3RhcnRfc2xvdDogVGhlIHRpbWUgc2xvdCB0aGF0IHRoaXMgcGF5bG9hZCBzdGFydHMg b24uIEJlY2F1c2UNCj4gcGF5bG9hZCBzdGFydCBzbG90cw0KPiArCSAqIGNhbid0IGJlIGRldGVy bWluZWQgYWhlYWQgb2YgdGltZSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdmFsdWUgYXJlDQo+IFVO REVGSU5FRCBhdCBhdG9taWMNCj4gKwkgKiBjaGVjayB0aW1lLiBUaGlzIHNob3VsZG4ndCB1c3Vh bGx5IG1hdHRlciwgYXMgdGhlIHN0YXJ0IHNsb3Qgc2hvdWxkDQo+IG5ldmVyIGJlIHJlbGV2YW50 IGZvcg0KPiArCSAqIGF0b21pYyBzdGF0ZSBjb21wdXRhdGlvbnMuDQo+ICsJICoNCj4gKwkgKiBT aW5jZSB0aGlzIHZhbHVlIGlzIGRldGVybWluZWQgYXQgY29tbWl0IHRpbWUgaW5zdGVhZCBvZiBj aGVjaw0KPiB0aW1lLCB0aGlzIHZhbHVlIGlzDQo+ICsJICogcHJvdGVjdGVkIGJ5IHRoZSBNU1Qg aGVscGVycyBlbnN1cmluZyB0aGF0IGFzeW5jIGNvbW1pdHMNCj4gb3BlcmF0aW5nIG9uIHRoZSBn aXZlbiB0b3BvbG9neQ0KPiArCSAqIG5ldmVyIHJ1biBpbiBwYXJhbGxlbC4gSW4gdGhlIGV2ZW50 IHRoYXQgYSBkcml2ZXIgZG9lcyBuZWVkIHRvIHJlYWQNCj4gdGhpcyB2YWx1ZSAoZS5nLiB0bw0K PiArCSAqIGluZm9ybSBoYXJkd2FyZSBvZiB0aGUgc3RhcnRpbmcgdGltZXNsb3QgZm9yIGEgcGF5 bG9hZCksIHRoZSBkcml2ZXINCj4gbWF5IGVpdGhlcjoNCj4gKwkgKg0KPiArCSAqICogUmVhZCB0 aGlzIGZpZWxkIGR1cmluZyB0aGUgYXRvbWljIGNvbW1pdCBhZnRlcg0KPiArCSAqICAgZHJtX2Rw X21zdF9hdG9taWNfd2FpdF9mb3JfZGVwZW5kZW5jaWVzKCkgaGFzIGJlZW4gY2FsbGVkLA0KPiB3 aGljaCB3aWxsIGVuc3VyZSB0aGUNCj4gKwkgKiAgIHByZXZpb3VzIE1TVCBzdGF0ZXMgcGF5bG9h ZCBzdGFydCBzbG90cyBoYXZlIGJlZW4gY29waWVkIG92ZXIgdG8NCj4gdGhlIG5ldyBzdGF0ZS4g Tm90ZQ0KPiArCSAqICAgdGhhdCBhIG5ldyBzdGFydCBzbG90IHdvbid0IGJlIGFzc2lnbmVkL3Jl bW92ZWQgZnJvbSB0aGlzDQo+IHBheWxvYWQgdW50aWwNCj4gKwkgKiAgIGRybV9kcF9hZGRfcGF5 bG9hZF9wYXJ0MSgpL2RybV9kcF9yZW1vdmVfcGF5bG9hZCgpIGhhdmUNCj4gYmVlbiBjYWxsZWQu DQo+ICsJICogKiBBY3F1aXJlIHRoZSBNU1QgbW9kZXNldHRpbmcgbG9jaywgYW5kIHRoZW4gd2Fp dCBmb3IgYW55DQo+IHBlbmRpbmcgTVNULXJlbGF0ZWQgY29tbWl0cyB0bw0KPiArCSAqICAgZ2V0 IGNvbW1pdHRlZCB0byBoYXJkd2FyZSBieSBjYWxsaW5nIGRybV9jcnRjX2NvbW1pdF93YWl0KCkg b24NCj4gZWFjaCBvZiB0aGUNCj4gKwkgKiAgICZkcm1fY3J0Y19jb21taXQgc3RydWN0cyBpbg0K PiAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS5jb21taXRfZGVwcy4NCj4gKwkgKg0KPiArCSAq IElmIG5laXRoZXIgb2YgdGhlIHR3byBhYm92ZSBzb2x1dGlvbnMgc3VmZmljZSAoZS5nLiB0aGUg ZHJpdmVyIG5lZWRzDQo+IHRvIHJlYWQgdGhlIHN0YXJ0DQo+ICsJICogc2xvdCBpbiB0aGUgbWlk ZGxlIG9mIGFuIGF0b21pYyBjb21taXQgd2l0aG91dCB3YWl0aW5nIGZvciBzb21lDQo+IHJlYXNv biksIHRoZW4gZHJpdmVycw0KPiArCSAqIHNob3VsZCBjYWNoZSB0aGlzIHZhbHVlIHRoZW1zZWx2 ZXMgYWZ0ZXIgY2hhbmdpbmcgcGF5bG9hZHMuDQo+ICsJICovDQo+ICsJczggdmNfc3RhcnRfc2xv dDsNCj4gKw0KPiArCS8qKiBAdmNwaTogVGhlIFZpcnR1YWwgQ2hhbm5lbCBQYXlsb2FkIElkZW50 aWZpZXIgKi8NCj4gKwl1OCB2Y3BpOw0KPiAgCS8qKiBAdGltZV9zbG90czogVGhlIG51bWJlciBv ZiB0aW1lc2xvdHMgYWxsb2NhdGVkIHRvIHRoaXMgcGF5bG9hZA0KPiAqLw0KPiAgCWludCB0aW1l X3Nsb3RzOw0KPiAgCS8qKiBAcGJuOiBUaGUgcGF5bG9hZCBiYW5kd2lkdGggZm9yIHRoaXMgcGF5 bG9hZCAqLw0KPiBAQCAtNTc0LDggKzU3NSw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlIHsNCj4gIAkvKiogQGJhc2U6IEJhc2UgcHJpdmF0ZSBzdGF0ZSBmb3IgYXRvbWljICov DQo+ICAJc3RydWN0IGRybV9wcml2YXRlX3N0YXRlIGJhc2U7DQo+IA0KPiAtCS8qKiBAcGF5bG9h ZHM6IFRoZSBsaXN0IG9mIHBheWxvYWRzIGJlaW5nIGNyZWF0ZWQvZGVzdHJveWVkIGluIHRoaXMN Cj4gc3RhdGUgKi8NCj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIHBheWxvYWRzOw0KPiAgCS8qKiBAbWdy OiBUaGUgdG9wb2xvZ3kgbWFuYWdlciAqLw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyOw0KPiANCj4gQEAgLTU5MiwxMCArNTkxLDIxIEBAIHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X3N0YXRlIHsNCj4gIAkvKiogQG51bV9jb21taXRfZGVwczogVGhlIG51bWJlciBv ZiBDUlRDIGNvbW1pdHMgaW4NCj4gQGNvbW1pdF9kZXBzICovDQo+ICAJc2l6ZV90IG51bV9jb21t aXRfZGVwczsNCj4gDQo+ICsJLyoqIEBwYXlsb2FkX21hc2s6IEEgYml0bWFzayBvZiBhbGxvY2F0 ZWQgVkNQSXMsIHVzZWQgZm9yIFZDUEkNCj4gYXNzaWdubWVudHMgKi8NCj4gKwl1MzIgcGF5bG9h ZF9tYXNrOw0KPiArCS8qKiBAcGF5bG9hZHM6IFRoZSBsaXN0IG9mIHBheWxvYWRzIGJlaW5nIGNy ZWF0ZWQvZGVzdHJveWVkIGluIHRoaXMNCj4gc3RhdGUgKi8NCj4gKwlzdHJ1Y3QgbGlzdF9oZWFk IHBheWxvYWRzOw0KPiArDQo+ICAJLyoqIEB0b3RhbF9hdmFpbF9zbG90czogVGhlIHRvdGFsIG51 bWJlciBvZiBzbG90cyB0aGlzIHRvcG9sb2d5IGNhbg0KPiBoYW5kbGUgKDYzIG9yIDY0KSAqLw0K PiAgCXU4IHRvdGFsX2F2YWlsX3Nsb3RzOw0KPiAgCS8qKiBAc3RhcnRfc2xvdDogVGhlIGZpcnN0 IHVzYWJsZSB0aW1lIHNsb3QgaW4gdGhpcyB0b3BvbG9neSAoMSBvciAwKSAqLw0KPiAgCXU4IHN0 YXJ0X3Nsb3Q7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAcGJuX2RpdjogVGhlIGN1cnJlbnQgUEJO IGRpdmlzb3IgZm9yIHRoaXMgdG9wb2xvZ3kuIFRoZSBkcml2ZXIgaXMNCj4gZXhwZWN0ZWQgdG8g ZmlsbCB0aGlzDQo+ICsJICogb3V0IGl0c2VsZi4NCj4gKwkgKi8NCj4gKwlpbnQgcGJuX2RpdjsN Cj4gIH07DQo+IA0KPiAgI2RlZmluZSB0b19kcF9tc3RfdG9wb2xvZ3lfbWdyKHgpIGNvbnRhaW5l cl9vZih4LCBzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IsIGJhc2UpDQo+IEBAIC02 MzUsMTQgKzY0NSw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciB7DQo+ICAJICog QG1heF9wYXlsb2FkczogbWF4aW11bSBudW1iZXIgb2YgcGF5bG9hZHMgdGhlIEdQVSBjYW4NCj4g Z2VuZXJhdGUuDQo+ICAJICovDQo+ICAJaW50IG1heF9wYXlsb2FkczsNCj4gLQkvKioNCj4gLQkg KiBAbWF4X2xhbmVfY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIGxhbmVzIHRoZSBHUFUgY2FuIGRy aXZlLg0KPiAtCSAqLw0KPiAtCWludCBtYXhfbGFuZV9jb3VudDsNCj4gLQkvKioNCj4gLQkgKiBA bWF4X2xpbmtfcmF0ZTogbWF4aW11bSBsaW5rIHJhdGUgcGVyIGxhbmUgR1BVIGNhbiBvdXRwdXQs IGluDQo+IGtIei4NCj4gLQkgKi8NCj4gLQlpbnQgbWF4X2xpbmtfcmF0ZTsNCj4gIAkvKioNCj4g IAkgKiBAY29ubl9iYXNlX2lkOiBEUk0gY29ubmVjdG9yIElEIHRoaXMgbWdyIGlzIGNvbm5lY3Rl ZCB0by4gT25seQ0KPiB1c2VkDQo+ICAJICogdG8gYnVpbGQgdGhlIE1TVCBjb25uZWN0b3IgcGF0 aCB2YWx1ZS4NCj4gQEAgLTY4NSw2ICs2ODcsMjAgQEAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyIHsNCj4gIAkgKi8NCj4gIAlib29sIHBheWxvYWRfaWRfdGFibGVfY2xlYXJlZCA6IDE7 DQo+IA0KPiArCS8qKg0KPiArCSAqIEBwYXlsb2FkX2NvdW50OiBUaGUgbnVtYmVyIG9mIGN1cnJl bnRseSBhY3RpdmUgcGF5bG9hZHMgaW4NCj4gaGFyZHdhcmUuIFRoaXMgdmFsdWUgaXMgb25seQ0K PiArCSAqIGludGVuZGVkIHRvIGJlIHVzZWQgaW50ZXJuYWxseSBieSBNU1QgaGVscGVycyBmb3Ig cGF5bG9hZCB0cmFja2luZywNCj4gYW5kIGlzIG9ubHkgc2FmZSB0bw0KPiArCSAqIHJlYWQvd3Jp dGUgZnJvbSB0aGUgYXRvbWljIGNvbW1pdCAobm90IGNoZWNrKSBjb250ZXh0Lg0KPiArCSAqLw0K PiArCXU4IHBheWxvYWRfY291bnQ7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAbmV4dF9zdGFydF9z bG90OiBUaGUgc3RhcnRpbmcgdGltZXNsb3QgdG8gdXNlIGZvciBuZXcgVkMgcGF5bG9hZHMuDQo+ IFRoaXMgdmFsdWUgaXMgdXNlZA0KPiArCSAqIGludGVybmFsbHkgYnkgTVNUIGhlbHBlcnMgZm9y IHBheWxvYWQgdHJhY2tpbmcsIGFuZCBpcyBvbmx5IHNhZmUgdG8NCj4gcmVhZC93cml0ZSBmcm9t IHRoZQ0KPiArCSAqIGF0b21pYyBjb21taXQgKG5vdCBjaGVjaykgY29udGV4dC4NCj4gKwkgKi8N Cj4gKwl1OCBuZXh0X3N0YXJ0X3Nsb3Q7DQo+ICsNCj4gIAkvKioNCj4gIAkgKiBAbXN0X3ByaW1h cnk6IFBvaW50ZXIgdG8gdGhlIHByaW1hcnkvZmlyc3QgYnJhbmNoIGRldmljZS4NCj4gIAkgKi8N Cj4gQEAgLTY5OCwxMCArNzE0LDYgQEAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyIHsN Cj4gIAkgKiBAc2lua19jb3VudDogU2luayBjb3VudCBmcm9tIERFVklDRV9TRVJWSUNFX0lSUV9W RUNUT1JfRVNJMC4NCj4gIAkgKi8NCj4gIAl1OCBzaW5rX2NvdW50Ow0KPiAtCS8qKg0KPiAtCSAq IEBwYm5fZGl2OiBQQk4gdG8gc2xvdHMgZGl2aXNvci4NCj4gLQkgKi8NCj4gLQlpbnQgcGJuX2Rp djsNCj4gDQo+ICAJLyoqDQo+ICAJICogQGZ1bmNzOiBBdG9taWMgaGVscGVyIGNhbGxiYWNrcw0K PiBAQCAtNzE4LDMyICs3MzAsNiBAQCBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Igew0K PiAgCSAqLw0KPiAgCXN0cnVjdCBsaXN0X2hlYWQgdHhfbXNnX2Rvd25xOw0KPiANCj4gLQkvKioN Cj4gLQkgKiBAcGF5bG9hZF9sb2NrOiBQcm90ZWN0IHBheWxvYWQgaW5mb3JtYXRpb24uDQo+IC0J ICovDQo+IC0Jc3RydWN0IG11dGV4IHBheWxvYWRfbG9jazsNCj4gLQkvKioNCj4gLQkgKiBAcHJv cG9zZWRfdmNwaXM6IEFycmF5IG9mIHBvaW50ZXJzIGZvciB0aGUgbmV3IFZDUEkgYWxsb2NhdGlv bi4NCj4gVGhlDQo+IC0JICogVkNQSSBzdHJ1Y3R1cmUgaXRzZWxmIGlzICZkcm1fZHBfbXN0X3Bv cnQudmNwaSwgYW5kIHRoZSBzaXplIG9mDQo+IC0JICogdGhpcyBhcnJheSBpcyBkZXRlcm1pbmVk IGJ5IEBtYXhfcGF5bG9hZHMuDQo+IC0JICovDQo+IC0Jc3RydWN0IGRybV9kcF92Y3BpICoqcHJv cG9zZWRfdmNwaXM7DQo+IC0JLyoqDQo+IC0JICogQHBheWxvYWRzOiBBcnJheSBvZiBwYXlsb2Fk cy4gVGhlIHNpemUgb2YgdGhpcyBhcnJheSBpcyBkZXRlcm1pbmVkDQo+IC0JICogYnkgQG1heF9w YXlsb2Fkcy4NCj4gLQkgKi8NCj4gLQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWRzOw0K PiAtCS8qKg0KPiAtCSAqIEBwYXlsb2FkX21hc2s6IEVsZW1lbnRzIG9mIEBwYXlsb2FkcyBhY3R1 YWxseSBpbiB1c2UuIFNpbmNlDQo+IC0JICogcmVhbGxvY2F0aW9uIG9mIGFjdGl2ZSBvdXRwdXRz IGlzbid0IHBvc3NpYmxlIGdhcHMgY2FuIGJlIGNyZWF0ZWQgYnkNCj4gLQkgKiBkaXNhYmxpbmcg b3V0cHV0cyBvdXQgb2Ygb3JkZXIgY29tcGFyZWQgdG8gaG93IHRoZXkndmUgYmVlbg0KPiBlbmFi bGVkLg0KPiAtCSAqLw0KPiAtCXVuc2lnbmVkIGxvbmcgcGF5bG9hZF9tYXNrOw0KPiAtCS8qKg0K PiAtCSAqIEB2Y3BpX21hc2s6IFNpbWlsYXIgdG8gQHBheWxvYWRfbWFzaywgYnV0IGZvciBAcHJv cG9zZWRfdmNwaXMuDQo+IC0JICovDQo+IC0JdW5zaWduZWQgbG9uZyB2Y3BpX21hc2s7DQo+IC0N Cj4gIAkvKioNCj4gIAkgKiBAdHhfd2FpdHE6IFdhaXQgdG8gcXVldWUgc3RhbGwgZm9yIHRoZSB0 eCB3b3JrZXIuDQo+ICAJICovDQo+IEBAIC04MTUsOSArODAxLDcgQEAgc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyIHsNCj4gIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9pbml0KHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncg0KPiAqbWdyLA0KPiAgCQkJCSBzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2RwX2F1eA0KPiAqYXV4LA0KPiAgCQkJCSBpbnQgbWF4 X2RwY2RfdHJhbnNhY3Rpb25fYnl0ZXMsDQo+IC0JCQkJIGludCBtYXhfcGF5bG9hZHMsDQo+IC0J CQkJIGludCBtYXhfbGFuZV9jb3VudCwgaW50IG1heF9saW5rX3JhdGUsDQo+IC0JCQkJIGludCBj b25uX2Jhc2VfaWQpOw0KPiArCQkJCSBpbnQgbWF4X3BheWxvYWRzLCBpbnQgY29ubl9iYXNlX2lk KTsNCj4gDQo+ICB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2Rlc3Ryb3koc3RydWN0DQo+ IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOw0KPiANCj4gQEAgLTg0MCwyOCArODI0LDE3 IEBAIGludCBkcm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncoY29uc3Qgc3RydWN0DQo+IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+IA0KPiAgaW50IGRybV9kcF9jYWxjX3Bibl9tb2RlKGlu dCBjbG9jaywgaW50IGJwcCwgYm9vbCBkc2MpOw0KPiANCj4gLWJvb2wgZHJtX2RwX21zdF9hbGxv Y2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJICAg ICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibiwgaW50IHNsb3RzKTsNCj4g LQ0KPiAtaW50IGRybV9kcF9tc3RfZ2V0X3ZjcGlfc2xvdHMoc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyICptZ3IsDQo+IHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiAtDQo+ IC0NCj4gLXZvaWQgZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21ncg0KPiAqbWdyLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsNCj4g LQ0KPiAgdm9pZCBkcm1fZHBfbXN0X3VwZGF0ZV9zbG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZQ0KPiAqbXN0X3N0YXRlLCB1aW50OF90IGxpbmtfZW5jb2RpbmdfY2FwKTsNCj4g DQo+IC12b2lkIGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0K PiAtDQo+IC0NCj4gLWludCBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJICAgaW50IHBibik7DQo+IC0NCj4gLQ0KPiAtaW50 IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3INCj4gKm1nciwgaW50IHN0YXJ0X3Nsb3QpOw0KPiAtDQo+IC0NCj4gLWludCBkcm1fZHBfdXBk YXRlX3BheWxvYWRfcGFydDIoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3Ip Ow0KPiAraW50IGRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgKm1zdF9zdGF0ZSwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxv YWQgKnBheWxvYWQpOw0KPiAraW50IGRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MihzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlLA0KPiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9h ZCAqcGF5bG9hZCk7DQo+ICt2b2lkIGRybV9kcF9yZW1vdmVfcGF5bG9hZChzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCQkgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNf cGF5bG9hZCAqcGF5bG9hZCk7DQo+IA0KPiAgaW50IGRybV9kcF9jaGVja19hY3Rfc3RhdHVzKHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gDQo+IEBAIC04ODMsMTcgKzg1 NiwyMiBAQCBpbnQgZHJtX2RwX21zdF9jb25uZWN0b3JfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QNCj4g ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLA0KPiAgdm9pZCBkcm1fZHBfbXN0X2Nvbm5lY3Rvcl9l YXJseV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yDQo+ICpjb25uZWN0b3IsDQo+ICAJ CQkJCSAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiANCj4gLXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlDQo+ICpkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3Rh dGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAtCQkJCQkJCQkgICAgc3RydWN0 DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOw0KPiArc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgKg0KPiArZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gKwkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gK3N0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRl ICoNCj4gK2RybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9h dG9taWNfc3RhdGUNCj4gKnN0YXRlLA0KPiArCQkJCSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyKTsNCj4gK3N0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICoN Cj4gK2RybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlDQo+ICpzdGF0ZSwNCj4gKwkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAq cG9ydCk7DQo+ICBpbnQgX19tdXN0X2NoZWNrDQo+ICBkcm1fZHBfYXRvbWljX2ZpbmRfdGltZV9z bG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJCQkgICAgICBzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgICAgIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQsIGludCBwYm4sDQo+IC0JCQkgICAgICBpbnQgcGJuX2Rpdik7DQo+ICsJ CQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsNCj4gIGludCBk cm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwNCj4gIAkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwNCj4gLQkJCQkgaW50IHBi biwgaW50IHBibl9kaXYsDQo+IC0JCQkJIGJvb2wgZW5hYmxlKTsNCj4gKwkJCQkgaW50IHBibiwg Ym9vbCBlbmFibGUpOw0KPiAgaW50IF9fbXVzdF9jaGVjaw0KPiAgZHJtX2RwX21zdF9hZGRfYWZm ZWN0ZWRfZHNjX2NydGNzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkg IHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gQEAgLTkxNyw2ICs4OTUs MTIgQEAgdm9pZCBkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhzdHJ1Y3QNCj4gZHJtX2RwX21z dF9wb3J0ICpwb3J0KTsNCj4gDQo+ICBzdHJ1Y3QgZHJtX2RwX2F1eCAqZHJtX2RwX21zdF9kc2Nf YXV4X2Zvcl9wb3J0KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiANCj4gK3N0 YXRpYyBpbmxpbmUgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKg0KPiArdG9fZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKQ0K PiArew0KPiArCXJldHVybiBjb250YWluZXJfb2Yoc3RhdGUsIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlLA0KPiBiYXNlKTsNCj4gK30NCj4gKw0KPiAgZXh0ZXJuIGNvbnN0IHN0cnVj dCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcw0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1 bmNzOw0KPiANCj4gIC8qKg0KPiAtLQ0KPiAyLjM1LjMNCg0KLS0NClJlZ2FyZHMsDQpXYXluZSBM aW4NCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 72815C25B06 for ; Thu, 4 Aug 2022 20:41:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A3057A6FBF; Thu, 4 Aug 2022 20:38:05 +0000 (UTC) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2051.outbound.protection.outlook.com [40.107.95.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4AEF410E021; Tue, 5 Jul 2022 09:11:00 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gMr+j4fM23CTtk+/07Q58GnbOz0xTbRfOQg0iSQh1jTWBqvZw7zyIbZ3sBDIfquiE9TA0e0ewccix8KuZx1/rOPT4VUpJjB6V2Eio7CHsv/8z6mnSOJTENQ7WZcaH/+0zkHr7iAOSHg/Jg8s+c0kzl4+a7II4hYis50xuJsFN5hRgY3plp3yDUZBktQjhuY30P45QbY53g/ZM7c5dlv6iv/tbj0x2vS8s9ajUqpQqHQmOMmHbG9dvWTfRheFLPWM7+x883Ot3bwcTSLd//i+wmK7CnK+Qq8PZBe2HWslhaTv4gAyp6Krqv0y/Cs0RIhtSkiWOUJ/4AEGyWhl2vlPJw== 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=Gj/NtdgojSIUq7nOCXWTipMd/Zt2eV7hUiMWOs6hexY=; b=NkcoFgqqs3bIm38qzbOUsGip4IKG9BUyh0nlBvGKYwRpYuwSxty5PVW1GnTJXDelR38hCqBExuPoNXo75oi9ywfY8K2H+TqxJebixKlniNmWYHLwO5j2INaZUQXxzY/FN9SZ+ap1YwEL6XuPi91A+kZmYjb5umGVpq/vO4dtb2AhrILJbw6e0KqZZpvkk8gxrksPHNLdWVS9Zo1vsFRcQpww5VPsP7/NeBYuhTZjLW8DjoySEexy3OdvKdpLoHnGuQos2UVmi6DbeRRPo6jSgTcz/gWH+Oz+gg3J1wFZ/Va23mKQk2dvRmS+w1LcTHdJRDaQ9eM/k2G3jU/GqHPEbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Gj/NtdgojSIUq7nOCXWTipMd/Zt2eV7hUiMWOs6hexY=; b=yU+i6VaLsRZvNZcERYBBBr5sX5PvGM5o6/hYsWqyr71xXWkWhau6q+ZzVpxghHECcZzkSNrZyxuValoQLT5Jxqa2T/dygkpXpNDOaptqzIlk4jvN3JpFSau1eFhq+rP+ur5+o+DamOVYXw0sdNQAD0xKfowjjeGYP0OU21IIBxY= Received: from CO6PR12MB5489.namprd12.prod.outlook.com (2603:10b6:303:139::18) by MN2PR12MB3280.namprd12.prod.outlook.com (2603:10b6:208:ad::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.15; Tue, 5 Jul 2022 09:10:52 +0000 Received: from CO6PR12MB5489.namprd12.prod.outlook.com ([fe80::68dc:88ad:eb33:1813]) by CO6PR12MB5489.namprd12.prod.outlook.com ([fe80::68dc:88ad:eb33:1813%9]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 09:10:52 +0000 From: "Lin, Wayne" To: Lyude Paul , "dri-devel@lists.freedesktop.org" , "nouveau@lists.freedesktop.org" , "amd-gfx@lists.freedesktop.org" Thread-Topic: [RESEND RFC 18/18] drm/display/dp_mst: Move all payload info into the atomic state Thread-Index: AQHYeqbgSVnUwi//gUS5WPmor4cgkq1votDQ Date: Tue, 5 Jul 2022 09:10:51 +0000 Message-ID: References: <20220607192933.1333228-1-lyude@redhat.com> <20220607192933.1333228-19-lyude@redhat.com> In-Reply-To: <20220607192933.1333228-19-lyude@redhat.com> Accept-Language: en-US, zh-TW Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Enabled=true; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SetDate=2022-07-05T09:10:48Z; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Method=Privileged; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Name=Public-AIP 2.0; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ActionId=5cbec1ad-20a7-4d95-b855-d10037ba4231; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ad76e268-f54f-4767-6fc2-08da5e664264 x-ms-traffictypediagnostic: MN2PR12MB3280:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 8zlpuonYuORPr2AmBvFywzeAk8Cy8jLnx0NclNDHqosKtIrnBT733BbBSqY+g3AzoT8ZI2GJ23zA89RXgpCssgsJs3PXp9fSKNZagxEz07Bfq4H8CsrDZh17z6ewsErIb1FCYnElDJ3Buyp8OvsnzDYrzZr5t1tawejh2HPyhwDxun9JXBoDra0QN9sTtu+d9kF6T2nYyceQgbwZCxXnHS+7tOTHNXmJBoC4Jm8s85uCopStKETmqvbtpJpeJj4P9g/1bXFKDV5iYtF2Qq60XGuEMpJh0vcFTx6gVbDkyy8Dp+pnOzR+WG7leM+HIoP5DBFObMlbKxq6IDZjWiR81DKnumJlUqc07srWPo8j3ZhaWxvvKiDyZu/h+2ChrwSvuZfv7aM6uyc0UHmf84klScYhkeZ45UDC61dyGfhErUntUyYzmuGntTvDXZ21fr/Aag2GuSiE634yPmdVtb+wKUS8WSrVnwsNSWpTzslGA6FpKPzBHuGxclNlSq7a3eSvrJLqFNTzJdfG4FZoVhICdjHa9bwpfiz7wvE5XZ5Q7MSBCealmNv9oOjI1aNd1jKb+5aN9CEp19TjZetjc3oRuF+NKB5s2BTc7MagpOXjgKylwoOCXRtCr/C+f+cCBX68M9iShUX0R/73Ssdj1VZktqYItoWqjLF/Vdbu1Tr6ntc1qEtCdeIAXES5rjYf5wdpjwgMVID0O4J5fUAXUw8SaEVSKhfrIqVzKRdkRTo0NwnNT0jZFwkuv5QEuoc8DB+4JxYGKUszu+wTuCtqd3n2/ey/7wlOd3zy5i133QpiFUNcYwD1N04vkSaA/mGL+VpV5GGP9Md9Eo8SCYKdocnrUA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR12MB5489.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(39860400002)(136003)(396003)(346002)(376002)(366004)(38100700002)(66946007)(8676002)(4326008)(76116006)(7696005)(66556008)(66476007)(66446008)(64756008)(6506007)(30864003)(7406005)(5660300002)(7416002)(2906002)(86362001)(55016003)(38070700005)(122000001)(53546011)(8936002)(52536014)(478600001)(41300700001)(71200400001)(66574015)(83380400001)(110136005)(54906003)(316002)(186003)(9686003)(33656002)(26005)(21314003)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bk5XMkt6WHV0YnBsbjAvVGRabnQvQjVCckZFaThFVGlMK0ZnUllhWWpyd2da?= =?utf-8?B?djBoMjFuc0FienF1SStGZnNlbkpIT2tLaDk2WDhJUkE0OThRd3d0Qk1TOEhr?= =?utf-8?B?em4vS3dnWTlRLzZicThlOGZJSlh2Q1o5N3dZRjN3K1hIZlg0ZjRFNnJRNXhE?= =?utf-8?B?eVpXUjFOQlRKTGNQMGc3aWVFNTVUcXpid2RCeVptU3Q0eFFGSWdTZngrOCtz?= =?utf-8?B?dXFRcDNOcUJOQVFZbUdzbWVTMExyd2NUcktJWXgzakh2YXp2d0Q1bXVYa01n?= =?utf-8?B?ZmdkcFRZSVVXaTRCeEdTeEwvTkpQSzVMYld5WG5CeWZaZGlGbjlUVkcwdEI1?= =?utf-8?B?TTBESFYrQmhqeERCWnJUVzQ4dVNRenRINVE0dHl5MGdhWGI0ZXBST0tsMkgz?= =?utf-8?B?YThKdDNyN2dRanNCU3JTNDk4K29jZlpiQ0ZTYjZtUEdsNENubHBQRnJZR2Uv?= =?utf-8?B?R3lOOWYrWjJ4eG51NGdCVTM3UUxWdkhWQXBEczk1VU1NMXZBS3dpenBmSzNZ?= =?utf-8?B?UWJqOHUyV3MvM1BYQkYzemtBZmRWQmdsTG5FdDBDTUhzekxiOGxGOWJjeEJL?= =?utf-8?B?M1dlTTE5MkdFaG5VeFhrZGZKU2pjQ0JORmpLRTJlM05scE1IdGVMSkFGQ0NK?= =?utf-8?B?YzVBcmN0QzBiUVIvMnlubkVTVE9UV20vajZBS1EvOWZLd1VsZnA0SStnY0Nm?= =?utf-8?B?MllvNGsySkNjRTU5YVM3OWdRYWZHcUZjYTdzejlvVnY0NW1HY3g4MGhuVkhj?= =?utf-8?B?dEUxdkRmdkF1Y0pGVHhnZnRReHpNMGt2WkorbDBvRUZwcGZLTzZaamdIVXlJ?= =?utf-8?B?bzBDV2NLRHhnbWk5NWNYeDVLTlhWNVUrY05CWFFpNnM4aC9KYmpVTUN5bzBN?= =?utf-8?B?dnFwUk5BK0Y1R1RkQlpOV1pFenBaTmtURXZCUk5FWE82TVk2WHphbktxSElI?= =?utf-8?B?SDlJTFBoYjJrdk85UTNCNmNBanVZdHBkenZOWlZGU3dDZEtrUXA2VUM1aXgw?= =?utf-8?B?U1QvcEtDTngxaDdxWkEwYXBtaWhKQmNiMW4vcDd2VWNYUkRlc3JEZW5yTWdy?= =?utf-8?B?S2tkMmsvLzU5OHFnb3FzRUZPbGUva0RTRk1vSmFwdzdXMWtOcFlybGJjQzJP?= =?utf-8?B?NEtDSWNlYmI2QkRsTlp4WXVKSitQbHZ2K1VHakdJdFBJOUQrNFl3VXFOcHB5?= =?utf-8?B?R3JhblBNWlhxZjlCOEdlTUpUVE5xN1Rlb0VkZnA4djlGTTFiaVpnQUxsY2h5?= =?utf-8?B?NFl1ZDJDaXZmOTdRcUpKZzRwdnd5SDRUaVJsaFluZ2Z1K29TVWVuclYwckN6?= =?utf-8?B?eTVSbTE1cnBOYUhhbW5yb0EyL2l5Rk05Mkp4SEdvQVFRZW9tOHRvWk1FUisz?= =?utf-8?B?bmNvNFFZOHpsNktqdjdKaDMvVGxYbUN6QWUwUU5mWWxFZFdzaExraHE0T1lQ?= =?utf-8?B?Z2hJMDRaSWJObkU2ZWNOSjBTemNNSmdzVmM0NDFQNVV1dWRsWWtEMU1TQlFi?= =?utf-8?B?VEp5cE5GejJ4enRKQTlDMTkzemNvZ2tweVpiV0V0SkFIT3ZWbnJLblMxRUZi?= =?utf-8?B?K3R3Umo4NlpXLzNiRkZPVW1YOG1paGhJa3M5dThKN1I2bWpXNXpURjFGRlZh?= =?utf-8?B?L2ErR0pEUHFxL2RNQXVIaDBSWWc1encwSmVnVjFlMDVYRVBOUmlCRnZkU0Ju?= =?utf-8?B?Z3l0UHhwSVNuT09GOVFRM0VuOHlmcnBUZ0ZOTjdrQWFMM1VYSWxaNTNjQWFL?= =?utf-8?B?dlBqYmlhY004VWpJTHNQb3NnbkZBck1kU0JqUVZ3NU1nM2c5akRVM3kyVVds?= =?utf-8?B?RzNBcWZZd20zakhkUXJmS3hTZ1B2MEIvMTRHZGJVOTU3ZVhpL3NvUTdOV0xH?= =?utf-8?B?ZklNTGhMblhoU0Qvd1hRY2hId1ZCbi96djhzQWgybDJETDlsUjdsbStab3Nr?= =?utf-8?B?WHRERDkrbUVCV09IMGtXTVNOSjdsMitrQjh2N2ZlMGZQWnNwa0NKQVMrU1Ru?= =?utf-8?B?SDNGeE02bGhGakRldXBBbG0yZExzWmZEYXpQUUZFdWhjK1dVRi9Sbkl3YmNH?= =?utf-8?B?TTdWZ2NXSjk3ZTlpVTlvcVlnTlBZcml1ci9oTDJCcHZ3aHUyVGdWbUdtS1NJ?= =?utf-8?Q?Zz9rO5KlxR1jVY03kYTnufj+N?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO6PR12MB5489.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad76e268-f54f-4767-6fc2-08da5e664264 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Jul 2022 09:10:51.9743 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: a2Gy59UpTwSRezLEg1HrNJt3llLKyUcaC7sQQYlajrFi2RG90T56eOm7IUoewRrP54A53Sm0eJEKiF17BSDFlQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3280 X-Mailman-Approved-At: Thu, 04 Aug 2022 20:34:37 +0000 Subject: Re: [Nouveau] [RESEND RFC 18/18] drm/display/dp_mst: Move all payload info into the atomic state X-BeenThere: nouveau@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Nouveau development list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Chen, Ian" , David Airlie , Imre Deak , Joonas Lahtinen , =?utf-8?B?Sm9zw6kgUm9iZXJ0byBkZSBTb3V6YQ==?= , open list , "Lei, Jun" , =?utf-8?B?VmlsbGUgU3lyasOkbMOk?= , "Lakha, Bhawanpreet" , "Siqueira, Rodrigo" , Javier Martinez Canillas , "Li, Sun peng \(Leo\)" , "Zuo, Jerry" , "Shih, Jude" , Ben Skeggs , Andi Shyti , "Strauss, Michael" , "Wentland, Harry" , Juston Li , Jani Nikula , Anshuman Gupta , "open list:INTEL DRM DRIVERS" , Luo Jiaxing , Jani Nikula , "Liu, Wenjing" , "Wu, Hersen" , Rodrigo Vivi , "Ma, Leo" , Mikita Lipski , Sean Paul , He Ying , Tvrtko Ursulin , Simon Ser , "Pan, Xinhui" , "Li, Roman" , "Koenig, Christian" , Ashutosh Dixit , Daniel Vetter , "Deucher, Alexander" , Sean Paul , Colin Ian King , "Kazlauskas, Nicholas" , Fernando Ramos Errors-To: nouveau-bounces@lists.freedesktop.org Sender: "Nouveau" W1B1YmxpY10NCg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTHl1 ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4NCj4gU2VudDogV2VkbmVzZGF5LCBKdW5lIDgsIDIw MjIgMzozMCBBTQ0KPiBUbzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgbm91dmVh dUBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGFtZC0NCj4gZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zw0KPiBDYzogTGluLCBXYXluZSA8V2F5bmUuTGluQGFtZC5jb20+OyBWaWxsZSBTeXJqw6Rsw6QN Cj4gPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPjsgWnVvLCBKZXJyeSA8SmVycnkuWnVv QGFtZC5jb20+OyBKYW5pIE5pa3VsYQ0KPiA8amFuaS5uaWt1bGFAaW50ZWwuY29tPjsgSW1yZSBE ZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPjsgRGFuaWVsIFZldHRlcg0KPiA8ZGFuaWVsLnZldHRl ckBmZndsbC5jaD47IFNlYW4gUGF1bCA8c2VhbkBwb29ybHkucnVuPjsgV2VudGxhbmQsIEhhcnJ5 DQo+IDxIYXJyeS5XZW50bGFuZEBhbWQuY29tPjsgTGksIFN1biBwZW5nIChMZW8pIDxTdW5wZW5n LkxpQGFtZC5jb20+Ow0KPiBTaXF1ZWlyYSwgUm9kcmlnbyA8Um9kcmlnby5TaXF1ZWlyYUBhbWQu Y29tPjsgRGV1Y2hlciwgQWxleGFuZGVyDQo+IDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsg S29lbmlnLCBDaHJpc3RpYW4NCj4gPENocmlzdGlhbi5Lb2VuaWdAYW1kLmNvbT47IFBhbiwgWGlu aHVpIDxYaW5odWkuUGFuQGFtZC5jb20+OyBEYXZpZA0KPiBBaXJsaWUgPGFpcmxpZWRAbGludXgu aWU+OyBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+OyBKYW5pIE5pa3VsYQ0KPiA8amFu aS5uaWt1bGFAbGludXguaW50ZWwuY29tPjsgSm9vbmFzIExhaHRpbmVuDQo+IDxqb29uYXMubGFo dGluZW5AbGludXguaW50ZWwuY29tPjsgUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwu Y29tPjsNCj4gVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGxpbnV4LmludGVsLmNvbT47 IEJlbiBTa2VnZ3MNCj4gPGJza2VnZ3NAcmVkaGF0LmNvbT47IEthcm9sIEhlcmJzdCA8a2hlcmJz dEByZWRoYXQuY29tPjsgS2F6bGF1c2thcywNCj4gTmljaG9sYXMgPE5pY2hvbGFzLkthemxhdXNr YXNAYW1kLmNvbT47IExpLCBSb21hbg0KPiA8Um9tYW4uTGlAYW1kLmNvbT47IFNoaWgsIEp1ZGUg PEp1ZGUuU2hpaEBhbWQuY29tPjsgU2ltb24gU2VyDQo+IDxjb250YWN0QGVtZXJzaW9uLmZyPjsg TGFraGEsIEJoYXdhbnByZWV0DQo+IDxCaGF3YW5wcmVldC5MYWtoYUBhbWQuY29tPjsgTWlraXRh IExpcHNraSA8bWlraXRhLmxpcHNraUBhbWQuY29tPjsNCj4gQ2xhdWRpbyBTdWFyZXogPGNzc2tA bmV0LWMuZXM+OyBDaGVuLCBJYW4gPElhbi5DaGVuQGFtZC5jb20+OyBDb2xpbiBJYW4NCj4gS2lu ZyA8Y29saW4ua2luZ0BpbnRlbC5jb20+OyBXdSwgSGVyc2VuIDxoZXJzZW54cy53dUBhbWQuY29t PjsgTGl1LA0KPiBXZW5qaW5nIDxXZW5qaW5nLkxpdUBhbWQuY29tPjsgTGVpLCBKdW4gPEp1bi5M ZWlAYW1kLmNvbT47IFN0cmF1c3MsDQo+IE1pY2hhZWwgPE1pY2hhZWwuU3RyYXVzc0BhbWQuY29t PjsgTWEsIExlbyA8SGFuZ2hvbmcuTWFAYW1kLmNvbT47DQo+IFRob21hcyBaaW1tZXJtYW5uIDx0 emltbWVybWFubkBzdXNlLmRlPjsgSm9zw6kgUm9iZXJ0byBkZSBTb3V6YQ0KPiA8am9zZS5zb3V6 YUBpbnRlbC5jb20+OyBIZSBZaW5nIDxoZXlpbmcyNEBodWF3ZWkuY29tPjsgQW5zaHVtYW4NCj4g R3VwdGEgPGFuc2h1bWFuLmd1cHRhQGludGVsLmNvbT47IEFuZGkgU2h5dGkNCj4gPGFuZGkuc2h5 dGlAbGludXguaW50ZWwuY29tPjsgQXNodXRvc2ggRGl4aXQgPGFzaHV0b3NoLmRpeGl0QGludGVs LmNvbT47DQo+IEp1c3RvbiBMaSA8anVzdG9uLmxpQGludGVsLmNvbT47IFNlYW4gUGF1bCA8c2Vh bnBhdWxAY2hyb21pdW0ub3JnPjsNCj4gRmVybmFuZG8gUmFtb3MgPGdyZWVuZm9vQHU5Mi5ldT47 IEx1byBKaWF4aW5nDQo+IDxsdW9qaWF4aW5nQGh1YXdlaS5jb20+OyBKYXZpZXIgTWFydGluZXog Q2FuaWxsYXMgPGphdmllcm1AcmVkaGF0LmNvbT47DQo+IG9wZW4gbGlzdCA8bGludXgta2VybmVs QHZnZXIua2VybmVsLm9yZz47IG9wZW4gbGlzdDpJTlRFTCBEUk0gRFJJVkVSUw0KPiA8aW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4NCj4gU3ViamVjdDogW1JFU0VORCBSRkMgMTgvMThd IGRybS9kaXNwbGF5L2RwX21zdDogTW92ZSBhbGwgcGF5bG9hZCBpbmZvIGludG8NCj4gdGhlIGF0 b21pYyBzdGF0ZQ0KPiANCj4gTm93IHRoYXQgd2UndmUgZmluYWxseSBnb3R0ZW4gcmlkIG9mIHRo ZSBub24tYXRvbWljIE1TVCB1c2VycyBsZWZ0b3ZlciBpbg0KPiB0aGUga2VybmVsLCB3ZSBjYW4g ZmluYWxseSBnZXQgcmlkIG9mIGFsbCBvZiB0aGUgbGVnYWN5IHBheWxvYWQgY29kZSB3ZQ0KPiBo YXZlIGFuZCBtb3ZlIGFzIG11Y2ggYXMgcG9zc2libGUgaW50byB0aGUgTVNUIGF0b21pYyBzdGF0 ZSBzdHJ1Y3RzLiBUaGUNCj4gbWFpbiBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gbWFrZSB0aGUgTVNU IGNvZGUgYSBsb3QgbGVzcyBjb25mdXNpbmcgdG8gd29yaw0KPiBvbiwgYXMgdGhlcmUncyBhIGxv dCBvZiBkdXBsaWNhdGVkIGxvZ2ljIHRoYXQgZG9lc24ndCByZWFsbHkgbmVlZCB0byBiZQ0KPiBo ZXJlLiBBcyB3ZWxsLCB0aGlzIHNob3VsZCBtYWtlIGludHJvZHVjaW5nIGZlYXR1cmVzIGxpa2Ug ZmFsbGJhY2sgbGluaw0KPiByZXRyYWluaW5nIGFuZCBEU0Mgc3VwcG9ydCBmYXIgZWFzaWVyLg0K PiANCj4gU2luY2UgdGhlIG9sZCBwYXlsb2FkIGNvZGUgd2FzIHByZXR0eSBnbmFybHkgYW5kIHRo ZXJlJ3MgYSBMb3Qgb2YgY2hhbmdlcw0KPiBoZXJlLCBJIGV4cGVjdCB0aGlzIG1pZ2h0IGJlIGEg Yml0IGRpZmZpY3VsdCB0byByZXZpZXcuIFNvIHRvIG1ha2UgdGhpbmdzDQo+IGFzIGVhc3kgYXMg cG9zc2libGUgZm9yIHJldmlld2VycywgSSdsbCBzdW0gdXAgaG93IGJvdGggdGhlIG9sZCBhbmQg bmV3DQo+IGNvZGUgd29ya2VkIGhlcmUgKGl0IHRvb2sgbWUgYSB3aGlsZSB0byBmaWd1cmUgdGhp cyBvdXQgdG9vISkuDQo+IA0KPiBUaGUgb2xkIE1TVCBjb2RlIGJhc2ljYWxseSB3b3JrZWQgYnkg bWFpbnRhaW5pbmcgdHdvIGRpZmZlcmVudCBwYXlsb2FkDQo+IHRhYmxlcyAtIHByb3Bvc2VkX3Zj cGlzLCBhbmQgcGF5bG9hZHMuIHByb3Bvc2VkX3ZjcGlzIHdvdWxkIGhvbGQgdGhlDQo+IG1vZGlm aWVkIHBheWxvYWQgd2Ugd2FudGVkIHRvIHB1c2ggdG8gdGhlIHRvcG9sb2d5LCB3aGlsZSBwYXls b2FkcyBoZWxkDQo+IHRoZQ0KPiBwYXlsb2FkIHRhYmxlIHRoYXQgd2FzIGN1cnJlbnRseSBwcm9n cmFtbWVkIGluIGhhcmR3YXJlLiBNb2RpZmljYXRpb25zIHRvDQo+IHByb3Bvc2VkX3ZjcGlzIHdv dWxkIGJlIGhhbmRsZWQgdGhyb3VnaCBkcm1fZHBfYWxsb2NhdGVfdmNwaSgpLA0KPiBkcm1fZHBf bXN0X2RlYWxsb2NhdGVfdmNwaSgpLCBhbmQgZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKCku IFRoZW4sDQo+IHRoZXkNCj4gd291bGQgYmUgcHVzaGVkIHZpYSBkcm1fZHBfbXN0X3VwZGF0ZV9w YXlsb2FkX3N0ZXAxKCkgYW5kDQo+IGRybV9kcF9tc3RfdXBkYXRlX3BheWxvYWRfc3RlcDIoKS4N Cj4gDQo+IEZ1cnRoZXJtb3JlLCBpdCdzIGltcG9ydGFudCB0byBub3RlIGhvdyBhZGRpbmcgYW5k IHJlbW92aW5nIFZDIHBheWxvYWRzDQo+IGFjdHVhbGx5IHdvcmtlZCB3aXRoIGRybV9kcF9tc3Rf dXBkYXRlX3BheWxvYWRfc3RlcDEoKS4gV2hlbiBhIFZDDQo+IHBheWxvYWQNCj4gaXMgcmVtb3Zl ZCBmcm9tIHRoZSBWQyB0YWJsZSwgYWxsIFZDIHBheWxvYWRzIHdoaWNoIGNvbWUgYWZ0ZXIgdGhl IHJlbW92ZWQNCj4gVkMgcGF5bG9hZCdzIHNsb3RzIG11c3QgaGF2ZSB0aGVpciB0aW1lIHNsb3Rz IHNoaWZ0ZWQgdG93YXJkcyB0aGUgc3RhcnQgb2YNCj4gdGhlIHRhYmxlLiBUaGUgb2xkIGNvZGUg aGFuZGxlcyB0aGlzIGJ5IGxvb3BpbmcgdGhyb3VnaCB0aGUgZW50aXJlIHBheWxvYWQNCj4gdGFi bGUgYW5kIHJlY29tcHV0aW5nIHRoZSBzdGFydCBzbG90IGZvciBldmVyeSBwYXlsb2FkIGluIHRo ZSB0b3BvbG9neSBmcm9tDQo+IHNjcmF0Y2guIFdoaWxlIHZlcnkgbXVjaCBvdmVya2lsbCwgdGhp cyBlbmRzIHVwIGRvaW5nIHRoZSByaWdodCB0aGluZw0KPiBiZWNhdXNlIHdlIGFsd2F5cyBvcmRl ciB0aGUgVkNQSXMgZm9yIHBheWxvYWRzIGZyb20gZmlyc3QgdG8gbGFzdCBzdGFydGluZw0KPiB0 aW1lc2xvdC4NCj4gDQo+IEl0J3MgaW1wb3J0YW50IHRvIGFsc28gbm90ZSB0aGF0IGRybV9kcF9t c3RfdXBkYXRlX3BheWxvYWRfc3RlcDIoKSBpc24ndA0KPiBhY3R1YWxseSBsaW1pdGVkIHRvIHVw ZGF0aW5nIGEgc2luZ2xlIHBheWxvYWQgLSB0aGUgZHJpdmVyIGNhbiB1c2UgaXQgdG8NCj4gcXVl dWUgdXAgbXVsdGlwbGUgcGF5bG9hZCBjaGFuZ2VzIHNvIHRoYXQgYXMgbWFueSBvZiB0aGVtIGNh biBiZSBzZW50IGFzDQo+IHBvc3NpYmxlIGJlZm9yZSB3YWl0aW5nIGZvciB0aGUgQUNULg0KDQpI aSBMeXVkZSwNCg0KSSBoYXZlIGNvbmNlcm4gZm9yIHVwZGF0aW5nIHBheWxvYWQgdGFibGUgbXVs dGlwbGUgdGltZXMgZm9yIG11bHRpcGxlIHBheWxvYWQNCmNoYW5nZXMgYmVmb3JlIHNlbmRpbmcg dGhlIEFDVC4gQWxzbyBjb25zdWx0IHdpdGggb25lIGJyYW5jaCB2ZW5kb3IsIHRoZXkgDQpzYXkg dGhlaXIgZncgd2lsbCBleHBlY3QgcmVjZWl2aW5nIG9uZSBBTExPQ0FURV9QQVlMT0FEIGFmdGVy IHNldHRpbmcgRFBDRA0KMDAyYzBoIGJpdCAwIChWQyBwYXlsb2FkIElEIHRhYmxlIHVwZGF0ZWQp Lg0KDQpUaGFua3MhDQo+IA0KPiBkcm1fZHBfbXN0X3VwZGF0ZV9wYXlsb2FkX3N0ZXAyKCkgaXMg cHJldHR5IHNlbGYgZXhwbGFuYXRvcnkgYW5kDQo+IGJhc2ljYWxseQ0KPiB0aGUgc2FtZSBiZXR3 ZWVuIHRoZSBvbGQgYW5kIG5ldyBjb2RlLCBzYXZlIGZvciB0aGUgZmFjdCB3ZSBkb24ndCBoYXZl IGENCj4gc2Vjb25kIHN0ZXAgZm9yIGRlbGV0aW5nIHBheWxvYWRzIGFueW1vcmUgLWFuZCB0aHVz IHJlbmFtZSBpdCB0bw0KPiBkcm1fZHBfbXN0X2FkZF9wYXlsb2FkX3N0ZXAyKCkuDQo+IA0KPiBU aGUgbmV3IHBheWxvYWQgY29kZSBzdG9yZXMgYWxsIG9mIHRoZSBjdXJyZW50IHBheWxvYWQgaW5m byB3aXRoaW4gdGhlIE1TVA0KPiBhdG9taWMgc3RhdGUgYW5kIGNvbXB1dGVzIGFzIG11Y2ggb2Yg dGhlIHN0YXRlIGFzIHBvc3NpYmxlIGFoZWFkIG9mIHRpbWUuDQo+IFRoaXMgaGFzIHRoZSBvbmUg ZXhjZXB0aW9uIG9mIHRoZSBzdGFydGluZyB0aW1lc2xvdHMgZm9yIHBheWxvYWRzLCB3aGljaA0K PiBjYW4ndCBiZSBkZXRlcm1pbmVkIGF0IGF0b21pYyBjaGVjayB0aW1lIHNpbmNlIHRoZSBzdGFy dGluZyB0aW1lIHNsb3RzIHdpbGwNCj4gdmFyeSBkZXBlbmRpbmcgb24gd2hhdCBvcmRlciBDUlRD cyBhcmUgZW5hYmxlZCBpbiB0aGUgYXRvbWljIHN0YXRlIC0gd2hpY2gNCj4gdmFyaWVzIGZyb20g ZHJpdmVyIHRvIGRyaXZlci4gVGhlc2UgYXJlIHN0aWxsIHN0b3JlZCBpbiB0aGUgYXRvbWljIE1T VA0KPiBzdGF0ZSwgYnV0IGFyZSBvbmx5IGNvcGllZCBmcm9tIHRoZSBvbGQgTVNUIHN0YXRlIGR1 cmluZyBhdG9taWMgY29tbWl0DQo+IHRpbWUuIExpa2V3aXNlLCB0aGlzIGlzIHdoZW4gbmV3IHN0 YXJ0IHNsb3RzIGFyZSBkZXRlcm1pbmVkLg0KPiANCj4gQWRkaW5nL3JlbW92aW5nIHBheWxvYWRz IG5vdyB3b3JrcyBtdWNoIG1vcmUgY2xvc2VseSB0byBob3cgdGhpbmdzIGFyZQ0KPiBkZXNjcmli ZWQgaW4gdGhlIHNwZWMuIFdoZW4gd2UgZGVsZXRlIGEgcGF5bG9hZCwgd2UgbG9vcCB0aHJvdWdo IHRoZQ0KPiBjdXJyZW50IGxpc3Qgb2YgcGF5bG9hZHMgYW5kIHVwZGF0ZSB0aGUgc3RhcnQgc2xv dHMgZm9yIGFueSBwYXlsb2FkcyB3aG9zZQ0KPiB0aW1lIHNsb3RzIGNhbWUgYWZ0ZXIgdGhlIHBh eWxvYWQgd2UganVzdCBkZWxldGVkLiBEZXRlcm1pbmluZyB0aGUgc3RhcnRpbmcNCj4gdGltZSBz bG90cyBmb3IgbmV3IHBheWxvYWRzIGJlaW5nIGFkZGVkIGlzIGRvbmUgYnkgc2ltcGx5IGtlZXBp bmcgdHJhY2sgb2YNCj4gd2hlcmUgdGhlIGVuZCBvZiB0aGUgVkMgdGFibGUgaXMgaW4NCj4gZHJt X2RwX21zdF90b3BvbG9neV9tZ3ItPm5leHRfc3RhcnRfc2xvdC4gQWRkaXRpb25hbGx5LCBpdCdz IHdvcnRoIG5vdGluZw0KPiB0aGF0IHdlIG5vIGxvbmdlciBoYXZlIGEgc2luZ2xlIHVwZGF0ZV9w YXlsb2FkKCkgZnVuY3Rpb24uIEluc3RlYWQsIHdlIG5vdw0KPiBoYXZlIGRybV9kcF9tc3RfYWRk X3BheWxvYWRfc3RlcDF8MigpIGFuZA0KPiBkcm1fZHBfbXN0X3JlbW92ZV9wYXlsb2FkKCkuIEFz DQo+IHN1Y2gsIGl0J3Mgbm93IGxlZnQgaXQgdXAgdG8gdGhlIGRyaXZlciB0byBmaWd1cmUgb3V0 IHdoZW4gdG8gYWRkIG9yIHJlbW92ZQ0KPiBwYXlsb2Fkcy4gVGhlIGRyaXZlciBhbHJlYWR5IGtu b3dzIHdoZW4gaXQncyBkaXNhYmxpbmcvZW5hYmxpbmcgQ1JUQ3MsIHNvDQo+IGl0IGFsc28gYWxy ZWFkeSBrbm93cyB3aGVuIHBheWxvYWRzIHNob3VsZCBiZSBhZGRlZCBvciByZW1vdmVkLiBBbmQs IHRoaXMNCj4gZG9lc24ndCBpbnRlcmZlcmUgd2l0aCB0aGUgYWJpbGl0eSB0byBxdWV1ZSB1cCBt dWx0aXBsZSBwYXlsb2FkIGNoYW5nZXMNCj4gYmVmb3JlIHdhaXRpbmcgZm9yIHRoZSBBQ1QuDQo+ IA0KPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPg0KPiBDYzog V2F5bmUgTGluIDxXYXluZS5MaW5AYW1kLmNvbT4NCj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+DQo+IENjOiBGYW5nemhpIFp1byA8SmVycnkuWnVv QGFtZC5jb20+DQo+IENjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPg0KPiBD YzogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPg0KPiBDYzogRGFuaWVsIFZldHRlciA8 ZGFuaWVsLnZldHRlckBmZndsbC5jaD4NCj4gQ2M6IFNlYW4gUGF1bCA8c2VhbkBwb29ybHkucnVu Pg0KPiAtLS0NCj4gIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0u YyB8ICA1NiArLQ0KPiAgLi4uL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG1faGVscGVy cy5jIHwgMTA3ICstLQ0KPiAgLi4uL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9tc3RfdHlw ZXMuYyAgIHwgIDg1ICstLQ0KPiAgLi4uL2FtZC9kaXNwbGF5L2luY2x1ZGUvbGlua19zZXJ2aWNl X3R5cGVzLmggIHwgICA3ICsNCj4gIGRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3Rf dG9wb2xvZ3kuYyB8IDY5OSArKysrKystLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMgICB8ICA2NCArLQ0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9oZGNwLmMgICAgIHwgIDI0ICstDQo+ICBkcml2ZXJzL2dwdS9k cm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMgICAgICAgfCAxNjMgKystLQ0KPiAgaW5jbHVkZS9k cm0vZGlzcGxheS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgMTc4ICsrLS0tDQo+ICA5IGZp bGVzIGNoYW5nZWQsIDUzNiBpbnNlcnRpb25zKCspLCA4NDcgZGVsZXRpb25zKC0pDQo+IA0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVf ZG0uYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2Rt LmMNCj4gaW5kZXggYWM4NjQ4ZTNjMWM5Li45M2Q1NzJlYTNjNDggMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMNCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYw0KPiBAQCAt NzM3OCw2ICs3Mzc4LDcgQEAgc3RhdGljIGludCBkbV9lbmNvZGVyX2hlbHBlcl9hdG9taWNfY2hl Y2soc3RydWN0DQo+IGRybV9lbmNvZGVyICplbmNvZGVyLA0KPiAgCWNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJmNydGNfc3RhdGUtDQo+ID5hZGp1c3RlZF9t b2RlOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbXN0X21ncjsNCj4gIAlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICptc3RfcG9ydDsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCWVudW0gZGNfY29sb3JfZGVwdGggY29sb3Jf ZGVwdGg7DQo+ICAJaW50IGNsb2NrLCBicHAgPSAwOw0KPiAgCWJvb2wgaXNfeTQyMCA9IGZhbHNl Ow0KPiBAQCAtNzM5MSw2ICs3MzkyLDEzIEBAIHN0YXRpYyBpbnQNCj4gZG1fZW5jb2Rlcl9oZWxw ZXJfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwNCj4gIAlpZiAoIWNy dGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdlZCAmJiAhY3J0Y19zdGF0ZS0NCj4gPm1vZGVfY2hh bmdlZCkNCj4gIAkJcmV0dXJuIDA7DQo+IA0KPiArCW1zdF9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbXN0X21ncik7DQo+ICsJaWYgKElTX0VSUihtc3Rf c3RhdGUpKQ0KPiArCQlyZXR1cm4gUFRSX0VSUihtc3Rfc3RhdGUpOw0KPiArDQo+ICsJaWYgKCFt c3Rfc3RhdGUtPnBibl9kaXYpDQo+ICsJCW1zdF9zdGF0ZS0+cGJuX2RpdiA9DQo+IGRtX21zdF9n ZXRfcGJuX2RpdmlkZXIoYWNvbm5lY3Rvci0+bXN0X3BvcnQtPmRjX2xpbmspOw0KPiArDQo+ICAJ aWYgKCFzdGF0ZS0+ZHVwbGljYXRlZCkgew0KPiAgCQlpbnQgbWF4X2JwYyA9IGNvbm5fc3RhdGUt Pm1heF9yZXF1ZXN0ZWRfYnBjOw0KPiAgCQlpc195NDIwID0gZHJtX21vZGVfaXNfNDIwX2Fsc28o JmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLA0KPiBhZGp1c3RlZF9tb2RlKSAmJg0KPiBAQCAtNzQw MiwxMSArNzQxMCwxMCBAQCBzdGF0aWMgaW50DQo+IGRtX2VuY29kZXJfaGVscGVyX2F0b21pY19j aGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsDQo+ICAJCWNsb2NrID0gYWRqdXN0ZWRf bW9kZS0+Y2xvY2s7DQo+ICAJCWRtX25ld19jb25uZWN0b3Jfc3RhdGUtPnBibiA9DQo+IGRybV9k cF9jYWxjX3Bibl9tb2RlKGNsb2NrLCBicHAsIGZhbHNlKTsNCj4gIAl9DQo+IC0JZG1fbmV3X2Nv bm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyA9DQo+IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Ns b3RzKHN0YXRlLA0KPiAtDQo+IG1zdF9tZ3IsDQo+IC0NCj4gbXN0X3BvcnQsDQo+IC0NCj4gZG1f bmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+cGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2RpdmlkZXIo YWNvbm5lY3Rvci0+ZGNfbGluaykpOw0KPiArDQo+ICsJZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+ dmNwaV9zbG90cyA9DQo+ICsJCWRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCBt c3RfbWdyLCBtc3RfcG9ydCwNCj4gKwkJCQkJICAgICAgZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+ cGJuKTsNCj4gIAlpZiAoZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyA8IDApIHsN Cj4gIAkJRFJNX0RFQlVHX0FUT01JQygiZmFpbGVkIGZpbmRpbmcgdmNwaSBzbG90czogJWRcbiIs DQo+IChpbnQpZG1fbmV3X2Nvbm5lY3Rvcl9zdGF0ZS0+dmNwaV9zbG90cyk7DQo+ICAJCXJldHVy biBkbV9uZXdfY29ubmVjdG9yX3N0YXRlLT52Y3BpX3Nsb3RzOw0KPiBAQCAtNzQ3NiwxOCArNzQ4 MywxMiBAQCBzdGF0aWMgaW50DQo+IGRtX3VwZGF0ZV9tc3RfdmNwaV9zbG90c19mb3JfZHNjKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCWRtX2Nvbm5fc3RhdGUtPnBibiA9 IHBibjsNCj4gIAkJCWRtX2Nvbm5fc3RhdGUtPnZjcGlfc2xvdHMgPSBzbG90X251bTsNCj4gDQo+ IC0JCQlkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLA0KPiAtCQkJCQkJICAgICBh Y29ubmVjdG9yLT5wb3J0LA0KPiAtCQkJCQkJICAgICBkbV9jb25uX3N0YXRlLT5wYm4sDQo+IC0J CQkJCQkgICAgIDAsDQo+ICsJCQlkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLCBh Y29ubmVjdG9yLQ0KPiA+cG9ydCwgZG1fY29ubl9zdGF0ZS0+cGJuLA0KPiAgCQkJCQkJICAgICBm YWxzZSk7DQo+ICAJCQljb250aW51ZTsNCj4gIAkJfQ0KPiANCj4gLQkJdmNwaSA9IGRybV9kcF9t c3RfYXRvbWljX2VuYWJsZV9kc2Moc3RhdGUsDQo+IC0JCQkJCQkgICAgYWNvbm5lY3Rvci0+cG9y dCwNCj4gLQkJCQkJCSAgICBwYm4sIHBibl9kaXYsDQo+IC0JCQkJCQkgICAgdHJ1ZSk7DQo+ICsJ CXZjcGkgPSBkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0YXRlLCBhY29ubmVjdG9yLQ0K PiA+cG9ydCwgcGJuLCB0cnVlKTsNCj4gIAkJaWYgKHZjcGkgPCAwKQ0KPiAgCQkJcmV0dXJuIHZj cGk7DQo+IA0KPiBAQCAtMTA5NDMsOCArMTA5NDQsNiBAQCBzdGF0aWMgaW50IGFtZGdwdV9kbV9h dG9taWNfY2hlY2soc3RydWN0DQo+IGRybV9kZXZpY2UgKmRldiwNCj4gIAlzdHJ1Y3QgZG1fY3J0 Y19zdGF0ZSAqZG1fb2xkX2NydGNfc3RhdGUsICpkbV9uZXdfY3J0Y19zdGF0ZTsNCj4gICNpZiBk ZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gIAlzdHJ1Y3QgZHNjX21zdF9mYWlybmVz c192YXJzIHZhcnNbTUFYX1BJUEVTXTsNCj4gLQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9z dGF0ZSAqbXN0X3N0YXRlOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy Ow0KPiAgI2VuZGlmDQo+IA0KPiAgCXRyYWNlX2FtZGdwdV9kbV9hdG9taWNfY2hlY2tfYmVnaW4o c3RhdGUpOw0KPiBAQCAtMTExODAsMzMgKzExMTc5LDYgQEAgc3RhdGljIGludCBhbWRncHVfZG1f YXRvbWljX2NoZWNrKHN0cnVjdA0KPiBkcm1fZGV2aWNlICpkZXYsDQo+ICAJCWxvY2tfYW5kX3Zh bGlkYXRpb25fbmVlZGVkID0gdHJ1ZTsNCj4gIAl9DQo+IA0KPiAtI2lmIGRlZmluZWQoQ09ORklH X0RSTV9BTURfRENfRENOKQ0KPiAtCS8qIHNldCB0aGUgc2xvdCBpbmZvIGZvciBlYWNoIG1zdF9z dGF0ZSBiYXNlZCBvbiB0aGUgbGluayBlbmNvZGluZw0KPiBmb3JtYXQgKi8NCj4gLQlmb3JfZWFj aF9uZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsNCj4gLQkJ c3RydWN0IGFtZGdwdV9kbV9jb25uZWN0b3IgKmFjb25uZWN0b3I7DQo+IC0JCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3I7DQo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRl ciBpdGVyOw0KPiAtCQl1OCBsaW5rX2NvZGluZ19jYXA7DQo+IC0NCj4gLQkJaWYgKCFtZ3ItPm1z dF9zdGF0ZSApDQo+IC0JCQljb250aW51ZTsNCj4gLQ0KPiAtCQlkcm1fY29ubmVjdG9yX2xpc3Rf aXRlcl9iZWdpbihkZXYsICZpdGVyKTsNCj4gLQkJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVy KGNvbm5lY3RvciwgJml0ZXIpIHsNCj4gLQkJCWludCBpZCA9IGNvbm5lY3Rvci0+aW5kZXg7DQo+ IC0NCj4gLQkJCWlmIChpZCA9PSBtc3Rfc3RhdGUtPm1nci0+Y29ubl9iYXNlX2lkKSB7DQo+IC0J CQkJYWNvbm5lY3RvciA9DQo+IHRvX2FtZGdwdV9kbV9jb25uZWN0b3IoY29ubmVjdG9yKTsNCj4g LQkJCQlsaW5rX2NvZGluZ19jYXAgPQ0KPiBkY19saW5rX2RwX21zdF9kZWNpZGVfbGlua19lbmNv ZGluZ19mb3JtYXQoYWNvbm5lY3Rvci0+ZGNfbGluayk7DQo+IC0JCQkJZHJtX2RwX21zdF91cGRh dGVfc2xvdHMobXN0X3N0YXRlLA0KPiBsaW5rX2NvZGluZ19jYXApOw0KPiAtDQo+IC0JCQkJYnJl YWs7DQo+IC0JCQl9DQo+IC0JCX0NCj4gLQkJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZp dGVyKTsNCj4gLQ0KPiAtCX0NCj4gLSNlbmRpZg0KPiAgCS8qKg0KPiAgCSAqIFN0cmVhbXMgYW5k IHBsYW5lcyBhcmUgcmVzZXQgd2hlbiB0aGVyZSBhcmUgY2hhbmdlcyB0aGF0IGFmZmVjdA0KPiAg CSAqIGJhbmR3aWR0aC4gQW55dGhpbmcgdGhhdCBhZmZlY3RzIGJhbmR3aWR0aCBuZWVkcyB0byBn byB0aHJvdWdoDQo+IGRpZmYgLS1naXQNCj4gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv YW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gaW5kZXggMWVhYWNhYjAzMzRi Li5mODQzZmQ4Njc4N2YgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9hbWRncHVfZG0vYW1kZ3B1X2RtX2hlbHBlcnMuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMNCj4gQEAgLTI3LDYgKzI3 LDcgQEANCj4gICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvaTJj Lmg+DQo+IA0KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+DQo+ICAjaW5jbHVkZSA8ZHJt L2RybV9wcm9iZV9oZWxwZXIuaD4NCj4gICNpbmNsdWRlIDxkcm0vYW1kZ3B1X2RybS5oPg0KPiAg I2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPg0KPiBAQCAtMTU0LDQwICsxNTUsMzIgQEAgZW51bSBk Y19lZGlkX3N0YXR1cw0KPiBkbV9oZWxwZXJzX3BhcnNlX2VkaWRfY2FwcygNCj4gIH0NCj4gDQo+ ICBzdGF0aWMgdm9pZA0KPiAtZmlsbF9kY19tc3RfcGF5bG9hZF90YWJsZV9mcm9tX2RybShzdHJ1 Y3QgYW1kZ3B1X2RtX2Nvbm5lY3Rvcg0KPiAqYWNvbm5lY3RvciwNCj4gLQkJCQkgICBzdHJ1Y3Qg ZGNfZHBfbXN0X3N0cmVhbV9hbGxvY2F0aW9uX3RhYmxlDQo+ICpwcm9wb3NlZF90YWJsZSkNCj4g K2ZpbGxfZGNfbXN0X3BheWxvYWRfdGFibGVfZnJvbV9kcm0oc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUNCj4gKm1zdF9zdGF0ZSwNCj4gKwkJCQkgICBzdHJ1Y3QgYW1kZ3B1X2RtX2Nv bm5lY3RvciAqYWNvbm5lY3RvciwNCj4gKwkJCQkgICBzdHJ1Y3QgZGNfZHBfbXN0X3N0cmVhbV9h bGxvY2F0aW9uX3RhYmxlDQo+ICp0YWJsZSkNCj4gIHsNCj4gKwlzdHJ1Y3QgZGNfZHBfbXN0X3N0 cmVhbV9hbGxvY2F0aW9uX3RhYmxlIG5ld190YWJsZSA9IHsgMCB9Ow0KPiArCXN0cnVjdCBkY19k cF9tc3Rfc3RyZWFtX2FsbG9jYXRpb24gKnNhOw0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21p Y19wYXlsb2FkICpwYXlsb2FkOw0KPiAgCWludCBpOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbXN0X21nciA9DQo+IC0JCQkmYWNvbm5lY3Rvci0+bXN0X3BvcnQtPm1zdF9t Z3I7DQo+IA0KPiAtCW11dGV4X2xvY2soJm1zdF9tZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0NCj4g LQlwcm9wb3NlZF90YWJsZS0+c3RyZWFtX2NvdW50ID0gMDsNCj4gLQ0KPiAtCS8qIG51bWJlciBv ZiBhY3RpdmUgc3RyZWFtcyAqLw0KPiAtCWZvciAoaSA9IDA7IGkgPCBtc3RfbWdyLT5tYXhfcGF5 bG9hZHM7IGkrKykgew0KPiAtCQlpZiAobXN0X21nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzID09 IDApDQo+IC0JCQlicmVhazsgLyogZW5kIG9mIHZjcF9pZCB0YWJsZSAqLw0KPiAtDQo+IC0JCUFT U0VSVChtc3RfbWdyLT5wYXlsb2Fkc1tpXS5wYXlsb2FkX3N0YXRlICE9DQo+IC0JCQkJRFBfUEFZ TE9BRF9ERUxFVEVfTE9DQUwpOw0KPiAtDQo+IC0JCWlmIChtc3RfbWdyLT5wYXlsb2Fkc1tpXS5w YXlsb2FkX3N0YXRlID09DQo+IERQX1BBWUxPQURfTE9DQUwgfHwNCj4gLQkJCW1zdF9tZ3ItPnBh eWxvYWRzW2ldLnBheWxvYWRfc3RhdGUgPT0NCj4gLQkJCQkJRFBfUEFZTE9BRF9SRU1PVEUpIHsN Cj4gLQ0KPiAtCQkJc3RydWN0IGRjX2RwX21zdF9zdHJlYW1fYWxsb2NhdGlvbiAqc2EgPQ0KPiAt CQkJCQkmcHJvcG9zZWRfdGFibGUtDQo+ID5zdHJlYW1fYWxsb2NhdGlvbnNbDQo+IC0JCQkJCQlw cm9wb3NlZF90YWJsZS0NCj4gPnN0cmVhbV9jb3VudF07DQo+IC0NCj4gLQkJCXNhLT5zbG90X2Nv dW50ID0gbXN0X21nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzOw0KPiAtCQkJc2EtPnZjcF9pZCA9 IG1zdF9tZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldLT52Y3BpOw0KPiAtCQkJcHJvcG9zZWRfdGFibGUt PnN0cmVhbV9jb3VudCsrOw0KPiAtCQl9DQo+ICsJLyogQ29weSBvdmVyIHBheWxvYWRzICovDQo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXlsb2FkLCAmbXN0X3N0YXRlLT5wYXlsb2FkcywgbmV4 dCkgew0KPiArCQlpZiAocGF5bG9hZC0+ZGVsZXRlKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4g KwkJc2EgPQ0KPiAmbmV3X3RhYmxlLnN0cmVhbV9hbGxvY2F0aW9uc1tuZXdfdGFibGUuc3RyZWFt X2NvdW50XTsNCj4gKwkJc2EtPnNsb3RfY291bnQgPSBwYXlsb2FkLT50aW1lX3Nsb3RzOw0KPiAr CQlzYS0+dmNwX2lkID0gcGF5bG9hZC0+dmNwaTsNCj4gKwkJc2EtPnBvcnQgPSBwYXlsb2FkLT5w b3J0Ow0KPiArCQlkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYyhzYS0+cG9ydCk7DQo+ICsJCW5l d190YWJsZS5zdHJlYW1fY291bnQrKzsNCj4gIAl9DQo+IA0KPiAtCW11dGV4X3VubG9jaygmbXN0 X21nci0+cGF5bG9hZF9sb2NrKTsNCj4gKwkvKiBSZWxlYXNlIHRoZSBvbGQgdGFibGUsIGFuZCBj b3B5IG92ZXIgdGhlIG5ldyBvbmUgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPnN0cmVh bV9jb3VudDsgaSsrKQ0KPiArCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyh0YWJsZS0NCj4g PnN0cmVhbV9hbGxvY2F0aW9uc1tpXS5wb3J0KTsNCj4gKwkqdGFibGUgPSBuZXdfdGFibGU7DQo+ ICB9DQo+IA0KPiAgdm9pZCBkbV9oZWxwZXJzX2RwX3VwZGF0ZV9icmFuY2hfaW5mbygNCj4gQEAg LTIwNSwxMSArMTk4LDkgQEAgYm9vbA0KPiBkbV9oZWxwZXJzX2RwX21zdF93cml0ZV9wYXlsb2Fk X2FsbG9jYXRpb25fdGFibGUoDQo+ICAJCWJvb2wgZW5hYmxlKQ0KPiAgew0KPiAgCXN0cnVjdCBh bWRncHVfZG1fY29ubmVjdG9yICphY29ubmVjdG9yOw0KPiAtCXN0cnVjdCBkbV9jb25uZWN0b3Jf c3RhdGUgKmRtX2Nvbm5fc3RhdGU7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgKm1zdF9zdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAqcGF5 bG9hZDsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1zdF9tZ3I7DQo+IC0J c3RydWN0IGRybV9kcF9tc3RfcG9ydCAqbXN0X3BvcnQ7DQo+IC0JYm9vbCByZXQ7DQo+IC0JdTgg bGlua19jb2RpbmdfY2FwID0gRFBfOGJfMTBiX0VOQ09ESU5HOw0KPiANCj4gIAlhY29ubmVjdG9y ID0gKHN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICopc3RyZWFtLQ0KPiA+ZG1fc3RyZWFtX2Nv bnRleHQ7DQo+ICAJLyogQWNjZXNzaW5nIHRoZSBjb25uZWN0b3Igc3RhdGUgaXMgcmVxdWlyZWQg Zm9yIHZjcGlfc2xvdHMgYWxsb2NhdGlvbg0KPiBAQCAtMjIwLDQwICsyMTEsMjEgQEAgYm9vbA0K PiBkbV9oZWxwZXJzX2RwX21zdF93cml0ZV9wYXlsb2FkX2FsbG9jYXRpb25fdGFibGUoDQo+ICAJ aWYgKCFhY29ubmVjdG9yIHx8ICFhY29ubmVjdG9yLT5tc3RfcG9ydCkNCj4gIAkJcmV0dXJuIGZh bHNlOw0KPiANCj4gLQlkbV9jb25uX3N0YXRlID0gdG9fZG1fY29ubmVjdG9yX3N0YXRlKGFjb25u ZWN0b3ItPmJhc2Uuc3RhdGUpOw0KPiAtDQo+ICAJbXN0X21nciA9ICZhY29ubmVjdG9yLT5tc3Rf cG9ydC0+bXN0X21ncjsNCj4gLQ0KPiAtCWlmICghbXN0X21nci0+bXN0X3N0YXRlKQ0KPiAtCQly ZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQltc3RfcG9ydCA9IGFjb25uZWN0b3ItPnBvcnQ7DQo+IC0N Cj4gLSNpZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gLQlsaW5rX2NvZGluZ19j YXAgPQ0KPiBkY19saW5rX2RwX21zdF9kZWNpZGVfbGlua19lbmNvZGluZ19mb3JtYXQoYWNvbm5l Y3Rvci0+ZGNfbGluayk7DQo+IC0jZW5kaWYNCj4gLQ0KPiAtCWlmIChlbmFibGUpIHsNCj4gLQ0K PiAtCQlyZXQgPSBkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkobXN0X21nciwgbXN0X3BvcnQsDQo+ IC0JCQkJCSAgICAgICBkbV9jb25uX3N0YXRlLT5wYm4sDQo+IC0JCQkJCSAgICAgICBkbV9jb25u X3N0YXRlLT52Y3BpX3Nsb3RzKTsNCj4gLQkJaWYgKCFyZXQpDQo+IC0JCQlyZXR1cm4gZmFsc2U7 DQo+IC0NCj4gLQl9IGVsc2Ugew0KPiAtCQlkcm1fZHBfbXN0X3Jlc2V0X3ZjcGlfc2xvdHMobXN0 X21nciwgbXN0X3BvcnQpOw0KPiAtCX0NCj4gKwltc3Rfc3RhdGUgPSB0b19kcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlKG1zdF9tZ3ItPmJhc2Uuc3RhdGUpOw0KPiANCj4gIAkvKiBJdCdzIE9LIGZv ciB0aGlzIHRvIGZhaWwgKi8NCj4gLQlkcm1fZHBfdXBkYXRlX3BheWxvYWRfcGFydDEobXN0X21n ciwgKGxpbmtfY29kaW5nX2NhcCA9PQ0KPiBEUF9DQVBfQU5TSV8xMjhCMTMyQikgPyAwOjEpOw0K PiArCXBheWxvYWQgPSBkcm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUs DQo+IGFjb25uZWN0b3ItPnBvcnQpOw0KPiArCWlmIChlbmFibGUpDQo+ICsJCWRybV9kcF9hZGRf cGF5bG9hZF9wYXJ0MShtc3RfbWdyLCBtc3Rfc3RhdGUsIHBheWxvYWQpOw0KPiArCWVsc2UNCj4g KwkJZHJtX2RwX3JlbW92ZV9wYXlsb2FkKG1zdF9tZ3IsIG1zdF9zdGF0ZSwgcGF5bG9hZCk7DQo+ IA0KPiAgCS8qIG1zdF9tZ3ItPi0+cGF5bG9hZHMgYXJlIFZDIHBheWxvYWQgbm90aWZ5IE1TVCBi cmFuY2ggdXNpbmcNCj4gRFBDRCBvcg0KPiAgCSAqIEFVWCBtZXNzYWdlLiBUaGUgc2VxdWVuY2Ug aXMgc2xvdCAxLTYzIGFsbG9jYXRlZCBzZXF1ZW5jZSBmb3INCj4gZWFjaA0KPiAgCSAqIHN0cmVh bS4gQU1EIEFTSUMgc3RyZWFtIHNsb3QgYWxsb2NhdGlvbiBzaG91bGQgZm9sbG93IHRoZSBzYW1l DQo+ICAJICogc2VxdWVuY2UuIGNvcHkgRFJNIE1TVCBhbGxvY2F0aW9uIHRvIGRjICovDQo+IC0N Cj4gLQlmaWxsX2RjX21zdF9wYXlsb2FkX3RhYmxlX2Zyb21fZHJtKGFjb25uZWN0b3IsIHByb3Bv c2VkX3RhYmxlKTsNCj4gKwlmaWxsX2RjX21zdF9wYXlsb2FkX3RhYmxlX2Zyb21fZHJtKG1zdF9z dGF0ZSwgYWNvbm5lY3RvciwNCj4gcHJvcG9zZWRfdGFibGUpOw0KPiANCj4gIAlyZXR1cm4gdHJ1 ZTsNCj4gIH0NCj4gQEAgLTMxMCwyNiArMjgyLDIzIEBAIGJvb2wNCj4gZG1faGVscGVyc19kcF9t c3Rfc2VuZF9wYXlsb2FkX2FsbG9jYXRpb24oDQo+ICAJCWJvb2wgZW5hYmxlKQ0KPiAgew0KPiAg CXN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICphY29ubmVjdG9yOw0KPiArCXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptc3RfbWdyOw0KPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKm1zdF9w b3J0Ow0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICpwYXlsb2FkOw0KPiAN Cj4gIAlhY29ubmVjdG9yID0gKHN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICopc3RyZWFtLQ0K PiA+ZG1fc3RyZWFtX2NvbnRleHQ7DQo+IA0KPiAgCWlmICghYWNvbm5lY3RvciB8fCAhYWNvbm5l Y3Rvci0+bXN0X3BvcnQpDQo+ICAJCXJldHVybiBmYWxzZTsNCj4gDQo+IC0JbXN0X3BvcnQgPSBh Y29ubmVjdG9yLT5wb3J0Ow0KPiAtDQo+ICAJbXN0X21nciA9ICZhY29ubmVjdG9yLT5tc3RfcG9y dC0+bXN0X21ncjsNCj4gLQ0KPiAtCWlmICghbXN0X21nci0+bXN0X3N0YXRlKQ0KPiAtCQlyZXR1 cm4gZmFsc2U7DQo+ICsJbXN0X3N0YXRlID0gdG9fZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSht c3RfbWdyLT5iYXNlLnN0YXRlKTsNCj4gDQo+ICAJLyogSXQncyBPSyBmb3IgdGhpcyB0byBmYWls ICovDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQyKG1zdF9tZ3IpOw0KPiAtDQo+IC0J aWYgKCFlbmFibGUpDQo+IC0JCWRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKG1zdF9tZ3IsIG1z dF9wb3J0KTsNCj4gKwlpZiAoZW5hYmxlKSB7DQo+ICsJCXBheWxvYWQgPSBkcm1fYXRvbWljX2dl dF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUsDQo+IGFjb25uZWN0b3ItPnBvcnQpOw0KPiAr CQlkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIobXN0X21nciwgbXN0X3N0YXRlLQ0KPiA+YmFzZS5z dGF0ZSwgcGF5bG9hZCk7DQo+ICsJfQ0KPiANCj4gIAlyZXR1cm4gdHJ1ZTsNCj4gIH0NCj4gZGlm ZiAtLWdpdA0KPiBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1 X2RtX21zdF90eXBlcy5jDQo+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9k bS9hbWRncHVfZG1fbXN0X3R5cGVzLmMNCj4gaW5kZXggYjQ0N2M0NTNiNThkLi4xOGRlNGE5OGRm NDAgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0v YW1kZ3B1X2RtX21zdF90eXBlcy5jDQo+ICsrKw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtX21zdF90eXBlcy5jDQo+IEBAIC01MDEsMTUgKzUwMSw4 IEBAIHZvaWQgYW1kZ3B1X2RtX2luaXRpYWxpemVfZHBfY29ubmVjdG9yKHN0cnVjdA0KPiBhbWRn cHVfZGlzcGxheV9tYW5hZ2VyICpkbSwNCj4gDQo+ICAJZGNfbGlua19kcF9nZXRfbWF4X2xpbmtf ZW5jX2NhcChhY29ubmVjdG9yLT5kY19saW5rLA0KPiAmbWF4X2xpbmtfZW5jX2NhcCk7DQo+ICAJ YWNvbm5lY3Rvci0+bXN0X21nci5jYnMgPSAmZG1fbXN0X2NiczsNCj4gLQlkcm1fZHBfbXN0X3Rv cG9sb2d5X21ncl9pbml0KA0KPiAtCQkmYWNvbm5lY3Rvci0+bXN0X21nciwNCj4gLQkJYWRldl90 b19kcm0oZG0tPmFkZXYpLA0KPiAtCQkmYWNvbm5lY3Rvci0+ZG1fZHBfYXV4LmF1eCwNCj4gLQkJ MTYsDQo+IC0JCTQsDQo+IC0JCW1heF9saW5rX2VuY19jYXAubGFuZV9jb3VudCwNCj4gLQ0KPiAJ ZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKG1heF9saW5rX2VuY19jYXAubGlua19yYXRlKSwN Cj4gLQkJYWNvbm5lY3Rvci0+Y29ubmVjdG9yX2lkKTsNCj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5 X21ncl9pbml0KCZhY29ubmVjdG9yLT5tc3RfbWdyLA0KPiBhZGV2X3RvX2RybShkbS0+YWRldiks DQo+ICsJCQkJICAgICAmYWNvbm5lY3Rvci0+ZG1fZHBfYXV4LmF1eCwgMTYsIDQsDQo+IGFjb25u ZWN0b3ItPmNvbm5lY3Rvcl9pZCk7DQo+IA0KPiAgCWRybV9jb25uZWN0b3JfYXR0YWNoX2RwX3N1 YmNvbm5lY3Rvcl9wcm9wZXJ0eSgmYWNvbm5lY3Rvci0NCj4gPmJhc2UpOw0KPiAgfQ0KPiBAQCAt NjE0LDYgKzYwNyw3IEBAIHN0YXRpYyBpbnQgYnBwX3gxNl9mcm9tX3BibihzdHJ1Y3QNCj4gZHNj X21zdF9mYWlybmVzc19wYXJhbXMgcGFyYW0sIGludCBwYm4pDQo+ICB9DQo+IA0KPiAgc3RhdGlj IHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ ICsJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ ICAJCQkgICAgIHN0cnVjdCBkY19saW5rICpkY19saW5rLA0KPiAgCQkJICAgICBzdHJ1Y3QgZHNj X21zdF9mYWlybmVzc19wYXJhbXMgKnBhcmFtcywNCj4gIAkJCSAgICAgc3RydWN0IGRzY19tc3Rf ZmFpcm5lc3NfdmFycyAqdmFycywNCj4gQEAgLTYyNiwxMiArNjIwLDkgQEAgc3RhdGljIHZvaWQg aW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJ aW50IG1pbl9pbml0aWFsX3NsYWNrOw0KPiAgCWludCBuZXh0X2luZGV4Ow0KPiAgCWludCByZW1h aW5pbmdfdG9faW5jcmVhc2UgPSAwOw0KPiAtCWludCBwYm5fcGVyX3RpbWVzbG90Ow0KPiAgCWlu dCBsaW5rX3RpbWVzbG90c191c2VkOw0KPiAgCWludCBmYWlyX3Bibl9hbGxvYzsNCj4gDQo+IC0J cGJuX3Blcl90aW1lc2xvdCA9IGRtX21zdF9nZXRfcGJuX2RpdmlkZXIoZGNfbGluayk7DQo+IC0N Cj4gIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgew0KPiAgCQlpZiAodmFyc1tpICsga10u ZHNjX2VuYWJsZWQpIHsNCj4gIAkJCWluaXRpYWxfc2xhY2tbaV0gPQ0KPiBAQCAtNjYyLDE3ICs2 NTMsMTcgQEAgc3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsDQo+ICAJCWxpbmtfdGltZXNsb3RzX3VzZWQgPSAwOw0KPiANCj4gIAkJ Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspDQo+IC0JCQlsaW5rX3RpbWVzbG90c191c2VkICs9 IERJVl9ST1VORF9VUCh2YXJzW2kgKw0KPiBrXS5wYm4sIHBibl9wZXJfdGltZXNsb3QpOw0KPiAr CQkJbGlua190aW1lc2xvdHNfdXNlZCArPSBESVZfUk9VTkRfVVAodmFyc1tpICsNCj4ga10ucGJu LCBtc3Rfc3RhdGUtPnBibl9kaXYpOw0KPiANCj4gLQkJZmFpcl9wYm5fYWxsb2MgPSAoNjMgLSBs aW5rX3RpbWVzbG90c191c2VkKSAvDQo+IHJlbWFpbmluZ190b19pbmNyZWFzZSAqIHBibl9wZXJf dGltZXNsb3Q7DQo+ICsJCWZhaXJfcGJuX2FsbG9jID0NCj4gKwkJCSg2MyAtIGxpbmtfdGltZXNs b3RzX3VzZWQpIC8gcmVtYWluaW5nX3RvX2luY3JlYXNlICoNCj4gbXN0X3N0YXRlLT5wYm5fZGl2 Ow0KPiANCj4gIAkJaWYgKGluaXRpYWxfc2xhY2tbbmV4dF9pbmRleF0gPiBmYWlyX3Bibl9hbGxv Yykgew0KPiAgCQkJdmFyc1tuZXh0X2luZGV4XS5wYm4gKz0gZmFpcl9wYm5fYWxsb2M7DQo+ICAJ CQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+IA0KPiBwYXJhbXNb bmV4dF9pbmRleF0ucG9ydC0+bWdyLA0KPiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQsDQo+ IC0NCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0JCQkJCQkJICBwYm5fcGVyX3RpbWVzbG90 KSA8DQo+IDApDQo+ICsNCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4pIDwgMCkNCj4gIAkJCQlyZXR1 cm47DQo+ICAJCQlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKSkgew0KPiAgCQkJ CXZhcnNbbmV4dF9pbmRleF0uYnBwX3gxNiA9DQo+IGJwcF94MTZfZnJvbV9wYm4ocGFyYW1zW25l eHRfaW5kZXhdLCB2YXJzW25leHRfaW5kZXhdLnBibik7DQo+IEBAIC02ODEsOCArNjcyLDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0K PiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5wb3J0LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IHBibl9wZXJf dGltZXNsb3QpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJ CQlyZXR1cm47DQo+ICAJCQl9DQo+ICAJCX0gZWxzZSB7DQo+IEBAIC02OTAsOCArNjgwLDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+ IA0KPiBwYXJhbXNbbmV4dF9pbmRleF0ucG9ydC0+bWdyLA0KPiANCj4gcGFyYW1zW25leHRfaW5k ZXhdLnBvcnQsDQo+IC0NCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0JCQkJCQkJICBwYm5f cGVyX3RpbWVzbG90KSA8DQo+IDApDQo+ICsNCj4gdmFyc1tuZXh0X2luZGV4XS5wYm4pIDwgMCkN Cj4gIAkJCQlyZXR1cm47DQo+ICAJCQlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRl KSkgew0KPiAgCQkJCXZhcnNbbmV4dF9pbmRleF0uYnBwX3gxNiA9DQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5id19yYW5nZS5tYXhfdGFyZ2V0X2JwcF94MTY7DQo+IEBAIC03MDAsOCArNjg5LDcgQEAg c3RhdGljIHZvaWQgaW5jcmVhc2VfZHNjX2JwcChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0K PiANCj4gcGFyYW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2lu ZGV4XS5wb3J0LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IHBibl9wZXJf dGltZXNsb3QpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJ CQlyZXR1cm47DQo+ICAJCQl9DQo+ICAJCX0NCj4gQEAgLTc1Nyw4ICs3NDUsNyBAQCBzdGF0aWMg dm9pZCB0cnlfZGlzYWJsZV9kc2Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUNCj4gKnN0YXRlLA0K PiAgCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+ICAJCQkJCQkg IHBhcmFtc1tuZXh0X2luZGV4XS5wb3J0LQ0KPiA+bWdyLA0KPiAgCQkJCQkJICBwYXJhbXNbbmV4 dF9pbmRleF0ucG9ydCwNCj4gLQkJCQkJCSAgdmFyc1tuZXh0X2luZGV4XS5wYm4sDQo+IC0NCj4g ZG1fbXN0X2dldF9wYm5fZGl2aWRlcihkY19saW5rKSkgPCAwKQ0KPiArCQkJCQkJICB2YXJzW25l eHRfaW5kZXhdLnBibikgPCAwKQ0KPiAgCQkJcmV0dXJuOw0KPiANCj4gIAkJaWYgKCFkcm1fZHBf bXN0X2F0b21pY19jaGVjayhzdGF0ZSkpIHsNCj4gQEAgLTc2OSw4ICs3NTYsNyBAQCBzdGF0aWMg dm9pZCB0cnlfZGlzYWJsZV9kc2Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUNCj4gKnN0YXRlLA0K PiAgCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0KPiANCj4gcGFy YW1zW25leHRfaW5kZXhdLnBvcnQtPm1nciwNCj4gDQo+IHBhcmFtc1tuZXh0X2luZGV4XS5wb3J0 LA0KPiAtDQo+IHZhcnNbbmV4dF9pbmRleF0ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2Rp dmlkZXIoZGNfbGluaykpIDwgMCkNCj4gKw0KPiB2YXJzW25leHRfaW5kZXhdLnBibikgPCAwKQ0K PiAgCQkJCXJldHVybjsNCj4gIAkJfQ0KPiANCj4gQEAgLTc4MywxNyArNzY5LDI3IEBAIHN0YXRp YyBib29sDQo+IGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkJICAgICBzdHJ1Y3QgZGNfc3RhdGUgKmRjX3N0YXRl LA0KPiAgCQkJCQkgICAgIHN0cnVjdCBkY19saW5rICpkY19saW5rLA0KPiAgCQkJCQkgICAgIHN0 cnVjdCBkc2NfbXN0X2ZhaXJuZXNzX3ZhcnMgKnZhcnMsDQo+ICsJCQkJCSAgICAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3IsDQo+ICAJCQkJCSAgICAgaW50ICpsaW5rX3Zh cnNfc3RhcnRfaW5kZXgpDQo+ICB7DQo+IC0JaW50IGksIGs7DQo+ICAJc3RydWN0IGRjX3N0cmVh bV9zdGF0ZSAqc3RyZWFtOw0KPiAgCXN0cnVjdCBkc2NfbXN0X2ZhaXJuZXNzX3BhcmFtcyBwYXJh bXNbTUFYX1BJUEVTXTsNCj4gIAlzdHJ1Y3QgYW1kZ3B1X2RtX2Nvbm5lY3RvciAqYWNvbm5lY3Rv cjsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4g ZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOw0KPiAgCWludCBj b3VudCA9IDA7DQo+ICsJaW50IGksIGs7DQo+ICAJYm9vbCBkZWJ1Z2ZzX292ZXJ3cml0ZSA9IGZh bHNlOw0KPiANCj4gIAltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7DQo+IA0KPiAr CWlmIChJU19FUlIobXN0X3N0YXRlKSkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJbXN0 X3N0YXRlLT5wYm5fZGl2ID0gZG1fbXN0X2dldF9wYm5fZGl2aWRlcihkY19saW5rKTsNCj4gKyNp ZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX0RDTikNCj4gKwlkcm1fZHBfbXN0X3VwZGF0ZV9z bG90cyhtc3Rfc3RhdGUsDQo+IGRjX2xpbmtfZHBfbXN0X2RlY2lkZV9saW5rX2VuY29kaW5nX2Zv cm1hdChkY19saW5rKSk7DQo+ICsjZW5kaWYNCj4gKw0KPiAgCS8qIFNldCB1cCBwYXJhbXMgKi8N Cj4gIAlmb3IgKGkgPSAwOyBpIDwgZGNfc3RhdGUtPnN0cmVhbV9jb3VudDsgaSsrKSB7DQo+ICAJ CXN0cnVjdCBkY19kc2NfcG9saWN5IGRzY19wb2xpY3kgPSB7MH07DQo+IEBAIC04NTIsMTEgKzg0 OCw4IEBAIHN0YXRpYyBib29sDQo+IGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJdmFyc1tpICsga10ucGJuID0NCj4g a2Jwc190b19wZWFrX3BibihwYXJhbXNbaV0uYndfcmFuZ2Uuc3RyZWFtX2ticHMpOw0KPiAgCQl2 YXJzW2kgKyBrXS5kc2NfZW5hYmxlZCA9IGZhbHNlOw0KPiAgCQl2YXJzW2kgKyBrXS5icHBfeDE2 ID0gMDsNCj4gLQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLA0KPiAt CQkJCQkJICBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiAtCQkJCQkJICBwYXJhbXNbaV0ucG9ydCwN Cj4gLQkJCQkJCSAgdmFyc1tpICsga10ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRfcGJuX2Rpdmlk ZXIoZGNfbGluaykpIDwgMCkNCj4gKwkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3Rz KHN0YXRlLCBwYXJhbXNbaV0ucG9ydC0NCj4gPm1nciwgcGFyYW1zW2ldLnBvcnQsDQo+ICsJCQkJ CQkgIHZhcnNbaSArIGtdLnBibikgPCAwKQ0KPiAgCQkJcmV0dXJuIGZhbHNlOw0KPiAgCX0NCj4g IAlpZiAoIWRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKSAmJiAhZGVidWdmc19vdmVyd3Jp dGUpIHsNCj4gQEAgLTg3MCwyMSArODYzLDE1IEBAIHN0YXRpYyBib29sDQo+IGNvbXB1dGVfbXN0 X2RzY19jb25maWdzX2Zvcl9saW5rKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4g IAkJCXZhcnNbaSArIGtdLnBibiA9DQo+IGticHNfdG9fcGVha19wYm4ocGFyYW1zW2ldLmJ3X3Jh bmdlLm1pbl9rYnBzKTsNCj4gIAkJCXZhcnNbaSArIGtdLmRzY19lbmFibGVkID0gdHJ1ZTsNCj4g IAkJCXZhcnNbaSArIGtdLmJwcF94MTYgPQ0KPiBwYXJhbXNbaV0uYndfcmFuZ2UubWluX3Rhcmdl dF9icHBfeDE2Ow0KPiAtCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRl LA0KPiAtCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQtPm1nciwNCj4gLQkJCQkJCQkgIHBhcmFtc1tp XS5wb3J0LA0KPiAtCQkJCQkJCSAgdmFyc1tpICsga10ucGJuLA0KPiAtDQo+IGRtX21zdF9nZXRf cGJuX2RpdmlkZXIoZGNfbGluaykpIDwgMCkNCj4gKwkJCWlmIChkcm1fZHBfYXRvbWljX2ZpbmRf dGltZV9zbG90cyhzdGF0ZSwNCj4gcGFyYW1zW2ldLnBvcnQtPm1nciwNCj4gKwkJCQkJCQkgIHBh cmFtc1tpXS5wb3J0LCB2YXJzW2kNCj4gKyBrXS5wYm4pIDwgMCkNCj4gIAkJCQlyZXR1cm4gZmFs c2U7DQo+ICAJCX0gZWxzZSB7DQo+ICAJCQl2YXJzW2kgKyBrXS5wYm4gPQ0KPiBrYnBzX3RvX3Bl YWtfcGJuKHBhcmFtc1tpXS5id19yYW5nZS5zdHJlYW1fa2Jwcyk7DQo+ICAJCQl2YXJzW2kgKyBr XS5kc2NfZW5hYmxlZCA9IGZhbHNlOw0KPiAgCQkJdmFyc1tpICsga10uYnBwX3gxNiA9IDA7DQo+ IC0JCQlpZiAoZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsDQo+IC0JCQkJCQkJ ICBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiAtCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQsDQo+IC0J CQkJCQkJICB2YXJzW2kgKyBrXS5wYm4sDQo+IC0NCj4gZG1fbXN0X2dldF9wYm5fZGl2aWRlcihk Y19saW5rKSkgPCAwKQ0KPiArCQkJaWYgKGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0 YXRlLA0KPiBwYXJhbXNbaV0ucG9ydC0+bWdyLA0KPiArCQkJCQkJCSAgcGFyYW1zW2ldLnBvcnQs IHZhcnNbaQ0KPiArIGtdLnBibikgPCAwKQ0KPiAgCQkJCXJldHVybiBmYWxzZTsNCj4gIAkJfQ0K PiAgCX0NCj4gQEAgLTg5Miw3ICs4NzksNyBAQCBzdGF0aWMgYm9vbCBjb21wdXRlX21zdF9kc2Nf Y29uZmlnc19mb3JfbGluayhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJ CXJldHVybiBmYWxzZTsNCj4gDQo+ICAJLyogT3B0aW1pemUgZGVncmVlIG9mIGNvbXByZXNzaW9u ICovDQo+IC0JaW5jcmVhc2VfZHNjX2JwcChzdGF0ZSwgZGNfbGluaywgcGFyYW1zLCB2YXJzLCBj b3VudCwgayk7DQo+ICsJaW5jcmVhc2VfZHNjX2JwcChzdGF0ZSwgbXN0X3N0YXRlLCBkY19saW5r LCBwYXJhbXMsIHZhcnMsIGNvdW50LCBrKTsNCj4gDQo+ICAJdHJ5X2Rpc2FibGVfZHNjKHN0YXRl LCBkY19saW5rLCBwYXJhbXMsIHZhcnMsIGNvdW50LCBrKTsNCj4gDQo+IEBAIC0xMDM2LDkgKzEw MjMsOSBAQCBib29sIGNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9zdGF0ZShzdHJ1Y3QNCj4g ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJCQljb250aW51ZTsNCj4gDQo+ICAJCW11dGV4 X2xvY2soJmFjb25uZWN0b3ItPm1zdF9tZ3IubG9jayk7DQo+IC0JCWlmICghY29tcHV0ZV9tc3Rf ZHNjX2NvbmZpZ3NfZm9yX2xpbmsoc3RhdGUsIGRjX3N0YXRlLA0KPiBzdHJlYW0tPmxpbmssDQo+ IC0JCQl2YXJzLCAmbGlua192YXJzX3N0YXJ0X2luZGV4KSkgew0KPiAtCQkJbXV0ZXhfdW5sb2Nr KCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiArCQlpZiAoIWNvbXB1dGVfbXN0X2RzY19j b25maWdzX2Zvcl9saW5rKHN0YXRlLCBkY19zdGF0ZSwNCj4gc3RyZWFtLT5saW5rLCB2YXJzLA0K PiArCQkJCQkJICAgICAgJmFjb25uZWN0b3ItPm1zdF9tZ3IsDQo+ICsJCQkJCQkgICAgICAmbGlu a192YXJzX3N0YXJ0X2luZGV4KSkgew0KDQpTaG91bGQgc3RpbGwga2VlcCAibXV0ZXhfdW5sb2Nr KCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOyIgaGVyZS4NCg0KPiAgCQkJcmV0dXJuIGZhbHNl Ow0KPiAgCQl9DQo+ICAJCW11dGV4X3VubG9jaygmYWNvbm5lY3Rvci0+bXN0X21nci5sb2NrKTsN Cj4gQEAgLTEwOTUsMTAgKzEwODIsOCBAQCBzdGF0aWMgYm9vbA0KPiAgCQkJY29udGludWU7DQo+ IA0KPiAgCQltdXRleF9sb2NrKCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiAtCQlpZiAo IWNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0YXRlLA0KPiAtCQkJCQkJICAgICAg ZGNfc3RhdGUsDQo+IC0JCQkJCQkgICAgICBzdHJlYW0tPmxpbmssDQo+IC0JCQkJCQkgICAgICB2 YXJzLA0KPiArCQlpZiAoIWNvbXB1dGVfbXN0X2RzY19jb25maWdzX2Zvcl9saW5rKHN0YXRlLCBk Y19zdGF0ZSwNCj4gc3RyZWFtLT5saW5rLCB2YXJzLA0KPiArCQkJCQkJICAgICAgJmFjb25uZWN0 b3ItPm1zdF9tZ3IsDQo+ICAJCQkJCQkgICAgICAmbGlua192YXJzX3N0YXJ0X2luZGV4KSkgew0K PiAgCQkJbXV0ZXhfdW5sb2NrKCZhY29ubmVjdG9yLT5tc3RfbWdyLmxvY2spOw0KPiAgCQkJcmV0 dXJuIGZhbHNlOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvaW5jbHVkZS9saW5rX3NlcnZpY2VfdHlwZXMuaA0KPiBpbmRleCA5MWJmZmM1YmY1MmMuLjE0 M2JhYWI1NGI0MSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2luY2x1ZGUvbGlua19zZXJ2aWNlX3R5cGVzLmgNCj4gQEAgLTI1MCwxMiArMjUwLDE5 IEBAIHVuaW9uIGRwY2RfdHJhaW5pbmdfbGFuZV9zZXQgew0KPiAgICogX09OTFlfIGJlIGZpbGxl ZCBvdXQgZnJvbSBETSBhbmQgdGhlbiBwYXNzZWQgdG8gREMsIGRvIE5PVCB1c2UgdGhlc2UNCj4g Zm9yIF9hbnlfIGtpbmQgb2YgYXRvbWljDQo+ICAgKiBzdGF0ZSBjYWxjdWxhdGlvbnMgaW4gRE0s IG9yIHlvdSB3aWxsIGJyZWFrIHNvbWV0aGluZy4NCj4gICAqLw0KPiArDQo+ICtzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0Ow0KPiArDQo+ICAvKiBEUCBNU1Qgc3RyZWFtIGFsbG9jYXRpb24gKHBheWxv YWQgYmFuZHdpZHRoIG51bWJlcikgKi8NCj4gIHN0cnVjdCBkY19kcF9tc3Rfc3RyZWFtX2FsbG9j YXRpb24gew0KPiAgCXVpbnQ4X3QgdmNwX2lkOw0KPiAgCS8qIG51bWJlciBvZiBzbG90cyByZXF1 aXJlZCBmb3IgdGhlIERQIHN0cmVhbSBpbg0KPiAgCSAqIHRyYW5zcG9ydCBwYWNrZXQgKi8NCj4g IAl1aW50OF90IHNsb3RfY291bnQ7DQo+ICsJLyogVGhlIE1TVCBwb3J0IHRoaXMgaXMgb24sIHRo aXMgaXMgdXNlZCB0byBhc3NvY2lhdGUgREMgTVNUIHBheWxvYWRzDQo+IHdpdGggdGhlaXINCj4g KwkgKiByZXNwZWN0aXZlIERSTSBwYXlsb2FkcyBhbGxvY2F0aW9ucywgYW5kIGNhbiBiZSBpZ25v cmVkIG9uIG5vbi0NCj4gTGludXguDQo+ICsJICovDQoNCklzIGl0IG5lY2Vzc2FyeSBmb3IgYWRk aW5nIHRoaXMgbmV3IG1lbWJlcj8gU2luY2UgdGhpcyBpcyBmb3Igc2V0dGluZyB0aGUgREMNCkhX IGFuZCBub3QgcmVsYXRpbmcgdG8gZHJtLg0KDQo+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAq cG9ydDsNCj4gIH07DQo+IA0KPiAgLyogRFAgTVNUIHN0cmVhbSBhbGxvY2F0aW9uIHRhYmxlICov DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9s b2d5LmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMN Cj4gaW5kZXggMTBkMjZhN2UwMjhjLi5kOGUzMjI2OTU4NWIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYw0KPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMNCj4gQEAgLTY3LDggKzY3LDcg QEAgc3RhdGljIGJvb2wgZHVtcF9kcF9wYXlsb2FkX3RhYmxlKHN0cnVjdA0KPiBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF90b3BvbG9neV9w dXRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0DQo+ICpwb3J0KTsNCj4gDQo+ICBzdGF0aWMg aW50IGRybV9kcF9kcGNkX3dyaXRlX3BheWxvYWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyDQo+ICptZ3IsDQo+IC0JCQkJICAgICBpbnQgaWQsDQo+IC0JCQkJICAgICBzdHJ1Y3QgZHJt X2RwX3BheWxvYWQgKnBheWxvYWQpOw0KPiArCQkJCSAgICAgaW50IGlkLCB1OCBzdGFydF9zbG90 LCB1OCBudW1fc2xvdHMpOw0KPiANCj4gIHN0YXRpYyBpbnQgZHJtX2RwX3NlbmRfZHBjZF9yZWFk KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgCQkJCSBzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0ICpwb3J0LA0KPiBAQCAtMTIzNCw1NyArMTIzMyw2IEBAIGJ1aWxkX3F1ZXJ5 X3N0cmVhbV9lbmNfc3RhdHVzKHN0cnVjdA0KPiBkcm1fZHBfc2lkZWJhbmRfbXNnX3R4ICptc2cs IHU4IHN0cmVhbV9pZCwNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgaW50IGRy bV9kcF9tc3RfYXNzaWduX3BheWxvYWRfaWQoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsDQo+IC0JCQkJCXN0cnVjdCBkcm1fZHBfdmNwaSAqdmNwaSkNCj4gLXsNCj4gLQlp bnQgcmV0LCB2Y3BpX3JldDsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2Nr KTsNCj4gLQlyZXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZtZ3ItPnBheWxvYWRfbWFzaywgbWdy LT5tYXhfcGF5bG9hZHMNCj4gKyAxKTsNCj4gLQlpZiAocmV0ID4gbWdyLT5tYXhfcGF5bG9hZHMp IHsNCj4gLQkJcmV0ID0gLUVJTlZBTDsNCj4gLQkJZHJtX2RiZ19rbXMobWdyLT5kZXYsICJvdXQg b2YgcGF5bG9hZCBpZHMgJWRcbiIsIHJldCk7DQo+IC0JCWdvdG8gb3V0X3VubG9jazsNCj4gLQl9 DQo+IC0NCj4gLQl2Y3BpX3JldCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJm1nci0+dmNwaV9tYXNr LCBtZ3ItDQo+ID5tYXhfcGF5bG9hZHMgKyAxKTsNCj4gLQlpZiAodmNwaV9yZXQgPiBtZ3ItPm1h eF9wYXlsb2Fkcykgew0KPiAtCQlyZXQgPSAtRUlOVkFMOw0KPiAtCQlkcm1fZGJnX2ttcyhtZ3It PmRldiwgIm91dCBvZiB2Y3BpIGlkcyAlZFxuIiwgcmV0KTsNCj4gLQkJZ290byBvdXRfdW5sb2Nr Ow0KPiAtCX0NCj4gLQ0KPiAtCXNldF9iaXQocmV0LCAmbWdyLT5wYXlsb2FkX21hc2spOw0KPiAt CXNldF9iaXQodmNwaV9yZXQsICZtZ3ItPnZjcGlfbWFzayk7DQo+IC0JdmNwaS0+dmNwaSA9IHZj cGlfcmV0ICsgMTsNCj4gLQltZ3ItPnByb3Bvc2VkX3ZjcGlzW3JldCAtIDFdID0gdmNwaTsNCj4g LW91dF91bmxvY2s6DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0J cmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgZHJtX2RwX21zdF9wdXRfcGF5 bG9hZF9pZChzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3INCj4gKm1nciwNCj4gLQkJCQkg ICAgICBpbnQgdmNwaSkNCj4gLXsNCj4gLQlpbnQgaTsNCj4gLQ0KPiAtCWlmICh2Y3BpID09IDAp DQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsN Cj4gLQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgInB1dHRpbmcgcGF5bG9hZCAlZFxuIiwgdmNwaSk7 DQo+IC0JY2xlYXJfYml0KHZjcGkgLSAxLCAmbWdyLT52Y3BpX21hc2spOw0KPiAtDQo+IC0JZm9y IChpID0gMDsgaSA8IG1nci0+bWF4X3BheWxvYWRzOyBpKyspIHsNCj4gLQkJaWYgKG1nci0+cHJv cG9zZWRfdmNwaXNbaV0gJiYNCj4gLQkJICAgIG1nci0+cHJvcG9zZWRfdmNwaXNbaV0tPnZjcGkg PT0gdmNwaSkgew0KPiAtCQkJbWdyLT5wcm9wb3NlZF92Y3Bpc1tpXSA9IE5VTEw7DQo+IC0JCQlj bGVhcl9iaXQoaSArIDEsICZtZ3ItPnBheWxvYWRfbWFzayk7DQo+IC0JCX0NCj4gLQl9DQo+IC0J bXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyBi b29sIGNoZWNrX3R4bXNnX3N0YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LA0KPiAgCQkJICAgICAgc3RydWN0IGRybV9kcF9zaWRlYmFuZF9tc2dfdHggKnR4bXNnKQ0KPiAg ew0KPiBAQCAtMTczNyw3ICsxNjg1LDcgQEAgZHJtX2RwX21zdF9kdW1wX3BvcnRfdG9wb2xvZ3lf aGlzdG9yeShzdHJ1Y3QNCj4gZHJtX2RwX21zdF9wb3J0ICpwb3J0KSB7fQ0KPiAgI2RlZmluZSBz YXZlX3BvcnRfdG9wb2xvZ3lfcmVmKHBvcnQsIHR5cGUpDQo+ICAjZW5kaWYNCj4gDQo+IC1zdGF0 aWMgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKg0KPiArc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKg0KPiAgZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUo c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUNCj4gKnN0YXRlLA0KPiAgCQkJCSBzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQ0KPiAgew0KPiBAQCAtMTc0OSw2ICsxNjk3LDcgQEAg ZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUgKnN0YXRlLA0KPiANCj4gIAlyZXR1cm4gTlVMTDsNCj4gIH0NCj4gK0VYUE9S VF9TWU1CT0woZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUpOw0KPiANCj4gIHN0YXRp YyB2b2lkIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVm KQ0KPiAgew0KPiBAQCAtMzI3Miw2ICszMjIxLDggQEAgaW50DQo+IGRybV9kcF9zZW5kX3F1ZXJ5 X3N0cmVhbV9lbmNfc3RhdHVzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LA0KPiAgCQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAgCQlzdHJ1Y3QgZHJtX2Rw X3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVzX2Fja19yZXBseSAqc3RhdHVzKQ0KPiAgew0KPiArCXN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZDsNCj4gIAlzdHJ1Y3QgZHJtX2RwX3NpZGViYW5k X21zZ190eCAqdHhtc2c7DQo+ICAJdTggbm9uY2VbN107DQo+ICAJaW50IHJldDsNCj4gQEAgLTMy ODgsNiArMzIzOSwxMCBAQCBpbnQNCj4gZHJtX2RwX3NlbmRfcXVlcnlfc3RyZWFtX2VuY19zdGF0 dXMoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+IA0KPiAgCWdldF9y YW5kb21fYnl0ZXMobm9uY2UsIHNpemVvZihub25jZSkpOw0KPiANCj4gKwlkcm1fbW9kZXNldF9s b2NrKCZtZ3ItPmJhc2UubG9jaywgTlVMTCk7DQo+ICsJc3RhdGUgPSB0b19kcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlKG1nci0+YmFzZS5zdGF0ZSk7DQo+ICsJcGF5bG9hZCA9IGRybV9hdG9taWNf Z2V0X21zdF9wYXlsb2FkX3N0YXRlKHN0YXRlLCBwb3J0KTsNCj4gKw0KPiAgCS8qDQo+ICAJICog IlNvdXJjZSBkZXZpY2UgdGFyZ2V0cyB0aGUgUVVFUllfU1RSRUFNX0VOQ1JZUFRJT05fU1RBVFVT DQo+IG1lc3NhZ2UNCj4gIAkgKiAgdHJhbnNhY3Rpb24gYXQgdGhlIE1TVCBCcmFuY2ggZGV2aWNl IGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUNCj4gQEAgLTMyOTUsNyArMzI1MCw3IEBAIGludA0K PiBkcm1fZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyhzdHJ1Y3QNCj4gZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwNCj4gIAkgKi8NCj4gIAl0eG1zZy0+ZHN0ID0gbWdyLT5tc3Rf cHJpbWFyeTsNCj4gDQo+IC0JYnVpbGRfcXVlcnlfc3RyZWFtX2VuY19zdGF0dXModHhtc2csIHBv cnQtPnZjcGkudmNwaSwgbm9uY2UpOw0KPiArCWJ1aWxkX3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVz KHR4bXNnLCBwYXlsb2FkLT52Y3BpLCBub25jZSk7DQo+IA0KPiAgCWRybV9kcF9xdWV1ZV9kb3du X3R4KG1nciwgdHhtc2cpOw0KPiANCj4gQEAgLTMzMTIsNiArMzI2Nyw3IEBAIGludA0KPiBkcm1f ZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyhzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwNCj4gIAltZW1jcHkoc3RhdHVzLCAmdHhtc2ctPnJlcGx5LnUuZW5jX3N0 YXR1cywgc2l6ZW9mKCpzdGF0dXMpKTsNCj4gDQo+ICBvdXQ6DQo+ICsJZHJtX21vZGVzZXRfdW5s b2NrKCZtZ3ItPmJhc2UubG9jayk7DQo+ICAJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChw b3J0KTsNCj4gIG91dF9nZXRfcG9ydDoNCj4gIAlrZnJlZSh0eG1zZyk7DQo+IEBAIC0zMzIwLDIx OSArMzI3NiwxNjEgQEAgaW50DQo+IGRybV9kcF9zZW5kX3F1ZXJ5X3N0cmVhbV9lbmNfc3RhdHVz KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAgRVhQT1JUX1NZTUJP TChkcm1fZHBfc2VuZF9xdWVyeV9zdHJlYW1fZW5jX3N0YXR1cyk7DQo+IA0KPiAgc3RhdGljIGlu dCBkcm1fZHBfY3JlYXRlX3BheWxvYWRfc3RlcDEoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyDQo+ICptZ3IsDQo+IC0JCQkJICAgICAgIGludCBpZCwNCj4gLQkJCQkgICAgICAgc3RydWN0 IGRybV9kcF9wYXlsb2FkICpwYXlsb2FkKQ0KPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21z dF9hdG9taWNfcGF5bG9hZA0KPiAqcGF5bG9hZCkNCj4gIHsNCj4gLQlpbnQgcmV0Ow0KPiAtDQo+ IC0JcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGVfcGF5bG9hZChtZ3IsIGlkLCBwYXlsb2FkKTsNCj4g LQlpZiAocmV0IDwgMCkgew0KPiAtCQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRlID0gMDsNCj4gLQkJ cmV0dXJuIHJldDsNCj4gLQl9DQo+IC0JcGF5bG9hZC0+cGF5bG9hZF9zdGF0ZSA9IERQX1BBWUxP QURfTE9DQUw7DQo+IC0JcmV0dXJuIDA7DQo+ICsJcmV0dXJuIGRybV9kcF9kcGNkX3dyaXRlX3Bh eWxvYWQobWdyLCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0KPiA+dmNfc3RhcnRfc2xvdCwNCj4g KwkJCQkJIHBheWxvYWQtPnRpbWVfc2xvdHMpOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgZHJt X2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAyKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncg0K PiAqbWdyLA0KPiAtCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAt CQkJCSAgICAgICBpbnQgaWQsDQo+IC0JCQkJICAgICAgIHN0cnVjdCBkcm1fZHBfcGF5bG9hZCAq cGF5bG9hZCkNCj4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQN Cj4gKnBheWxvYWQpDQo+ICB7DQo+ICAJaW50IHJldDsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0ID0NCj4gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQobWdy LCBwYXlsb2FkLT5wb3J0KTsNCj4gDQo+IC0JcmV0ID0gZHJtX2RwX3BheWxvYWRfc2VuZF9tc2co bWdyLCBwb3J0LCBpZCwgcG9ydC0+dmNwaS5wYm4pOw0KPiAtCWlmIChyZXQgPCAwKQ0KPiAtCQly ZXR1cm4gcmV0Ow0KPiAtCXBheWxvYWQtPnBheWxvYWRfc3RhdGUgPSBEUF9QQVlMT0FEX1JFTU9U RTsNCj4gKwlpZiAoIXBvcnQpDQo+ICsJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJcmV0ID0gZHJt X2RwX3BheWxvYWRfc2VuZF9tc2cobWdyLCBwb3J0LCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0K PiA+cGJuKTsNCj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOw0KPiAgCXJl dHVybiByZXQ7DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBkcm1fZHBfZGVzdHJveV9wYXlsb2Fk X3N0ZXAxKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCQlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LA0KPiAtCQkJCQlpbnQgaWQsDQo+IC0JCQkJCXN0 cnVjdCBkcm1fZHBfcGF5bG9hZCAqcGF5bG9hZCkNCj4gKwkJCQkJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUNCj4gKm1zdF9zdGF0ZSwNCj4gKwkJCQkJc3RydWN0IGRybV9kcF9tc3Rf YXRvbWljX3BheWxvYWQNCj4gKnBheWxvYWQpDQo+ICB7DQo+ICsNCj4gIAlkcm1fZGJnX2ttcyht Z3ItPmRldiwgIlxuIik7DQo+IC0JLyogaXQncyBva2F5IGZvciB0aGVzZSB0byBmYWlsICovDQo+ IC0JaWYgKHBvcnQpIHsNCj4gLQkJZHJtX2RwX3BheWxvYWRfc2VuZF9tc2cobWdyLCBwb3J0LCBp ZCwgMCk7DQo+IC0JfQ0KPiANCj4gLQlkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKG1nciwgaWQs IHBheWxvYWQpOw0KPiAtCXBheWxvYWQtPnBheWxvYWRfc3RhdGUgPSBEUF9QQVlMT0FEX0RFTEVU RV9MT0NBTDsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gKwkvKiBpdCdzIG9rYXkgZm9yIHRoZXNl IHRvIGZhaWwgKi8NCj4gKwlkcm1fZHBfcGF5bG9hZF9zZW5kX21zZyhtZ3IsIHBheWxvYWQtPnBv cnQsIHBheWxvYWQtPnZjcGksIDApOw0KPiArCWRybV9kcF9kcGNkX3dyaXRlX3BheWxvYWQobWdy LCBwYXlsb2FkLT52Y3BpLCBwYXlsb2FkLQ0KPiA+dmNfc3RhcnRfc2xvdCwgMCk7DQo+IA0KPiAt c3RhdGljIGludCBkcm1fZHBfZGVzdHJveV9wYXlsb2FkX3N0ZXAyKHN0cnVjdA0KPiBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCQlpbnQgaWQsDQo+IC0JCQkJCXN0cnVjdCBk cm1fZHBfcGF5bG9hZCAqcGF5bG9hZCkNCj4gLXsNCj4gLQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRl ID0gMDsNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+ICAvKioNCj4gLSAqIGRybV9kcF91cGRh dGVfcGF5bG9hZF9wYXJ0MSgpIC0gRXhlY3V0ZSBwYXlsb2FkIHVwZGF0ZSBwYXJ0IDENCj4gLSAq IEBtZ3I6IG1hbmFnZXIgdG8gdXNlLg0KPiAtICogQHN0YXJ0X3Nsb3Q6IHRoaXMgaXMgdGhlIGN1 ciBzbG90DQo+ICsgKiBkcm1fZHBfYWRkX3BheWxvYWRfcGFydDEoKSAtIEV4ZWN1dGUgcGF5bG9h ZCB1cGRhdGUgcGFydCAxDQo+ICsgKiBAbWdyOiBNYW5hZ2VyIHRvIHVzZS4NCj4gKyAqIEBtc3Rf c3RhdGU6IFRoZSBNU1QgYXRvbWljIHN0YXRlDQo+ICsgKiBAcGF5bG9hZDogVGhlIHBheWxvYWQg dG8gd3JpdGUNCj4gICAqDQo+IC0gKiBOT1RFOiBzdGFydF9zbG90IGlzIGEgdGVtcG9yYXJ5IHdv cmthcm91bmQgZm9yIG5vbi1hdG9taWMgZHJpdmVycywNCj4gLSAqIHRoaXMgd2lsbCBiZSByZW1v dmVkIHdoZW4gbm9uLWF0b21pYyBtc3QgaGVscGVycyBhcmUgbW92ZWQgb3V0IG9mIHRoZQ0KPiBo ZWxwZXINCj4gKyAqIERldGVybWluZXMgdGhlIHN0YXJ0aW5nIHRpbWUgc2xvdCBmb3IgdGhlIGdp dmVuIHBheWxvYWQsIGFuZCBwcm9ncmFtcyB0aGUNCj4gVkNQSSBmb3IgdGhpcyBwYXlsb2FkDQo+ ICsgKiBpbnRvIGhhcmR3YXJlLg0KPiAgICoNCj4gLSAqIFRoaXMgaXRlcmF0ZXMgb3ZlciBhbGwg cHJvcG9zZWQgdmlydHVhbCBjaGFubmVscywgYW5kIHRyaWVzIHRvDQo+IC0gKiBhbGxvY2F0ZSBz cGFjZSBpbiB0aGUgbGluayBmb3IgdGhlbS4gRm9yIDAtPnNsb3RzIHRyYW5zaXRpb25zLA0KPiAt ICogdGhpcyBzdGVwIGp1c3Qgd3JpdGVzIHRoZSBWQ1BJIHRvIHRoZSBNU1QgZGV2aWNlLiBGb3Ig c2xvdHMtPjANCj4gLSAqIHRyYW5zaXRpb25zLCB0aGlzIHdyaXRlcyB0aGUgdXBkYXRlZCBWQ1BJ cyBhbmQgcmVtb3ZlcyB0aGUNCj4gLSAqIHJlbW90ZSBWQyBwYXlsb2Fkcy4NCj4gKyAqIEFmdGVy IGNhbGxpbmcgdGhpcywgdGhlIGRyaXZlciBzaG91bGQgZ2VuZXJhdGUgQUNUIGFuZCBwYXlsb2Fk IHBhY2tldHMuDQo+IE5vdGUgdGhhdCB0aGUgZHJpdmVyIG1heQ0KPiArICogZ2VuZXJhdGUgQUNU IG9uY2UgcGVyIHBheWxvYWQgY2hhbmdlLCBvciBvbmx5IG9uY2UgYWZ0ZXIgYWxsIG5ldw0KPiBw YXlsb2FkcyBpbiBhIGdpdmVuIGF0b21pYyBzdGF0ZQ0KPiArICogaGF2ZSBiZWVuIGFkZGVkLg0K PiAgICoNCj4gLSAqIGFmdGVyIGNhbGxpbmcgdGhpcyB0aGUgZHJpdmVyIHNob3VsZCBnZW5lcmF0 ZSBBQ1QgYW5kIHBheWxvYWQNCj4gLSAqIHBhY2tldHMuDQo+ICsgKiBSZXR1cm5zOiAwIG9uIHN1 Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZS4gSW4gdGhlIGV2ZW50IHRoYXQgdGhpcyBmYWls cywNCj4gKyAqIEBwYXlsb2FkLnZjX3N0YXJ0X3Nsb3Qgd2lsbCBhbHNvIGJlIHNldCB0byAtMS4N Cj4gICAqLw0KPiAtaW50IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3INCj4gKm1nciwgaW50IHN0YXJ0X3Nsb3QpDQo+ICtpbnQgZHJtX2Rw X2FkZF9wYXlsb2FkX3BhcnQxKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0K PiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlLA0K PiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZCkNCj4g IHsNCj4gLQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgcmVxX3BheWxvYWQ7DQo+ICAJc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqcG9ydDsNCj4gLQlpbnQgaSwgajsNCj4gLQlpbnQgY3VyX3Nsb3RzID0g c3RhcnRfc2xvdDsNCj4gLQ0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4g LQlmb3IgKGkgPSAwOyBpIDwgbWdyLT5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAtCQlzdHJ1Y3Qg ZHJtX2RwX3ZjcGkgKnZjcGkgPSBtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldOw0KPiAtCQlzdHJ1Y3Qg ZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPSAmbWdyLT5wYXlsb2Fkc1tpXTsNCj4gLQkJYm9vbCBw dXRfcG9ydCA9IGZhbHNlOw0KPiAtDQo+IC0JCS8qIHNvbHZlIHRoZSBjdXJyZW50IHBheWxvYWRz IC0gY29tcGFyZSB0byB0aGUgaHcgb25lcw0KPiAtCQkgICAtIHVwZGF0ZSB0aGUgaHcgdmlldyAq Lw0KPiAtCQlyZXFfcGF5bG9hZC5zdGFydF9zbG90ID0gY3VyX3Nsb3RzOw0KPiAtCQlpZiAodmNw aSkgew0KPiAtCQkJcG9ydCA9IGNvbnRhaW5lcl9vZih2Y3BpLCBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0LA0KPiAtCQkJCQkgICAgdmNwaSk7DQo+IC0NCj4gLQkJCS8qIFZhbGlkYXRlZCBwb3J0cyBk b24ndCBtYXR0ZXIgaWYgd2UncmUgcmVsZWFzaW5nDQo+IC0JCQkgKiBWQ1BJDQo+IC0JCQkgKi8N Cj4gLQkJCWlmICh2Y3BpLT5udW1fc2xvdHMpIHsNCj4gLQkJCQlwb3J0ID0NCj4gZHJtX2RwX21z dF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQoDQo+IC0JCQkJICAgIG1nciwgcG9ydCk7DQo+ IC0JCQkJaWYgKCFwb3J0KSB7DQo+IC0JCQkJCWlmICh2Y3BpLT5udW1fc2xvdHMgPT0gcGF5bG9h ZC0NCj4gPm51bV9zbG90cykgew0KPiAtCQkJCQkJY3VyX3Nsb3RzICs9IHZjcGktPm51bV9zbG90 czsNCj4gLQkJCQkJCXBheWxvYWQtPnN0YXJ0X3Nsb3QgPQ0KPiByZXFfcGF5bG9hZC5zdGFydF9z bG90Ow0KPiAtCQkJCQkJY29udGludWU7DQo+IC0JCQkJCX0gZWxzZSB7DQo+IC0JCQkJCQlkcm1f ZGJnX2ttcyhtZ3ItPmRldiwNCj4gLQkJCQkJCQkgICAgIkZhaWw6c2V0IHBheWxvYWQgdG8NCj4g aW52YWxpZCBzaW5rIik7DQo+IC0JCQkJCQltdXRleF91bmxvY2soJm1nci0NCj4gPnBheWxvYWRf bG9jayk7DQo+IC0JCQkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJCQkJfQ0KPiAtCQkJCX0NCj4g LQkJCQlwdXRfcG9ydCA9IHRydWU7DQo+IC0JCQl9DQo+ICsJaW50IHJldDsNCj4gDQo+IC0JCQly ZXFfcGF5bG9hZC5udW1fc2xvdHMgPSB2Y3BpLT5udW1fc2xvdHM7DQo+IC0JCQlyZXFfcGF5bG9h ZC52Y3BpID0gdmNwaS0+dmNwaTsNCj4gLQkJfSBlbHNlIHsNCj4gLQkJCXBvcnQgPSBOVUxMOw0K PiAtCQkJcmVxX3BheWxvYWQubnVtX3Nsb3RzID0gMDsNCj4gLQkJfQ0KPiArCXBvcnQgPSBkcm1f ZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZChtZ3IsIHBheWxvYWQtDQo+ID5wb3J0 KTsNCj4gKwlpZiAoIXBvcnQpDQo+ICsJCXJldHVybiAwOw0KPiANCj4gLQkJcGF5bG9hZC0+c3Rh cnRfc2xvdCA9IHJlcV9wYXlsb2FkLnN0YXJ0X3Nsb3Q7DQo+IC0JCS8qIHdvcmsgb3V0IHdoYXQg aXMgcmVxdWlyZWQgdG8gaGFwcGVuIHdpdGggdGhpcyBwYXlsb2FkICovDQo+IC0JCWlmIChwYXls b2FkLT5udW1fc2xvdHMgIT0gcmVxX3BheWxvYWQubnVtX3Nsb3RzKSB7DQo+IC0NCj4gLQkJCS8q IG5lZWQgdG8gcHVzaCBhbiB1cGRhdGUgZm9yIHRoaXMgcGF5bG9hZCAqLw0KPiAtCQkJaWYgKHJl cV9wYXlsb2FkLm51bV9zbG90cykgew0KPiAtCQkJCWRybV9kcF9jcmVhdGVfcGF5bG9hZF9zdGVw MShtZ3IsIHZjcGktDQo+ID52Y3BpLA0KPiAtCQkJCQkJCSAgICAmcmVxX3BheWxvYWQpOw0KPiAt CQkJCXBheWxvYWQtPm51bV9zbG90cyA9DQo+IHJlcV9wYXlsb2FkLm51bV9zbG90czsNCj4gLQkJ CQlwYXlsb2FkLT52Y3BpID0gcmVxX3BheWxvYWQudmNwaTsNCj4gLQ0KPiAtCQkJfSBlbHNlIGlm IChwYXlsb2FkLT5udW1fc2xvdHMpIHsNCj4gLQkJCQlwYXlsb2FkLT5udW1fc2xvdHMgPSAwOw0K PiAtCQkJCWRybV9kcF9kZXN0cm95X3BheWxvYWRfc3RlcDEobWdyLCBwb3J0LA0KPiAtCQkJCQkJ CSAgICAgcGF5bG9hZC0+dmNwaSwNCj4gLQkJCQkJCQkgICAgIHBheWxvYWQpOw0KPiAtCQkJCXJl cV9wYXlsb2FkLnBheWxvYWRfc3RhdGUgPQ0KPiAtCQkJCQlwYXlsb2FkLT5wYXlsb2FkX3N0YXRl Ow0KPiAtCQkJCXBheWxvYWQtPnN0YXJ0X3Nsb3QgPSAwOw0KPiAtCQkJfQ0KPiAtCQkJcGF5bG9h ZC0+cGF5bG9hZF9zdGF0ZSA9DQo+IHJlcV9wYXlsb2FkLnBheWxvYWRfc3RhdGU7DQo+IC0JCX0N Cj4gLQkJY3VyX3Nsb3RzICs9IHJlcV9wYXlsb2FkLm51bV9zbG90czsNCj4gKwlpZiAobWdyLT5w YXlsb2FkX2NvdW50ID09IDApDQo+ICsJCW1nci0+bmV4dF9zdGFydF9zbG90ID0gbXN0X3N0YXRl LT5zdGFydF9zbG90Ow0KPiANCj4gLQkJaWYgKHB1dF9wb3J0KQ0KPiAtCQkJZHJtX2RwX21zdF90 b3BvbG9neV9wdXRfcG9ydChwb3J0KTsNCj4gKwlwYXlsb2FkLT52Y19zdGFydF9zbG90ID0gbWdy LT5uZXh0X3N0YXJ0X3Nsb3Q7DQo+ICsJcmV0ID0gZHJtX2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAx KG1nciwgcGF5bG9hZCk7DQo+ICsJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsN Cj4gKwlpZiAocmV0IDwgMCkgew0KPiArCQlkcm1fd2FybihtZ3ItPmRldiwgIkZhaWxlZCB0byBj cmVhdGUgTVNUIHBheWxvYWQgZm9yIHBvcnQNCj4gJXA6ICVkXG4iLA0KPiArCQkJIHBheWxvYWQt PnBvcnQsIHJldCk7DQo+ICsJCXBheWxvYWQtPnZjX3N0YXJ0X3Nsb3QgPSAtMTsNCj4gKwkJcmV0 dXJuIHJldDsNCj4gIAl9DQo+IA0KPiAtCWZvciAoaSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2Fk czsgLyogZG8gbm90aGluZyAqLykgew0KPiAtCQlpZiAobWdyLT5wYXlsb2Fkc1tpXS5wYXlsb2Fk X3N0YXRlICE9DQo+IERQX1BBWUxPQURfREVMRVRFX0xPQ0FMKSB7DQo+IC0JCQlpKys7DQo+IC0J CQljb250aW51ZTsNCj4gLQkJfQ0KPiArCW1nci0+cGF5bG9hZF9jb3VudCsrOw0KPiArCW1nci0+ bmV4dF9zdGFydF9zbG90ICs9IHBheWxvYWQtPnRpbWVfc2xvdHM7DQo+IA0KPiAtCQlkcm1fZGJn X2ttcyhtZ3ItPmRldiwgInJlbW92aW5nIHBheWxvYWQgJWRcbiIsIGkpOw0KPiAtCQlmb3IgKGog PSBpOyBqIDwgbWdyLT5tYXhfcGF5bG9hZHMgLSAxOyBqKyspIHsNCj4gLQkJCW1nci0+cGF5bG9h ZHNbal0gPSBtZ3ItPnBheWxvYWRzW2ogKyAxXTsNCj4gLQkJCW1nci0+cHJvcG9zZWRfdmNwaXNb al0gPSBtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ogKw0KPiAxXTsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQxKTsNCj4gDQo+IC0JCQlp ZiAobWdyLT5wcm9wb3NlZF92Y3Bpc1tqXSAmJg0KPiAtCQkJICAgIG1nci0+cHJvcG9zZWRfdmNw aXNbal0tPm51bV9zbG90cykgew0KPiAtCQkJCXNldF9iaXQoaiArIDEsICZtZ3ItPnBheWxvYWRf bWFzayk7DQo+IC0JCQl9IGVsc2Ugew0KPiAtCQkJCWNsZWFyX2JpdChqICsgMSwgJm1nci0+cGF5 bG9hZF9tYXNrKTsNCj4gLQkJCX0NCj4gLQkJfQ0KPiArLyoqDQo+ICsgKiBkcm1fZHBfcmVtb3Zl X3BheWxvYWQoKSAtIFJlbW92ZSBhbiBNU1QgcGF5bG9hZA0KPiArICogQG1ncjogTWFuYWdlciB0 byB1c2UuDQo+ICsgKiBAbXN0X3N0YXRlOiBUaGUgTVNUIGF0b21pYyBzdGF0ZQ0KPiArICogQHBh eWxvYWQ6IFRoZSBwYXlsb2FkIHRvIHdyaXRlDQo+ICsgKg0KPiArICogUmVtb3ZlcyBhIHBheWxv YWQgZnJvbSBhbiBNU1QgdG9wb2xvZ3kgaWYgaXQgd2FzIHN1Y2Nlc3NmdWxseSBhc3NpZ25lZCBh DQo+IHN0YXJ0IHNsb3QuIEFsc28gdXBkYXRlcw0KPiArICogdGhlIHN0YXJ0aW5nIHRpbWUgc2xv dHMgb2YgYWxsIG90aGVyIHBheWxvYWRzIHdoaWNoIHdvdWxkIGhhdmUgYmVlbg0KPiBzaGlmdGVk IHRvd2FyZHMgdGhlIHN0YXJ0IG9mDQo+ICsgKiB0aGUgVkMgdGFibGUgYXMgYSByZXN1bHQuDQo+ ICsgKg0KPiArICogQWZ0ZXIgY2FsbGluZyB0aGlzLCB0aGUgZHJpdmVyIHNob3VsZCBnZW5lcmF0 ZSBBQ1QgYW5kIHBheWxvYWQgcGFja2V0cy4NCj4gTm90ZSB0aGF0IHRoZSBkcml2ZXIgbWF5DQo+ ICsgKiBnZW5lcmF0ZSBBQ1Qgb25jZSBwZXIgcGF5bG9hZCBjaGFuZ2UsIG9yIG9ubHkgb25jZSBh ZnRlciBhbGwgcGF5bG9hZHMgZm9yDQo+IGEgZ2l2ZW4gYXRvbWljIHN0YXRlDQo+ICsgKiBoYXZl IGJlZW4gcmVtb3ZlZC4NCj4gKyAqLw0KPiArdm9pZCBkcm1fZHBfcmVtb3ZlX3BheWxvYWQoc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCQkgICBzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlLA0KPiArCQkJICAgc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9kcF9tc3Rf YXRvbWljX3BheWxvYWQgKnBvczsNCj4gDQo+IC0JCW1lbXNldCgmbWdyLT5wYXlsb2Fkc1ttZ3It Pm1heF9wYXlsb2FkcyAtIDFdLCAwLA0KPiAtCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fZHBf cGF5bG9hZCkpOw0KPiAtCQltZ3ItPnByb3Bvc2VkX3ZjcGlzW21nci0+bWF4X3BheWxvYWRzIC0g MV0gPSBOVUxMOw0KPiAtCQljbGVhcl9iaXQobWdyLT5tYXhfcGF5bG9hZHMsICZtZ3ItPnBheWxv YWRfbWFzayk7DQo+ICsJLyogV2UgZmFpbGVkIHRvIG1ha2UgdGhlIHBheWxvYWQsIHNvIG5vdGhp bmcgdG8gZG8gKi8NCj4gKwlpZiAocGF5bG9hZC0+dmNfc3RhcnRfc2xvdCA9PSAtMSkNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJZHJtX2RwX2Rlc3Ryb3lfcGF5bG9hZF9zdGVwMShtZ3IsIG1zdF9z dGF0ZSwgcGF5bG9hZCk7DQo+ICsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJm1zdF9z dGF0ZS0+cGF5bG9hZHMsIG5leHQpIHsNCj4gKwkJaWYgKHBvcyAhPSBwYXlsb2FkICYmIHBvcy0+ dmNfc3RhcnRfc2xvdCA+IHBheWxvYWQtDQo+ID52Y19zdGFydF9zbG90KQ0KPiArCQkJcG9zLT52 Y19zdGFydF9zbG90IC09IHBheWxvYWQtPnRpbWVfc2xvdHM7DQo+ICAJfQ0KPiAtCW11dGV4X3Vu bG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiArCXBheWxvYWQtPnZjX3N0YXJ0X3Nsb3QgPSAt MTsNCj4gDQo+IC0JcmV0dXJuIDA7DQo+ICsJbWdyLT5wYXlsb2FkX2NvdW50LS07DQo+ICsJbWdy LT5uZXh0X3N0YXJ0X3Nsb3QgLT0gcGF5bG9hZC0+dGltZV9zbG90czsNCj4gIH0NCj4gLUVYUE9S VF9TWU1CT0woZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKTsNCj4gK0VYUE9SVF9TWU1CT0wo ZHJtX2RwX3JlbW92ZV9wYXlsb2FkKTsNCj4gDQo+ICAvKioNCj4gLSAqIGRybV9kcF91cGRhdGVf cGF5bG9hZF9wYXJ0MigpIC0gRXhlY3V0ZSBwYXlsb2FkIHVwZGF0ZSBwYXJ0IDINCj4gLSAqIEBt Z3I6IG1hbmFnZXIgdG8gdXNlLg0KPiArICogZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQyKCkgLSBF eGVjdXRlIHBheWxvYWQgdXBkYXRlIHBhcnQgMg0KPiArICogQG1ncjogTWFuYWdlciB0byB1c2Uu DQo+ICsgKiBAc3RhdGU6IFRoZSBnbG9iYWwgYXRvbWljIHN0YXRlDQo+ICsgKiBAcGF5bG9hZDog VGhlIHBheWxvYWQgdG8gdXBkYXRlDQo+ICsgKg0KPiArICogSWYgQHBheWxvYWQgd2FzIHN1Y2Nl c3NmdWxseSBhc3NpZ25lZCBhIHN0YXJ0aW5nIHRpbWUgc2xvdCBieQ0KPiBkcm1fZHBfYWRkX3Bh eWxvYWRfcGFydDEoKSwgdGhpcw0KPiArICogZnVuY3Rpb24gd2lsbCBzZW5kIHRoZSBzaWRlYmFu ZCBtZXNzYWdlcyB0byBmaW5pc2ggYWxsb2NhdGluZyB0aGlzIHBheWxvYWQuDQo+ICAgKg0KPiAt ICogVGhpcyBpdGVyYXRlcyBvdmVyIGFsbCBwcm9wb3NlZCB2aXJ0dWFsIGNoYW5uZWxzLCBhbmQg dHJpZXMgdG8NCj4gLSAqIGFsbG9jYXRlIHNwYWNlIGluIHRoZSBsaW5rIGZvciB0aGVtLiBGb3Ig MC0+c2xvdHMgdHJhbnNpdGlvbnMsDQo+IC0gKiB0aGlzIHN0ZXAgd3JpdGVzIHRoZSByZW1vdGUg VkMgcGF5bG9hZCBjb21tYW5kcy4gRm9yIHNsb3RzLT4wDQo+IC0gKiB0aGlzIGp1c3QgcmVzZXRz IHNvbWUgaW50ZXJuYWwgc3RhdGUuDQo+ICsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0 aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4NCj4gICAqLw0KPiAtaW50IGRybV9kcF91cGRhdGVf cGF5bG9hZF9wYXJ0MihzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3INCj4gKm1ncikNCj4g K2ludCBkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsDQo+ICsJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4g KwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQpDQo+ICB7 DQo+IC0Jc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsNCj4gLQlpbnQgaTsNCj4gIAlpbnQg cmV0ID0gMDsNCj4gDQo+IC0JbXV0ZXhfbG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiAtCWZv ciAoaSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0NCj4gLQkJaWYgKCFt Z3ItPnByb3Bvc2VkX3ZjcGlzW2ldKQ0KPiAtCQkJY29udGludWU7DQo+IC0NCj4gLQkJcG9ydCA9 IGNvbnRhaW5lcl9vZihtZ3ItPnByb3Bvc2VkX3ZjcGlzW2ldLCBzdHJ1Y3QNCj4gZHJtX2RwX21z dF9wb3J0LCB2Y3BpKTsNCj4gKwkvKiBTa2lwIGZhaWxlZCBwYXlsb2FkcyAqLw0KPiArCWlmIChw YXlsb2FkLT52Y19zdGFydF9zbG90ID09IC0xKSB7DQo+ICsJCWRybV9kYmdfa21zKHN0YXRlLT5k ZXYsICJQYXJ0IDEgb2YgcGF5bG9hZCBjcmVhdGlvbiBmb3IgJXMNCj4gZmFpbGVkLCBza2lwcGlu ZyBwYXJ0IDJcbiIsDQo+ICsJCQkgICAgcGF5bG9hZC0+cG9ydC0+Y29ubmVjdG9yLT5uYW1lKTsN Cj4gKwkJcmV0dXJuIC1FSU87DQo+ICsJfQ0KPiANCj4gLQkJZHJtX2RiZ19rbXMobWdyLT5kZXYs ICJwYXlsb2FkICVkICVkXG4iLCBpLCBtZ3ItDQo+ID5wYXlsb2Fkc1tpXS5wYXlsb2FkX3N0YXRl KTsNCj4gLQkJaWYgKG1nci0+cGF5bG9hZHNbaV0ucGF5bG9hZF9zdGF0ZSA9PSBEUF9QQVlMT0FE X0xPQ0FMKQ0KPiB7DQo+IC0JCQlyZXQgPSBkcm1fZHBfY3JlYXRlX3BheWxvYWRfc3RlcDIobWdy LCBwb3J0LCBtZ3ItDQo+ID5wcm9wb3NlZF92Y3Bpc1tpXS0+dmNwaSwgJm1nci0+cGF5bG9hZHNb aV0pOw0KPiAtCQl9IGVsc2UgaWYgKG1nci0+cGF5bG9hZHNbaV0ucGF5bG9hZF9zdGF0ZSA9PQ0K PiBEUF9QQVlMT0FEX0RFTEVURV9MT0NBTCkgew0KPiAtCQkJcmV0ID0gZHJtX2RwX2Rlc3Ryb3lf cGF5bG9hZF9zdGVwMihtZ3IsIG1nci0NCj4gPnByb3Bvc2VkX3ZjcGlzW2ldLT52Y3BpLCAmbWdy LT5wYXlsb2Fkc1tpXSk7DQo+IC0JCX0NCj4gLQkJaWYgKHJldCkgew0KPiAtCQkJbXV0ZXhfdW5s b2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+IC0JCQlyZXR1cm4gcmV0Ow0KPiAtCQl9DQo+ICsJ cmV0ID0gZHJtX2RwX2NyZWF0ZV9wYXlsb2FkX3N0ZXAyKG1nciwgcGF5bG9hZCk7DQo+ICsJaWYg KHJldCA8IDApIHsNCj4gKwkJaWYgKCFwYXlsb2FkLT5kZWxldGUpDQo+ICsJCQlkcm1fZXJyKG1n ci0+ZGV2LCAiU3RlcCAyIG9mIGNyZWF0aW5nIE1TVCBwYXlsb2FkDQo+IGZvciAlcCBmYWlsZWQ6 ICVkXG4iLA0KPiArCQkJCXBheWxvYWQtPnBvcnQsIHJldCk7DQo+ICsJCWVsc2UNCj4gKwkJCWRy bV9kYmdfa21zKG1nci0+ZGV2LCAiU3RlcCAyIG9mIHJlbW92aW5nIE1TVA0KPiBwYXlsb2FkIGZv ciAlcCBmYWlsZWQ6ICVkXG4iLA0KPiArCQkJCSAgICBwYXlsb2FkLT5wb3J0LCByZXQpOw0KPiAg CX0NCj4gLQltdXRleF91bmxvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gLQlyZXR1cm4gMDsN Cj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICB9DQo+IC1FWFBPUlRfU1lNQk9MKGRybV9kcF91cGRh dGVfcGF5bG9hZF9wYXJ0Mik7DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9hZGRfcGF5bG9hZF9w YXJ0Mik7DQo+IA0KPiAgc3RhdGljIGludCBkcm1fZHBfc2VuZF9kcGNkX3JlYWQoc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICAJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQsDQo+IEBAIC0zNzEyLDcgKzM2MTAsNiBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9n eV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgYm9v bCBtcw0KPiAgCWludCByZXQgPSAwOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0 YiA9IE5VTEw7DQo+IA0KPiAtCW11dGV4X2xvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gIAlt dXRleF9sb2NrKCZtZ3ItPmxvY2spOw0KPiAgCWlmIChtc3Rfc3RhdGUgPT0gbWdyLT5tc3Rfc3Rh dGUpDQo+ICAJCWdvdG8gb3V0X3VubG9jazsNCj4gQEAgLTM3MjAsMTAgKzM2MTcsNiBAQCBpbnQg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwgYm9vbCBtcw0KPiAgCW1nci0+bXN0X3N0YXRlID0gbXN0X3N0YXRlOw0K PiAgCS8qIHNldCB0aGUgZGV2aWNlIGludG8gTVNUIG1vZGUgKi8NCj4gIAlpZiAobXN0X3N0YXRl KSB7DQo+IC0JCXN0cnVjdCBkcm1fZHBfcGF5bG9hZCByZXNldF9wYXk7DQo+IC0JCWludCBsYW5l X2NvdW50Ow0KPiAtCQlpbnQgbGlua19yYXRlOw0KPiAtDQo+ICAJCVdBUk5fT04obWdyLT5tc3Rf cHJpbWFyeSk7DQo+IA0KPiAgCQkvKiBnZXQgZHBjZCBpbmZvICovDQo+IEBAIC0zNzM0LDE2ICsz NjI3LDYgQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3Qoc3RydWN0DQo+IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMNCj4gIAkJCWdvdG8gb3V0X3VubG9j azsNCj4gIAkJfQ0KPiANCj4gLQkJbGFuZV9jb3VudCA9IG1pbl90KGludCwgbWdyLT5kcGNkWzJd ICYNCj4gRFBfTUFYX0xBTkVfQ09VTlRfTUFTSywgbWdyLT5tYXhfbGFuZV9jb3VudCk7DQo+IC0J CWxpbmtfcmF0ZSA9IG1pbl90KGludCwgZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKG1nci0N Cj4gPmRwY2RbMV0pLCBtZ3ItPm1heF9saW5rX3JhdGUpOw0KPiAtCQltZ3ItPnBibl9kaXYgPSBk cm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncobWdyLA0KPiAtCQkJCQkJCWxpbmtfcmF0ZSwNCj4gLQkJ CQkJCQlsYW5lX2NvdW50KTsNCj4gLQkJaWYgKG1nci0+cGJuX2RpdiA9PSAwKSB7DQo+IC0JCQly ZXQgPSAtRUlOVkFMOw0KPiAtCQkJZ290byBvdXRfdW5sb2NrOw0KPiAtCQl9DQo+IC0NCj4gIAkJ LyogYWRkIGluaXRpYWwgYnJhbmNoIGRldmljZSBhdCBMQ1QgMSAqLw0KPiAgCQltc3RiID0gZHJt X2RwX2FkZF9tc3RfYnJhbmNoX2RldmljZSgxLCBOVUxMKTsNCj4gIAkJaWYgKG1zdGIgPT0gTlVM TCkgew0KPiBAQCAtMzc2Myw5ICszNjQ2LDggQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy X3NldF9tc3Qoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMN Cj4gIAkJaWYgKHJldCA8IDApDQo+ICAJCQlnb3RvIG91dF91bmxvY2s7DQo+IA0KPiAtCQlyZXNl dF9wYXkuc3RhcnRfc2xvdCA9IDA7DQo+IC0JCXJlc2V0X3BheS5udW1fc2xvdHMgPSAweDNmOw0K PiAtCQlkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKG1nciwgMCwgJnJlc2V0X3BheSk7DQo+ICsJ CS8qIFdyaXRlIHJlc2V0IHBheWxvYWQgKi8NCj4gKwkJZHJtX2RwX2RwY2Rfd3JpdGVfcGF5bG9h ZChtZ3IsIDAsIDAsIDB4M2YpOw0KPiANCj4gIAkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwg Jm1nci0+d29yayk7DQo+IA0KPiBAQCAtMzc3NywxOSArMzY1OSwxMSBAQCBpbnQgZHJtX2RwX21z dF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwgYm9vbCBtcw0KPiAgCQkvKiB0aGlzIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2UgaXMgZ29u ZSAqLw0KPiAgCQlkcm1fZHBfZHBjZF93cml0ZWIobWdyLT5hdXgsIERQX01TVE1fQ1RSTCwgMCk7 DQo+ICAJCXJldCA9IDA7DQo+IC0JCW1lbXNldChtZ3ItPnBheWxvYWRzLCAwLA0KPiAtCQkgICAg ICAgbWdyLT5tYXhfcGF5bG9hZHMgKiBzaXplb2YobWdyLT5wYXlsb2Fkc1swXSkpOw0KPiAtCQlt ZW1zZXQobWdyLT5wcm9wb3NlZF92Y3BpcywgMCwNCj4gLQkJICAgICAgIG1nci0+bWF4X3BheWxv YWRzICogc2l6ZW9mKG1nci0+cHJvcG9zZWRfdmNwaXNbMF0pKTsNCj4gLQkJbWdyLT5wYXlsb2Fk X21hc2sgPSAwOw0KPiAtCQlzZXRfYml0KDAsICZtZ3ItPnBheWxvYWRfbWFzayk7DQo+IC0JCW1n ci0+dmNwaV9tYXNrID0gMDsNCj4gIAkJbWdyLT5wYXlsb2FkX2lkX3RhYmxlX2NsZWFyZWQgPSBm YWxzZTsNCj4gIAl9DQo+IA0KPiAgb3V0X3VubG9jazoNCj4gIAltdXRleF91bmxvY2soJm1nci0+ bG9jayk7DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+ICAJaWYgKG1z dGIpDQo+ICAJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIobXN0Yik7DQo+ICAJcmV0dXJu IHJldDsNCj4gQEAgLTQzMTAsNjIgKzQxODQsMTggQEAgc3RydWN0IGVkaWQgKmRybV9kcF9tc3Rf Z2V0X2VkaWQoc3RydWN0DQo+IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRybV9k cF8NCj4gIH0NCj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9nZXRfZWRpZCk7DQo+IA0KPiAt LyoqDQo+IC0gKiBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIHRpbWUgc2xvdHMgZm9y IHRoaXMgUEJOIHZhbHVlDQo+IC0gKiBAbWdyOiBtYW5hZ2VyIHRvIHVzZQ0KPiAtICogQHBibjog cGF5bG9hZCBiYW5kd2lkdGggdG8gY29udmVydCBpbnRvIHNsb3RzLg0KPiAtICoNCj4gLSAqIENh bGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHRpbWUgc2xvdHMgdGhhdCB3aWxsIGJlIHJlcXVpcmVkIGZv ciB0aGUgZ2l2ZW4gUEJODQo+IC0gKiB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVk LCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGF0b21pYw0KPiAtICogZHJpdmVycy4NCj4gLSAq DQo+IC0gKiBSRVRVUk5TOg0KPiAtICogVGhlIHRvdGFsIHNsb3RzIHJlcXVpcmVkIGZvciB0aGlz IHBvcnQsIG9yIGVycm9yLg0KPiAtICovDQo+IC1pbnQgZHJtX2RwX2ZpbmRfdmNwaV9zbG90cyhz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgIGludCBwYm4pDQo+ IC17DQo+IC0JaW50IG51bV9zbG90czsNCj4gLQ0KPiAtCW51bV9zbG90cyA9IERJVl9ST1VORF9V UChwYm4sIG1nci0+cGJuX2Rpdik7DQo+IC0NCj4gLQkvKiBtYXguIHRpbWUgc2xvdHMgLSBvbmUg c2xvdCBmb3IgTVRQIGhlYWRlciAqLw0KPiAtCWlmIChudW1fc2xvdHMgPiA2MykNCj4gLQkJcmV0 dXJuIC1FTk9TUEM7DQo+IC0JcmV0dXJuIG51bV9zbG90czsNCj4gLX0NCj4gLUVYUE9SVF9TWU1C T0woZHJtX2RwX2ZpbmRfdmNwaV9zbG90cyk7DQo+IC0NCj4gLXN0YXRpYyBpbnQgZHJtX2RwX2lu aXRfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgICBz dHJ1Y3QgZHJtX2RwX3ZjcGkgKnZjcGksIGludCBwYm4sIGludCBzbG90cykNCj4gLXsNCj4gLQlp bnQgcmV0Ow0KPiAtDQo+IC0JdmNwaS0+cGJuID0gcGJuOw0KPiAtCXZjcGktPmFsaWduZWRfcGJu ID0gc2xvdHMgKiBtZ3ItPnBibl9kaXY7DQo+IC0JdmNwaS0+bnVtX3Nsb3RzID0gc2xvdHM7DQo+ IC0NCj4gLQlyZXQgPSBkcm1fZHBfbXN0X2Fzc2lnbl9wYXlsb2FkX2lkKG1nciwgdmNwaSk7DQo+ IC0JaWYgKHJldCA8IDApDQo+IC0JCXJldHVybiByZXQ7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+ IC0NCj4gIC8qKg0KPiAgICogZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoKSAtIEZpbmQg YW5kIGFkZCB0aW1lIHNsb3RzIHRvIHRoZSBzdGF0ZQ0KPiAgICogQHN0YXRlOiBnbG9iYWwgYXRv bWljIHN0YXRlDQo+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQN Cj4gICAqIEBwb3J0OiBwb3J0IHRvIGZpbmQgdGltZSBzbG90cyBmb3INCj4gICAqIEBwYm46IGJh bmR3aWR0aCByZXF1aXJlZCBmb3IgdGhlIG1vZGUgaW4gUEJODQo+IC0gKiBAcGJuX2RpdjogZGl2 aWRlciBmb3IgRFNDIG1vZGUgdGhhdCB0YWtlcyBGRUMgaW50byBhY2NvdW50DQo+ICAgKg0KPiAt ICogQWxsb2NhdGVzIHRpbWUgc2xvdHMgdG8gQHBvcnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMg dGltZXNsb3QgYWxsb2NhdGlvbnMgaXQNCj4gLSAqIG1heSBoYXZlIGhhZC4gQW55IGF0b21pYyBk cml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzDQo+IGZ1bmN0aW9uDQo+IC0g KiBpbiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxi YWNrIHRvIGNoYW5nZQ0KPiB0aGUNCj4gLSAqIGN1cnJlbnQgdGltZXNsb3QgYWxsb2NhdGlvbiBm b3IgdGhlIG5ldyBzdGF0ZSwgYnV0IG9ubHkgd2hlbg0KPiAtICogJmRybV9jcnRjX3N0YXRlLm1v ZGVfY2hhbmdlZCBvcg0KPiAmZHJtX2NydGNfc3RhdGUuY29ubmVjdG9yc19jaGFuZ2VkIGlzIHNl dA0KPiAtICogdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UgYXBwbGljYXRp b25zIHRoYXQgc3RpbGwgdXNlIHRoZQ0KPiAtICogbGVnYWN5IG1vZGVzZXR0aW5nIFVBUEkuDQo+ ICsgKiBBbGxvY2F0ZXMgdGltZSBzbG90cyB0byBAcG9ydCwgcmVwbGFjaW5nIGFueSBwcmV2aW91 cyB0aW1lIHNsb3QgYWxsb2NhdGlvbnMNCj4gaXQgbWF5DQo+ICsgKiBoYXZlIGhhZC4gQW55IGF0 b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGlu DQo+ICsgKiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNh bGxiYWNrDQo+IHVuY29uZGl0aW9uYWxseSB0bw0KPiArICogY2hhbmdlIHRoZSBjdXJyZW50IHRp bWUgc2xvdCBhbGxvY2F0aW9uIGZvciB0aGUgbmV3IHN0YXRlLCBhbmQgZW5zdXJlIHRoZQ0KPiBN U1QNCj4gKyAqIGF0b21pYyBzdGF0ZSBpcyBhZGRlZCB3aGVuZXZlciB0aGUgc3RhdGUgb2YgcGF5 bG9hZHMgaW4gdGhlIHRvcG9sb2d5DQo+IGNoYW5nZXMuDQo+ICAgKg0KPiAgICogQWxsb2NhdGlv bnMgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gYXJlIG5vdCBjaGVja2VkIGFnYWluc3QgdGhlIGJhbmR3 aWR0aA0KPiAgICogcmVzdHJhaW50cyBvZiBAbWdyIHVudGlsIHRoZSBkcml2ZXIgY2FsbHMgZHJt X2RwX21zdF9hdG9taWNfY2hlY2soKS4NCj4gQEAgLTQzODQsOCArNDIxNCw3IEBAIHN0YXRpYyBp bnQgZHJtX2RwX2luaXRfdmNwaShzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1n ciwNCj4gICAqLw0KPiAgaW50IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X21nciAqbWdyLA0KPiAtCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50 IHBibiwNCj4gLQkJCQkgIGludCBwYm5fZGl2KQ0KPiArCQkJCSAgc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCwgaW50IHBibikNCj4gIHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3Bh eWxvYWQgKnBheWxvYWQgPSBOVUxMOw0KPiBAQCAtNDQxOCwxMCArNDI0Nyw3IEBAIGludCBkcm1f ZHBfYXRvbWljX2ZpbmRfdGltZV9zbG90cyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUsDQo+ICAJCX0NCj4gIAl9DQo+IA0KPiAtCWlmIChwYm5fZGl2IDw9IDApDQo+IC0JCXBibl9k aXYgPSBtZ3ItPnBibl9kaXY7DQo+IC0NCj4gLQlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJu LCBwYm5fZGl2KTsNCj4gKwlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCB0b3BvbG9neV9z dGF0ZS0+cGJuX2Rpdik7DQo+IA0KPiAgCWRybV9kYmdfYXRvbWljKG1nci0+ZGV2LCAiW0NPTk5F Q1RPUjolZDolc10gW01TVCBQT1JUOiVwXQ0KPiBUVSAlZCAtPiAlZFxuIiwNCj4gIAkJICAgICAg IHBvcnQtPmNvbm5lY3Rvci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLA0KPiBAQCAt NDQzMCw3ICs0MjU2LDcgQEAgaW50IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0cnVj dA0KPiBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJICAgICAgIHBvcnQtPmNvbm5lY3Rv ci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLA0KPiAgCQkgICAgICAgcG9ydCwgcHJl dl9idywgcGJuKTsNCj4gDQo+IC0JLyogQWRkIHRoZSBuZXcgYWxsb2NhdGlvbiB0byB0aGUgc3Rh dGUgKi8NCj4gKwkvKiBBZGQgdGhlIG5ldyBhbGxvY2F0aW9uIHRvIHRoZSBzdGF0ZSwgbm90ZSB0 aGUgVkNQSSBpc24ndCBhc3NpZ25lZA0KPiB1bnRpbCB0aGUgZW5kICovDQo+ICAJaWYgKCFwYXls b2FkKSB7DQo+ICAJCXBheWxvYWQgPSBremFsbG9jKHNpemVvZigqcGF5bG9hZCksIEdGUF9LRVJO RUwpOw0KPiAgCQlpZiAoIXBheWxvYWQpDQo+IEBAIC00NDM4LDYgKzQyNjQsNyBAQCBpbnQgZHJt X2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RydWN0DQo+IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLA0KPiANCj4gIAkJZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2MocG9ydCk7DQo+ICAJCXBh eWxvYWQtPnBvcnQgPSBwb3J0Ow0KPiArCQlwYXlsb2FkLT52Y19zdGFydF9zbG90ID0gLTE7DQo+ ICAJCWxpc3RfYWRkKCZwYXlsb2FkLT5uZXh0LCAmdG9wb2xvZ3lfc3RhdGUtPnBheWxvYWRzKTsN Cj4gIAl9DQo+ICAJcGF5bG9hZC0+dGltZV9zbG90cyA9IHJlcV9zbG90czsNCj4gQEAgLTQ0NTQs MTAgKzQyODEsMTIgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdGltZV9z bG90cyk7DQo+ICAgKiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0aGUgdGltZSBzbG90cyBm cm9tDQo+ICAgKg0KPiAgICogUmVsZWFzZXMgYW55IHRpbWUgc2xvdHMgdGhhdCBoYXZlIGJlZW4g YWxsb2NhdGVkIHRvIGEgcG9ydCBpbiB0aGUgYXRvbWljDQo+IC0gKiBzdGF0ZS4gQW55IGF0b21p YyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluDQo+ IC0gKiB0aGVpciAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MuYXRvbWljX2NoZWNrKCkgY2Fs bGJhY2sgd2hlbiB0aGUNCj4gLSAqIGNvbm5lY3RvciB3aWxsIG5vIGxvbmdlciBoYXZlIFZDUEkg YWxsb2NhdGVkIChlLmcuIGJlY2F1c2UgaXRzIENSVEMgd2FzDQo+IC0gKiByZW1vdmVkKSB3aGVu IGl0IGhhZCBWQ1BJIGFsbG9jYXRlZCBpbiB0aGUgcHJldmlvdXMgYXRvbWljIHN0YXRlLg0KPiAr ICogc3RhdGUuIEFueSBhdG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNhbGwg dGhpcyBmdW5jdGlvbg0KPiArICogdW5jb25kaXRpb25hbGx5IGluIHRoZWlyICZkcm1fY29ubmVj dG9yX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKQ0KPiBjYWxsYmFjay4NCj4gKyAqIFRoaXMg aGVscGVyIHdpbGwgY2hlY2sgd2hldGhlciB0aW1lIHNsb3RzIHdvdWxkIGJlIHJlbGVhc2VkIGJ5 IHRoZSBuZXcNCj4gc3RhdGUgYW5kDQo+ICsgKiByZXNwb25kIGFjY29yZGluZ2x5LCBhbG9uZyB3 aXRoIGVuc3VyaW5nIHRoZSBNU1Qgc3RhdGUgaXMgYWx3YXlzIGFkZGVkDQo+IHRvIHRoZQ0KPiAr ICogYXRvbWljIHN0YXRlIHdoZW5ldmVyIGEgbmV3IHN0YXRlIHdvdWxkIG1vZGlmeSB0aGUgc3Rh dGUgb2YgcGF5bG9hZHMNCj4gb24gdGhlDQo+ICsgKiB0b3BvbG9neS4NCj4gICAqDQo+ICAgKiBJ dCBpcyBPSyB0byBjYWxsIHRoaXMgZXZlbiBpZiBAcG9ydCBoYXMgYmVlbiByZW1vdmVkIGZyb20g dGhlIHN5c3RlbS4NCj4gICAqIEFkZGl0aW9uYWxseSwgaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1 bmN0aW9uIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lDQo+IEBAIC00NTE5LDYgKzQzNDgsNyBA QCBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3RpbWVfc2xvdHMoc3RydWN0DQo+IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlLA0KPiAgCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3J0KTsN Cj4gIAkJcGF5bG9hZC0+cGJuID0gMDsNCj4gIAkJcGF5bG9hZC0+ZGVsZXRlID0gdHJ1ZTsNCj4g KwkJdG9wb2xvZ3lfc3RhdGUtPnBheWxvYWRfbWFzayAmPSB+QklUKHBheWxvYWQtPnZjcGkgLSAx KTsNCj4gIAl9DQo+IA0KPiAgCXJldHVybiAwOw0KPiBAQCAtNDU2OSw3ICs0Mzk5LDggQEAgaW50 IGRybV9kcF9tc3RfYXRvbWljX3NldHVwX2NvbW1pdChzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpDQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfYXRvbWljX3NldHVwX2NvbW1p dCk7DQo+IA0KPiAgLyoqDQo+IC0gKiBkcm1fZHBfbXN0X2F0b21pY193YWl0X2Zvcl9kZXBlbmRl bmNpZXMoKSAtIFdhaXQgZm9yIGFsbCBwZW5kaW5nDQo+IGNvbW1pdHMgb24gTVNUIHRvcG9sb2dp ZXMNCj4gKyAqIGRybV9kcF9tc3RfYXRvbWljX3dhaXRfZm9yX2RlcGVuZGVuY2llcygpIC0gV2Fp dCBmb3IgYWxsIHBlbmRpbmcNCj4gY29tbWl0cyBvbiBNU1QgdG9wb2xvZ2llcywNCj4gKyAqIHBy ZXBhcmUgbmV3IE1TVCBzdGF0ZSBmb3IgY29tbWl0DQo+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9t aWMgc3RhdGUNCj4gICAqDQo+ICAgKiBHb2VzIHRocm91Z2ggYW55IE1TVCB0b3BvbG9naWVzIGlu IHRoaXMgYXRvbWljIHN0YXRlLCBhbmQgd2FpdHMgZm9yIGFueQ0KPiBwZW5kaW5nIGNvbW1pdHMg d2hpY2gNCj4gQEAgLTQ1ODcsMTcgKzQ0MTgsMzAgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBf bXN0X2F0b21pY19zZXR1cF9jb21taXQpOw0KPiAgICovDQo+ICB2b2lkIGRybV9kcF9tc3RfYXRv bWljX3dhaXRfZm9yX2RlcGVuZGVuY2llcyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUpDQo+ICB7DQo+IC0Jc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm9sZF9tc3Rf c3RhdGU7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm9sZF9tc3Rfc3Rh dGUsDQo+ICpuZXdfbXN0X3N0YXRlOw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n ciAqbWdyOw0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICpvbGRfcGF5bG9h ZCwgKm5ld19wYXlsb2FkOw0KPiAgCWludCBpLCBqLCByZXQ7DQo+IA0KPiAtCWZvcl9lYWNoX29s ZF9tc3RfbWdyX2luX3N0YXRlKHN0YXRlLCBtZ3IsIG9sZF9tc3Rfc3RhdGUsIGkpIHsNCj4gKwlm b3JfZWFjaF9vbGRuZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBvbGRfbXN0X3N0YXRl LA0KPiBuZXdfbXN0X3N0YXRlLCBpKSB7DQo+ICAJCWZvciAoaiA9IDA7IGogPCBvbGRfbXN0X3N0 YXRlLT5udW1fY29tbWl0X2RlcHM7IGorKykgew0KPiAgCQkJcmV0ID0gZHJtX2NydGNfY29tbWl0 X3dhaXQob2xkX21zdF9zdGF0ZS0NCj4gPmNvbW1pdF9kZXBzW2pdKTsNCj4gIAkJCWlmIChyZXQg PCAwKQ0KPiAgCQkJCWRybV9lcnIoc3RhdGUtPmRldiwgIkZhaWxlZCB0byB3YWl0IGZvciAlczoN Cj4gJWRcbiIsDQo+ICAJCQkJCW9sZF9tc3Rfc3RhdGUtPmNvbW1pdF9kZXBzW2pdLQ0KPiA+Y3J0 Yy0+bmFtZSwgcmV0KTsNCj4gIAkJfQ0KPiArDQo+ICsJCS8qIE5vdyB0aGF0IHByZXZpb3VzIHN0 YXRlIGlzIGNvbW1pdHRlZCwgaXQncyBzYWZlIHRvIGNvcHkNCj4gb3ZlciB0aGUgc3RhcnQgc2xv dA0KPiArCQkgKiBhc3NpZ25tZW50cw0KPiArCQkgKi8NCj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRy eShvbGRfcGF5bG9hZCwgJm9sZF9tc3Rfc3RhdGUtPnBheWxvYWRzLA0KPiBuZXh0KSB7DQo+ICsJ CQlpZiAob2xkX3BheWxvYWQtPmRlbGV0ZSkNCj4gKwkJCQljb250aW51ZTsNCj4gKw0KPiArCQkJ bmV3X3BheWxvYWQgPQ0KPiBkcm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShuZXdfbXN0 X3N0YXRlLA0KPiArDQo+IG9sZF9wYXlsb2FkLT5wb3J0KTsNCj4gKwkJCW5ld19wYXlsb2FkLT52 Y19zdGFydF9zbG90ID0gb2xkX3BheWxvYWQtDQo+ID52Y19zdGFydF9zbG90Ow0KPiArCQl9DQo+ ICAJfQ0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2F0b21pY193YWl0X2Zvcl9k ZXBlbmRlbmNpZXMpOw0KPiBAQCAtNDY4MiwxMTAgKzQ1MjYsOCBAQCB2b2lkIGRybV9kcF9tc3Rf dXBkYXRlX3Nsb3RzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3Rh dGUsIHVpbnQ4Xw0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X3VwZGF0ZV9zbG90 cyk7DQo+IA0KPiAtLyoqDQo+IC0gKiBkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkoKSAtIEFsbG9j YXRlIGEgdmlydHVhbCBjaGFubmVsDQo+IC0gKiBAbWdyOiBtYW5hZ2VyIGZvciB0aGlzIHBvcnQN Cj4gLSAqIEBwb3J0OiBwb3J0IHRvIGFsbG9jYXRlIGEgdmlydHVhbCBjaGFubmVsIGZvci4NCj4g LSAqIEBwYm46IHBheWxvYWQgYmFuZHdpZHRoIG51bWJlciB0byByZXF1ZXN0DQo+IC0gKiBAc2xv dHM6IHJldHVybmVkIG51bWJlciBvZiBzbG90cyBmb3IgdGhpcyBQQk4uDQo+IC0gKi8NCj4gLWJv b2wgZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n ciAqbWdyLA0KPiAtCQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBi biwgaW50IHNsb3RzKQ0KPiAtew0KPiAtCWludCByZXQ7DQo+IC0NCj4gLQlpZiAoc2xvdHMgPCAw KQ0KPiAtCQlyZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQlwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfcG9ydF92YWxpZGF0ZWQobWdyLCBwb3J0KTsNCj4gLQlpZiAoIXBvcnQpDQo+IC0JCXJl dHVybiBmYWxzZTsNCj4gLQ0KPiAtCWlmIChwb3J0LT52Y3BpLnZjcGkgPiAwKSB7DQo+IC0JCWRy bV9kYmdfa21zKG1nci0+ZGV2LA0KPiAtCQkJICAgICJwYXlsb2FkOiB2Y3BpICVkIGFscmVhZHkg YWxsb2NhdGVkIGZvciBwYm4gJWQgLQ0KPiByZXF1ZXN0ZWQgcGJuICVkXG4iLA0KPiAtCQkJICAg IHBvcnQtPnZjcGkudmNwaSwgcG9ydC0+dmNwaS5wYm4sIHBibik7DQo+IC0JCWlmIChwYm4gPT0g cG9ydC0+dmNwaS5wYm4pIHsNCj4gLQkJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9y dCk7DQo+IC0JCQlyZXR1cm4gdHJ1ZTsNCj4gLQkJfQ0KPiAtCX0NCj4gLQ0KPiAtCXJldCA9IGRy bV9kcF9pbml0X3ZjcGkobWdyLCAmcG9ydC0+dmNwaSwgcGJuLCBzbG90cyk7DQo+IC0JaWYgKHJl dCkgew0KPiAtCQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgImZhaWxlZCB0byBpbml0IHRpbWUgc2xv dHM9JWQNCj4gcmV0PSVkXG4iLA0KPiAtCQkJICAgIERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJu X2RpdiksIHJldCk7DQo+IC0JCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7DQo+ IC0JCWdvdG8gb3V0Ow0KPiAtCX0NCj4gLQlkcm1fZGJnX2ttcyhtZ3ItPmRldiwgImluaXRpbmcg dmNwaSBmb3IgcGJuPSVkIHNsb3RzPSVkXG4iLCBwYm4sDQo+IHBvcnQtPnZjcGkubnVtX3Nsb3Rz KTsNCj4gLQ0KPiAtCS8qIEtlZXAgcG9ydCBhbGxvY2F0ZWQgdW50aWwgaXRzIHBheWxvYWQgaGFz IGJlZW4gcmVtb3ZlZCAqLw0KPiAtCWRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKHBvcnQpOw0K PiAtCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7DQo+IC0JcmV0dXJuIHRydWU7 DQo+IC1vdXQ6DQo+IC0JcmV0dXJuIGZhbHNlOw0KPiAtfQ0KPiAtRVhQT1JUX1NZTUJPTChkcm1f ZHBfbXN0X2FsbG9jYXRlX3ZjcGkpOw0KPiAtDQo+IC1pbnQgZHJtX2RwX21zdF9nZXRfdmNwaV9z bG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gc3RydWN0IGRybV9k cF9tc3RfcG9ydCAqcG9ydCkNCj4gLXsNCj4gLQlpbnQgc2xvdHMgPSAwOw0KPiAtDQo+IC0JcG9y dCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKG1nciwgcG9ydCk7DQo+ IC0JaWYgKCFwb3J0KQ0KPiAtCQlyZXR1cm4gc2xvdHM7DQo+IC0NCj4gLQlzbG90cyA9IHBvcnQt PnZjcGkubnVtX3Nsb3RzOw0KPiAtCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7 DQo+IC0JcmV0dXJuIHNsb3RzOw0KPiAtfQ0KPiAtRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2dl dF92Y3BpX3Nsb3RzKTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBkcm1fZHBfbXN0X3Jlc2V0X3ZjcGlf c2xvdHMoKSAtIFJlc2V0IG51bWJlciBvZiBzbG90cyB0byAwIGZvciBWQ1BJDQo+IC0gKiBAbWdy OiBtYW5hZ2VyIGZvciB0aGlzIHBvcnQNCj4gLSAqIEBwb3J0OiB1bnZlcmlmaWVkIHBvaW50ZXIg dG8gYSBwb3J0Lg0KPiAtICoNCj4gLSAqIFRoaXMganVzdCByZXNldHMgdGhlIG51bWJlciBvZiBz bG90cyBmb3IgdGhlIHBvcnRzIFZDUEkgZm9yIGxhdGVyDQo+IHByb2dyYW1taW5nLg0KPiAtICov DQo+IC12b2lkIGRybV9kcF9tc3RfcmVzZXRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3INCj4gKm1nciwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkNCj4gLXsN Cj4gLQkvKg0KPiAtCSAqIEEgcG9ydCB3aXRoIFZDUEkgd2lsbCByZW1haW4gYWxsb2NhdGVkIHVu dGlsIGl0cyBWQ1BJIGlzDQo+IC0JICogcmVsZWFzZWQsIG5vIHZlcmlmaWVkIHJlZiBuZWVkZWQN Cj4gLQkgKi8NCj4gLQ0KPiAtCXBvcnQtPnZjcGkubnVtX3Nsb3RzID0gMDsNCj4gLX0NCj4gLUVY UE9SVF9TWU1CT0woZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKTsNCj4gLQ0KPiAtLyoqDQo+ IC0gKiBkcm1fZHBfbXN0X2RlYWxsb2NhdGVfdmNwaSgpIC0gZGVhbGxvY2F0ZSBhIFZDUEkNCj4g LSAqIEBtZ3I6IG1hbmFnZXIgZm9yIHRoaXMgcG9ydA0KPiAtICogQHBvcnQ6IHBvcnQgdG8gZGVh bGxvY2F0ZSB2Y3BpIGZvcg0KPiAtICoNCj4gLSAqIFRoaXMgY2FuIGJlIGNhbGxlZCB1bmNvbmRp dGlvbmFsbHksIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcg0KPiAtICogZHJtX2RwX21zdF9hbGxvY2F0 ZV92Y3BpKCkgc3VjY2VlZGVkIG9yIG5vdC4NCj4gLSAqLw0KPiAtdm9pZCBkcm1fZHBfbXN0X2Rl YWxsb2NhdGVfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJ CQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQ0KPiAtew0KPiAtCWlmICghcG9ydC0+dmNw aS52Y3BpKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlkcm1fZHBfbXN0X3B1dF9wYXlsb2FkX2lk KG1nciwgcG9ydC0+dmNwaS52Y3BpKTsNCj4gLQlwb3J0LT52Y3BpLm51bV9zbG90cyA9IDA7DQo+ IC0JcG9ydC0+dmNwaS5wYm4gPSAwOw0KPiAtCXBvcnQtPnZjcGkuYWxpZ25lZF9wYm4gPSAwOw0K PiAtCXBvcnQtPnZjcGkudmNwaSA9IDA7DQo+IC0JZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2Mo cG9ydCk7DQo+IC19DQo+IC1FWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3Bp KTsNCj4gLQ0KPiAgc3RhdGljIGludCBkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X21ncg0KPiAqbWdyLA0KPiAtCQkJCSAgICAgaW50IGlkLCBzdHJ1 Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQpDQo+ICsJCQkJICAgICBpbnQgaWQsIHU4IHN0YXJ0 X3Nsb3QsIHU4IG51bV9zbG90cykNCj4gIHsNCj4gIAl1OCBwYXlsb2FkX2FsbG9jWzNdLCBzdGF0 dXM7DQo+ICAJaW50IHJldDsNCj4gQEAgLTQ3OTUsOCArNDUzNyw4IEBAIHN0YXRpYyBpbnQgZHJt X2RwX2RwY2Rfd3JpdGVfcGF5bG9hZChzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwNCj4gIAkJCSAgIERQX1BBWUxPQURfVEFCTEVfVVBEQVRFRCk7DQo+IA0KPiAgCXBheWxv YWRfYWxsb2NbMF0gPSBpZDsNCj4gLQlwYXlsb2FkX2FsbG9jWzFdID0gcGF5bG9hZC0+c3RhcnRf c2xvdDsNCj4gLQlwYXlsb2FkX2FsbG9jWzJdID0gcGF5bG9hZC0+bnVtX3Nsb3RzOw0KPiArCXBh eWxvYWRfYWxsb2NbMV0gPSBzdGFydF9zbG90Ow0KPiArCXBheWxvYWRfYWxsb2NbMl0gPSBudW1f c2xvdHM7DQo+IA0KPiAgCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlKG1nci0+YXV4LCBEUF9QQVlM T0FEX0FMTE9DQVRFX1NFVCwNCj4gcGF5bG9hZF9hbGxvYywgMyk7DQo+ICAJaWYgKHJldCAhPSAz KSB7DQo+IEBAIC01MDExLDggKzQ3NTMsOSBAQCBzdGF0aWMgdm9pZCBmZXRjaF9tb25pdG9yX25h bWUoc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICB2b2lkIGRybV9k cF9tc3RfZHVtcF90b3BvbG9neShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sDQo+ICAJCQkgICAgICBzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncikNCj4gIHsNCj4gLQlpbnQgaTsNCj4gLQlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Ow0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICpzdGF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9hZCAq cGF5bG9hZDsNCj4gKwlpbnQgaSwgcmV0Ow0KPiANCj4gIAltdXRleF9sb2NrKCZtZ3ItPmxvY2sp Ow0KPiAgCWlmIChtZ3ItPm1zdF9wcmltYXJ5KQ0KPiBAQCAtNTAyMSwzNiArNDc2NCwzNSBAQCB2 b2lkIGRybV9kcF9tc3RfZHVtcF90b3BvbG9neShzdHJ1Y3QNCj4gc2VxX2ZpbGUgKm0sDQo+ICAJ LyogZHVtcCBWQ1BJcyAqLw0KPiAgCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsNCj4gDQo+IC0J bXV0ZXhfbG9jaygmbWdyLT5wYXlsb2FkX2xvY2spOw0KPiAtCXNlcV9wcmludGYobSwgIlxuKioq IFZDUEkgSW5mbyAqKipcbiIpOw0KPiAtCXNlcV9wcmludGYobSwgInBheWxvYWRfbWFzazogJWx4 LCB2Y3BpX21hc2s6ICVseCwgbWF4X3BheWxvYWRzOg0KPiAlZFxuIiwgbWdyLT5wYXlsb2FkX21h c2ssIG1nci0+dmNwaV9tYXNrLCBtZ3ItPm1heF9wYXlsb2Fkcyk7DQo+ICsJcmV0ID0gZHJtX21v ZGVzZXRfbG9ja19zaW5nbGVfaW50ZXJydXB0aWJsZSgmbWdyLT5iYXNlLmxvY2spOw0KPiArCWlm IChyZXQgPCAwKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlzdGF0ZSA9IHRvX2RybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUobWdyLT5iYXNlLnN0YXRlKTsNCj4gKwlzZXFfcHJpbnRmKG0sICJcbioq KiBBdG9taWMgc3RhdGUgaW5mbyAqKipcbiIpOw0KPiArCXNlcV9wcmludGYobSwgInBheWxvYWRf bWFzazogJXgsIG1heF9wYXlsb2FkczogJWQsIHN0YXJ0X3Nsb3Q6ICV1LA0KPiBwYm5fZGl2OiAl ZFxuIiwNCj4gKwkJICAgc3RhdGUtPnBheWxvYWRfbWFzaywgbWdyLT5tYXhfcGF5bG9hZHMsIHN0 YXRlLQ0KPiA+c3RhcnRfc2xvdCwgc3RhdGUtPnBibl9kaXYpOw0KPiANCj4gLQlzZXFfcHJpbnRm KG0sICJcbnwgICBpZHggICB8ICBwb3J0ICMgfCAgdmNwX2lkIHwgIyBzbG90cyB8ICAgICBzaW5r IG5hbWUNCj4gfFxuIik7DQo+ICsJc2VxX3ByaW50ZihtLCAiXG58IGlkeCB8IHBvcnQgfCB2Y3Bp IHwgc2xvdHMgfCBwYm4gfCBkc2MgfCAgICAgc2luayBuYW1lDQo+IHxcbiIpOw0KPiAgCWZvciAo aSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0JCWlmIChtZ3ItPnByb3Bv c2VkX3ZjcGlzW2ldKSB7DQo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkocGF5bG9hZCwgJnN0YXRl LT5wYXlsb2FkcywgbmV4dCkgew0KPiAgCQkJY2hhciBuYW1lWzE0XTsNCj4gDQo+IC0JCQlwb3J0 ID0gY29udGFpbmVyX29mKG1nci0+cHJvcG9zZWRfdmNwaXNbaV0sIHN0cnVjdA0KPiBkcm1fZHBf bXN0X3BvcnQsIHZjcGkpOw0KPiAtCQkJZmV0Y2hfbW9uaXRvcl9uYW1lKG1nciwgcG9ydCwgbmFt ZSwNCj4gc2l6ZW9mKG5hbWUpKTsNCj4gLQkJCXNlcV9wcmludGYobSwgIiUxMGQlMTBkJTEwZCUx MGQlMjBzXG4iLA0KPiArCQkJaWYgKHBheWxvYWQtPnZjcGkgIT0gaSB8fCBwYXlsb2FkLT5kZWxl dGUpDQo+ICsJCQkJY29udGludWU7DQo+ICsNCj4gKwkJCWZldGNoX21vbml0b3JfbmFtZShtZ3Is IHBheWxvYWQtPnBvcnQsIG5hbWUsDQo+IHNpemVvZihuYW1lKSk7DQo+ICsJCQlzZXFfcHJpbnRm KG0sICIgJTVkICU2ZCAlNmQgJTAyZCAtICUwMmQgJTVkICU1cw0KPiAlMTlzXG4iLA0KPiAgCQkJ CSAgIGksDQo+IC0JCQkJICAgcG9ydC0+cG9ydF9udW0sDQo+IC0JCQkJICAgcG9ydC0+dmNwaS52 Y3BpLA0KPiAtCQkJCSAgIHBvcnQtPnZjcGkubnVtX3Nsb3RzLA0KPiArCQkJCSAgIHBheWxvYWQt PnBvcnQtPnBvcnRfbnVtLA0KPiArCQkJCSAgIHBheWxvYWQtPnZjcGksDQo+ICsJCQkJICAgcGF5 bG9hZC0+dmNfc3RhcnRfc2xvdCwNCj4gKwkJCQkgICBwYXlsb2FkLT52Y19zdGFydF9zbG90ICsg cGF5bG9hZC0NCj4gPnRpbWVfc2xvdHMgLSAxLA0KPiArCQkJCSAgIHBheWxvYWQtPnBibiwNCj4g KwkJCQkgICBwYXlsb2FkLT5kc2NfZW5hYmxlZCA/ICJZIiA6ICJOIiwNCj4gIAkJCQkgICAoKm5h bWUgIT0gMCkgPyBuYW1lIDogIlVua25vd24iKTsNCj4gLQkJfSBlbHNlDQo+IC0JCQlzZXFfcHJp bnRmKG0sICIlNmQgLSBVbnVzZWRcbiIsIGkpOw0KPiAtCX0NCj4gLQlzZXFfcHJpbnRmKG0sICJc bioqKiBQYXlsb2FkIEluZm8gKioqXG4iKTsNCj4gLQlzZXFfcHJpbnRmKG0sICJ8ICAgaWR4ICAg fCAgc3RhdGUgIHwgIHN0YXJ0IHNsb3QgIHwgIyBzbG90cyB8XG4iKTsNCj4gLQlmb3IgKGkgPSAw OyBpIDwgbWdyLT5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAtCQlzZXFfcHJpbnRmKG0sICIlMTBk JTEwZCUxNWQlMTBkXG4iLA0KPiAtCQkJICAgaSwNCj4gLQkJCSAgIG1nci0+cGF5bG9hZHNbaV0u cGF5bG9hZF9zdGF0ZSwNCj4gLQkJCSAgIG1nci0+cGF5bG9hZHNbaV0uc3RhcnRfc2xvdCwNCj4g LQkJCSAgIG1nci0+cGF5bG9hZHNbaV0ubnVtX3Nsb3RzKTsNCj4gKwkJfQ0KPiAgCX0NCj4gLQlt dXRleF91bmxvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gDQo+ICAJc2VxX3ByaW50ZihtLCAi XG4qKiogRFBDRCBJbmZvICoqKlxuIik7DQo+ICAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsNCj4g QEAgLTUwOTcsNyArNDgzOSw3IEBAIHZvaWQgZHJtX2RwX21zdF9kdW1wX3RvcG9sb2d5KHN0cnVj dCBzZXFfZmlsZQ0KPiAqbSwNCj4gDQo+ICBvdXQ6DQo+ICAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxv Y2spOw0KPiAtDQo+ICsJZHJtX21vZGVzZXRfdW5sb2NrKCZtZ3ItPmJhc2UubG9jayk7DQo+ICB9 DQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZHVtcF90b3BvbG9neSk7DQo+IA0KPiBAQCAt NTQxOCw5ICs1MTYwLDIyIEBADQo+IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrX3BheWxvYWRfYWxs b2NfbGltaXRzKHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyDQo+ICAJCQkJ ICAgICAgIG1nciwgbXN0X3N0YXRlLCBtZ3ItPm1heF9wYXlsb2Fkcyk7DQo+ICAJCQlyZXR1cm4g LUVJTlZBTDsNCj4gIAkJfQ0KPiArDQo+ICsJCS8qIEFzc2lnbiBhIFZDUEkgKi8NCj4gKwkJaWYg KCFwYXlsb2FkLT52Y3BpKSB7DQo+ICsJCQlwYXlsb2FkLT52Y3BpID0gZmZ6KG1zdF9zdGF0ZS0+ cGF5bG9hZF9tYXNrKSArIDE7DQo+ICsJCQlkcm1fZGJnX2F0b21pYyhtZ3ItPmRldiwgIltNU1Qg UE9SVDolcF0NCj4gYXNzaWduZWQgVkNQSSAjJWRcbiIsDQo+ICsJCQkJICAgICAgIHBheWxvYWQt PnBvcnQsIHBheWxvYWQtPnZjcGkpOw0KPiArCQkJbXN0X3N0YXRlLT5wYXlsb2FkX21hc2sgfD0g QklUKHBheWxvYWQtPnZjcGkgLSAxKTsNCj4gKwkJfQ0KPiAgCX0NCj4gLQlkcm1fZGJnX2F0b21p YyhtZ3ItPmRldiwgIltNU1QgTUdSOiVwXSBtc3Qgc3RhdGUgJXAgVFUNCj4gYXZhaWw9JWQgdXNl ZD0lZFxuIiwNCj4gLQkJICAgICAgIG1nciwgbXN0X3N0YXRlLCBhdmFpbF9zbG90cywgbXN0X3N0 YXRlLT50b3RhbF9hdmFpbF9zbG90cyAtDQo+IGF2YWlsX3Nsb3RzKTsNCj4gKw0KPiArCWlmICgh cGF5bG9hZF9jb3VudCkNCj4gKwkJbXN0X3N0YXRlLT5wYm5fZGl2ID0gMDsNCj4gKw0KPiArCWRy bV9kYmdfYXRvbWljKG1nci0+ZGV2LCAiW01TVCBNR1I6JXBdIG1zdCBzdGF0ZSAlcCBUVQ0KPiBw Ym5fZGl2PSVkIGF2YWlsPSVkIHVzZWQ9JWRcbiIsDQo+ICsJCSAgICAgICBtZ3IsIG1zdF9zdGF0 ZSwgbXN0X3N0YXRlLT5wYm5fZGl2LCBhdmFpbF9zbG90cywNCj4gKwkJICAgICAgIG1zdF9zdGF0 ZS0+dG90YWxfYXZhaWxfc2xvdHMgLSBhdmFpbF9zbG90cyk7DQo+IA0KPiAgCXJldHVybiAwOw0K PiAgfQ0KPiBAQCAtNTQ5MSw3ICs1MjQ2LDYgQEANCj4gRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0 X2FkZF9hZmZlY3RlZF9kc2NfY3J0Y3MpOw0KPiAgICogQHN0YXRlOiBQb2ludGVyIHRvIHRoZSBu ZXcgZHJtX2F0b21pY19zdGF0ZQ0KPiAgICogQHBvcnQ6IFBvaW50ZXIgdG8gdGhlIGFmZmVjdGVk IE1TVCBQb3J0DQo+ICAgKiBAcGJuOiBOZXdseSByZWNhbGN1bGF0ZWQgYncgcmVxdWlyZWQgZm9y IGxpbmsgd2l0aCBEU0MgZW5hYmxlZA0KPiAtICogQHBibl9kaXY6IERpdmlkZXIgdG8gY2FsY3Vs YXRlIGNvcnJlY3QgbnVtYmVyIG9mIHBibiBwZXIgc2xvdA0KPiAgICogQGVuYWJsZTogQm9vbGVh biBmbGFnIHRvIGVuYWJsZSBvciBkaXNhYmxlIERTQyBvbiB0aGUgcG9ydA0KPiAgICoNCj4gICAq IFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBEU0Mgb24gdGhlIGdpdmVuIFBvcnQNCj4gQEAgLTU1MDIs OCArNTI1Niw3IEBADQo+IEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9hZGRfYWZmZWN0ZWRfZHNj X2NydGNzKTsNCj4gICAqLw0KPiAgaW50IGRybV9kcF9tc3RfYXRvbWljX2VuYWJsZV9kc2Moc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAgCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0LA0KPiAtCQkJCSBpbnQgcGJuLCBpbnQgcGJuX2RpdiwNCj4gLQkJCQkgYm9vbCBl bmFibGUpDQo+ICsJCQkJIGludCBwYm4sIGJvb2wgZW5hYmxlKQ0KPiAgew0KPiAgCXN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7DQo+ICAJc3RydWN0IGRybV9kcF9t c3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQ7DQo+IEBAIC01NTI5LDcgKzUyODIsNyBAQCBpbnQg ZHJtX2RwX21zdF9hdG9taWNfZW5hYmxlX2RzYyhzdHJ1Y3QNCj4gZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+ICAJfQ0KPiANCj4gIAlpZiAoZW5hYmxlKSB7DQo+IC0JCXRpbWVfc2xvdHMgPSBk cm1fZHBfYXRvbWljX2ZpbmRfdGltZV9zbG90cyhzdGF0ZSwgcG9ydC0NCj4gPm1nciwgcG9ydCwg cGJuLCBwYm5fZGl2KTsNCj4gKwkJdGltZV9zbG90cyA9IGRybV9kcF9hdG9taWNfZmluZF90aW1l X3Nsb3RzKHN0YXRlLCBwb3J0LQ0KPiA+bWdyLCBwb3J0LCBwYm4pOw0KPiAgCQlkcm1fZGJnX2F0 b21pYyhzdGF0ZS0+ZGV2LA0KPiAgCQkJICAgICAgICJbTVNUIFBPUlQ6JXBdIEVuYWJsaW5nIERT QyBmbGFnLCByZWFsbG9jYXRpbmcNCj4gJWQgdGltZSBzbG90cyBvbiB0aGUgcG9ydFxuIiwNCj4g IAkJCSAgICAgICBwb3J0LCB0aW1lX3Nsb3RzKTsNCj4gQEAgLTU1NDIsNiArNTI5NSw3IEBAIGlu dCBkcm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0cnVjdA0KPiBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwNCj4gIAlyZXR1cm4gdGltZV9zbG90czsNCj4gIH0NCj4gIEVYUE9SVF9TWU1CT0wo ZHJtX2RwX21zdF9hdG9taWNfZW5hYmxlX2RzYyk7DQo+ICsNCj4gIC8qKg0KPiAgICogZHJtX2Rw X21zdF9hdG9taWNfY2hlY2sgLSBDaGVjayB0aGF0IHRoZSBuZXcgc3RhdGUgb2YgYW4gTVNUDQo+ IHRvcG9sb2d5IGluIGFuDQo+ICAgKiBhdG9taWMgdXBkYXRlIGlzIHZhbGlkDQo+IEBAIC01NTk5 LDcgKzUzNTMsNiBAQA0KPiBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVf ZnVuY3MpOw0KPiANCj4gIC8qKg0KPiAgICogZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0 YXRlOiBnZXQgTVNUIHRvcG9sb2d5IHN0YXRlDQo+IC0gKg0KPiAgICogQHN0YXRlOiBnbG9iYWwg YXRvbWljIHN0YXRlDQo+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciwgYWxzbyB0aGUg cHJpdmF0ZSBvYmplY3QgaW4gdGhpcyBjYXNlDQo+ICAgKg0KPiBAQCAtNTYxOSw2ICs1MzcyLDMx IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlDQo+ICpkcm1fYXRvbWljX2dldF9t c3RfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9hDQo+ICB9DQo+ICBFWFBPUlRfU1lNQk9MKGRy bV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZSk7DQo+IA0KPiArLyoqDQo+ICsgKiBkcm1f YXRvbWljX2dldF9uZXdfbXN0X3RvcG9sb2d5X3N0YXRlOiBnZXQgbmV3IE1TVCB0b3BvbG9neSBz dGF0ZQ0KPiBpbiBhdG9taWMgc3RhdGUsIGlmIGFueQ0KPiArICogQHN0YXRlOiBnbG9iYWwgYXRv bWljIHN0YXRlDQo+ICsgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciwgYWxzbyB0aGUgcHJp dmF0ZSBvYmplY3QgaW4gdGhpcyBjYXNlDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiB3cmFw cyBkcm1fYXRvbWljX2dldF9wcml2X29ial9zdGF0ZSgpIHBhc3NpbmcgaW4gdGhlIE1TVA0KPiBh dG9taWMNCj4gKyAqIHN0YXRlIHZ0YWJsZSBzbyB0aGF0IHRoZSBwcml2YXRlIG9iamVjdCBzdGF0 ZSByZXR1cm5lZCBpcyB0aGF0IG9mIGEgTVNUDQo+ICsgKiB0b3BvbG9neSBvYmplY3QuDQo+ICsg Kg0KPiArICogUmV0dXJuczoNCj4gKyAqDQo+ICsgKiBUaGUgTVNUIHRvcG9sb2d5IHN0YXRlLCBv ciBOVUxMIGlmIHRoZXJlJ3Mgbm8gdG9wb2xvZ3kgc3RhdGUgZm9yIHRoaXMgTVNUDQo+IG1ncg0K PiArICogaW4gdGhlIGdsb2JhbCBhdG9taWMgc3RhdGUNCj4gKyAqLw0KPiArc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUgKg0KPiArZHJtX2F0b21pY19nZXRfbmV3X21zdF90b3BvbG9n eV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQ0KPiAqc3RhdGUsDQo+ICsJCQkJICAgICAg c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpDQo+ICt7DQo+ICsJc3RydWN0IGRy bV9wcml2YXRlX3N0YXRlICpwcml2X3N0YXRlID0NCj4gKwkJZHJtX2F0b21pY19nZXRfbmV3X3By aXZhdGVfb2JqX3N0YXRlKHN0YXRlLCAmbWdyLQ0KPiA+YmFzZSk7DQo+ICsNCj4gKwlyZXR1cm4g cHJpdl9zdGF0ZSA/IHRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShwcml2X3N0YXRlKSA6IE5VTEw7 DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lf c3RhdGUpOw0KPiArDQo+ICAvKioNCj4gICAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2luaXQg LSBpbml0aWFsaXNlIGEgdG9wb2xvZ3kgbWFuYWdlcg0KPiAgICogQG1ncjogbWFuYWdlciBzdHJ1 Y3QgdG8gaW5pdGlhbGlzZQ0KPiBAQCAtNTYyNiw4ICs1NDA0LDYgQEANCj4gRVhQT1JUX1NZTUJP TChkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUpOw0KPiAgICogQGF1eDogRFAgaGVs cGVyIGF1eCBjaGFubmVsIHRvIHRhbGsgdG8gdGhpcyBkZXZpY2UNCj4gICAqIEBtYXhfZHBjZF90 cmFuc2FjdGlvbl9ieXRlczogaHcgc3BlY2lmaWMgRFBDRCB0cmFuc2FjdGlvbiBsaW1pdA0KPiAg ICogQG1heF9wYXlsb2FkczogbWF4aW11bSBudW1iZXIgb2YgcGF5bG9hZHMgdGhpcyBHUFUgY2Fu IHNvdXJjZQ0KPiAtICogQG1heF9sYW5lX2NvdW50OiBtYXhpbXVtIG51bWJlciBvZiBsYW5lcyB0 aGlzIEdQVSBzdXBwb3J0cw0KPiAtICogQG1heF9saW5rX3JhdGU6IG1heGltdW0gbGluayByYXRl IHBlciBsYW5lIHRoaXMgR1BVIHN1cHBvcnRzIGluIGtIeg0KPiAgICogQGNvbm5fYmFzZV9pZDog dGhlIGNvbm5lY3RvciBvYmplY3QgSUQgdGhlIE1TVCBkZXZpY2UgaXMgY29ubmVjdGVkIHRvLg0K PiAgICoNCj4gICAqIFJldHVybiAwIGZvciBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2Rl IG9uIGZhaWx1cmUNCj4gQEAgLTU2MzUsMTQgKzU0MTEsMTIgQEANCj4gRVhQT1JUX1NZTUJPTChk cm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUpOw0KPiAgaW50IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyX2luaXQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3IsDQo+ ICAJCQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZHBfYXV4DQo+ICphdXgs DQo+ICAJCQkJIGludCBtYXhfZHBjZF90cmFuc2FjdGlvbl9ieXRlcywgaW50DQo+IG1heF9wYXls b2FkcywNCj4gLQkJCQkgaW50IG1heF9sYW5lX2NvdW50LCBpbnQgbWF4X2xpbmtfcmF0ZSwNCj4g IAkJCQkgaW50IGNvbm5fYmFzZV9pZCkNCj4gIHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiANCj4gIAltdXRleF9pbml0KCZtZ3ItPmxvY2spOw0K PiAgCW11dGV4X2luaXQoJm1nci0+cWxvY2spOw0KPiAtCW11dGV4X2luaXQoJm1nci0+cGF5bG9h ZF9sb2NrKTsNCj4gIAltdXRleF9pbml0KCZtZ3ItPmRlbGF5ZWRfZGVzdHJveV9sb2NrKTsNCj4g IAltdXRleF9pbml0KCZtZ3ItPnVwX3JlcV9sb2NrKTsNCj4gIAltdXRleF9pbml0KCZtZ3ItPnBy b2JlX2xvY2spOw0KPiBAQCAtNTY3MiwxOSArNTQ0Niw3IEBAIGludCBkcm1fZHBfbXN0X3RvcG9s b2d5X21ncl9pbml0KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAg CW1nci0+YXV4ID0gYXV4Ow0KPiAgCW1nci0+bWF4X2RwY2RfdHJhbnNhY3Rpb25fYnl0ZXMgPSBt YXhfZHBjZF90cmFuc2FjdGlvbl9ieXRlczsNCj4gIAltZ3ItPm1heF9wYXlsb2FkcyA9IG1heF9w YXlsb2FkczsNCj4gLQltZ3ItPm1heF9sYW5lX2NvdW50ID0gbWF4X2xhbmVfY291bnQ7DQo+IC0J bWdyLT5tYXhfbGlua19yYXRlID0gbWF4X2xpbmtfcmF0ZTsNCj4gIAltZ3ItPmNvbm5fYmFzZV9p ZCA9IGNvbm5fYmFzZV9pZDsNCj4gLQlpZiAobWF4X3BheWxvYWRzICsgMSA+IHNpemVvZihtZ3It PnBheWxvYWRfbWFzaykgKiA4IHx8DQo+IC0JICAgIG1heF9wYXlsb2FkcyArIDEgPiBzaXplb2Yo bWdyLT52Y3BpX21hc2spICogOCkNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JbWdyLT5wYXls b2FkcyA9IGtjYWxsb2MobWF4X3BheWxvYWRzLCBzaXplb2Yoc3RydWN0DQo+IGRybV9kcF9wYXls b2FkKSwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKCFtZ3ItPnBheWxvYWRzKQ0KPiAtCQlyZXR1cm4g LUVOT01FTTsNCj4gLQltZ3ItPnByb3Bvc2VkX3ZjcGlzID0ga2NhbGxvYyhtYXhfcGF5bG9hZHMs IHNpemVvZihzdHJ1Y3QNCj4gZHJtX2RwX3ZjcGkgKiksIEdGUF9LRVJORUwpOw0KPiAtCWlmICgh bWdyLT5wcm9wb3NlZF92Y3BpcykNCj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0Jc2V0X2JpdCgw LCAmbWdyLT5wYXlsb2FkX21hc2spOw0KPiANCj4gIAltc3Rfc3RhdGUgPSBremFsbG9jKHNpemVv ZigqbXN0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7DQo+ICAJaWYgKG1zdF9zdGF0ZSA9PSBOVUxMKQ0K PiBAQCAtNTcxNywxOSArNTQ3OSwxMiBAQCB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2Rl c3Ryb3koc3RydWN0DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpDQo+ICAJCWRlc3Ry b3lfd29ya3F1ZXVlKG1nci0+ZGVsYXllZF9kZXN0cm95X3dxKTsNCj4gIAkJbWdyLT5kZWxheWVk X2Rlc3Ryb3lfd3EgPSBOVUxMOw0KPiAgCX0NCj4gLQltdXRleF9sb2NrKCZtZ3ItPnBheWxvYWRf bG9jayk7DQo+IC0Ja2ZyZWUobWdyLT5wYXlsb2Fkcyk7DQo+IC0JbWdyLT5wYXlsb2FkcyA9IE5V TEw7DQo+IC0Ja2ZyZWUobWdyLT5wcm9wb3NlZF92Y3Bpcyk7DQo+IC0JbWdyLT5wcm9wb3NlZF92 Y3BpcyA9IE5VTEw7DQo+IC0JbXV0ZXhfdW5sb2NrKCZtZ3ItPnBheWxvYWRfbG9jayk7DQo+ICAJ bWdyLT5kZXYgPSBOVUxMOw0KPiAgCW1nci0+YXV4ID0gTlVMTDsNCj4gIAlkcm1fYXRvbWljX3By aXZhdGVfb2JqX2ZpbmkoJm1nci0+YmFzZSk7DQo+ICAJbWdyLT5mdW5jcyA9IE5VTEw7DQo+IA0K PiAgCW11dGV4X2Rlc3Ryb3koJm1nci0+ZGVsYXllZF9kZXN0cm95X2xvY2spOw0KPiAtCW11dGV4 X2Rlc3Ryb3koJm1nci0+cGF5bG9hZF9sb2NrKTsNCj4gIAltdXRleF9kZXN0cm95KCZtZ3ItPnFs b2NrKTsNCj4gIAltdXRleF9kZXN0cm95KCZtZ3ItPmxvY2spOw0KPiAgCW11dGV4X2Rlc3Ryb3ko Jm1nci0+dXBfcmVxX2xvY2spOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kcF9tc3QuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZHBfbXN0LmMNCj4gaW5kZXggNGIwYWYzYzI2MTc2Li5lYzM4OWUzY2FmMjQgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMNCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9tc3QuYw0KPiBAQCAt NTIsNiArNTIsNyBAQCBzdGF0aWMgaW50IGludGVsX2RwX21zdF9jb21wdXRlX2xpbmtfY29uZmln KHN0cnVjdA0KPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLA0KPiAgCXN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSA9IGNydGNfc3RhdGUtPnVhcGkuc3RhdGU7DQo+ICAJc3RydWN0IGludGVs X2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPSBlbmNfdG9fbXN0KGVuY29kZXIpOw0KPiAgCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmaW50ZWxfbXN0LT5wcmltYXJ5LT5kcDsNCj4gKwlz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCXN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9DQo+ICAJCXRvX2ludGVsX2Nvbm5lY3Rvcihjb25u X3N0YXRlLT5jb25uZWN0b3IpOw0KPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g dG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsNCj4gQEAgLTYwLDIyICs2MSwyOCBAQCBzdGF0 aWMgaW50IGludGVsX2RwX21zdF9jb21wdXRlX2xpbmtfY29uZmlnKHN0cnVjdA0KPiBpbnRlbF9l bmNvZGVyICplbmNvZGVyLA0KPiAgCWJvb2wgY29uc3RhbnRfbiA9IGRybV9kcF9oYXNfcXVpcmso JmludGVsX2RwLT5kZXNjLA0KPiBEUF9EUENEX1FVSVJLX0NPTlNUQU5UX04pOw0KPiAgCWludCBi cHAsIHNsb3RzID0gLUVJTlZBTDsNCj4gDQo+ICsJbXN0X3N0YXRlID0gZHJtX2F0b21pY19nZXRf bXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCAmaW50ZWxfZHAtDQo+ID5tc3RfbWdyKTsNCj4gKwlp ZiAoSVNfRVJSKG1zdF9zdGF0ZSkpDQo+ICsJCXJldHVybiBQVFJfRVJSKG1zdF9zdGF0ZSk7DQo+ ICsNCj4gIAljcnRjX3N0YXRlLT5sYW5lX2NvdW50ID0gbGltaXRzLT5tYXhfbGFuZV9jb3VudDsN Cj4gIAljcnRjX3N0YXRlLT5wb3J0X2Nsb2NrID0gbGltaXRzLT5tYXhfcmF0ZTsNCj4gDQo+ICsJ Ly8gVE9ETzogSGFuZGxlIHBibl9kaXYgY2hhbmdlcyBieSBhZGRpbmcgYSBuZXcgTVNUIGhlbHBl cg0KPiArCWlmICghbXN0X3N0YXRlLT5wYm5fZGl2KSB7DQo+ICsJCW1zdF9zdGF0ZS0+cGJuX2Rp diA9DQo+IGRybV9kcF9nZXRfdmNfcGF5bG9hZF9idygmaW50ZWxfZHAtPm1zdF9tZ3IsDQo+ICsJ CQkJCQkJICAgICAgbGltaXRzLT5tYXhfcmF0ZSwNCj4gKwkJCQkJCQkgICAgICBsaW1pdHMtDQo+ ID5tYXhfbGFuZV9jb3VudCk7DQo+ICsJfQ0KPiArDQo+ICAJZm9yIChicHAgPSBsaW1pdHMtPm1h eF9icHA7IGJwcCA+PSBsaW1pdHMtPm1pbl9icHA7IGJwcCAtPSAyICogMykgew0KPiAgCQljcnRj X3N0YXRlLT5waXBlX2JwcCA9IGJwcDsNCj4gDQo+ICAJCWNydGNfc3RhdGUtPnBibiA9DQo+IGRy bV9kcF9jYWxjX3Bibl9tb2RlKGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2ssDQo+ICAJCQkJCQkg ICAgICAgY3J0Y19zdGF0ZS0+cGlwZV9icHAsDQo+ICAJCQkJCQkgICAgICAgZmFsc2UpOw0KPiAt DQo+ICAJCXNsb3RzID0gZHJtX2RwX2F0b21pY19maW5kX3RpbWVfc2xvdHMoc3RhdGUsICZpbnRl bF9kcC0NCj4gPm1zdF9tZ3IsDQo+IC0JCQkJCQkgICAgICBjb25uZWN0b3ItPnBvcnQsDQo+IC0J CQkJCQkgICAgICBjcnRjX3N0YXRlLT5wYm4sDQo+IC0NCj4gZHJtX2RwX2dldF92Y19wYXlsb2Fk X2J3KCZpbnRlbF9kcC0+bXN0X21nciwNCj4gLQ0KPiBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLA0K PiAtDQo+IGNydGNfc3RhdGUtPmxhbmVfY291bnQpKTsNCj4gKwkJCQkJCSAgICAgIGNvbm5lY3Rv ci0+cG9ydCwNCj4gY3J0Y19zdGF0ZS0+cGJuKTsNCj4gIAkJaWYgKHNsb3RzID09IC1FREVBRExL KQ0KPiAgCQkJcmV0dXJuIHNsb3RzOw0KPiAgCQlpZiAoc2xvdHMgPj0gMCkNCj4gQEAgLTM2MCwy MSArMzY3LDE3IEBAIHN0YXRpYyB2b2lkIGludGVsX21zdF9kaXNhYmxlX2RwKHN0cnVjdA0KPiBp bnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSAmZGlnX3BvcnQtPmRwOw0KPiAgCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9 DQo+ICAJCXRvX2ludGVsX2Nvbm5lY3RvcihvbGRfY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsNCj4g KwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4gKwkJZHJt X2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKCZzdGF0ZS0+YmFzZSwNCj4gJmludGVsX2Rw LT5tc3RfbWdyKTsNCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUo Y29ubmVjdG9yLT5iYXNlLmRldik7DQo+IC0JaW50IHN0YXJ0X3Nsb3QgPSBpbnRlbF9kcF9pc191 aGJyKG9sZF9jcnRjX3N0YXRlKSA/IDAgOiAxOw0KPiAtCWludCByZXQ7DQo+IA0KPiAgCWRybV9k Ymdfa21zKCZpOTE1LT5kcm0sICJhY3RpdmUgbGlua3MgJWRcbiIsDQo+ICAJCSAgICBpbnRlbF9k cC0+YWN0aXZlX21zdF9saW5rcyk7DQo+IA0KPiAgCWludGVsX2hkY3BfZGlzYWJsZShpbnRlbF9t c3QtPmNvbm5lY3Rvcik7DQo+IA0KPiAtCWRybV9kcF9tc3RfcmVzZXRfdmNwaV9zbG90cygmaW50 ZWxfZHAtPm1zdF9tZ3IsIGNvbm5lY3Rvci0NCj4gPnBvcnQpOw0KPiAtDQo+IC0JcmV0ID0gZHJt X2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKCZpbnRlbF9kcC0+bXN0X21nciwNCj4gc3RhcnRfc2xv dCk7DQo+IC0JaWYgKHJldCkgew0KPiAtCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiZmFpbGVk IHRvIHVwZGF0ZSBwYXlsb2FkICVkXG4iLA0KPiByZXQpOw0KPiAtCX0NCj4gKwlkcm1fZHBfcmVt b3ZlX3BheWxvYWQoJmludGVsX2RwLT5tc3RfbWdyLCBtc3Rfc3RhdGUsDQo+ICsJCQkgICAgICBk cm1fYXRvbWljX2dldF9tc3RfcGF5bG9hZF9zdGF0ZShtc3Rfc3RhdGUsDQo+IGNvbm5lY3Rvci0+ cG9ydCkpOw0KPiANCj4gIAlpbnRlbF9hdWRpb19jb2RlY19kaXNhYmxlKGVuY29kZXIsIG9sZF9j cnRjX3N0YXRlLA0KPiBvbGRfY29ubl9zdGF0ZSk7DQo+ICB9DQo+IEBAIC00MDIsOCArNDA1LDYg QEAgc3RhdGljIHZvaWQgaW50ZWxfbXN0X3Bvc3RfZGlzYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxf YXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gDQo+ICAJaW50ZWxfZGlzYWJsZV90cmFuc2NvZGVyKG9s ZF9jcnRjX3N0YXRlKTsNCj4gDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQyKCZpbnRl bF9kcC0+bXN0X21ncik7DQo+IC0NCj4gIAljbGVhcl9hY3Rfc2VudChlbmNvZGVyLCBvbGRfY3J0 Y19zdGF0ZSk7DQo+IA0KPiAgCWludGVsX2RlX3JtdyhkZXZfcHJpdiwgVFJBTlNfRERJX0ZVTkNf Q1RMKG9sZF9jcnRjX3N0YXRlLQ0KPiA+Y3B1X3RyYW5zY29kZXIpLA0KPiBAQCAtNDExLDggKzQx Miw2IEBAIHN0YXRpYyB2b2lkIGludGVsX21zdF9wb3N0X2Rpc2FibGVfZHAoc3RydWN0DQo+IGlu dGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+IA0KPiAgCXdhaXRfZm9yX2FjdF9zZW50KGVuY29k ZXIsIG9sZF9jcnRjX3N0YXRlKTsNCj4gDQo+IC0JZHJtX2RwX21zdF9kZWFsbG9jYXRlX3ZjcGko JmludGVsX2RwLT5tc3RfbWdyLCBjb25uZWN0b3ItDQo+ID5wb3J0KTsNCj4gLQ0KPiAgCWludGVs X2RkaV9kaXNhYmxlX3RyYW5zY29kZXJfZnVuYyhvbGRfY3J0Y19zdGF0ZSk7DQo+IA0KPiAgCWlm IChESVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gOSkNCj4gQEAgLTQ3OSw3ICs0NzgsOCBAQCBzdGF0 aWMgdm9pZCBpbnRlbF9tc3RfcHJlX2VuYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSwNCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGVuY29kZXItPmJhc2UuZGV2KTsNCj4gIAlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25u ZWN0b3IgPQ0KPiAgCQl0b19pbnRlbF9jb25uZWN0b3IoY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsN Cj4gLQlpbnQgc3RhcnRfc2xvdCA9IGludGVsX2RwX2lzX3VoYnIocGlwZV9jb25maWcpID8gMCA6 IDE7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSA9DQo+ ICsJCWRybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lfc3RhdGUoJnN0YXRlLT5iYXNlLA0K PiAmaW50ZWxfZHAtPm1zdF9tZ3IpOw0KPiAgCWludCByZXQ7DQo+ICAJYm9vbCBmaXJzdF9tc3Rf c3RyZWFtOw0KPiANCj4gQEAgLTUwNSwxNiArNTA1LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX21z dF9wcmVfZW5hYmxlX2RwKHN0cnVjdA0KPiBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAg CQlkaWdfcG9ydC0+YmFzZS5wcmVfZW5hYmxlKHN0YXRlLCAmZGlnX3BvcnQtPmJhc2UsDQo+ICAJ CQkJCQlwaXBlX2NvbmZpZywgTlVMTCk7DQo+IA0KPiAtCXJldCA9IGRybV9kcF9tc3RfYWxsb2Nh dGVfdmNwaSgmaW50ZWxfZHAtPm1zdF9tZ3IsDQo+IC0JCQkJICAgICAgIGNvbm5lY3Rvci0+cG9y dCwNCj4gLQkJCQkgICAgICAgcGlwZV9jb25maWctPnBibiwNCj4gLQkJCQkgICAgICAgcGlwZV9j b25maWctPmRwX21fbi50dSk7DQo+IC0JaWYgKCFyZXQpDQo+IC0JCWRybV9lcnIoJmRldl9wcml2 LT5kcm0sICJmYWlsZWQgdG8gYWxsb2NhdGUgdmNwaVxuIik7DQo+IC0NCj4gIAlpbnRlbF9kcC0+ YWN0aXZlX21zdF9saW5rcysrOw0KPiANCj4gLQlyZXQgPSBkcm1fZHBfdXBkYXRlX3BheWxvYWRf cGFydDEoJmludGVsX2RwLT5tc3RfbWdyLA0KPiBzdGFydF9zbG90KTsNCj4gKwlyZXQgPSBkcm1f ZHBfYWRkX3BheWxvYWRfcGFydDEoJmludGVsX2RwLT5tc3RfbWdyLCBtc3Rfc3RhdGUsDQo+ICsN Cj4gZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUobXN0X3N0YXRlLCBjb25uZWN0b3It PnBvcnQpKTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwg IkZhaWxlZCB0byBjcmVhdGUgTVNUIHBheWxvYWQgZm9yDQo+ICVzOiAlZFxuIiwNCj4gKwkJCWNv bm5lY3Rvci0+YmFzZS5uYW1lLCByZXQpOw0KPiANCj4gIAkvKg0KPiAgCSAqIEJlZm9yZSBHZW4g MTIgdGhpcyBpcyBub3QgZG9uZSBhcyBwYXJ0IG9mDQo+IEBAIC01MzcsNyArNTM0LDEwIEBAIHN0 YXRpYyB2b2lkIGludGVsX21zdF9lbmFibGVfZHAoc3RydWN0DQo+IGludGVsX2F0b21pY19zdGF0 ZSAqc3RhdGUsDQo+ICAJc3RydWN0IGludGVsX2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPSBl bmNfdG9fbXN0KGVuY29kZXIpOw0KPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19w b3J0ID0gaW50ZWxfbXN0LT5wcmltYXJ5Ow0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSAmZGlnX3BvcnQtPmRwOw0KPiArCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9 IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uX3N0YXRlLQ0KPiA+Y29ubmVjdG9yKTsNCj4gIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2 KTsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0NCj4g KwkJZHJtX2F0b21pY19nZXRfbmV3X21zdF90b3BvbG9neV9zdGF0ZSgmc3RhdGUtPmJhc2UsDQo+ ICZpbnRlbF9kcC0+bXN0X21ncik7DQo+ICAJZW51bSB0cmFuc2NvZGVyIHRyYW5zID0gcGlwZV9j b25maWctPmNwdV90cmFuc2NvZGVyOw0KPiANCj4gIAlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRy bSwgcGlwZV9jb25maWctPmhhc19wY2hfZW5jb2Rlcik7DQo+IEBAIC01NjUsNyArNTY1LDggQEAg c3RhdGljIHZvaWQgaW50ZWxfbXN0X2VuYWJsZV9kcChzdHJ1Y3QNCj4gaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSwNCj4gDQo+ICAJd2FpdF9mb3JfYWN0X3NlbnQoZW5jb2RlciwgcGlwZV9jb25m aWcpOw0KPiANCj4gLQlkcm1fZHBfdXBkYXRlX3BheWxvYWRfcGFydDIoJmludGVsX2RwLT5tc3Rf bWdyKTsNCj4gKwlkcm1fZHBfYWRkX3BheWxvYWRfcGFydDIoJmludGVsX2RwLT5tc3RfbWdyLCAm c3RhdGUtPmJhc2UsDQo+ICsNCj4gZHJtX2F0b21pY19nZXRfbXN0X3BheWxvYWRfc3RhdGUobXN0 X3N0YXRlLCBjb25uZWN0b3ItPnBvcnQpKTsNCj4gDQo+ICAJaWYgKERJU1BMQVlfVkVSKGRldl9w cml2KSA+PSAxMiAmJiBwaXBlX2NvbmZpZy0+ZmVjX2VuYWJsZSkNCj4gIAkJaW50ZWxfZGVfcm13 KGRldl9wcml2LCBDSElDS0VOX1RSQU5TKHRyYW5zKSwgMCwNCj4gQEAgLTk0OCw4ICs5NDksNiBA QCBpbnRlbF9kcF9tc3RfZW5jb2Rlcl9pbml0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQNCj4g KmRpZ19wb3J0LCBpbnQgY29ubl9iYXNlX2lkKQ0KPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSAmZGlnX3BvcnQtPmRwOw0KPiAgCWVudW0gcG9ydCBwb3J0ID0gZGlnX3BvcnQtPmJhc2Uu cG9ydDsNCj4gIAlpbnQgcmV0Ow0KPiAtCWludCBtYXhfc291cmNlX3JhdGUgPQ0KPiAtCQlpbnRl bF9kcC0+c291cmNlX3JhdGVzW2ludGVsX2RwLT5udW1fc291cmNlX3JhdGVzIC0gMV07DQo+IA0K PiAgCWlmICghSEFTX0RQX01TVChpOTE1KSB8fCBpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQ0K PiAgCQlyZXR1cm4gMDsNCj4gQEAgLTk2NSwxMCArOTY0LDcgQEAgaW50ZWxfZHBfbXN0X2VuY29k ZXJfaW5pdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0DQo+ICpkaWdfcG9ydCwgaW50IGNvbm5f YmFzZV9pZCkNCj4gIAkvKiBjcmVhdGUgZW5jb2RlcnMgKi8NCj4gIAlpbnRlbF9kcF9jcmVhdGVf ZmFrZV9tc3RfZW5jb2RlcnMoZGlnX3BvcnQpOw0KPiAgCXJldCA9IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyX2luaXQoJmludGVsX2RwLT5tc3RfbWdyLCAmaTkxNS0NCj4gPmRybSwNCj4gLQkJCQkJ ICAgJmludGVsX2RwLT5hdXgsIDE2LCAzLA0KPiAtCQkJCQkgICBkaWdfcG9ydC0+bWF4X2xhbmVz LA0KPiAtCQkJCQkgICBtYXhfc291cmNlX3JhdGUsDQo+IC0JCQkJCSAgIGNvbm5fYmFzZV9pZCk7 DQo+ICsJCQkJCSAgICZpbnRlbF9kcC0+YXV4LCAxNiwgMywNCj4gY29ubl9iYXNlX2lkKTsNCj4g IAlpZiAocmV0KSB7DQo+ICAJCWludGVsX2RwLT5tc3RfbWdyLmNicyA9IE5VTEw7DQo+ICAJCXJl dHVybiByZXQ7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2hkY3AuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfaGRjcC5j DQo+IGluZGV4IDhlYTY2YTJlMWIwOS4uN2RiYzlmMGJiMjRmIDEwMDY0NA0KPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2hkY3AuYw0KPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2hkY3AuYw0KPiBAQCAtMzAsOCArMzAsMzAgQEANCj4g DQo+ICBzdGF0aWMgaW50IGludGVsX2Nvbm5fdG9fdmNwaShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICpjb25uZWN0b3IpDQo+ICB7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICpt Z3I7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQgKnBheWxvYWQ7DQo+ICsJ c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsNCj4gKwlpbnQgdmNw aSA9IDA7DQo+ICsNCj4gIAkvKiBGb3IgSERNSSB0aGlzIGlzIGZvcmNlZCB0byBiZSAweDAuIEZv ciBEUCBTU1QgYWxzbyB0aGlzIGlzIDB4MC4gKi8NCj4gLQlyZXR1cm4gY29ubmVjdG9yLT5wb3J0 CT8gY29ubmVjdG9yLT5wb3J0LT52Y3BpLnZjcGkgOiAwOw0KPiArCWlmICghY29ubmVjdG9yLT5w b3J0KQ0KPiArCQlyZXR1cm4gMDsNCj4gKwltZ3IgPSBjb25uZWN0b3ItPnBvcnQtPm1ncjsNCj4g Kw0KPiArCWRybV9tb2Rlc2V0X2xvY2soJm1nci0+YmFzZS5sb2NrLCBOVUxMKTsNCj4gKwltc3Rf c3RhdGUgPSB0b19kcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKG1nci0+YmFzZS5zdGF0ZSk7DQo+ ICsJcGF5bG9hZCA9IGRybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKG1zdF9zdGF0ZSwN Cj4gY29ubmVjdG9yLT5wb3J0KTsNCj4gKwlpZiAoZHJtX1dBUk5fT04obWdyLT5kZXYsICFwYXls b2FkKSkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwl2Y3BpID0gcGF5bG9hZC0+dmNwaTsNCj4g KwlpZiAoZHJtX1dBUk5fT04obWdyLT5kZXYsIHZjcGkgPCAwKSkgew0KPiArCQl2Y3BpID0gMDsN Cj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArb3V0Og0KPiArCWRybV9tb2Rlc2V0X3VubG9jaygm bWdyLT5iYXNlLmxvY2spOw0KPiArCXJldHVybiB2Y3BpOw0KPiAgfQ0KPiANCj4gIC8qDQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMNCj4gYi9k cml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMNCj4gaW5kZXggNTdmNzRjZmNk ZWJmLi5lOGY0YzgwNmZhMzkgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1 L2Rpc3BudjUwL2Rpc3AuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1 MC9kaXNwLmMNCj4gQEAgLTkzNyw2ICs5MzcsNyBAQCBzdHJ1Y3QgbnY1MF9tc3RvIHsNCj4gIAlz dHJ1Y3QgbnY1MF9oZWFkICpoZWFkOw0KPiAgCXN0cnVjdCBudjUwX21zdGMgKm1zdGM7DQo+ICAJ Ym9vbCBkaXNhYmxlZDsNCj4gKwlib29sIGVuYWJsZWQ7DQo+ICB9Ow0KPiANCj4gIHN0cnVjdCBu b3V2ZWF1X2VuY29kZXIgKm52NTBfcmVhbF9vdXRwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikNCj4gQEAgLTk1Miw1NyArOTUzLDM3IEBAIHN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52NTBf cmVhbF9vdXRwKHN0cnVjdA0KPiBkcm1fZW5jb2RlciAqZW5jb2RlcikNCj4gIAlyZXR1cm4gbXN0 by0+bXN0Yy0+bXN0bS0+b3V0cDsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgc3RydWN0IGRybV9kcF9w YXlsb2FkICoNCj4gLW52NTBfbXN0b19wYXlsb2FkKHN0cnVjdCBudjUwX21zdG8gKm1zdG8pDQo+ IC17DQo+IC0Jc3RydWN0IG5vdXZlYXVfZHJtICpkcm0gPSBub3V2ZWF1X2RybShtc3RvLT5lbmNv ZGVyLmRldik7DQo+IC0Jc3RydWN0IG52NTBfbXN0YyAqbXN0YyA9IG1zdG8tPm1zdGM7DQo+IC0J c3RydWN0IG52NTBfbXN0bSAqbXN0bSA9IG1zdGMtPm1zdG07DQo+IC0JaW50IHZjcGkgPSBtc3Rj LT5wb3J0LT52Y3BpLnZjcGksIGk7DQo+IC0NCj4gLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQo Jm1zdG0tPm1nci5wYXlsb2FkX2xvY2spKTsNCj4gLQ0KPiAtCU5WX0FUT01JQyhkcm0sICIlczog dmNwaSAlZFxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lLCB2Y3BpKTsNCj4gLQlmb3IgKGkgPSAwOyBp IDwgbXN0bS0+bWdyLm1heF9wYXlsb2FkczsgaSsrKSB7DQo+IC0JCXN0cnVjdCBkcm1fZHBfcGF5 bG9hZCAqcGF5bG9hZCA9ICZtc3RtLT5tZ3IucGF5bG9hZHNbaV07DQo+IC0JCU5WX0FUT01JQyhk cm0sICIlczogJWQ6IHZjcGkgJWQgc3RhcnQgMHglMDJ4IHNsb3RzDQo+IDB4JTAyeFxuIiwNCj4g LQkJCSAgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLm5hbWUsIGksIHBheWxvYWQtPnZjcGksDQo+IC0J CQkgIHBheWxvYWQtPnN0YXJ0X3Nsb3QsIHBheWxvYWQtPm51bV9zbG90cyk7DQo+IC0JfQ0KPiAt DQo+IC0JZm9yIChpID0gMDsgaSA8IG1zdG0tPm1nci5tYXhfcGF5bG9hZHM7IGkrKykgew0KPiAt CQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPSAmbXN0bS0+bWdyLnBheWxvYWRzW2ld Ow0KPiAtCQlpZiAocGF5bG9hZC0+dmNwaSA9PSB2Y3BpKQ0KPiAtCQkJcmV0dXJuIHBheWxvYWQ7 DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIE5VTEw7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyB2b2lk DQo+IC1udjUwX21zdG9fY2xlYW51cChzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiArbnY1MF9t c3RvX2NsZWFudXAoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiArCQkgIHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCSAgc3RydWN0IG52NTBfbXN0byAqbXN0 bykNCj4gIHsNCj4gIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKG1zdG8t PmVuY29kZXIuZGV2KTsNCj4gLQlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsN Cj4gLQlzdHJ1Y3QgbnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gLQ0KPiAtCWlmICgh bXN0by0+ZGlzYWJsZWQpDQo+IC0JCXJldHVybjsNCj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9hdG9t aWNfcGF5bG9hZCAqcGF5bG9hZCA9DQo+ICsJCWRybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0 YXRlKG1zdF9zdGF0ZSwgbXN0by0NCj4gPm1zdGMtPnBvcnQpOw0KPiANCj4gIAlOVl9BVE9NSUMo ZHJtLCAiJXM6IG1zdG8gY2xlYW51cFxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lKTsNCj4gDQo+IC0J ZHJtX2RwX21zdF9kZWFsbG9jYXRlX3ZjcGkoJm1zdG0tPm1nciwgbXN0Yy0+cG9ydCk7DQo+IC0N Cj4gLQltc3RvLT5tc3RjID0gTlVMTDsNCj4gLQltc3RvLT5kaXNhYmxlZCA9IGZhbHNlOw0KPiAr CWlmIChtc3RvLT5kaXNhYmxlZCkgew0KPiArCQltc3RvLT5tc3RjID0gTlVMTDsNCj4gKwkJbXN0 by0+ZGlzYWJsZWQgPSBmYWxzZTsNCj4gKwl9IGVsc2UgaWYgKG1zdG8tPmVuYWJsZWQpIHsNCj4g KwkJZHJtX2RwX2FkZF9wYXlsb2FkX3BhcnQyKG1nciwgc3RhdGUsIHBheWxvYWQpOw0KPiArCQlt c3RvLT5lbmFibGVkID0gZmFsc2U7DQo+ICsJfQ0KPiAgfQ0KPiANCj4gIHN0YXRpYyB2b2lkDQo+ IC1udjUwX21zdG9fcHJlcGFyZShzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiArbnY1MF9tc3Rv X3ByZXBhcmUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiArCQkgIHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+ICsJCSAgc3RydWN0IG52NTBfbXN0byAqbXN0bykN Cj4gIHsNCj4gIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKG1zdG8tPmVu Y29kZXIuZGV2KTsNCj4gIAlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4g IAlzdHJ1Y3QgbnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9hdG9taWNfcGF5bG9hZCAqcGF5bG9hZDsNCj4gIAlzdHJ1Y3Qgew0KPiAgCQlzdHJ1Y3Qg bnY1MF9kaXNwX210aGRfdjEgYmFzZTsNCj4gIAkJc3RydWN0IG52NTBfZGlzcF9zb3JfZHBfbXN0 X3ZjcGlfdjAgdmNwaTsNCj4gQEAgLTEwMTQsMTcgKzk5NSwyMSBAQCBudjUwX21zdG9fcHJlcGFy ZShzdHJ1Y3QgbnY1MF9tc3RvICptc3RvKQ0KPiAgCQkJICAgICAgICgweDAxMDAgPDwgbXN0by0+ aGVhZC0+YmFzZS5pbmRleCksDQo+ICAJfTsNCj4gDQo+IC0JbXV0ZXhfbG9jaygmbXN0bS0+bWdy LnBheWxvYWRfbG9jayk7DQo+IC0NCj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6IG1zdG8gcHJlcGFy ZVxuIiwgbXN0by0+ZW5jb2Rlci5uYW1lKTsNCj4gLQlpZiAobXN0Yy0+cG9ydC0+dmNwaS52Y3Bp ID4gMCkgew0KPiAtCQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWQgPQ0KPiBudjUwX21z dG9fcGF5bG9hZChtc3RvKTsNCj4gLQkJaWYgKHBheWxvYWQpIHsNCj4gLQkJCWFyZ3MudmNwaS5z dGFydF9zbG90ID0gcGF5bG9hZC0+c3RhcnRfc2xvdDsNCj4gLQkJCWFyZ3MudmNwaS5udW1fc2xv dHMgPSBwYXlsb2FkLT5udW1fc2xvdHM7DQo+IC0JCQlhcmdzLnZjcGkucGJuID0gbXN0Yy0+cG9y dC0+dmNwaS5wYm47DQo+IC0JCQlhcmdzLnZjcGkuYWxpZ25lZF9wYm4gPSBtc3RjLT5wb3J0LQ0K PiA+dmNwaS5hbGlnbmVkX3BibjsNCj4gLQkJfQ0KPiArDQo+ICsJcGF5bG9hZCA9IGRybV9hdG9t aWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKG1zdF9zdGF0ZSwgbXN0Yy0NCj4gPnBvcnQpOw0KPiAr DQo+ICsJLy8gVE9ETzogRmlndXJlIG91dCBpZiB3ZSB3YW50IHRvIGRvIGEgYmV0dGVyIGpvYiBv ZiBoYW5kbGluZyBWQ1BJDQo+IGFsbG9jYXRpb24gZmFpbHVyZXMgaGVyZT8NCj4gKwlpZiAobXN0 by0+ZGlzYWJsZWQpIHsNCj4gKwkJZHJtX2RwX3JlbW92ZV9wYXlsb2FkKG1nciwgbXN0X3N0YXRl LCBwYXlsb2FkKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpZiAobXN0by0+ZW5hYmxlZCkNCj4gKwkJ CWRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MShtZ3IsIG1zdF9zdGF0ZSwNCj4gcGF5bG9hZCk7DQo+ ICsNCj4gKwkJYXJncy52Y3BpLnN0YXJ0X3Nsb3QgPSBwYXlsb2FkLT52Y19zdGFydF9zbG90Ow0K PiArCQlhcmdzLnZjcGkubnVtX3Nsb3RzID0gcGF5bG9hZC0+dGltZV9zbG90czsNCj4gKwkJYXJn cy52Y3BpLnBibiA9IHBheWxvYWQtPnBibjsNCj4gKwkJYXJncy52Y3BpLmFsaWduZWRfcGJuID0g cGF5bG9hZC0+dGltZV9zbG90cyAqIG1zdF9zdGF0ZS0NCj4gPnBibl9kaXY7DQo+ICAJfQ0KPiAN Cj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6ICVzOiAlMDJ4ICUwMnggJTA0eCAlMDR4XG4iLA0KPiBA QCAtMTAzMyw3ICsxMDE4LDYgQEAgbnY1MF9tc3RvX3ByZXBhcmUoc3RydWN0IG52NTBfbXN0byAq bXN0bykNCj4gIAkJICBhcmdzLnZjcGkucGJuLCBhcmdzLnZjcGkuYWxpZ25lZF9wYm4pOw0KPiAN Cj4gIAludmlmX210aGQoJmRybS0+ZGlzcGxheS0+ZGlzcC5vYmplY3QsIDAsICZhcmdzLCBzaXpl b2YoYXJncykpOw0KPiAtCW11dGV4X3VubG9jaygmbXN0bS0+bWdyLnBheWxvYWRfbG9jayk7DQo+ ICB9DQo+IA0KPiAgc3RhdGljIGludA0KPiBAQCAtMTA0Myw2ICsxMDI3LDcgQEAgbnY1MF9tc3Rv X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXINCj4gKmVuY29kZXIsDQo+ICB7DQo+ICAJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY3J0Y19zdGF0ZS0+c3RhdGU7DQo+ICAJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5fc3RhdGUtPmNvbm5lY3RvcjsN Cj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOw0KPiAgCXN0 cnVjdCBudjUwX21zdGMgKm1zdGMgPSBudjUwX21zdGMoY29ubmVjdG9yKTsNCj4gIAlzdHJ1Y3Qg bnY1MF9tc3RtICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gIAlzdHJ1Y3QgbnY1MF9oZWFkX2F0b20g KmFzeWggPSBudjUwX2hlYWRfYXRvbShjcnRjX3N0YXRlKTsNCj4gQEAgLTEwNzAsOCArMTA1NSwx OCBAQCBudjUwX21zdG9fYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2Rlcg0KPiAqZW5jb2Rl ciwNCj4gIAkJCQkJCSAgICBmYWxzZSk7DQo+ICAJfQ0KPiANCj4gLQlzbG90cyA9IGRybV9kcF9h dG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCAmbXN0bS0+bWdyLCBtc3RjLQ0KPiA+cG9ydCwN Cj4gLQkJCQkJICAgICAgYXN5aC0+ZHAucGJuLCAwKTsNCj4gKwltc3Rfc3RhdGUgPSBkcm1fYXRv bWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUsICZtc3RtLQ0KPiA+bWdyKTsNCj4gKwlp ZiAoSVNfRVJSKG1zdF9zdGF0ZSkpDQo+ICsJCXJldHVybiBQVFJfRVJSKG1zdF9zdGF0ZSk7DQo+ ICsNCj4gKwlpZiAoIW1zdF9zdGF0ZS0+cGJuX2Rpdikgew0KPiArCQlzdHJ1Y3Qgbm91dmVhdV9l bmNvZGVyICpvdXRwID0gbXN0Yy0+bXN0bS0+b3V0cDsNCj4gKw0KPiArCQltc3Rfc3RhdGUtPnBi bl9kaXYgPQ0KPiBkcm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncoJm1zdG0tPm1nciwNCj4gKwkJCQkJ CQkgICAgICBvdXRwLT5kcC5saW5rX2J3LA0KPiBvdXRwLT5kcC5saW5rX25yKTsNCj4gKwl9DQo+ ICsNCj4gKwlzbG90cyA9IGRybV9kcF9hdG9taWNfZmluZF90aW1lX3Nsb3RzKHN0YXRlLCAmbXN0 bS0+bWdyLCBtc3RjLQ0KPiA+cG9ydCwgYXN5aC0+ZHAucGJuKTsNCj4gIAlpZiAoc2xvdHMgPCAw KQ0KPiAgCQlyZXR1cm4gc2xvdHM7DQo+IA0KPiBAQCAtMTEwMyw3ICsxMDk4LDYgQEAgbnY1MF9t c3RvX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyDQo+ICplbmNvZGVyLCBzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3QNCj4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y Ow0KPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7DQo+ICAJdTgg cHJvdG87DQo+IC0JYm9vbCByOw0KPiANCj4gIAlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdp bihlbmNvZGVyLT5kZXYsICZjb25uX2l0ZXIpOw0KPiAgCWRybV9mb3JfZWFjaF9jb25uZWN0b3Jf aXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsNCj4gQEAgLTExMTgsMTAgKzExMTIsNiBAQCBu djUwX21zdG9fYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXINCj4gKmVuY29kZXIsIHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdA0KPiAgCWlmIChXQVJOX09OKCFtc3RjKSkNCj4gIAkJ cmV0dXJuOw0KPiANCj4gLQlyID0gZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKCZtc3RtLT5tZ3Is IG1zdGMtPnBvcnQsIGFzeWgtDQo+ID5kcC5wYm4sIGFzeWgtPmRwLnR1KTsNCj4gLQlpZiAoIXIp DQo+IC0JCURSTV9ERUJVR19LTVMoIkZhaWxlZCB0byBhbGxvY2F0ZSBWQ1BJXG4iKTsNCj4gLQ0K PiAgCWlmICghbXN0bS0+bGlua3MrKykNCj4gIAkJbnY1MF9vdXRwX2FjcXVpcmUobXN0bS0+b3V0 cCwgZmFsc2UgLypYWFg6IE1TVCBhdWRpby4qLyk7DQo+IA0KPiBAQCAtMTEzNCw2ICsxMTI0LDcg QEAgbnY1MF9tc3RvX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyDQo+ICplbmNvZGVy LCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3QNCj4gIAkJCSAgIG52NTBfZHBfYnBjX3RvX2Rl cHRoKGFzeWgtPm9yLmJwYykpOw0KPiANCj4gIAltc3RvLT5tc3RjID0gbXN0YzsNCj4gKwltc3Rv LT5lbmFibGVkID0gdHJ1ZTsNCj4gIAltc3RtLT5tb2RpZmllZCA9IHRydWU7DQo+ICB9DQo+IA0K PiBAQCAtMTE0NCw4ICsxMTM1LDYgQEAgbnY1MF9tc3RvX2F0b21pY19kaXNhYmxlKHN0cnVjdCBk cm1fZW5jb2Rlcg0KPiAqZW5jb2Rlciwgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnMNCj4gIAlz dHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4gIAlzdHJ1Y3QgbnY1MF9tc3Rt ICptc3RtID0gbXN0Yy0+bXN0bTsNCj4gDQo+IC0JZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3Rz KCZtc3RtLT5tZ3IsIG1zdGMtPnBvcnQpOw0KPiAtDQo+ICAJbXN0bS0+b3V0cC0+dXBkYXRlKG1z dG0tPm91dHAsIG1zdG8tPmhlYWQtPmJhc2UuaW5kZXgsIE5VTEwsDQo+IDAsIDApOw0KPiAgCW1z dG0tPm1vZGlmaWVkID0gdHJ1ZTsNCj4gIAlpZiAoIS0tbXN0bS0+bGlua3MpDQo+IEBAIC0xMzY1 LDcgKzEzNTQsOSBAQCBudjUwX21zdGNfbmV3KHN0cnVjdCBudjUwX21zdG0gKm1zdG0sIHN0cnVj dA0KPiBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsDQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQNCj4g LW52NTBfbXN0bV9jbGVhbnVwKHN0cnVjdCBudjUwX21zdG0gKm1zdG0pDQo+ICtudjUwX21zdG1f Y2xlYW51cChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSwNCj4gKwkJICBzdHJ1Y3QgbnY1MF9t c3RtICptc3RtKQ0KPiAgew0KPiAgCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gbm91dmVhdV9k cm0obXN0bS0+b3V0cC0NCj4gPmJhc2UuYmFzZS5kZXYpOw0KPiAgCXN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcjsNCj4gQEAgLTEzNzMsMTQgKzEzNjQsMTIgQEAgbnY1MF9tc3RtX2NsZWFudXAo c3RydWN0IG52NTBfbXN0bSAqbXN0bSkNCj4gIAlOVl9BVE9NSUMoZHJtLCAiJXM6IG1zdG0gY2xl YW51cFxuIiwgbXN0bS0+b3V0cC0NCj4gPmJhc2UuYmFzZS5uYW1lKTsNCj4gIAlkcm1fZHBfY2hl Y2tfYWN0X3N0YXR1cygmbXN0bS0+bWdyKTsNCj4gDQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2Fk X3BhcnQyKCZtc3RtLT5tZ3IpOw0KPiAtDQo+ICAJZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2Rl ciwgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLmRldikgew0KPiAgCQlpZiAoZW5jb2Rlci0+ZW5jb2Rl cl90eXBlID09DQo+IERSTV9NT0RFX0VOQ09ERVJfRFBNU1QpIHsNCj4gIAkJCXN0cnVjdCBudjUw X21zdG8gKm1zdG8gPSBudjUwX21zdG8oZW5jb2Rlcik7DQo+ICAJCQlzdHJ1Y3QgbnY1MF9tc3Rj ICptc3RjID0gbXN0by0+bXN0YzsNCj4gIAkJCWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0 bSkNCj4gLQkJCQludjUwX21zdG9fY2xlYW51cChtc3RvKTsNCj4gKwkJCQludjUwX21zdG9fY2xl YW51cChzdGF0ZSwgbXN0X3N0YXRlLA0KPiAmbXN0bS0+bWdyLCBtc3RvKTsNCj4gIAkJfQ0KPiAg CX0NCj4gDQo+IEBAIC0xMzg4LDIwICsxMzc3LDM0IEBAIG52NTBfbXN0bV9jbGVhbnVwKHN0cnVj dCBudjUwX21zdG0gKm1zdG0pDQo+ICB9DQo+IA0KPiAgc3RhdGljIHZvaWQNCj4gLW52NTBfbXN0 bV9wcmVwYXJlKHN0cnVjdCBudjUwX21zdG0gKm1zdG0pDQo+ICtudjUwX21zdG1fcHJlcGFyZShz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICsJCSAgc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSwNCj4gKwkJICBzdHJ1Y3QgbnY1MF9tc3RtICptc3Rt KQ0KPiAgew0KPiAgCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gbm91dmVhdV9kcm0obXN0bS0+ b3V0cC0NCj4gPmJhc2UuYmFzZS5kZXYpOw0KPiAgCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cjsNCj4gDQo+ICAJTlZfQVRPTUlDKGRybSwgIiVzOiBtc3RtIHByZXBhcmVcbiIsIG1zdG0tPm91 dHAtDQo+ID5iYXNlLmJhc2UubmFtZSk7DQo+IC0JZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQx KCZtc3RtLT5tZ3IsIDEpOw0KPiANCj4gKwkvKiBEaXNhYmxlIHBheWxvYWRzIGZpcnN0ICovDQo+ ICAJZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2RlciwgbXN0bS0+b3V0cC0+YmFzZS5iYXNlLmRl dikgew0KPiAgCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID09DQo+IERSTV9NT0RFX0VOQ09E RVJfRFBNU1QpIHsNCj4gIAkJCXN0cnVjdCBudjUwX21zdG8gKm1zdG8gPSBudjUwX21zdG8oZW5j b2Rlcik7DQo+ICAJCQlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbXN0by0+bXN0YzsNCj4gLQkJ CWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0bSkNCj4gLQkJCQludjUwX21zdG9fcHJlcGFy ZShtc3RvKTsNCj4gKwkJCWlmIChtc3RjICYmIG1zdGMtPm1zdG0gPT0gbXN0bSAmJiBtc3RvLT5k aXNhYmxlZCkNCj4gKwkJCQludjUwX21zdG9fcHJlcGFyZShzdGF0ZSwgbXN0X3N0YXRlLA0KPiAm bXN0bS0+bWdyLCBtc3RvKTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCS8qIEFkZCBwYXlsb2Fk cyBmb3IgbmV3IGhlYWRzLCB3aGlsZSBhbHNvIHVwZGF0aW5nIHRoZSBzdGFydCBzbG90cyBvZg0K PiBhbnkgdW5tb2RpZmllZCAoYnV0DQo+ICsJICogYWN0aXZlKSBoZWFkcyB0aGF0IG1heSBoYXZl IGhhZCB0aGVpciBWQyBzbG90cyBzaGlmdGVkIGxlZnQgYWZ0ZXIgdGhlDQo+IHByZXZpb3VzIHN0 ZXANCj4gKwkgKi8NCj4gKwlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBtc3RtLT5vdXRw LT5iYXNlLmJhc2UuZGV2KSB7DQo+ICsJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgPT0NCj4g RFJNX01PREVfRU5DT0RFUl9EUE1TVCkgew0KPiArCQkJc3RydWN0IG52NTBfbXN0byAqbXN0byA9 IG52NTBfbXN0byhlbmNvZGVyKTsNCj4gKwkJCXN0cnVjdCBudjUwX21zdGMgKm1zdGMgPSBtc3Rv LT5tc3RjOw0KPiArCQkJaWYgKG1zdGMgJiYgbXN0Yy0+bXN0bSA9PSBtc3RtICYmICFtc3RvLQ0K PiA+ZGlzYWJsZWQpDQo+ICsJCQkJbnY1MF9tc3RvX3ByZXBhcmUoc3RhdGUsIG1zdF9zdGF0ZSwN Cj4gJm1zdG0tPm1nciwgbXN0byk7DQo+ICAJCX0NCj4gIAl9DQo+IA0KPiBAQCAtMTU5OCw5ICsx NjAxLDcgQEAgbnY1MF9tc3RtX25ldyhzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpvdXRwLA0KPiBz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBpbnQgYXV4X21heCwNCj4gIAltc3RtLT5tZ3IuY2JzID0g Jm52NTBfbXN0bTsNCj4gDQo+ICAJcmV0ID0gZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdCgm bXN0bS0+bWdyLCBkZXYsIGF1eCwNCj4gYXV4X21heCwNCj4gLQkJCQkJICAgbWF4X3BheWxvYWRz LCBvdXRwLT5kY2ItDQo+ID5kcGNvbmYubGlua19uciwNCj4gLQ0KPiBkcm1fZHBfYndfY29kZV90 b19saW5rX3JhdGUob3V0cC0+ZGNiLT5kcGNvbmYubGlua19idyksDQo+IC0JCQkJCSAgIGNvbm5f YmFzZV9pZCk7DQo+ICsJCQkJCSAgIG1heF9wYXlsb2FkcywgY29ubl9iYXNlX2lkKTsNCj4gIAlp ZiAocmV0KQ0KPiAgCQlyZXR1cm4gcmV0Ow0KPiANCj4gQEAgLTIwNDUsMjAgKzIwNDYsMjAgQEAg bnY1MF9waW9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcg0KPiAqY29ubmVjdG9yLCBzdHJ1 Y3QgZGNiX291dHB1dCAqZGNiZSkNCj4gIHN0YXRpYyB2b2lkDQo+ICBudjUwX2Rpc3BfYXRvbWlj X2NvbW1pdF9jb3JlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwgdTMyDQo+ICppbnRl cmxvY2spDQo+ICB7DQo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7DQo+ ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsNCj4gIAlzdHJ1 Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKHN0YXRlLT5kZXYpOw0KPiAgCXN0cnVj dCBudjUwX2Rpc3AgKmRpc3AgPSBudjUwX2Rpc3AoZHJtLT5kZXYpOw0KPiAgCXN0cnVjdCBudjUw X2NvcmUgKmNvcmUgPSBkaXNwLT5jb3JlOw0KPiAgCXN0cnVjdCBudjUwX21zdG0gKm1zdG07DQo+ IC0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOw0KPiArCWludCBpOw0KPiANCj4gIAlOVl9B VE9NSUMoZHJtLCAiY29tbWl0IGNvcmUgJTA4eFxuIiwNCj4gaW50ZXJsb2NrW05WNTBfRElTUF9J TlRFUkxPQ0tfQkFTRV0pOw0KPiANCj4gLQlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBk cm0tPmRldikgew0KPiAtCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9DQo+IERSTV9NT0RF X0VOQ09ERVJfRFBNU1QpIHsNCj4gLQkJCW1zdG0gPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcikt PmRwLm1zdG07DQo+IC0JCQlpZiAobXN0bSAmJiBtc3RtLT5tb2RpZmllZCkNCj4gLQkJCQludjUw X21zdG1fcHJlcGFyZShtc3RtKTsNCj4gLQkJfQ0KPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2lu X3N0YXRlKHN0YXRlLCBtZ3IsIG1zdF9zdGF0ZSwgaSkgew0KPiArCQltc3RtID0gbnY1MF9tc3Rt KG1ncik7DQo+ICsJCWlmIChtc3RtLT5tb2RpZmllZCkNCj4gKwkJCW52NTBfbXN0bV9wcmVwYXJl KHN0YXRlLCBtc3Rfc3RhdGUsIG1zdG0pOw0KPiAgCX0NCj4gDQo+ICAJY29yZS0+ZnVuYy0+bnRm eV9pbml0KGRpc3AtPnN5bmMsIE5WNTBfRElTUF9DT1JFX05URlkpOw0KPiBAQCAtMjA2NywxMiAr MjA2OCwxMCBAQCBudjUwX2Rpc3BfYXRvbWljX2NvbW1pdF9jb3JlKHN0cnVjdA0KPiBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwgdTMyICppbnRlcmxvY2spDQo+ICAJCQkJICAgICAgIGRpc3AtPmNv cmUtPmNoYW4uYmFzZS5kZXZpY2UpKQ0KPiAgCQlOVl9FUlJPUihkcm0sICJjb3JlIG5vdGlmaWVy IHRpbWVvdXRcbiIpOw0KPiANCj4gLQlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBkcm0t PmRldikgew0KPiAtCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9DQo+IERSTV9NT0RFX0VO Q09ERVJfRFBNU1QpIHsNCj4gLQkJCW1zdG0gPSBub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPmRw Lm1zdG07DQo+IC0JCQlpZiAobXN0bSAmJiBtc3RtLT5tb2RpZmllZCkNCj4gLQkJCQludjUwX21z dG1fY2xlYW51cChtc3RtKTsNCj4gLQkJfQ0KPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2luX3N0 YXRlKHN0YXRlLCBtZ3IsIG1zdF9zdGF0ZSwgaSkgew0KPiArCQltc3RtID0gbnY1MF9tc3RtKG1n cik7DQo+ICsJCWlmIChtc3RtLT5tb2RpZmllZCkNCj4gKwkJCW52NTBfbXN0bV9jbGVhbnVwKHN0 YXRlLCBtc3Rfc3RhdGUsIG1zdG0pOw0KPiAgCX0NCj4gIH0NCj4gDQo+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4gYi9pbmNsdWRlL2RybS9k aXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4gaW5kZXggZWNkMTMwMDI4MzM3Li42MzE3ODMx NzA1YWIgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF9oZWxw ZXIuaA0KPiArKysgYi9pbmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9tc3RfaGVscGVyLmgNCj4g QEAgLTQ4LDIwICs0OCw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl9oaXN0b3J5 IHsNCj4gDQo+ICBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2g7DQo+IA0KPiAtLyoqDQo+IC0gKiBz dHJ1Y3QgZHJtX2RwX3ZjcGkgLSBWaXJ0dWFsIENoYW5uZWwgUGF5bG9hZCBJZGVudGlmaWVyDQo+ IC0gKiBAdmNwaTogVmlydHVhbCBjaGFubmVsIElELg0KPiAtICogQHBibjogUGF5bG9hZCBCYW5k d2lkdGggTnVtYmVyIGZvciB0aGlzIGNoYW5uZWwNCj4gLSAqIEBhbGlnbmVkX3BibjogUEJOIGFs aWduZWQgd2l0aCBzbG90IHNpemUNCj4gLSAqIEBudW1fc2xvdHM6IG51bWJlciBvZiBzbG90cyBm b3IgdGhpcyBQQk4NCj4gLSAqLw0KPiAtc3RydWN0IGRybV9kcF92Y3BpIHsNCj4gLQlpbnQgdmNw aTsNCj4gLQlpbnQgcGJuOw0KPiAtCWludCBhbGlnbmVkX3BibjsNCj4gLQlpbnQgbnVtX3Nsb3Rz Ow0KPiAtfTsNCj4gLQ0KPiAgLyoqDQo+ICAgKiBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IC0gTVNU IHBvcnQNCj4gICAqIEBwb3J0X251bTogcG9ydCBudW1iZXINCj4gQEAgLTE0Miw3ICsxMjgsNiBA QCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHsNCj4gIAlzdHJ1Y3QgZHJtX2RwX2F1eCBhdXg7IC8q IGkyYyBidXMgZm9yIHRoaXMgcG9ydD8gKi8NCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg KnBhcmVudDsNCj4gDQo+IC0Jc3RydWN0IGRybV9kcF92Y3BpIHZjcGk7DQo+ICAJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsNCj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1ncjsNCj4gDQo+IEBAIC01MjcsMTkgKzUxMiw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X2NicyB7DQo+ICAJdm9pZCAoKnBvbGxfaHBkX2lycSkoc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IpOw0KPiAgfTsNCj4gDQo+IC0jZGVmaW5lIERQX01BWF9QQVlMT0FE IChzaXplb2YodW5zaWduZWQgbG9uZykgKiA4KQ0KPiAtDQo+IC0jZGVmaW5lIERQX1BBWUxPQURf TE9DQUwgMQ0KPiAtI2RlZmluZSBEUF9QQVlMT0FEX1JFTU9URSAyDQo+IC0jZGVmaW5lIERQX1BB WUxPQURfREVMRVRFX0xPQ0FMIDMNCj4gLQ0KPiAtc3RydWN0IGRybV9kcF9wYXlsb2FkIHsNCj4g LQlpbnQgcGF5bG9hZF9zdGF0ZTsNCj4gLQlpbnQgc3RhcnRfc2xvdDsNCj4gLQlpbnQgbnVtX3Ns b3RzOw0KPiAtCWludCB2Y3BpOw0KPiAtfTsNCj4gLQ0KPiAgI2RlZmluZSB0b19kcF9tc3RfdG9w b2xvZ3lfc3RhdGUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdA0KPiBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlLCBiYXNlKQ0KPiANCj4gIC8qKg0KPiBAQCAtNTUxLDYgKzUyMywzNSBAQCBzdHJ1 Y3QgZHJtX2RwX3BheWxvYWQgew0KPiAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxvYWQg ew0KPiAgCS8qKiBAcG9ydDogVGhlIE1TVCBwb3J0IGFzc2lnbmVkIHRvIHRoaXMgcGF5bG9hZCAq Lw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7DQo+ICsNCj4gKwkvKioNCj4gKwkg KiBAdmNfc3RhcnRfc2xvdDogVGhlIHRpbWUgc2xvdCB0aGF0IHRoaXMgcGF5bG9hZCBzdGFydHMg b24uIEJlY2F1c2UNCj4gcGF5bG9hZCBzdGFydCBzbG90cw0KPiArCSAqIGNhbid0IGJlIGRldGVy bWluZWQgYWhlYWQgb2YgdGltZSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdmFsdWUgYXJlDQo+IFVO REVGSU5FRCBhdCBhdG9taWMNCj4gKwkgKiBjaGVjayB0aW1lLiBUaGlzIHNob3VsZG4ndCB1c3Vh bGx5IG1hdHRlciwgYXMgdGhlIHN0YXJ0IHNsb3Qgc2hvdWxkDQo+IG5ldmVyIGJlIHJlbGV2YW50 IGZvcg0KPiArCSAqIGF0b21pYyBzdGF0ZSBjb21wdXRhdGlvbnMuDQo+ICsJICoNCj4gKwkgKiBT aW5jZSB0aGlzIHZhbHVlIGlzIGRldGVybWluZWQgYXQgY29tbWl0IHRpbWUgaW5zdGVhZCBvZiBj aGVjaw0KPiB0aW1lLCB0aGlzIHZhbHVlIGlzDQo+ICsJICogcHJvdGVjdGVkIGJ5IHRoZSBNU1Qg aGVscGVycyBlbnN1cmluZyB0aGF0IGFzeW5jIGNvbW1pdHMNCj4gb3BlcmF0aW5nIG9uIHRoZSBn aXZlbiB0b3BvbG9neQ0KPiArCSAqIG5ldmVyIHJ1biBpbiBwYXJhbGxlbC4gSW4gdGhlIGV2ZW50 IHRoYXQgYSBkcml2ZXIgZG9lcyBuZWVkIHRvIHJlYWQNCj4gdGhpcyB2YWx1ZSAoZS5nLiB0bw0K PiArCSAqIGluZm9ybSBoYXJkd2FyZSBvZiB0aGUgc3RhcnRpbmcgdGltZXNsb3QgZm9yIGEgcGF5 bG9hZCksIHRoZSBkcml2ZXINCj4gbWF5IGVpdGhlcjoNCj4gKwkgKg0KPiArCSAqICogUmVhZCB0 aGlzIGZpZWxkIGR1cmluZyB0aGUgYXRvbWljIGNvbW1pdCBhZnRlcg0KPiArCSAqICAgZHJtX2Rw X21zdF9hdG9taWNfd2FpdF9mb3JfZGVwZW5kZW5jaWVzKCkgaGFzIGJlZW4gY2FsbGVkLA0KPiB3 aGljaCB3aWxsIGVuc3VyZSB0aGUNCj4gKwkgKiAgIHByZXZpb3VzIE1TVCBzdGF0ZXMgcGF5bG9h ZCBzdGFydCBzbG90cyBoYXZlIGJlZW4gY29waWVkIG92ZXIgdG8NCj4gdGhlIG5ldyBzdGF0ZS4g Tm90ZQ0KPiArCSAqICAgdGhhdCBhIG5ldyBzdGFydCBzbG90IHdvbid0IGJlIGFzc2lnbmVkL3Jl bW92ZWQgZnJvbSB0aGlzDQo+IHBheWxvYWQgdW50aWwNCj4gKwkgKiAgIGRybV9kcF9hZGRfcGF5 bG9hZF9wYXJ0MSgpL2RybV9kcF9yZW1vdmVfcGF5bG9hZCgpIGhhdmUNCj4gYmVlbiBjYWxsZWQu DQo+ICsJICogKiBBY3F1aXJlIHRoZSBNU1QgbW9kZXNldHRpbmcgbG9jaywgYW5kIHRoZW4gd2Fp dCBmb3IgYW55DQo+IHBlbmRpbmcgTVNULXJlbGF0ZWQgY29tbWl0cyB0bw0KPiArCSAqICAgZ2V0 IGNvbW1pdHRlZCB0byBoYXJkd2FyZSBieSBjYWxsaW5nIGRybV9jcnRjX2NvbW1pdF93YWl0KCkg b24NCj4gZWFjaCBvZiB0aGUNCj4gKwkgKiAgICZkcm1fY3J0Y19jb21taXQgc3RydWN0cyBpbg0K PiAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS5jb21taXRfZGVwcy4NCj4gKwkgKg0KPiArCSAq IElmIG5laXRoZXIgb2YgdGhlIHR3byBhYm92ZSBzb2x1dGlvbnMgc3VmZmljZSAoZS5nLiB0aGUg ZHJpdmVyIG5lZWRzDQo+IHRvIHJlYWQgdGhlIHN0YXJ0DQo+ICsJICogc2xvdCBpbiB0aGUgbWlk ZGxlIG9mIGFuIGF0b21pYyBjb21taXQgd2l0aG91dCB3YWl0aW5nIGZvciBzb21lDQo+IHJlYXNv biksIHRoZW4gZHJpdmVycw0KPiArCSAqIHNob3VsZCBjYWNoZSB0aGlzIHZhbHVlIHRoZW1zZWx2 ZXMgYWZ0ZXIgY2hhbmdpbmcgcGF5bG9hZHMuDQo+ICsJICovDQo+ICsJczggdmNfc3RhcnRfc2xv dDsNCj4gKw0KPiArCS8qKiBAdmNwaTogVGhlIFZpcnR1YWwgQ2hhbm5lbCBQYXlsb2FkIElkZW50 aWZpZXIgKi8NCj4gKwl1OCB2Y3BpOw0KPiAgCS8qKiBAdGltZV9zbG90czogVGhlIG51bWJlciBv ZiB0aW1lc2xvdHMgYWxsb2NhdGVkIHRvIHRoaXMgcGF5bG9hZA0KPiAqLw0KPiAgCWludCB0aW1l X3Nsb3RzOw0KPiAgCS8qKiBAcGJuOiBUaGUgcGF5bG9hZCBiYW5kd2lkdGggZm9yIHRoaXMgcGF5 bG9hZCAqLw0KPiBAQCAtNTc0LDggKzU3NSw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlIHsNCj4gIAkvKiogQGJhc2U6IEJhc2UgcHJpdmF0ZSBzdGF0ZSBmb3IgYXRvbWljICov DQo+ICAJc3RydWN0IGRybV9wcml2YXRlX3N0YXRlIGJhc2U7DQo+IA0KPiAtCS8qKiBAcGF5bG9h ZHM6IFRoZSBsaXN0IG9mIHBheWxvYWRzIGJlaW5nIGNyZWF0ZWQvZGVzdHJveWVkIGluIHRoaXMN Cj4gc3RhdGUgKi8NCj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIHBheWxvYWRzOw0KPiAgCS8qKiBAbWdy OiBUaGUgdG9wb2xvZ3kgbWFuYWdlciAqLw0KPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyOw0KPiANCj4gQEAgLTU5MiwxMCArNTkxLDIxIEBAIHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X3N0YXRlIHsNCj4gIAkvKiogQG51bV9jb21taXRfZGVwczogVGhlIG51bWJlciBv ZiBDUlRDIGNvbW1pdHMgaW4NCj4gQGNvbW1pdF9kZXBzICovDQo+ICAJc2l6ZV90IG51bV9jb21t aXRfZGVwczsNCj4gDQo+ICsJLyoqIEBwYXlsb2FkX21hc2s6IEEgYml0bWFzayBvZiBhbGxvY2F0 ZWQgVkNQSXMsIHVzZWQgZm9yIFZDUEkNCj4gYXNzaWdubWVudHMgKi8NCj4gKwl1MzIgcGF5bG9h ZF9tYXNrOw0KPiArCS8qKiBAcGF5bG9hZHM6IFRoZSBsaXN0IG9mIHBheWxvYWRzIGJlaW5nIGNy ZWF0ZWQvZGVzdHJveWVkIGluIHRoaXMNCj4gc3RhdGUgKi8NCj4gKwlzdHJ1Y3QgbGlzdF9oZWFk IHBheWxvYWRzOw0KPiArDQo+ICAJLyoqIEB0b3RhbF9hdmFpbF9zbG90czogVGhlIHRvdGFsIG51 bWJlciBvZiBzbG90cyB0aGlzIHRvcG9sb2d5IGNhbg0KPiBoYW5kbGUgKDYzIG9yIDY0KSAqLw0K PiAgCXU4IHRvdGFsX2F2YWlsX3Nsb3RzOw0KPiAgCS8qKiBAc3RhcnRfc2xvdDogVGhlIGZpcnN0 IHVzYWJsZSB0aW1lIHNsb3QgaW4gdGhpcyB0b3BvbG9neSAoMSBvciAwKSAqLw0KPiAgCXU4IHN0 YXJ0X3Nsb3Q7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAcGJuX2RpdjogVGhlIGN1cnJlbnQgUEJO IGRpdmlzb3IgZm9yIHRoaXMgdG9wb2xvZ3kuIFRoZSBkcml2ZXIgaXMNCj4gZXhwZWN0ZWQgdG8g ZmlsbCB0aGlzDQo+ICsJICogb3V0IGl0c2VsZi4NCj4gKwkgKi8NCj4gKwlpbnQgcGJuX2RpdjsN Cj4gIH07DQo+IA0KPiAgI2RlZmluZSB0b19kcF9tc3RfdG9wb2xvZ3lfbWdyKHgpIGNvbnRhaW5l cl9vZih4LCBzdHJ1Y3QNCj4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IsIGJhc2UpDQo+IEBAIC02 MzUsMTQgKzY0NSw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciB7DQo+ICAJICog QG1heF9wYXlsb2FkczogbWF4aW11bSBudW1iZXIgb2YgcGF5bG9hZHMgdGhlIEdQVSBjYW4NCj4g Z2VuZXJhdGUuDQo+ICAJICovDQo+ICAJaW50IG1heF9wYXlsb2FkczsNCj4gLQkvKioNCj4gLQkg KiBAbWF4X2xhbmVfY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIGxhbmVzIHRoZSBHUFUgY2FuIGRy aXZlLg0KPiAtCSAqLw0KPiAtCWludCBtYXhfbGFuZV9jb3VudDsNCj4gLQkvKioNCj4gLQkgKiBA bWF4X2xpbmtfcmF0ZTogbWF4aW11bSBsaW5rIHJhdGUgcGVyIGxhbmUgR1BVIGNhbiBvdXRwdXQs IGluDQo+IGtIei4NCj4gLQkgKi8NCj4gLQlpbnQgbWF4X2xpbmtfcmF0ZTsNCj4gIAkvKioNCj4g IAkgKiBAY29ubl9iYXNlX2lkOiBEUk0gY29ubmVjdG9yIElEIHRoaXMgbWdyIGlzIGNvbm5lY3Rl ZCB0by4gT25seQ0KPiB1c2VkDQo+ICAJICogdG8gYnVpbGQgdGhlIE1TVCBjb25uZWN0b3IgcGF0 aCB2YWx1ZS4NCj4gQEAgLTY4NSw2ICs2ODcsMjAgQEAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyIHsNCj4gIAkgKi8NCj4gIAlib29sIHBheWxvYWRfaWRfdGFibGVfY2xlYXJlZCA6IDE7 DQo+IA0KPiArCS8qKg0KPiArCSAqIEBwYXlsb2FkX2NvdW50OiBUaGUgbnVtYmVyIG9mIGN1cnJl bnRseSBhY3RpdmUgcGF5bG9hZHMgaW4NCj4gaGFyZHdhcmUuIFRoaXMgdmFsdWUgaXMgb25seQ0K PiArCSAqIGludGVuZGVkIHRvIGJlIHVzZWQgaW50ZXJuYWxseSBieSBNU1QgaGVscGVycyBmb3Ig cGF5bG9hZCB0cmFja2luZywNCj4gYW5kIGlzIG9ubHkgc2FmZSB0bw0KPiArCSAqIHJlYWQvd3Jp dGUgZnJvbSB0aGUgYXRvbWljIGNvbW1pdCAobm90IGNoZWNrKSBjb250ZXh0Lg0KPiArCSAqLw0K PiArCXU4IHBheWxvYWRfY291bnQ7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAbmV4dF9zdGFydF9z bG90OiBUaGUgc3RhcnRpbmcgdGltZXNsb3QgdG8gdXNlIGZvciBuZXcgVkMgcGF5bG9hZHMuDQo+ IFRoaXMgdmFsdWUgaXMgdXNlZA0KPiArCSAqIGludGVybmFsbHkgYnkgTVNUIGhlbHBlcnMgZm9y IHBheWxvYWQgdHJhY2tpbmcsIGFuZCBpcyBvbmx5IHNhZmUgdG8NCj4gcmVhZC93cml0ZSBmcm9t IHRoZQ0KPiArCSAqIGF0b21pYyBjb21taXQgKG5vdCBjaGVjaykgY29udGV4dC4NCj4gKwkgKi8N Cj4gKwl1OCBuZXh0X3N0YXJ0X3Nsb3Q7DQo+ICsNCj4gIAkvKioNCj4gIAkgKiBAbXN0X3ByaW1h cnk6IFBvaW50ZXIgdG8gdGhlIHByaW1hcnkvZmlyc3QgYnJhbmNoIGRldmljZS4NCj4gIAkgKi8N Cj4gQEAgLTY5OCwxMCArNzE0LDYgQEAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyIHsN Cj4gIAkgKiBAc2lua19jb3VudDogU2luayBjb3VudCBmcm9tIERFVklDRV9TRVJWSUNFX0lSUV9W RUNUT1JfRVNJMC4NCj4gIAkgKi8NCj4gIAl1OCBzaW5rX2NvdW50Ow0KPiAtCS8qKg0KPiAtCSAq IEBwYm5fZGl2OiBQQk4gdG8gc2xvdHMgZGl2aXNvci4NCj4gLQkgKi8NCj4gLQlpbnQgcGJuX2Rp djsNCj4gDQo+ICAJLyoqDQo+ICAJICogQGZ1bmNzOiBBdG9taWMgaGVscGVyIGNhbGxiYWNrcw0K PiBAQCAtNzE4LDMyICs3MzAsNiBAQCBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Igew0K PiAgCSAqLw0KPiAgCXN0cnVjdCBsaXN0X2hlYWQgdHhfbXNnX2Rvd25xOw0KPiANCj4gLQkvKioN Cj4gLQkgKiBAcGF5bG9hZF9sb2NrOiBQcm90ZWN0IHBheWxvYWQgaW5mb3JtYXRpb24uDQo+IC0J ICovDQo+IC0Jc3RydWN0IG11dGV4IHBheWxvYWRfbG9jazsNCj4gLQkvKioNCj4gLQkgKiBAcHJv cG9zZWRfdmNwaXM6IEFycmF5IG9mIHBvaW50ZXJzIGZvciB0aGUgbmV3IFZDUEkgYWxsb2NhdGlv bi4NCj4gVGhlDQo+IC0JICogVkNQSSBzdHJ1Y3R1cmUgaXRzZWxmIGlzICZkcm1fZHBfbXN0X3Bv cnQudmNwaSwgYW5kIHRoZSBzaXplIG9mDQo+IC0JICogdGhpcyBhcnJheSBpcyBkZXRlcm1pbmVk IGJ5IEBtYXhfcGF5bG9hZHMuDQo+IC0JICovDQo+IC0Jc3RydWN0IGRybV9kcF92Y3BpICoqcHJv cG9zZWRfdmNwaXM7DQo+IC0JLyoqDQo+IC0JICogQHBheWxvYWRzOiBBcnJheSBvZiBwYXlsb2Fk cy4gVGhlIHNpemUgb2YgdGhpcyBhcnJheSBpcyBkZXRlcm1pbmVkDQo+IC0JICogYnkgQG1heF9w YXlsb2Fkcy4NCj4gLQkgKi8NCj4gLQlzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgKnBheWxvYWRzOw0K PiAtCS8qKg0KPiAtCSAqIEBwYXlsb2FkX21hc2s6IEVsZW1lbnRzIG9mIEBwYXlsb2FkcyBhY3R1 YWxseSBpbiB1c2UuIFNpbmNlDQo+IC0JICogcmVhbGxvY2F0aW9uIG9mIGFjdGl2ZSBvdXRwdXRz IGlzbid0IHBvc3NpYmxlIGdhcHMgY2FuIGJlIGNyZWF0ZWQgYnkNCj4gLQkgKiBkaXNhYmxpbmcg b3V0cHV0cyBvdXQgb2Ygb3JkZXIgY29tcGFyZWQgdG8gaG93IHRoZXkndmUgYmVlbg0KPiBlbmFi bGVkLg0KPiAtCSAqLw0KPiAtCXVuc2lnbmVkIGxvbmcgcGF5bG9hZF9tYXNrOw0KPiAtCS8qKg0K PiAtCSAqIEB2Y3BpX21hc2s6IFNpbWlsYXIgdG8gQHBheWxvYWRfbWFzaywgYnV0IGZvciBAcHJv cG9zZWRfdmNwaXMuDQo+IC0JICovDQo+IC0JdW5zaWduZWQgbG9uZyB2Y3BpX21hc2s7DQo+IC0N Cj4gIAkvKioNCj4gIAkgKiBAdHhfd2FpdHE6IFdhaXQgdG8gcXVldWUgc3RhbGwgZm9yIHRoZSB0 eCB3b3JrZXIuDQo+ICAJICovDQo+IEBAIC04MTUsOSArODAxLDcgQEAgc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyIHsNCj4gIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9pbml0KHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncg0KPiAqbWdyLA0KPiAgCQkJCSBzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2RwX2F1eA0KPiAqYXV4LA0KPiAgCQkJCSBpbnQgbWF4 X2RwY2RfdHJhbnNhY3Rpb25fYnl0ZXMsDQo+IC0JCQkJIGludCBtYXhfcGF5bG9hZHMsDQo+IC0J CQkJIGludCBtYXhfbGFuZV9jb3VudCwgaW50IG1heF9saW5rX3JhdGUsDQo+IC0JCQkJIGludCBj b25uX2Jhc2VfaWQpOw0KPiArCQkJCSBpbnQgbWF4X3BheWxvYWRzLCBpbnQgY29ubl9iYXNlX2lk KTsNCj4gDQo+ICB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2Rlc3Ryb3koc3RydWN0DQo+ IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOw0KPiANCj4gQEAgLTg0MCwyOCArODI0LDE3 IEBAIGludCBkcm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncoY29uc3Qgc3RydWN0DQo+IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IsDQo+IA0KPiAgaW50IGRybV9kcF9jYWxjX3Bibl9tb2RlKGlu dCBjbG9jaywgaW50IGJwcCwgYm9vbCBkc2MpOw0KPiANCj4gLWJvb2wgZHJtX2RwX21zdF9hbGxv Y2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJICAg ICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibiwgaW50IHNsb3RzKTsNCj4g LQ0KPiAtaW50IGRybV9kcF9tc3RfZ2V0X3ZjcGlfc2xvdHMoc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyICptZ3IsDQo+IHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiAtDQo+ IC0NCj4gLXZvaWQgZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21ncg0KPiAqbWdyLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsNCj4g LQ0KPiAgdm9pZCBkcm1fZHBfbXN0X3VwZGF0ZV9zbG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZQ0KPiAqbXN0X3N0YXRlLCB1aW50OF90IGxpbmtfZW5jb2RpbmdfY2FwKTsNCj4g DQo+IC12b2lkIGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyLA0KPiAtCQkJCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0K PiAtDQo+IC0NCj4gLWludCBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLA0KPiAtCQkJICAgaW50IHBibik7DQo+IC0NCj4gLQ0KPiAtaW50 IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3INCj4gKm1nciwgaW50IHN0YXJ0X3Nsb3QpOw0KPiAtDQo+IC0NCj4gLWludCBkcm1fZHBfdXBk YXRlX3BheWxvYWRfcGFydDIoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyDQo+ICptZ3Ip Ow0KPiAraW50IGRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgKm1zdF9zdGF0ZSwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfYXRvbWljX3BheWxv YWQgKnBheWxvYWQpOw0KPiAraW50IGRybV9kcF9hZGRfcGF5bG9hZF9wYXJ0MihzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgICAgc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlLA0KPiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNfcGF5bG9h ZCAqcGF5bG9hZCk7DQo+ICt2b2lkIGRybV9kcF9yZW1vdmVfcGF5bG9hZChzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gKwkJCSAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICptc3Rfc3RhdGUsDQo+ICsJCQkgICBzdHJ1Y3QgZHJtX2RwX21zdF9hdG9taWNf cGF5bG9hZCAqcGF5bG9hZCk7DQo+IA0KPiAgaW50IGRybV9kcF9jaGVja19hY3Rfc3RhdHVzKHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gDQo+IEBAIC04ODMsMTcgKzg1 NiwyMiBAQCBpbnQgZHJtX2RwX21zdF9jb25uZWN0b3JfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QNCj4g ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLA0KPiAgdm9pZCBkcm1fZHBfbXN0X2Nvbm5lY3Rvcl9l YXJseV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yDQo+ICpjb25uZWN0b3IsDQo+ICAJ CQkJCSAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiANCj4gLXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlDQo+ICpkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3Rh dGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAtCQkJCQkJCQkgICAgc3RydWN0 DQo+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOw0KPiArc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgKg0KPiArZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gKwkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gK3N0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRl ICoNCj4gK2RybV9hdG9taWNfZ2V0X25ld19tc3RfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9h dG9taWNfc3RhdGUNCj4gKnN0YXRlLA0KPiArCQkJCSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyKTsNCj4gK3N0cnVjdCBkcm1fZHBfbXN0X2F0b21pY19wYXlsb2FkICoN Cj4gK2RybV9hdG9taWNfZ2V0X21zdF9wYXlsb2FkX3N0YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlDQo+ICpzdGF0ZSwNCj4gKwkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAq cG9ydCk7DQo+ICBpbnQgX19tdXN0X2NoZWNrDQo+ICBkcm1fZHBfYXRvbWljX2ZpbmRfdGltZV9z bG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJCQkgICAgICBzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwNCj4gLQkJCSAgICAgIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQsIGludCBwYm4sDQo+IC0JCQkgICAgICBpbnQgcGJuX2Rpdik7DQo+ICsJ CQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsNCj4gIGludCBk cm1fZHBfbXN0X2F0b21pY19lbmFibGVfZHNjKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwNCj4gIAkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwNCj4gLQkJCQkgaW50IHBi biwgaW50IHBibl9kaXYsDQo+IC0JCQkJIGJvb2wgZW5hYmxlKTsNCj4gKwkJCQkgaW50IHBibiwg Ym9vbCBlbmFibGUpOw0KPiAgaW50IF9fbXVzdF9jaGVjaw0KPiAgZHJtX2RwX21zdF9hZGRfYWZm ZWN0ZWRfZHNjX2NydGNzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwNCj4gIAkJCQkg IHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsNCj4gQEAgLTkxNyw2ICs4OTUs MTIgQEAgdm9pZCBkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhzdHJ1Y3QNCj4gZHJtX2RwX21z dF9wb3J0ICpwb3J0KTsNCj4gDQo+ICBzdHJ1Y3QgZHJtX2RwX2F1eCAqZHJtX2RwX21zdF9kc2Nf YXV4X2Zvcl9wb3J0KHN0cnVjdA0KPiBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOw0KPiANCj4gK3N0 YXRpYyBpbmxpbmUgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKg0KPiArdG9fZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKQ0K PiArew0KPiArCXJldHVybiBjb250YWluZXJfb2Yoc3RhdGUsIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlLA0KPiBiYXNlKTsNCj4gK30NCj4gKw0KPiAgZXh0ZXJuIGNvbnN0IHN0cnVj dCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcw0KPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1 bmNzOw0KPiANCj4gIC8qKg0KPiAtLQ0KPiAyLjM1LjMNCg0KLS0NClJlZ2FyZHMsDQpXYXluZSBM aW4NCg==