From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B334DA0093; Fri, 14 Jan 2022 07:31:02 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4673442759; Fri, 14 Jan 2022 07:31:02 +0100 (CET) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mails.dpdk.org (Postfix) with ESMTP id 73EC040DDD for ; Fri, 14 Jan 2022 07:31:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1642141860; x=1673677860; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=mJQ8+ARSVq3Tnpez83p96Z6aUa5IVMIh165PV8kpp6g=; b=L6R6fyAnxskoWlN4Iqwp+dzWBwMTcL7ogG9PgJeQ0sL/aNRZnG8oEkRt GdlUBnzOxjo+OWagY7a3O/hlwDFiKjodbQPEkLmprAG/lYTQOVo0H9FEr +6zdhAVizls8PcVjgxdwWhBpXA9SK1OZVM1xukjQHP1yMtmaKpXfvSrQg d5c7G0D2VbrFfoDSQlwbKa86fQxrE4IpMKnC36h0zEyNTouJYPcDre+4B Gu40Xymj9qdpp0me4LLMWwVE2AbaA1+uDRlPlfNTCxAfsMYg3pw3F2gEQ yUD0bsl3dSMWeq3/OcOg24V6K0aE5JVWvFK1BiercQ0vVH+yFp1r7uxKK A==; X-IronPort-AV: E=McAfee;i="6200,9189,10226"; a="330541916" X-IronPort-AV: E=Sophos;i="5.88,287,1635231600"; d="scan'208";a="330541916" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2022 22:30:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,287,1635231600"; d="scan'208";a="475669390" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orsmga006.jf.intel.com with ESMTP; 13 Jan 2022 22:30:58 -0800 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Thu, 13 Jan 2022 22:30:58 -0800 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Thu, 13 Jan 2022 22:30:57 -0800 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Thu, 13 Jan 2022 22:30:54 -0800 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.171) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Thu, 13 Jan 2022 22:30:54 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eT3HJiianUhQh+L577Ke8mkwCycnQVNm1i+l4DNBV0f/dSTOgvyIeaJ1FdbO2yMljUCwOQfFRQ7pvU5y1dQPpurw0wEGV9zU2smm0WumPu4g4lxBWKngNIWnQoQtPOAN8yLN1uYBuvMlHwqM+jyuJujXoAFPt0ux0yTqsz+HXpCPXhr9q3ygdA5GM5a42cVavllIXWic2GGaS+AuMHCJaGu8N31dnkjHtdxEsBZx+5Nb0CIFLeEKifRX4SueCTP0aqDcr/tLui/8ezwOF1KsHwy0GpRQzi6oJUHaPW+lsJRMJC+p2EoRFgeshHoAfaE9s10WvK91XGa/x9i8ezrPqQ== 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=mJQ8+ARSVq3Tnpez83p96Z6aUa5IVMIh165PV8kpp6g=; b=l36kjqewW8J5HV2mjuaRcwpdJfMPLRX6vFfnwBXvEKc1D7P47sJQsMr27h4GSAsoyWYRTxGruxHL7Hm+aC714tQmpVvocKp80BrlpCJwiH6FpoeJJN1hzS7wGsNUYrQY0OrKy8mWO0emnz8FHbujk33wvn9O8gnXuRSIQrptIucBtM/gnUbDp2rs6UxbI9ZmUW/RG21MfYfzNssxlcVqG/JOBA53l6qVWDMmyEdtIAKm2CBz8o3ArlrItwYU9PtiPn6oGhwq4xCKyXow2WZnMfI9wJU9BbyVj+vTEBDlsZpqiG0JJoubbW534pnNa30SYO7N9VNfCesK0+l8pYyU1Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from SN6PR11MB3504.namprd11.prod.outlook.com (2603:10b6:805:d0::17) by MN2PR11MB4743.namprd11.prod.outlook.com (2603:10b6:208:260::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.10; Fri, 14 Jan 2022 06:30:51 +0000 Received: from SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::40a4:d129:6047:5515]) by SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::40a4:d129:6047:5515%5]) with mapi id 15.20.4888.011; Fri, 14 Jan 2022 06:30:51 +0000 From: "Xia, Chenbo" To: "Hu, Jiayu" , "dev@dpdk.org" CC: "maxime.coquelin@redhat.com" , "i.maximets@ovn.org" , "Richardson, Bruce" , "Van Haaren, Harry" , "Pai G, Sunil" , "Mcnamara, John" , "Ding, Xuan" , "Jiang, Cheng1" , "liangma@liangbit.com" Subject: RE: [PATCH v1 1/1] vhost: integrate dmadev in asynchronous datapath Thread-Topic: [PATCH v1 1/1] vhost: integrate dmadev in asynchronous datapath Thread-Index: AQHX/YRN15fPMJSUO0G2iLHLXO4VhqxfD5/A Date: Fri, 14 Jan 2022 06:30:51 +0000 Message-ID: References: <20211122105437.3534231-1-jiayu.hu@intel.com> <20211230215505.329674-1-jiayu.hu@intel.com> <20211230215505.329674-2-jiayu.hu@intel.com> In-Reply-To: <20211230215505.329674-2-jiayu.hu@intel.com> Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3ed5a2b8-2fb5-4d04-0aec-08d9d727690b x-ms-traffictypediagnostic: MN2PR11MB4743:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:416; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: geAAGSJayNme51kHHHl6CydU8sB6k8YGb/nf8/6xiRt6pEo4FuVu7gXQzbkybZGCVnbdMSEONuVkasHVYKZZjdITLNhZwhnUD25AUb0jqzHzYyohT1D/j8ItvmFzxAoNpdVA6eHZxfUGO8/UzL6CoKX+H8Uv/f0uYRvA+OGxHZehaYaZJVhsUzX6C0/SRk1yhIqvIkoU9B/5gZrN0Q1ctxz9Y8pagXj/3QGTuhQvLVTug5k1i0tbzM2vEY2x84gZkxqiMpNXLuOVY9rbXg0AEqbuV8FMuV050xGBajnu8SEIwxJJD6wOE8Vo+iUwCOZBUFZq80VkXoNrjQI8PfIE7fSTwPd46+oXfu6/aQBFtgNVZZafZ9ToMrZ0qOWbKf6FaMteIDVYAIo9eH4rnx4//HDqXHUb2tTCtOyopCIgKTautxqiKtFovLQ96FB87skyMZU0PBiybWqiQIL4fXLeD2pV9lzOC6zLzfYiYvwQXCWccb16dLTjXnvcFALZCrXJGa3qcU1+fg47TgofifVViTRbUMmkCcq3IVkzTokCXsOpNLNjPSauyg3sSAkVxPra6xmW6BcXisoORF3Rq4E7bkWYUF6/PKTTQOOIc1B3yTF7Mzvn3Yc7/X+4ortieBmrDsL/3qlF4c8HycYyz+oaUxDZkCMk64ZdUkMux9laCXeOifomvHxOfcrSRFzar6L+lvr+S28alz7Pb2AepSz7cX2KeA2HLVI7+5QBUigKdcI= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR11MB3504.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(53546011)(30864003)(186003)(6506007)(33656002)(122000001)(7696005)(9686003)(38100700002)(2906002)(5660300002)(83380400001)(26005)(86362001)(38070700005)(508600001)(82960400001)(55016003)(8676002)(66946007)(66446008)(64756008)(66556008)(66476007)(4326008)(76116006)(8936002)(52536014)(110136005)(316002)(54906003)(71200400001)(21314003)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?OW5SSkZGZ0hLMVpuY3J0TnpkVkJHcFJGMW1EZG9IRDNKQVc4eWNpMlhGRXNZ?= =?utf-8?B?MDlHNWkyTmRiVy9lVUNGTXhZYlpwQmZVWERhaS8xd2QrR0tXeU15M20rc3Zs?= =?utf-8?B?bVlYbnJnNHFXT3dxWkVhVEprRnpPSjJmcTg2QlVBQnVncno0VHFlNWN6ZlZm?= =?utf-8?B?WWVGeGVWMUZMS2tRWFNrTEUyeXJqdmxtTE9vaWtkT0tKREhSbTRPeUpmT1Er?= =?utf-8?B?MlVQTTJqRDFqckU3aWtGc0gzLzk1dG1WallocHZLYkNGVHJ3QUtneHI1YWor?= =?utf-8?B?czYxNUs5cGlBVXVzTlJBSXNHSnAzTlI4eS9aMjRnTXc2a0M5cTEyenljOWdZ?= =?utf-8?B?U2t2bGV1b3plQnFqTHZHMHBrSWJZVnJlOEM1UldxdlpFbi8rN2R1SlhVL2lE?= =?utf-8?B?WkhYTGZFT2VrTWdhRzlSTFJMU2hTM0tYOGtrWGlZdWdETTBRM2dRaUs5Vit3?= =?utf-8?B?dkxZcUIva1NDTXB5VisrZDNNV0ZXWWpuVnFEQjRFZktNaE5SbFc5M0Fnckk2?= =?utf-8?B?ZnQ0emZJVTVNMTdKZTBZbXlyNjZkb1VKK01OK1NhOFd1alVpeEE2MzBNY2JP?= =?utf-8?B?eUpHRUlaZElnMS91UG9FeGhSN0swT0YxQUdXTTdLd3paTVBJTThFQzYzcEpx?= =?utf-8?B?Wjh3WXpVaGJvdnZUcUEzT1h0eVAyOHZsUER3cFQxK0JhVU05WHZuWnNMbmxk?= =?utf-8?B?Y2FpNEhzM1VZY2poYUFQNElneHdoWEhHRFAzdGxKOWdaSjRCRXlDV3hlY3dV?= =?utf-8?B?OGo0RGFONWwxVUhIYjY0bXRIQSszRDNNeW0vc0Y1bFhWME92WUlpWlZrVEFT?= =?utf-8?B?N2RZYW9PV1J6N0N2WGFxVUg2c2NEUjFHMmwraklXY09IdU92Q1kxNm12OCtp?= =?utf-8?B?alJNMUV5Ly9Sc2pTaWI4ZFJqdDBaT2FHT2Z6V0Z6WFovSXdDaXh1RHFRREF3?= =?utf-8?B?eXQ1YnI3S1dHYkVlNXRpTHlYUllxTVY3Y2FEMWkvWG41ZGlzOEVrdms4UEwv?= =?utf-8?B?V3E1UDZkMTZEYmQrUDFqTm5yL2dyUmNZbjh2Y1ozaFQ2b0VQeXdOOVpTck8w?= =?utf-8?B?dmdRa3VHYWN3RDhTcmgwcmJvQ1V4WDQzRFFvdjdOUzJwN091cTR1clZPUk1D?= =?utf-8?B?T3JGNEZWbkFHTlJzZmJDaVBJVUV3ZlFHZkJqdlFNTTFzYzcrTXRNdWNlYWJ5?= =?utf-8?B?aG9hRmlROC9wVERGemovdDRGVitoU2dDN05uNkRwQVNHWFFSKzdCZzZkbXR3?= =?utf-8?B?Qzcxb0pvSlpua3NoMVlTNlFFQ2hlT29Bd1FDTDFWV0VGd1N2YXRBVE12a0N0?= =?utf-8?B?TkNiYzBYb0Vsd0pLalQ1bkZiVDdobVMzRXZNNEFMWEdaZDU0ZFNoTXkzMFVq?= =?utf-8?B?V1pjTmxndjRFZGE5U0t4T0o2OFpuakhjNndld0YrOFBISkZLYS9pWWxVUVpN?= =?utf-8?B?b0szZmo4dXVMS3o5Z2xwL2xGYUdwemlrZzMzVEErUnBwcFR2c3pmODB5L2lu?= =?utf-8?B?eWthVmkrWVhndVp0SVVoVWZRSzRJZ0c1bm5vWkhMazJuazFjTHh3VzFONEVN?= =?utf-8?B?YW5jNThlblJZUXZOem9melpIRU5NNDB0eVZlNzFESkZHQ2JzNE4zRUc5Z1Nh?= =?utf-8?B?R01XZEJwRGo3MG9USHFMUnpuWUs4dzg4bHNOTk9YRUtsRlU1UmdOVVNJNm9a?= =?utf-8?B?TVpSdDYxUGFYWVc3VGtFWFJSaGVBOVN3RThHRUZ4UFNFdzVtWXFvMlVldXow?= =?utf-8?B?dTVZWmZWSXhlNUlWbEZuVWRpZWQ0WGMrdEcrazdnQ3pMVmNoUlFUUHQwTkQw?= =?utf-8?B?WjhyeUxDUmtTb3RNcGpTZ1djNDVjejdaakhDQWJ3bWVHQW9qTzM2Sys4by9P?= =?utf-8?B?Zk1nWnMrRmpsb3VWTUc0S1pDcTg2ZTRjYVRISFIvaHlBandQeWZDZlVYdWRM?= =?utf-8?B?VWI0dkoyM3VaaGJBMFJpa215NlFqdDFQMWFra2FuWGtYYlJZZDZ6QldQeDVP?= =?utf-8?B?bE1GdUJCalBuSVlvMUlkemsva0lPK2Z0UzNiVmNtWTZIN01JVytvQUIzMXM3?= =?utf-8?B?MWVBMFBsTkQwUjU0UkhTQjhlSWVFNDBLNVhmUmpTemNZSnhaRzdUNGRoOFRX?= =?utf-8?B?OXdkLzVVUGN6Y05jMVAxaXJLL3NOTkJYQ0h2MFdiUjB0TE9vamw1Sm5qYTZi?= =?utf-8?Q?H7ms7/vfTnUdmIgy1iG+VP0=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB3504.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ed5a2b8-2fb5-4d04-0aec-08d9d727690b X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jan 2022 06:30:51.4134 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xdnpKs7Ch/Akk0earN8K/Mi2Wn5D8xB5fzT4+aCFPXHII9+6UEl3fo+60pmstXRJYA/EOBP9zpm4vpX6VvPU5w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4743 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgSmlheXUsDQoNClRoaXMgaXMgZmlyc3Qgcm91bmQgb2YgcmV2aWV3LCBJJ2xsIHNwZW5kIHRp bWUgb24gT1ZTIHBhdGNoZXMgbGF0ZXIgYW5kIGxvb2sgYmFjay4NCg0KPiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBIdSwgSmlheXUgPGppYXl1Lmh1QGludGVsLmNvbT4NCj4g U2VudDogRnJpZGF5LCBEZWNlbWJlciAzMSwgMjAyMSA1OjU1IEFNDQo+IFRvOiBkZXZAZHBkay5v cmcNCj4gQ2M6IG1heGltZS5jb3F1ZWxpbkByZWRoYXQuY29tOyBpLm1heGltZXRzQG92bi5vcmc7 IFhpYSwgQ2hlbmJvDQo+IDxjaGVuYm8ueGlhQGludGVsLmNvbT47IFJpY2hhcmRzb24sIEJydWNl IDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47IFZhbg0KPiBIYWFyZW4sIEhhcnJ5IDxoYXJy eS52YW4uaGFhcmVuQGludGVsLmNvbT47IFBhaSBHLCBTdW5pbA0KPiA8c3VuaWwucGFpLmdAaW50 ZWwuY29tPjsgTWNuYW1hcmEsIEpvaG4gPGpvaG4ubWNuYW1hcmFAaW50ZWwuY29tPjsgRGluZywg WHVhbg0KPiA8eHVhbi5kaW5nQGludGVsLmNvbT47IEppYW5nLCBDaGVuZzEgPGNoZW5nMS5qaWFu Z0BpbnRlbC5jb20+Ow0KPiBsaWFuZ21hQGxpYW5nYml0LmNvbTsgSHUsIEppYXl1IDxqaWF5dS5o dUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2MSAxLzFdIHZob3N0OiBpbnRlZ3JhdGUg ZG1hZGV2IGluIGFzeW5jaHJvbm91cyBkYXRhcGF0aA0KPiANCj4gU2luY2UgZG1hZGV2IGlzIGlu dHJvZHVjZWQgaW4gMjEuMTEsIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB2aG9zdCBETUENCj4g YWJzdHJhY3Rpb24gbGF5ZXIgYW5kIHNpbXBsaWZ5IGFwcGxpY2F0aW9uIGxvZ2ljcywgdGhpcyBw YXRjaCBpbnRlZ3JhdGVzDQo+IGRtYWRldiBpbiBhc3luY2hyb25vdXMgZGF0YSBwYXRoLg0KPiAN Cj4gU2lnbmVkLW9mZi1ieTogSmlheXUgSHUgPGppYXl1Lmh1QGludGVsLmNvbT4NCj4gU2lnbmVk LW9mZi1ieTogU3VuaWwgUGFpIEcgPHN1bmlsLnBhaS5nQGludGVsLmNvbT4NCj4gLS0tDQo+ICBk b2MvZ3VpZGVzL3Byb2dfZ3VpZGUvdmhvc3RfbGliLnJzdCB8ICA3MCArKysrLS0tLS0NCj4gIGV4 YW1wbGVzL3Zob3N0L01ha2VmaWxlICAgICAgICAgICAgIHwgICAyICstDQo+ICBleGFtcGxlcy92 aG9zdC9pb2F0LmMgICAgICAgICAgICAgICB8IDIxOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KPiAgZXhhbXBsZXMvdmhvc3QvaW9hdC5oICAgICAgICAgICAgICAgfCAgNjMgLS0tLS0tLS0N Cj4gIGV4YW1wbGVzL3Zob3N0L21haW4uYyAgICAgICAgICAgICAgIHwgMjMwICsrKysrKysrKysr KysrKysrKysrKysrLS0tLS0NCj4gIGV4YW1wbGVzL3Zob3N0L21haW4uaCAgICAgICAgICAgICAg IHwgIDExICsrDQo+ICBleGFtcGxlcy92aG9zdC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgNiAr LQ0KPiAgbGliL3Zob3N0L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgfCAgIDMgKy0NCj4gIGxp Yi92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaCAgICAgICAgIHwgMTIxICsrKysrLS0tLS0tLS0tLQ0K PiAgbGliL3Zob3N0L3ZlcnNpb24ubWFwICAgICAgICAgICAgICAgfCAgIDMgKw0KPiAgbGliL3Zo b3N0L3Zob3N0LmMgICAgICAgICAgICAgICAgICAgfCAxMzAgKysrKysrKysrKystLS0tLQ0KPiAg bGliL3Zob3N0L3Zob3N0LmggICAgICAgICAgICAgICAgICAgfCAgNTMgKysrKysrLQ0KPiAgbGli L3Zob3N0L3ZpcnRpb19uZXQuYyAgICAgICAgICAgICAgfCAyMDYgKysrKysrKysrKysrKysrKysr Ky0tLS0tLQ0KPiAgMTMgZmlsZXMgY2hhbmdlZCwgNTg3IGluc2VydGlvbnMoKyksIDUyOSBkZWxl dGlvbnMoLSkNCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy92aG9zdC9pb2F0LmMNCj4g IGRlbGV0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy92aG9zdC9pb2F0LmgNCj4gDQo+IGRpZmYgLS1n aXQgYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvdmhvc3RfbGliLnJzdA0KPiBiL2RvYy9ndWlkZXMv cHJvZ19ndWlkZS92aG9zdF9saWIucnN0DQo+IGluZGV4IDc2ZjVkMzAzYzkuLmJkY2U3Y2JmMDIg MTAwNjQ0DQo+IC0tLSBhL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS92aG9zdF9saWIucnN0DQo+ICsr KyBiL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS92aG9zdF9saWIucnN0DQo+IEBAIC0yMTgsMzggKzIx OCwxMiBAQCBUaGUgZm9sbG93aW5nIGlzIGFuIG92ZXJ2aWV3IG9mIHNvbWUga2V5IFZob3N0IEFQ SQ0KPiBmdW5jdGlvbnM6DQo+IA0KPiAgICBFbmFibGUgb3IgZGlzYWJsZSB6ZXJvIGNvcHkgZmVh dHVyZSBvZiB0aGUgdmhvc3QgY3J5cHRvIGJhY2tlbmQuDQo+IA0KPiAtKiBgYHJ0ZV92aG9zdF9h c3luY19jaGFubmVsX3JlZ2lzdGVyKHZpZCwgcXVldWVfaWQsIGNvbmZpZywgb3BzKWBgDQo+ICsq IGBgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIodmlkLCBxdWV1ZV9pZClgYA0KPiAN Cj4gICAgUmVnaXN0ZXIgYW4gYXN5bmMgY29weSBkZXZpY2UgY2hhbm5lbCBmb3IgYSB2aG9zdCBx dWV1ZSBhZnRlciB2cmluZw0KDQpTaW5jZSBkbWFkZXYgaXMgaGVyZSwgbGV0J3MganVzdCB1c2Ug J0RNQSBkZXZpY2UnIGluc3RlYWQgb2YgJ2NvcHkgZGV2aWNlJw0KDQo+IC0gIGlzIGVuYWJsZWQu IEZvbGxvd2luZyBkZXZpY2UgYGBjb25maWdgYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlcg0K PiAtICB3aXRoIHRoZSByZWdpc3RyYXRpb246DQo+ICsgIGlzIGVuYWJsZWQuDQo+IA0KPiAtICAq IGBgZmVhdHVyZXNgYA0KPiAtDQo+IC0gICAgVGhpcyBmaWVsZCBpcyB1c2VkIHRvIHNwZWNpZnkg YXN5bmMgY29weSBkZXZpY2UgZmVhdHVyZXMuDQo+IC0NCj4gLSAgICBgYFJURV9WSE9TVF9BU1lO Q19JTk9SREVSYGAgcmVwcmVzZW50cyB0aGUgYXN5bmMgY29weSBkZXZpY2UgY2FuDQo+IC0gICAg Z3VhcmFudGVlIHRoZSBvcmRlciBvZiBjb3B5IGNvbXBsZXRpb24gaXMgdGhlIHNhbWUgYXMgdGhl IG9yZGVyDQo+IC0gICAgb2YgY29weSBzdWJtaXNzaW9uLg0KPiAtDQo+IC0gICAgQ3VycmVudGx5 LCBvbmx5IGBgUlRFX1ZIT1NUX0FTWU5DX0lOT1JERVJgYCBjYXBhYmxlIGRldmljZSBpcw0KPiAt ICAgIHN1cHBvcnRlZCBieSB2aG9zdC4NCj4gLQ0KPiAtICBBcHBsaWNhdGlvbnMgbXVzdCBwcm92 aWRlIGZvbGxvd2luZyBgYG9wc2BgIGNhbGxiYWNrcyBmb3Igdmhvc3QgbGliIHRvDQo+IC0gIHdv cmsgd2l0aCB0aGUgYXN5bmMgY29weSBkZXZpY2VzOg0KPiAtDQo+IC0gICogYGB0cmFuc2Zlcl9k YXRhKHZpZCwgcXVldWVfaWQsIGRlc2NzLCBvcGFxdWVfZGF0YSwgY291bnQpYGANCj4gLQ0KPiAt ICAgIHZob3N0IGludm9rZXMgdGhpcyBmdW5jdGlvbiB0byBzdWJtaXQgY29weSBkYXRhIHRvIHRo ZSBhc3luYyBkZXZpY2VzLg0KPiAtICAgIEZvciBub24tYXN5bmNfaW5vcmRlciBjYXBhYmxlIGRl dmljZXMsIGBgb3BhcXVlX2RhdGFgYCBjb3VsZCBiZSB1c2VkDQo+IC0gICAgZm9yIGlkZW50aWZ5 aW5nIHRoZSBjb21wbGV0ZWQgcGFja2V0cy4NCj4gLQ0KPiAtICAqIGBgY2hlY2tfY29tcGxldGVk X2NvcGllcyh2aWQsIHF1ZXVlX2lkLCBvcGFxdWVfZGF0YSwgbWF4X3BhY2tldHMpYGANCj4gLQ0K PiAtICAgIHZob3N0IGludm9rZXMgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIGNvcHkgZGF0YSBj b21wbGV0ZWQgYnkgYXN5bmMNCj4gLSAgICBkZXZpY2VzLg0KPiAtDQo+IC0qIGBgcnRlX3Zob3N0 X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXJfdGhyZWFkX3Vuc2FmZSh2aWQsIHF1ZXVlX2lkLCBjb25m aWcsDQo+IG9wcylgYA0KPiArKiBgYHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3Ro cmVhZF91bnNhZmUodmlkLCBxdWV1ZV9pZClgYA0KPiANCj4gICAgUmVnaXN0ZXIgYW4gYXN5bmMg Y29weSBkZXZpY2UgY2hhbm5lbCBmb3IgYSB2aG9zdCBxdWV1ZSB3aXRob3V0DQo+ICAgIHBlcmZv cm1pbmcgYW55IGxvY2tpbmcuDQo+IEBAIC0yNzcsMTggKzI1MSwxMyBAQCBUaGUgZm9sbG93aW5n IGlzIGFuIG92ZXJ2aWV3IG9mIHNvbWUga2V5IFZob3N0IEFQSQ0KPiBmdW5jdGlvbnM6DQo+ICAg IFRoaXMgZnVuY3Rpb24gaXMgb25seSBzYWZlIHRvIGNhbGwgaW4gdmhvc3QgY2FsbGJhY2sgZnVu Y3Rpb25zDQo+ICAgIChpLmUuLCBzdHJ1Y3QgcnRlX3Zob3N0X2RldmljZV9vcHMpLg0KPiANCj4g LSogYGBydGVfdmhvc3Rfc3VibWl0X2VucXVldWVfYnVyc3QodmlkLCBxdWV1ZV9pZCwgcGt0cywg Y291bnQsIGNvbXBfcGt0cywNCj4gY29tcF9jb3VudClgYA0KPiArKiBgYHJ0ZV92aG9zdF9zdWJt aXRfZW5xdWV1ZV9idXJzdCh2aWQsIHF1ZXVlX2lkLCBwa3RzLCBjb3VudCwgZG1hX2lkLA0KPiBk bWFfdmNoYW4pYGANCj4gDQo+ICAgIFN1Ym1pdCBhbiBlbnF1ZXVlIHJlcXVlc3QgdG8gdHJhbnNt aXQgYGBjb3VudGBgIHBhY2tldHMgZnJvbSBob3N0IHRvIGd1ZXN0DQo+IC0gIGJ5IGFzeW5jIGRh dGEgcGF0aC4gU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHBhY2tldHMgY2FuIGJlIHRyYW5zZmVyIGNv bXBsZXRlZA0KPiAtICBvciBiZWluZyBvY2N1cGllZCBieSBETUEgZW5naW5lczsgdHJhbnNmZXIg Y29tcGxldGVkIHBhY2tldHMgYXJlIHJldHVybmVkDQo+IGluDQo+IC0gIGBgY29tcF9wa3RzYGAs IGJ1dCBvdGhlcnMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGZpbmlzaCwgd2hlbiB0aGlzIEFQSQ0K PiAtICBjYWxsIHJldHVybnMuDQo+ICsgIGJ5IGFzeW5jIGRhdGEgcGF0aC4gQXBwbGljYXRpb25z IG11c3Qgbm90IGZyZWUgdGhlIHBhY2tldHMgc3VibWl0dGVkIGZvcg0KPiArICBlbnF1ZXVlIHVu dGlsIHRoZSBwYWNrZXRzIGFyZSBjb21wbGV0ZWQuDQo+IA0KPiAtICBBcHBsaWNhdGlvbnMgbXVz dCBub3QgZnJlZSB0aGUgcGFja2V0cyBzdWJtaXR0ZWQgZm9yIGVucXVldWUgdW50aWwgdGhlDQo+ IC0gIHBhY2tldHMgYXJlIGNvbXBsZXRlZC4NCj4gLQ0KPiAtKiBgYHJ0ZV92aG9zdF9wb2xsX2Vu cXVldWVfY29tcGxldGVkKHZpZCwgcXVldWVfaWQsIHBrdHMsIGNvdW50KWBgDQo+ICsqIGBgcnRl X3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQodmlkLCBxdWV1ZV9pZCwgcGt0cywgY291bnQs IGRtYV9pZCwNCj4gZG1hX3ZjaGFuKWBgDQo+IA0KPiAgICBQb2xsIGVucXVldWUgY29tcGxldGlv biBzdGF0dXMgZnJvbSBhc3luYyBkYXRhIHBhdGguIENvbXBsZXRlZCBwYWNrZXRzDQo+ICAgIGFy ZSByZXR1cm5lZCB0byBhcHBsaWNhdGlvbnMgdGhyb3VnaCBgYHBrdHNgYC4NCj4gQEAgLTI5OCw3 ICsyNjcsNyBAQCBUaGUgZm9sbG93aW5nIGlzIGFuIG92ZXJ2aWV3IG9mIHNvbWUga2V5IFZob3N0 IEFQSQ0KPiBmdW5jdGlvbnM6DQo+ICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50 IG9mIGluLWZsaWdodCBwYWNrZXRzIGZvciB0aGUgdmhvc3QNCj4gICAgcXVldWUgdXNpbmcgYXN5 bmMgYWNjZWxlcmF0aW9uLg0KPiANCj4gLSogYGBydGVfdmhvc3RfY2xlYXJfcXVldWVfdGhyZWFk X3Vuc2FmZSh2aWQsIHF1ZXVlX2lkLCAqKnBrdHMsIGNvdW50KWBgDQo+ICsqIGBgcnRlX3Zob3N0 X2NsZWFyX3F1ZXVlX3RocmVhZF91bnNhZmUodmlkLCBxdWV1ZV9pZCwgKipwa3RzLCBjb3VudCwg ZG1hX2lkLA0KPiBkbWFfdmNoYW4pYGANCj4gDQo+ICAgIENsZWFyIGluZmxpZ2h0IHBhY2tldHMg d2hpY2ggYXJlIHN1Ym1pdHRlZCB0byBETUEgZW5naW5lIGluIHZob3N0IGFzeW5jDQo+IGRhdGEN Cj4gICAgcGF0aC4gQ29tcGxldGVkIHBhY2tldHMgYXJlIHJldHVybmVkIHRvIGFwcGxpY2F0aW9u cyB0aHJvdWdoIGBgcGt0c2BgLg0KPiBAQCAtNDQyLDMgKzQxMSwyNiBAQCBGaW5hbGx5LCBhIHNl dCBvZiBkZXZpY2Ugb3BzIGlzIGRlZmluZWQgZm9yIGRldmljZQ0KPiBzcGVjaWZpYyBvcGVyYXRp b25zOg0KPiAgKiBgYGdldF9ub3RpZnlfYXJlYWBgDQo+IA0KPiAgICBDYWxsZWQgdG8gZ2V0IHRo ZSBub3RpZnkgYXJlYSBpbmZvIG9mIHRoZSBxdWV1ZS4NCj4gKw0KPiArVmhvc3QgYXN5bmNocm9u b3VzIGRhdGEgcGF0aA0KPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArDQo+ICtW aG9zdCBhc3luY2hyb25vdXMgZGF0YSBwYXRoIGxldmVyYWdlcyBETUEgZGV2aWNlcyB0byBvZmZs b2FkIG1lbW9yeQ0KPiArY29waWVzIGZyb20gdGhlIENQVSBhbmQgaXQgaXMgaW1wbGVtZW50ZWQg aW4gYW4gYXN5bmNocm9ub3VzIHdheS4gSXQNCj4gK2VuYWJsZXMgYXBwbGNhdGlvbnMsIGxpa2Ug T1ZTLCB0byBzYXZlIENQVSBjeWNsZXMgYW5kIGhpZGUgbWVtb3J5IGNvcHkNCj4gK292ZXJoZWFk LCB0aHVzIGFjaGlldmluZyBoaWdoZXIgdGhyb3VnaHB1dC4NCj4gKw0KPiArVmhvc3QgZG9lc24n dCBtYW5hZ2UgRE1BIGRldmljZXMgYW5kIGFwcGxpY2F0aW9ucywgbGlrZSBPVlMsIG5lZWQgdG8N Cj4gK21hbmFnZSBhbmQgY29uZmlndXJlIERNQSBkZXZpY2VzLiBBcHBsaWNhdGlvbnMgbmVlZCB0 byB0ZWxsIHZob3N0IHdoYXQNCj4gK0RNQSBkZXZpY2VzIHRvIHVzZSBpbiBldmVyeSBkYXRhIHBh dGggZnVuY3Rpb24gY2FsbC4gVGhpcyBkZXNpZ24gZW5hYmxlcw0KPiArdGhlIGZsZXhpYmlsaXR5 IGZvciBhcHBsaWNhdGlvbnMgdG8gZHluYW1pY2FsbHkgdXNlIERNQSBjaGFubmVscyBpbg0KPiAr ZGlmZmVyZW50IGZ1bmN0aW9uIG1vZHVsZXMsIG5vdCBsaW1pdGVkIGluIHZob3N0Lg0KPiArDQo+ ICtJbiBhZGRpdGlvbiwgdmhvc3Qgc3VwcG9ydHMgTTpOIG1hcHBpbmcgYmV0d2VlbiB2cmluZ3Mg YW5kIERNQSB2aXJ0dWFsDQo+ICtjaGFubmVscy4gU3BlY2lmaWNhbGx5LCBvbmUgdnJpbmcgY2Fu IHVzZSBtdWx0aXBsZSBkaWZmZXJlbnQgRE1BIGNoYW5uZWxzDQo+ICthbmQgb25lIERNQSBjaGFu bmVsIGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgdnJpbmdzIGF0IHRoZSBzYW1lIHRpbWUuDQo+ ICtUaGUgcmVhc29uIG9mIGVuYWJsaW5nIG9uZSB2cmluZyB0byB1c2UgbXVsdGlwbGUgRE1BIGNo YW5uZWxzIGlzIHRoYXQNCj4gK2l0J3MgcG9zc2libGUgdGhhdCBtb3JlIHRoYW4gb25lIGRhdGFw bGFuZSB0aHJlYWRzIGVucXVldWUgcGFja2V0cyB0bw0KPiArdGhlIHNhbWUgdnJpbmcgd2l0aCB0 aGVpciBvd24gRE1BIHZpcnR1YWwgY2hhbm5lbHMuIEJlc2lkZXMsIHRoZSBudW1iZXINCj4gK29m IERNQSBkZXZpY2VzIGlzIGxpbWl0ZWQuIEZvciB0aGUgcHVycG9zZSBvZiBzY2FsaW5nLCBpdCdz IG5lY2Vzc2FyeSB0bw0KPiArc3VwcG9ydCBzaGFyaW5nIERNQSBjaGFubmVscyBhbW9uZyB2cmlu Z3MuDQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy92aG9zdC9NYWtlZmlsZSBiL2V4YW1wbGVzL3Zo b3N0L01ha2VmaWxlDQo+IGluZGV4IDU4N2VhMmFiNDcuLjk3NWE1ZGZlNDAgMTAwNjQ0DQo+IC0t LSBhL2V4YW1wbGVzL3Zob3N0L01ha2VmaWxlDQo+ICsrKyBiL2V4YW1wbGVzL3Zob3N0L01ha2Vm aWxlDQo+IEBAIC01LDcgKzUsNyBAQA0KPiAgQVBQID0gdmhvc3Qtc3dpdGNoDQo+IA0KPiAgIyBh bGwgc291cmNlIGFyZSBzdG9yZWQgaW4gU1JDUy15DQo+IC1TUkNTLXkgOj0gbWFpbi5jIHZpcnRp b19uZXQuYyBpb2F0LmMNCj4gK1NSQ1MteSA6PSBtYWluLmMgdmlydGlvX25ldC5jDQo+IA0KPiAg UEtHQ09ORiA/PSBwa2ctY29uZmlnDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvdmhvc3Qv aW9hdC5jIGIvZXhhbXBsZXMvdmhvc3QvaW9hdC5jDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCA5YWVlYjEyZmQ5Li4wMDAwMDAwMDAwDQo+IC0tLSBhL2V4YW1wbGVzL3Zob3N0 L2lvYXQuYw0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDIxOCArMCwwIEBADQo+IC0vKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+IC0gKiBDb3B5cmlnaHQoYykgMjAx MC0yMDIwIEludGVsIENvcnBvcmF0aW9uDQo+IC0gKi8NCj4gLQ0KPiAtI2luY2x1ZGUgPHN5cy91 aW8uaD4NCj4gLSNpZmRlZiBSVEVfUkFXX0lPQVQNCj4gLSNpbmNsdWRlIDxydGVfcmF3ZGV2Lmg+ DQo+IC0jaW5jbHVkZSA8cnRlX2lvYXRfcmF3ZGV2Lmg+DQo+IC0NCj4gLSNpbmNsdWRlICJpb2F0 LmgiDQo+IC0jaW5jbHVkZSAibWFpbi5oIg0KPiAtDQo+IC1zdHJ1Y3QgZG1hX2Zvcl92aG9zdCBk bWFfYmluZFtNQVhfVkhPU1RfREVWSUNFXTsNCj4gLQ0KPiAtc3RydWN0IHBhY2tldF90cmFja2Vy IHsNCj4gLQl1bnNpZ25lZCBzaG9ydCBzaXplX3RyYWNrW01BWF9FTlFVRVVFRF9TSVpFXTsNCj4g LQl1bnNpZ25lZCBzaG9ydCBuZXh0X3JlYWQ7DQo+IC0JdW5zaWduZWQgc2hvcnQgbmV4dF93cml0 ZTsNCj4gLQl1bnNpZ25lZCBzaG9ydCBsYXN0X3JlbWFpbjsNCj4gLQl1bnNpZ25lZCBzaG9ydCBp b2F0X3NwYWNlOw0KPiAtfTsNCj4gLQ0KPiAtc3RydWN0IHBhY2tldF90cmFja2VyIGNiX3RyYWNr ZXJbTUFYX1ZIT1NUX0RFVklDRV07DQo+IC0NCj4gLWludA0KPiAtb3Blbl9pb2F0KGNvbnN0IGNo YXIgKnZhbHVlKQ0KPiAtew0KPiAtCXN0cnVjdCBkbWFfZm9yX3Zob3N0ICpkbWFfaW5mbyA9IGRt YV9iaW5kOw0KPiAtCWNoYXIgKmlucHV0ID0gc3RybmR1cCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAr IDEpOw0KPiAtCWNoYXIgKmFkZHJzID0gaW5wdXQ7DQo+IC0JY2hhciAqcHRyc1syXTsNCj4gLQlj aGFyICpzdGFydCwgKmVuZCwgKnN1YnN0cjsNCj4gLQlpbnQ2NF90IHZpZCwgdnJpbmdfaWQ7DQo+ IC0Jc3RydWN0IHJ0ZV9pb2F0X3Jhd2Rldl9jb25maWcgY29uZmlnOw0KPiAtCXN0cnVjdCBydGVf cmF3ZGV2X2luZm8gaW5mbyA9IHsgLmRldl9wcml2YXRlID0gJmNvbmZpZyB9Ow0KPiAtCWNoYXIg bmFtZVszMl07DQo+IC0JaW50IGRldl9pZDsNCj4gLQlpbnQgcmV0ID0gMDsNCj4gLQl1aW50MTZf dCBpID0gMDsNCj4gLQljaGFyICpkbWFfYXJnW01BWF9WSE9TVF9ERVZJQ0VdOw0KPiAtCWludCBh cmdzX25yOw0KPiAtDQo+IC0Jd2hpbGUgKGlzYmxhbmsoKmFkZHJzKSkNCj4gLQkJYWRkcnMrKzsN Cj4gLQlpZiAoKmFkZHJzID09ICdcMCcpIHsNCj4gLQkJcmV0ID0gLTE7DQo+IC0JCWdvdG8gb3V0 Ow0KPiAtCX0NCj4gLQ0KPiAtCS8qIHByb2Nlc3MgRE1BIGRldmljZXMgd2l0aGluIGJyYWNrZXQu ICovDQo+IC0JYWRkcnMrKzsNCj4gLQlzdWJzdHIgPSBzdHJ0b2soYWRkcnMsICI7XSIpOw0KPiAt CWlmICghc3Vic3RyKSB7DQo+IC0JCXJldCA9IC0xOw0KPiAtCQlnb3RvIG91dDsNCj4gLQl9DQo+ IC0JYXJnc19uciA9IHJ0ZV9zdHJzcGxpdChzdWJzdHIsIHN0cmxlbihzdWJzdHIpLA0KPiAtCQkJ ZG1hX2FyZywgTUFYX1ZIT1NUX0RFVklDRSwgJywnKTsNCj4gLQlpZiAoYXJnc19uciA8PSAwKSB7 DQo+IC0JCXJldCA9IC0xOw0KPiAtCQlnb3RvIG91dDsNCj4gLQl9DQo+IC0Jd2hpbGUgKGkgPCBh cmdzX25yKSB7DQo+IC0JCWNoYXIgKmFyZ190ZW1wID0gZG1hX2FyZ1tpXTsNCj4gLQkJdWludDhf dCBzdWJfbnI7DQo+IC0JCXN1Yl9uciA9IHJ0ZV9zdHJzcGxpdChhcmdfdGVtcCwgc3RybGVuKGFy Z190ZW1wKSwgcHRycywgMiwgJ0AnKTsNCj4gLQkJaWYgKHN1Yl9uciAhPSAyKSB7DQo+IC0JCQly ZXQgPSAtMTsNCj4gLQkJCWdvdG8gb3V0Ow0KPiAtCQl9DQo+IC0NCj4gLQkJc3RhcnQgPSBzdHJz dHIocHRyc1swXSwgInR4ZCIpOw0KPiAtCQlpZiAoc3RhcnQgPT0gTlVMTCkgew0KPiAtCQkJcmV0 ID0gLTE7DQo+IC0JCQlnb3RvIG91dDsNCj4gLQkJfQ0KPiAtDQo+IC0JCXN0YXJ0ICs9IDM7DQo+ IC0JCXZpZCA9IHN0cnRvbChzdGFydCwgJmVuZCwgMCk7DQo+IC0JCWlmIChlbmQgPT0gc3RhcnQp IHsNCj4gLQkJCXJldCA9IC0xOw0KPiAtCQkJZ290byBvdXQ7DQo+IC0JCX0NCj4gLQ0KPiAtCQl2 cmluZ19pZCA9IDAgKyBWSVJUSU9fUlhROw0KPiAtCQlpZiAocnRlX3BjaV9hZGRyX3BhcnNlKHB0 cnNbMV0sDQo+IC0JCQkJJihkbWFfaW5mbyArIHZpZCktPmRtYXNbdnJpbmdfaWRdLmFkZHIpIDwg MCkgew0KPiAtCQkJcmV0ID0gLTE7DQo+IC0JCQlnb3RvIG91dDsNCj4gLQkJfQ0KPiAtDQo+IC0J CXJ0ZV9wY2lfZGV2aWNlX25hbWUoJihkbWFfaW5mbyArIHZpZCktPmRtYXNbdnJpbmdfaWRdLmFk ZHIsDQo+IC0JCQkJbmFtZSwgc2l6ZW9mKG5hbWUpKTsNCj4gLQkJZGV2X2lkID0gcnRlX3Jhd2Rl dl9nZXRfZGV2X2lkKG5hbWUpOw0KPiAtCQlpZiAoZGV2X2lkID09ICh1aW50MTZfdCkoLUVOT0RF VikgfHwNCj4gLQkJZGV2X2lkID09ICh1aW50MTZfdCkoLUVJTlZBTCkpIHsNCj4gLQkJCXJldCA9 IC0xOw0KPiAtCQkJZ290byBvdXQ7DQo+IC0JCX0NCj4gLQ0KPiAtCQlpZiAocnRlX3Jhd2Rldl9p bmZvX2dldChkZXZfaWQsICZpbmZvLCBzaXplb2YoY29uZmlnKSkgPCAwIHx8DQo+IC0JCXN0cnN0 cihpbmZvLmRyaXZlcl9uYW1lLCAiaW9hdCIpID09IE5VTEwpIHsNCj4gLQkJCXJldCA9IC0xOw0K PiAtCQkJZ290byBvdXQ7DQo+IC0JCX0NCj4gLQ0KPiAtCQkoZG1hX2luZm8gKyB2aWQpLT5kbWFz W3ZyaW5nX2lkXS5kZXZfaWQgPSBkZXZfaWQ7DQo+IC0JCShkbWFfaW5mbyArIHZpZCktPmRtYXNb dnJpbmdfaWRdLmlzX3ZhbGlkID0gdHJ1ZTsNCj4gLQkJY29uZmlnLnJpbmdfc2l6ZSA9IElPQVRf UklOR19TSVpFOw0KPiAtCQljb25maWcuaGRsc19kaXNhYmxlID0gdHJ1ZTsNCj4gLQkJaWYgKHJ0 ZV9yYXdkZXZfY29uZmlndXJlKGRldl9pZCwgJmluZm8sIHNpemVvZihjb25maWcpKSA8IDApIHsN Cj4gLQkJCXJldCA9IC0xOw0KPiAtCQkJZ290byBvdXQ7DQo+IC0JCX0NCj4gLQkJcnRlX3Jhd2Rl dl9zdGFydChkZXZfaWQpOw0KPiAtCQljYl90cmFja2VyW2Rldl9pZF0uaW9hdF9zcGFjZSA9IElP QVRfUklOR19TSVpFIC0gMTsNCj4gLQkJZG1hX2luZm8tPm5yKys7DQo+IC0JCWkrKzsNCj4gLQl9 DQo+IC1vdXQ6DQo+IC0JZnJlZShpbnB1dCk7DQo+IC0JcmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0K PiAtaW50MzJfdA0KPiAtaW9hdF90cmFuc2Zlcl9kYXRhX2NiKGludCB2aWQsIHVpbnQxNl90IHF1 ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyICppb3ZfaXRlciwNCj4gLQkJ c3RydWN0IHJ0ZV92aG9zdF9hc3luY19zdGF0dXMgKm9wYXF1ZV9kYXRhLCB1aW50MTZfdCBjb3Vu dCkNCj4gLXsNCj4gLQl1aW50MzJfdCBpX2l0ZXI7DQo+IC0JdWludDE2X3QgZGV2X2lkID0gZG1h X2JpbmRbdmlkXS5kbWFzW3F1ZXVlX2lkICogMiArIFZJUlRJT19SWFFdLmRldl9pZDsNCj4gLQlz dHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyICppdGVyID0gTlVMTDsNCj4gLQl1bnNpZ25lZCBsb25n IGlfc2VnOw0KPiAtCXVuc2lnbmVkIHNob3J0IG1hc2sgPSBNQVhfRU5RVUVVRURfU0laRSAtIDE7 DQo+IC0JdW5zaWduZWQgc2hvcnQgd3JpdGUgPSBjYl90cmFja2VyW2Rldl9pZF0ubmV4dF93cml0 ZTsNCj4gLQ0KPiAtCWlmICghb3BhcXVlX2RhdGEpIHsNCj4gLQkJZm9yIChpX2l0ZXIgPSAwOyBp X2l0ZXIgPCBjb3VudDsgaV9pdGVyKyspIHsNCj4gLQkJCWl0ZXIgPSBpb3ZfaXRlciArIGlfaXRl cjsNCj4gLQkJCWlfc2VnID0gMDsNCj4gLQkJCWlmIChjYl90cmFja2VyW2Rldl9pZF0uaW9hdF9z cGFjZSA8IGl0ZXItPm5yX3NlZ3MpDQo+IC0JCQkJYnJlYWs7DQo+IC0JCQl3aGlsZSAoaV9zZWcg PCBpdGVyLT5ucl9zZWdzKSB7DQo+IC0JCQkJcnRlX2lvYXRfZW5xdWV1ZV9jb3B5KGRldl9pZCwN Cj4gLQkJCQkJKHVpbnRwdHJfdCkoaXRlci0+aW92W2lfc2VnXS5zcmNfYWRkciksDQo+IC0JCQkJ CSh1aW50cHRyX3QpKGl0ZXItPmlvdltpX3NlZ10uZHN0X2FkZHIpLA0KPiAtCQkJCQlpdGVyLT5p b3ZbaV9zZWddLmxlbiwNCj4gLQkJCQkJMCwNCj4gLQkJCQkJMCk7DQo+IC0JCQkJaV9zZWcrKzsN Cj4gLQkJCX0NCj4gLQkJCXdyaXRlICY9IG1hc2s7DQo+IC0JCQljYl90cmFja2VyW2Rldl9pZF0u c2l6ZV90cmFja1t3cml0ZV0gPSBpdGVyLT5ucl9zZWdzOw0KPiAtCQkJY2JfdHJhY2tlcltkZXZf aWRdLmlvYXRfc3BhY2UgLT0gaXRlci0+bnJfc2VnczsNCj4gLQkJCXdyaXRlKys7DQo+IC0JCX0N Cj4gLQl9IGVsc2Ugew0KPiAtCQkvKiBPcGFxdWUgZGF0YSBpcyBub3Qgc3VwcG9ydGVkICovDQo+ IC0JCXJldHVybiAtMTsNCj4gLQl9DQo+IC0JLyogcmluZyB0aGUgZG9vcmJlbGwgKi8NCj4gLQly dGVfaW9hdF9wZXJmb3JtX29wcyhkZXZfaWQpOw0KPiAtCWNiX3RyYWNrZXJbZGV2X2lkXS5uZXh0 X3dyaXRlID0gd3JpdGU7DQo+IC0JcmV0dXJuIGlfaXRlcjsNCj4gLX0NCj4gLQ0KPiAtaW50MzJf dA0KPiAtaW9hdF9jaGVja19jb21wbGV0ZWRfY29waWVzX2NiKGludCB2aWQsIHVpbnQxNl90IHF1 ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyAqb3BhcXVlX2RhdGEs DQo+IC0JCXVpbnQxNl90IG1heF9wYWNrZXRzKQ0KPiAtew0KPiAtCWlmICghb3BhcXVlX2RhdGEp IHsNCj4gLQkJdWludHB0cl90IGR1bXBbMjU1XTsNCj4gLQkJaW50IG5fc2VnOw0KPiAtCQl1bnNp Z25lZCBzaG9ydCByZWFkLCB3cml0ZTsNCj4gLQkJdW5zaWduZWQgc2hvcnQgbmJfcGFja2V0ID0g MDsNCj4gLQkJdW5zaWduZWQgc2hvcnQgbWFzayA9IE1BWF9FTlFVRVVFRF9TSVpFIC0gMTsNCj4g LQkJdW5zaWduZWQgc2hvcnQgaTsNCj4gLQ0KPiAtCQl1aW50MTZfdCBkZXZfaWQgPSBkbWFfYmlu ZFt2aWRdLmRtYXNbcXVldWVfaWQgKiAyDQo+IC0JCQkJKyBWSVJUSU9fUlhRXS5kZXZfaWQ7DQo+ IC0JCW5fc2VnID0gcnRlX2lvYXRfY29tcGxldGVkX29wcyhkZXZfaWQsIDI1NSwgTlVMTCwgTlVM TCwgZHVtcCwNCj4gZHVtcCk7DQo+IC0JCWlmIChuX3NlZyA8IDApIHsNCj4gLQkJCVJURV9MT0co RVJSLA0KPiAtCQkJCVZIT1NUX0RBVEEsDQo+IC0JCQkJImZhaWwgdG8gcG9sbCBjb21wbGV0ZWQg YnVmIG9uIElPQVQgZGV2aWNlICV1IiwNCj4gLQkJCQlkZXZfaWQpOw0KPiAtCQkJcmV0dXJuIDA7 DQo+IC0JCX0NCj4gLQkJaWYgKG5fc2VnID09IDApDQo+IC0JCQlyZXR1cm4gMDsNCj4gLQ0KPiAt CQljYl90cmFja2VyW2Rldl9pZF0uaW9hdF9zcGFjZSArPSBuX3NlZzsNCj4gLQkJbl9zZWcgKz0g Y2JfdHJhY2tlcltkZXZfaWRdLmxhc3RfcmVtYWluOw0KPiAtDQo+IC0JCXJlYWQgPSBjYl90cmFj a2VyW2Rldl9pZF0ubmV4dF9yZWFkOw0KPiAtCQl3cml0ZSA9IGNiX3RyYWNrZXJbZGV2X2lkXS5u ZXh0X3dyaXRlOw0KPiAtCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3BhY2tldHM7IGkrKykgew0KPiAt CQkJcmVhZCAmPSBtYXNrOw0KPiAtCQkJaWYgKHJlYWQgPT0gd3JpdGUpDQo+IC0JCQkJYnJlYWs7 DQo+IC0JCQlpZiAobl9zZWcgPj0gY2JfdHJhY2tlcltkZXZfaWRdLnNpemVfdHJhY2tbcmVhZF0p IHsNCj4gLQkJCQluX3NlZyAtPSBjYl90cmFja2VyW2Rldl9pZF0uc2l6ZV90cmFja1tyZWFkXTsN Cj4gLQkJCQlyZWFkKys7DQo+IC0JCQkJbmJfcGFja2V0Kys7DQo+IC0JCQl9IGVsc2Ugew0KPiAt CQkJCWJyZWFrOw0KPiAtCQkJfQ0KPiAtCQl9DQo+IC0JCWNiX3RyYWNrZXJbZGV2X2lkXS5uZXh0 X3JlYWQgPSByZWFkOw0KPiAtCQljYl90cmFja2VyW2Rldl9pZF0ubGFzdF9yZW1haW4gPSBuX3Nl ZzsNCj4gLQkJcmV0dXJuIG5iX3BhY2tldDsNCj4gLQl9DQo+IC0JLyogT3BhcXVlIGRhdGEgaXMg bm90IHN1cHBvcnRlZCAqLw0KPiAtCXJldHVybiAtMTsNCj4gLX0NCj4gLQ0KPiAtI2VuZGlmIC8q IFJURV9SQVdfSU9BVCAqLw0KPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvdmhvc3QvaW9hdC5oIGIv ZXhhbXBsZXMvdmhvc3QvaW9hdC5oDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRl eCBkOWJmNzE3ZThkLi4wMDAwMDAwMDAwDQo+IC0tLSBhL2V4YW1wbGVzL3Zob3N0L2lvYXQuaA0K PiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDYzICswLDAgQEANCj4gLS8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gLSAqIENvcHlyaWdodChjKSAyMDEwLTIwMjAgSW50 ZWwgQ29ycG9yYXRpb24NCj4gLSAqLw0KPiAtDQo+IC0jaWZuZGVmIF9JT0FUX0hfDQo+IC0jZGVm aW5lIF9JT0FUX0hfDQo+IC0NCj4gLSNpbmNsdWRlIDxydGVfdmhvc3QuaD4NCj4gLSNpbmNsdWRl IDxydGVfcGNpLmg+DQo+IC0jaW5jbHVkZSA8cnRlX3Zob3N0X2FzeW5jLmg+DQo+IC0NCj4gLSNk ZWZpbmUgTUFYX1ZIT1NUX0RFVklDRSAxMDI0DQo+IC0jZGVmaW5lIElPQVRfUklOR19TSVpFIDQw OTYNCj4gLSNkZWZpbmUgTUFYX0VOUVVFVUVEX1NJWkUgNDA5Ng0KPiAtDQo+IC1zdHJ1Y3QgZG1h X2luZm8gew0KPiAtCXN0cnVjdCBydGVfcGNpX2FkZHIgYWRkcjsNCj4gLQl1aW50MTZfdCBkZXZf aWQ7DQo+IC0JYm9vbCBpc192YWxpZDsNCj4gLX07DQo+IC0NCj4gLXN0cnVjdCBkbWFfZm9yX3Zo b3N0IHsNCj4gLQlzdHJ1Y3QgZG1hX2luZm8gZG1hc1tSVEVfTUFYX1FVRVVFU19QRVJfUE9SVCAq IDJdOw0KPiAtCXVpbnQxNl90IG5yOw0KPiAtfTsNCj4gLQ0KPiAtI2lmZGVmIFJURV9SQVdfSU9B VA0KPiAtaW50IG9wZW5faW9hdChjb25zdCBjaGFyICp2YWx1ZSk7DQo+IC0NCj4gLWludDMyX3QN Cj4gLWlvYXRfdHJhbnNmZXJfZGF0YV9jYihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4g LQkJc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciAqaW92X2l0ZXIsDQo+IC0JCXN0cnVjdCBydGVf dmhvc3RfYXN5bmNfc3RhdHVzICpvcGFxdWVfZGF0YSwgdWludDE2X3QgY291bnQpOw0KPiAtDQo+ IC1pbnQzMl90DQo+IC1pb2F0X2NoZWNrX2NvbXBsZXRlZF9jb3BpZXNfY2IoaW50IHZpZCwgdWlu dDE2X3QgcXVldWVfaWQsDQo+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfc3RhdHVzICpvcGFx dWVfZGF0YSwNCj4gLQkJdWludDE2X3QgbWF4X3BhY2tldHMpOw0KPiAtI2Vsc2UNCj4gLXN0YXRp YyBpbnQgb3Blbl9pb2F0KGNvbnN0IGNoYXIgKnZhbHVlIF9fcnRlX3VudXNlZCkNCj4gLXsNCj4g LQlyZXR1cm4gLTE7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQzMl90DQo+IC1pb2F0X3RyYW5z ZmVyX2RhdGFfY2IoaW50IHZpZCBfX3J0ZV91bnVzZWQsIHVpbnQxNl90IHF1ZXVlX2lkIF9fcnRl X3VudXNlZCwNCj4gLQkJc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciAqaW92X2l0ZXIgX19ydGVf dW51c2VkLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyAqb3BhcXVlX2RhdGEg X19ydGVfdW51c2VkLA0KPiAtCQl1aW50MTZfdCBjb3VudCBfX3J0ZV91bnVzZWQpDQo+IC17DQo+ IC0JcmV0dXJuIC0xOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50MzJfdA0KPiAtaW9hdF9jaGVj a19jb21wbGV0ZWRfY29waWVzX2NiKGludCB2aWQgX19ydGVfdW51c2VkLA0KPiAtCQl1aW50MTZf dCBxdWV1ZV9pZCBfX3J0ZV91bnVzZWQsDQo+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfc3Rh dHVzICpvcGFxdWVfZGF0YSBfX3J0ZV91bnVzZWQsDQo+IC0JCXVpbnQxNl90IG1heF9wYWNrZXRz IF9fcnRlX3VudXNlZCkNCj4gLXsNCj4gLQlyZXR1cm4gLTE7DQo+IC19DQo+IC0jZW5kaWYNCj4g LSNlbmRpZiAvKiBfSU9BVF9IXyAqLw0KPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvdmhvc3QvbWFp bi5jIGIvZXhhbXBsZXMvdmhvc3QvbWFpbi5jDQo+IGluZGV4IDMzZDAyM2FhMzkuLjQ0MDczNDk5 YmMgMTAwNjQ0DQo+IC0tLSBhL2V4YW1wbGVzL3Zob3N0L21haW4uYw0KPiArKysgYi9leGFtcGxl cy92aG9zdC9tYWluLmMNCj4gQEAgLTI0LDggKzI0LDkgQEANCj4gICNpbmNsdWRlIDxydGVfaXAu aD4NCj4gICNpbmNsdWRlIDxydGVfdGNwLmg+DQo+ICAjaW5jbHVkZSA8cnRlX3BhdXNlLmg+DQo+ ICsjaW5jbHVkZSA8cnRlX2RtYWRldi5oPg0KPiArI2luY2x1ZGUgPHJ0ZV92aG9zdF9hc3luYy5o Pg0KPiANCj4gLSNpbmNsdWRlICJpb2F0LmgiDQo+ICAjaW5jbHVkZSAibWFpbi5oIg0KPiANCj4g ICNpZm5kZWYgTUFYX1FVRVVFUw0KPiBAQCAtNTYsNiArNTcsMTQgQEANCj4gICNkZWZpbmUgUlRF X1RFU1RfVFhfREVTQ19ERUZBVUxUIDUxMg0KPiANCj4gICNkZWZpbmUgSU5WQUxJRF9QT1JUX0lE IDB4RkYNCj4gKyNkZWZpbmUgSU5WQUxJRF9ETUFfSUQgLTENCj4gKw0KPiArI2RlZmluZSBNQVhf VkhPU1RfREVWSUNFIDEwMjQNCj4gKyNkZWZpbmUgRE1BX1JJTkdfU0laRSA0MDk2DQo+ICsNCj4g K3N0cnVjdCBkbWFfZm9yX3Zob3N0IGRtYV9iaW5kW01BWF9WSE9TVF9ERVZJQ0VdOw0KPiArc3Ry dWN0IHJ0ZV92aG9zdF9hc3luY19kbWFfaW5mbyBkbWFfY29uZmlnW1JURV9ETUFERVZfREVGQVVM VF9NQVhdOw0KPiArc3RhdGljIGludCBkbWFfY291bnQ7DQo+IA0KPiAgLyogbWFzayBvZiBlbmFi bGVkIHBvcnRzICovDQo+ICBzdGF0aWMgdWludDMyX3QgZW5hYmxlZF9wb3J0X21hc2sgPSAwOw0K PiBAQCAtOTYsOCArMTA1LDYgQEAgc3RhdGljIGludCBidWlsdGluX25ldF9kcml2ZXI7DQo+IA0K PiAgc3RhdGljIGludCBhc3luY192aG9zdF9kcml2ZXI7DQo+IA0KPiAtc3RhdGljIGNoYXIgKmRt YV90eXBlOw0KPiAtDQo+ICAvKiBTcGVjaWZ5IHRpbWVvdXQgKGluIHVzZWNvbmRzKSBiZXR3ZWVu IHJldHJpZXMgb24gUlguICovDQo+ICBzdGF0aWMgdWludDMyX3QgYnVyc3RfcnhfZGVsYXlfdGlt ZSA9IEJVUlNUX1JYX1dBSVRfVVM7DQo+ICAvKiBTcGVjaWZ5IHRoZSBudW1iZXIgb2YgcmV0cmll cyBvbiBSWC4gKi8NCj4gQEAgLTE5NiwxMyArMjAzLDEzNCBAQCBzdHJ1Y3Qgdmhvc3RfYnVmZnRh YmxlICp2aG9zdF90eGJ1ZmZbUlRFX01BWF9MQ09SRSAqDQo+IE1BWF9WSE9TVF9ERVZJQ0VdOw0K PiAgI2RlZmluZSBNQlVGX1RBQkxFX0RSQUlOX1RTQwkoKHJ0ZV9nZXRfdHNjX2h6KCkgKyBVU19Q RVJfUyAtIDEpIFwNCj4gIAkJCQkgLyBVU19QRVJfUyAqIEJVUlNUX1RYX0RSQUlOX1VTKQ0KPiAN Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbA0KPiAraXNfZG1hX2NvbmZpZ3VyZWQoaW50MTZfdCBkZXZf aWQpDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgZG1hX2NvdW50 OyBpKyspIHsNCj4gKwkJaWYgKGRtYV9jb25maWdbaV0uZGV2X2lkID09IGRldl9pZCkgew0KPiAr CQkJcmV0dXJuIHRydWU7DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmV0dXJuIGZhbHNlOw0KPiArfQ0K PiArDQo+ICBzdGF0aWMgaW5saW5lIGludA0KPiAgb3Blbl9kbWEoY29uc3QgY2hhciAqdmFsdWUp DQo+ICB7DQo+IC0JaWYgKGRtYV90eXBlICE9IE5VTEwgJiYgc3RybmNtcChkbWFfdHlwZSwgImlv YXQiLCA0KSA9PSAwKQ0KPiAtCQlyZXR1cm4gb3Blbl9pb2F0KHZhbHVlKTsNCj4gKwlzdHJ1Y3Qg ZG1hX2Zvcl92aG9zdCAqZG1hX2luZm8gPSBkbWFfYmluZDsNCj4gKwljaGFyICppbnB1dCA9IHN0 cm5kdXAodmFsdWUsIHN0cmxlbih2YWx1ZSkgKyAxKTsNCj4gKwljaGFyICphZGRycyA9IGlucHV0 Ow0KPiArCWNoYXIgKnB0cnNbMl07DQo+ICsJY2hhciAqc3RhcnQsICplbmQsICpzdWJzdHI7DQo+ ICsJaW50NjRfdCB2aWQsIHZyaW5nX2lkOw0KPiArDQo+ICsJc3RydWN0IHJ0ZV9kbWFfaW5mbyBp bmZvOw0KPiArCXN0cnVjdCBydGVfZG1hX2NvbmYgZGV2X2NvbmZpZyA9IHsgLm5iX3ZjaGFucyA9 IDEgfTsNCj4gKwlzdHJ1Y3QgcnRlX2RtYV92Y2hhbl9jb25mIHFjb25mID0gew0KPiArCQkuZGly ZWN0aW9uID0gUlRFX0RNQV9ESVJfTUVNX1RPX01FTSwNCj4gKwkJLm5iX2Rlc2MgPSBETUFfUklO R19TSVpFDQo+ICsJfTsNCj4gKw0KPiArCWludCBkZXZfaWQ7DQo+ICsJaW50IHJldCA9IDA7DQo+ ICsJdWludDE2X3QgaSA9IDA7DQo+ICsJY2hhciAqZG1hX2FyZ1tNQVhfVkhPU1RfREVWSUNFXTsN Cj4gKwlpbnQgYXJnc19ucjsNCj4gKw0KPiArCXdoaWxlIChpc2JsYW5rKCphZGRycykpDQo+ICsJ CWFkZHJzKys7DQo+ICsJaWYgKCphZGRycyA9PSAnXDAnKSB7DQo+ICsJCXJldCA9IC0xOw0KPiAr CQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBwcm9jZXNzIERNQSBkZXZpY2VzIHdpdGhp biBicmFja2V0LiAqLw0KPiArCWFkZHJzKys7DQo+ICsJc3Vic3RyID0gc3RydG9rKGFkZHJzLCAi O10iKTsNCj4gKwlpZiAoIXN1YnN0cikgew0KPiArCQlyZXQgPSAtMTsNCj4gKwkJZ290byBvdXQ7 DQo+ICsJfQ0KPiArDQo+ICsJYXJnc19uciA9IHJ0ZV9zdHJzcGxpdChzdWJzdHIsIHN0cmxlbihz dWJzdHIpLA0KPiArCQkJZG1hX2FyZywgTUFYX1ZIT1NUX0RFVklDRSwgJywnKTsNCj4gKwlpZiAo YXJnc19uciA8PSAwKSB7DQo+ICsJCXJldCA9IC0xOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ ICsNCj4gKwl3aGlsZSAoaSA8IGFyZ3NfbnIpIHsNCj4gKwkJY2hhciAqYXJnX3RlbXAgPSBkbWFf YXJnW2ldOw0KPiArCQl1aW50OF90IHN1Yl9ucjsNCj4gKw0KPiArCQlzdWJfbnIgPSBydGVfc3Ry c3BsaXQoYXJnX3RlbXAsIHN0cmxlbihhcmdfdGVtcCksIHB0cnMsIDIsICdAJyk7DQo+ICsJCWlm IChzdWJfbnIgIT0gMikgew0KPiArCQkJcmV0ID0gLTE7DQo+ICsJCQlnb3RvIG91dDsNCj4gKwkJ fQ0KPiArDQo+ICsJCXN0YXJ0ID0gc3Ryc3RyKHB0cnNbMF0sICJ0eGQiKTsNCj4gKwkJaWYgKHN0 YXJ0ID09IE5VTEwpIHsNCj4gKwkJCXJldCA9IC0xOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0N Cj4gKw0KPiArCQlzdGFydCArPSAzOw0KPiArCQl2aWQgPSBzdHJ0b2woc3RhcnQsICZlbmQsIDAp Ow0KPiArCQlpZiAoZW5kID09IHN0YXJ0KSB7DQo+ICsJCQlyZXQgPSAtMTsNCj4gKwkJCWdvdG8g b3V0Ow0KPiArCQl9DQo+ICsNCj4gKwkJdnJpbmdfaWQgPSAwICsgVklSVElPX1JYUTsNCg0KTm8g bmVlZCB0byBpbnRyb2R1Y2UgdnJpbmdfaWQsIGl0J3MgYWx3YXlzIFZJUlRJT19SWFENCg0KPiAr DQo+ICsJCWRldl9pZCA9IHJ0ZV9kbWFfZ2V0X2Rldl9pZF9ieV9uYW1lKHB0cnNbMV0pOw0KPiAr CQlpZiAoZGV2X2lkIDwgMCkgew0KPiArCQkJUlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywgIkZh aWwgdG8gZmluZCBETUEgJXMuXG4iLA0KPiBwdHJzWzFdKTsNCj4gKwkJCXJldCA9IC0xOw0KPiAr CQkJZ290byBvdXQ7DQo+ICsJCX0gZWxzZSBpZiAoaXNfZG1hX2NvbmZpZ3VyZWQoZGV2X2lkKSkg ew0KPiArCQkJZ290byBkb25lOw0KPiArCQl9DQo+ICsNCg0KUGxlYXNlIGNhbGwgcnRlX2RtYV9p bmZvX2dldCBiZWZvcmUgY29uZmlndXJlIHRvIG1ha2Ugc3VyZSBpbmZvLm1heF92Y2hhbnMgPj0x DQoNCj4gKwkJaWYgKHJ0ZV9kbWFfY29uZmlndXJlKGRldl9pZCwgJmRldl9jb25maWcpICE9IDAp IHsNCj4gKwkJCVJURV9MT0coRVJSLCBWSE9TVF9DT05GSUcsICJGYWlsIHRvIGNvbmZpZ3VyZSBE TUEgJWQuXG4iLA0KPiBkZXZfaWQpOw0KPiArCQkJcmV0ID0gLTE7DQo+ICsJCQlnb3RvIG91dDsN Cj4gKwkJfQ0KPiArDQo+ICsJCWlmIChydGVfZG1hX3ZjaGFuX3NldHVwKGRldl9pZCwgMCwgJnFj b25mKSAhPSAwKSB7DQo+ICsJCQlSVEVfTE9HKEVSUiwgVkhPU1RfQ09ORklHLCAiRmFpbCB0byBz ZXQgdXAgRE1BICVkLlxuIiwNCj4gZGV2X2lkKTsNCj4gKwkJCXJldCA9IC0xOw0KPiArCQkJZ290 byBvdXQ7DQo+ICsJCX0NCj4gDQo+IC0JcmV0dXJuIC0xOw0KPiArCQlydGVfZG1hX2luZm9fZ2V0 KGRldl9pZCwgJmluZm8pOw0KPiArCQlpZiAoaW5mby5uYl92Y2hhbnMgIT0gMSkgew0KPiArCQkJ UlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywgIkRNQSAlZCBoYXMgbm8gcXVldWVzLlxuIiwNCj4g ZGV2X2lkKTsNCg0KVGhlbiB0aGUgYWJvdmUgbWVhbnMgdGhlIG51bWJlciBvZiB2Y2hhbiBpcyBu b3QgY29uZmlndXJlZC4NCg0KPiArCQkJcmV0ID0gLTE7DQo+ICsJCQlnb3RvIG91dDsNCj4gKwkJ fQ0KPiArDQo+ICsJCWlmIChydGVfZG1hX3N0YXJ0KGRldl9pZCkgIT0gMCkgew0KPiArCQkJUlRF X0xPRyhFUlIsIFZIT1NUX0NPTkZJRywgIkZhaWwgdG8gc3RhcnQgRE1BICV1LlxuIiwNCj4gZGV2 X2lkKTsNCj4gKwkJCXJldCA9IC0xOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0NCj4gKw0KPiAr CQlkbWFfY29uZmlnW2RtYV9jb3VudF0uZGV2X2lkID0gZGV2X2lkOw0KPiArCQlkbWFfY29uZmln W2RtYV9jb3VudF0ubWF4X3ZjaGFucyA9IDE7DQo+ICsJCWRtYV9jb25maWdbZG1hX2NvdW50Kytd Lm1heF9kZXNjID0gRE1BX1JJTkdfU0laRTsNCj4gKw0KPiArZG9uZToNCj4gKwkJKGRtYV9pbmZv ICsgdmlkKS0+ZG1hc1t2cmluZ19pZF0uZGV2X2lkID0gZGV2X2lkOw0KPiArCQlpKys7DQo+ICsJ fQ0KPiArb3V0Og0KPiArCWZyZWUoaW5wdXQpOw0KPiArCXJldHVybiByZXQ7DQo+ICB9DQo+IA0K PiAgLyoNCj4gQEAgLTUwMCw4ICs2MjgsNiBAQCBlbnVtIHsNCj4gIAlPUFRfQ0xJRU5UX05VTSwN Cj4gICNkZWZpbmUgT1BUX0JVSUxUSU5fTkVUX0RSSVZFUiAgImJ1aWx0aW4tbmV0LWRyaXZlciIN Cj4gIAlPUFRfQlVJTFRJTl9ORVRfRFJJVkVSX05VTSwNCj4gLSNkZWZpbmUgT1BUX0RNQV9UWVBF ICAgICAgICAgICAgImRtYS10eXBlIg0KPiAtCU9QVF9ETUFfVFlQRV9OVU0sDQo+ICAjZGVmaW5l IE9QVF9ETUFTICAgICAgICAgICAgICAgICJkbWFzIg0KPiAgCU9QVF9ETUFTX05VTSwNCj4gIH07 DQo+IEBAIC01MzksOCArNjY1LDYgQEAgdXNfdmhvc3RfcGFyc2VfYXJncyhpbnQgYXJnYywgY2hh ciAqKmFyZ3YpDQo+ICAJCQkJTlVMTCwgT1BUX0NMSUVOVF9OVU19LA0KPiAgCQl7T1BUX0JVSUxU SU5fTkVUX0RSSVZFUiwgbm9fYXJndW1lbnQsDQo+ICAJCQkJTlVMTCwgT1BUX0JVSUxUSU5fTkVU X0RSSVZFUl9OVU19LA0KPiAtCQl7T1BUX0RNQV9UWVBFLCByZXF1aXJlZF9hcmd1bWVudCwNCj4g LQkJCQlOVUxMLCBPUFRfRE1BX1RZUEVfTlVNfSwNCj4gIAkJe09QVF9ETUFTLCByZXF1aXJlZF9h cmd1bWVudCwNCj4gIAkJCQlOVUxMLCBPUFRfRE1BU19OVU19LA0KPiAgCQl7TlVMTCwgMCwgMCwg MH0sDQo+IEBAIC02NjEsMTAgKzc4NSw2IEBAIHVzX3Zob3N0X3BhcnNlX2FyZ3MoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQ0KPiAgCQkJfQ0KPiAgCQkJYnJlYWs7DQo+IA0KPiAtCQljYXNlIE9QVF9E TUFfVFlQRV9OVU06DQo+IC0JCQlkbWFfdHlwZSA9IG9wdGFyZzsNCj4gLQkJCWJyZWFrOw0KPiAt DQo+ICAJCWNhc2UgT1BUX0RNQVNfTlVNOg0KPiAgCQkJaWYgKG9wZW5fZG1hKG9wdGFyZykgPT0g LTEpIHsNCj4gIAkJCQlSVEVfTE9HKElORk8sIFZIT1NUX0NPTkZJRywNCj4gQEAgLTg0MSw5ICs5 NjEsMTAgQEAgY29tcGxldGVfYXN5bmNfcGt0cyhzdHJ1Y3Qgdmhvc3RfZGV2ICp2ZGV2KQ0KPiAg ew0KPiAgCXN0cnVjdCBydGVfbWJ1ZiAqcF9jcGxbTUFYX1BLVF9CVVJTVF07DQo+ICAJdWludDE2 X3QgY29tcGxldGVfY291bnQ7DQo+ICsJaW50MTZfdCBkbWFfaWQgPSBkbWFfYmluZFt2ZGV2LT52 aWRdLmRtYXNbVklSVElPX1JYUV0uZGV2X2lkOw0KPiANCj4gIAljb21wbGV0ZV9jb3VudCA9IHJ0 ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKHZkZXYtPnZpZCwNCj4gLQkJCQkJVklSVElP X1JYUSwgcF9jcGwsIE1BWF9QS1RfQlVSU1QpOw0KPiArCQkJCQlWSVJUSU9fUlhRLCBwX2NwbCwg TUFYX1BLVF9CVVJTVCwgZG1hX2lkLCAwKTsNCj4gIAlpZiAoY29tcGxldGVfY291bnQpIHsNCj4g IAkJZnJlZV9wa3RzKHBfY3BsLCBjb21wbGV0ZV9jb3VudCk7DQo+ICAJCV9fYXRvbWljX3N1Yl9m ZXRjaCgmdmRldi0+cGt0c19pbmZsaWdodCwgY29tcGxldGVfY291bnQsDQo+IF9fQVRPTUlDX1NF UV9DU1QpOw0KPiBAQCAtODgzLDExICsxMDA0LDEyIEBAIGRyYWluX3Zob3N0KHN0cnVjdCB2aG9z dF9kZXYgKnZkZXYpDQo+IA0KPiAgCWlmIChidWlsdGluX25ldF9kcml2ZXIpIHsNCj4gIAkJcmV0 ID0gdnNfZW5xdWV1ZV9wa3RzKHZkZXYsIFZJUlRJT19SWFEsIG0sIG5yX3htaXQpOw0KPiAtCX0g ZWxzZSBpZiAoYXN5bmNfdmhvc3RfZHJpdmVyKSB7DQo+ICsJfSBlbHNlIGlmIChkbWFfYmluZFt2 ZGV2LT52aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5bmNfZW5hYmxlZCkgew0KPiAgCQl1aW50MTZf dCBlbnF1ZXVlX2ZhaWwgPSAwOw0KPiArCQlpbnQxNl90IGRtYV9pZCA9IGRtYV9iaW5kW3ZkZXYt PnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQ7DQo+IA0KPiAgCQljb21wbGV0ZV9hc3luY19w a3RzKHZkZXYpOw0KPiAtCQlyZXQgPSBydGVfdmhvc3Rfc3VibWl0X2VucXVldWVfYnVyc3QodmRl di0+dmlkLCBWSVJUSU9fUlhRLCBtLA0KPiBucl94bWl0KTsNCj4gKwkJcmV0ID0gcnRlX3Zob3N0 X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KHZkZXYtPnZpZCwgVklSVElPX1JYUSwgbSwNCj4gbnJfeG1p dCwgZG1hX2lkLCAwKTsNCj4gIAkJX19hdG9taWNfYWRkX2ZldGNoKCZ2ZGV2LT5wa3RzX2luZmxp Z2h0LCByZXQsIF9fQVRPTUlDX1NFUV9DU1QpOw0KPiANCj4gIAkJZW5xdWV1ZV9mYWlsID0gbnJf eG1pdCAtIHJldDsNCj4gQEAgLTkwNSw3ICsxMDI3LDcgQEAgZHJhaW5fdmhvc3Qoc3RydWN0IHZo b3N0X2RldiAqdmRldikNCj4gIAkJCQlfX0FUT01JQ19TRVFfQ1NUKTsNCj4gIAl9DQo+IA0KPiAt CWlmICghYXN5bmNfdmhvc3RfZHJpdmVyKQ0KPiArCWlmICghZG1hX2JpbmRbdmRldi0+dmlkXS5k bWFzW1ZJUlRJT19SWFFdLmFzeW5jX2VuYWJsZWQpDQo+ICAJCWZyZWVfcGt0cyhtLCBucl94bWl0 KTsNCj4gIH0NCj4gDQo+IEBAIC0xMjExLDEyICsxMzMzLDEzIEBAIGRyYWluX2V0aF9yeChzdHJ1 Y3Qgdmhvc3RfZGV2ICp2ZGV2KQ0KPiAgCWlmIChidWlsdGluX25ldF9kcml2ZXIpIHsNCj4gIAkJ ZW5xdWV1ZV9jb3VudCA9IHZzX2VucXVldWVfcGt0cyh2ZGV2LCBWSVJUSU9fUlhRLA0KPiAgCQkJ CQkJcGt0cywgcnhfY291bnQpOw0KPiAtCX0gZWxzZSBpZiAoYXN5bmNfdmhvc3RfZHJpdmVyKSB7 DQo+ICsJfSBlbHNlIGlmIChkbWFfYmluZFt2ZGV2LT52aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5 bmNfZW5hYmxlZCkgew0KPiAgCQl1aW50MTZfdCBlbnF1ZXVlX2ZhaWwgPSAwOw0KPiArCQlpbnQx Nl90IGRtYV9pZCA9IGRtYV9iaW5kW3ZkZXYtPnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQ7 DQo+IA0KPiAgCQljb21wbGV0ZV9hc3luY19wa3RzKHZkZXYpOw0KPiAgCQllbnF1ZXVlX2NvdW50 ID0gcnRlX3Zob3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KHZkZXYtPnZpZCwNCj4gLQkJCQkJVklS VElPX1JYUSwgcGt0cywgcnhfY291bnQpOw0KPiArCQkJCQlWSVJUSU9fUlhRLCBwa3RzLCByeF9j b3VudCwgZG1hX2lkLCAwKTsNCj4gIAkJX19hdG9taWNfYWRkX2ZldGNoKCZ2ZGV2LT5wa3RzX2lu ZmxpZ2h0LCBlbnF1ZXVlX2NvdW50LA0KPiBfX0FUT01JQ19TRVFfQ1NUKTsNCj4gDQo+ICAJCWVu cXVldWVfZmFpbCA9IHJ4X2NvdW50IC0gZW5xdWV1ZV9jb3VudDsNCj4gQEAgLTEyMzUsNyArMTM1 OCw3IEBAIGRyYWluX2V0aF9yeChzdHJ1Y3Qgdmhvc3RfZGV2ICp2ZGV2KQ0KPiAgCQkJCV9fQVRP TUlDX1NFUV9DU1QpOw0KPiAgCX0NCj4gDQo+IC0JaWYgKCFhc3luY192aG9zdF9kcml2ZXIpDQo+ ICsJaWYgKCFkbWFfYmluZFt2ZGV2LT52aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5bmNfZW5hYmxl ZCkNCj4gIAkJZnJlZV9wa3RzKHBrdHMsIHJ4X2NvdW50KTsNCj4gIH0NCj4gDQo+IEBAIC0xMzg3 LDE4ICsxNTEwLDIwIEBAIGRlc3Ryb3lfZGV2aWNlKGludCB2aWQpDQo+ICAJCSIoJWQpIGRldmlj ZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gZGF0YSBjb3JlXG4iLA0KPiAgCQl2ZGV2LT52aWQpOw0K PiANCj4gLQlpZiAoYXN5bmNfdmhvc3RfZHJpdmVyKSB7DQo+ICsJaWYgKGRtYV9iaW5kW3ZpZF0u ZG1hc1tWSVJUSU9fUlhRXS5hc3luY19lbmFibGVkKSB7DQo+ICAJCXVpbnQxNl90IG5fcGt0ID0g MDsNCj4gKwkJaW50MTZfdCBkbWFfaWQgPSBkbWFfYmluZFt2aWRdLmRtYXNbVklSVElPX1JYUV0u ZGV2X2lkOw0KPiAgCQlzdHJ1Y3QgcnRlX21idWYgKm1fY3BsW3ZkZXYtPnBrdHNfaW5mbGlnaHRd Ow0KPiANCj4gIAkJd2hpbGUgKHZkZXYtPnBrdHNfaW5mbGlnaHQpIHsNCj4gIAkJCW5fcGt0ID0g cnRlX3Zob3N0X2NsZWFyX3F1ZXVlX3RocmVhZF91bnNhZmUodmlkLCBWSVJUSU9fUlhRLA0KPiAt CQkJCQkJbV9jcGwsIHZkZXYtPnBrdHNfaW5mbGlnaHQpOw0KPiArCQkJCQkJbV9jcGwsIHZkZXYt PnBrdHNfaW5mbGlnaHQsIGRtYV9pZCwgMCk7DQo+ICAJCQlmcmVlX3BrdHMobV9jcGwsIG5fcGt0 KTsNCj4gIAkJCV9fYXRvbWljX3N1Yl9mZXRjaCgmdmRldi0+cGt0c19pbmZsaWdodCwgbl9wa3Qs DQo+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiAgCQl9DQo+IA0KPiAgCQlydGVfdmhvc3RfYXN5bmNf Y2hhbm5lbF91bnJlZ2lzdGVyKHZpZCwgVklSVElPX1JYUSk7DQo+ICsJCWRtYV9iaW5kW3ZpZF0u ZG1hc1tWSVJUSU9fUlhRXS5hc3luY19lbmFibGVkID0gZmFsc2U7DQo+ICAJfQ0KPiANCj4gIAly dGVfZnJlZSh2ZGV2KTsNCj4gQEAgLTE0NjgsMjAgKzE1OTMsMTQgQEAgbmV3X2RldmljZShpbnQg dmlkKQ0KPiAgCQkiKCVkKSBkZXZpY2UgaGFzIGJlZW4gYWRkZWQgdG8gZGF0YSBjb3JlICVkXG4i LA0KPiAgCQl2aWQsIHZkZXYtPmNvcmVpZCk7DQo+IA0KPiAtCWlmIChhc3luY192aG9zdF9kcml2 ZXIpIHsNCj4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgY29uZmlnID0gezB9Ow0K PiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzIGNoYW5uZWxfb3BzOw0KPiAt DQo+IC0JCWlmIChkbWFfdHlwZSAhPSBOVUxMICYmIHN0cm5jbXAoZG1hX3R5cGUsICJpb2F0Iiwg NCkgPT0gMCkgew0KPiAtCQkJY2hhbm5lbF9vcHMudHJhbnNmZXJfZGF0YSA9IGlvYXRfdHJhbnNm ZXJfZGF0YV9jYjsNCj4gLQkJCWNoYW5uZWxfb3BzLmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMgPQ0K PiAtCQkJCWlvYXRfY2hlY2tfY29tcGxldGVkX2NvcGllc19jYjsNCj4gLQ0KPiAtCQkJY29uZmln LmZlYXR1cmVzID0gUlRFX1ZIT1NUX0FTWU5DX0lOT1JERVI7DQo+ICsJaWYgKGRtYV9iaW5kW3Zp ZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQgIT0gSU5WQUxJRF9ETUFfSUQpIHsNCj4gKwkJaW50 IHJldDsNCj4gDQo+IC0JCQlyZXR1cm4gcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIo dmlkLCBWSVJUSU9fUlhRLA0KPiAtCQkJCWNvbmZpZywgJmNoYW5uZWxfb3BzKTsNCj4gKwkJcmV0 ID0gcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIodmlkLCBWSVJUSU9fUlhRKTsNCj4g KwkJaWYgKHJldCA9PSAwKSB7DQo+ICsJCQlkbWFfYmluZFt2aWRdLmRtYXNbVklSVElPX1JYUV0u YXN5bmNfZW5hYmxlZCA9IHRydWU7DQo+ICAJCX0NCj4gKwkJcmV0dXJuIHJldDsNCj4gIAl9DQo+ IA0KPiAgCXJldHVybiAwOw0KPiBAQCAtMTUwMiwxNCArMTYyMSwxNSBAQCB2cmluZ19zdGF0ZV9j aGFuZ2VkKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLCBpbnQNCj4gZW5hYmxlKQ0KPiAgCWlm IChxdWV1ZV9pZCAhPSBWSVJUSU9fUlhRKQ0KPiAgCQlyZXR1cm4gMDsNCj4gDQo+IC0JaWYgKGFz eW5jX3Zob3N0X2RyaXZlcikgew0KPiArCWlmIChkbWFfYmluZFt2aWRdLmRtYXNbcXVldWVfaWRd LmFzeW5jX2VuYWJsZWQpIHsNCj4gIAkJaWYgKCFlbmFibGUpIHsNCj4gIAkJCXVpbnQxNl90IG5f cGt0ID0gMDsNCj4gKwkJCWludDE2X3QgZG1hX2lkID0gZG1hX2JpbmRbdmlkXS5kbWFzW1ZJUlRJ T19SWFFdLmRldl9pZDsNCj4gIAkJCXN0cnVjdCBydGVfbWJ1ZiAqbV9jcGxbdmRldi0+cGt0c19p bmZsaWdodF07DQo+IA0KPiAgCQkJd2hpbGUgKHZkZXYtPnBrdHNfaW5mbGlnaHQpIHsNCj4gIAkJ CQluX3BrdCA9IHJ0ZV92aG9zdF9jbGVhcl9xdWV1ZV90aHJlYWRfdW5zYWZlKHZpZCwNCj4gcXVl dWVfaWQsDQo+IC0JCQkJCQkJbV9jcGwsIHZkZXYtPnBrdHNfaW5mbGlnaHQpOw0KPiArCQkJCQkJ CW1fY3BsLCB2ZGV2LT5wa3RzX2luZmxpZ2h0LCBkbWFfaWQsDQo+IDApOw0KPiAgCQkJCWZyZWVf cGt0cyhtX2NwbCwgbl9wa3QpOw0KPiAgCQkJCV9fYXRvbWljX3N1Yl9mZXRjaCgmdmRldi0+cGt0 c19pbmZsaWdodCwgbl9wa3QsDQo+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiAgCQkJfQ0KPiBAQCAt MTY1Nyw2ICsxNzc3LDI1IEBAIGNyZWF0ZV9tYnVmX3Bvb2wodWludDE2X3QgbnJfcG9ydCwgdWlu dDMyX3QNCj4gbnJfc3dpdGNoX2NvcmUsIHVpbnQzMl90IG1idWZfc2l6ZSwNCj4gIAkJcnRlX2V4 aXQoRVhJVF9GQUlMVVJFLCAiQ2Fubm90IGNyZWF0ZSBtYnVmIHBvb2xcbiIpOw0KPiAgfQ0KPiAN Cj4gK3N0YXRpYyB2b2lkDQo+ICtpbml0X2RtYSh2b2lkKQ0KPiArew0KPiArCWludCBpOw0KPiAr DQo+ICsJZm9yIChpID0gMDsgaSA8IE1BWF9WSE9TVF9ERVZJQ0U7IGkrKykgew0KPiArCQlpbnQg ajsNCj4gKw0KPiArCQlmb3IgKGogPSAwOyBqIDwgUlRFX01BWF9RVUVVRVNfUEVSX1BPUlQgKiAy OyBqKyspIHsNCj4gKwkJCWRtYV9iaW5kW2ldLmRtYXNbal0uZGV2X2lkID0gSU5WQUxJRF9ETUFf SUQ7DQo+ICsJCQlkbWFfYmluZFtpXS5kbWFzW2pdLmFzeW5jX2VuYWJsZWQgPSBmYWxzZTsNCj4g KwkJfQ0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBSVEVfRE1BREVWX0RFRkFVTFRf TUFYOyBpKyspIHsNCj4gKwkJZG1hX2NvbmZpZ1tpXS5kZXZfaWQgPSBJTlZBTElEX0RNQV9JRDsN Cj4gKwl9DQo+ICt9DQo+ICsNCj4gIC8qDQo+ICAgKiBNYWluIGZ1bmN0aW9uLCBkb2VzIGluaXRp YWxpc2F0aW9uIGFuZCBjYWxscyB0aGUgcGVyLWxjb3JlIGZ1bmN0aW9ucy4NCj4gICAqLw0KPiBA QCAtMTY3OSw2ICsxODE4LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KPiAgCWFy Z2MgLT0gcmV0Ow0KPiAgCWFyZ3YgKz0gcmV0Ow0KPiANCj4gKwkvKiBpbml0aWFsaXplIGRtYSBz dHJ1Y3R1cmVzICovDQo+ICsJaW5pdF9kbWEoKTsNCj4gKw0KPiAgCS8qIHBhcnNlIGFwcCBhcmd1 bWVudHMgKi8NCj4gIAlyZXQgPSB1c192aG9zdF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpOw0KPiAg CWlmIChyZXQgPCAwKQ0KPiBAQCAtMTc1NCw2ICsxODk2LDIwIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkNCj4gIAlpZiAoY2xpZW50X21vZGUpDQo+ICAJCWZsYWdzIHw9IFJURV9WSE9T VF9VU0VSX0NMSUVOVDsNCj4gDQo+ICsJaWYgKGFzeW5jX3Zob3N0X2RyaXZlcikgew0KPiArCQlp ZiAocnRlX3Zob3N0X2FzeW5jX2RtYV9jb25maWd1cmUoZG1hX2NvbmZpZywgZG1hX2NvdW50KSA8 IDApIHsNCj4gKwkJCVJURV9MT0coRVJSLCBWSE9TVF9QT1JULCAiRmFpbGVkIHRvIGNvbmZpZ3Vy ZSBETUEgaW4NCj4gdmhvc3QuXG4iKTsNCj4gKwkJCWZvciAoaSA9IDA7IGkgPCBkbWFfY291bnQ7 IGkrKykgew0KPiArCQkJCWlmIChkbWFfY29uZmlnW2ldLmRldl9pZCAhPSBJTlZBTElEX0RNQV9J RCkgew0KPiArCQkJCQlydGVfZG1hX3N0b3AoZG1hX2NvbmZpZ1tpXS5kZXZfaWQpOw0KPiArCQkJ CQlkbWFfY29uZmlnW2ldLmRldl9pZCA9IElOVkFMSURfRE1BX0lEOw0KPiArCQkJCX0NCj4gKwkJ CX0NCj4gKwkJCWRtYV9jb3VudCA9IDA7DQo+ICsJCQlhc3luY192aG9zdF9kcml2ZXIgPSBmYWxz ZTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAgCS8qIFJlZ2lzdGVyIHZob3N0IHVzZXIgZHJpdmVy IHRvIGhhbmRsZSB2aG9zdCBtZXNzYWdlcy4gKi8NCj4gIAlmb3IgKGkgPSAwOyBpIDwgbmJfc29j a2V0czsgaSsrKSB7DQo+ICAJCWNoYXIgKmZpbGUgPSBzb2NrZXRfZmlsZXMgKyBpICogUEFUSF9N QVg7DQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy92aG9zdC9tYWluLmggYi9leGFtcGxlcy92aG9z dC9tYWluLmgNCj4gaW5kZXggZTdiMWFjNjBhNi4uYjRhNDUzZTc3ZSAxMDA2NDQNCj4gLS0tIGEv ZXhhbXBsZXMvdmhvc3QvbWFpbi5oDQo+ICsrKyBiL2V4YW1wbGVzL3Zob3N0L21haW4uaA0KPiBA QCAtOCw2ICs4LDcgQEANCj4gICNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCj4gDQo+ICAjaW5jbHVk ZSA8cnRlX2V0aGVyLmg+DQo+ICsjaW5jbHVkZSA8cnRlX3BjaS5oPg0KPiANCj4gIC8qIE1hY3Jv cyBmb3IgcHJpbnRpbmcgdXNpbmcgUlRFX0xPRyAqLw0KPiAgI2RlZmluZSBSVEVfTE9HVFlQRV9W SE9TVF9DT05GSUcgUlRFX0xPR1RZUEVfVVNFUjENCj4gQEAgLTc5LDYgKzgwLDE2IEBAIHN0cnVj dCBsY29yZV9pbmZvIHsNCj4gIAlzdHJ1Y3Qgdmhvc3RfZGV2X3RhaWxxX2xpc3QgdmRldl9saXN0 Ow0KPiAgfTsNCj4gDQo+ICtzdHJ1Y3QgZG1hX2luZm8gew0KPiArCXN0cnVjdCBydGVfcGNpX2Fk ZHIgYWRkcjsNCj4gKwlpbnQxNl90IGRldl9pZDsNCj4gKwlib29sIGFzeW5jX2VuYWJsZWQ7DQo+ ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgZG1hX2Zvcl92aG9zdCB7DQo+ICsJc3RydWN0IGRtYV9pbmZv IGRtYXNbUlRFX01BWF9RVUVVRVNfUEVSX1BPUlQgKiAyXTsNCj4gK307DQo+ICsNCj4gIC8qIHdl IGltcGxlbWVudCBub24tZXh0cmEgdmlydGlvIG5ldCBmZWF0dXJlcyAqLw0KPiAgI2RlZmluZSBW SVJUSU9fTkVUX0ZFQVRVUkVTCTANCj4gDQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy92aG9zdC9t ZXNvbi5idWlsZCBiL2V4YW1wbGVzL3Zob3N0L21lc29uLmJ1aWxkDQo+IGluZGV4IDNlZmQ1ZTY1 NDAuLjg3YTYzN2Y4M2YgMTAwNjQ0DQo+IC0tLSBhL2V4YW1wbGVzL3Zob3N0L21lc29uLmJ1aWxk DQo+ICsrKyBiL2V4YW1wbGVzL3Zob3N0L21lc29uLmJ1aWxkDQo+IEBAIC0xMiwxMyArMTIsOSBA QCBpZiBub3QgaXNfbGludXgNCj4gIGVuZGlmDQo+IA0KPiAgZGVwcyArPSAndmhvc3QnDQo+ICtk ZXBzICs9ICdkbWFkZXYnDQo+ICBhbGxvd19leHBlcmltZW50YWxfYXBpcyA9IHRydWUNCj4gIHNv dXJjZXMgPSBmaWxlcygNCj4gICAgICAgICAgJ21haW4uYycsDQo+ICAgICAgICAgICd2aXJ0aW9f bmV0LmMnLA0KPiAgKQ0KPiAtDQo+IC1pZiBkcGRrX2NvbmYuaGFzKCdSVEVfUkFXX0lPQVQnKQ0K PiAtICAgIGRlcHMgKz0gJ3Jhd19pb2F0Jw0KPiAtICAgIHNvdXJjZXMgKz0gZmlsZXMoJ2lvYXQu YycpDQo+IC1lbmRpZg0KPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L21lc29uLmJ1aWxkIGIvbGli L3Zob3N0L21lc29uLmJ1aWxkDQo+IGluZGV4IGNkYjM3YTQ4MTQuLjgxMDczMjk0MDAgMTAwNjQ0 DQo+IC0tLSBhL2xpYi92aG9zdC9tZXNvbi5idWlsZA0KPiArKysgYi9saWIvdmhvc3QvbWVzb24u YnVpbGQNCj4gQEAgLTMzLDcgKzMzLDggQEAgaGVhZGVycyA9IGZpbGVzKA0KPiAgICAgICAgICAn cnRlX3Zob3N0X2FzeW5jLmgnLA0KPiAgICAgICAgICAncnRlX3Zob3N0X2NyeXB0by5oJywNCj4g ICkNCj4gKw0KPiAgZHJpdmVyX3Nka19oZWFkZXJzID0gZmlsZXMoDQo+ICAgICAgICAgICd2ZHBh X2RyaXZlci5oJywNCj4gICkNCj4gLWRlcHMgKz0gWydldGhkZXYnLCAnY3J5cHRvZGV2JywgJ2hh c2gnLCAncGNpJ10NCj4gK2RlcHMgKz0gWydldGhkZXYnLCAnY3J5cHRvZGV2JywgJ2hhc2gnLCAn cGNpJywgJ2RtYWRldiddDQo+IGRpZmYgLS1naXQgYS9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5j LmggYi9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5jLmgNCj4gaW5kZXggYTg3ZWE2YmEzNy4uMjNh N2EyZDhiMyAxMDA2NDQNCj4gLS0tIGEvbGliL3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oDQo+ICsr KyBiL2xpYi92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0KPiBAQCAtMjcsNzAgKzI3LDEyIEBAIHN0 cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgew0KPiAgfTsNCj4gDQo+ICAvKioNCj4gLSAqIGRtYSB0 cmFuc2ZlciBzdGF0dXMNCj4gKyAqIERNQSBkZXZpY2UgaW5mb3JtYXRpb24NCj4gICAqLw0KPiAt c3RydWN0IHJ0ZV92aG9zdF9hc3luY19zdGF0dXMgew0KPiAtCS8qKiBBbiBhcnJheSBvZiBhcHBs aWNhdGlvbiBzcGVjaWZpYyBkYXRhIGZvciBzb3VyY2UgbWVtb3J5ICovDQo+IC0JdWludHB0cl90 ICpzcmNfb3BhcXVlX2RhdGE7DQo+IC0JLyoqIEFuIGFycmF5IG9mIGFwcGxpY2F0aW9uIHNwZWNp ZmljIGRhdGEgZm9yIGRlc3RpbmF0aW9uIG1lbW9yeSAqLw0KPiAtCXVpbnRwdHJfdCAqZHN0X29w YXF1ZV9kYXRhOw0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBkbWEgb3BlcmF0aW9uIGNhbGxi YWNrcyB0byBiZSBpbXBsZW1lbnRlZCBieSBhcHBsaWNhdGlvbnMNCj4gLSAqLw0KPiAtc3RydWN0 IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyB7DQo+IC0JLyoqDQo+IC0JICogaW5zdHJ1Y3Qg YXN5bmMgZW5naW5lcyB0byBwZXJmb3JtIGNvcGllcyBmb3IgYSBiYXRjaCBvZiBwYWNrZXRzDQo+ IC0JICoNCj4gLQkgKiBAcGFyYW0gdmlkDQo+IC0JICogIGlkIG9mIHZob3N0IGRldmljZSB0byBw ZXJmb3JtIGRhdGEgY29waWVzDQo+IC0JICogQHBhcmFtIHF1ZXVlX2lkDQo+IC0JICogIHF1ZXVl IGlkIHRvIHBlcmZvcm0gZGF0YSBjb3BpZXMNCj4gLQkgKiBAcGFyYW0gaW92X2l0ZXINCj4gLQkg KiAgYW4gYXJyYXkgb2YgSU9WIGl0ZXJhdG9ycw0KPiAtCSAqIEBwYXJhbSBvcGFxdWVfZGF0YQ0K PiAtCSAqICBvcGFxdWUgZGF0YSBwYWlyIHNlbmRpbmcgdG8gRE1BIGVuZ2luZQ0KPiAtCSAqIEBw YXJhbSBjb3VudA0KPiAtCSAqICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICJkZXNjcyIgYXJy YXkNCj4gLQkgKiBAcmV0dXJuDQo+IC0JICogIG51bWJlciBvZiBJT1YgaXRlcmF0b3JzIHByb2Nl c3NlZCwgbmVnYXRpdmUgdmFsdWUgbWVhbnMgZXJyb3INCj4gLQkgKi8NCj4gLQlpbnQzMl90ICgq dHJhbnNmZXJfZGF0YSkoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0JCXN0cnVjdCBy dGVfdmhvc3RfaW92X2l0ZXIgKmlvdl9pdGVyLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5j X3N0YXR1cyAqb3BhcXVlX2RhdGEsDQo+IC0JCXVpbnQxNl90IGNvdW50KTsNCj4gLQkvKioNCj4g LQkgKiBjaGVjayBjb3B5LWNvbXBsZXRlZCBwYWNrZXRzIGZyb20gdGhlIGFzeW5jIGVuZ2luZQ0K PiAtCSAqIEBwYXJhbSB2aWQNCj4gLQkgKiAgaWQgb2Ygdmhvc3QgZGV2aWNlIHRvIGNoZWNrIGNv cHkgY29tcGxldGlvbg0KPiAtCSAqIEBwYXJhbSBxdWV1ZV9pZA0KPiAtCSAqICBxdWV1ZSBpZCB0 byBjaGVjayBjb3B5IGNvbXBsZXRpb24NCj4gLQkgKiBAcGFyYW0gb3BhcXVlX2RhdGENCj4gLQkg KiAgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIG9wYXF1ZSBkYXRhIHBhaXIgZnJvbSBETUEgZW5naW5l DQo+IC0JICogQHBhcmFtIG1heF9wYWNrZXRzDQo+IC0JICogIG1heCBudW1iZXIgb2YgcGFja2V0 cyBjb3VsZCBiZSBjb21wbGV0ZWQNCj4gLQkgKiBAcmV0dXJuDQo+IC0JICogIG51bWJlciBvZiBh c3luYyBkZXNjcyBjb21wbGV0ZWQsIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIGVycm9yDQo+IC0JICov DQo+IC0JaW50MzJfdCAoKmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMpKGludCB2aWQsIHVpbnQxNl90 IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyAqb3BhcXVlX2Rh dGEsDQo+IC0JCXVpbnQxNl90IG1heF9wYWNrZXRzKTsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAt ICogIGFzeW5jIGNoYW5uZWwgZmVhdHVyZXMNCj4gLSAqLw0KPiAtZW51bSB7DQo+IC0JUlRFX1ZI T1NUX0FTWU5DX0lOT1JERVIgPSAxVSA8PCAwLA0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiAg YXN5bmMgY2hhbm5lbCBjb25maWd1cmF0aW9uDQo+IC0gKi8NCj4gLXN0cnVjdCBydGVfdmhvc3Rf YXN5bmNfY29uZmlnIHsNCj4gLQl1aW50MzJfdCBmZWF0dXJlczsNCj4gLQl1aW50MzJfdCByc3Zk WzJdOw0KPiArc3RydWN0IHJ0ZV92aG9zdF9hc3luY19kbWFfaW5mbyB7DQo+ICsJaW50MTZfdCBk ZXZfaWQ7CS8qIERNQSBkZXZpY2UgSUQgKi8NCj4gKwl1aW50MTZfdCBtYXhfdmNoYW5zOwkvKiBt YXggbnVtYmVyIG9mIHZjaGFuICovDQo+ICsJdWludDE2X3QgbWF4X2Rlc2M7CS8qIG1heCBkZXNj IG51bWJlciBvZiB2Y2hhbiAqLw0KPiAgfTsNCj4gDQo+ICAvKioNCj4gQEAgLTEwMCwxNyArNDIs MTEgQEAgc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgew0KPiAgICogIHZob3N0IGRldmlj ZSBpZCBhc3luYyBjaGFubmVsIHRvIGJlIGF0dGFjaGVkIHRvDQo+ICAgKiBAcGFyYW0gcXVldWVf aWQNCj4gICAqICB2aG9zdCBxdWV1ZSBpZCBhc3luYyBjaGFubmVsIHRvIGJlIGF0dGFjaGVkIHRv DQo+IC0gKiBAcGFyYW0gY29uZmlnDQo+IC0gKiAgQXN5bmMgY2hhbm5lbCBjb25maWd1cmF0aW9u IHN0cnVjdHVyZQ0KPiAtICogQHBhcmFtIG9wcw0KPiAtICogIEFzeW5jIGNoYW5uZWwgb3BlcmF0 aW9uIGNhbGxiYWNrcw0KPiAgICogQHJldHVybg0KPiAgICogIDAgb24gc3VjY2VzcywgLTEgb24g ZmFpbHVyZXMNCj4gICAqLw0KPiAgX19ydGVfZXhwZXJpbWVudGFsDQo+IC1pbnQgcnRlX3Zob3N0 X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0J c3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgY29uZmlnLA0KPiAtCXN0cnVjdCBydGVfdmhv c3RfYXN5bmNfY2hhbm5lbF9vcHMgKm9wcyk7DQo+ICtpbnQgcnRlX3Zob3N0X2FzeW5jX2NoYW5u ZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQpOw0KPiANCj4gIC8qKg0KPiAg ICogVW5yZWdpc3RlciBhbiBhc3luYyBjaGFubmVsIGZvciBhIHZob3N0IHF1ZXVlDQo+IEBAIC0x MzYsMTcgKzcyLDExIEBAIGludCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF91bnJlZ2lzdGVyKGlu dCB2aWQsIHVpbnQxNl90DQo+IHF1ZXVlX2lkKTsNCj4gICAqICB2aG9zdCBkZXZpY2UgaWQgYXN5 bmMgY2hhbm5lbCB0byBiZSBhdHRhY2hlZCB0bw0KPiAgICogQHBhcmFtIHF1ZXVlX2lkDQo+ICAg KiAgdmhvc3QgcXVldWUgaWQgYXN5bmMgY2hhbm5lbCB0byBiZSBhdHRhY2hlZCB0bw0KPiAtICog QHBhcmFtIGNvbmZpZw0KPiAtICogIEFzeW5jIGNoYW5uZWwgY29uZmlndXJhdGlvbg0KPiAtICog QHBhcmFtIG9wcw0KPiAtICogIEFzeW5jIGNoYW5uZWwgb3BlcmF0aW9uIGNhbGxiYWNrcw0KPiAg ICogQHJldHVybg0KPiAgICogIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZXMNCj4gICAqLw0K PiAgX19ydGVfZXhwZXJpbWVudGFsDQo+IC1pbnQgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVn aXN0ZXJfdGhyZWFkX3Vuc2FmZShpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gLQlzdHJ1 Y3QgcnRlX3Zob3N0X2FzeW5jX2NvbmZpZyBjb25maWcsDQo+IC0Jc3RydWN0IHJ0ZV92aG9zdF9h c3luY19jaGFubmVsX29wcyAqb3BzKTsNCj4gK2ludCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9y ZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90DQo+IHF1ZXVlX2lkKTsNCj4g DQo+ICAvKioNCj4gICAqIFVucmVnaXN0ZXIgYW4gYXN5bmMgY2hhbm5lbCBmb3IgYSB2aG9zdCBx dWV1ZSB3aXRob3V0IHBlcmZvcm1pbmcgYW55DQo+IEBAIC0xNzksMTIgKzEwOSwxNyBAQCBpbnQg cnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfdW5yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludA0KPiB2 aWQsDQo+ICAgKiAgYXJyYXkgb2YgcGFja2V0cyB0byBiZSBlbnF1ZXVlZA0KPiAgICogQHBhcmFt IGNvdW50DQo+ICAgKiAgcGFja2V0cyBudW0gdG8gYmUgZW5xdWV1ZWQNCj4gKyAqIEBwYXJhbSBk bWFfaWQNCj4gKyAqICB0aGUgaWRlbnRpZmllciBvZiB0aGUgRE1BIGRldmljZQ0KPiArICogQHBh cmFtIHZjaGFuDQo+ICsgKiAgdGhlIGlkZW50aWZpZXIgb2YgdmlydHVhbCBETUEgY2hhbm5lbA0K PiAgICogQHJldHVybg0KPiAgICogIG51bSBvZiBwYWNrZXRzIGVucXVldWVkDQo+ICAgKi8NCj4g IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiAgdWludDE2X3QgcnRlX3Zob3N0X3N1Ym1pdF9lbnF1ZXVl X2J1cnN0KGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX21idWYg Kipwa3RzLCB1aW50MTZfdCBjb3VudCk7DQo+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVp bnQxNl90IGNvdW50LCBpbnQxNl90IGRtYV9pZCwNCj4gKwkJdWludDE2X3QgdmNoYW4pOw0KDQpB bGwgZG1hX2lkIGluIHRoZSBBUEkgc2hvdWxkIGJlIHVpbnQxNl90LiBPdGhlcndpc2UgeW91IG5l ZWQgdG8gY2hlY2sgaWYgdmFsaWQuDQoNCj4gDQo+ICAvKioNCj4gICAqIFRoaXMgZnVuY3Rpb24g Y2hlY2tzIGFzeW5jIGNvbXBsZXRpb24gc3RhdHVzIGZvciBhIHNwZWNpZmljIHZob3N0DQo+IEBA IC0xOTksMTIgKzEzNCwxNyBAQCB1aW50MTZfdCBydGVfdmhvc3Rfc3VibWl0X2VucXVldWVfYnVy c3QoaW50IHZpZCwNCj4gdWludDE2X3QgcXVldWVfaWQsDQo+ICAgKiAgYmxhbmsgYXJyYXkgdG8g Z2V0IHJldHVybiBwYWNrZXQgcG9pbnRlcg0KPiAgICogQHBhcmFtIGNvdW50DQo+ICAgKiAgc2l6 ZSBvZiB0aGUgcGFja2V0IGFycmF5DQo+ICsgKiBAcGFyYW0gZG1hX2lkDQo+ICsgKiAgdGhlIGlk ZW50aWZpZXIgb2YgdGhlIERNQSBkZXZpY2UNCj4gKyAqIEBwYXJhbSB2Y2hhbg0KPiArICogIHRo ZSBpZGVudGlmaWVyIG9mIHZpcnR1YWwgRE1BIGNoYW5uZWwNCj4gICAqIEByZXR1cm4NCj4gICAq ICBudW0gb2YgcGFja2V0cyByZXR1cm5lZA0KPiAgICovDQo+ICBfX3J0ZV9leHBlcmltZW50YWwN Cj4gIHVpbnQxNl90IHJ0ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKGludCB2aWQsIHVp bnQxNl90IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBj b3VudCk7DQo+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50LCBpbnQx Nl90IGRtYV9pZCwNCj4gKwkJdWludDE2X3QgdmNoYW4pOw0KPiANCj4gIC8qKg0KPiAgICogVGhp cyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgaW4tZmxpZ2h0IHBhY2tldHMgZm9yIHRo ZSB2aG9zdA0KPiBAQCAtMjM1LDExICsxNzUsMzIgQEAgaW50IHJ0ZV92aG9zdF9hc3luY19nZXRf aW5mbGlnaHQoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQpOw0KPiAgICogIEJsYW5rIGFy cmF5IHRvIGdldCByZXR1cm4gcGFja2V0IHBvaW50ZXINCj4gICAqIEBwYXJhbSBjb3VudA0KPiAg ICogIFNpemUgb2YgdGhlIHBhY2tldCBhcnJheQ0KPiArICogQHBhcmFtIGRtYV9pZA0KPiArICog IHRoZSBpZGVudGlmaWVyIG9mIHRoZSBETUEgZGV2aWNlDQo+ICsgKiBAcGFyYW0gdmNoYW4NCj4g KyAqICB0aGUgaWRlbnRpZmllciBvZiB2aXJ0dWFsIERNQSBjaGFubmVsDQo+ICAgKiBAcmV0dXJu DQo+ICAgKiAgTnVtYmVyIG9mIHBhY2tldHMgcmV0dXJuZWQNCj4gICAqLw0KPiAgX19ydGVfZXhw ZXJpbWVudGFsDQo+ICB1aW50MTZfdCBydGVfdmhvc3RfY2xlYXJfcXVldWVfdGhyZWFkX3Vuc2Fm ZShpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gLQkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0 cywgdWludDE2X3QgY291bnQpOw0KPiArCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZf dCBjb3VudCwgaW50MTZfdCBkbWFfaWQsDQo+ICsJCXVpbnQxNl90IHZjaGFuKTsNCj4gKy8qKg0K PiArICogVGhlIERNQSB2Q2hhbm5lbHMgdXNlZCBpbiBhc3luY2hyb25vdXMgZGF0YSBwYXRoIG11 c3QgYmUgY29uZmlndXJlZA0KPiArICogZmlyc3QuIFNvIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8g YmUgY2FsbGVkIGJlZm9yZSBlbmFibGluZyBETUENCj4gKyAqIGFjY2VsZXJhdGlvbiBmb3IgdnJp bmcuIElmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGFzeW5jaHJvbm91cyBkYXRhIHBhdGgNCj4gKyAq IGNhbm5vdCBiZSBlbmFibGVkIGZvciBhbnkgdnJpbmcgZnVydGhlci4NCj4gKyAqDQo+ICsgKiBA cGFyYW0gZG1hcw0KPiArICogIERNQSBpbmZvcm1hdGlvbg0KPiArICogQHBhcmFtIGNvdW50DQo+ ICsgKiAgRWxlbWVudCBudW1iZXIgb2YgJ2RtYXMnDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgMCBv biBzdWNjZXNzLCBhbmQgLTEgb24gZmFpbHVyZQ0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50 YWwNCj4gK2ludCBydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZShzdHJ1Y3QgcnRlX3Zob3N0 X2FzeW5jX2RtYV9pbmZvICpkbWFzLA0KPiArCQl1aW50MTZfdCBjb3VudCk7DQoNCkkgdGhpbmsg YmFzZWQgb24gY3VycmVudCBkZXNpZ24sIHZob3N0IGNhbiB1c2UgZXZlcnkgdmNoYW4gaWYgdXNl ciBhcHAgbGV0IGl0Lg0KU28gdGhlIG1heF9kZXNjIGFuZCBtYXhfdmNoYW5zIGNhbiBqdXN0IGJl IGdvdCBmcm9tIGRtYWRldiBBUElzPyBUaGVuIHRoZXJlJ3MNCm5vIG5lZWQgdG8gaW50cm9kdWNl IHRoZSBuZXcgQUJJIHN0cnVjdCBydGVfdmhvc3RfYXN5bmNfZG1hX2luZm8uDQoNCkFuZCBhYm91 dCBtYXhfZGVzYywgSSBzZWUgdGhlIGRtYWRldiBsaWIsIHlvdSBjYW4gZ2V0IHZjaGFuJ3MgbWF4 X2Rlc2MgYnV0IHlvdQ0KbWF5IHVzZSBhIG5iX2Rlc2MgKDw9IG1heF9kZXNjKSB0byBjb25maWd1 cmUgdmNoYW5sLiBBbmQgSUlVQywgdmhvc3Qgd2FudHMgdG8NCmtub3cgdGhlIG5iX2Rlc2MgaW5z dGVhZCBvZiBtYXhfZGVzYz8NCg0KPiANCj4gICNlbmRpZiAvKiBfUlRFX1ZIT1NUX0FTWU5DX0hf ICovDQo+IGRpZmYgLS1naXQgYS9saWIvdmhvc3QvdmVyc2lvbi5tYXAgYi9saWIvdmhvc3QvdmVy c2lvbi5tYXANCj4gaW5kZXggYTdlZjdmMTk3Ni4uMTIwMmJhOWMxYSAxMDA2NDQNCj4gLS0tIGEv bGliL3Zob3N0L3ZlcnNpb24ubWFwDQo+ICsrKyBiL2xpYi92aG9zdC92ZXJzaW9uLm1hcA0KPiBA QCAtODQsNiArODQsOSBAQCBFWFBFUklNRU5UQUwgew0KPiANCj4gIAkjIGFkZGVkIGluIDIxLjEx DQo+ICAJcnRlX3Zob3N0X2dldF9tb25pdG9yX2FkZHI7DQo+ICsNCj4gKwkjIGFkZGVkIGluIDIy LjAzDQo+ICsJcnRlX3Zob3N0X2FzeW5jX2RtYV9jb25maWd1cmU7DQo+ICB9Ow0KPiANCj4gIElO VEVSTkFMIHsNCj4gZGlmZiAtLWdpdCBhL2xpYi92aG9zdC92aG9zdC5jIGIvbGliL3Zob3N0L3Zo b3N0LmMNCj4gaW5kZXggMTNhOWJiOWRkMS4uMzJmMzdmNDg1MSAxMDA2NDQNCj4gLS0tIGEvbGli L3Zob3N0L3Zob3N0LmMNCj4gKysrIGIvbGliL3Zob3N0L3Zob3N0LmMNCj4gQEAgLTM0NCw2ICsz NDQsNyBAQCB2aG9zdF9mcmVlX2FzeW5jX21lbShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkN Cj4gIAkJcmV0dXJuOw0KPiANCj4gIAlydGVfZnJlZSh2cS0+YXN5bmMtPnBrdHNfaW5mbyk7DQo+ ICsJcnRlX2ZyZWUodnEtPmFzeW5jLT5wa3RzX2NtcGxfZmxhZyk7DQo+IA0KPiAgCXJ0ZV9mcmVl KHZxLT5hc3luYy0+YnVmZmVyc19wYWNrZWQpOw0KPiAgCXZxLT5hc3luYy0+YnVmZmVyc19wYWNr ZWQgPSBOVUxMOw0KPiBAQCAtMTYyNiw4ICsxNjI3LDcgQEAgcnRlX3Zob3N0X2V4dGVybl9jYWxs YmFja19yZWdpc3RlcihpbnQgdmlkLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBfX3J0ZV9hbHdheXNf aW5saW5lIGludA0KPiAtYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdCBx dWV1ZV9pZCwNCj4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyAqb3BzKQ0K PiArYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCkNCj4g IHsNCj4gIAlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiAgCXN0 cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gZGV2LT52aXJ0cXVldWVbcXVldWVfaWRdOw0KPiBA QCAtMTY1Niw2ICsxNjU2LDE0IEBAIGFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWlu dDE2X3QgcXVldWVfaWQsDQo+ICAJCWdvdG8gb3V0X2ZyZWVfYXN5bmM7DQo+ICAJfQ0KPiANCj4g Kwlhc3luYy0+cGt0c19jbXBsX2ZsYWcgPSBydGVfem1hbGxvY19zb2NrZXQoTlVMTCwgdnEtPnNp emUgKiBzaXplb2YoYm9vbCksDQo+ICsJCQlSVEVfQ0FDSEVfTElORV9TSVpFLCBub2RlKTsNCj4g KwlpZiAoIWFzeW5jLT5wa3RzX2NtcGxfZmxhZykgew0KPiArCQlWSE9TVF9MT0dfQ09ORklHKEVS UiwgImZhaWxlZCB0byBhbGxvY2F0ZSBhc3luYyBwa3RzX2NtcGxfZmxhZw0KPiAodmlkICVkLCBx aWQ6ICVkKVxuIiwNCj4gKwkJCQl2aWQsIHF1ZXVlX2lkKTsNCg0KcWlkOiAldQ0KDQo+ICsJCWdv dG8gb3V0X2ZyZWVfYXN5bmM7DQo+ICsJfQ0KPiArDQo+ICAJaWYgKHZxX2lzX3BhY2tlZChkZXYp KSB7DQo+ICAJCWFzeW5jLT5idWZmZXJzX3BhY2tlZCA9IHJ0ZV9tYWxsb2Nfc29ja2V0KE5VTEws DQo+ICAJCQkJdnEtPnNpemUgKiBzaXplb2Yoc3RydWN0IHZyaW5nX3VzZWRfZWxlbV9wYWNrZWQp LA0KPiBAQCAtMTY3Niw5ICsxNjg0LDYgQEAgYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlk LCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gIAkJfQ0KPiAgCX0NCj4gDQo+IC0JYXN5bmMtPm9wcy5j aGVja19jb21wbGV0ZWRfY29waWVzID0gb3BzLT5jaGVja19jb21wbGV0ZWRfY29waWVzOw0KPiAt CWFzeW5jLT5vcHMudHJhbnNmZXJfZGF0YSA9IG9wcy0+dHJhbnNmZXJfZGF0YTsNCj4gLQ0KPiAg CXZxLT5hc3luYyA9IGFzeW5jOw0KPiANCj4gIAlyZXR1cm4gMDsNCj4gQEAgLTE2OTEsMTUgKzE2 OTYsMTMgQEAgYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9p ZCwNCj4gIH0NCj4gDQo+ICBpbnQNCj4gLXJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVy KGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5j X2NvbmZpZyBjb25maWcsDQo+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMg Km9wcykNCj4gK3J0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQx Nl90IHF1ZXVlX2lkKQ0KPiAgew0KPiAgCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiAg CXN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+ICAJaW50IHJldDsN Cj4gDQo+IC0JaWYgKGRldiA9PSBOVUxMIHx8IG9wcyA9PSBOVUxMKQ0KPiArCWlmIChkZXYgPT0g TlVMTCkNCj4gIAkJcmV0dXJuIC0xOw0KPiANCj4gIAlpZiAocXVldWVfaWQgPj0gVkhPU1RfTUFY X1ZSSU5HKQ0KPiBAQCAtMTcxMCwzMyArMTcxMywyMCBAQCBydGVfdmhvc3RfYXN5bmNfY2hhbm5l bF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwNCj4gIAlpZiAodW5saWtl bHkodnEgPT0gTlVMTCB8fCAhZGV2LT5hc3luY19jb3B5KSkNCj4gIAkJcmV0dXJuIC0xOw0KPiAN Cj4gLQlpZiAodW5saWtlbHkoIShjb25maWcuZmVhdHVyZXMgJiBSVEVfVkhPU1RfQVNZTkNfSU5P UkRFUikpKSB7DQo+IC0JCVZIT1NUX0xPR19DT05GSUcoRVJSLA0KPiAtCQkJImFzeW5jIGNvcHkg aXMgbm90IHN1cHBvcnRlZCBvbiBub24taW5vcmRlciBtb2RlICINCj4gLQkJCSIodmlkICVkLCBx aWQ6ICVkKVxuIiwgdmlkLCBxdWV1ZV9pZCk7DQo+IC0JCXJldHVybiAtMTsNCj4gLQl9DQo+IC0N Cj4gLQlpZiAodW5saWtlbHkob3BzLT5jaGVja19jb21wbGV0ZWRfY29waWVzID09IE5VTEwgfHwN Cj4gLQkJb3BzLT50cmFuc2Zlcl9kYXRhID09IE5VTEwpKQ0KPiAtCQlyZXR1cm4gLTE7DQo+IC0N Cj4gIAlydGVfc3BpbmxvY2tfbG9jaygmdnEtPmFjY2Vzc19sb2NrKTsNCj4gLQlyZXQgPSBhc3lu Y19jaGFubmVsX3JlZ2lzdGVyKHZpZCwgcXVldWVfaWQsIG9wcyk7DQo+ICsJcmV0ID0gYXN5bmNf Y2hhbm5lbF9yZWdpc3Rlcih2aWQsIHF1ZXVlX2lkKTsNCj4gIAlydGVfc3BpbmxvY2tfdW5sb2Nr KCZ2cS0+YWNjZXNzX2xvY2spOw0KPiANCj4gIAlyZXR1cm4gcmV0Ow0KPiAgfQ0KPiANCj4gIGlu dA0KPiAtcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXJfdGhyZWFkX3Vuc2FmZShpbnQg dmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25m aWcgY29uZmlnLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzICpvcHMp DQo+ICtydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludCB2 aWQsIHVpbnQxNl90IHF1ZXVlX2lkKQ0KPiAgew0KPiAgCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUg KnZxOw0KPiAgCXN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+IA0K PiAtCWlmIChkZXYgPT0gTlVMTCB8fCBvcHMgPT0gTlVMTCkNCj4gKwlpZiAoZGV2ID09IE5VTEwp DQo+ICAJCXJldHVybiAtMTsNCj4gDQo+ICAJaWYgKHF1ZXVlX2lkID49IFZIT1NUX01BWF9WUklO RykNCj4gQEAgLTE3NDcsMTggKzE3MzcsNyBAQCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdp c3Rlcl90aHJlYWRfdW5zYWZlKGludCB2aWQsDQo+IHVpbnQxNl90IHF1ZXVlX2lkLA0KPiAgCWlm ICh1bmxpa2VseSh2cSA9PSBOVUxMIHx8ICFkZXYtPmFzeW5jX2NvcHkpKQ0KPiAgCQlyZXR1cm4g LTE7DQo+IA0KPiAtCWlmICh1bmxpa2VseSghKGNvbmZpZy5mZWF0dXJlcyAmIFJURV9WSE9TVF9B U1lOQ19JTk9SREVSKSkpIHsNCj4gLQkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsDQo+IC0JCQkiYXN5 bmMgY29weSBpcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1pbm9yZGVyIG1vZGUgIg0KPiAtCQkJIih2 aWQgJWQsIHFpZDogJWQpXG4iLCB2aWQsIHF1ZXVlX2lkKTsNCj4gLQkJcmV0dXJuIC0xOw0KPiAt CX0NCj4gLQ0KPiAtCWlmICh1bmxpa2VseShvcHMtPmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMgPT0g TlVMTCB8fA0KPiAtCQlvcHMtPnRyYW5zZmVyX2RhdGEgPT0gTlVMTCkpDQo+IC0JCXJldHVybiAt MTsNCj4gLQ0KPiAtCXJldHVybiBhc3luY19jaGFubmVsX3JlZ2lzdGVyKHZpZCwgcXVldWVfaWQs IG9wcyk7DQo+ICsJcmV0dXJuIGFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIodmlkLCBxdWV1ZV9pZCk7 DQo+ICB9DQo+IA0KPiAgaW50DQo+IEBAIC0xODM1LDYgKzE4MTQsODMgQEAgcnRlX3Zob3N0X2Fz eW5jX2NoYW5uZWxfdW5yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludA0KPiB2aWQsIHVpbnQxNl90 IHF1ZXVlX2lkKQ0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiANCj4gK3N0YXRpYyBfX3J0ZV9hbHdh eXNfaW5saW5lIHZvaWQNCj4gK3Zob3N0X2ZyZWVfYXN5bmNfZG1hX21lbSh2b2lkKQ0KPiArew0K PiArCXVpbnQxNl90IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgUlRFX0RNQURFVl9ERUZB VUxUX01BWDsgaSsrKSB7DQo+ICsJCXN0cnVjdCBhc3luY19kbWFfaW5mbyAqZG1hID0gJmRtYV9j b3B5X3RyYWNrW2ldOw0KPiArCQlpbnQxNl90IGo7DQo+ICsNCj4gKwkJaWYgKGRtYS0+bWF4X3Zj aGFucyA9PSAwKSB7DQo+ICsJCQljb250aW51ZTsNCj4gKwkJfQ0KPiArDQo+ICsJCWZvciAoaiA9 IDA7IGogPCBkbWEtPm1heF92Y2hhbnM7IGorKykgew0KPiArCQkJcnRlX2ZyZWUoZG1hLT52Y2hh bnNbal0ubWV0YWRhdGEpOw0KPiArCQl9DQo+ICsJCXJ0ZV9mcmVlKGRtYS0+dmNoYW5zKTsNCj4g KwkJZG1hLT52Y2hhbnMgPSBOVUxMOw0KPiArCQlkbWEtPm1heF92Y2hhbnMgPSAwOw0KPiArCX0N Cj4gK30NCj4gKw0KPiAraW50DQo+ICtydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZShzdHJ1 Y3QgcnRlX3Zob3N0X2FzeW5jX2RtYV9pbmZvICpkbWFzLCB1aW50MTZfdA0KPiBjb3VudCkNCj4g K3sNCj4gKwl1aW50MTZfdCBpOw0KPiArDQo+ICsJaWYgKCFkbWFzKSB7DQo+ICsJCVZIT1NUX0xP R19DT05GSUcoRVJSLCAiSW52YWxpZCBETUEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuXG4iKTsN Cj4gKwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBjb3VudDsg aSsrKSB7DQo+ICsJCXN0cnVjdCBhc3luY19kbWFfdmNoYW5faW5mbyAqdmNoYW5zOw0KPiArCQlp bnQxNl90IGRldl9pZDsNCj4gKwkJdWludDE2X3QgbWF4X3ZjaGFuczsNCj4gKwkJdWludDE2X3Qg bWF4X2Rlc2M7DQo+ICsJCXVpbnQxNl90IGo7DQo+ICsNCj4gKwkJZGV2X2lkID0gZG1hc1tpXS5k ZXZfaWQ7DQo+ICsJCW1heF92Y2hhbnMgPSBkbWFzW2ldLm1heF92Y2hhbnM7DQo+ICsJCW1heF9k ZXNjID0gZG1hc1tpXS5tYXhfZGVzYzsNCj4gKw0KPiArCQlpZiAoIXJ0ZV9pc19wb3dlcl9vZl8y KG1heF9kZXNjKSkgew0KPiArCQkJbWF4X2Rlc2MgPSBydGVfYWxpZ24zMnBvdzIobWF4X2Rlc2Mp Ow0KPiArCQl9DQoNCkkgdGhpbmsgd2hlbiBhbGlnbmluZyB0byBwb3dlciBvZiAyLCBpdCBzaG91 bGQgZXhjZWVkIG5vdCBtYXhfZGVzYz8NCkFuZCBiYXNlZCBvbiBhYm92ZSBjb21tZW50LCBpZiB0 aGlzIG1heF9kZXNjIGlzIG5iX2Rlc2MgY29uZmlndXJlZCBmb3INCnZjaGFubCwgeW91IHNob3Vs ZCBqdXN0IG1ha2Ugc3VyZSB0aGUgbmJfZGVzYyBiZSBwb3dlci1vZi0yLg0KDQo+ICsNCj4gKwkJ dmNoYW5zID0gcnRlX3ptYWxsb2MoTlVMTCwgc2l6ZW9mKHN0cnVjdCBhc3luY19kbWFfdmNoYW5f aW5mbykgKg0KPiBtYXhfdmNoYW5zLA0KPiArCQkJCVJURV9DQUNIRV9MSU5FX1NJWkUpOw0KPiAr CQlpZiAodmNoYW5zID09IE5VTEwpIHsNCj4gKwkJCVZIT1NUX0xPR19DT05GSUcoRVJSLCAiRmFp bGVkIHRvIGFsbG9jYXRlIHZjaGFucyBmb3IgZG1hLQ0KPiAlZC4iDQo+ICsJCQkJCSIgQ2Fubm90 IGVuYWJsZSBhc3luYyBkYXRhLXBhdGguXG4iLCBkZXZfaWQpOw0KPiArCQkJdmhvc3RfZnJlZV9h c3luY19kbWFfbWVtKCk7DQo+ICsJCQlyZXR1cm4gLTE7DQo+ICsJCX0NCj4gKw0KPiArCQlmb3Ig KGogPSAwOyBqIDwgbWF4X3ZjaGFuczsgaisrKSB7DQo+ICsJCQl2Y2hhbnNbal0ubWV0YWRhdGEg PSBydGVfem1hbGxvYyhOVUxMLCBzaXplb2YoYm9vbCAqKSAqDQo+IG1heF9kZXNjLA0KPiArCQkJ CQlSVEVfQ0FDSEVfTElORV9TSVpFKTsNCj4gKwkJCWlmICghdmNoYW5zW2pdLm1ldGFkYXRhKSB7 DQo+ICsJCQkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWV0YWRh dGEgZm9yDQo+ICINCj4gKwkJCQkJCSJkbWEtJWQgdmNoYW4tJXVcbiIsIGRldl9pZCwgaik7DQo+ ICsJCQkJdmhvc3RfZnJlZV9hc3luY19kbWFfbWVtKCk7DQo+ICsJCQkJcmV0dXJuIC0xOw0KPiAr CQkJfQ0KPiArDQo+ICsJCQl2Y2hhbnNbal0ucmluZ19zaXplID0gbWF4X2Rlc2M7DQo+ICsJCQl2 Y2hhbnNbal0ucmluZ19tYXNrID0gbWF4X2Rlc2MgLSAxOw0KPiArCQl9DQo+ICsNCj4gKwkJZG1h X2NvcHlfdHJhY2tbZGV2X2lkXS52Y2hhbnMgPSB2Y2hhbnM7DQo+ICsJCWRtYV9jb3B5X3RyYWNr W2Rldl9pZF0ubWF4X3ZjaGFucyA9IG1heF92Y2hhbnM7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gIGludA0KPiAgcnRlX3Zob3N0X2FzeW5jX2dldF9pbmZsaWdodChp bnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCkNCj4gIHsNCj4gZGlmZiAtLWdpdCBhL2xpYi92aG9z dC92aG9zdC5oIGIvbGliL3Zob3N0L3Zob3N0LmgNCj4gaW5kZXggNzA4NWUwODg1Yy4uZDliZGEz NGUxMSAxMDA2NDQNCj4gLS0tIGEvbGliL3Zob3N0L3Zob3N0LmgNCj4gKysrIGIvbGliL3Zob3N0 L3Zob3N0LmgNCj4gQEAgLTE5LDYgKzE5LDcgQEANCj4gICNpbmNsdWRlIDxydGVfZXRoZXIuaD4N Cj4gICNpbmNsdWRlIDxydGVfcndsb2NrLmg+DQo+ICAjaW5jbHVkZSA8cnRlX21hbGxvYy5oPg0K PiArI2luY2x1ZGUgPHJ0ZV9kbWFkZXYuaD4NCj4gDQo+ICAjaW5jbHVkZSAicnRlX3Zob3N0Lmgi DQo+ICAjaW5jbHVkZSAicnRlX3ZkcGEuaCINCj4gQEAgLTUwLDYgKzUxLDcgQEANCj4gDQo+ICAj ZGVmaW5lIFZIT1NUX01BWF9BU1lOQ19JVCAoTUFYX1BLVF9CVVJTVCkNCj4gICNkZWZpbmUgVkhP U1RfTUFYX0FTWU5DX1ZFQyAyMDQ4DQo+ICsjZGVmaW5lIFZIT1NUX0FTWU5DX0RNQV9CQVRDSElO R19TSVpFIDMyDQo+IA0KPiAgI2RlZmluZSBQQUNLRURfREVTQ19FTlFVRVVFX1VTRURfRkxBRyh3 KQlcDQo+ICAJKCh3KSA/IChWUklOR19ERVNDX0ZfQVZBSUwgfCBWUklOR19ERVNDX0ZfVVNFRCB8 IFZSSU5HX0RFU0NfRl9XUklURSkgOiBcDQo+IEBAIC0xMTksNiArMTIxLDQxIEBAIHN0cnVjdCB2 cmluZ191c2VkX2VsZW1fcGFja2VkIHsNCj4gIAl1aW50MzJfdCBjb3VudDsNCj4gIH07DQo+IA0K PiArc3RydWN0IGFzeW5jX2RtYV92Y2hhbl9pbmZvIHsNCj4gKwkvKiBjaXJjdWxhciBhcnJheSB0 byB0cmFjayBjb3B5IG1ldGFkYXRhICovDQo+ICsJYm9vbCAqKm1ldGFkYXRhOw0KDQpJZiB0aGUg bWV0YWRhdGEgd2lsbCBvbmx5IGJlIGZsYWdzLCBtYXliZSBqdXN0IHVzZSBzb21lDQpuYW1lIGNh bGxlZCBYWFhfZmxhZw0KDQo+ICsNCj4gKwkvKiBtYXggZWxlbWVudHMgaW4gJ21ldGFkYXRhJyAq Lw0KPiArCXVpbnQxNl90IHJpbmdfc2l6ZTsNCj4gKwkvKiByaW5nIGluZGV4IG1hc2sgZm9yICdt ZXRhZGF0YScgKi8NCj4gKwl1aW50MTZfdCByaW5nX21hc2s7DQo+ICsNCj4gKwkvKiBiYXRjaGlu ZyBjb3BpZXMgYmVmb3JlIGEgRE1BIGRvb3JiZWxsICovDQo+ICsJdWludDE2X3QgbnJfYmF0Y2hp bmc7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBETUEgdmlydHVhbCBjaGFubmVsIGxvY2suIEFsdGhv dWdoIGl0IGlzIGFibGUgdG8gYmluZCBETUENCj4gKwkgKiB2aXJ0dWFsIGNoYW5uZWxzIHRvIGRh dGEgcGxhbmUgdGhyZWFkcywgdmhvc3QgY29udHJvbCBwbGFuZQ0KPiArCSAqIHRocmVhZCBjb3Vs ZCBjYWxsIGRhdGEgcGxhbmUgZnVuY3Rpb25zIHRvbywgdGh1cyBjYXVzaW5nDQo+ICsJICogRE1B IGRldmljZSBjb250ZW50aW9uLg0KPiArCSAqDQo+ICsJICogRm9yIGV4YW1wbGUsIGluIFZNIGV4 aXQgY2FzZSwgdmhvc3QgY29udHJvbCBwbGFuZSB0aHJlYWQgbmVlZHMNCj4gKwkgKiB0byBjbGVh ciBpbi1mbGlnaHQgcGFja2V0cyBiZWZvcmUgZGlzYWJsZSB2cmluZywgYnV0IHRoZXJlIGNvdWxk DQo+ICsJICogYmUgYW5vdHRoZXIgZGF0YSBwbGFuZSB0aHJlYWQgaXMgZW5xdWV1aW5nIHBhY2tl dHMgdG8gdGhlIHNhbWUNCj4gKwkgKiB2cmluZyB3aXRoIHRoZSBzYW1lIERNQSB2aXJ0dWFsIGNo YW5uZWwuIEJ1dCBkbWFkZXYgUE1EIGZ1bmN0aW9ucw0KPiArCSAqIGFyZSBsb2NrLWZyZWUsIHNv IHRoZSBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lIHRocmVhZHMNCj4gKwkgKiBjb3VsZCBv cGVyYXRlIHRoZSBzYW1lIERNQSB2aXJ0dWFsIGNoYW5uZWwgYXQgdGhlIHNhbWUgdGltZS4NCj4g KwkgKi8NCj4gKwlydGVfc3BpbmxvY2tfdCBkbWFfbG9jazsNCj4gK307DQo+ICsNCj4gK3N0cnVj dCBhc3luY19kbWFfaW5mbyB7DQo+ICsJdWludDE2X3QgbWF4X3ZjaGFuczsNCj4gKwlzdHJ1Y3Qg YXN5bmNfZG1hX3ZjaGFuX2luZm8gKnZjaGFuczsNCj4gK307DQo+ICsNCj4gK2V4dGVybiBzdHJ1 Y3QgYXN5bmNfZG1hX2luZm8gZG1hX2NvcHlfdHJhY2tbUlRFX0RNQURFVl9ERUZBVUxUX01BWF07 DQo+ICsNCj4gIC8qKg0KPiAgICogaW5mbGlnaHQgYXN5bmMgcGFja2V0IGluZm9ybWF0aW9uDQo+ ICAgKi8NCj4gQEAgLTEyOSw5ICsxNjYsNiBAQCBzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyB7 DQo+ICB9Ow0KPiANCj4gIHN0cnVjdCB2aG9zdF9hc3luYyB7DQo+IC0JLyogb3BlcmF0aW9uIGNh bGxiYWNrcyBmb3IgRE1BICovDQo+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29w cyBvcHM7DQo+IC0NCj4gIAlzdHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyIGlvdl9pdGVyW1ZIT1NU X01BWF9BU1lOQ19JVF07DQo+ICAJc3RydWN0IHJ0ZV92aG9zdF9pb3ZlYyBpb3ZlY1tWSE9TVF9N QVhfQVNZTkNfVkVDXTsNCj4gIAl1aW50MTZfdCBpdGVyX2lkeDsNCj4gQEAgLTEzOSw2ICsxNzMs MTkgQEAgc3RydWN0IHZob3N0X2FzeW5jIHsNCj4gDQo+ICAJLyogZGF0YSB0cmFuc2ZlciBzdGF0 dXMgKi8NCj4gIAlzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyAqcGt0c19pbmZvOw0KPiArCS8q Kg0KPiArCSAqIHBhY2tldCByZW9yZGVyIGFycmF5LiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgRE1B DQo+ICsJICogZGV2aWNlIGNvbXBsZXRlcyBhbGwgY29waWVzIGZvciB0aGUgcGFja2V0Lg0KPiAr CSAqDQo+ICsJICogTm90ZSB0aGF0IHRoaXMgYXJyYXkgY291bGQgYmUgd3JpdHRlbiBieSBtdWx0 aXBsZQ0KPiArCSAqIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4gRm9yIGV4YW1wbGUsIHR3byB0 aHJlYWRzDQo+ICsJICogZW5xdWV1ZSBwYWNrZXRzIHRvIHRoZSBzYW1lIHZpcnRxdWV1ZSB3aXRo IHRoZWlyDQo+ICsJICogb3duIERNQSBkZXZpY2VzLiBIb3dldmVyLCBzaW5jZSBvZmZsb2FkaW5n IGlzDQo+ICsJICogcGVyLXBhY2tldCBiYXNpcywgZWFjaCBwYWNrZXQgZmxhZyB3aWxsIG9ubHkg YmUNCj4gKwkgKiB3cml0dGVuIGJ5IG9uZSB0aHJlYWQuIEFuZCBzaW5nbGUgYnl0ZSB3cml0ZSBp cw0KPiArCSAqIGF0b21pYywgc28gbm8gbG9jayBpcyBuZWVkZWQuDQo+ICsJICovDQo+ICsJYm9v bCAqcGt0c19jbXBsX2ZsYWc7DQo+ICAJdWludDE2X3QgcGt0c19pZHg7DQo+ICAJdWludDE2X3Qg cGt0c19pbmZsaWdodF9uOw0KPiAgCXVuaW9uIHsNCj4gZGlmZiAtLWdpdCBhL2xpYi92aG9zdC92 aXJ0aW9fbmV0LmMgYi9saWIvdmhvc3QvdmlydGlvX25ldC5jDQo+IGluZGV4IGIzZDk1NGFhYjQu LjlmODFmYzk3MzMgMTAwNjQ0DQo+IC0tLSBhL2xpYi92aG9zdC92aXJ0aW9fbmV0LmMNCj4gKysr IGIvbGliL3Zob3N0L3ZpcnRpb19uZXQuYw0KPiBAQCAtMTEsNiArMTEsNyBAQA0KPiAgI2luY2x1 ZGUgPHJ0ZV9uZXQuaD4NCj4gICNpbmNsdWRlIDxydGVfZXRoZXIuaD4NCj4gICNpbmNsdWRlIDxy dGVfaXAuaD4NCj4gKyNpbmNsdWRlIDxydGVfZG1hZGV2Lmg+DQo+ICAjaW5jbHVkZSA8cnRlX3Zo b3N0Lmg+DQo+ICAjaW5jbHVkZSA8cnRlX3RjcC5oPg0KPiAgI2luY2x1ZGUgPHJ0ZV91ZHAuaD4N Cj4gQEAgLTI1LDYgKzI2LDkgQEANCj4gDQo+ICAjZGVmaW5lIE1BWF9CQVRDSF9MRU4gMjU2DQo+ IA0KPiArLyogRE1BIGRldmljZSBjb3B5IG9wZXJhdGlvbiB0cmFja2luZyBhcnJheS4gKi8NCj4g K3N0cnVjdCBhc3luY19kbWFfaW5mbyBkbWFfY29weV90cmFja1tSVEVfRE1BREVWX0RFRkFVTFRf TUFYXTsNCj4gKw0KPiAgc3RhdGljICBfX3J0ZV9hbHdheXNfaW5saW5lIGJvb2wNCj4gIHJ4dnFf aXNfbWVyZ2VhYmxlKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYpDQo+ICB7DQo+IEBAIC00Myw2ICs0 NywxMDggQEAgaXNfdmFsaWRfdmlydF9xdWV1ZV9pZHgodWludDMyX3QgaWR4LCBpbnQgaXNfdHgs IHVpbnQzMl90DQo+IG5yX3ZyaW5nKQ0KPiAgCXJldHVybiAoaXNfdHggXiAoaWR4ICYgMSkpID09 IDAgJiYgaWR4IDwgbnJfdnJpbmc7DQo+ICB9DQo+IA0KPiArc3RhdGljIF9fcnRlX2Fsd2F5c19p bmxpbmUgdWludDE2X3QNCj4gK3Zob3N0X2FzeW5jX2RtYV90cmFuc2ZlcihzdHJ1Y3Qgdmhvc3Rf dmlydHF1ZXVlICp2cSwgaW50MTZfdCBkbWFfaWQsDQo+ICsJCXVpbnQxNl90IHZjaGFuLCB1aW50 MTZfdCBoZWFkX2lkeCwNCj4gKwkJc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciAqcGt0cywgdWlu dDE2X3QgbnJfcGt0cykNCj4gK3sNCj4gKwlzdHJ1Y3QgYXN5bmNfZG1hX3ZjaGFuX2luZm8gKmRt YV9pbmZvID0NCj4gJmRtYV9jb3B5X3RyYWNrW2RtYV9pZF0udmNoYW5zW3ZjaGFuXTsNCj4gKwl1 aW50MTZfdCByaW5nX21hc2sgPSBkbWFfaW5mby0+cmluZ19tYXNrOw0KPiArCXVpbnQxNl90IHBr dF9pZHg7DQo+ICsNCj4gKwlydGVfc3BpbmxvY2tfbG9jaygmZG1hX2luZm8tPmRtYV9sb2NrKTsN Cj4gKw0KPiArCWZvciAocGt0X2lkeCA9IDA7IHBrdF9pZHggPCBucl9wa3RzOyBwa3RfaWR4Kysp IHsNCj4gKwkJc3RydWN0IHJ0ZV92aG9zdF9pb3ZlYyAqaW92ID0gcGt0c1twa3RfaWR4XS5pb3Y7 DQo+ICsJCWludCBjb3B5X2lkeCA9IDA7DQo+ICsJCXVpbnQxNl90IG5yX3NlZ3MgPSBwa3RzW3Br dF9pZHhdLm5yX3NlZ3M7DQo+ICsJCXVpbnQxNl90IGk7DQo+ICsNCj4gKwkJaWYgKHJ0ZV9kbWFf YnVyc3RfY2FwYWNpdHkoZG1hX2lkLCB2Y2hhbikgPCBucl9zZWdzKSB7DQo+ICsJCQlnb3RvIG91 dDsNCj4gKwkJfQ0KPiArDQo+ICsJCWZvciAoaSA9IDA7IGkgPCBucl9zZWdzOyBpKyspIHsNCj4g KwkJCS8qKg0KPiArCQkJICogV2UgaGF2ZSBjaGVja2VkIHRoZSBhdmFpbGFibGUgc3BhY2UgYmVm b3JlIHN1Ym1pdCBjb3BpZXMNCj4gdG8gRE1BDQo+ICsJCQkgKiB2Q2hhbm5lbCwgc28gd2UgZG9u J3QgaGFuZGxlIGVycm9yIGhlcmUuDQo+ICsJCQkgKi8NCj4gKwkJCWNvcHlfaWR4ID0gcnRlX2Rt YV9jb3B5KGRtYV9pZCwgdmNoYW4sDQo+IChydGVfaW92YV90KWlvdltpXS5zcmNfYWRkciwNCj4g KwkJCQkJKHJ0ZV9pb3ZhX3QpaW92W2ldLmRzdF9hZGRyLCBpb3ZbaV0ubGVuLA0KPiArCQkJCQlS VEVfRE1BX09QX0ZMQUdfTExDKTsNCg0KVGhpcyBhc3N1bWVzIHJ0ZV9kbWFfY29weSB3aWxsIGFs d2F5cyBzdWNjZWVkIGlmIHRoZXJlJ3MgYXZhaWxhYmxlIHNwYWNlLg0KDQpCdXQgdGhlIEFQSSBk b3h5Z2VuIHNheXM6DQoNCiogQHJldHVybg0KICogICAtIDAuLlVJTlQxNl9NQVg6IGluZGV4IG9m IGVucXVldWVkIGpvYi4NCiAqICAgLSAtRU5PU1BDOiBpZiBubyBzcGFjZSBsZWZ0IHRvIGVucXVl dWUuDQogKiAgIC0gb3RoZXIgdmFsdWVzIDwgMCBvbiBmYWlsdXJlLg0KDQpTbyBpdCBzaG91bGQg Y29uc2lkZXIgb3RoZXIgdmVuZG9yLXNwZWNpZmljIGVycm9ycy4gDQoNClRoYW5rcywNCkNoZW5i bw0KDQo+ICsNCj4gKwkJCS8qKg0KPiArCQkJICogT25seSBzdG9yZSBwYWNrZXQgY29tcGxldGlv biBmbGFnIGFkZHJlc3MgaW4gdGhlIGxhc3QNCj4gY29weSdzDQo+ICsJCQkgKiBzbG90LCBhbmQg b3RoZXIgc2xvdHMgYXJlIHNldCB0byBOVUxMLg0KPiArCQkJICovDQo+ICsJCQlpZiAodW5saWtl bHkoaSA9PSAobnJfc2VncyAtIDEpKSkgew0KPiArCQkJCWRtYV9pbmZvLT5tZXRhZGF0YVtjb3B5 X2lkeCAmIHJpbmdfbWFza10gPQ0KPiArCQkJCQkmdnEtPmFzeW5jLT5wa3RzX2NtcGxfZmxhZ1to ZWFkX2lkeCAlIHZxLT5zaXplXTsNCj4gKwkJCX0NCj4gKwkJfQ0KPiArDQo+ICsJCWRtYV9pbmZv LT5ucl9iYXRjaGluZyArPSBucl9zZWdzOw0KPiArCQlpZiAodW5saWtlbHkoZG1hX2luZm8tPm5y X2JhdGNoaW5nID49DQo+IFZIT1NUX0FTWU5DX0RNQV9CQVRDSElOR19TSVpFKSkgew0KPiArCQkJ cnRlX2RtYV9zdWJtaXQoZG1hX2lkLCB2Y2hhbik7DQo+ICsJCQlkbWFfaW5mby0+bnJfYmF0Y2hp bmcgPSAwOw0KPiArCQl9DQo+ICsNCj4gKwkJaGVhZF9pZHgrKzsNCj4gKwl9DQo+ICsNCj4gK291 dDoNCj4gKwlpZiAoZG1hX2luZm8tPm5yX2JhdGNoaW5nID4gMCkgew0KPiArCQlydGVfZG1hX3N1 Ym1pdChkbWFfaWQsIHZjaGFuKTsNCj4gKwkJZG1hX2luZm8tPm5yX2JhdGNoaW5nID0gMDsNCj4g Kwl9DQo+ICsJcnRlX3NwaW5sb2NrX3VubG9jaygmZG1hX2luZm8tPmRtYV9sb2NrKTsNCj4gKw0K PiArCXJldHVybiBwa3RfaWR4Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lu bGluZSB1aW50MTZfdA0KPiArdmhvc3RfYXN5bmNfZG1hX2NoZWNrX2NvbXBsZXRlZChpbnQxNl90 IGRtYV9pZCwgdWludDE2X3QgdmNoYW4sIHVpbnQxNl90DQo+IG1heF9wa3RzKQ0KPiArew0KPiAr CXN0cnVjdCBhc3luY19kbWFfdmNoYW5faW5mbyAqZG1hX2luZm8gPQ0KPiAmZG1hX2NvcHlfdHJh Y2tbZG1hX2lkXS52Y2hhbnNbdmNoYW5dOw0KPiArCXVpbnQxNl90IHJpbmdfbWFzayA9IGRtYV9p bmZvLT5yaW5nX21hc2s7DQo+ICsJdWludDE2X3QgbGFzdF9pZHggPSAwOw0KPiArCXVpbnQxNl90 IG5yX2NvcGllczsNCj4gKwl1aW50MTZfdCBjb3B5X2lkeDsNCj4gKwl1aW50MTZfdCBpOw0KPiAr DQo+ICsJcnRlX3NwaW5sb2NrX2xvY2soJmRtYV9pbmZvLT5kbWFfbG9jayk7DQo+ICsNCj4gKwkv KioNCj4gKwkgKiBTaW5jZSBhbGwgbWVtb3J5IGlzIHBpbm5lZCBhbmQgYWRkcmVzc2VzIHNob3Vs ZCBiZSB2YWxpZCwNCj4gKwkgKiB3ZSBkb24ndCBjaGVjayBlcnJvcnMuDQo+ICsJICovDQo+ICsJ bnJfY29waWVzID0gcnRlX2RtYV9jb21wbGV0ZWQoZG1hX2lkLCB2Y2hhbiwgbWF4X3BrdHMsICZs YXN0X2lkeCwgTlVMTCk7DQo+ICsJaWYgKG5yX2NvcGllcyA9PSAwKSB7DQo+ICsJCWdvdG8gb3V0 Ow0KPiArCX0NCj4gKw0KPiArCWNvcHlfaWR4ID0gbGFzdF9pZHggLSBucl9jb3BpZXMgKyAxOw0K PiArCWZvciAoaSA9IDA7IGkgPCBucl9jb3BpZXM7IGkrKykgew0KPiArCQlib29sICpmbGFnOw0K PiArDQo+ICsJCWZsYWcgPSBkbWFfaW5mby0+bWV0YWRhdGFbY29weV9pZHggJiByaW5nX21hc2td Ow0KPiArCQlpZiAoZmxhZykgew0KPiArCQkJLyoqDQo+ICsJCQkgKiBNYXJrIHRoZSBwYWNrZXQg ZmxhZyBhcyByZWNlaXZlZC4gVGhlIGZsYWcNCj4gKwkJCSAqIGNvdWxkIGJlbG9uZyB0byBhbm90 aGVyIHZpcnRxdWV1ZSBidXQgd3JpdGUNCj4gKwkJCSAqIGlzIGF0b21pYy4NCj4gKwkJCSAqLw0K PiArCQkJKmZsYWcgPSB0cnVlOw0KPiArCQkJZG1hX2luZm8tPm1ldGFkYXRhW2NvcHlfaWR4ICYg cmluZ19tYXNrXSA9IE5VTEw7DQo+ICsJCX0NCj4gKwkJY29weV9pZHgrKzsNCj4gKwl9DQo+ICsN Cj4gK291dDoNCj4gKwlydGVfc3BpbmxvY2tfdW5sb2NrKCZkbWFfaW5mby0+ZG1hX2xvY2spOw0K PiArCXJldHVybiBucl9jb3BpZXM7DQo+ICt9DQo+ICsNCj4gIHN0YXRpYyBpbmxpbmUgdm9pZA0K PiAgZG9fZGF0YV9jb3B5X2VucXVldWUoc3RydWN0IHZpcnRpb19uZXQgKmRldiwgc3RydWN0IHZo b3N0X3ZpcnRxdWV1ZSAqdnEpDQo+ICB7DQo+IEBAIC0xNDQ5LDkgKzE1NTUsOSBAQCBzdG9yZV9k bWFfZGVzY19pbmZvX3BhY2tlZChzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtX3BhY2tlZA0KPiAqc19y aW5nLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBfX3J0ZV9ub2lubGluZSB1aW50MzJfdA0KPiAtdmly dGlvX2Rldl9yeF9hc3luY19zdWJtaXRfc3BsaXQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4g LQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0Jc3Ry dWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDMyX3QgY291bnQpDQo+ICt2aXJ0aW9fZGV2X3J4X2Fz eW5jX3N1Ym1pdF9zcGxpdChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LCBzdHJ1Y3QNCj4gdmhvc3Rf dmlydHF1ZXVlICp2cSwNCj4gKwkJdWludDE2X3QgcXVldWVfaWQsIHN0cnVjdCBydGVfbWJ1ZiAq KnBrdHMsIHVpbnQzMl90IGNvdW50LA0KPiArCQlpbnQxNl90IGRtYV9pZCwgdWludDE2X3QgdmNo YW4pDQo+ICB7DQo+ICAJc3RydWN0IGJ1Zl92ZWN0b3IgYnVmX3ZlY1tCVUZfVkVDVE9SX01BWF07 DQo+ICAJdWludDMyX3QgcGt0X2lkeCA9IDA7DQo+IEBAIC0xNTAzLDE3ICsxNjA5LDE2IEBAIHZp cnRpb19kZXZfcnhfYXN5bmNfc3VibWl0X3NwbGl0KHN0cnVjdCB2aXJ0aW9fbmV0DQo+ICpkZXYs DQo+ICAJaWYgKHVubGlrZWx5KHBrdF9pZHggPT0gMCkpDQo+ICAJCXJldHVybiAwOw0KPiANCj4g LQluX3hmZXIgPSBhc3luYy0+b3BzLnRyYW5zZmVyX2RhdGEoZGV2LT52aWQsIHF1ZXVlX2lkLCBh c3luYy0+aW92X2l0ZXIsIDAsDQo+IHBrdF9pZHgpOw0KPiAtCWlmICh1bmxpa2VseShuX3hmZXIg PCAwKSkgew0KPiAtCQlWSE9TVF9MT0dfREFUQShFUlIsICIoJWQpICVzOiBmYWlsZWQgdG8gdHJh bnNmZXIgZGF0YSBmb3IgcXVldWUNCj4gaWQgJWQuXG4iLA0KPiAtCQkJCWRldi0+dmlkLCBfX2Z1 bmNfXywgcXVldWVfaWQpOw0KPiAtCQluX3hmZXIgPSAwOw0KPiAtCX0NCj4gKwluX3hmZXIgPSB2 aG9zdF9hc3luY19kbWFfdHJhbnNmZXIodnEsIGRtYV9pZCwgdmNoYW4sIGFzeW5jLT5wa3RzX2lk eCwNCj4gYXN5bmMtPmlvdl9pdGVyLA0KPiArCQkJcGt0X2lkeCk7DQo+IA0KPiAgCXBrdF9lcnIg PSBwa3RfaWR4IC0gbl94ZmVyOw0KPiAgCWlmICh1bmxpa2VseShwa3RfZXJyKSkgew0KPiAgCQl1 aW50MTZfdCBudW1fZGVzY3MgPSAwOw0KPiANCj4gKwkJVkhPU1RfTE9HX0RBVEEoREVCVUcsICIo JWQpICVzOiBmYWlsZWQgdG8gdHJhbnNmZXIgJXUgcGFja2V0cyBmb3INCj4gcXVldWUgJXUuXG4i LA0KPiArCQkJCWRldi0+dmlkLCBfX2Z1bmNfXywgcGt0X2VyciwgcXVldWVfaWQpOw0KPiArDQo+ ICAJCS8qIHVwZGF0ZSBudW1iZXIgb2YgY29tcGxldGVkIHBhY2tldHMgKi8NCj4gIAkJcGt0X2lk eCA9IG5feGZlcjsNCj4gDQo+IEBAIC0xNjU2LDEzICsxNzYxLDEzIEBAIGRtYV9lcnJvcl9oYW5k bGVyX3BhY2tlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4gdWludDE2X3Qgc2xvdF9p ZHgsDQo+ICB9DQo+IA0KPiAgc3RhdGljIF9fcnRlX25vaW5saW5lIHVpbnQzMl90DQo+IC12aXJ0 aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdF9wYWNrZWQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4g LQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0Jc3Ry dWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDMyX3QgY291bnQpDQo+ICt2aXJ0aW9fZGV2X3J4X2Fz eW5jX3N1Ym1pdF9wYWNrZWQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwgc3RydWN0DQo+IHZob3N0 X3ZpcnRxdWV1ZSAqdnEsDQo+ICsJCXVpbnQxNl90IHF1ZXVlX2lkLCBzdHJ1Y3QgcnRlX21idWYg Kipwa3RzLCB1aW50MzJfdCBjb3VudCwNCj4gKwkJaW50MTZfdCBkbWFfaWQsIHVpbnQxNl90IHZj aGFuKQ0KPiAgew0KPiAgCXVpbnQzMl90IHBrdF9pZHggPSAwOw0KPiAgCXVpbnQzMl90IHJlbWFp bmVkID0gY291bnQ7DQo+IC0JaW50MzJfdCBuX3hmZXI7DQo+ICsJdWludDE2X3Qgbl94ZmVyOw0K PiAgCXVpbnQxNl90IG51bV9idWZmZXJzOw0KPiAgCXVpbnQxNl90IG51bV9kZXNjczsNCj4gDQo+ IEBAIC0xNjcwLDYgKzE3NzUsNyBAQCB2aXJ0aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdF9wYWNrZWQo c3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4gIAlzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyAq cGt0c19pbmZvID0gYXN5bmMtPnBrdHNfaW5mbzsNCj4gIAl1aW50MzJfdCBwa3RfZXJyID0gMDsN Cj4gIAl1aW50MTZfdCBzbG90X2lkeCA9IDA7DQo+ICsJdWludDE2X3QgaGVhZF9pZHggPSBhc3lu Yy0+cGt0c19pZHggJSB2cS0+c2l6ZTsNCj4gDQo+ICAJZG8gew0KPiAgCQlydGVfcHJlZmV0Y2gw KCZ2cS0+ZGVzY19wYWNrZWRbdnEtPmxhc3RfYXZhaWxfaWR4XSk7DQo+IEBAIC0xNjk0LDE5ICsx ODAwLDE3IEBAIHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0X3BhY2tlZChzdHJ1Y3QgdmlydGlv X25ldA0KPiAqZGV2LA0KPiAgCWlmICh1bmxpa2VseShwa3RfaWR4ID09IDApKQ0KPiAgCQlyZXR1 cm4gMDsNCj4gDQo+IC0Jbl94ZmVyID0gYXN5bmMtPm9wcy50cmFuc2Zlcl9kYXRhKGRldi0+dmlk LCBxdWV1ZV9pZCwgYXN5bmMtPmlvdl9pdGVyLCAwLA0KPiBwa3RfaWR4KTsNCj4gLQlpZiAodW5s aWtlbHkobl94ZmVyIDwgMCkpIHsNCj4gLQkJVkhPU1RfTE9HX0RBVEEoRVJSLCAiKCVkKSAlczog ZmFpbGVkIHRvIHRyYW5zZmVyIGRhdGEgZm9yIHF1ZXVlDQo+IGlkICVkLlxuIiwNCj4gLQkJCQlk ZXYtPnZpZCwgX19mdW5jX18sIHF1ZXVlX2lkKTsNCj4gLQkJbl94ZmVyID0gMDsNCj4gLQl9DQo+ IC0NCj4gLQlwa3RfZXJyID0gcGt0X2lkeCAtIG5feGZlcjsNCj4gKwluX3hmZXIgPSB2aG9zdF9h c3luY19kbWFfdHJhbnNmZXIodnEsIGRtYV9pZCwgdmNoYW4sIGhlYWRfaWR4LA0KPiArCQkJYXN5 bmMtPmlvdl9pdGVyLCBwa3RfaWR4KTsNCj4gDQo+ICAJYXN5bmNfaXRlcl9yZXNldChhc3luYyk7 DQo+IA0KPiAtCWlmICh1bmxpa2VseShwa3RfZXJyKSkNCj4gKwlwa3RfZXJyID0gcGt0X2lkeCAt IG5feGZlcjsNCj4gKwlpZiAodW5saWtlbHkocGt0X2VycikpIHsNCj4gKwkJVkhPU1RfTE9HX0RB VEEoREVCVUcsICIoJWQpICVzOiBmYWlsZWQgdG8gdHJhbnNmZXIgJXUgcGFja2V0cyBmb3INCj4g cXVldWUgJXUuXG4iLA0KPiArCQkJCWRldi0+dmlkLCBfX2Z1bmNfXywgcGt0X2VyciwgcXVldWVf aWQpOw0KPiAgCQlkbWFfZXJyb3JfaGFuZGxlcl9wYWNrZWQodnEsIHNsb3RfaWR4LCBwa3RfZXJy LCAmcGt0X2lkeCk7DQo+ICsJfQ0KPiANCj4gIAlpZiAobGlrZWx5KHZxLT5zaGFkb3dfdXNlZF9p ZHgpKSB7DQo+ICAJCS8qIGtlZXAgdXNlZCBkZXNjcmlwdG9ycy4gKi8NCj4gQEAgLTE4MjYsMjgg KzE5MzAsMzcgQEAgd3JpdGVfYmFja19jb21wbGV0ZWRfZGVzY3NfcGFja2VkKHN0cnVjdA0KPiB2 aG9zdF92aXJ0cXVldWUgKnZxLA0KPiANCj4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVp bnQxNl90DQo+ICB2aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKHN0cnVjdCB2aXJ0aW9fbmV0 ICpkZXYsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1 aW50MTZfdCBjb3VudCkNCj4gKwkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3QgY291 bnQsIGludDE2X3QgZG1hX2lkLA0KPiArCQl1aW50MTZfdCB2Y2hhbikNCj4gIHsNCj4gIAlzdHJ1 Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGRldi0+dmlydHF1ZXVlW3F1ZXVlX2lkXTsNCj4gIAlz dHJ1Y3Qgdmhvc3RfYXN5bmMgKmFzeW5jID0gdnEtPmFzeW5jOw0KPiAgCXN0cnVjdCBhc3luY19p bmZsaWdodF9pbmZvICpwa3RzX2luZm8gPSBhc3luYy0+cGt0c19pbmZvOw0KPiAtCWludDMyX3Qg bl9jcGw7DQo+ICsJdWludDE2X3QgbnJfY3BsX3BrdHMgPSAwOw0KPiAgCXVpbnQxNl90IG5fZGVz Y3MgPSAwLCBuX2J1ZmZlcnMgPSAwOw0KPiAgCXVpbnQxNl90IHN0YXJ0X2lkeCwgZnJvbSwgaTsN Cj4gDQo+IC0Jbl9jcGwgPSBhc3luYy0+b3BzLmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMoZGV2LT52 aWQsIHF1ZXVlX2lkLCAwLCBjb3VudCk7DQo+IC0JaWYgKHVubGlrZWx5KG5fY3BsIDwgMCkpIHsN Cj4gLQkJVkhPU1RfTE9HX0RBVEEoRVJSLCAiKCVkKSAlczogZmFpbGVkIHRvIGNoZWNrIGNvbXBs ZXRlZCBjb3BpZXMgZm9yDQo+IHF1ZXVlIGlkICVkLlxuIiwNCj4gLQkJCQlkZXYtPnZpZCwgX19m dW5jX18sIHF1ZXVlX2lkKTsNCj4gLQkJcmV0dXJuIDA7DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKG5f Y3BsID09IDApDQo+IC0JCXJldHVybiAwOw0KPiArCS8qIENoZWNrIGNvbXBsZXRlZCBjb3BpZXMg Zm9yIHRoZSBnaXZlbiBETUEgdkNoYW5uZWwgKi8NCj4gKwl2aG9zdF9hc3luY19kbWFfY2hlY2tf Y29tcGxldGVkKGRtYV9pZCwgdmNoYW4sIGNvdW50KTsNCj4gDQo+ICAJc3RhcnRfaWR4ID0gYXN5 bmNfZ2V0X2ZpcnN0X2luZmxpZ2h0X3BrdF9pZHgodnEpOw0KPiANCj4gLQlmb3IgKGkgPSAwOyBp IDwgbl9jcGw7IGkrKykgew0KPiArCS8qKg0KPiArCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9m IGNvcHkgY29tcGxldGVkIHBhY2tldHMuDQo+ICsJICogTm90ZSB0aGF0IHRoZXJlIG1heSBiZSBj b21wbGV0ZWQgcGFja2V0cyBldmVuIGlmDQo+ICsJICogbm8gY29waWVzIGFyZSByZXBvcnRlZCBk b25lIGJ5IHRoZSBnaXZlbiBETUEgdkNoYW5uZWwsDQo+ICsJICogYXMgRE1BIHZDaGFubmVscyBj b3VsZCBiZSBzaGFyZWQgYnkgb3RoZXIgdGhyZWFkcy4NCj4gKwkgKi8NCj4gKwlmcm9tID0gc3Rh cnRfaWR4Ow0KPiArCXdoaWxlICh2cS0+YXN5bmMtPnBrdHNfY21wbF9mbGFnW2Zyb21dICYmIGNv dW50LS0pIHsNCj4gKwkJdnEtPmFzeW5jLT5wa3RzX2NtcGxfZmxhZ1tmcm9tXSA9IGZhbHNlOw0K PiArCQlmcm9tKys7DQo+ICsJCWlmIChmcm9tID49IHZxLT5zaXplKQ0KPiArCQkJZnJvbSAtPSB2 cS0+c2l6ZTsNCj4gKwkJbnJfY3BsX3BrdHMrKzsNCj4gKwl9DQo+ICsNCj4gKwlmb3IgKGkgPSAw OyBpIDwgbnJfY3BsX3BrdHM7IGkrKykgew0KPiAgCQlmcm9tID0gKHN0YXJ0X2lkeCArIGkpICUg dnEtPnNpemU7DQo+ICAJCS8qIE9ubHkgdXNlZCB3aXRoIHBhY2tlZCByaW5nICovDQo+ICAJCW5f YnVmZmVycyArPSBwa3RzX2luZm9bZnJvbV0ubnJfYnVmZmVyczsNCj4gQEAgLTE4NTYsNyArMTk2 OSw3IEBAIHZob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoc3RydWN0IHZpcnRpb19uZXQgKmRl diwNCj4gdWludDE2X3QgcXVldWVfaWQsDQo+ICAJCXBrdHNbaV0gPSBwa3RzX2luZm9bZnJvbV0u bWJ1ZjsNCj4gIAl9DQo+IA0KPiAtCWFzeW5jLT5wa3RzX2luZmxpZ2h0X24gLT0gbl9jcGw7DQo+ ICsJYXN5bmMtPnBrdHNfaW5mbGlnaHRfbiAtPSBucl9jcGxfcGt0czsNCj4gDQo+ICAJaWYgKGxp a2VseSh2cS0+ZW5hYmxlZCAmJiB2cS0+YWNjZXNzX29rKSkgew0KPiAgCQlpZiAodnFfaXNfcGFj a2VkKGRldikpIHsNCj4gQEAgLTE4NzcsMTIgKzE5OTAsMTMgQEAgdmhvc3RfcG9sbF9lbnF1ZXVl X2NvbXBsZXRlZChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LA0KPiB1aW50MTZfdCBxdWV1ZV9pZCwN Cj4gIAkJfQ0KPiAgCX0NCj4gDQo+IC0JcmV0dXJuIG5fY3BsOw0KPiArCXJldHVybiBucl9jcGxf cGt0czsNCj4gIH0NCj4gDQo+ICB1aW50MTZfdA0KPiAgcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9j b21wbGV0ZWQoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0JCXN0cnVjdCBydGVfbWJ1 ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50KQ0KPiArCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1 aW50MTZfdCBjb3VudCwgaW50MTZfdCBkbWFfaWQsDQo+ICsJCXVpbnQxNl90IHZjaGFuKQ0KPiAg ew0KPiAgCXN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+ICAJc3Ry dWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7DQo+IEBAIC0xOTA4LDcgKzIwMjIsNyBAQCBydGVfdmhv c3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRlZChpbnQgdmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwN Cj4gDQo+ICAJcnRlX3NwaW5sb2NrX2xvY2soJnZxLT5hY2Nlc3NfbG9jayk7DQo+IA0KPiAtCW5f cGt0c19jcGwgPSB2aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKGRldiwgcXVldWVfaWQsIHBr dHMsIGNvdW50KTsNCj4gKwluX3BrdHNfY3BsID0gdmhvc3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRl ZChkZXYsIHF1ZXVlX2lkLCBwa3RzLCBjb3VudCwNCj4gZG1hX2lkLCB2Y2hhbik7DQo+IA0KPiAg CXJ0ZV9zcGlubG9ja191bmxvY2soJnZxLT5hY2Nlc3NfbG9jayk7DQo+IA0KPiBAQCAtMTkxNyw3 ICsyMDMxLDggQEAgcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoaW50IHZpZCwgdWlu dDE2X3QNCj4gcXVldWVfaWQsDQo+IA0KPiAgdWludDE2X3QNCj4gIHJ0ZV92aG9zdF9jbGVhcl9x dWV1ZV90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1 Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCkNCj4gKwkJc3RydWN0IHJ0ZV9tYnVm ICoqcGt0cywgdWludDE2X3QgY291bnQsIGludDE2X3QgZG1hX2lkLA0KPiArCQl1aW50MTZfdCB2 Y2hhbikNCj4gIHsNCj4gIAlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQp Ow0KPiAgCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiBAQCAtMTk0MSwxNCArMjA1Niwx NCBAQCBydGVfdmhvc3RfY2xlYXJfcXVldWVfdGhyZWFkX3Vuc2FmZShpbnQgdmlkLCB1aW50MTZf dA0KPiBxdWV1ZV9pZCwNCj4gIAkJcmV0dXJuIDA7DQo+ICAJfQ0KPiANCj4gLQluX3BrdHNfY3Bs ID0gdmhvc3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRlZChkZXYsIHF1ZXVlX2lkLCBwa3RzLCBjb3Vu dCk7DQo+ICsJbl9wa3RzX2NwbCA9IHZob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoZGV2LCBx dWV1ZV9pZCwgcGt0cywgY291bnQsDQo+IGRtYV9pZCwgdmNoYW4pOw0KPiANCj4gIAlyZXR1cm4g bl9wa3RzX2NwbDsNCj4gIH0NCj4gDQo+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50 MzJfdA0KPiAgdmlydGlvX2Rldl9yeF9hc3luY19zdWJtaXQoc3RydWN0IHZpcnRpb19uZXQgKmRl diwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0Jc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDMy X3QgY291bnQpDQo+ICsJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDMyX3QgY291bnQsIGlu dDE2X3QgZG1hX2lkLCB1aW50MTZfdCB2Y2hhbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgdmhvc3Rfdmly dHF1ZXVlICp2cTsNCj4gIAl1aW50MzJfdCBuYl90eCA9IDA7DQo+IEBAIC0xOTgwLDEwICsyMDk1 LDEwIEBAIHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0KHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYs DQo+IHVpbnQxNl90IHF1ZXVlX2lkLA0KPiANCj4gIAlpZiAodnFfaXNfcGFja2VkKGRldikpDQo+ ICAJCW5iX3R4ID0gdmlydGlvX2Rldl9yeF9hc3luY19zdWJtaXRfcGFja2VkKGRldiwgdnEsIHF1 ZXVlX2lkLA0KPiAtCQkJCXBrdHMsIGNvdW50KTsNCj4gKwkJCQlwa3RzLCBjb3VudCwgZG1hX2lk LCB2Y2hhbik7DQo+ICAJZWxzZQ0KPiAgCQluYl90eCA9IHZpcnRpb19kZXZfcnhfYXN5bmNfc3Vi bWl0X3NwbGl0KGRldiwgdnEsIHF1ZXVlX2lkLA0KPiAtCQkJCXBrdHMsIGNvdW50KTsNCj4gKwkJ CQlwa3RzLCBjb3VudCwgZG1hX2lkLCB2Y2hhbik7DQo+IA0KPiAgb3V0Og0KPiAgCWlmIChkZXYt PmZlYXR1cmVzICYgKDFVTEwgPDwgVklSVElPX0ZfSU9NTVVfUExBVEZPUk0pKQ0KPiBAQCAtMTk5 Nyw3ICsyMTEyLDggQEAgdmlydGlvX2Rldl9yeF9hc3luY19zdWJtaXQoc3RydWN0IHZpcnRpb19u ZXQgKmRldiwNCj4gdWludDE2X3QgcXVldWVfaWQsDQo+IA0KPiAgdWludDE2X3QNCj4gIHJ0ZV92 aG9zdF9zdWJtaXRfZW5xdWV1ZV9idXJzdChpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4g LQkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3QgY291bnQpDQo+ICsJCXN0cnVjdCBy dGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50LCBpbnQxNl90IGRtYV9pZCwNCj4gKwkJdWlu dDE2X3QgdmNoYW4pDQo+ICB7DQo+ICAJc3RydWN0IHZpcnRpb19uZXQgKmRldiA9IGdldF9kZXZp Y2UodmlkKTsNCj4gDQo+IEBAIC0yMDExLDcgKzIxMjcsNyBAQCBydGVfdmhvc3Rfc3VibWl0X2Vu cXVldWVfYnVyc3QoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQsDQo+ICAJCXJldHVybiAw Ow0KPiAgCX0NCj4gDQo+IC0JcmV0dXJuIHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0KGRldiwg cXVldWVfaWQsIHBrdHMsIGNvdW50KTsNCj4gKwlyZXR1cm4gdmlydGlvX2Rldl9yeF9hc3luY19z dWJtaXQoZGV2LCBxdWV1ZV9pZCwgcGt0cywgY291bnQsIGRtYV9pZCwNCj4gdmNoYW4pOw0KPiAg fQ0KPiANCj4gIHN0YXRpYyBpbmxpbmUgYm9vbA0KPiAtLQ0KPiAyLjI1LjENCg0K