From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D2084CD11BF for ; Tue, 19 Mar 2024 16:15:56 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 72CB110FBE1; Tue, 19 Mar 2024 16:15:56 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="mHWFrn4g"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6254A10E9FF for ; Tue, 19 Mar 2024 16:15:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710864955; x=1742400955; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=+iPI+hK3xjF2vo5ch4l1RMNgifcqBg6Et9CY66EqZ2o=; b=mHWFrn4g2KpY7R2KW4hMwc38SWknTb1YcWr49uzQsXAvI5cOhsLXkvkk PULc/SY32U/QCIUGv22yQdXUNJLgNaQ7ZkBYdST8LvZY13BilxF04TFFO c7fJM1gvOh/Xm/IZPEbrbzBJJYD1MnVbLETxyzwg6xNxnQleYgBMQID6H d7Fn65AolWn4eQh0EBD9QA/s4ygW8AgcdeTR1vRR69yR46hjINFD0GYgv 0T46XKXwl5rLoSLEE2XdGD7omT68yH548jum79Yk/fIkgKsJmCNAg2O+Q 0zggvOLlmn7S/ACszPEyaKTV0w7pvkdSlQiIV6GDTcbJ2/GNNJvLTTuQI w==; X-IronPort-AV: E=McAfee;i="6600,9927,11018"; a="23249155" X-IronPort-AV: E=Sophos;i="6.07,137,1708416000"; d="scan'208";a="23249155" Received: from fmviesa008.fm.intel.com ([10.60.135.148]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Mar 2024 09:13:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,137,1708416000"; d="scan'208";a="13922889" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by fmviesa008.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 19 Mar 2024 09:13:44 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Tue, 19 Mar 2024 09:13:43 -0700 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Tue, 19 Mar 2024 09:13:43 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Tue, 19 Mar 2024 09:13:43 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.101) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Tue, 19 Mar 2024 09:13:42 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U3LIBrP/0na8/ix3gI5CW3nYlzE86YzE42xPlV4yaRl56bj9yuBmG38TF8V7JHzM0NX1qhQg9itB4v2M5l9Df9TgwohmsTYJ4XJQdjwCsHnw64LGhB2YShIU/8pWhPoH/ezhZyJfYneFvZPEyhxexl+rgPbwV9f8pQDdGsuOApYci6Fol+HEy3avXCkWlNNbBHAZHm8+uXM7hRPWBscAiC1yM7iWUskifiYZBHCnBNeZFLxT0amAG3xOYl+AlUso2xTZjKiyxNLByHZJi4U+zfzeSIjQVC/rUSyF0k2F4LXNAT3BWMF25sxWE8+D8XiCyUBRUeN94SGLovwonpv1lg== 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=+iPI+hK3xjF2vo5ch4l1RMNgifcqBg6Et9CY66EqZ2o=; b=Wfrs8RLoL0mTHp8viNfvXpGgxI7q1AYRzfHJVSJ4iprdB+4F/7mCzh6Z1FGE/iUBh8bQQeF+EKuXwYri1Ig0G1uxOf9khwyMACjkf84NdNG/eXYJb1h9mxqYHOiyKks4QaCPwvc0qmxpMHcX9qvvw5OWhRRphXtyBNpvnPwr+2cBNdY84Afhe46oU9kcVBdReB1BOraExviV3jXcMKfBqiIB5gCExrQRTBd4dQPL/WZA8LaBr3iwkYC/x5KGME6wG7QIBC6jwUlNWvX2UT1VnCpt06uKzJkvdryIRAArwoCypD3EyrCrOwzIRAWmNj1LYjN3bisAdzeMG+Y2iRJLjA== 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 SA1PR11MB6991.namprd11.prod.outlook.com (2603:10b6:806:2b8::21) by PH0PR11MB5205.namprd11.prod.outlook.com (2603:10b6:510:3d::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.11; Tue, 19 Mar 2024 16:13:40 +0000 Received: from SA1PR11MB6991.namprd11.prod.outlook.com ([fe80::c06c:bf95:b3f4:198d]) by SA1PR11MB6991.namprd11.prod.outlook.com ([fe80::c06c:bf95:b3f4:198d%5]) with mapi id 15.20.7362.017; Tue, 19 Mar 2024 16:13:40 +0000 From: "Zeng, Oak" To: "Hellstrom, Thomas" , "intel-xe@lists.freedesktop.org" CC: "Brost, Matthew" , "Welty, Brian" , "airlied@gmail.com" , "Ghimiray, Himal Prasad" Subject: RE: [PATCH 4/5] drm/xe: Helper to populate a userptr or hmmptr Thread-Topic: [PATCH 4/5] drm/xe: Helper to populate a userptr or hmmptr Thread-Index: AQHadb8bm7LA7U9/N0+DYhDF3MBxjbE9amgAgACDkYCAANkGgIAAfRBQ Date: Tue, 19 Mar 2024 16:13:40 +0000 Message-ID: References: <20240314033553.1379444-1-oak.zeng@intel.com> <20240314033553.1379444-5-oak.zeng@intel.com> <8931f427c533ecbc3db202b54364572e86a2d1fc.camel@intel.com> In-Reply-To: Accept-Language: en-US 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-traffictypediagnostic: SA1PR11MB6991:EE_|PH0PR11MB5205:EE_ x-ms-office365-filtering-correlation-id: c3145ac4-45a7-429e-63fd-08dc482f8a9d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DUPon6UpGoW8aS02AxKHHBTuSBgWmAZg3u3yIe38kPl3JqbbNoi3govZ72KlNDzH2GY6/JFQ+ObscmQpDb9uiL16+/A87tVCNhpzhiKnq/6pHtKk9kDJwraUCe97VF8cFGdSCvVYho5PPUf7ARhDaiZ45v4+vLqZa0N/qzg4g//e5FigxcD8/s5ovXbPuy9WbqLYDdOks3Wt6/th/9ibotEL5+RTVxCf11YZvnKzZs4ucEBVUf2ng+xOzIfRgXOo8XasW1sPGh8l9lcQunoxU/kAVsZLh6qjDVXX8PPUiPjwb+csxzFS9P+kI9SUTdZjak8GxdS+3U0pfNcVJzSHw+cnRaKBiK8ljfClv2E2p1KPZM7afhrYSSAT1KHRkWsjeuLkt+Vx3T+AUKoGz0do+FVDmTmTuC+qR9PSUzgHuCBVjU0/l028YeAe3oRuQIZwavOhv5q7cP/etdU7eDi8IQHQRfTSiabYi61WPWpUF7olqVcqpjosm4q6stp9NMK8zMCIycUjp8FaFdynkKI9lGkLb27Irq5y3WWb4rFJvBuEbot4GfRRmwGE6iVHTvjqlFGx908nWKfx86vAUIsAzoVBEXCkMV8uUDHufeFEJTD0/CnNsk/s+vHee/QeZ4PRZqddnuaykiC2HpYSArkhXj7IpJ5mP3W1TZfiQkMqvotJpyFslNXpJOgfTVxp5Jm9bh/J97WSIKFoxdIx0GPqL0GF5DznHS4OgbH4lVOvOCU= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA1PR11MB6991.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376005)(366007)(1800799015)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?N2xpQU9vR2RUWDBVbGJzQzNlUzVWMkg1cWx3ODdFT25CR2U0WnZZS1ExN0tL?= =?utf-8?B?a0hSTmFLM01jNnpNWFZYUURIb0wwS2tGQ2hIdkxMam14djRqMGtyNnRNL3ht?= =?utf-8?B?TDVWV2pHMVNWRElmcjVEWFl3UFlONloxYzlqUFZhU25sSDRqWlJhQ0N6ZDlH?= =?utf-8?B?c0ovSitIeDZvQW0ydFBXZHZuZERSUHpQUDVYMklIdHJFbG8rWiszNjJQMUtu?= =?utf-8?B?ZDZ0Z0xZeklUNHVGM0FTSk1QZ3MzVjBJQktxNldkL0hzakxIZVl2YUN1Mi9v?= =?utf-8?B?UWpBUFJUNGlWOGc0ZkRxY1ljNDNKc0lONzZrcmRnTXhvVlhFQVl3b1dFK3NI?= =?utf-8?B?ZVZjRlBqbGtZSlludGl2L2xCRjFibTBmZWhtck5ZUEo4RDYxM3NqVUxneU1m?= =?utf-8?B?RFFZank1aldEWGMzN2FXVDFLTjRKWExWTkVKQnAwejIzSjdTNUloMWpQTUk3?= =?utf-8?B?MEJCeG5kRk9xcjVwNEhHaGJoT0cxU0NFNXd0RlVRMVlESGhZUEJrTzhES2sz?= =?utf-8?B?d2NhMHFBZ2d3ZFBpUVdrdzdDSWc4MXd5U2J5TEU0cWNXa3VNeXFMZGNIb0Nw?= =?utf-8?B?QlZycDVyRnFMZXJVaDJhVHRMNFdDMkdLYWZEMnZYWmVhdUcxbVk4TE1xcyti?= =?utf-8?B?MFVieFEwSi9ILy9WdmFuUmtFSzVRVEJQVnJmZ20zMFZUWnN3Qlg1NG44c1NB?= =?utf-8?B?WmYwdGdxOEVCWlA0bURSOU5iRjRaeU1IY2xjSVAyZExuejA1N3gwUmZhWjRy?= =?utf-8?B?bUFlSDc5STlyWVk1ZzZ4VkVYVGZhZ1IxMytGSE9qR2xhVW1ORHlmYkhBYk0x?= =?utf-8?B?eGZ4L0pmcnc5Mk5ZWGYwK1JwSnEvd0NhaFNTVzBxTkd1VUZicVBLSmxqL3Uz?= =?utf-8?B?RzZWUm9HNTh2cnhhSkNtUHFsVHBVbzB3YnJ3aHlLcnVzR2FuTGpWL2w2cnJV?= =?utf-8?B?UFJSRFQ1d0gzNzFzV3VGYlB5L1VaTWNRUWlVdC9Zb3ErV2lEUVRkd3ZuWm5v?= =?utf-8?B?NjJKNm52RGtaYXdnNWxVRGcrMUhUd0xxR0ZVT1ZPaHh0VWh5V3ZDeFU4MEds?= =?utf-8?B?dTFnZGUrcHlQYVRGVmx0SVBmMTZCRUF3Q3VkazY5cHNadG1zRHRFRy9MZTRF?= =?utf-8?B?Tjl4QkhVdllpbEVmM0tnVWZxcTc2dnliazhaMDBNb0wwQ1dLZ1BDS3ZxQ2hZ?= =?utf-8?B?M09qZjdZeFFYV2RsbndaMlpGc1JPRGRKaDdZNVBCSnFlLzluRE5YdGsvU1RE?= =?utf-8?B?SEQ0M0g4aHdpRzdaUW40K2pTNUZIZll3UE1xMHNWaGhCdHhnMTgvbEZoQWpG?= =?utf-8?B?YzA3Y3ZDcHRJWWc3RHpaTXFJZzl6aFkyUHI0VHh0Um1XNkZmVVVkWEpHSVZD?= =?utf-8?B?bEQ5YStrNmFzR0RRa0c5WHIvcVNEeXZYR0VyT3lTdmpUVFZoRzduelkyTWtD?= =?utf-8?B?Tk84US9JQ2JYK1ZkN2U3K3hPZjRoUTRQcTFGa3g0bU5jWFIzTmltNnlyL3Fk?= =?utf-8?B?cHl0b0RXNVVGK2t0Z0R4NFQwcnB3NklwNk04dm81U0NLcEdsUXk4NjVOZGFE?= =?utf-8?B?cGdGQkRPNXJvdkE5aXhDaE00TzcyZnhPelNHTG0zbnJXZ25NV2hLaHgyU24y?= =?utf-8?B?TTc2MHZEZUVrV1ZsZUE5dWx4NDhnc0M4cnF4Vmp0VjljYzh2Tmlvcjd0ditP?= =?utf-8?B?OWtaZWdnSitOZVNrelhERWdnQzFTMnZMdTFoVyt4cFVJOHgrbkVROEhsT3Y0?= =?utf-8?B?dDVmR1R4Q1NBSnE4TytRd3JOWEVQb01ZZlhQUTVTUVlKa0lONDJpOHQ1SWZD?= =?utf-8?B?SzIvV3MvRU9DTmF3bWpzTUNPM0J2SUNJWDkyYVhSSlFSRGQwbUkwZy9HS3VF?= =?utf-8?B?YmlrVno5WTUyTGNYNHEvTHRKZnVjWUJhNUo5K1pVSk4rYUpyOThvaEtVdWdh?= =?utf-8?B?MUV1YkFMYzZ3WmoxMU8rYVNRenFpVHlSV3RXTEIzSFgwM0tCUktIbFJLN3VN?= =?utf-8?B?VjdaeUYyUjZzVk43YUNOYXVnU3ZEbkRBU3pIY0Raa1cxcXNaYXFNaEdkaEtl?= =?utf-8?B?Y3dRemR5S0laaXF2dTVNbUkxRFJkWk1oMnpzTWZtVEcxeGM0dlloSmRYR1Y3?= =?utf-8?Q?8H6A=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: SA1PR11MB6991.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c3145ac4-45a7-429e-63fd-08dc482f8a9d X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Mar 2024 16:13:40.5736 (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: HLUo/K8UV55OscLhA67ffcSGE4blueBYTpQcE28Dm0tZPt//teEU8/1OIO+uzVlIzNFAno7osj0fwFaeRG60hA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5205 X-OriginatorOrg: intel.com X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSGVsbHN0cm9tLCBUaG9t YXMgPHRob21hcy5oZWxsc3Ryb21AaW50ZWwuY29tPg0KPiBTZW50OiBUdWVzZGF5LCBNYXJjaCAx OSwgMjAyNCA0OjQyIEFNDQo+IFRvOiBpbnRlbC14ZUBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IFpl bmcsIE9hayA8b2FrLnplbmdAaW50ZWwuY29tPg0KPiBDYzogQnJvc3QsIE1hdHRoZXcgPG1hdHRo ZXcuYnJvc3RAaW50ZWwuY29tPjsgV2VsdHksIEJyaWFuDQo+IDxicmlhbi53ZWx0eUBpbnRlbC5j b20+OyBhaXJsaWVkQGdtYWlsLmNvbTsgR2hpbWlyYXksIEhpbWFsIFByYXNhZA0KPiA8aGltYWwu cHJhc2FkLmdoaW1pcmF5QGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCA0LzVdIGRy bS94ZTogSGVscGVyIHRvIHBvcHVsYXRlIGEgdXNlcnB0ciBvciBobW1wdHINCj4gDQo+IE9uIE1v biwgMjAyNC0wMy0xOCBhdCAxOTo1MCArMDAwMCwgWmVuZywgT2FrIHdyb3RlOg0KPiA+DQo+ID4N Cj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBIZWxsc3Ryb20s IFRob21hcyA8dGhvbWFzLmhlbGxzdHJvbUBpbnRlbC5jb20+DQo+ID4gPiBTZW50OiBNb25kYXks IE1hcmNoIDE4LCAyMDI0IDc6NTQgQU0NCj4gPiA+IFRvOiBpbnRlbC14ZUBsaXN0cy5mcmVlZGVz a3RvcC5vcmc7IFplbmcsIE9hayA8b2FrLnplbmdAaW50ZWwuY29tPg0KPiA+ID4gQ2M6IEJyb3N0 LCBNYXR0aGV3IDxtYXR0aGV3LmJyb3N0QGludGVsLmNvbT47IFdlbHR5LCBCcmlhbg0KPiA+ID4g PGJyaWFuLndlbHR5QGludGVsLmNvbT47IGFpcmxpZWRAZ21haWwuY29tOyBHaGltaXJheSwgSGlt YWwgUHJhc2FkDQo+ID4gPiA8aGltYWwucHJhc2FkLmdoaW1pcmF5QGludGVsLmNvbT4NCj4gPiA+ IFN1YmplY3Q6IFJlOiBbUEFUQ0ggNC81XSBkcm0veGU6IEhlbHBlciB0byBwb3B1bGF0ZSBhIHVz ZXJwdHIgb3INCj4gPiA+IGhtbXB0cg0KPiA+ID4NCj4gPiA+IEhpLCBPYWsuDQo+ID4gPg0KPiA+ ID4NCj4gPiA+IE9uIFdlZCwgMjAyNC0wMy0xMyBhdCAyMzozNSAtMDQwMCwgT2FrIFplbmcgd3Jv dGU6DQo+ID4gPiA+IEFkZCBhIGhlbHBlciBmdW5jdGlvbiB4ZV9obW1fcG9wdWxhdGVfcmFuZ2Ug dG8gcG9wdWxhdGUNCj4gPiA+ID4gYSBhIHVzZXJwdHIgb3IgaG1tcHRyIHJhbmdlLiBUaGlzIGZ1 bmN0aW9ucyBjYWxscyBobW1fcmFuZ2VfZmF1bHQNCj4gPiA+ID4gdG8gcmVhZCBDUFUgcGFnZSB0 YWJsZXMgYW5kIHBvcHVsYXRlIGFsbCBwZm5zL3BhZ2VzIG9mIHRoaXMNCj4gPiA+ID4gdmlydHVh bCBhZGRyZXNzIHJhbmdlLg0KPiA+ID4gPg0KPiA+ID4gPiBJZiB0aGUgcG9wdWxhdGVkIHBhZ2Ug aXMgc3lzdGVtIG1lbW9yeSBwYWdlLCBkbWEtbWFwcGluZyBpcw0KPiA+ID4gPiBwZXJmb3JtZWQN Cj4gPiA+ID4gdG8gZ2V0IGEgZG1hLWFkZHJlc3Mgd2hpY2ggY2FuIGJlIHVzZWQgbGF0ZXIgZm9y IEdQVSB0byBhY2Nlc3MNCj4gPiA+ID4gcGFnZXMuDQo+ID4gPiA+DQo+ID4gPiA+IElmIHRoZSBw b3B1bGF0ZWQgcGFnZSBpcyBkZXZpY2UgcHJpdmF0ZSBwYWdlLCB3ZSBjYWxjdWxhdGUgdGhlDQo+ ID4gPiA+IGRwYSAoDQo+ID4gPiA+IGRldmljZSBwaHlzaWNhbCBhZGRyZXNzKSBvZiB0aGUgcGFn ZS4NCj4gPiA+ID4NCj4gPiA+ID4gVGhlIGRtYS1hZGRyZXNzIG9yIGRwYSBpcyB0aGVuIHNhdmVk IGluIHVzZXJwdHIncyBzZyB0YWJsZS4gVGhpcw0KPiA+ID4gPiBpcw0KPiA+ID4gPiBwcmVwYXJl IHdvcmsgdG8gcmVwbGFjZSB0aGUgZ2V0X3VzZXJfcGFnZXNfZmFzdCBjb2RlIGluIHVzZXJwdHIN Cj4gPiA+ID4gY29kZQ0KPiA+ID4gPiBwYXRoLiBUaGUgaGVscGVyIGZ1bmN0aW9uIHdpbGwgYWxz byBiZSB1c2VkIHRvIHBvcHVsYXRlIGhtbXB0cg0KPiA+ID4gPiBsYXRlci4NCj4gPiA+ID4NCj4g PiA+ID4gU2lnbmVkLW9mZi1ieTogT2FrIFplbmcgPG9hay56ZW5nQGludGVsLmNvbT4NCj4gPiA+ ID4gQ28tZGV2ZWxvcGVkLWJ5OiBOaXJhbmphbmEgVmlzaHdhbmF0aGFwdXJhDQo+ID4gPiA+IDxu aXJhbmphbmEudmlzaHdhbmF0aGFwdXJhQGludGVsLmNvbT4NCj4gPiA+ID4gU2lnbmVkLW9mZi1i eTogTmlyYW5qYW5hIFZpc2h3YW5hdGhhcHVyYQ0KPiA+ID4gPiA8bmlyYW5qYW5hLnZpc2h3YW5h dGhhcHVyYUBpbnRlbC5jb20+DQo+ID4gPiA+IENjOiBNYXR0aGV3IEJyb3N0IDxtYXR0aGV3LmJy b3N0QGludGVsLmNvbT4NCj4gPiA+ID4gQ2M6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVs bHN0cm9tQGludGVsLmNvbT4NCj4gPiA+ID4gQ2M6IEJyaWFuIFdlbHR5IDxicmlhbi53ZWx0eUBp bnRlbC5jb20+DQo+ID4gPiA+IC0tLQ0KPiA+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS9NYWtl ZmlsZSB8wqDCoCAzICstDQo+ID4gPiA+IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX2htbS5jIHwg MjEzDQo+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ID4g PiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9obW0uaCB8wqAgMTIgKysNCj4gPiA+ID4gwqAzIGZp bGVzIGNoYW5nZWQsIDIyNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+ID4gPiA+IMKg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9obW0uYw0KPiA+ID4gPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGUveGVfaG1tLmgNCj4gPiA+DQo+ ID4gPiBJIG1vc3RseSBhZ3JlZSB3aXRoIE1hdHQncyByZXZpZXcgY29tbWVudHMgb24gdGhpcyBw YXRjaC4gU29tZQ0KPiA+ID4gYWRkaXRpb25hbCBiZWxvdy4NCj4gPiA+DQo+ID4gPiA+DQo+ID4g PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUNCj4gPiA+ID4gYi9k cml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUNCj4gPiA+ID4gaW5kZXggODQwNDY3MDgwZTU5Li4y OWRjYmM5MzhiMDEgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS9NYWtl ZmlsZQ0KPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUNCj4gPiA+ID4g QEAgLTE0Myw3ICsxNDMsOCBAQCB4ZS15ICs9IHhlX2JiLm8gXA0KPiA+ID4gPiDCoAl4ZV93YWl0 X3VzZXJfZmVuY2UubyBcDQo+ID4gPiA+IMKgCXhlX3dhLm8gXA0KPiA+ID4gPiDCoAl4ZV93b3Bj bS5vIFwNCj4gPiA+ID4gLQl4ZV9zdm1fZGV2bWVtLm8NCj4gPiA+ID4gKwl4ZV9zdm1fZGV2bWVt Lm8gXA0KPiA+ID4gPiArCXhlX2htbS5vDQo+ID4gPiA+DQo+ID4gPiA+IMKgIyBncmFwaGljcyBo YXJkd2FyZSBtb25pdG9yaW5nIChIV01PTikgc3VwcG9ydA0KPiA+ID4gPiDCoHhlLSQoQ09ORklH X0hXTU9OKSArPSB4ZV9od21vbi5vDQo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0veGUveGVfaG1tLmMNCj4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfaG1tLmMNCj4g PiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5j NDVjMjQ0N2QzODYNCj4gPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0veGUveGVfaG1tLmMNCj4gPiA+ID4gQEAgLTAsMCArMSwyMTMgQEANCj4gPiA+ID4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQNCj4gPiA+ID4gKy8qDQo+ID4gPiA+ICsg KiBDb3B5cmlnaHQgwqkgMjAyNCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiA+ID4gPiArICovDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4NCj4gPiA+ID4g KyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4 L21lbXJlbWFwLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvc3dhcC5oPg0KPiA+ID4gPiAr I2luY2x1ZGUgPGxpbnV4L21tLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSAieGVfaG1tLmgiDQo+ID4g PiA+ICsjaW5jbHVkZSAieGVfdm0uaCINCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ ICsgKiBtYXJrX3JhbmdlX2FjY2Vzc2VkKCkgLSBtYXJrIGEgcmFuZ2UgaXMgYWNjZXNzZWQsIHNv IGNvcmUgbW0NCj4gPiA+ID4gKyAqIGhhdmUgc3VjaCBpbmZvcm1hdGlvbiBmb3IgbWVtb3J5IGV2 aWN0aW9uIG9yIHdyaXRlIGJhY2sgdG8NCj4gPiA+ID4gKyAqIGhhcmQgZGlzaw0KPiA+ID4gPiAr ICoNCj4gPiA+ID4gKyAqIEByYW5nZTogdGhlIHJhbmdlIHRvIG1hcmsNCj4gPiA+ID4gKyAqIEB3 cml0ZTogaWYgd3JpdGUgdG8gdGhpcyByYW5nZSwgd2UgbWFyayBwYWdlcyBpbiB0aGlzIHJhbmdl DQo+ID4gPiA+ICsgKiBhcyBkaXJ0eQ0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgdm9p ZCBtYXJrX3JhbmdlX2FjY2Vzc2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBib29sDQo+ID4g PiA+IHdyaXRlKQ0KPiA+ID4NCj4gPiA+IFNvbWUgb2YgdGhlIHN0YXRpYyBmdW5jdGlvbiBuYW1l cyBhcmVuJ3QgcmVhbGx5IHVuaXF1ZSBlbm91Z2ggbm90DQo+ID4gPiB0bw0KPiA+ID4gc3RhbmQg aW4gdGhlIHdheSBmb3IgYSBmdXR1cmUgY29yZSBmdW5jdGlvbiBuYW1lIGNsYXNoLiBQbGVhc2UN Cj4gPiA+IGNvbnNpZGVyDQo+ID4gPiB1c2luZyBhbiB4ZV8gcHJlZml4IGluIHN1Y2ggY2FzZXMu IEl0IHdpbGwgYWxzbyBtYWtlIGJhY2t0cmFjZXMNCj4gPiA+IGVhc2llcg0KPiA+ID4gdG8gZm9s bG93Lg0KPiA+DQo+ID4gSSB3aWxsIGFkZCBhIHhlX3ByZWZpeCBmb3IgdGhlIGJhY2t0cmFjZSBy ZWFzb24uLi4NCj4gPg0KPiA+IEFzIEkgdW5kZXJzdGFuZCBpdCwgc3RhdGljIGZ1bmN0aW9uIGlz IGZpbGUgc2NvcGUsIHNvIGV2ZW4gaWYgd2UgaGF2ZQ0KPiA+IGEgY29yZSBmdW5jdGlvbiB3aXRo DQo+ID4gVGhlIHNhbWUgbmFtZSBpbiB0aGUgZnV0dXJlLCBhcyBsb25nIGFzIHRoZXkgYXJlIG5v dCBpbiB0aGUgc2FtZQ0KPiA+IGZpbGUsIHRoZXJlIHdvbnQgYmUgYW55IG5hbWUgY2xhc2guLi4N Cj4gDQo+IFRoZSBuYW1lIGNhbid0IGJlIHVzZWQgZm9yIGEgZnV0dXJlIGNvcmUgZXh0ZXJuIGZ1 bmN0aW9uPw0KDQpZZXMsIGF0IGxlYXN0IHRoaXMgaXMgbXkgdW5kZXJzdGFuZGluZyBvZiBzdGF0 aWMgZnVuY3Rpb24uIFN0YXRpYyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgYSBzeW1ib2wgc28gaXQg Y2FuJ3QgY2xhc2ggd2l0aCBvdGhlciBzdGF0aWMgZnVuY3Rpb24gaW4gb3RoZXIgZmlsZSB3aXRo IHRoZSBzYW1lIG5hbWUuIEZvciBleGFtcGxlLCBpZiB5b3UgcmVhZGVsZiAtcyB4ZS5rbywgeW91 IHdvbid0IGJlIGFibGUgdG8gZmluZCB4ZV9tYXJrX3JhbmdlX2FjY2Vzc2VkLCBiZWNhdXNlIGl0 IGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIHRoaW5rIGNvbXBpbGVyIGp1c3QgZ2l2ZSBzdGF0aWMg ZnVuY3Rpb24gYW4gYWRkcmVzcyBpbnN0ZWFkIG9mIGEgc3ltYm9sLiANCg0KT2FrDQoNCj4gDQo+ IC9UaG9tYXMNCj4gDQo+ID4NCj4gPiA+DQo+ID4gPg0KPiA+ID4gPiArew0KPiA+ID4gPiArCXN0 cnVjdCBwYWdlICpwYWdlOw0KPiA+ID4gPiArCXU2NCBpLCBucGFnZXM7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwlucGFnZXMgPSAoKHJhbmdlLT5lbmQgLSAxKSA+PiBQQUdFX1NISUZUKSAtIChyYW5n ZS0NCj4gPiA+ID4gPnN0YXJ0ID4+DQo+ID4gPiA+IFBBR0VfU0hJRlQpICsgMTsNCj4gPiA+ID4g Kwlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsNCj4gPiA+ID4gKwkJcGFnZSA9IGhtbV9w Zm5fdG9fcGFnZShyYW5nZS0+aG1tX3BmbnNbaV0pOw0KPiA+ID4gPiArCQlpZiAod3JpdGUpIHsN Cj4gPiA+ID4gKwkJCWxvY2tfcGFnZShwYWdlKTsNCj4gPiA+ID4gKwkJCXNldF9wYWdlX2RpcnR5 KHBhZ2UpOw0KPiA+ID4gPiArCQkJdW5sb2NrX3BhZ2UocGFnZSk7DQo+ID4gPg0KPiA+ID4gQ291 bGQgYmUgdXNpbmcgc2V0X3BhZ2VfZGlydHlfbG9jaygpIGhlcmUuDQo+ID4NCj4gPiBXaWxsIGZp eCwgVGhhbmtzDQo+ID4gT2FrDQo+ID4NCj4gPiA+DQo+ID4gPiAvVGhvbWFzDQo+ID4gPg0KPiA+ ID4NCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7DQo+ ID4gPiA+ICsJfQ0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4g KyAqIGJ1aWxkX3NnKCkgLSBidWlsZCBhIHNjYXR0ZXIgZ2F0aGVyIHRhYmxlIGZvciBhbGwgdGhl DQo+ID4gPiA+IHBoeXNpY2FsDQo+ID4gPiA+IHBhZ2VzL3Bmbg0KPiA+ID4gPiArICogaW4gYSBo bW1fcmFuZ2UuIGRtYS1hZGRyZXNzIGlzIHNhdmUgaW4gc2cgdGFibGUgYW5kIHdpbGwgYmUNCj4g PiA+ID4gdXNlZA0KPiA+ID4gPiB0byBwcm9ncmFtDQo+ID4gPiA+ICsgKiBHUFUgcGFnZSB0YWJs ZSBsYXRlci4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBAeGU6IHRoZSB4ZSBkZXZpY2Ugd2hv IHdpbGwgYWNjZXNzIHRoZSBkbWEtYWRkcmVzcyBpbiBzZw0KPiA+ID4gPiB0YWJsZQ0KPiA+ID4g PiArICogQHJhbmdlOiB0aGUgaG1tIHJhbmdlIHRoYXQgd2UgYnVpbGQgdGhlIHNnIHRhYmxlIGZy b20uIHJhbmdlLQ0KPiA+ID4gPiA+IGhtbV9wZm5zW10NCj4gPiA+ID4gKyAqIGhhcyB0aGUgcGZu IG51bWJlcnMgb2YgcGFnZXMgdGhhdCBiYWNrIHVwIHRoaXMgaG1tIGFkZHJlc3MNCj4gPiA+ID4g cmFuZ2UuDQo+ID4gPiA+ICsgKiBAc3Q6IHBvaW50ZXIgdG8gdGhlIHNnIHRhYmxlLg0KPiA+ID4g PiArICogQHdyaXRlOiB3aGV0aGVyIHdlIHdyaXRlIHRvIHRoaXMgcmFuZ2UuIFRoaXMgZGVjaWRl cyBkbWEgbWFwDQo+ID4gPiA+IGRpcmVjdGlvbg0KPiA+ID4gPiArICogZm9yIHN5c3RlbSBwYWdl cy4gSWYgd3JpdGUgd2UgbWFwIGl0IGJpLWRpcmV0aW9uYWw7IG90aGVyd2lzZQ0KPiA+ID4gPiAr ICogRE1BX1RPX0RFVklDRQ0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEFsbCB0aGUgY29udGln dW91cyBwZm5zIHdpbGwgYmUgY29sbGFwc2VkIGludG8gb25lIGVudHJ5IGluDQo+ID4gPiA+ICsg KiB0aGUgc2NhdHRlciBnYXRoZXIgdGFibGUuIFRoaXMgaXMgZm9yIHRoZSBjb252ZW5pZW5jZSBv Zg0KPiA+ID4gPiArICogbGF0ZXIgb24gb3BlcmF0aW9ucyB0byBiaW5kIGFkZHJlc3MgcmFuZ2Ug dG8gR1BVIHBhZ2UgdGFibGUuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogVGhlIGRtYV9hZGRy ZXNzIGluIHRoZSBzZyB0YWJsZSB3aWxsIGxhdGVyIGJlIHVzZWQgYnkgR1BVIHRvDQo+ID4gPiA+ ICsgKiBhY2Nlc3MgbWVtb3J5LiBTbyBpZiB0aGUgbWVtb3J5IGlzIHN5c3RlbSBtZW1vcnksIHdl IG5lZWQgdG8NCj4gPiA+ID4gKyAqIGRvIGEgZG1hLW1hcHBpbmcgc28gaXQgY2FuIGJlIGFjY2Vz c2VkIGJ5IEdQVS9ETUEuIElmIHRoZQ0KPiA+ID4gPiBtZW1vcnkNCj4gPiA+ID4gKyAqIGlzIEdQ VSBsb2NhbCBtZW1vcnkgKG9mIHRoZSBHUFUgd2hvIGlzIGdvaW5nIHRvIGFjY2Vzcw0KPiA+ID4g PiBtZW1vcnkpLA0KPiA+ID4gPiArICogd2UgbmVlZCBncHUgZHBhIChkZXZpY2UgcGh5c2ljYWwg YWRkcmVzcyksIGFuZCB0aGVyZSBpcyBubw0KPiA+ID4gPiBuZWVkDQo+ID4gPiA+ICsgKiBvZiBk bWEtbWFwcGluZy4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBGSVhNRTogZG1hLW1hcHBpbmcg Zm9yIHBlZXIgZ3B1IGRldmljZSB0byBhY2Nlc3MgcmVtb3RlIGdwdSdzDQo+ID4gPiA+ICsgKiBt ZW1vcnkuIEFkZCB0aGlzIHdoZW4geW91IHN1cHBvcnQgcDJwDQo+ID4gPiA+ICsgKg0KPiA+ID4g PiArICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIHN0b3JhZ2Ugb2YgdGhlIHNnIHRhYmxl LiBJdCBpcw0KPiA+ID4gPiArICogY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSBpdCBj YWxsaW5nIHNnX2ZyZWVfdGFibGUuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogUmV0dXJucyAw IGlmIHN1Y2Nlc3NmdWw7IC1FTk9NRU0gaWYgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5DQo+ID4g PiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBpbnQgYnVpbGRfc2coc3RydWN0IHhlX2RldmljZSAq eGUsIHN0cnVjdCBobW1fcmFuZ2UNCj4gPiA+ID4gKnJhbmdlLA0KPiA+ID4gPiArCQkJwqDCoMKg wqAgc3RydWN0IHNnX3RhYmxlICpzdCwgYm9vbCB3cml0ZSkNCj4gPiA+ID4gK3sNCj4gPiA+ID4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB4ZS0+ZHJtLmRldjsNCj4gPiA+ID4gKwlzdHJ1Y3Qgc2Nh dHRlcmxpc3QgKnNnOw0KPiA+ID4gPiArCXU2NCBpLCBucGFnZXM7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwlzZyA9IE5VTEw7DQo+ID4gPiA+ICsJc3QtPm5lbnRzID0gMDsNCj4gPiA+ID4gKwlucGFn ZXMgPSAoKHJhbmdlLT5lbmQgLSAxKSA+PiBQQUdFX1NISUZUKSAtIChyYW5nZS0NCj4gPiA+ID4g PnN0YXJ0ID4+DQo+ID4gPiA+IFBBR0VfU0hJRlQpICsgMTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr CWlmICh1bmxpa2VseShzZ19hbGxvY190YWJsZShzdCwgbnBhZ2VzLCBHRlBfS0VSTkVMKSkpDQo+ ID4gPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJZm9yIChpID0g MDsgaSA8IG5wYWdlczsgaSsrKSB7DQo+ID4gPiA+ICsJCXN0cnVjdCBwYWdlICpwYWdlOw0KPiA+ ID4gPiArCQl1bnNpZ25lZCBsb25nIGFkZHI7DQo+ID4gPiA+ICsJCXN0cnVjdCB4ZV9tZW1fcmVn aW9uICptcjsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCQlwYWdlID0gaG1tX3Bmbl90b19wYWdlKHJh bmdlLT5obW1fcGZuc1tpXSk7DQo+ID4gPiA+ICsJCWlmIChpc19kZXZpY2VfcHJpdmF0ZV9wYWdl KHBhZ2UpKSB7DQo+ID4gPiA+ICsJCQltciA9IHBhZ2VfdG9fbWVtX3JlZ2lvbihwYWdlKTsNCj4g PiA+ID4gKwkJCWFkZHIgPSB2cmFtX3Bmbl90b19kcGEobXIsIHJhbmdlLQ0KPiA+ID4gPiA+IGht bV9wZm5zW2ldKTsNCj4gPiA+ID4gKwkJfSBlbHNlIHsNCj4gPiA+ID4gKwkJCWFkZHIgPSBkbWFf bWFwX3BhZ2UoZGV2LCBwYWdlLCAwLA0KPiA+ID4gPiBQQUdFX1NJWkUsDQo+ID4gPiA+ICsJCQkJ CXdyaXRlID8NCj4gPiA+ID4gRE1BX0JJRElSRUNUSU9OQUwgOg0KPiA+ID4gPiBETUFfVE9fREVW SUNFKTsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWlmIChzZyAmJiAoYWRk ciA9PSAoc2dfZG1hX2FkZHJlc3Moc2cpICsgc2ctDQo+ID4gPiA+ID4gbGVuZ3RoKSkpIHsNCj4g PiA+ID4gKwkJCXNnLT5sZW5ndGggKz0gUEFHRV9TSVpFOw0KPiA+ID4gPiArCQkJc2dfZG1hX2xl bihzZykgKz0gUEFHRV9TSVpFOw0KPiA+ID4gPiArCQkJY29udGludWU7DQo+ID4gPiA+ICsJCX0N Cj4gPiA+ID4gKw0KPiA+ID4gPiArCQlzZyA9wqAgc2cgPyBzZ19uZXh0KHNnKSA6IHN0LT5zZ2w7 DQo+ID4gPiA+ICsJCXNnX2RtYV9hZGRyZXNzKHNnKSA9IGFkZHI7DQo+ID4gPiA+ICsJCXNnX2Rt YV9sZW4oc2cpID0gUEFHRV9TSVpFOw0KPiA+ID4gPiArCQlzZy0+bGVuZ3RoID0gUEFHRV9TSVpF Ow0KPiA+ID4gPiArCQlzdC0+bmVudHMrKzsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwlzZ19tYXJrX2VuZChzZyk7DQo+ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICt9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogeGVfaG1tX3BvcHVsYXRlX3Jhbmdl KCkgLSBQb3B1bGF0ZSBwaHlzaWNhbCBwYWdlcyBvZiBhDQo+ID4gPiA+IHZpcnR1YWwNCj4gPiA+ ID4gKyAqIGFkZHJlc3MgcmFuZ2UNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBAdm1hOiB2bWEg aGFzIGluZm9ybWF0aW9uIG9mIHRoZSByYW5nZSB0byBwb3B1bGF0ZS4gb25seSB2bWENCj4gPiA+ ID4gKyAqIG9mIHVzZXJwdHIgYW5kIGhtbXB0ciB0eXBlIGNhbiBiZSBwb3B1bGF0ZWQuDQo+ID4g PiA+ICsgKiBAaG1tX3JhbmdlOiBwb2ludGVyIHRvIGhtbV9yYW5nZSBzdHJ1Y3QuIGhtbV9yYW5n LT5obW1fcGZucw0KPiA+ID4gPiArICogd2lsbCBob2xkIHRoZSBwb3B1bGF0ZWQgcGZucy4NCj4g PiA+ID4gKyAqIEB3cml0ZTogcG9wdWxhdGUgcGFnZXMgd2l0aCB3cml0ZSBwZXJtaXNzaW9uDQo+ ID4gPiA+ICsgKg0KPiA+ID4gPiArICogVGhpcyBmdW5jdGlvbiBwb3B1bGF0ZSB0aGUgcGh5c2lj YWwgcGFnZXMgb2YgYSB2aXJ0dWFsDQo+ID4gPiA+ICsgKiBhZGRyZXNzIHJhbmdlLiBUaGUgcG9w dWxhdGVkIHBoeXNpY2FsIHBhZ2VzIGlzIHNhdmVkIGluDQo+ID4gPiA+ICsgKiB1c2VycHRyJ3Mg c2cgdGFibGUuIEl0IGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMgYnV0IGNhbGwNCj4gPiA+ ID4gKyAqIGhtbV9yYW5nZV9mYXVsdC4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBUaGlzIGZ1 bmN0aW9uIGFsc28gcmVhZCBtbXUgbm90aWZpZXIgc2VxdWVuY2UgIyAoDQo+ID4gPiA+ICsgKiBt bXVfaW50ZXJ2YWxfcmVhZF9iZWdpbiksIGZvciB0aGUgcHVycG9zZSBvZiBsYXRlcg0KPiA+ID4g PiArICogY29tcGFyaXNvbiAodGhyb3VnaCBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSkuDQo+ID4g PiA+ICsgKg0KPiA+ID4gPiArICogVGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIG1tYXAgcmVhZCBv ciB3cml0ZSBsb2NrIGhlbGQuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogVGhpcyBmdW5jdGlv biBhbGxvY2F0ZXMgdGhlIHN0b3JhZ2Ugb2YgdGhlIHVzZXJwdHIgc2cgdGFibGUuDQo+ID4gPiA+ ICsgKiBJdCBpcyBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIGl0IGNhbGxpbmcNCj4g PiA+ID4gc2dfZnJlZV90YWJsZS4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiByZXR1cm5zOiAw IGZvciBzdWNjdXNzOyBuZWdhdGl2ZSBlcnJvciBubyBvbiBmYWlsdXJlDQo+ID4gPiA+ICsgKi8N Cj4gPiA+ID4gK2ludCB4ZV9obW1fcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IHhlX3ZtYSAqdm1hLCBz dHJ1Y3QgaG1tX3JhbmdlDQo+ID4gPiA+ICpobW1fcmFuZ2UsDQo+ID4gPiA+ICsJCQkJCQlib29s IHdyaXRlKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9DQo+ ID4gPiA+ICsJCWppZmZpZXMgKw0KPiA+ID4gPiBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9E RUZBVUxUX1RJTUVPVVQpOw0KPiA+ID4gPiArCXVuc2lnbmVkIGxvbmcgKnBmbnMsIGZsYWdzID0g SE1NX1BGTl9SRVFfRkFVTFQ7DQo+ID4gPiA+ICsJc3RydWN0IHhlX3VzZXJwdHJfdm1hICp1c2Vy cHRyX3ZtYTsNCj4gPiA+ID4gKwlzdHJ1Y3QgeGVfdXNlcnB0ciAqdXNlcnB0cjsNCj4gPiA+ID4g Kwl1NjQgc3RhcnQgPSB2bWEtPmdwdXZhLnZhLmFkZHI7DQo+ID4gPiA+ICsJdTY0IGVuZCA9IHN0 YXJ0ICsgdm1hLT5ncHV2YS52YS5yYW5nZTsNCj4gPiA+ID4gKwlzdHJ1Y3QgeGVfdm0gKnZtID0g eGVfdm1hX3ZtKHZtYSk7DQo+ID4gPiA+ICsJdTY0IG5wYWdlczsNCj4gPiA+ID4gKwlpbnQgcmV0 Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJdXNlcnB0cl92bWEgPSB0b191c2VycHRyX3ZtYSh2bWEp Ow0KPiA+ID4gPiArCXVzZXJwdHIgPSAmdXNlcnB0cl92bWEtPnVzZXJwdHI7DQo+ID4gPiA+ICsJ bW1hcF9hc3NlcnRfbG9ja2VkKHVzZXJwdHItPm5vdGlmaWVyLm1tKTsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArCW5wYWdlcyA9ICgoZW5kIC0gMSkgPj4gUEFHRV9TSElGVCkgLSAoc3RhcnQgPj4NCj4g PiA+ID4gUEFHRV9TSElGVCkgKw0KPiA+ID4gPiAxOw0KPiA+ID4gPiArCXBmbnMgPSBrdm1hbGxv Y19hcnJheShucGFnZXMsIHNpemVvZigqcGZucyksDQo+ID4gPiA+IEdGUF9LRVJORUwpOw0KPiA+ ID4gPiArCWlmICh1bmxpa2VseSghcGZucykpDQo+ID4gPiA+ICsJCXJldHVybiAtRU5PTUVNOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKHdyaXRlKQ0KPiA+ID4gPiArCQlmbGFncyB8PSBITU1f UEZOX1JFUV9XUklURTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCW1lbXNldDY0KCh1NjQgKilwZm5z LCAodTY0KWZsYWdzLCBucGFnZXMpOw0KPiA+ID4gPiArCWhtbV9yYW5nZS0+aG1tX3BmbnMgPSBw Zm5zOw0KPiA+ID4gPiArCWhtbV9yYW5nZS0+bm90aWZpZXJfc2VxID0NCj4gPiA+ID4gbW11X2lu dGVydmFsX3JlYWRfYmVnaW4oJnVzZXJwdHItDQo+ID4gPiA+ID4gbm90aWZpZXIpOw0KPiA+ID4g PiArCWhtbV9yYW5nZS0+bm90aWZpZXIgPSAmdXNlcnB0ci0+bm90aWZpZXI7DQo+ID4gPiA+ICsJ aG1tX3JhbmdlLT5zdGFydCA9IHN0YXJ0Ow0KPiA+ID4gPiArCWhtbV9yYW5nZS0+ZW5kID0gZW5k Ow0KPiA+ID4gPiArCWhtbV9yYW5nZS0+cGZuX2ZsYWdzX21hc2sgPSBITU1fUEZOX1JFUV9GQVVM VCB8DQo+ID4gPiA+IEhNTV9QRk5fUkVRX1dSSVRFOw0KPiA+ID4gPiArCS8qKg0KPiA+ID4gPiAr CSAqIEZJWE1FOg0KPiA+ID4gPiArCSAqIFNldCB0aGUgdGhlIGRldl9wcml2YXRlX293bmVyIGNh biBwcmV2ZW50DQo+ID4gPiA+IGhtbV9yYW5nZV9mYXVsdA0KPiA+ID4gPiB0byBmYXVsdA0KPiA+ ID4gPiArCSAqIGluIHRoZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyBvd25lZCBieSBjYWxsZXIuIFNl ZQ0KPiA+ID4gPiBmdW5jdGlvbg0KPiA+ID4gPiArCSAqIGhtbV92bWFfaGFuZGxlX3B0ZS4gSW4g bXVsdGlwbGUgR1BVIGNhc2UsIHRoaXMgc2hvdWxkDQo+ID4gPiA+IGJlDQo+ID4gPiA+IHNldCB0 byB0aGUNCj4gPiA+ID4gKwkgKiBkZXZpY2Ugb3duZXIgb2YgdGhlIGJlc3QgbWlncmF0aW9uIGRl c3RpbmF0aW9uLiBlLmcuLA0KPiA+ID4gPiBkZXZpY2UwL3ZtMA0KPiA+ID4gPiArCSAqIGhhcyBh IHBhZ2UgZmF1bHQsIGJ1dCB3ZSBoYXZlIGRldGVybWluZWQgdGhlIGJlc3QNCj4gPiA+ID4gcGxh Y2VtZW50IG9mDQo+ID4gPiA+ICsJICogdGhlIGZhdWx0IGFkZHJlc3Mgc2hvdWxkIGJlIG9uIGRl dmljZTEsIHdlIHNob3VsZCBzZXQNCj4gPiA+ID4gYmVsb3cgdG8NCj4gPiA+ID4gKwkgKiBkZXZp Y2UxIGluc3RlYWQgb2YgZGV2aWNlMC4NCj4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gKwlobW1fcmFu Z2UtPmRldl9wcml2YXRlX293bmVyID0gdm0tPnhlLT5kcm0uZGV2Ow0KPiA+ID4gPiArDQo+ID4g PiA+ICsJd2hpbGUgKHRydWUpIHsNCj4gPiA+ID4gKwkJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0KGht bV9yYW5nZSk7DQo+ID4gPiA+ICsJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQ0K PiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJaWYgKHJldCA9PSAtRUJV U1kpDQo+ID4gPiA+ICsJCQljb250aW51ZTsNCj4gPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiA+ICsJ fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKHJldCkNCj4gPiA+ID4gKwkJZ290byBmcmVlX3Bm bnM7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXQgPSBidWlsZF9zZyh2bS0+eGUsIGhtbV9yYW5n ZSwgJnVzZXJwdHItPnNndCwgd3JpdGUpOw0KPiA+ID4gPiArCWlmIChyZXQpDQo+ID4gPiA+ICsJ CWdvdG8gZnJlZV9wZm5zOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJbWFya19yYW5nZV9hY2Nlc3Nl ZChobW1fcmFuZ2UsIHdyaXRlKTsNCj4gPiA+ID4gKwl1c2VycHRyLT5zZyA9ICZ1c2VycHRyLT5z Z3Q7DQo+ID4gPiA+ICsJdXNlcnB0ci0+bm90aWZpZXJfc2VxID0gaG1tX3JhbmdlLT5ub3RpZmll cl9zZXE7DQo+ID4gPiA+ICsNCj4gPiA+ID4gK2ZyZWVfcGZuczoNCj4gPiA+ID4gKwlrdmZyZWUo cGZucyk7DQo+ID4gPiA+ICsJcmV0dXJuIHJldDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2htbS5oDQo+ID4gPiA+IGIv ZHJpdmVycy9ncHUvZHJtL3hlL3hlX2htbS5oDQo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTYwZjNmNmQzNmFlDQo+ID4gPiA+IC0tLSAv ZGV2L251bGwNCj4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2htbS5oDQo+ID4g PiA+IEBAIC0wLDAgKzEsMTIgQEANCj4gPiA+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBNSVQNCj4gPiA+ID4gKy8qDQo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAyNCBJbnRlbCBD b3Jwb3JhdGlvbg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpbmNsdWRlIDxs aW51eC90eXBlcy5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2htbS5oPg0KPiA+ID4gPiAr I2luY2x1ZGUgInhlX3ZtX3R5cGVzLmgiDQo+ID4gPiA+ICsjaW5jbHVkZSAieGVfc3ZtLmgiDQo+ ID4gPiA+ICsNCj4gPiA+ID4gK2ludCB4ZV9obW1fcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IHhlX3Zt YSAqdm1hLCBzdHJ1Y3QgaG1tX3JhbmdlDQo+ID4gPiA+ICpobW1fcmFuZ2UsDQo+ID4gPiA+ICsJ CQkJCQlib29sIHdyaXRlKTsNCj4gPg0KDQo=