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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 274D7C3F2D7 for ; Wed, 4 Mar 2020 16:08:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B4C98215A4 for ; Wed, 4 Mar 2020 16:08:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=marvell.com header.i=@marvell.com header.b="rk87lkmk"; dkim=pass (1024-bit key) header.d=marvell.onmicrosoft.com header.i=@marvell.onmicrosoft.com header.b="PTOL8voc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726694AbgCDQIC (ORCPT ); Wed, 4 Mar 2020 11:08:02 -0500 Received: from mx0b-0016f401.pphosted.com ([67.231.156.173]:64482 "EHLO mx0b-0016f401.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729813AbgCDQIB (ORCPT ); Wed, 4 Mar 2020 11:08:01 -0500 Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 024G51vs008117; Wed, 4 Mar 2020 08:07:18 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=pfpt0818; bh=xxcMrEA1XGu/3Imx4ORjymhphUtPmCCxE3FdV263cIM=; b=rk87lkmkW+hgu62KkCCn3AZ43zCv5nJtcz5VCxR2xq06zyb/cyKwZ59A4RihG50Z5Kl6 pwjp30R5o0zMns9DLZeipx1DJfvQ+DBd1Ll40b+gcTQzV7mfXdZ+aen/ypmd3ckuQDQQ xTOgfFV4JoyDSdUhLFn6vOGRYCexLheJ2WtushaFhx0xOaV0rPHBsP6Q0QpyDWmVXSIM 6M+rQywGT903VQEdvasxH7tjcptXeNKtnqlmU3lQW48597Yr61avdhMm54ZVNiXE2k92 ZWbGD3Ez6kXyraRatTtDbxLIRbXGRcFUN7vceP3BcGrtBPpx9xSVMDEANNbxroHhZczl UQ== Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0b-0016f401.pphosted.com with ESMTP id 2yhn0y0d94-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Wed, 04 Mar 2020 08:07:18 -0800 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 4 Mar 2020 08:07:15 -0800 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.48) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Wed, 4 Mar 2020 08:07:15 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k1Jl26s7t/IiYVlo0ywoWp/AFgkhKkkgY2W9K3ybdBZ23ac16pbdeRPb4ECNIZ8DAMGGtGVrPWJ45jhoYbmAYJzlwrpo7h2swMUBRy849J/VSYhcBb+GTEFTigqW4de8skrUiTQruLglI4PMOBWR7OzH1wKTXP/JHvcexYtSN1xcrIGY95RMRVNvPcBPE6CHSx/vcqdIDwPyOT3GwCSb2tGIW6NJUPnADP7ej0gjE/ff+gN26QM06/Ki7/DeGgyqWJY0hI3atMHM1kplWx0hQ/r/9N8SYfLYg3vdwlEFm9I32Cgqmjk3dM7KWi3Bbi3sBRh4K5+QoSCQSr8hRAldFQ== 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-SenderADCheck; bh=xxcMrEA1XGu/3Imx4ORjymhphUtPmCCxE3FdV263cIM=; b=C3kjaai4IR9qVOZ1wmh9kNRGgyYrqpdz2gHB/m1lg0NP1/St9W5awhJbF7gqtu6LenQknWeDrQQBq+FIZflCP8bMeVBJpHAMrkccsiMoETuyqIWbv8WuBwF3z0COLd6y6HpHk8zkEhF2TJXAlvQBhT611PkSpiHVpuEwWbyIVzZSo4mBOqa6riRmQLt2U/GpFozaN5kvlDz5zVwc8Qv4IHK62C3eI/GM68qqDA9U6yZj25rjV6wur9+wD/w2b0yflhTGom1j4GLCN4gH1YGYIQxXRE9WE4OhBOAintIcFGkRaAK7IrtXlS67iF6fjse0hEmazCd85j8nPVuZNUt0Xg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xxcMrEA1XGu/3Imx4ORjymhphUtPmCCxE3FdV263cIM=; b=PTOL8vochiE0y58vE3cyjbIJQiXaqEXOlfy5bhgLRflEDDgUqL0RjgNHSS1Gkfa7SmoCs/YjgIG+AnzWtOl9hzD42Modow/KEw2hL2289j85Lr1AJ8eCmbvin42bb/CogS7mQ9i1QworOEhWoHCM5E0x9K2buQ7GDga705JXoBw= Received: from BYAPR18MB2535.namprd18.prod.outlook.com (2603:10b6:a03:137::17) by BYAPR18MB3061.namprd18.prod.outlook.com (2603:10b6:a03:10e::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2772.18; Wed, 4 Mar 2020 16:07:13 +0000 Received: from BYAPR18MB2535.namprd18.prod.outlook.com ([fe80::8cd1:1741:8d2d:1c23]) by BYAPR18MB2535.namprd18.prod.outlook.com ([fe80::8cd1:1741:8d2d:1c23%7]) with mapi id 15.20.2772.019; Wed, 4 Mar 2020 16:07:13 +0000 From: Alex Belits To: "frederic@kernel.org" , "rostedt@goodmis.org" CC: "mingo@kernel.org" , "peterz@infradead.org" , "linux-kernel@vger.kernel.org" , Prasun Kapoor , "tglx@linutronix.de" , "linux-api@vger.kernel.org" , "linux-mm@vger.kernel.org" , "linux-arch@vger.kernel.org" Subject: [PATCH 03/12] task_isolation: userspace hard isolation from kernel Thread-Topic: [PATCH 03/12] task_isolation: userspace hard isolation from kernel Thread-Index: AQHV8j73SZ7gA0FMRkuOSCw4mVFsAA== Date: Wed, 4 Mar 2020 16:07:12 +0000 Message-ID: <36d84b8dd168a38e6a56549dedc15dd6ebf8c09e.camel@marvell.com> References: <4473787e1b6bc3cc226067e8d122092a678b63de.camel@marvell.com> In-Reply-To: <4473787e1b6bc3cc226067e8d122092a678b63de.camel@marvell.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [199.233.58.128] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b2eaa7be-8b02-40cc-17ab-08d7c05619e1 x-ms-traffictypediagnostic: BYAPR18MB3061: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 0332AACBC3 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(136003)(366004)(39850400004)(346002)(396003)(376002)(189003)(199004)(8676002)(4326008)(76116006)(81166006)(81156014)(91956017)(30864003)(316002)(6486002)(26005)(86362001)(36756003)(5660300002)(186003)(64756008)(478600001)(54906003)(71200400001)(66476007)(66446008)(2906002)(66556008)(6506007)(66946007)(6512007)(110136005)(2616005)(8936002)(21314003)(579004)(559001);DIR:OUT;SFP:1101;SCL:1;SRVR:BYAPR18MB3061;H:BYAPR18MB2535.namprd18.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: CFW0ggvYEfL1wzcr7n3DJ1WT9lb4XrSQbMlguLttAn5yRQnApEKHpNlVWyz6aPm+kwNk/DeJPb3dRR+WbJWYJf8RE4XOrgsAZMVcEkHpNDwx8JHmpcoBtYtVNb7L5Et2iaMiPKwD5J3NOi3ta22TOEmO8fv4RGUMtq1NgVNdH+0sOBiTC99GMtn+jWzXpCoynn52HyRhe8Oq7eVx2PX2Kp9H+6AZmU/OlqdKRQH2j1s5WMN3Ad86nsUMwE233WFamV5Qrib/FPk60Hqc7bQCIJP54n+Jp1BplwEanUHEqUuSlS3wcBWNrLkp4tdCdbwdfW46n7ZHo+7FP1sAkJtlbDtc7YGuzR96x9QRf84byYLmNTZrO/K9nT80J8ZJDKwQ6kNawf/vYqQ3mhf+v6j1JFuEL2Ht/NpsjmwWgon6x37sk9skfk9lhgrDdazvQ7Z8Q5bldSwwWEl5zJ3GNDIZYXQIUfgC3qIOV8jj5V3AHv41UytJ7O5xMu7EwvIc2cob x-ms-exchange-antispam-messagedata: aZXJ7Lr2raMn+mM47A5qC35D6GS++AigSkLntzheB5g2zYN9qJZ0+tCh2VbcqPt8cwVg5xOQFoVcd0mxIptc0JE/qIJ5P8duRCFWvMQfUFbTTd7lqEMPrUhojkQqdAZtkZy+2AM68uvQy35VdWs7hg== Content-Type: text/plain; charset="utf-8" Content-ID: <91EF628648E5FB44BC81AB023A6985C1@namprd18.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: b2eaa7be-8b02-40cc-17ab-08d7c05619e1 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Mar 2020 16:07:12.8068 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: dmR9+DEMGS4sOEUbxnLJkdi3PYpmZoaRUImAnr1JBlHp7OrYvCXA9uQs+B13soG9qA2O20xu/WnABkUtFS+6eg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR18MB3061 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-03-04_05:2020-03-04,2020-03-04 signatures=0 Sender: linux-api-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-api@vger.kernel.org VGhlIGV4aXN0aW5nIG5vaHpfZnVsbCBtb2RlIGlzIGRlc2lnbmVkIGFzIGEgInNvZnQiIGlzb2xh dGlvbiBtb2RlDQp0aGF0IG1ha2VzIHRyYWRlb2ZmcyB0byBtaW5pbWl6ZSB1c2Vyc3BhY2UgaW50 ZXJydXB0aW9ucyB3aGlsZQ0Kc3RpbGwgYXR0ZW1wdGluZyB0byBhdm9pZCBvdmVyaGVhZHMgaW4g dGhlIGtlcm5lbCBlbnRyeS9leGl0IHBhdGgsDQp0byBwcm92aWRlIDEwMCUga2VybmVsIHNlbWFu dGljcywgZXRjLg0KDQpIb3dldmVyLCBzb21lIGFwcGxpY2F0aW9ucyByZXF1aXJlIGEgImhhcmQi IGNvbW1pdG1lbnQgZnJvbSB0aGUNCmtlcm5lbCB0byBhdm9pZCBpbnRlcnJ1cHRpb25zLCBpbiBw YXJ0aWN1bGFyIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVyDQpzdHlsZSBhcHBsaWNhdGlvbnMsIHN1 Y2ggYXMgaGlnaC1zcGVlZCBuZXR3b3JraW5nIGNvZGUuDQoNClRoaXMgY2hhbmdlIGludHJvZHVj ZXMgYSBmcmFtZXdvcmsgdG8gYWxsb3cgYXBwbGljYXRpb25zDQp0byBlbGVjdCB0byBoYXZlIHRo ZSAiaGFyZCIgc2VtYW50aWNzIGFzIG5lZWRlZCwgc3BlY2lmeWluZw0KcHJjdGwoUFJfVEFTS19J U09MQVRJT04sIFBSX1RBU0tfSVNPTEFUSU9OX0VOQUJMRSkgdG8gZG8gc28uDQoNClRoZSBrZXJu ZWwgbXVzdCBiZSBidWlsdCB3aXRoIHRoZSBuZXcgVEFTS19JU09MQVRJT04gS2NvbmZpZyBmbGFn DQp0byBlbmFibGUgdGhpcyBtb2RlLCBhbmQgdGhlIGtlcm5lbCBib290ZWQgd2l0aCBhbiBhcHBy b3ByaWF0ZQ0KImlzb2xjcHVzPW5vaHosZG9tYWluLENQVUxJU1QiIGJvb3QgYXJndW1lbnQgdG8g ZW5hYmxlDQpub2h6X2Z1bGwgYW5kIGlzb2xjcHVzLiBUaGUgInRhc2tfaXNvbGF0aW9uIiBzdGF0 ZSBpcyB0aGVuIGluZGljYXRlZA0KYnkgc2V0dGluZyBhIG5ldyB0YXNrIHN0cnVjdCBmaWVsZCwg dGFza19pc29sYXRpb25fZmxhZywgdG8gdGhlDQp2YWx1ZSBwYXNzZWQgYnkgcHJjdGwoKSwgYW5k IGFsc28gc2V0dGluZyBhIFRJRl9UQVNLX0lTT0xBVElPTg0KYml0IGluIHRoZSB0aHJlYWRfaW5m byBmbGFncy4gV2hlbiB0aGUga2VybmVsIGlzIHJldHVybmluZyB0bw0KdXNlcnNwYWNlIGZyb20g dGhlIHByY3RsKCkgY2FsbCBhbmQgc2VlcyBUSUZfVEFTS19JU09MQVRJT04gc2V0LA0KaXQgY2Fs bHMgdGhlIG5ldyB0YXNrX2lzb2xhdGlvbl9zdGFydCgpIHJvdXRpbmUgdG8gYXJyYW5nZSBmb3IN CnRoZSB0YXNrIHRvIGF2b2lkIGJlaW5nIGludGVycnVwdGVkIGluIHRoZSBmdXR1cmUuDQoNCldp dGggaW50ZXJydXB0cyBkaXNhYmxlZCwgdGFza19pc29sYXRpb25fc3RhcnQoKSBlbnN1cmVzIHRo YXQga2VybmVsDQpzdWJzeXN0ZW1zIHRoYXQgbWlnaHQgY2F1c2UgYSBmdXR1cmUgaW50ZXJydXB0 IGFyZSBxdWllc2NlZC4gSWYgaXQNCmRvZXNuJ3Qgc3VjY2VlZCwgaXQgYWRqdXN0cyB0aGUgc3lz Y2FsbCByZXR1cm4gdmFsdWUgdG8gaW5kaWNhdGUgdGhhdA0KZmFjdCwgYW5kIHVzZXJzcGFjZSBj YW4gcmV0cnkgYXMgZGVzaXJlZC4gSW4gYWRkaXRpb24gdG8gc3RvcHBpbmcNCnRoZSBzY2hlZHVs ZXIgdGljaywgdGhlIGNvZGUgdGFrZXMgYW55IGFjdGlvbnMgdGhhdCBtaWdodCBhdm9pZA0KYSBm dXR1cmUgaW50ZXJydXB0IHRvIHRoZSBjb3JlLCBzdWNoIGFzIGEgd29ya2VyIHRocmVhZCBiZWlu Zw0Kc2NoZWR1bGVkIHRoYXQgY291bGQgYmUgcXVpZXNjZWQgbm93IChlLmcuIHRoZSB2bXN0YXQg d29ya2VyKQ0Kb3IgYSBmdXR1cmUgSVBJIHRvIHRoZSBjb3JlIHRvIGNsZWFuIHVwIHNvbWUgc3Rh dGUgdGhhdCBjb3VsZCBiZQ0KY2xlYW5lZCB1cCBub3cgKGUuZy4gdGhlIG1tIGxydSBwZXItY3B1 IGNhY2hlKS4NCg0KT25jZSB0aGUgdGFzayBoYXMgcmV0dXJuZWQgdG8gdXNlcnNwYWNlIGFmdGVy IGlzc3VpbmcgdGhlIHByY3RsKCksDQppZiBpdCBlbnRlcnMgdGhlIGtlcm5lbCBhZ2FpbiB2aWEg c3lzdGVtIGNhbGwsIHBhZ2UgZmF1bHQsIG9yIGFueQ0Kb3RoZXIgZXhjZXB0aW9uIG9yIGlycSwg dGhlIGtlcm5lbCB3aWxsIGtpbGwgaXQgd2l0aCBTSUdLSUxMLg0KSW4gYWRkaXRpb24gdG8gc2Vu ZGluZyBhIHNpZ25hbCwgdGhlIGNvZGUgc3VwcG9ydHMgYSBrZXJuZWwNCmNvbW1hbmQtbGluZSAi dGFza19pc29sYXRpb25fZGVidWciIGZsYWcgd2hpY2ggY2F1c2VzIGEgc3RhY2sNCmJhY2t0cmFj ZSB0byBiZSBnZW5lcmF0ZWQgd2hlbmV2ZXIgYSB0YXNrIGxvc2VzIGlzb2xhdGlvbi4NCg0KVG8g YWxsb3cgdGhlIHN0YXRlIHRvIGJlIGVudGVyZWQgYW5kIGV4aXRlZCwgdGhlIHN5c2NhbGwgY2hl Y2tpbmcNCnRlc3QgaWdub3JlcyB0aGUgcHJjdGwoUFJfVEFTS19JU09MQVRJT04pIHN5c2NhbGwg c28gdGhhdCB3ZSBjYW4NCmNsZWFyIHRoZSBiaXQgYWdhaW4gbGF0ZXIsIGFuZCBpZ25vcmVzIGV4 aXQvZXhpdF9ncm91cCB0byBhbGxvdw0KZXhpdGluZyB0aGUgdGFzayB3aXRob3V0IGEgcG9pbnRs ZXNzIHNpZ25hbCBiZWluZyBkZWxpdmVyZWQuDQoNClRoZSBwcmN0bCgpIEFQSSBhbGxvd3MgZm9y IHNwZWNpZnlpbmcgYSBzaWduYWwgbnVtYmVyIHRvIHVzZSBpbnN0ZWFkDQpvZiB0aGUgZGVmYXVs dCBTSUdLSUxMLCB0byBhbGxvdyBmb3IgY2F0Y2hpbmcgdGhlIG5vdGlmaWNhdGlvbg0Kc2lnbmFs OyBmb3IgZXhhbXBsZSwgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LCBpdCBtaWdodCBiZQ0K aGVscGZ1bCB0byBsb2cgaW5mb3JtYXRpb24gdG8gdGhlIGFwcGxpY2F0aW9uIGxvZ2dpbmcgbWVj aGFuaXNtDQpiZWZvcmUgZXhpdGluZy4gT3IsIHRoZSBzaWduYWwgaGFuZGxlciBtaWdodCBjaG9v c2UgdG8gcmVzZXQgdGhlDQpwcm9ncmFtIGNvdW50ZXIgYmFjayB0byB0aGUgY29kZSBzZWdtZW50 IGludGVuZGVkIHRvIGJlIHJ1biBpc29sYXRlZA0KdmlhIHByY3RsKCkgdG8gY29udGludWUgZXhl Y3V0aW9uLg0KDQpJbiBhIG51bWJlciBvZiBjYXNlcyB3ZSBjYW4gdGVsbCBvbiBhIHJlbW90ZSBj cHUgdGhhdCB3ZSBhcmUNCmdvaW5nIHRvIGJlIGludGVycnVwdGluZyB0aGUgY3B1LCBlLmcuIHZp YSBhbiBJUEkgb3IgYSBUTEIgZmx1c2guDQpJbiB0aGF0IGNhc2Ugd2UgZ2VuZXJhdGUgdGhlIGRp YWdub3N0aWMgKGFuZCBvcHRpb25hbCBzdGFjayBkdW1wKQ0Kb24gdGhlIHJlbW90ZSBjb3JlIHRv IGJlIGFibGUgdG8gZGVsaXZlciBiZXR0ZXIgZGlhZ25vc3RpY3MuDQpJZiB0aGUgaW50ZXJydXB0 IGlzIG5vdCBzb21ldGhpbmcgY2F1Z2h0IGJ5IExpbnV4IChlLmcuIGENCmh5cGVydmlzb3IgaW50 ZXJydXB0KSB3ZSBjYW4gYWxzbyByZXF1ZXN0IGEgcmVzY2hlZHVsZSBJUEkgdG8NCmJlIHNlbnQg dG8gdGhlIHJlbW90ZSBjb3JlIHNvIGl0IGNhbiBiZSBzdXJlIHRvIGdlbmVyYXRlIGENCnNpZ25h bCB0byBub3RpZnkgdGhlIHByb2Nlc3MuDQoNClNlcGFyYXRlIHBhdGNoZXMgdGhhdCBmb2xsb3cg cHJvdmlkZSB0aGVzZSBjaGFuZ2VzIGZvciB4ODYsIGFybSwNCmFuZCBhcm02NC4NCg0KU2lnbmVk LW9mZi1ieTogQWxleCBCZWxpdHMgPGFiZWxpdHNAbWFydmVsbC5jb20+DQotLS0NCiAuLi4vYWRt aW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0ICAgICAgICAgfCAgIDYgKw0KIGluY2x1ZGUv bGludXgvaHJ0aW1lci5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArDQogaW5jbHVkZS9s aW51eC9pc29sYXRpb24uaCAgICAgICAgICAgICAgICAgICAgIHwgMjI5ICsrKysrKw0KIGluY2x1 ZGUvbGludXgvc2NoZWQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArDQogaW5jbHVk ZS9saW51eC90aWNrLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICsNCiBpbmNsdWRl L3VhcGkvbGludXgvcHJjdGwuaCAgICAgICAgICAgICAgICAgICAgfCAgIDYgKw0KIGluaXQvS2Nv bmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyOCArDQoga2VybmVsL01h a2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsNCiBrZXJuZWwvY29u dGV4dF90cmFja2luZy5jICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKw0KIGtlcm5lbC9pc29s YXRpb24uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDc3NCArKysrKysrKysrKysrKysr KysNCiBrZXJuZWwvc2lnbmFsLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIg Kw0KIGtlcm5lbC9zeXMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiAr DQoga2VybmVsL3RpbWUvaHJ0aW1lci5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI3ICsN CiBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMTggKw0K IDE0IGZpbGVzIGNoYW5nZWQsIDExMTEgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0 NCBpbmNsdWRlL2xpbnV4L2lzb2xhdGlvbi5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGtlcm5lbC9p c29sYXRpb24uYw0KDQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJu ZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJh bWV0ZXJzLnR4dA0KaW5kZXggYzA3ODE1ZDIzMGJjLi5lNGEyZDZlMzc2NDUgMTAwNjQ0DQotLS0g YS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dA0KKysrIGIv RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQNCkBAIC00ODA4 LDYgKzQ4MDgsMTIgQEANCiAJCQluZXV0cmFsaXplIGFueSBlZmZlY3Qgb2YgL3Byb2Mvc3lzL2tl cm5lbC9zeXNycS4NCiAJCQlVc2VmdWwgZm9yIGRlYnVnZ2luZy4NCiANCisJdGFza19pc29sYXRp b25fZGVidWcJW0tOTF0NCisJCQlJbiBrZXJuZWxzIGJ1aWx0IHdpdGggQ09ORklHX1RBU0tfSVNP TEFUSU9OLCB0aGlzDQorCQkJc2V0dGluZyB3aWxsIGdlbmVyYXRlIGNvbnNvbGUgYmFja3RyYWNl cyB0bw0KKwkJCWFjY29tcGFueSB0aGUgZGlhZ25vc3RpY3MgZ2VuZXJhdGVkIGFib3V0DQorCQkJ aW50ZXJydXB0aW5nIHRhc2tzIHJ1bm5pbmcgd2l0aCB0YXNrIGlzb2xhdGlvbi4NCisNCiAJdGNw bWhhc2hfZW50cmllcz0gW0tOTCxORVRdDQogCQkJU2V0IHRoZSBudW1iZXIgb2YgdGNwX21ldHJp Y3NfaGFzaCBzbG90cy4NCiAJCQlEZWZhdWx0IHZhbHVlIGlzIDgxOTIgb3IgMTYzODQgZGVwZW5k aW5nIG9uIHRvdGFsDQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmggYi9pbmNs dWRlL2xpbnV4L2hydGltZXIuaA0KaW5kZXggMTVjOGFjMzEzNjc4Li5lODEyNTJlYjRmOTIgMTAw NjQ0DQotLS0gYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaA0KKysrIGIvaW5jbHVkZS9saW51eC9o cnRpbWVyLmgNCkBAIC01MjgsNiArNTI4LDEwIEBAIGV4dGVybiB2b2lkIF9faW5pdCBocnRpbWVy c19pbml0KHZvaWQpOw0KIC8qIFNob3cgcGVuZGluZyB0aW1lcnM6ICovDQogZXh0ZXJuIHZvaWQg c3lzcnFfdGltZXJfbGlzdF9zaG93KHZvaWQpOw0KIA0KKyNpZmRlZiBDT05GSUdfVEFTS19JU09M QVRJT04NCitleHRlcm4gdm9pZCBraWNrX2hydGltZXIodm9pZCk7DQorI2VuZGlmDQorDQogaW50 IGhydGltZXJzX3ByZXBhcmVfY3B1KHVuc2lnbmVkIGludCBjcHUpOw0KICNpZmRlZiBDT05GSUdf SE9UUExVR19DUFUNCiBpbnQgaHJ0aW1lcnNfZGVhZF9jcHUodW5zaWduZWQgaW50IGNwdSk7DQpk aWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc29sYXRpb24uaCBiL2luY2x1ZGUvbGludXgvaXNv bGF0aW9uLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjE0NDc2 NmQzNTM2YQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvaW5jbHVkZS9saW51eC9pc29sYXRpb24uaA0K QEAgLTAsMCArMSwyMjkgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5ICovDQorLyoNCisgKiBUYXNrIGlzb2xhdGlvbiBzdXBwb3J0DQorICoNCisgKiBBdXRob3Jz Og0KKyAqICAgQ2hyaXMgTWV0Y2FsZiA8Y21ldGNhbGZAbWVsbGFub3guY29tPg0KKyAqICAgQWxl eCBCZWxpdHMgPGFiZWxpdHNAbWFydmVsbC5jb20+DQorICogICBZdXJpIE5vcm92IDx5bm9yb3ZA bWFydmVsbC5jb20+DQorICovDQorI2lmbmRlZiBfTElOVVhfSVNPTEFUSU9OX0gNCisjZGVmaW5l IF9MSU5VWF9JU09MQVRJT05fSA0KKw0KKyNpbmNsdWRlIDxzdGRhcmcuaD4NCisjaW5jbHVkZSA8 bGludXgvZXJybm8uaD4NCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPg0KKyNpbmNsdWRlIDxs aW51eC9wcmN0bC5oPg0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KKw0KK3N0cnVjdCB0YXNr X3N0cnVjdDsNCisNCisjaWZkZWYgQ09ORklHX1RBU0tfSVNPTEFUSU9ODQorDQoraW50IHRhc2tf aXNvbGF0aW9uX21lc3NhZ2UoaW50IGNwdSwgaW50IGxldmVsLCBib29sIHN1cHAsIGNvbnN0IGNo YXIgKmZtdCwgLi4uKTsNCisNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9lbWVyZyhjcHUsIGZtdCwg Li4uKQkJCVwNCisJdGFza19pc29sYXRpb25fbWVzc2FnZShjcHUsIExPR0xFVkVMX0VNRVJHLCBm YWxzZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUgcHJfdGFza19pc29sX2FsZXJ0KGNw dSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxf QUxFUlQsIGZhbHNlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xf Y3JpdChjcHUsIGZtdCwgLi4uKQkJCVwNCisJdGFza19pc29sYXRpb25fbWVzc2FnZShjcHUsIExP R0xFVkVMX0NSSVQsIGZhbHNlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNr X2lzb2xfZXJyKGNwdSwgZm10LCAuLi4pCQkJCVwNCisJdGFza19pc29sYXRpb25fbWVzc2FnZShj cHUsIExPR0xFVkVMX0VSUiwgZmFsc2UsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5lIHBy X3Rhc2tfaXNvbF93YXJuKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNz YWdlKGNwdSwgTE9HTEVWRUxfV0FSTklORywgZmFsc2UsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisj ZGVmaW5lIHByX3Rhc2tfaXNvbF9ub3RpY2UoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNv bGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9OT1RJQ0UsIGZhbHNlLCBmbXQsICMjX19WQV9B UkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfaW5mbyhjcHUsIGZtdCwgLi4uKQkJCVwNCisJ dGFza19pc29sYXRpb25fbWVzc2FnZShjcHUsIExPR0xFVkVMX0lORk8sIGZhbHNlLCBmbXQsICMj X19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfZGVidWcoY3B1LCBmbXQsIC4uLikJ CQlcDQorCXRhc2tfaXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9ERUJVRywgZmFsc2Us IGZtdCwgIyNfX1ZBX0FSR1NfXykNCisNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9lbWVyZ19zdXBw KGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVW RUxfRU1FUkcsIHRydWUsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5lIHByX3Rhc2tfaXNv bF9hbGVydF9zdXBwKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdl KGNwdSwgTE9HTEVWRUxfQUxFUlQsIHRydWUsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5l IHByX3Rhc2tfaXNvbF9jcml0X3N1cHAoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0 aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9DUklULCB0cnVlLCBmbXQsICMjX19WQV9BUkdTX18p DQorI2RlZmluZSBwcl90YXNrX2lzb2xfZXJyX3N1cHAoY3B1LCBmbXQsIC4uLikJCQkJXA0KKwl0 YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfRVJSLCB0cnVlLCBmbXQsICMjX19W QV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfd2Fybl9zdXBwKGNwdSwgZm10LCAuLi4p CQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfV0FSTklORywgdHJ1 ZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUgcHJfdGFza19pc29sX25vdGljZV9zdXBw KGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVW RUxfTk9USUNFLCB0cnVlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lz b2xfaW5mb19zdXBwKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdl KGNwdSwgTE9HTEVWRUxfSU5GTywgdHJ1ZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUg cHJfdGFza19pc29sX2RlYnVnX3N1cHAoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0 aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9ERUJVRywgdHJ1ZSwgZm10LCAjI19fVkFfQVJHU19f KQ0KK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0c2tfdGhyZWFkX2ZsYWdzX2NvcHkp Ow0KK2V4dGVybiBjcHVtYXNrX3Zhcl90IHRhc2tfaXNvbGF0aW9uX21hcDsNCisNCisvKioNCisg KiB0YXNrX2lzb2xhdGlvbl9yZXF1ZXN0KCkgLSBwcmN0bCBob29rIHRvIHJlcXVlc3QgdGFzayBp c29sYXRpb24NCisgKiBAZmxhZ3M6CUZsYWdzIGZyb20gPGxpbnV4L3ByY3RsLmg+IFBSX1RBU0tf SVNPTEFUSU9OX3h4eC4NCisgKg0KKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGdlbmVyaWMg cHJjdGwoKSBjb2RlIGZvciBQUl9UQVNLX0lTT0xBVElPTi4NCisgKg0KKyAqIFJldHVybjogUmV0 dXJucyAwIHdoZW4gdGFzayBpc29sYXRpb24gZW5hYmxlZCwgb3RoZXJ3aXNlIGEgbmVnYXRpdmUN CisgKiBlcnJuby4NCisgKi8NCitleHRlcm4gaW50IHRhc2tfaXNvbGF0aW9uX3JlcXVlc3QodW5z aWduZWQgaW50IGZsYWdzKTsNCitleHRlcm4gdm9pZCB0YXNrX2lzb2xhdGlvbl9jcHVfY2xlYW51 cCh2b2lkKTsNCisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl9zdGFydCgpIC0gYXR0ZW1wdCB0byBh Y3R1YWxseSBzdGFydCB0YXNrIGlzb2xhdGlvbg0KKyAqDQorICogVGhpcyBmdW5jdGlvbiBzaG91 bGQgYmUgaW52b2tlZCBhcyB0aGUgbGFzdCB0aGluZyBwcmlvciB0byByZXR1cm5pbmcgdG8NCisg KiB1c2VyIHNwYWNlIGlmIFRJRl9UQVNLX0lTT0xBVElPTiBpcyBzZXQgaW4gdGhlIHRocmVhZF9p bmZvIGZsYWdzLiAgSXQNCisgKiB3aWxsIGF0dGVtcHQgdG8gcXVpZXNjZSB0aGUgY29yZSBhbmQg ZW50ZXIgdGFzay1pc29sYXRpb24gbW9kZS4gIElmIGl0DQorICogZmFpbHMsIGl0IHdpbGwgcmVz ZXQgdGhlIHN5c3RlbSBjYWxsIHJldHVybiB2YWx1ZSB0byBhbiBlcnJvciBjb2RlIHRoYXQNCisg KiBpbmRpY2F0ZXMgdGhlIGZhaWx1cmUgbW9kZS4NCisgKi8NCitleHRlcm4gdm9pZCB0YXNrX2lz b2xhdGlvbl9zdGFydCh2b2lkKTsNCisNCisvKioNCisgKiBpc19pc29sYXRpb25fY3B1KCkgLSBj aGVjayBpZiBDUFUgaXMgaW50ZW5kZWQgZm9yIHJ1bm5pbmcgaXNvbGF0ZWQgdGFza3MuDQorICog QGNwdToJQ1BVIHRvIGNoZWNrLg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19pc29sYXRp b25fY3B1KGludCBjcHUpDQorew0KKwlyZXR1cm4gdGFza19pc29sYXRpb25fbWFwICE9IE5VTEwg JiYNCisJCWNwdW1hc2tfdGVzdF9jcHUoY3B1LCB0YXNrX2lzb2xhdGlvbl9tYXApOw0KK30NCisN CisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl9vbl9jcHUoKSAtIGNoZWNrIGlmIHRoZSBjcHUgaXMg cnVubmluZyBpc29sYXRlZCB0YXNrDQorICogQGNwdToJQ1BVIHRvIGNoZWNrLg0KKyAqLw0KK2V4 dGVybiBpbnQgdGFza19pc29sYXRpb25fb25fY3B1KGludCBjcHUpOw0KK2V4dGVybiB2b2lkIHRh c2tfaXNvbGF0aW9uX2NoZWNrX3J1bl9jbGVhbnVwKHZvaWQpOw0KKw0KKy8qKg0KKyAqIHRhc2tf aXNvbGF0aW9uX2NwdW1hc2soKSAtIHNldCBDUFVzIGN1cnJlbnRseSBydW5uaW5nIGlzb2xhdGVk IHRhc2tzDQorICogQG1hc2s6CU1hc2sgdG8gbW9kaWZ5Lg0KKyAqLw0KK2V4dGVybiB2b2lkIHRh c2tfaXNvbGF0aW9uX2NwdW1hc2soc3RydWN0IGNwdW1hc2sgKm1hc2spOw0KKw0KKy8qKg0KKyAq IHRhc2tfaXNvbGF0aW9uX2NsZWFyX2NwdW1hc2soKSAtIGNsZWFyIENQVXMgY3VycmVudGx5IHJ1 bm5pbmcgaXNvbGF0ZWQgdGFza3MNCisgKiBAbWFzazogICAgICBNYXNrIHRvIG1vZGlmeS4NCisg Ki8NCitleHRlcm4gdm9pZCB0YXNrX2lzb2xhdGlvbl9jbGVhcl9jcHVtYXNrKHN0cnVjdCBjcHVt YXNrICptYXNrKTsNCisNCisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl9zeXNjYWxsKCkgLSByZXBv cnQgYSBzeXNjYWxsIGZyb20gYW4gaXNvbGF0ZWQgdGFzaw0KKyAqIEBucjoJCVRoZSBzeXNjYWxs IG51bWJlci4NCisgKg0KKyAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgaW52b2tlZCBhdCBzeXNj YWxsIGVudHJ5IGlmIFRJRl9UQVNLX0lTT0xBVElPTiBpcw0KKyAqIHNldCBpbiB0aGUgdGhyZWFk X2luZm8gZmxhZ3MuICBJdCBjaGVja3MgZm9yIHZhbGlkIHN5c2NhbGxzLA0KKyAqIHNwZWNpZmlj YWxseSBwcmN0bCgpIHdpdGggUFJfVEFTS19JU09MQVRJT04sIGV4aXQoKSwgYW5kIGV4aXRfZ3Jv dXAoKS4NCisgKiBGb3IgYW55IG90aGVyIHN5c2NhbGwgaXQgd2lsbCByYWlzZSBhIHNpZ25hbCBh bmQgcmV0dXJuIGZhaWx1cmUuDQorICoNCisgKiBSZXR1cm46IDAgZm9yIGFjY2VwdGFibGUgc3lz Y2FsbHMsIC0xIGZvciBhbGwgb3RoZXJzLg0KKyAqLw0KK2V4dGVybiBpbnQgdGFza19pc29sYXRp b25fc3lzY2FsbChpbnQgbnIpOw0KKw0KKy8qKg0KKyAqIF90YXNrX2lzb2xhdGlvbl9pbnRlcnJ1 cHQoKSAtIHJlcG9ydCBhbiBpbnRlcnJ1cHQgb2YgYW4gaXNvbGF0ZWQgdGFzaw0KKyAqIEBmbXQ6 CUEgZm9ybWF0IHN0cmluZyBkZXNjcmliaW5nIHRoZSBpbnRlcnJ1cHQNCisgKiBALi4uOglGb3Jt YXQgYXJndW1lbnRzLCBpZiBhbnkuDQorICoNCisgKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIGlu dm9rZWQgYXQgYW55IGV4Y2VwdGlvbiBvciBJUlEgaWYNCisgKiBUSUZfVEFTS19JU09MQVRJT04g aXMgc2V0IGluIHRoZSB0aHJlYWRfaW5mbyBmbGFncy4gIEl0IGlzIG5vdCBuZWNlc3NhcnkNCisg KiB0byBpbnZva2UgaXQgaWYgdGhlIGV4Y2VwdGlvbiB3aWxsIGdlbmVyYXRlIGEgc2lnbmFsIGFu eXdheSAoZS5nLiBhIGJhZA0KKyAqIHBhZ2UgZmF1bHQpLCBhbmQgaW4gdGhhdCBjYXNlIGl0IGlz IHByZWZlcmFibGUgbm90IHRvIGludm9rZSBpdCBidXQganVzdA0KKyAqIHJlbHkgb24gdGhlIHN0 YW5kYXJkIExpbnV4IHNpZ25hbC4gIFRoZSBtYWNybyB0YXNrX2lzb2xhdGlvbl9zeXNjYWxsKCkN CisgKiB3cmFwcyB0aGUgVElGX1RBU0tfSVNPTEFUSU9OIGZsYWcgdGVzdCB0byBzaW1wbGlmeSB0 aGUgY2FsbGVyIGNvZGUuDQorICovDQorZXh0ZXJuIHZvaWQgX3Rhc2tfaXNvbGF0aW9uX2ludGVy cnVwdChjb25zdCBjaGFyICpmbXQsIC4uLik7DQorI2RlZmluZSB0YXNrX2lzb2xhdGlvbl9pbnRl cnJ1cHQoZm10LCAuLi4pCQkJCVwNCisJZG8gewkJCQkJCQkJXA0KKwkJaWYgKGN1cnJlbnRfdGhy ZWFkX2luZm8oKS0+ZmxhZ3MgJiBfVElGX1RBU0tfSVNPTEFUSU9OKQlcDQorCQkJX3Rhc2tfaXNv bGF0aW9uX2ludGVycnVwdChmbXQsICMjIF9fVkFfQVJHU19fKTsJXA0KKwl9IHdoaWxlICgwKQ0K Kw0KKy8qKg0KKyAqIHRhc2tfaXNvbGF0aW9uX3JlbW90ZSgpIC0gcmVwb3J0IGEgcmVtb3RlIGlu dGVycnVwdCBvZiBhbiBpc29sYXRlZCB0YXNrDQorICogQGNwdToJVGhlIHJlbW90ZSBjcHUgdGhh dCBpcyBhYm91dCB0byBiZSBpbnRlcnJ1cHRlZC4NCisgKiBAZm10OglBIGZvcm1hdCBzdHJpbmcg ZGVzY3JpYmluZyB0aGUgaW50ZXJydXB0DQorICogQC4uLjoJRm9ybWF0IGFyZ3VtZW50cywgaWYg YW55Lg0KKyAqDQorICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSBpbnZva2VkIGFueSB0aW1lIGEg cmVtb3RlIElQSSBvciBvdGhlciB0eXBlIG9mDQorICogaW50ZXJydXB0IGlzIGJlaW5nIGRlbGl2 ZXJlZCB0byBhbm90aGVyIGNwdS4gVGhlIGZ1bmN0aW9uIHdpbGwgY2hlY2sgdG8NCisgKiBzZWUg aWYgdGhlIHRhcmdldCBjb3JlIGlzIHJ1bm5pbmcgYSB0YXNrLWlzb2xhdGlvbiB0YXNrLCBhbmQg Z2VuZXJhdGUgYQ0KKyAqIGRpYWdub3N0aWMgb24gdGhlIGNvbnNvbGUgaWYgc287IGluIGFkZGl0 aW9uLCB3ZSB0YWcgdGhlIHRhc2sgc28gaXQNCisgKiBkb2Vzbid0IGdlbmVyYXRlIGFub3RoZXIg ZGlhZ25vc3RpYyB3aGVuIHRoZSBpbnRlcnJ1cHQgYWN0dWFsbHkgYXJyaXZlcy4NCisgKiBHZW5l cmF0aW5nIGEgZGlhZ25vc3RpYyByZW1vdGVseSB5aWVsZHMgYSBjbGVhcmVyIGluZGljYXRpb24g b2Ygd2hhdA0KKyAqIGhhcHBlbmVkIHRoZW4ganVzdCByZXBvcnRpbmcgb25seSB3aGVuIHRoZSBy ZW1vdGUgY29yZSBpcyBpbnRlcnJ1cHRlZC4NCisgKg0KKyAqLw0KK2V4dGVybiB2b2lkIHRhc2tf aXNvbGF0aW9uX3JlbW90ZShpbnQgY3B1LCBjb25zdCBjaGFyICpmbXQsIC4uLik7DQorDQorLyoq DQorICogdGFza19pc29sYXRpb25fcmVtb3RlX2NwdW1hc2soKSAtIHJlcG9ydCBpbnRlcnJ1cHRp b24gb2YgbXVsdGlwbGUgY3B1cw0KKyAqIEBtYXNrOglUaGUgc2V0IG9mIHJlbW90ZXMgY3B1cyB0 aGF0IGFyZSBhYm91dCB0byBiZSBpbnRlcnJ1cHRlZC4NCisgKiBAZm10OglBIGZvcm1hdCBzdHJp bmcgZGVzY3JpYmluZyB0aGUgaW50ZXJydXB0DQorICogQC4uLjoJRm9ybWF0IGFyZ3VtZW50cywg aWYgYW55Lg0KKyAqDQorICogVGhpcyBpcyB0aGUgY3B1bWFzayB2YXJpYW50IG9mIF90YXNrX2lz b2xhdGlvbl9yZW1vdGUoKS4gIFdlDQorICogZ2VuZXJhdGUgYSBzaW5nbGUtbGluZSBkaWFnbm9z dGljIG1lc3NhZ2UgZXZlbiBpZiBtdWx0aXBsZSByZW1vdGUNCisgKiB0YXNrLWlzb2xhdGlvbiBj cHVzIGFyZSBiZWluZyBpbnRlcnJ1cHRlZC4NCisgKi8NCitleHRlcm4gdm9pZCB0YXNrX2lzb2xh dGlvbl9yZW1vdGVfY3B1bWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywNCisJCQkJCSAg Y29uc3QgY2hhciAqZm10LCAuLi4pOw0KKw0KKy8qKg0KKyAqIF90YXNrX2lzb2xhdGlvbl9zaWdu YWwoKSAtIGRpc2FibGUgdGFzayBpc29sYXRpb24gd2hlbiBzaWduYWwgaXMgcGVuZGluZw0KKyAq IEB0YXNrOglUaGUgdGFzayBmb3Igd2hpY2ggdG8gZGlzYWJsZSBpc29sYXRpb24uDQorICoNCisg KiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhIGRpYWdub3N0aWMgYW5kIGRpc2FibGVzIHRhc2sg aXNvbGF0aW9uOyBpdA0KKyAqIHNob3VsZCBiZSBjYWxsZWQgaWYgVElGX1RBU0tfSVNPTEFUSU9O IGlzIHNldCB3aGVuIG5vdGlmeWluZyBhIHRhc2sgb2YgYQ0KKyAqIHBlbmRpbmcgc2lnbmFsLiAg VGhlIHRhc2tfaXNvbGF0aW9uX2ludGVycnVwdCgpIGZ1bmN0aW9uIG5vcm1hbGx5DQorICogZ2Vu ZXJhdGVzIGEgZGlhZ25vc3RpYyBmb3IgZXZlbnRzIHRoYXQganVzdCBpbnRlcnJ1cHQgYSB0YXNr IHdpdGhvdXQNCisgKiBnZW5lcmF0aW5nIGEgc2lnbmFsOyBoZXJlIHdlIG5lZWQgdG8gaG9vayB0 aGUgcGF0aHMgdGhhdCBjb3JyZXNwb25kIHRvDQorICogaW50ZXJydXB0cyB0aGF0IGRvIGdlbmVy YXRlIGEgc2lnbmFsLiAgVGhlIG1hY3JvIHRhc2tfaXNvbGF0aW9uX3NpZ25hbCgpDQorICogd3Jh cHMgdGhlIFRJRl9UQVNLX0lTT0xBVElPTiBmbGFnIHRlc3QgdG8gc2ltcGxpZnkgdGhlIGNhbGxl ciBjb2RlLg0KKyAqLw0KK2V4dGVybiB2b2lkIF90YXNrX2lzb2xhdGlvbl9zaWduYWwoc3RydWN0 IHRhc2tfc3RydWN0ICp0YXNrKTsNCisjZGVmaW5lIHRhc2tfaXNvbGF0aW9uX3NpZ25hbCh0YXNr KQkJCQkJXA0KKwlkbyB7CQkJCQkJCQlcDQorCQlpZiAodGFza190aHJlYWRfaW5mbyh0YXNrKS0+ ZmxhZ3MgJiBfVElGX1RBU0tfSVNPTEFUSU9OKSBcDQorCQkJX3Rhc2tfaXNvbGF0aW9uX3NpZ25h bCh0YXNrKTsJCQlcDQorCX0gd2hpbGUgKDApDQorDQorLyoqDQorICogdGFza19pc29sYXRpb25f dXNlcl9leGl0KCkgLSBkZWJ1ZyBhbGwgdXNlcl9leGl0IGNhbGxzDQorICoNCisgKiBCeSBkZWZh dWx0LCB3ZSBkb24ndCBnZW5lcmF0ZSBhbiBleGNlcHRpb24gaW4gdGhlIGxvdy1sZXZlbCB1c2Vy X2V4aXQoKQ0KKyAqIGNvZGUsIGJlY2F1c2UgcHJvZ3JhbXMgbG9zZSB0aGUgYWJpbGl0eSB0byBk aXNhYmxlIHRhc2sgaXNvbGF0aW9uOiB0aGUNCisgKiB1c2VyX2V4aXQoKSBob29rIHdpbGwgY2F1 c2UgYSBzaWduYWwgcHJpb3IgdG8gdGFza19pc29sYXRpb25fc3lzY2FsbCgpDQorICogZGlzYWJs aW5nIHRhc2sgaXNvbGF0aW9uLiAgSW4gYWRkaXRpb24sIGl0IG1lYW5zIHRoYXQgd2UgbG9zZSBh bGwgdGhlDQorICogZGlhZ25vc3RpYyBpbmZvIG90aGVyd2lzZSBhdmFpbGFibGUgZnJvbSB0YXNr X2lzb2xhdGlvbl9pbnRlcnJ1cHQoKSBob29rcw0KKyAqIGxhdGVyIGluIHRoZSBpbnRlcnJ1cHQt aGFuZGxpbmcgcHJvY2Vzcy4gIEJ1dCB5b3UgbWF5IGVuYWJsZSBpdCBoZXJlIGZvcg0KKyAqIGEg c3BlY2lhbCBrZXJuZWwgYnVpbGQgaWYgeW91IGFyZSBoYXZpbmcgdW5kaWFnbm9zZWQgdXNlcnNw YWNlIGppdHRlci4NCisgKi8NCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19pc29sYXRpb25fdXNl cl9leGl0KHZvaWQpDQorew0KKyNpZmRlZiBERUJVR19UQVNLX0lTT0xBVElPTg0KKwl0YXNrX2lz b2xhdGlvbl9pbnRlcnJ1cHQoInVzZXJfZXhpdCIpOw0KKyNlbmRpZg0KK30NCisNCisjZWxzZSAv KiAhQ09ORklHX1RBU0tfSVNPTEFUSU9OICovDQorc3RhdGljIGlubGluZSBpbnQgdGFza19pc29s YXRpb25fcmVxdWVzdCh1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH0NCitz dGF0aWMgaW5saW5lIHZvaWQgdGFza19pc29sYXRpb25fc3RhcnQodm9pZCkgeyB9DQorc3RhdGlj IGlubGluZSBib29sIGlzX2lzb2xhdGlvbl9jcHUoaW50IGNwdSkgeyByZXR1cm4gMDsgfQ0KK3N0 YXRpYyBpbmxpbmUgaW50IHRhc2tfaXNvbGF0aW9uX29uX2NwdShpbnQgY3B1KSB7IHJldHVybiAw OyB9DQorc3RhdGljIGlubGluZSB2b2lkIHRhc2tfaXNvbGF0aW9uX2NwdW1hc2soc3RydWN0IGNw dW1hc2sgKm1hc2spIHsgfQ0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9jbGVh cl9jcHVtYXNrKHN0cnVjdCBjcHVtYXNrICptYXNrKSB7IH0NCitzdGF0aWMgaW5saW5lIHZvaWQg dGFza19pc29sYXRpb25fY3B1X2NsZWFudXAodm9pZCkgeyB9DQorc3RhdGljIGlubGluZSB2b2lk IHRhc2tfaXNvbGF0aW9uX2NoZWNrX3J1bl9jbGVhbnVwKHZvaWQpIHsgfQ0KK3N0YXRpYyBpbmxp bmUgaW50IHRhc2tfaXNvbGF0aW9uX3N5c2NhbGwoaW50IG5yKSB7IHJldHVybiAwOyB9DQorc3Rh dGljIGlubGluZSB2b2lkIHRhc2tfaXNvbGF0aW9uX2ludGVycnVwdChjb25zdCBjaGFyICpmbXQs IC4uLikgeyB9DQorc3RhdGljIGlubGluZSB2b2lkIHRhc2tfaXNvbGF0aW9uX3JlbW90ZShpbnQg Y3B1LCBjb25zdCBjaGFyICpmbXQsIC4uLikgeyB9DQorc3RhdGljIGlubGluZSB2b2lkIHRhc2tf aXNvbGF0aW9uX3JlbW90ZV9jcHVtYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLA0KKwkJ CQkJCSBjb25zdCBjaGFyICpmbXQsIC4uLikgeyB9DQorc3RhdGljIGlubGluZSB2b2lkIHRhc2tf aXNvbGF0aW9uX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spIHsgfQ0KK3N0YXRpYyBp bmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl91c2VyX2V4aXQodm9pZCkgeyB9DQorI2VuZGlmDQor DQorI2VuZGlmIC8qIF9MSU5VWF9JU09MQVRJT05fSCAqLw0KZGlmZiAtLWdpdCBhL2luY2x1ZGUv bGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaA0KaW5kZXggMDQyNzg0OTNiZjE1 Li41MmZkYjMyYWEzYjkgMTAwNjQ0DQotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgNCisrKyBi L2luY2x1ZGUvbGludXgvc2NoZWQuaA0KQEAgLTEyODAsNiArMTI4MCwxMCBAQCBzdHJ1Y3QgdGFz a19zdHJ1Y3Qgew0KIAl1bnNpZ25lZCBsb25nCQkJbG93ZXN0X3N0YWNrOw0KIAl1bnNpZ25lZCBs b25nCQkJcHJldl9sb3dlc3Rfc3RhY2s7DQogI2VuZGlmDQorI2lmZGVmIENPTkZJR19UQVNLX0lT T0xBVElPTg0KKwl1bnNpZ25lZCBzaG9ydAkJCXRhc2tfaXNvbGF0aW9uX2ZsYWdzOyAgLyogcHJj dGwgKi8NCisJdW5zaWduZWQgc2hvcnQJCQl0YXNrX2lzb2xhdGlvbl9zdGF0ZTsNCisjZW5kaWYN CiANCiAJLyoNCiAJICogTmV3IGZpZWxkcyBmb3IgdGFza19zdHJ1Y3Qgc2hvdWxkIGJlIGFkZGVk IGFib3ZlIGhlcmUsIHNvIHRoYXQNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpY2suaCBi L2luY2x1ZGUvbGludXgvdGljay5oDQppbmRleCA3MzQwNjEzYzdlZmYuLjI3YzdjMDMzZDVhOCAx MDA2NDQNCi0tLSBhL2luY2x1ZGUvbGludXgvdGljay5oDQorKysgYi9pbmNsdWRlL2xpbnV4L3Rp Y2suaA0KQEAgLTI2OCw2ICsyNjgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19kZXBfY2xl YXJfc2lnbmFsKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWduYWwsDQogZXh0ZXJuIHZvaWQgdGlj a19ub2h6X2Z1bGxfa2lja19jcHUoaW50IGNwdSk7DQogZXh0ZXJuIHZvaWQgX190aWNrX25vaHpf dGFza19zd2l0Y2godm9pZCk7DQogZXh0ZXJuIHZvaWQgX19pbml0IHRpY2tfbm9oel9mdWxsX3Nl dHVwKGNwdW1hc2tfdmFyX3QgY3B1bWFzayk7DQorI2lmZGVmIENPTkZJR19UQVNLX0lTT0xBVElP Tg0KK2V4dGVybiBpbnQgdHJ5X3N0b3BfZnVsbF90aWNrKHZvaWQpOw0KKyNlbmRpZg0KICNlbHNl DQogc3RhdGljIGlubGluZSBib29sIHRpY2tfbm9oel9mdWxsX2VuYWJsZWQodm9pZCkgeyByZXR1 cm4gZmFsc2U7IH0NCiBzdGF0aWMgaW5saW5lIGJvb2wgdGlja19ub2h6X2Z1bGxfY3B1KGludCBj cHUpIHsgcmV0dXJuIGZhbHNlOyB9DQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3By Y3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaA0KaW5kZXggMDdiNGY4MTMxZTM2Li5m NDg0OGVkMmEwNjkgMTAwNjQ0DQotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaA0KKysr IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgNCkBAIC0yMzgsNCArMjM4LDEwIEBAIHN0cnVj dCBwcmN0bF9tbV9tYXAgew0KICNkZWZpbmUgUFJfU0VUX0lPX0ZMVVNIRVIJCTU3DQogI2RlZmlu ZSBQUl9HRVRfSU9fRkxVU0hFUgkJNTgNCiANCisvKiBFbmFibGUgdGFza19pc29sYXRpb24gbW9k ZSBmb3IgVEFTS19JU09MQVRJT04ga2VybmVscy4gKi8NCisjZGVmaW5lIFBSX1RBU0tfSVNPTEFU SU9OCQk0OA0KKyMgZGVmaW5lIFBSX1RBU0tfSVNPTEFUSU9OX0VOQUJMRQkoMSA8PCAwKQ0KKyMg ZGVmaW5lIFBSX1RBU0tfSVNPTEFUSU9OX1NFVF9TSUcoc2lnKQkoKChzaWcpICYgMHg3ZikgPDwg OCkNCisjIGRlZmluZSBQUl9UQVNLX0lTT0xBVElPTl9HRVRfU0lHKGJpdHMpICgoKGJpdHMpID4+ IDgpICYgMHg3ZikNCisNCiAjZW5kaWYgLyogX0xJTlVYX1BSQ1RMX0ggKi8NCmRpZmYgLS1naXQg YS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcNCmluZGV4IDIwYTZhYzMzNzYxYy4uZWNkZjU2 N2Y2YmQ0IDEwMDY0NA0KLS0tIGEvaW5pdC9LY29uZmlnDQorKysgYi9pbml0L0tjb25maWcNCkBA IC01NzYsNiArNTc2LDM0IEBAIGNvbmZpZyBDUFVfSVNPTEFUSU9ODQogDQogc291cmNlICJrZXJu ZWwvcmN1L0tjb25maWciDQogDQorY29uZmlnIEhBVkVfQVJDSF9UQVNLX0lTT0xBVElPTg0KKwli b29sDQorDQorY29uZmlnIFRBU0tfSVNPTEFUSU9ODQorCWJvb2wgIlByb3ZpZGUgaGFyZCBDUFUg aXNvbGF0aW9uIGZyb20gdGhlIGtlcm5lbCBvbiBkZW1hbmQiDQorCWRlcGVuZHMgb24gTk9fSFpf RlVMTCAmJiBIQVZFX0FSQ0hfVEFTS19JU09MQVRJT04NCisJaGVscA0KKw0KKwlBbGxvdyB1c2Vy c3BhY2UgcHJvY2Vzc2VzIHRoYXQgcGxhY2UgdGhlbXNlbHZlcyBvbiBjb3JlcyB3aXRoDQorCW5v aHpfZnVsbCBhbmQgaXNvbGNwdXMgZW5hYmxlZCwgYW5kIHJ1biBwcmN0bChQUl9UQVNLX0lTT0xB VElPTiksDQorCXRvICJpc29sYXRlIiB0aGVtc2VsdmVzIGZyb20gdGhlIGtlcm5lbC4gIFByaW9y IHRvIHJldHVybmluZyB0bw0KKwl1c2Vyc3BhY2UsIGlzb2xhdGVkIHRhc2tzIHdpbGwgYXJyYW5n ZSB0aGF0IG5vIGZ1dHVyZSBrZXJuZWwNCisJYWN0aXZpdHkgd2lsbCBpbnRlcnJ1cHQgdGhlIHRh c2sgd2hpbGUgdGhlIHRhc2sgaXMgcnVubmluZyBpbg0KKwl1c2Vyc3BhY2UuICBBdHRlbXB0aW5n IHRvIHJlLWVudGVyIHRoZSBrZXJuZWwgd2hpbGUgaW4gdGhpcyBtb2RlDQorCXdpbGwgY2F1c2Ug dGhlIHRhc2sgdG8gYmUgdGVybWluYXRlZCB3aXRoIGEgc2lnbmFsOyB5b3UgbXVzdA0KKwlleHBs aWNpdGx5IHVzZSBwcmN0bCgpIHRvIGRpc2FibGUgdGFzayBpc29sYXRpb24gYmVmb3JlIHJlc3Vt aW5nDQorCW5vcm1hbCB1c2Ugb2YgdGhlIGtlcm5lbC4NCisNCisJVGhpcyAiaGFyZCIgaXNvbGF0 aW9uIGZyb20gdGhlIGtlcm5lbCBpcyByZXF1aXJlZCBmb3IgdXNlcnNwYWNlDQorCXRhc2tzIHRo YXQgYXJlIHJ1bm5pbmcgaGFyZCByZWFsLXRpbWUgdGFza3MgaW4gdXNlcnNwYWNlLCBzdWNoIGFz DQorCWEgaGlnaC1zcGVlZCBuZXR3b3JrIGRyaXZlciBpbiB1c2Vyc3BhY2UuICBXaXRob3V0IHRo aXMgb3B0aW9uLCBidXQNCisJd2l0aCBOT19IWl9GVUxMIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2ls bCBtYWtlIGEgYmVzdC1mYWl0aCwgInNvZnQiDQorCWVmZm9ydCB0byBzaGllbGQgYSBzaW5nbGUg dXNlcnNwYWNlIHByb2Nlc3MgZnJvbSBpbnRlcnJ1cHRzLCBidXQNCisJbWFrZXMgbm8gZ3VhcmFu dGVlcy4NCisNCisJWW91IHNob3VsZCBzYXkgIk4iIHVubGVzcyB5b3UgYXJlIGludGVuZGluZyB0 byBydW4gYQ0KKwloaWdoLXBlcmZvcm1hbmNlIHVzZXJzcGFjZSBkcml2ZXIgb3Igc2ltaWxhciB0 YXNrLg0KKw0KIGNvbmZpZyBCVUlMRF9CSU4yQw0KIAlib29sDQogCWRlZmF1bHQgbg0KZGlmZiAt LWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQ0KaW5kZXggNGNiNDEzMGNl ZDMyLi4yZjJhZTkxZjkwZDUgMTAwNjQ0DQotLS0gYS9rZXJuZWwvTWFrZWZpbGUNCisrKyBiL2tl cm5lbC9NYWtlZmlsZQ0KQEAgLTEyMiw2ICsxMjIsOCBAQCBvYmotJChDT05GSUdfR0NDX1BMVUdJ Tl9TVEFDS0xFQUspICs9IHN0YWNrbGVhay5vDQogS0FTQU5fU0FOSVRJWkVfc3RhY2tsZWFrLm8g Oj0gbg0KIEtDT1ZfSU5TVFJVTUVOVF9zdGFja2xlYWsubyA6PSBuDQogDQorb2JqLSQoQ09ORklH X1RBU0tfSVNPTEFUSU9OKSArPSBpc29sYXRpb24ubw0KKw0KICQob2JqKS9jb25maWdzLm86ICQo b2JqKS9jb25maWdfZGF0YS5neg0KIA0KIHRhcmdldHMgKz0gY29uZmlnX2RhdGEuZ3oNCmRpZmYg LS1naXQgYS9rZXJuZWwvY29udGV4dF90cmFja2luZy5jIGIva2VybmVsL2NvbnRleHRfdHJhY2tp bmcuYw0KaW5kZXggMDI5NmI0YmRhOGYxLi5lOTIwNjczNmYyMTkgMTAwNjQ0DQotLS0gYS9rZXJu ZWwvY29udGV4dF90cmFja2luZy5jDQorKysgYi9rZXJuZWwvY29udGV4dF90cmFja2luZy5jDQpA QCAtMjEsNiArMjEsNyBAQA0KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+DQogI2luY2x1ZGUg PGxpbnV4L2V4cG9ydC5oPg0KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+DQorI2luY2x1ZGUg PGxpbnV4L2lzb2xhdGlvbi5oPg0KIA0KICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUw0KICNp bmNsdWRlIDx0cmFjZS9ldmVudHMvY29udGV4dF90cmFja2luZy5oPg0KQEAgLTE1Nyw2ICsxNTgs NyBAQCB2b2lkIF9fY29udGV4dF90cmFja2luZ19leGl0KGVudW0gY3R4X3N0YXRlIHN0YXRlKQ0K IAkJCWlmIChzdGF0ZSA9PSBDT05URVhUX1VTRVIpIHsNCiAJCQkJdnRpbWVfdXNlcl9leGl0KGN1 cnJlbnQpOw0KIAkJCQl0cmFjZV91c2VyX2V4aXQoMCk7DQorCQkJCXRhc2tfaXNvbGF0aW9uX3Vz ZXJfZXhpdCgpOw0KIAkJCX0NCiAJCX0NCiAJCV9fdGhpc19jcHVfd3JpdGUoY29udGV4dF90cmFj a2luZy5zdGF0ZSwgQ09OVEVYVF9LRVJORUwpOw0KZGlmZiAtLWdpdCBhL2tlcm5lbC9pc29sYXRp b24uYyBiL2tlcm5lbC9pc29sYXRpb24uYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAw MDAwMDAwMDAwMC4uOGU5ODJhZTFiMTllDQotLS0gL2Rldi9udWxsDQorKysgYi9rZXJuZWwvaXNv bGF0aW9uLmMNCkBAIC0wLDAgKzEsNzc0IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQ0KKy8qDQorICogIGxpbnV4L2tlcm5lbC9pc29sYXRpb24uYw0KKyAqDQor ICogIEltcGxlbWVudGF0aW9uIG9mIHRhc2sgaXNvbGF0aW9uLg0KKyAqDQorICogQXV0aG9yczoN CisgKiAgIENocmlzIE1ldGNhbGYgPGNtZXRjYWxmQG1lbGxhbm94LmNvbT4NCisgKiAgIEFsZXgg QmVsaXRzIDxhYmVsaXRzQG1hcnZlbGwuY29tPg0KKyAqICAgWXVyaSBOb3JvdiA8eW5vcm92QG1h cnZlbGwuY29tPg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9tbS5oPg0KKyNpbmNsdWRlIDxs aW51eC9zd2FwLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPg0KKyNpbmNsdWRlIDxsaW51 eC9zY2hlZC5oPg0KKyNpbmNsdWRlIDxsaW51eC9pc29sYXRpb24uaD4NCisjaW5jbHVkZSA8bGlu dXgvc3lzY2FsbHMuaD4NCisjaW5jbHVkZSA8bGludXgvc21wLmg+DQorI2luY2x1ZGUgPGxpbnV4 L3RpY2suaD4NCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPg0KKyNpbmNsdWRlIDxhc20vc3lzY2Fs bC5oPg0KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+DQorDQorLyoNCisgKiBUaGVzZSB2YWx1 ZXMgYXJlIHN0b3JlZCBpbiB0YXNrX2lzb2xhdGlvbl9zdGF0ZS4NCisgKiBOb3RlIHRoYXQgU1RB VEVfTk9STUFMICsgVElGX1RBU0tfSVNPTEFUSU9OIG1lYW5zIHdlIGFyZSBzdGlsbA0KKyAqIHJl dHVybmluZyBmcm9tIHN5c19wcmN0bCgpIHRvIHVzZXJzcGFjZS4NCisgKi8NCitlbnVtIHsNCisJ U1RBVEVfTk9STUFMID0gMCwJLyogTm90IGlzb2xhdGVkICovDQorCVNUQVRFX0lTT0xBVEVEID0g MQkvKiBJbiB1c2Vyc3BhY2UsIGlzb2xhdGVkICovDQorfTsNCisNCisvKg0KKyAqIFRoaXMgdmFy aWFibGUgY29udGFpbnMgdGhyZWFkIGZsYWdzIGNvcGllZCBhdCB0aGUgbW9tZW50DQorICogd2hl biBzY2hlZHVsZSgpIHN3aXRjaGVkIHRvIHRoZSB0YXNrIG9uIGEgZ2l2ZW4gQ1BVLA0KKyAqIG9y IDAgaWYgbm8gdGFzayBpcyBydW5uaW5nLg0KKyAqLw0KK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVk IGxvbmcsIHRza190aHJlYWRfZmxhZ3NfY2FjaGUpOw0KKw0KKy8qDQorICogQ291bnRlciBmb3Ig aXNvbGF0aW9uIHN0YXRlIG9uIGEgZ2l2ZW4gQ1BVLCBpbmNyZW1lbnRzIHdoZW4gZW50ZXJpbmcN CisgKiBpc29sYXRpb24gYW5kIGRlY3JlbWVudHMgd2hlbiBleGl0aW5nIGlzb2xhdGlvbiAoYmVm b3JlIG9yIGFmdGVyIHRoZQ0KKyAqIGNsZWFudXApLiBNdWx0aXBsZSBzaW11bHRhbmVvdXNseSBy dW5uaW5nIHByb2NlZHVyZXMgZW50ZXJpbmcgb3INCisgKiBleGl0aW5nIGlzb2xhdGlvbiBhcmUg cHJldmVudGVkIGJ5IGNoZWNraW5nIHRoZSByZXN1bHQgb2YNCisgKiBpbmNyZW1lbnRpbmcgb3Ig ZGVjcmVtZW50aW5nIHRoaXMgdmFyaWFibGUuIFRoaXMgdmFyaWFibGUgaXMgYm90aA0KKyAqIGlu Y3JlbWVudGVkIGFuZCBkZWNyZW1lbnRlZCBieSBDUFUgdGhhdCBjYXVzZWQgaXNvbGF0aW9uIGVu dGVyaW5nIG9yDQorICogZXhpdC4NCisgKg0KKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ug bXVsdGlwbGUgaXNvbGF0aW9uLWJyZWFraW5nIGV2ZW50cyBtYXkgaGFwcGVuDQorICogYXQgb25j ZSAob3Igb25lIGFzIHRoZSByZXN1bHQgb2YgdGhlIG90aGVyKSwgaG93ZXZlciBpc29sYXRpb24g ZXhpdA0KKyAqIG1heSBvbmx5IGhhcHBlbiBvbmNlIHRvIHRyYW5zaXRpb24gZnJvbSBpc29sYXRl ZCB0byBub24taXNvbGF0ZWQgc3RhdGUuDQorICogVGhlcmVmb3JlLCBpZiBkZWNyZW1lbnRpbmcg dGhpcyBjb3VudGVyIHJlc3VsdHMgaW4gYSB2YWx1ZSBsZXNzIHRoYW4gMCwNCisgKiBpc29sYXRp b24gZXhpdCBwcm9jZWR1cmUgY2FuJ3QgYmUgc3RhcnRlZCAtLSBpdCBhbHJlYWR5IGhhcHBlbmVk LCBvciBpcw0KKyAqIGluIHByb2dyZXNzLCBvciBpc29sYXRpb24gaXMgbm90IGVudGVyZWQgeWV0 Lg0KKyAqLw0KK0RFRklORV9QRVJfQ1BVKGF0b21pY190LCBpc29sX2NvdW50ZXIpOw0KKw0KKy8q DQorICogRGVzY3JpcHRpb24gb2YgdGhlIGxhc3QgdHdvIHRhc2tzIHRoYXQgcmFuIGlzb2xhdGVk IG9uIGEgZ2l2ZW4gQ1BVLg0KKyAqIFRoaXMgaXMgaW50ZW5kZWQgb25seSBmb3IgbWVzc2FnZXMg YWJvdXQgaXNvbGF0aW9uIGJyZWFraW5nLiBXZQ0KKyAqIGRvbid0IHdhbnQgYW55IHJlZmVyZW5j ZXMgdG8gYWN0dWFsIHRhc2sgd2hpbGUgYWNjZXNzaW5nIHRoaXMgZnJvbQ0KKyAqIENQVSB0aGF0 IGNhdXNlZCBpc29sYXRpb24gYnJlYWtpbmcgLS0gd2Uga25vdyBub3RoaW5nIGFib3V0IHRpbWlu Zw0KKyAqIGFuZCBkb24ndCB3YW50IHRvIHVzZSBsb2NraW5nIG9yIFJDVS4NCisgKi8NCitzdHJ1 Y3QgaXNvbF90YXNrX2Rlc2Mgew0KKwlhdG9taWNfdCBjdXJyX2luZGV4Ow0KKwlhdG9taWNfdCBj dXJyX2luZGV4X3dyOw0KKwlib29sCXdhcm5lZFsyXTsNCisJcGlkX3QJcGlkWzJdOw0KKwlwaWRf dAl0Z2lkWzJdOw0KKwljaGFyCWNvbW1bMl1bVEFTS19DT01NX0xFTl07DQorfTsNCitzdGF0aWMg REVGSU5FX1BFUl9DUFUoc3RydWN0IGlzb2xfdGFza19kZXNjLCBpc29sX3Rhc2tfZGVzY3MpOw0K Kw0KKy8qDQorICogQ291bnRlciBmb3IgaXNvbGF0aW9uIGV4aXRpbmcgcHJvY2VkdXJlcyAoZnJv bSByZXF1ZXN0IHRvIHRoZSBzdGFydCBvZg0KKyAqIGNsZWFudXApIGJlaW5nIGF0dGVtcHRlZCBh dCBvbmNlIG9uIGEgQ1BVLiBOb3JtYWxseSBpbmNyZW1lbnRpbmcgb2YNCisgKiB0aGlzIGNvdW50 ZXIgaXMgcGVyZm9ybWVkIGZyb20gdGhlIENQVSB0aGF0IGNhdXNlZCBpc29sYXRpb24gYnJlYWtp bmcsDQorICogaG93ZXZlciBkZWNyZW1lbnRpbmcgaXMgZG9uZSBmcm9tIHRoZSBjbGVhbnVwIHBy b2NlZHVyZSwgZGVsZWdhdGVkIHRvDQorICogdGhlIENQVSB0aGF0IGlzIGV4aXRpbmcgaXNvbGF0 aW9uLCBub3QgZnJvbSB0aGUgQ1BVIHRoYXQgY2F1c2VkIGlzb2xhdGlvbg0KKyAqIGJyZWFraW5n Lg0KKyAqDQorICogSWYgaW5jcmVtZW50aW5nIHRoaXMgY291bnRlciB3aGlsZSBzdGFydGluZyBp c29sYXRpb24gZXhpdCBwcm9jZWR1cmUNCisgKiByZXN1bHRzIGluIGEgdmFsdWUgZ3JlYXRlciB0 aGFuIDAsIGlzb2xhdGlvbiBleGl0aW5nIGlzIGFscmVhZHkgaW4NCisgKiBwcm9ncmVzcywgYW5k IGNsZWFudXAgZGlkIG5vdCBzdGFydCB5ZXQuIFRoaXMgbWVhbnMsIGNvdW50ZXIgc2hvdWxkIGJl DQorICogZGVjcmVtZW50ZWQgYmFjaywgYW5kIGlzb2xhdGlvbiBleGl0IHRoYXQgaXMgYWxyZWFk eSBpbiBwcm9ncmVzcywgc2hvdWxkDQorICogYmUgYWxsb3dlZCB0byBjb21wbGV0ZS4gT3RoZXJ3 aXNlLCBhIG5ldyBpc29sYXRpb24gZXhpdCBwcm9jZWR1cmUgc2hvdWxkDQorICogYmUgc3RhcnRl ZC4NCisgKi8NCitERUZJTkVfUEVSX0NQVShhdG9taWNfdCwgaXNvbF9leGl0X2NvdW50ZXIpOw0K Kw0KKy8qDQorICogRGVzY3JpcHRvciBmb3IgaXNvbGF0aW9uLWJyZWFraW5nIFNNUCBjYWxscw0K KyAqLw0KK0RFRklORV9QRVJfQ1BVKGNhbGxfc2luZ2xlX2RhdGFfdCwgaXNvbF9icmVha19jc2Qp Ow0KKw0KK2NwdW1hc2tfdmFyX3QgdGFza19pc29sYXRpb25fbWFwOw0KK2NwdW1hc2tfdmFyX3Qg dGFza19pc29sYXRpb25fY2xlYW51cF9tYXA7DQorc3RhdGljIERFRklORV9TUElOTE9DSyh0YXNr X2lzb2xhdGlvbl9jbGVhbnVwX2xvY2spOw0KKw0KKy8qIFdlIGNhbiBydW4gb24gY3B1cyB0aGF0 IGFyZSBpc29sYXRlZCBmcm9tIHRoZSBzY2hlZHVsZXIgYW5kIGFyZSBub2h6X2Z1bGwuICovDQor c3RhdGljIGludCBfX2luaXQgdGFza19pc29sYXRpb25faW5pdCh2b2lkKQ0KK3sNCisJYWxsb2Nf Ym9vdG1lbV9jcHVtYXNrX3ZhcigmdGFza19pc29sYXRpb25fY2xlYW51cF9tYXApOw0KKwlpZiAo YWxsb2NfY3B1bWFza192YXIoJnRhc2tfaXNvbGF0aW9uX21hcCwgR0ZQX0tFUk5FTCkpDQorCQkv Kg0KKwkJICogQXQgdGhpcyBwb2ludCB0YXNrIGlzb2xhdGlvbiBzaG91bGQgbWF0Y2gNCisJCSAq IG5vaHpfZnVsbC4gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuDQorCQkgKi8NCisJCWNw dW1hc2tfY29weSh0YXNrX2lzb2xhdGlvbl9tYXAsIHRpY2tfbm9oel9mdWxsX21hc2spOw0KKwly ZXR1cm4gMDsNCit9DQorY29yZV9pbml0Y2FsbCh0YXNrX2lzb2xhdGlvbl9pbml0KQ0KKw0KKy8q IEVuYWJsZSBzdGFjayBiYWNrdHJhY2VzIG9mIGFueSBpbnRlcnJ1cHRzIG9mIHRhc2tfaXNvbGF0 aW9uIGNvcmVzLiAqLw0KK3N0YXRpYyBib29sIHRhc2tfaXNvbGF0aW9uX2RlYnVnOw0KK3N0YXRp YyBpbnQgX19pbml0IHRhc2tfaXNvbGF0aW9uX2RlYnVnX2Z1bmMoY2hhciAqc3RyKQ0KK3sNCisJ dGFza19pc29sYXRpb25fZGVidWcgPSB0cnVlOw0KKwlyZXR1cm4gMTsNCit9DQorX19zZXR1cCgi dGFza19pc29sYXRpb25fZGVidWciLCB0YXNrX2lzb2xhdGlvbl9kZWJ1Z19mdW5jKTsNCisNCisv Kg0KKyAqIFJlY29yZCBuYW1lLCBwaWQgYW5kIGdyb3VwIHBpZCBvZiB0aGUgdGFzayBlbnRlcmlu ZyBpc29sYXRpb24gb24NCisgKiB0aGUgY3VycmVudCBDUFUuDQorICovDQorc3RhdGljIHZvaWQg cmVjb3JkX2N1cnJfaXNvbGF0ZWRfdGFzayh2b2lkKQ0KK3sNCisJaW50IGluZDsNCisJaW50IGNw dSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsNCisJc3RydWN0IGlzb2xfdGFza19kZXNjICpkZXNjID0g JnBlcl9jcHUoaXNvbF90YXNrX2Rlc2NzLCBjcHUpOw0KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRh c2sgPSBjdXJyZW50Ow0KKw0KKwkvKiBGaW5pc2ggZXZlcnl0aGluZyBiZWZvcmUgcmVjb3JkaW5n IGN1cnJlbnQgdGFzayAqLw0KKwlzbXBfbWIoKTsNCisJaW5kID0gYXRvbWljX2luY19yZXR1cm4o JmRlc2MtPmN1cnJfaW5kZXhfd3IpICYgMTsNCisJZGVzYy0+Y29tbVtpbmRdW3NpemVvZih0YXNr LT5jb21tKSAtIDFdID0gJ1wwJzsNCisJbWVtY3B5KGRlc2MtPmNvbW1baW5kXSwgdGFzay0+Y29t bSwgc2l6ZW9mKHRhc2stPmNvbW0pIC0gMSk7DQorCWRlc2MtPnBpZFtpbmRdID0gdGFzay0+cGlk Ow0KKwlkZXNjLT50Z2lkW2luZF0gPSB0YXNrLT50Z2lkOw0KKwlkZXNjLT53YXJuZWRbaW5kXSA9 IGZhbHNlOw0KKwkvKiBXcml0ZSBldmVyeXRoaW5nLCB0byBiZSBzZWVuIGJ5IG90aGVyIENQVXMg Ki8NCisJc21wX21iKCk7DQorCWF0b21pY19pbmMoJmRlc2MtPmN1cnJfaW5kZXgpOw0KKwkvKiBF dmVyeW9uZSB3aWxsIHNlZSB0aGUgbmV3IHJlY29yZCBmcm9tIHRoaXMgcG9pbnQgKi8NCisJc21w X21iKCk7DQorfQ0KKw0KKy8qDQorICogUHJpbnQgbWVzc2FnZSBwcmVmaXhlZCB3aXRoIHRoZSBk ZXNjcmlwdGlvbiBvZiB0aGUgY3VycmVudCAob3INCisgKiBsYXN0KSBpc29sYXRlZCB0YXNrIG9u IGEgZ2l2ZW4gQ1BVLiBJbnRlbmRlZCBmb3IgaXNvbGF0aW9uIGJyZWFraW5nDQorICogbWVzc2Fn ZXMgdGhhdCBpbmNsdWRlIHRhcmdldCB0YXNrIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlLg0K KyAqDQorICogTWVzc2FnZXMgcHJvZHVjZWQgd2l0aCB0aGlzIGZ1bmN0aW9uIG1heSBoYXZlIG9i c29sZXRlIHRhc2sNCisgKiBpbmZvcm1hdGlvbiBpZiBpc29sYXRlZCB0YXNrcyBtYW5hZ2VkIHRv IGV4aXQsIHN0YXJ0IGFuZCBlbnRlcg0KKyAqIGlzb2xhdGlvbiBtdWx0aXBsZSB0aW1lcywgb3Ig bXVsdGlwbGUgdGFza3MgdHJpZWQgdG8gZW50ZXINCisgKiBpc29sYXRpb24gb24gdGhlIHNhbWUg Q1BVIGF0IG9uY2UuIEZvciB0aG9zZSB1bnVzdWFsIGNhc2VzIGl0IHdvdWxkDQorICogY29udGFp biBhIHZhbGlkIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZSBmb3IgaXNvbGF0aW9uIGJyZWFraW5n IGFuZA0KKyAqIHRhcmdldCBDUFUgbnVtYmVyLCBqdXN0IG5vdCB0aGUgY29ycmVjdCBkZXNjcmlw dGlvbiBvZiB3aGljaCB0YXNrDQorICogZW5kZWQgdXAgbG9zaW5nIGlzb2xhdGlvbi4NCisgKi8N CitpbnQgdGFza19pc29sYXRpb25fbWVzc2FnZShpbnQgY3B1LCBpbnQgbGV2ZWwsIGJvb2wgc3Vw cCwgY29uc3QgY2hhciAqZm10LCAuLi4pDQorew0KKwlzdHJ1Y3QgaXNvbF90YXNrX2Rlc2MgKmRl c2M7DQorCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsNCisJdmFfbGlzdCBhcmdzOw0KKwljaGFy IGJ1Zl9wcmVmaXhbVEFTS19DT01NX0xFTiArIDIwICsgMyAqIDIwXTsNCisJY2hhciBidWZbMjAw XTsNCisJaW50IGN1cnJfY3B1LCBpbmRfY291bnRlciwgaW5kX2NvdW50ZXJfb2xkLCBpbmQ7DQor DQorCWN1cnJfY3B1ID0gZ2V0X2NwdSgpOw0KKwlkZXNjID0gJnBlcl9jcHUoaXNvbF90YXNrX2Rl c2NzLCBjcHUpOw0KKwlpbmRfY291bnRlciA9IGF0b21pY19yZWFkKCZkZXNjLT5jdXJyX2luZGV4 KTsNCisNCisJaWYgKGN1cnJfY3B1ID09IGNwdSkgew0KKwkJLyoNCisJCSAqIE1lc3NhZ2UgaXMg Zm9yIHRoZSBjdXJyZW50IENQVSBzbyBjdXJyZW50DQorCQkgKiB0YXNrX3N0cnVjdCBzaG91bGQg YmUgdXNlZCBpbnN0ZWFkIG9mIGNhY2hlZA0KKwkJICogaW5mb3JtYXRpb24uDQorCQkgKg0KKwkJ ICogTGlrZSBpbiBvdGhlciBkaWFnbm9zdGljIG1lc3NhZ2VzLCBpZiBpc3N1ZWQgZnJvbQ0KKwkJ ICogaW50ZXJydXB0IGNvbnRleHQsIGN1cnJlbnQgd2lsbCBiZSB0aGUgaW50ZXJydXB0ZWQNCisJ CSAqIHRhc2suIFVubGlrZSBvdGhlciBkaWFnbm9zdGljIG1lc3NhZ2VzLCB0aGlzIGlzDQorCQkg KiBhbHdheXMgcmVsZXZhbnQgYmVjYXVzZSB0aGUgbWVzc2FnZSBpcyBhYm91dA0KKwkJICogaW50 ZXJydXB0aW5nIGEgdGFzay4NCisJCSAqLw0KKwkJaW5kID0gaW5kX2NvdW50ZXIgJiAxOw0KKwkJ aWYgKHN1cHAgJiYgZGVzYy0+d2FybmVkW2luZF0pIHsNCisJCQkvKg0KKwkJCSAqIElmIHN1cHAg aXMgdHJ1ZSwgc2tpcCB0aGUgbWVzc2FnZSBpZiB0aGUNCisJCQkgKiBzYW1lIHRhc2sgd2FzIG1l bnRpb25lZCBpbiB0aGUgbWVzc2FnZQ0KKwkJCSAqIG9yaWdpbmF0ZWQgb24gcmVtb3RlIENQVSwg YW5kIGl0IGRpZCBub3QNCisJCQkgKiByZS1lbnRlciBpc29sYXRlZCBzdGF0ZSBzaW5jZSB0aGVu ICh3YXJuZWQNCisJCQkgKiBpcyB0cnVlKS4gT25seSBsb2NhbCBtZXNzYWdlcyBmb2xsb3dpbmcN CisJCQkgKiByZW1vdGUgbWVzc2FnZXMsIGxpa2VseSBhYm91dCB0aGUgc2FtZQ0KKwkJCSAqIGlz b2xhdGlvbiBicmVha2luZyBldmVudCwgYXJlIHNraXBwZWQgdG8NCisJCQkgKiBhdm9pZCBkdXBs aWNhdGlvbi4gSWYgcmVtb3RlIGNhdXNlIGlzDQorCQkJICogaW1tZWRpYXRlbHkgZm9sbG93ZWQg YnkgYSBsb2NhbCBvbmUgYmVmb3JlDQorCQkJICogaXNvbGF0aW9uIGlzIGJyb2tlbiwgbG9jYWwg Y2F1c2UgaXMgc2tpcHBlZA0KKwkJCSAqIGZyb20gbWVzc2FnZXMuDQorCQkJICovDQorCQkJcHV0 X2NwdSgpOw0KKwkJCXJldHVybiAwOw0KKwkJfQ0KKwkJdGFzayA9IGN1cnJlbnQ7DQorCQlzbnBy aW50ZihidWZfcHJlZml4LCBzaXplb2YoYnVmX3ByZWZpeCksDQorCQkJICJpc29sYXRpb24gJXMv JWQvJWQgKGNwdSAlZCkiLA0KKwkJCSB0YXNrLT5jb21tLCB0YXNrLT50Z2lkLCB0YXNrLT5waWQs IGNwdSk7DQorCQlwdXRfY3B1KCk7DQorCX0gZWxzZSB7DQorCQkvKg0KKwkJICogTWVzc2FnZSBp cyBmb3IgcmVtb3RlIENQVSwgdXNlIGNhY2hlZCBpbmZvcm1hdGlvbi4NCisJCSAqLw0KKwkJcHV0 X2NwdSgpOw0KKwkJLyoNCisJCSAqIE1ha2Ugc3VyZSwgaW5kZXggcmVtYWluZWQgdW5jaGFuZ2Vk IHdoaWxlIGRhdGEgd2FzDQorCQkgKiBjb3BpZWQuIElmIGl0IGNoYW5nZWQsIGRhdGEgdGhhdCB3 YXMgY29waWVkIG1heSBiZQ0KKwkJICogaW5jb25zaXN0ZW50IGJlY2F1c2UgdHdvIHVwZGF0ZXMg aW4gYSBzZXF1ZW5jZSBjb3VsZA0KKwkJICogb3ZlcndyaXRlIHRoZSBkYXRhIHdoaWxlIGl0IHdh cyBiZWluZyByZWFkLg0KKwkJICovDQorCQlkbyB7DQorCQkJLyogTWFrZSBzdXJlIHdlIGFyZSBy ZWFkaW5nIHVwIHRvIGRhdGUgdmFsdWVzICovDQorCQkJc21wX21iKCk7DQorCQkJaW5kID0gaW5k X2NvdW50ZXIgJiAxOw0KKwkJCXNucHJpbnRmKGJ1Zl9wcmVmaXgsIHNpemVvZihidWZfcHJlZml4 KSwNCisJCQkJICJpc29sYXRpb24gJXMvJWQvJWQgKGNwdSAlZCkiLA0KKwkJCQkgZGVzYy0+Y29t bVtpbmRdLCBkZXNjLT50Z2lkW2luZF0sDQorCQkJCSBkZXNjLT5waWRbaW5kXSwgY3B1KTsNCisJ CQlkZXNjLT53YXJuZWRbaW5kXSA9IHRydWU7DQorCQkJaW5kX2NvdW50ZXJfb2xkID0gaW5kX2Nv dW50ZXI7DQorCQkJLyogUmVjb3JkIHRoZSB3YXJuZWQgZmxhZywgdGhlbiByZS1yZWFkIGRlc2Ny aXB0b3IgKi8NCisJCQlzbXBfbWIoKTsNCisJCQlpbmRfY291bnRlciA9IGF0b21pY19yZWFkKCZk ZXNjLT5jdXJyX2luZGV4KTsNCisJCQkvKg0KKwkJCSAqIElmIHRoZSBjb3VudGVyIGNoYW5nZWQs IHNvbWV0aGluZyB3YXMgdXBkYXRlZCwgc28NCisJCQkgKiByZXBlYXQgZXZlcnl0aGluZyB0byBn ZXQgdGhlIGN1cnJlbnQgZGF0YQ0KKwkJCSAqLw0KKwkJfSB3aGlsZSAoaW5kX2NvdW50ZXIgIT0g aW5kX2NvdW50ZXJfb2xkKTsNCisJfQ0KKw0KKwl2YV9zdGFydChhcmdzLCBmbXQpOw0KKwl2c25w cmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcmdzKTsNCisJdmFfZW5kKGFyZ3MpOw0KKw0K Kwlzd2l0Y2ggKGxldmVsKSB7DQorCWNhc2UgTE9HTEVWRUxfRU1FUkc6DQorCQlwcl9lbWVyZygi JXM6ICVzIiwgYnVmX3ByZWZpeCwgYnVmKTsNCisJCWJyZWFrOw0KKwljYXNlIExPR0xFVkVMX0FM RVJUOg0KKwkJcHJfYWxlcnQoIiVzOiAlcyIsIGJ1Zl9wcmVmaXgsIGJ1Zik7DQorCQlicmVhazsN CisJY2FzZSBMT0dMRVZFTF9DUklUOg0KKwkJcHJfY3JpdCgiJXM6ICVzIiwgYnVmX3ByZWZpeCwg YnVmKTsNCisJCWJyZWFrOw0KKwljYXNlIExPR0xFVkVMX0VSUjoNCisJCXByX2VycigiJXM6ICVz IiwgYnVmX3ByZWZpeCwgYnVmKTsNCisJCWJyZWFrOw0KKwljYXNlIExPR0xFVkVMX1dBUk5JTkc6 DQorCQlwcl93YXJuKCIlczogJXMiLCBidWZfcHJlZml4LCBidWYpOw0KKwkJYnJlYWs7DQorCWNh c2UgTE9HTEVWRUxfTk9USUNFOg0KKwkJcHJfbm90aWNlKCIlczogJXMiLCBidWZfcHJlZml4LCBi dWYpOw0KKwkJYnJlYWs7DQorCWNhc2UgTE9HTEVWRUxfSU5GTzoNCisJCXByX2luZm8oIiVzOiAl cyIsIGJ1Zl9wcmVmaXgsIGJ1Zik7DQorCQlicmVhazsNCisJY2FzZSBMT0dMRVZFTF9ERUJVRzoN CisJCXByX2RlYnVnKCIlczogJXMiLCBidWZfcHJlZml4LCBidWYpOw0KKwkJYnJlYWs7DQorCWRl ZmF1bHQ6DQorCQkvKiBObyBtZXNzYWdlIHdpdGhvdXQgYSB2YWxpZCBsZXZlbCAqLw0KKwkJcmV0 dXJuIDA7DQorCX0NCisJcmV0dXJuIDE7DQorfQ0KKw0KKy8qDQorICogRHVtcCBzdGFjayBpZiBu ZWVkIGJlLiBUaGlzIGNhbiBiZSBoZWxwZnVsIGV2ZW4gZnJvbSB0aGUgZmluYWwgZXhpdA0KKyAq IHRvIHVzZXJtb2RlIGNvZGUgc2luY2Ugc3RhY2sgdHJhY2VzIHNvbWV0aW1lcyBjYXJyeSBpbmZv cm1hdGlvbiBhYm91dA0KKyAqIHdoYXQgcHV0IHlvdSBpbnRvIHRoZSBrZXJuZWwsIGUuZy4gYW4g aW50ZXJydXB0IG51bWJlciBlbmNvZGVkIGluDQorICogdGhlIGluaXRpYWwgZW50cnkgc3RhY2sg ZnJhbWUgdGhhdCBpcyBzdGlsbCB2aXNpYmxlIGF0IGV4aXQgdGltZS4NCisgKi8NCitzdGF0aWMg dm9pZCBkZWJ1Z19kdW1wX3N0YWNrKHZvaWQpDQorew0KKwlpZiAodGFza19pc29sYXRpb25fZGVi dWcpDQorCQlkdW1wX3N0YWNrKCk7DQorfQ0KKw0KKy8qDQorICogU2V0IHRoZSBmbGFncyB3b3Jk IGJ1dCBkb24ndCB0cnkgdG8gYWN0dWFsbHkgc3RhcnQgdGFzayBpc29sYXRpb24geWV0Lg0KKyAq IFdlIHdpbGwgc3RhcnQgaXQgd2hlbiBlbnRlcmluZyB1c2VyIHNwYWNlIGluIHRhc2tfaXNvbGF0 aW9uX3N0YXJ0KCkuDQorICovDQoraW50IHRhc2tfaXNvbGF0aW9uX3JlcXVlc3QodW5zaWduZWQg aW50IGZsYWdzKQ0KK3sNCisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3VycmVudDsNCisN CisJLyoNCisJICogVGhlIHRhc2sgaXNvbGF0aW9uIGZsYWdzIHNob3VsZCBhbHdheXMgYmUgY2xl YXJlZCBqdXN0IGJ5DQorCSAqIHZpcnR1ZSBvZiBoYXZpbmcgZW50ZXJlZCB0aGUga2VybmVsLg0K KwkgKi8NCisJV0FSTl9PTl9PTkNFKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9UQVNL X0lTT0xBVElPTikpOw0KKwlXQVJOX09OX09OQ0UodGFzay0+dGFza19pc29sYXRpb25fZmxhZ3Mg IT0gMCk7DQorCVdBUk5fT05fT05DRSh0YXNrLT50YXNrX2lzb2xhdGlvbl9zdGF0ZSAhPSBTVEFU RV9OT1JNQUwpOw0KKw0KKwl0YXNrLT50YXNrX2lzb2xhdGlvbl9mbGFncyA9IGZsYWdzOw0KKwlp ZiAoISh0YXNrLT50YXNrX2lzb2xhdGlvbl9mbGFncyAmIFBSX1RBU0tfSVNPTEFUSU9OX0VOQUJM RSkpDQorCQlyZXR1cm4gMDsNCisNCisJLyogV2UgYXJlIHRyeWluZyB0byBlbmFibGUgdGFzayBp c29sYXRpb24uICovDQorCXNldF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1RBU0tfSVNPTEFU SU9OKTsNCisNCisJLyoNCisJICogU2h1dCBkb3duIHRoZSB2bXN0YXQgd29ya2VyIHNvIHdlJ3Jl IG5vdCBpbnRlcnJ1cHRlZCBsYXRlci4NCisJICogV2UgaGF2ZSB0byB0cnkgdG8gZG8gdGhpcyBo ZXJlICh3aXRoIGludGVycnVwdHMgZW5hYmxlZCkgc2luY2UNCisJICogd2UgYXJlIGNhbmNlbGlu ZyBkZWxheWVkIHdvcmsgYW5kIHdpbGwgY2FsbCBmbHVzaF93b3JrKCkNCisJICogKHdoaWNoIGVu YWJsZXMgaW50ZXJydXB0cykgYW5kIHBvc3NpYmx5IHNjaGVkdWxlKCkuDQorCSAqLw0KKwlxdWll dF92bXN0YXRfc3luYygpOw0KKw0KKwkvKiBXZSByZXR1cm4gMCBoZXJlIGJ1dCB3ZSBtYXkgY2hh bmdlIHRoYXQgaW4gdGFza19pc29sYXRpb25fc3RhcnQoKS4gKi8NCisJcmV0dXJuIDA7DQorfQ0K Kw0KKy8qDQorICogUGVyZm9ybSBhY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGRvbmUgaW1tZWRpYXRl bHkgb24gZXhpdCBmcm9tIGlzb2xhdGlvbi4NCisgKi8NCitzdGF0aWMgdm9pZCBmYXN0X3Rhc2tf aXNvbGF0aW9uX2NwdV9jbGVhbnVwKHZvaWQgKmluZm8pDQorew0KKwlhdG9taWNfZGVjKCZwZXJf Y3B1KGlzb2xfZXhpdF9jb3VudGVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpKTsNCisJLyogQXQgdGhp cyBwb2ludCBicmVha2luZyBpc29sYXRpb24gZnJvbSBvdGhlciBDUFVzIGlzIHBvc3NpYmxlIGFn YWluICovDQorDQorCS8qDQorCSAqIFRoaXMgdGFzayBpcyBubyBsb25nZXIgaXNvbGF0ZWQgKGFu ZCBpZiBieSBhbnkgY2hhbmNlIHRoaXMNCisJICogaXMgdGhlIHdyb25nIHRhc2ssIGl0J3MgYWxy ZWFkeSBub3QgaXNvbGF0ZWQpDQorCSAqLw0KKwljdXJyZW50LT50YXNrX2lzb2xhdGlvbl9mbGFn cyA9IDA7DQorCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBUSUZfVEFTS19JU09MQVRJ T04pOw0KKw0KKwkvKiBSdW4gdGhlIHJlc3Qgb2YgY2xlYW51cCBsYXRlciAqLw0KKwlzZXRfdHNr X3RocmVhZF9mbGFnKGN1cnJlbnQsIFRJRl9OT1RJRllfUkVTVU1FKTsNCisNCisJLyogQ29weSBm bGFncyB3aXRoIHRhc2sgaXNvbGF0aW9uIGRpc2FibGVkICovDQorCXRoaXNfY3B1X3dyaXRlKHRz a190aHJlYWRfZmxhZ3NfY2FjaGUsDQorCQkgICAgICAgUkVBRF9PTkNFKHRhc2tfdGhyZWFkX2lu Zm8oY3VycmVudCktPmZsYWdzKSk7DQorfQ0KKw0KKy8qIERpc2FibGUgdGFzayBpc29sYXRpb24g Zm9yIHRoZSBzcGVjaWZpZWQgdGFzay4gKi8NCitzdGF0aWMgdm9pZCBzdG9wX2lzb2xhdGlvbihz dHJ1Y3QgdGFza19zdHJ1Y3QgKnApDQorew0KKwlpbnQgY3B1LCB0aGlzX2NwdTsNCisJdW5zaWdu ZWQgbG9uZyBmbGFnczsNCisNCisJdGhpc19jcHUgPSBnZXRfY3B1KCk7DQorCWNwdSA9IHRhc2tf Y3B1KHApOw0KKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBlcl9jcHUoaXNvbF9leGl0X2NvdW50 ZXIsIGNwdSkpID4gMSkgew0KKwkJLyogQWxyZWFkeSBleGl0aW5nIGlzb2xhdGlvbiAqLw0KKwkJ YXRvbWljX2RlYygmcGVyX2NwdShpc29sX2V4aXRfY291bnRlciwgY3B1KSk7DQorCQlwdXRfY3B1 KCk7DQorCQlyZXR1cm47DQorCX0NCisNCisJaWYgKHAgPT0gY3VycmVudCkgew0KKwkJcC0+dGFz a19pc29sYXRpb25fc3RhdGUgPSBTVEFURV9OT1JNQUw7DQorCQlmYXN0X3Rhc2tfaXNvbGF0aW9u X2NwdV9jbGVhbnVwKE5VTEwpOw0KKwkJdGFza19pc29sYXRpb25fY3B1X2NsZWFudXAoKTsNCisJ CWlmIChhdG9taWNfZGVjX3JldHVybigmcGVyX2NwdShpc29sX2NvdW50ZXIsIGNwdSkpIDwgMCkg ew0KKwkJCS8qIElzIG5vdCBpc29sYXRlZCBhbHJlYWR5ICovDQorCQkJYXRvbWljX2luYygmcGVy X2NwdShpc29sX2NvdW50ZXIsIGNwdSkpOw0KKwkJfQ0KKwkJcHV0X2NwdSgpOw0KKwl9IGVsc2Ug ew0KKwkJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZwZXJfY3B1KGlzb2xfY291bnRlciwgY3B1KSkg PCAwKSB7DQorCQkJLyogSXMgbm90IGlzb2xhdGVkIGFscmVhZHkgKi8NCisJCQlhdG9taWNfaW5j KCZwZXJfY3B1KGlzb2xfY291bnRlciwgY3B1KSk7DQorCQkJYXRvbWljX2RlYygmcGVyX2NwdShp c29sX2V4aXRfY291bnRlciwgY3B1KSk7DQorCQkJcHV0X2NwdSgpOw0KKwkJCXJldHVybjsNCisJ CX0NCisJCS8qDQorCQkgKiBTY2hlZHVsZSAic2xvdyIgY2xlYW51cC4gVGhpcyByZWxpZXMgb24N CisJCSAqIFRJRl9OT1RJRllfUkVTVU1FIGJlaW5nIHNldA0KKwkJICovDQorCQlzcGluX2xvY2tf aXJxc2F2ZSgmdGFza19pc29sYXRpb25fY2xlYW51cF9sb2NrLCBmbGFncyk7DQorCQljcHVtYXNr X3NldF9jcHUoY3B1LCB0YXNrX2lzb2xhdGlvbl9jbGVhbnVwX21hcCk7DQorCQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZ0YXNrX2lzb2xhdGlvbl9jbGVhbnVwX2xvY2ssIGZsYWdzKTsNCisJCS8q DQorCQkgKiBTZXR0aW5nIGZsYWdzIGlzIGRlbGVnYXRlZCB0byB0aGUgQ1BVIHdoZXJlDQorCQkg KiBpc29sYXRlZCB0YXNrIGlzIHJ1bm5pbmcNCisJCSAqIGlzb2xfZXhpdF9jb3VudGVyIHdpbGwg YmUgZGVjcmVtZW50ZWQgZnJvbSB0aGVyZSBhcyB3ZWxsLg0KKwkJICovDQorCQlwZXJfY3B1KGlz b2xfYnJlYWtfY3NkLCBjcHUpLmZ1bmMgPQ0KKwkJICAgIGZhc3RfdGFza19pc29sYXRpb25fY3B1 X2NsZWFudXA7DQorCQlwZXJfY3B1KGlzb2xfYnJlYWtfY3NkLCBjcHUpLmluZm8gPSBOVUxMOw0K KwkJcGVyX2NwdShpc29sX2JyZWFrX2NzZCwgY3B1KS5mbGFncyA9IDA7DQorCQlzbXBfY2FsbF9m dW5jdGlvbl9zaW5nbGVfYXN5bmMoY3B1LA0KKwkJCQkJICAgICAgICZwZXJfY3B1KGlzb2xfYnJl YWtfY3NkLCBjcHUpKTsNCisJCXB1dF9jcHUoKTsNCisJfQ0KK30NCisNCisvKg0KKyAqIFRoaXMg Y29kZSBydW5zIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBqdXN0IGJlZm9yZSB0aGUgcmV0dXJu IHRvDQorICogdXNlcnNwYWNlLCBhZnRlciBhIHByY3RsKCkgaGFzIHJlcXVlc3RlZCBlbmFibGlu ZyB0YXNrIGlzb2xhdGlvbi4NCisgKiBXZSB0YWtlIHdoYXRldmVyIHN0ZXBzIGFyZSBuZWVkZWQg dG8gYXZvaWQgYmVpbmcgaW50ZXJydXB0ZWQgbGF0ZXI6DQorICogZHJhaW4gdGhlIGxydSBwYWdl cywgc3RvcCB0aGUgc2NoZWR1bGVyIHRpY2ssIGV0Yy4gIE1vcmUNCisgKiBmdW5jdGlvbmFsaXR5 IG1heSBiZSBhZGRlZCBoZXJlIGxhdGVyIHRvIGF2b2lkIG90aGVyIHR5cGVzIG9mDQorICogaW50 ZXJydXB0cyBmcm9tIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLg0KKyAqDQorICogSWYgd2UgY2Fu J3QgZW5hYmxlIHRhc2sgaXNvbGF0aW9uLCB3ZSB1cGRhdGUgdGhlIHN5c2NhbGwgcmV0dXJuDQor ICogdmFsdWUgd2l0aCBhbiBhcHByb3ByaWF0ZSBlcnJvci4NCisgKi8NCit2b2lkIHRhc2tfaXNv bGF0aW9uX3N0YXJ0KHZvaWQpDQorew0KKwlpbnQgZXJyb3I7DQorDQorCS8qDQorCSAqIFdlIHNo b3VsZCBvbmx5IGJlIGNhbGxlZCBpbiBTVEFURV9OT1JNQUwgKGlzb2xhdGlvbiBkaXNhYmxlZCks DQorCSAqIG9uIG91ciB3YXkgb3V0IG9mIHRoZSBrZXJuZWwgZnJvbSB0aGUgcHJjdGwoKSB0aGF0 IHR1cm5lZCBpdCBvbi4NCisJICogSWYgd2UgYXJlIGV4aXRpbmcgZnJvbSB0aGUga2VybmVsIGlu IGFub3RoZXIgc3RhdGUsIGl0IG1lYW5zIHdlDQorCSAqIG1hZGUgaXQgYmFjayBpbnRvIHRoZSBr ZXJuZWwgd2l0aG91dCBkaXNhYmxpbmcgdGFzayBpc29sYXRpb24sDQorCSAqIGFuZCB3ZSBzaG91 bGQgaW52ZXN0aWdhdGUgaG93IChhbmQgaW4gYW55IGNhc2UgZGlzYWJsZSB0YXNrDQorCSAqIGlz b2xhdGlvbiBhdCB0aGlzIHBvaW50KS4gIFdlIGFyZSBjbGVhcmx5IG5vdCBvbiB0aGUgcGF0aCBi YWNrDQorCSAqIGZyb20gdGhlIHByY3RsKCkgc28gd2UgZG9uJ3QgdG91Y2ggdGhlIHN5c2NhbGwg cmV0dXJuIHZhbHVlLg0KKwkgKi8NCisJaWYgKFdBUk5fT05fT05DRShjdXJyZW50LT50YXNrX2lz b2xhdGlvbl9zdGF0ZSAhPSBTVEFURV9OT1JNQUwpKSB7DQorCQkvKiBJbmNyZW1lbnQgY291bnRl ciwgdGhpcyB3aWxsIGFsbG93IGlzb2xhdGlvbiBicmVha2luZyAqLw0KKwkJaWYgKGF0b21pY19p bmNfcmV0dXJuKCZwZXJfY3B1KGlzb2xfY291bnRlciwNCisJCQkJCSAgICAgIHNtcF9wcm9jZXNz b3JfaWQoKSkpID4gMSkgew0KKwkJCWF0b21pY19kZWMoJnBlcl9jcHUoaXNvbF9jb3VudGVyLCBz bXBfcHJvY2Vzc29yX2lkKCkpKTsNCisJCX0NCisJCWF0b21pY19pbmMoJnBlcl9jcHUoaXNvbF9j b3VudGVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpKTsNCisJCXN0b3BfaXNvbGF0aW9uKGN1cnJlbnQp Ow0KKwkJcmV0dXJuOw0KKwl9DQorDQorCS8qDQorCSAqIE11c3QgYmUgYWZmaW5pdGl6ZWQgdG8g YSBzaW5nbGUgY29yZSB3aXRoIHRhc2sgaXNvbGF0aW9uIHBvc3NpYmxlLg0KKwkgKiBJbiBwcmlu Y2lwbGUgdGhpcyBjb3VsZCBiZSByZW1vdGVseSBtb2RpZmllZCBiZXR3ZWVuIHRoZSBwcmN0bCgp DQorCSAqIGFuZCB0aGUgcmV0dXJuIHRvIHVzZXJzcGFjZSwgc28gd2UgaGF2ZSB0byBjaGVjayBp dCBoZXJlLg0KKwkgKi8NCisJaWYgKGN1cnJlbnQtPm5yX2NwdXNfYWxsb3dlZCAhPSAxIHx8DQor CSAgICAhaXNfaXNvbGF0aW9uX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7DQorCQllcnJvciA9 IC1FSU5WQUw7DQorCQlnb3RvIGVycm9yOw0KKwl9DQorDQorCS8qIElmIHRoZSB2bXN0YXQgZGVs YXllZCB3b3JrIGlzIG5vdCBjYW5jZWxlZCwgd2UgaGF2ZSB0byB0cnkgYWdhaW4uICovDQorCWlm ICghdm1zdGF0X2lkbGUoKSkgew0KKwkJZXJyb3IgPSAtRUFHQUlOOw0KKwkJZ290byBlcnJvcjsN CisJfQ0KKw0KKwkvKiBUcnkgdG8gc3RvcCB0aGUgZHluYW1pYyB0aWNrLiAqLw0KKwllcnJvciA9 IHRyeV9zdG9wX2Z1bGxfdGljaygpOw0KKwlpZiAoZXJyb3IpDQorCQlnb3RvIGVycm9yOw0KKw0K KwkvKiBEcmFpbiB0aGUgcGFnZXZlY3MgdG8gYXZvaWQgdW5uZWNlc3NhcnkgSVBJIGZsdXNoZXMg bGF0ZXIuICovDQorCWxydV9hZGRfZHJhaW4oKTsNCisNCisJLyogSW5jcmVtZW50IGNvdW50ZXIs IHRoaXMgd2lsbCBhbGxvdyBpc29sYXRpb24gYnJlYWtpbmcgKi8NCisJaWYgKGF0b21pY19pbmNf cmV0dXJuKCZwZXJfY3B1KGlzb2xfY291bnRlciwNCisJCQkJICAgICAgc21wX3Byb2Nlc3Nvcl9p ZCgpKSkgPiAxKSB7DQorCQlhdG9taWNfZGVjKCZwZXJfY3B1KGlzb2xfY291bnRlciwgc21wX3By b2Nlc3Nvcl9pZCgpKSk7DQorCX0NCisNCisJLyogUmVjb3JkIGlzb2xhdGVkIHRhc2sgSURzIGFu ZCBuYW1lICovDQorCXJlY29yZF9jdXJyX2lzb2xhdGVkX3Rhc2soKTsNCisNCisJLyogQ29weSBm bGFncyB3aXRoIHRhc2sgaXNvbGF0aW9uIGVuYWJsZWQgKi8NCisJdGhpc19jcHVfd3JpdGUodHNr X3RocmVhZF9mbGFnc19jYWNoZSwNCisJCSAgICAgICBSRUFEX09OQ0UodGFza190aHJlYWRfaW5m byhjdXJyZW50KS0+ZmxhZ3MpKTsNCisNCisJY3VycmVudC0+dGFza19pc29sYXRpb25fc3RhdGUg PSBTVEFURV9JU09MQVRFRDsNCisJcmV0dXJuOw0KKw0KK2Vycm9yOg0KKwkvKiBJbmNyZW1lbnQg Y291bnRlciwgdGhpcyB3aWxsIGFsbG93IGlzb2xhdGlvbiBicmVha2luZyAqLw0KKwlpZiAoYXRv bWljX2luY19yZXR1cm4oJnBlcl9jcHUoaXNvbF9jb3VudGVyLA0KKwkJCQkgICAgICBzbXBfcHJv Y2Vzc29yX2lkKCkpKSA+IDEpIHsNCisJCWF0b21pY19kZWMoJnBlcl9jcHUoaXNvbF9jb3VudGVy LCBzbXBfcHJvY2Vzc29yX2lkKCkpKTsNCisJfQ0KKwlzdG9wX2lzb2xhdGlvbihjdXJyZW50KTsN CisJc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpLCBl cnJvciwgMCk7DQorfQ0KKw0KKy8qIFN0b3AgdGFzayBpc29sYXRpb24gb24gdGhlIHJlbW90ZSB0 YXNrIGFuZCBzZW5kIGl0IGEgc2lnbmFsLiAqLw0KK3N0YXRpYyB2b2lkIHNlbmRfaXNvbGF0aW9u X3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spDQorew0KKwlpbnQgZmxhZ3MgPSB0YXNr LT50YXNrX2lzb2xhdGlvbl9mbGFnczsNCisJa2VybmVsX3NpZ2luZm9fdCBpbmZvID0gew0KKwkJ LnNpX3NpZ25vID0gUFJfVEFTS19JU09MQVRJT05fR0VUX1NJRyhmbGFncykgPzogU0lHS0lMTCwN CisJfTsNCisNCisJc3RvcF9pc29sYXRpb24odGFzayk7DQorCXNlbmRfc2lnX2luZm8oaW5mby5z aV9zaWdubywgJmluZm8sIHRhc2spOw0KK30NCisNCisvKiBPbmx5IGEgZmV3IHN5c2NhbGxzIGFy ZSB2YWxpZCBvbmNlIHdlIGFyZSBpbiB0YXNrIGlzb2xhdGlvbiBtb2RlLiAqLw0KK3N0YXRpYyBi b29sIGlzX2FjY2VwdGFibGVfc3lzY2FsbChpbnQgc3lzY2FsbCkNCit7DQorCS8qIE5vIG5lZWQg dG8gaW5jdXIgYW4gaXNvbGF0aW9uIHNpZ25hbCBpZiB3ZSBhcmUganVzdCBleGl0aW5nLiAqLw0K KwlpZiAoc3lzY2FsbCA9PSBfX05SX2V4aXQgfHwgc3lzY2FsbCA9PSBfX05SX2V4aXRfZ3JvdXAp DQorCQlyZXR1cm4gdHJ1ZTsNCisNCisJLyogQ2hlY2sgdG8gc2VlIGlmIGl0J3MgdGhlIHByY3Rs IGZvciBpc29sYXRpb24uICovDQorCWlmIChzeXNjYWxsID09IF9fTlJfcHJjdGwpIHsNCisJCXVu c2lnbmVkIGxvbmcgYXJnW1NZU0NBTExfTUFYX0FSR1NdOw0KKw0KKwkJc3lzY2FsbF9nZXRfYXJn dW1lbnRzKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpLCBhcmcpOw0KKwkJaWYgKGFyZ1swXSA9 PSBQUl9UQVNLX0lTT0xBVElPTikNCisJCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KKwlyZXR1cm4g ZmFsc2U7DQorfQ0KKw0KKy8qDQorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIHN5c2Nh bGwgZW50cnksIHByZXZlbnRzIG1vc3Qgc3lzY2FsbHMNCisgKiBmcm9tIGV4ZWN1dGluZywgYW5k IGlmIG5lZWRlZCByYWlzZXMgYSBzaWduYWwgdG8gbm90aWZ5IHRoZSBwcm9jZXNzLg0KKyAqDQor ICogTm90ZSB0aGF0IHdlIGhhdmUgdG8gc3RvcCBpc29sYXRpb24gYmVmb3JlIHdlIGV2ZW4gcHJp bnQgYSBtZXNzYWdlDQorICogaGVyZSwgc2luY2Ugb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBy ZXBvcnRpbmcgYW4gaW50ZXJydXB0IGR1ZSB0bw0KKyAqIGtpY2tpbmcgdGhlIHByaW50ayBoYW5k bGluZyBjb2RlLCByYXRoZXIgdGhhbiByZXBvcnRpbmcgdGhlIHRydWUNCisgKiBjYXVzZSBvZiBp bnRlcnJ1cHQgaGVyZS4NCisgKg0KKyAqIFRoZSBtZXNzYWdlIGlzIG5vdCBzdXBwcmVzc2VkIGJ5 IHByZXZpb3VzIHJlbW90ZWx5IHRyaWdnZXJlZA0KKyAqIG1lc3NhZ2VzLg0KKyAqLw0KK2ludCB0 YXNrX2lzb2xhdGlvbl9zeXNjYWxsKGludCBzeXNjYWxsKQ0KK3sNCisJc3RydWN0IHRhc2tfc3Ry dWN0ICp0YXNrID0gY3VycmVudDsNCisNCisJaWYgKGlzX2FjY2VwdGFibGVfc3lzY2FsbChzeXNj YWxsKSkgew0KKwkJc3RvcF9pc29sYXRpb24odGFzayk7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0K KwlzZW5kX2lzb2xhdGlvbl9zaWduYWwodGFzayk7DQorDQorCXByX3Rhc2tfaXNvbF93YXJuKHNt cF9wcm9jZXNzb3JfaWQoKSwNCisJCQkgICJ0YXNrX2lzb2xhdGlvbiBsb3N0IGR1ZSB0byBzeXNj YWxsICVkXG4iLA0KKwkJCSAgc3lzY2FsbCk7DQorCWRlYnVnX2R1bXBfc3RhY2soKTsNCisNCisJ c3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKHRhc2ssIGN1cnJlbnRfcHRfcmVncygpLCAtRVJFU1RB UlROT0lOVFIsIC0xKTsNCisJcmV0dXJuIC0xOw0KK30NCisNCisvKg0KKyAqIFRoaXMgcm91dGlu ZSBpcyBjYWxsZWQgZnJvbSBhbnkgZXhjZXB0aW9uIG9yIGlycSB0aGF0IGRvZXNuJ3QNCisgKiBv dGhlcndpc2UgdHJpZ2dlciBhIHNpZ25hbCB0byB0aGUgdXNlciBwcm9jZXNzIChlLmcuIHBhZ2Ug ZmF1bHQpLg0KKyAqDQorICogTWVzc2FnZXMgd2lsbCBiZSBzdXBwcmVzc2VkIGlmIHRoZXJlIGlz IGFscmVhZHkgYSByZXBvcnRlZCByZW1vdGUNCisgKiBjYXVzZSBmb3IgaXNvbGF0aW9uIGJyZWFr aW5nLCBzbyB3ZSBkb24ndCBnZW5lcmF0ZSBtdWx0aXBsZQ0KKyAqIGNvbmZ1c2luZ2x5IHNpbWls YXIgbWVzc2FnZXMgYWJvdXQgdGhlIHNhbWUgZXZlbnQuDQorICovDQordm9pZCBfdGFza19pc29s YXRpb25faW50ZXJydXB0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KK3sNCisJc3RydWN0IHRhc2tf c3RydWN0ICp0YXNrID0gY3VycmVudDsNCisJdmFfbGlzdCBhcmdzOw0KKwljaGFyIGJ1ZlsxMDBd Ow0KKw0KKwkvKiBSQ1Ugc2hvdWxkIGhhdmUgYmVlbiBlbmFibGVkIHByaW9yIHRvIHRoaXMgcG9p bnQuICovDQorCVJDVV9MT0NLREVQX1dBUk4oIXJjdV9pc193YXRjaGluZygpLCAia2VybmVsIGVu dHJ5IHdpdGhvdXQgUkNVIik7DQorDQorCS8qIEFyZSB3ZSBleGl0aW5nIGlzb2xhdGlvbiBhbHJl YWR5PyAqLw0KKwlpZiAoYXRvbWljX3JlYWQoJnBlcl9jcHUoaXNvbF9leGl0X2NvdW50ZXIsIHNt cF9wcm9jZXNzb3JfaWQoKSkpICE9IDApIHsNCisJCXRhc2stPnRhc2tfaXNvbGF0aW9uX3N0YXRl ID0gU1RBVEVfTk9STUFMOw0KKwkJcmV0dXJuOw0KKwl9DQorCS8qDQorCSAqIEF2b2lkIHJlcG9y dGluZyBpbnRlcnJ1cHRzIHRoYXQgaGFwcGVuIGFmdGVyIHdlIGhhdmUgcHJjdGwnZWQNCisJICog dG8gZW5hYmxlIGlzb2xhdGlvbiwgYnV0IGJlZm9yZSB3ZSBoYXZlIHJldHVybmVkIHRvIHVzZXJz cGFjZS4NCisJICovDQorCWlmICh0YXNrLT50YXNrX2lzb2xhdGlvbl9zdGF0ZSA9PSBTVEFURV9O T1JNQUwpDQorCQlyZXR1cm47DQorDQorCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7DQorCXZzbnByaW50 ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFyZ3MpOw0KKwl2YV9lbmQoYXJncyk7DQorDQorCS8q IEhhbmRsZSBOTUlzIG1pbmltYWxseSwgc2luY2Ugd2UgY2FuJ3Qgc2VuZCBhIHNpZ25hbC4gKi8N CisJaWYgKGluX25taSgpKSB7DQorCQlwcl90YXNrX2lzb2xfZXJyKHNtcF9wcm9jZXNzb3JfaWQo KSwNCisJCQkJICJpc29sYXRpb246IGluIE5NSTsgbm90IGRlbGl2ZXJpbmcgc2lnbmFsXG4iKTsN CisJfSBlbHNlIHsNCisJCXNlbmRfaXNvbGF0aW9uX3NpZ25hbCh0YXNrKTsNCisJfQ0KKw0KKwlp ZiAocHJfdGFza19pc29sX3dhcm5fc3VwcChzbXBfcHJvY2Vzc29yX2lkKCksDQorCQkJCSAgICJ0 YXNrX2lzb2xhdGlvbiBsb3N0IGR1ZSB0byAlc1xuIiwgYnVmKSkNCisJCWRlYnVnX2R1bXBfc3Rh Y2soKTsNCit9DQorDQorLyoNCisgKiBDYWxsZWQgYmVmb3JlIHdlIHdha2UgdXAgYSB0YXNrIHRo YXQgaGFzIGEgc2lnbmFsIHRvIHByb2Nlc3MuDQorICogTmVlZHMgdG8gYmUgZG9uZSB0byBoYW5k bGUgaW50ZXJydXB0cyB0aGF0IHRyaWdnZXIgc2lnbmFscywgd2hpY2gNCisgKiB3ZSBkb24ndCBj YXRjaCB3aXRoIHRhc2tfaXNvbGF0aW9uX2ludGVycnVwdCgpIGhvb2tzLg0KKyAqDQorICogVGhp cyBtZXNzYWdlIGlzIGFsc28gc3VwcHJlc3NlZCBpZiB0aGVyZSB3YXMgYWxyZWFkeSBhIHJlbW90 ZWx5DQorICogY2F1c2VkIG1lc3NhZ2UgYWJvdXQgdGhlIHNhbWUgaXNvbGF0aW9uIGJyZWFraW5n IGV2ZW50Lg0KKyAqLw0KK3ZvaWQgX3Rhc2tfaXNvbGF0aW9uX3NpZ25hbChzdHJ1Y3QgdGFza19z dHJ1Y3QgKnRhc2spDQorew0KKwlzdHJ1Y3QgaXNvbF90YXNrX2Rlc2MgKmRlc2M7DQorCWludCBp bmQsIGNwdTsNCisJYm9vbCBkb193YXJuID0gKHRhc2stPnRhc2tfaXNvbGF0aW9uX3N0YXRlID09 IFNUQVRFX0lTT0xBVEVEKTsNCisNCisJY3B1ID0gdGFza19jcHUodGFzayk7DQorCWRlc2MgPSAm cGVyX2NwdShpc29sX3Rhc2tfZGVzY3MsIGNwdSk7DQorCWluZCA9IGF0b21pY19yZWFkKCZkZXNj LT5jdXJyX2luZGV4KSAmIDE7DQorCWlmIChkZXNjLT53YXJuZWRbaW5kXSkNCisJCWRvX3dhcm4g PSBmYWxzZTsNCisNCisJc3RvcF9pc29sYXRpb24odGFzayk7DQorDQorCWlmIChkb193YXJuKSB7 DQorCQlwcl93YXJuKCJpc29sYXRpb246ICVzLyVkLyVkIChjcHUgJWQpOiB0YXNrX2lzb2xhdGlv biBsb3N0IGR1ZSB0byBzaWduYWxcbiIsDQorCQkJdGFzay0+Y29tbSwgdGFzay0+dGdpZCwgdGFz ay0+cGlkLCBjcHUpOw0KKwkJZGVidWdfZHVtcF9zdGFjaygpOw0KKwl9DQorfQ0KKw0KKy8qDQor ICogR2VuZXJhdGUgYSBzdGFjayBiYWNrdHJhY2UgaWYgd2UgYXJlIGdvaW5nIHRvIGludGVycnVw dCBhbm90aGVyIHRhc2sNCisgKiBpc29sYXRpb24gcHJvY2Vzcy4NCisgKi8NCit2b2lkIHRhc2tf aXNvbGF0aW9uX3JlbW90ZShpbnQgY3B1LCBjb25zdCBjaGFyICpmbXQsIC4uLikNCit7DQorCXN0 cnVjdCB0YXNrX3N0cnVjdCAqY3Vycl90YXNrOw0KKwl2YV9saXN0IGFyZ3M7DQorCWNoYXIgYnVm WzIwMF07DQorDQorCWlmICghaXNfaXNvbGF0aW9uX2NwdShjcHUpIHx8ICF0YXNrX2lzb2xhdGlv bl9vbl9jcHUoY3B1KSkNCisJCXJldHVybjsNCisNCisJY3Vycl90YXNrID0gY3VycmVudDsNCisN CisJdmFfc3RhcnQoYXJncywgZm10KTsNCisJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZt dCwgYXJncyk7DQorCXZhX2VuZChhcmdzKTsNCisJaWYgKHByX3Rhc2tfaXNvbF93YXJuKGNwdSwN CisJCQkgICAgICAidGFza19pc29sYXRpb24gbG9zdCBkdWUgdG8gJXMgYnkgJXMvJWQvJWQgb24g Y3B1ICVkXG4iLA0KKwkJCSAgICAgIGJ1ZiwNCisJCQkgICAgICBjdXJyX3Rhc2stPmNvbW0sIGN1 cnJfdGFzay0+dGdpZCwNCisJCQkgICAgICBjdXJyX3Rhc2stPnBpZCwgc21wX3Byb2Nlc3Nvcl9p ZCgpKSkNCisJCWRlYnVnX2R1bXBfc3RhY2soKTsNCit9DQorDQorLyoNCisgKiBHZW5lcmF0ZSBh IHN0YWNrIGJhY2t0cmFjZSBpZiBhbnkgb2YgdGhlIGNwdXMgaW4gIm1hc2siIGFyZSBydW5uaW5n DQorICogdGFzayBpc29sYXRpb24gcHJvY2Vzc2VzLg0KKyAqLw0KK3ZvaWQgdGFza19pc29sYXRp b25fcmVtb3RlX2NwdW1hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssDQorCQkJCSAgIGNv bnN0IGNoYXIgKmZtdCwgLi4uKQ0KK3sNCisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyX3Rhc2s7 DQorCWNwdW1hc2tfdmFyX3Qgd2Fybl9tYXNrOw0KKwl2YV9saXN0IGFyZ3M7DQorCWNoYXIgYnVm WzIwMF07DQorCWludCBjcHUsIGZpcnN0X2NwdTsNCisNCisJaWYgKHRhc2tfaXNvbGF0aW9uX21h cCA9PSBOVUxMIHx8DQorCQkhemFsbG9jX2NwdW1hc2tfdmFyKCZ3YXJuX21hc2ssIEdGUF9LRVJO RUwpKQ0KKwkJcmV0dXJuOw0KKw0KKwlmaXJzdF9jcHUgPSAtMTsNCisJZm9yX2VhY2hfY3B1X2Fu ZChjcHUsIG1hc2ssIHRhc2tfaXNvbGF0aW9uX21hcCkgew0KKwkJaWYgKHRhc2tfaXNvbGF0aW9u X29uX2NwdShjcHUpKSB7DQorCQkJaWYgKGZpcnN0X2NwdSA8IDApDQorCQkJCWZpcnN0X2NwdSA9 IGNwdTsNCisJCQllbHNlDQorCQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIHdhcm5fbWFzayk7DQor CQl9DQorCX0NCisNCisJaWYgKGZpcnN0X2NwdSA8IDApDQorCQlnb3RvIGRvbmU7DQorDQorCWN1 cnJfdGFzayA9IGN1cnJlbnQ7DQorDQorCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7DQorCXZzbnByaW50 ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFyZ3MpOw0KKwl2YV9lbmQoYXJncyk7DQorDQorCWlm IChjcHVtYXNrX3dlaWdodCh3YXJuX21hc2spID09IDApDQorCQlwcl90YXNrX2lzb2xfd2Fybihm aXJzdF9jcHUsDQorCQkJCSAgInRhc2tfaXNvbGF0aW9uIGxvc3QgZHVlIHRvICVzIGJ5ICVzLyVk LyVkIG9uIGNwdSAlZFxuIiwNCisJCQkJICBidWYsIGN1cnJfdGFzay0+Y29tbSwgY3Vycl90YXNr LT50Z2lkLA0KKwkJCQkgIGN1cnJfdGFzay0+cGlkLCBzbXBfcHJvY2Vzc29yX2lkKCkpOw0KKwll bHNlDQorCQlwcl90YXNrX2lzb2xfd2FybihmaXJzdF9jcHUsDQorCQkJCSAgIiBhbmQgY3B1cyAl KnBibDogdGFza19pc29sYXRpb24gbG9zdCBkdWUgdG8gJXMgYnkgJXMvJWQvJWQgb24gY3B1ICVk XG4iLA0KKwkJCQkgIGNwdW1hc2tfcHJfYXJncyh3YXJuX21hc2spLA0KKwkJCQkgIGJ1ZiwgY3Vy cl90YXNrLT5jb21tLCBjdXJyX3Rhc2stPnRnaWQsDQorCQkJCSAgY3Vycl90YXNrLT5waWQsIHNt cF9wcm9jZXNzb3JfaWQoKSk7DQorCWRlYnVnX2R1bXBfc3RhY2soKTsNCisNCitkb25lOg0KKwlm cmVlX2NwdW1hc2tfdmFyKHdhcm5fbWFzayk7DQorfQ0KKw0KKy8qDQorICogQ2hlY2sgaWYgZ2l2 ZW4gQ1BVIGlzIHJ1bm5pbmcgaXNvbGF0ZWQgdGFzay4NCisgKi8NCitpbnQgdGFza19pc29sYXRp b25fb25fY3B1KGludCBjcHUpDQorew0KKwlyZXR1cm4gdGVzdF9iaXQoVElGX1RBU0tfSVNPTEFU SU9OLA0KKwkJCSZwZXJfY3B1KHRza190aHJlYWRfZmxhZ3NfY2FjaGUsIGNwdSkpOw0KK30NCisN CisvKg0KKyAqIFNldCBDUFVzIGN1cnJlbnRseSBydW5uaW5nIGlzb2xhdGVkIHRhc2tzIGluIENQ VSBtYXNrLg0KKyAqLw0KK3ZvaWQgdGFza19pc29sYXRpb25fY3B1bWFzayhzdHJ1Y3QgY3B1bWFz ayAqbWFzaykNCit7DQorCWludCBjcHU7DQorDQorCWlmICh0YXNrX2lzb2xhdGlvbl9tYXAgPT0g TlVMTCkNCisJCXJldHVybjsNCisNCisJZm9yX2VhY2hfY3B1KGNwdSwgdGFza19pc29sYXRpb25f bWFwKQ0KKwkJaWYgKHRhc2tfaXNvbGF0aW9uX29uX2NwdShjcHUpKQ0KKwkJCWNwdW1hc2tfc2V0 X2NwdShjcHUsIG1hc2spOw0KK30NCisNCisvKg0KKyAqIENsZWFyIENQVXMgY3VycmVudGx5IHJ1 bm5pbmcgaXNvbGF0ZWQgdGFza3MgaW4gQ1BVIG1hc2suDQorICovDQordm9pZCB0YXNrX2lzb2xh dGlvbl9jbGVhcl9jcHVtYXNrKHN0cnVjdCBjcHVtYXNrICptYXNrKQ0KK3sNCisJaW50IGNwdTsN CisNCisJaWYgKHRhc2tfaXNvbGF0aW9uX21hcCA9PSBOVUxMKQ0KKwkJcmV0dXJuOw0KKw0KKwlm b3JfZWFjaF9jcHUoY3B1LCB0YXNrX2lzb2xhdGlvbl9tYXApDQorCQlpZiAodGFza19pc29sYXRp b25fb25fY3B1KGNwdSkpDQorCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtYXNrKTsNCit9DQor DQorLyoNCisgKiBDbGVhbnVwIHByb2NlZHVyZS4gVGhlIGNhbGwgdG8gdGhpcyBwcm9jZWR1cmUg bWF5IGJlIGRlbGF5ZWQuDQorICovDQordm9pZCB0YXNrX2lzb2xhdGlvbl9jcHVfY2xlYW51cCh2 b2lkKQ0KK3sNCisJa2lja19ocnRpbWVyKCk7DQorfQ0KKw0KKy8qDQorICogQ2hlY2sgaWYgY2xl YW51cCBpcyBzY2hlZHVsZWQgb24gdGhlIGN1cnJlbnQgQ1BVLCBhbmQgaWYgc28sIHJ1biBpdC4N CisgKiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBub3RpZnlfcmVzdW1lKCkgb3IgYW5vdGhl ciBzdWNoIGNhbGxiYWNrDQorICogb24gdGhlIHRhcmdldCBDUFUuDQorICovDQordm9pZCB0YXNr X2lzb2xhdGlvbl9jaGVja19ydW5fY2xlYW51cCh2b2lkKQ0KK3sNCisJaW50IGNwdTsNCisJdW5z aWduZWQgbG9uZyBmbGFnczsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRhc2tfaXNvbGF0aW9u X2NsZWFudXBfbG9jaywgZmxhZ3MpOw0KKw0KKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7DQor DQorCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdGFza19pc29sYXRpb25fY2xlYW51cF9tYXAp KSB7DQorCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbWFw KTsNCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbG9j aywgZmxhZ3MpOw0KKwkJdGFza19pc29sYXRpb25fY3B1X2NsZWFudXAoKTsNCisJfSBlbHNlDQor CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrX2lzb2xhdGlvbl9jbGVhbnVwX2xvY2ssIGZs YWdzKTsNCit9DQpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5j DQppbmRleCA1YjIzOTYzNTBkZDEuLjFkZjU3ZTM4YzM2MSAxMDA2NDQNCi0tLSBhL2tlcm5lbC9z aWduYWwuYw0KKysrIGIva2VybmVsL3NpZ25hbC5jDQpAQCAtNDYsNiArNDYsNyBAQA0KICNpbmNs dWRlIDxsaW51eC9saXZlcGF0Y2guaD4NCiAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+DQogI2lu Y2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2lzb2xhdGlvbi5oPg0KIA0K ICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUw0KICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvc2ln bmFsLmg+DQpAQCAtNzU4LDYgKzc1OSw3IEBAIHN0YXRpYyBpbnQgZGVxdWV1ZV9zeW5jaHJvbm91 c19zaWduYWwoa2VybmVsX3NpZ2luZm9fdCAqaW5mbykNCiAgKi8NCiB2b2lkIHNpZ25hbF93YWtl X3VwX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgdW5zaWduZWQgaW50IHN0YXRlKQ0KIHsN CisJdGFza19pc29sYXRpb25fc2lnbmFsKHQpOw0KIAlzZXRfdHNrX3RocmVhZF9mbGFnKHQsIFRJ Rl9TSUdQRU5ESU5HKTsNCiAJLyoNCiAJICogVEFTS19XQUtFS0lMTCBhbHNvIG1lYW5zIHdha2Ug aXQgdXAgaW4gdGhlIHN0b3BwZWQvdHJhY2VkL2tpbGxhYmxlDQpkaWZmIC0tZ2l0IGEva2VybmVs L3N5cy5jIGIva2VybmVsL3N5cy5jDQppbmRleCBmOWJjNWMzMDNlM2YuLjBhNDA1OWE4YzRmOSAx MDA2NDQNCi0tLSBhL2tlcm5lbC9zeXMuYw0KKysrIGIva2VybmVsL3N5cy5jDQpAQCAtNDIsNiAr NDIsNyBAQA0KICNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPg0KICNpbmNsdWRlIDxsaW51 eC92ZXJzaW9uLmg+DQogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+DQorI2luY2x1ZGUgPGxpbnV4 L2lzb2xhdGlvbi5oPg0KIA0KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4NCiAjaW5jbHVkZSA8 bGludXgvc3lzY2FsbHMuaD4NCkBAIC0yNTEzLDYgKzI1MTQsMTEgQEAgU1lTQ0FMTF9ERUZJTkU1 KHByY3RsLCBpbnQsIG9wdGlvbiwgdW5zaWduZWQgbG9uZywgYXJnMiwgdW5zaWduZWQgbG9uZywg YXJnMywNCiANCiAJCWVycm9yID0gKGN1cnJlbnQtPmZsYWdzICYgUFJfSU9fRkxVU0hFUikgPT0g UFJfSU9fRkxVU0hFUjsNCiAJCWJyZWFrOw0KKwljYXNlIFBSX1RBU0tfSVNPTEFUSU9OOg0KKwkJ aWYgKGFyZzMgfHwgYXJnNCB8fCBhcmc1KQ0KKwkJCXJldHVybiAtRUlOVkFMOw0KKwkJZXJyb3Ig PSB0YXNrX2lzb2xhdGlvbl9yZXF1ZXN0KGFyZzIpOw0KKwkJYnJlYWs7DQogCWRlZmF1bHQ6DQog CQllcnJvciA9IC1FSU5WQUw7DQogCQlicmVhazsNCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9o cnRpbWVyLmMgYi9rZXJuZWwvdGltZS9ocnRpbWVyLmMNCmluZGV4IDNhNjA5ZTczNDRmMy4uNWJi OThmMzliZGU2IDEwMDY0NA0KLS0tIGEva2VybmVsL3RpbWUvaHJ0aW1lci5jDQorKysgYi9rZXJu ZWwvdGltZS9ocnRpbWVyLmMNCkBAIC0zMCw2ICszMCw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3N5 c2NhbGxzLmg+DQogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KICNpbmNsdWRlIDxsaW51 eC90aWNrLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lzb2xhdGlvbi5oPg0KICNpbmNsdWRlIDxsaW51 eC9lcnIuaD4NCiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+DQogI2luY2x1ZGUgPGxp bnV4L3NjaGVkL3NpZ25hbC5oPg0KQEAgLTcyMSw2ICs3MjIsMTkgQEAgc3RhdGljIHZvaWQgcmV0 cmlnZ2VyX25leHRfZXZlbnQodm9pZCAqYXJnKQ0KIAlyYXdfc3Bpbl91bmxvY2soJmJhc2UtPmxv Y2spOw0KIH0NCiANCisjaWZkZWYgQ09ORklHX1RBU0tfSVNPTEFUSU9ODQordm9pZCBraWNrX2hy dGltZXIodm9pZCkNCit7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCXByZWVtcHRfZGlz YWJsZSgpOw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7DQorCXJldHJpZ2dlcl9uZXh0X2V2ZW50 KE5VTEwpOw0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7DQorCXByZWVtcHRfZW5hYmxlKCk7 DQorfQ0KKyNlbmRpZg0KKw0KIC8qDQogICogU3dpdGNoIHRvIGhpZ2ggcmVzb2x1dGlvbiBtb2Rl DQogICovDQpAQCAtODY4LDggKzg4MiwyMSBAQCBzdGF0aWMgdm9pZCBocnRpbWVyX3JlcHJvZ3Jh bShzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGJvb2wgcmVwcm9ncmFtKQ0KIHZvaWQgY2xvY2tfd2Fz X3NldCh2b2lkKQ0KIHsNCiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUw0KKyNpZmRlZiBD T05GSUdfVEFTS19JU09MQVRJT04NCisJc3RydWN0IGNwdW1hc2sgbWFzazsNCisNCisJY3B1bWFz a19jbGVhcigmbWFzayk7DQorCXRhc2tfaXNvbGF0aW9uX2NwdW1hc2soJm1hc2spOw0KKwljcHVt YXNrX2NvbXBsZW1lbnQoJm1hc2ssICZtYXNrKTsNCisJLyoNCisJICogUmV0cmlnZ2VyIHRoZSBD UFUgbG9jYWwgZXZlbnRzIGV2ZXJ5d2hlcmUgZXhjZXB0IENQVXMNCisJICogcnVubmluZyBpc29s YXRlZCB0YXNrcy4NCisJICovDQorCW9uX2VhY2hfY3B1X21hc2soJm1hc2ssIHJldHJpZ2dlcl9u ZXh0X2V2ZW50LCBOVUxMLCAxKTsNCisjZWxzZQ0KIAkvKiBSZXRyaWdnZXIgdGhlIENQVSBsb2Nh bCBldmVudHMgZXZlcnl3aGVyZSAqLw0KIAlvbl9lYWNoX2NwdShyZXRyaWdnZXJfbmV4dF9ldmVu dCwgTlVMTCwgMSk7DQorI2VuZGlmDQogI2VuZGlmDQogCXRpbWVyZmRfY2xvY2tfd2FzX3NldCgp Ow0KIH0NCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGlt ZS90aWNrLXNjaGVkLmMNCmluZGV4IGE3OTJkMjFjYWM2NC4uMWQ0ZGVjOWQzZWU3IDEwMDY0NA0K LS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jDQorKysgYi9rZXJuZWwvdGltZS90aWNrLXNj aGVkLmMNCkBAIC04ODIsNiArODgyLDI0IEBAIHN0YXRpYyB2b2lkIHRpY2tfbm9oel9mdWxsX3Vw ZGF0ZV90aWNrKHN0cnVjdCB0aWNrX3NjaGVkICp0cykNCiAjZW5kaWYNCiB9DQogDQorI2lmZGVm IENPTkZJR19UQVNLX0lTT0xBVElPTg0KK2ludCB0cnlfc3RvcF9mdWxsX3RpY2sodm9pZCkNCit7 DQorCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7DQorCXN0cnVjdCB0aWNrX3NjaGVkICp0 cyA9IHRoaXNfY3B1X3B0cigmdGlja19jcHVfc2NoZWQpOw0KKw0KKwkvKiBGb3IgYW4gdW5zdGFi bGUgY2xvY2ssIHdlIHNob3VsZCByZXR1cm4gYSBwZXJtYW5lbnQgZXJyb3IgY29kZS4gKi8NCisJ aWYgKGF0b21pY19yZWFkKCZ0aWNrX2RlcF9tYXNrKSAmIFRJQ0tfREVQX01BU0tfQ0xPQ0tfVU5T VEFCTEUpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKCFjYW5fc3RvcF9mdWxsX3RpY2so Y3B1LCB0cykpDQorCQlyZXR1cm4gLUVBR0FJTjsNCisNCisJdGlja19ub2h6X3N0b3Bfc2NoZWRf dGljayh0cywgY3B1KTsNCisJcmV0dXJuIDA7DQorfQ0KKyNlbmRpZg0KKw0KIHN0YXRpYyBib29s IGNhbl9zdG9wX2lkbGVfdGljayhpbnQgY3B1LCBzdHJ1Y3QgdGlja19zY2hlZCAqdHMpDQogew0K IAkvKg0KLS0gDQoyLjIwLjENCg0K