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 7328CD30CC1 for ; Tue, 13 Jan 2026 21:24:07 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2D84C10E382; Tue, 13 Jan 2026 21:24:07 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="U2jE4a61"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6CE3210E382 for ; Tue, 13 Jan 2026 21:24:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1768339446; x=1799875446; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=vrafLJ3b2ujBfnqEjHr9upG8yNmamr5jtba6p2BV948=; b=U2jE4a610bVfVqVPZLgzYbJ4CBOpqaj+3MGPXsa0AXXiKlCdtNs5vEQv sToCVb9USeh4Y2qV44Ed0qCjjqBy0SZU0ln6Kz3QF+GyigO6FYxFA8zyI 4bCLOaMOG7PdA2bqHCA5JcyONQFX8i7+5Ny7ScD9nfhiq7wvyeaMAsLNU 8A0bBocbZJ722PUnhQVGRlPATUI40iiYIZg96bdvqZXgiOeODy5zk2KLz +ZRFMIleSe+7IOrqV7R0BzK+QS/Z6SAXY8jCAajpn3U+ORY3Cb/EdmXSJ yfauowo50NWd4Js92KKwZ2YLd95XAVcplK9mNs0eJtwUtVHhz6JFffI/v w==; X-CSE-ConnectionGUID: 67vdqdieQ6mM5RBFfOwVKQ== X-CSE-MsgGUID: dgxjpXlYTneT526DVW1ACg== X-IronPort-AV: E=McAfee;i="6800,10657,11670"; a="80355869" X-IronPort-AV: E=Sophos;i="6.21,222,1763452800"; d="scan'208";a="80355869" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2026 13:24:06 -0800 X-CSE-ConnectionGUID: SWMTnJUjTJaM9fKzFzqV8w== X-CSE-MsgGUID: Zpw815gwTCya+bX0OBxStQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,222,1763452800"; d="scan'208";a="203632616" Received: from fmsmsx901.amr.corp.intel.com ([10.18.126.90]) by orviesa006.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2026 13:24:06 -0800 Received: from FMSMSX902.amr.corp.intel.com (10.18.126.91) by fmsmsx901.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Tue, 13 Jan 2026 13:24:05 -0800 Received: from fmsedg901.ED.cps.intel.com (10.1.192.143) by FMSMSX902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29 via Frontend Transport; Tue, 13 Jan 2026 13:24:05 -0800 Received: from DM5PR21CU001.outbound.protection.outlook.com (52.101.62.10) by edgegateway.intel.com (192.55.55.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Tue, 13 Jan 2026 13:24:04 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uhBPXlRV9Yl7H+LA5XnPxwY1FWQ1wdKSn9kZR6FlmPwCZaxtitEMCbZSU8JPyeMLeYCXuKvxm2DDBWLkcnrt1WkZ9nLOMfNz11U1lQKNZoYGjNV5EC50KjV9fs99oVXnGDDupdGFwY4/GrOa4vddjL/WGL+h6yn31IayopXZxRW4I5eqAz2pVzmuPkXPNL/ZFdqxvAUknnC9hJixlA0OWdtd8Pd6eE9qvWd6eFK0WxyoHm4pLtil5rS6odKYBMxoTynlCmjCzYFnFAxD1uOai7KPZWvMHo28SnKOrwwSpZvSsVw5IpjI31EqMvqYg56yNJNscMnTr/fW9XsZ6gUoGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=vrafLJ3b2ujBfnqEjHr9upG8yNmamr5jtba6p2BV948=; b=WpBuwDj4R8LDXOFxzFiVdPwYysQi+DRn5ihxGROXkTfeakLtkAhLGebSgCCz+TlCrV6Lc1wPuwxTh1+PdO68qDXknj3p9jINEA3w2row+XhETG9p48Aj24wtoPznonx7+exBVswP5qdNSGlyKj3XKCyG+MerwxJgC+F1VQ/MEbxfkEuuDycQyjZumSfZYC66kIMeNAVg8wXeiLBOd3ueCeZYik/CATmNexHvj7zGDKlP/8s08bD24z8hlkWCRPuFiyN3oHjQV+tDDwrQThTo/iZyMqgId2gpIjXTcUp+b3sn3tXzSQknlYIlW4bwr6GTMZg4AP++hWpJy6d0llUEgw== 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 DM8PR11MB5573.namprd11.prod.outlook.com (2603:10b6:8:3b::7) by PH8PR11MB7023.namprd11.prod.outlook.com (2603:10b6:510:221::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Tue, 13 Jan 2026 21:23:57 +0000 Received: from DM8PR11MB5573.namprd11.prod.outlook.com ([fe80::6a14:6aa3:4339:4415]) by DM8PR11MB5573.namprd11.prod.outlook.com ([fe80::6a14:6aa3:4339:4415%4]) with mapi id 15.20.9520.005; Tue, 13 Jan 2026 21:23:57 +0000 From: "Summers, Stuart" To: "intel-xe@lists.freedesktop.org" , "Brost, Matthew" Subject: Re: [PATCH v4 11/12] drm/xe: Add context-based invalidation to GuC TLB invalidation backend Thread-Topic: [PATCH v4 11/12] drm/xe: Add context-based invalidation to GuC TLB invalidation backend Thread-Index: AQHchDe2RzIBAMwEV0msCaRbyDMk0bVQnWiA Date: Tue, 13 Jan 2026 21:23:57 +0000 Message-ID: References: <20260113025232.3504648-1-matthew.brost@intel.com> <20260113025232.3504648-12-matthew.brost@intel.com> In-Reply-To: <20260113025232.3504648-12-matthew.brost@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 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: DM8PR11MB5573:EE_|PH8PR11MB7023:EE_ x-ms-office365-filtering-correlation-id: d5915220-e9e6-4969-3a09-08de52ea0ffd x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|38070700021; x-microsoft-antispam-message-info: =?utf-8?B?RHdNLzNxYVBRQklaN0VlUEs5ZDFNZEZSbWNaL3Y2MmtMdTZ6bVJIaGR5WUts?= =?utf-8?B?bXU0L01HWkZGMjQ0bFpTbVhrUHVGRDJPRXVUQ2dJR3dPS1FvTWx0VzBuOEFr?= =?utf-8?B?czBlMTVBTVJoNTVIeityZ1poTDBoOVRWY1ZlR05xaU1UdGdXamZPUW9Zc1kv?= =?utf-8?B?bStmRjhqSS96MmhSUVJ5czdKSHJqRmhzYWJ6Vnk4ZUpOUlhNKzZMdnhabkJK?= =?utf-8?B?UGtnaENhNmI3WTByWE5jdmtzcVBIcE5PVHBNZTAvUElUYlg3YnhSd01kUTVs?= =?utf-8?B?cE4rU0VwcjVaa0FKVDVXU3lpK3oxQmx2SHY3SkIyNUdBMUt6emYrTmVGNjFW?= =?utf-8?B?MkFkMmtWV3pqUjU4VGdZQ3pqREVkN3JFbjA1b0QrcGdoRjEwc0xhSWlPTVVW?= =?utf-8?B?cG9MZmhteElQKzRSZSsrRXF3T0gzck5TZ1d2QTZNRDlSZ3UrQlE3cW5aKy84?= =?utf-8?B?MGdhamJUR1hvTUhWdE1rL29SNEtUSXFtaG03ekM5MitqM0hvV3pWTkJZZEZP?= =?utf-8?B?SDZHbjVYQnFxanNYay82S2d2RzJKeUJEeDU0cmU1WTc2VlMveVRWNzVGenhB?= =?utf-8?B?L25GaW53cWV2djNaYnQ4U3VsNTZmaVVWTnhtWmY0YlVJa0QyanVmR2dHOFd2?= =?utf-8?B?RkhkMUNmUkM2MDB2RnhtRTVpZU1jWENtT3FoVUFKMFZUR2N3UHV6czlwd0d1?= =?utf-8?B?SGFCYkVoR3E0T01vMndDWDlFdTdGVFZYcnBvdEVzSDY4ZDc0S0RoSC9Dd2xT?= =?utf-8?B?eDNFZFpZMkthTENVK20vOWtmeHF0aUpRRy9kUU1mTmVaTE9CTnlzSGt5YUMr?= =?utf-8?B?TUFCM3EyQ1FicEdGdVVMM05tOElqdzBwbXdmS0Y1Tm1YdkgwYXd2aXJuQ2VK?= =?utf-8?B?Q050bUVZMjByT09yanN2RUVpMXF0N2g0bHViR2g0RCtjckozZ2MrbUhiUUJZ?= =?utf-8?B?V1BKdTJCTlQxWnhGUDVXYXE1YmFnRUovb3dxRGhRWnI2UC95UTMzZlVQNlU4?= =?utf-8?B?czJkQTNPSk92cXBSMEgwN0xObzcvTnFuSzlXWTFPazlNeVFuMk9FRUx0Q3pw?= =?utf-8?B?L3JlbldHd0xtM0tHL0kvTmJzOGpWYVVpQTV3MW0xRURyWTB5ZHJPVVN3NnZI?= =?utf-8?B?dHNvVnZPd2Y3SlNwemZ6NDRRc20rUWFBa2pwc3pacXcxekYrdnZVMktTcWVu?= =?utf-8?B?dmkwMlhISHFROGJTb1hTYWloSnVTTWhaR0NhQXdlQTlUMko0WFRZcXhXQjJJ?= =?utf-8?B?Qkw3Q3QvN3MvRG5WMkpvei9nTEJmR3VHLzVoZEFwS2dwblJkVkVtMG9kd1Ri?= =?utf-8?B?RmtFc3I3c2Y1OVRRS3YyUFFVeTVycnNya29tTitmWkFnTC9vcDAxUUhheUhY?= =?utf-8?B?NE9qUUxnUHl2NWJsVllJZk4vNnBod2dWWnVaaXkvUEgveGJINnJNaGpDM201?= =?utf-8?B?VHhBLzdCQzE1TW5aTzlGblFvVkZBbE0rRjNNZDJuY2ZZaVd6RW1jUytHY1du?= =?utf-8?B?WGFHeDJIZFFmMlpWZVZsUTdBdjlKL1NnU3Vsa0d5K2JIM1pFOEVZcGdtYUxK?= =?utf-8?B?bzFucDlKZzB0WEUrRE9DSitZbjk4RkJvQ3Rua0pzcG9jVTU5aXBXOGtKa3l3?= =?utf-8?B?THFXNDZ4TjIramYwUDBUdW4rUmRjaGUwV2w0eWRaWHBwa2s4OHhJKytnWThO?= =?utf-8?B?ZGFMSlBmTCtVTDBwVzBBVjUvcDlVa3VFZHpldzh4L20raitlRUFjTnV0U1VF?= =?utf-8?B?VWVvNDlBVlFsVk1tTTcyNU12NFpqbExSejJmZmZhd1hmVS9FNXlFR0plV25J?= =?utf-8?B?WDhZLzZVMlZUYU1zOWJzVStHS3RHZzVNMjRTdE1yc3JuaElYL3dNSVhWQWh5?= =?utf-8?B?bFAvY3dwdVVQZ2MxdlhqVjRjUGM3azhYaWpyci96N0RtVGxkaVllWW55R2xJ?= =?utf-8?B?K2xodVl0cG13bTk2dWxZWEZSZmVmSHArQXlJVE1jV3Z2UEE0QXdtdFRNb1pt?= =?utf-8?B?REpldW9zWDd1MXhUN2l4RS9aR0tpaDNnNVZibGYrUWlCUFNYQ1hZNnh0U0N5?= =?utf-8?Q?je6h4U?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR11MB5573.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(38070700021); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TXJzNkVtK3dJTk5hUExsQWpuZ0VoWHNHMk5IL3AwZGRWbXFqejVET2dlbjQx?= =?utf-8?B?WCtmZlhsaFJHcFhrTVZzUmdvYjU0YXdDMWZHOE9OdkNSZkFlK25ZRG5Cb0VN?= =?utf-8?B?enJFVlFZMXg1cGI2bHlFYU1Wd3IyWmh2T2pKL0xEemZPb3p4N2JyRXFkT1ZX?= =?utf-8?B?V1lWeTVva0ZXVklCUXM1VUJLVjN1NmYxaTFMY1p5dW54dmtvMnFUdWE3N2Fu?= =?utf-8?B?NDdDNVhzcXErNXI3SGdFVFhZNXhIV0xzamIwMGFRWU9TanVseEk3V0V5VVI2?= =?utf-8?B?Yi9WVGJOZEx3OTdFNEp4S3ZER2NuSEIvbXFDSnRWUm1Va0VwN0U0OFVCUmpE?= =?utf-8?B?aGlSaWVLRVdqR0MxMEhFNFJlTG14TEJRY3BmaC8ybG56aG5QMmxmekhQbG5t?= =?utf-8?B?UmMyTTlHNktKLy9DdW5IMVNVdWNUM3pZcG9ZY25lZ282Z0Q2R294aWwrZ3Br?= =?utf-8?B?aE4va2N4N3BxMGxWNkIzSWpaWFdjTWROaGk4YmZIUkxYNTlXVy9XVEJYVUlm?= =?utf-8?B?bnZ0VlhiVmw5ckY3R0FSKzlneXF1aXhYVGQrRnhCb2xkQVhpSDBBM0tlK3hS?= =?utf-8?B?V0l6d0ZtUXh6am50Q1ZsNFkwYk40anZtUTIxTURDc0ZRR2ZiMGlGaHYxU0cv?= =?utf-8?B?N1ZDT3c0SXNzWmtsTWg3dDN2bG5VdW1lcVFDWlpDSXdBMTRuc2FTaThPdTJw?= =?utf-8?B?cHc3Y2RYN0gyRzM2cUhtRjFIaDVPRFU2Vk8xc2tkZnV2S2ljcUE1ZzBnSnpj?= =?utf-8?B?ajVnNHViS0o3SVJIMFBQTFFINFRoNlltR052cWR2cGtqdno2WFZocjdQQktX?= =?utf-8?B?dXZ6OThXOC9nYVdPd0FyTlR6ajlqNFhNa3I5dGZxZzN1UVN2VnhXU1doZ0hp?= =?utf-8?B?a3lzazBRZkM4cTFpNnV1QUxJWGc3TXpIcFFSYjMvLy9NcWIzZHlXZm91Z2xH?= =?utf-8?B?a0JQSFNvZGRTV081M2lwZDhteDVhNjBnNVFzeXBKY3dYdTkxL3FrVTZVVWxZ?= =?utf-8?B?cnIxbElyWk8vZUdKYkRxYmNLeS9BUkJrY1VHMjhweDFQUTVhNzA4bHBTNXZh?= =?utf-8?B?Q0hLQWgvUkROcFpiaE9tMEJpZGlNbGRMTld6VmROd3hYVXpjck51K0xSTk9v?= =?utf-8?B?MUxRQnM4SlJsTHJwQ2dzZVdLcHRJc0RrZnl4dW9zK2tVbXNDQks1VjZieFJB?= =?utf-8?B?bkNUaEo3cmZuaUlVeTFndE9yWnkwKzFRcmpyVkJUUSt5Y0NVM0lVNkcrYm9j?= =?utf-8?B?OG9wc1M5STB4SW9sUjZ0STc3LytMR1oxK0pnNld2UjVSSElGMThXU0plRnJR?= =?utf-8?B?WGZsUkx0VzJnRnpGb1JaU3B5dVAvdkptWENpanozempNdWthbmJWOTNxLzNO?= =?utf-8?B?ajBlcUZKTmNEZlFnaUVnZXYzNlptbzVmYWNvOTEvRWxEZTlpLzdPVnRJSFNP?= =?utf-8?B?WGEzdVlkdkEraVNtb1ZYenJjVHZlZU13VU03UEt6SEpBVDFyTkhqd2xEL1Fs?= =?utf-8?B?dm9XV1ZLN0YxOU9yZjJCQXM5aksrS2hFSlZPTjBKRXBpRUdMS2FlVkt2RU9K?= =?utf-8?B?S2s2clV3TDlGL0dGZGc0dkQ2ZHdFeEViUzZKV2l2WFZJRzc1NllQRWwvYitS?= =?utf-8?B?T0V0dmF2K3luZGRtKy9QNDZrMjFmYk1aNlRVVi9WVm01eXlSa0k1VjMwbnFX?= =?utf-8?B?UHFzMWRnbEwybVd5MFJPWGlyQ3BMY0wwb0FWc0thR2I2MUF1VC9LbmV3LzJq?= =?utf-8?B?OFRPb0V3YWM2N0Z5eUJzZGtaY2xlb2plTkNDMVhHdjFDaTVnVTdWVUVTMFBL?= =?utf-8?B?SmdjOVdvN2Vvamh0RWpUOFZZbjVaaFhUT3VyZU13QjJqQlVuRi9JQjJKMERN?= =?utf-8?B?MmU0bFNNdUxVdDk0S3JqRE5ZMnRGbysxN3Q4L1FPQWsvaVlXYUxGZUg5bU9w?= =?utf-8?B?UFc3R2FqZjBHNVBLNHRZbUxQL0VuR3A3Q1JnTlhmK2FERXJQbndiZHlpYU9C?= =?utf-8?B?aE43T1ovWUR5VVNVamFJT2dhTENZU1RXVkR4WllSRzcwQm1VZXFQNnZhSElC?= =?utf-8?B?cTlJU01oZDhnU25UOFE5Z2JtaWhXYk5FZHlwcVlFT2IxNlVkemlaNzAzVEsw?= =?utf-8?B?MVVHVXd2aGpsZFc2VkY0dms5U2FKd3JwdDVvdTU5VjJTd3BBUFBnNlVqNTdN?= =?utf-8?B?QUNiQURJS2U3Z21rZGM5czNzK0NwNlVXZDJjN3ZIOHVYQkE0R1lhZ1Iva2Nw?= =?utf-8?B?Q0EzT1BxMDVnWWNxUG16bWx4bGkvTXUxL0Ywd1duRjFEaUk0ME5XblU3emtQ?= =?utf-8?B?N1l1UUg4SFNIWDFiOGtGTkp0SHIvUVVLRFNGcHM4SU5aZE9LTmJCQlQ3YUx0?= =?utf-8?Q?4EJpQ9l9DvMKw/Ds=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <1AEFCDC87A1A1D448B4C34672757E023@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR11MB5573.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d5915220-e9e6-4969-3a09-08de52ea0ffd X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jan 2026 21:23:57.6969 (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: Mf0xF9a9ntjOIarV1BtXcqxYpyqMiH3Rsf34YWkl0JyKgtc9W+wGJOpkqG22sNsu/aqNfRa5b64ZV2rZF4c+xlGywub8U8+aJFwXV29ZJ4U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR11MB7023 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" T24gTW9uLCAyMDI2LTAxLTEyIGF0IDE4OjUyIC0wODAwLCBNYXR0aGV3IEJyb3N0IHdyb3RlOgo+ IEludHJvZHVjZSBjb250ZXh0LWJhc2VkIGludmFsaWRhdGlvbiBzdXBwb3J0IHRvIHRoZSBHdUMg VExCCj4gaW52YWxpZGF0aW9uCj4gYmFja2VuZC4gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBpdGVy YXRpbmcgb3ZlciBlYWNoIGV4ZWMgcXVldWUgcGVyIEdUCj4gd2l0aGluIGEgVk0sIHNraXBwaW5n IGluYWN0aXZlIHF1ZXVlcywgYW5kIGlzc3VpbmcgYSBjb250ZXh0LWJhc2VkCj4gKEd1Qwo+IElE KSBIMkcgVExCIGludmFsaWRhdGlvbi4gQWxsIEgyRyBtZXNzYWdlcywgZXhjZXB0IHRoZSBmaW5h bCBvbmUsIGFyZQo+IHNlbnQgd2l0aCBhbiBpbnZhbGlkIHNlcW5vLCB3aGljaCB0aGUgRzJIIGhh bmRsZXIgZHJvcHMgdG8gZW5zdXJlIHRoZQo+IFRMQiBpbnZhbGlkYXRpb24gZmVuY2UgaXMgb25s eSBzaWduYWxlZCBvbmNlIGFsbCBIMkcgbWVzc2FnZXMgYXJlCj4gY29tcGxldGVkLgo+IAo+IEEg d2F0ZXJtYXJrIG1lY2hhbmlzbSBpcyBhbHNvIGFkZGVkIHRvIHN3aXRjaCBiZXR3ZWVuIGNvbnRl eHQtYmFzZWQKPiBUTEIKPiBpbnZhbGlkYXRpb25zIGFuZCBmdWxsIGRldmljZS13aWRlIGludmFs aWRhdGlvbnMsIGFzIHRoZSByZXR1cm4gb24KPiBpbnZlc3RtZW50IGZvciBjb250ZXh0LWJhc2Vk IGludmFsaWRhdGlvbiBkaW1pbmlzaGVzIHdoZW4gbWFueSBleGVjCj4gcXVldWVzIGFyZSBtYXBw ZWQuCj4gCj4gdjI6Cj4gwqAtIEZpeCBjaGVja3BhdGNoIHdhcm5pbmdzCj4gdjM6Cj4gwqAtIFJl YmFzZSBvbiBQUkwKPiDCoC0gVXNlIHJlZiBjb3VudGluZyB0byBhdm9pZCByYWNpbmcgd2l0aCBk ZXJlZ2lzdGVycwo+IHY0Ogo+IMKgLSBFeHRyYSBicmFjZXMgKFN0dWFydCkKPiDCoC0gVXNlIHBl ciBHVCBsaXN0IChDSSkKPiDCoC0gUmVvcmRlciBwdXQKPiAKPiBTaWduZWQtb2ZmLWJ5OiBNYXR0 aGV3IEJyb3N0IDxtYXR0aGV3LmJyb3N0QGludGVsLmNvbT4KPiAtLS0KPiDCoGRyaXZlcnMvZ3B1 L2RybS94ZS94ZV9ndWNfdGxiX2ludmFsLmMgfCAxNDUKPiArKysrKysrKysrKysrKysrKysrKysr KysrLQo+IMKgMSBmaWxlIGNoYW5nZWQsIDE0MSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygt KQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3RsYl9pbnZhbC5j Cj4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3RsYl9pbnZhbC5jCj4gaW5kZXggMDcwZDJl MmNiN2M5Li5jZWQ1OGY0NmY4NDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hl X2d1Y190bGJfaW52YWwuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfdGxiX2lu dmFsLmMKPiBAQCAtNiwxNSArNiwxOSBAQAo+IMKgI2luY2x1ZGUgImFiaS9ndWNfYWN0aW9uc19h YmkuaCIKPiDCoAo+IMKgI2luY2x1ZGUgInhlX2RldmljZS5oIgo+ICsjaW5jbHVkZSAieGVfZXhl Y19xdWV1ZS5oIgo+ICsjaW5jbHVkZSAieGVfZXhlY19xdWV1ZV90eXBlcy5oIgo+IMKgI2luY2x1 ZGUgInhlX2d0X3N0YXRzLmgiCj4gwqAjaW5jbHVkZSAieGVfZ3RfdHlwZXMuaCIKPiDCoCNpbmNs dWRlICJ4ZV9ndWMuaCIKPiDCoCNpbmNsdWRlICJ4ZV9ndWNfY3QuaCIKPiArI2luY2x1ZGUgInhl X2d1Y19leGVjX3F1ZXVlX3R5cGVzLmgiCj4gwqAjaW5jbHVkZSAieGVfZ3VjX3RsYl9pbnZhbC5o Igo+IMKgI2luY2x1ZGUgInhlX2ZvcmNlX3dha2UuaCIKPiDCoCNpbmNsdWRlICJ4ZV9tbWlvLmgi Cj4gwqAjaW5jbHVkZSAieGVfc2EuaCIKPiDCoCNpbmNsdWRlICJ4ZV90bGJfaW52YWwuaCIKPiAr I2luY2x1ZGUgInhlX3ZtLmgiCj4gwqAKPiDCoCNpbmNsdWRlICJyZWdzL3hlX2d1Y19yZWdzLmgi Cj4gwqAKPiBAQCAtMTU2LDEwICsxNjAsMTYgQEAgc3RhdGljIGludCBzZW5kX3RsYl9pbnZhbF9w cGd0dChzdHJ1Y3QgeGVfZ3VjCj4gKmd1YywgdTMyIHNlcW5vLCB1NjQgc3RhcnQsCj4gwqB7Cj4g wqAjZGVmaW5lIE1BWF9UTEJfSU5WQUxJREFUSU9OX0xFTsKgwqDCoMKgwqDCoMKgNwo+IMKgwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZ3QgKmd0ID0gZ3VjX3RvX2d0KGd1Yyk7Cj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IHhlX2RldmljZSAqeGUgPSBndWNfdG9feGUoZ3VjKTsKPiDCoMKgwqDCoMKg wqDCoMKgdTMyIGFjdGlvbltNQVhfVExCX0lOVkFMSURBVElPTl9MRU5dOwo+IMKgwqDCoMKgwqDC oMKgwqB1NjQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7Cj4gwqDCoMKgwqDCoMKgwqDCoGludCBsZW4g PSAwLCBlcnI7Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqB4ZV9ndF9hc3NlcnQoZ3QsICh0eXBlID09 IFhFX0dVQ19UTEJfSU5WQUxfUEFHRV9TRUxFQ1RJVkUgJiYKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICF4ZS0+aW5mby5oYXNfY3R4X3RsYl9pbnZh bCkgfHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHR5cGUgPT0g WEVfR1VDX1RMQl9JTlZBTF9QQUdFX1NFTEVDVElWRV9DVFggJiYKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZS0+aW5mby5oYXNfY3R4X3RsYl9pbnZhbCkpOwo+ ICsKPiDCoMKgwqDCoMKgwqDCoMKgYWN0aW9uW2xlbisrXSA9IFhFX0dVQ19BQ1RJT05fVExCX0lO VkFMSURBVElPTjsKPiDCoMKgwqDCoMKgwqDCoMKgYWN0aW9uW2xlbisrXSA9ICFwcmxfc2EgPyBz ZXFubyA6Cj4gVExCX0lOVkFMSURBVElPTl9TRVFOT19JTlZBTElEOwo+IMKgwqDCoMKgwqDCoMKg wqBpZiAoIWd0X3RvX3hlKGd0KS0+aW5mby5oYXNfcmFuZ2VfdGxiX2ludmFsIHx8Cj4gQEAgLTE2 OCw5ICsxNzgsMTEgQEAgc3RhdGljIGludCBzZW5kX3RsYl9pbnZhbF9wcGd0dChzdHJ1Y3QgeGVf Z3VjCj4gKmd1YywgdTMyIHNlcW5vLCB1NjQgc3RhcnQsCj4gwqDCoMKgwqDCoMKgwqDCoH0gZWxz ZSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgbm9ybWFsaXplX2xlbiA9 IG5vcm1hbGl6ZV9pbnZhbGlkYXRpb25fcmFuZ2UoZ3QsCj4gJnN0YXJ0LAo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgCj4gJmVuZCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgbmVlZF9m bHVzaCA9ICFwcmxfc2EgJiYKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHNlcW5vICE9IFRMQl9JTlZBTElEQVRJT05fU0VRTk9fSU5WQUxJRDsKPiDCoAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRmx1c2ggb24gTlVMTCBjYXNlLCBN ZWRpYSBpcyBub3QgcmVxdWlyZWQgdG8KPiBtb2RpZnkgZmx1c2ggZHVlIHRvIG5vIFBQQyBzbyBO T1AgKi8KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWN0aW9uW2xlbisrXSA9IE1B S0VfSU5WQUxfT1BfRkxVU0godHlwZSwgIXBybF9zYSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGFjdGlvbltsZW4rK10gPSBNQUtFX0lOVkFMX09QX0ZMVVNIKHR5cGUsCj4gbmVl ZF9mbHVzaCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhY3Rpb25bbGVuKytd ID0gaWQ7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhY3Rpb25bbGVuKytdID0g bG93ZXJfMzJfYml0cyhzdGFydCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBh Y3Rpb25bbGVuKytdID0gdXBwZXJfMzJfYml0cyhzdGFydCk7Cj4gQEAgLTE4MSw4ICsxOTMsMTAg QEAgc3RhdGljIGludCBzZW5kX3RsYl9pbnZhbF9wcGd0dChzdHJ1Y3QgeGVfZ3VjCj4gKmd1Yywg dTMyIHNlcW5vLCB1NjQgc3RhcnQsCj4gwqAjdW5kZWYgTUFYX1RMQl9JTlZBTElEQVRJT05fTEVO Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgZXJyID0gc2VuZF90bGJfaW52YWwoZ3VjLCBhY3Rpb24s IGxlbik7Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFlcnIgJiYgcHJsX3NhKQo+ICvCoMKgwqDCoMKg wqDCoGlmICghZXJyICYmIHBybF9zYSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB4ZV9ndF9hc3NlcnQoZ3QsIHNlcW5vICE9Cj4gVExCX0lOVkFMSURBVElPTl9TRVFOT19JTlZB TElEKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IHNlbmRfcGFnZV9y ZWNsYWltKGd1Yywgc2Vxbm8sCj4geGVfc2FfYm9fZ3B1X2FkZHIocHJsX3NhKSk7Cj4gK8KgwqDC oMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZXJyOwo+IMKgfQo+IMKgCj4gQEAg LTIwMSw2ICsyMTUsMTE0IEBAIHN0YXRpYyBpbnQgc2VuZF90bGJfaW52YWxfYXNpZF9wcGd0dChz dHJ1Y3QKPiB4ZV90bGJfaW52YWwgKnRsYl9pbnZhbCwgdTMyIHNlcW5vLAo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgWEVfR1VDX1RMQl9JTlZBTF9QQUdFX1NFTEVDVElWRSwKPiBwcmxfc2EpOwo+IMKgfQo+IMKg Cj4gK3N0YXRpYyBpbnQgc2VuZF90bGJfaW52YWxfY3R4X3BwZ3R0KHN0cnVjdCB4ZV90bGJfaW52 YWwgKnRsYl9pbnZhbCwKPiB1MzIgc2Vxbm8sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBzdGFydCwgdTY0 IGVuZCwgdTMyIGFzaWQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc3ViYWxsb2MgKnBybF9z YSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9ndWMgKmd1YyA9IHRsYl9pbnZhbC0+ cHJpdmF0ZTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IGd1Y190b194 ZShndWMpOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9leGVjX3F1ZXVlICpxLCAqbmV4dCwg Kmxhc3RfcSA9IE5VTEw7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3ZtICp2bTsKPiArwqDC oMKgwqDCoMKgwqBMSVNUX0hFQUQodGxiX2ludmFsX2xpc3QpOwo+ICvCoMKgwqDCoMKgwqDCoGlu dCBlcnIgPSAwLCBpZCA9IGd1Y190b19ndChndWMpLT5pbmZvLmlkOwo+ICsKPiArwqDCoMKgwqDC oMKgwqBsb2NrZGVwX2Fzc2VydF9oZWxkKCZ0bGJfaW52YWwtPnNlcW5vX2xvY2spOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBpZiAoeGUtPmluZm8uZm9yY2VfZXhlY2xpc3QpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUNBTkNFTEVEOwo+ICsKPiArwqDCoMKgwqDCoMKg wqB2bSA9IHhlX2RldmljZV9hc2lkX3RvX3ZtKHhlLCBhc2lkKTsKPiArwqDCoMKgwqDCoMKgwqBp ZiAoSVNfRVJSKHZtKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBU Ul9FUlIodm0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBkb3duX3JlYWQoJnZtLT5leGVjX3F1ZXVl cy5sb2NrKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoKPiArwqDCoMKgwqDCoMKgwqAgKiBYWFg6 IFJhbmRvbWx5IHBpY2tpbmcgYSB0aHJlc2hvbGQgZm9yIG5vdy4gVGhpcyB3aWxsIG5lZWQKPiB0 byBiZQo+ICvCoMKgwqDCoMKgwqDCoCAqIHR1bmVkIGJhc2VkIG9uIGV4cGVjdGVkIFVNRCBxdWV1 ZSBjb3VudHMgYW5kIHBlcmZvcm1hbmNlCj4gcHJvZmlsaW5nLgo+ICvCoMKgwqDCoMKgwqDCoCAq Lwo+ICsjZGVmaW5lIEVYRUNfUVVFVUVfQ09VTlRfRlVMTF9USFJFU0hPTETCoMKgwqDCoMKgwqDC oMKgOAo+ICvCoMKgwqDCoMKgwqDCoGlmICh2bS0+ZXhlY19xdWV1ZXMuY291bnRbaWRdID49Cj4g RVhFQ19RVUVVRV9DT1VOVF9GVUxMX1RIUkVTSE9MRCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB1MzIgYWN0aW9uW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBYRV9HVUNfQUNUSU9OX1RMQl9JTlZBTElEQVRJT04sCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFubywKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE1BS0VfSU5WQUxfT1Ao WEVfR1VDX1RMQl9JTlZBTF9GVUxMKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IHNlbmRfdGxiX2lu dmFsKGd1YywgYWN0aW9uLAo+IEFSUkFZX1NJWkUoYWN0aW9uKSk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyX3VubG9jazsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKyN1 bmRlZiBFWEVDX1FVRVVFX0NPVU5UX0ZVTExfVEhSRVNIT0xECj4gKwo+ICvCoMKgwqDCoMKgwqDC oC8qCj4gK8KgwqDCoMKgwqDCoMKgICogTW92ZSBleGVjIHF1ZXVlcyB0byBhIHRlbXBvcmFyeSBs aXN0IHRvIGlzc3VlCj4gaW52YWxpZGF0aW9ucy4gVGhlIGV4ZWMKPiArwqDCoMKgwqDCoMKgwqAg KiBxdWV1ZSBtdXN0IGFjdGl2ZSBhbmQgYSByZWZlcmVuY2UgbXVzdCBiZSB0YWtlbiB0byBwcmV2 ZW50Cj4gY29uY3VycmVudAo+ICvCoMKgwqDCoMKgwqDCoCAqIGRlcmVnaXN0cmF0aW9ucy4KPiAr wqDCoMKgwqDCoMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDCoCAqIExpc3QgbW9kaWZpY2F0aW9uIGlz IHNhZmUgYmVjYXVzZSB3ZSBob2xkICd2bS0KPiA+ZXhlY19xdWV1ZXMubG9jaycgZm9yCj4gK8Kg wqDCoMKgwqDCoMKgICogcmVhZGluZywgd2hpY2ggcHJldmVudHMgZXh0ZXJuYWwgbW9kaWZpY2F0 aW9ucy4gVXNpbmcgYQo+IHBlci1HVCBsaXN0Cj4gK8KgwqDCoMKgwqDCoMKgICogaXMgYWxzbyBz YWZlIHNpbmNlICd0bGJfaW52YWwtPnNlcW5vX2xvY2snIGVuc3VyZXMgbm8KPiBvdGhlciBHVCB1 c2Vycwo+ICvCoMKgwqDCoMKgwqDCoCAqIGNhbiBlbnRlciB0aGlzIGNvZGUgcGF0aC4KPiArwqDC oMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo cSwgbmV4dCwgJnZtLT5leGVjX3F1ZXVlcy5saXN0W2lkXSwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdm1fZXhlY19xdWV1 ZV9saW5rKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChxLT5vcHMtPmFj dGl2ZShxKSAmJgo+IHhlX2V4ZWNfcXVldWVfZ2V0X3VubGVzc196ZXJvKHEpKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsYXN0X3EgPSBxOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlzdF9tb3ZlX3Rh aWwoJnEtPnZtX2V4ZWNfcXVldWVfbGluaywKPiAmdGxiX2ludmFsX2xpc3QpOwoKSXQgd291bGQg YmUgbmljZSBpZiB3ZSBjb3VsZCBjb25zb2xpZGF0ZSB0aGlzIGludG8gYSBzaW5nbGUgbGlzdApp bnN0ZWFkIG9mIG1vdmluZyB0aGluZ3MgYXJvdW5kIGxpa2UgdGhpcywgYnV0IEkgcmVhbGl6ZSB0 aGlzIG1ha2VzIGl0CmVhc2llciB0byB0cmFjayB0aGUgbGFzdCBhY3RpdmUgcXVldWUgc28gbm8g aXNzdWUuLi4KCkkgZG9uJ3Qgc2VlIGFueXRoaW5nIGJsb2NraW5nIHVzIGZyb20gZGVyZWdpc3Rl cmluZyBhIHF1ZXVlIHRob3VnaAphZnRlciBpdCBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgdGxiX2lu dmFsX2xpc3QgaGVyZS4gU2hvdWxkIHdlIGFkZCB0aGF0CnNlcW5vX2xvY2sgaW4gdGhlIHJlZ2lz dGVyL2RlcmVnaXN0ZXIgcm91dGluZXMgdG8gYmUgc2FmZT8gT3IgbWF5YmUKYmxvY2sgdW50aWwg dGxiX2ludmFsX2xpc3QgaXMgZW1wdHk/IE9yIGlmIEknbSBtaXNzaW5nIGl0IG90aGVyd2lzZSwK aG93IGFyZSB5b3UgcHJldmVudGluZyB0aGUgZGVyZWdpc3RyYXRpb24gYWZ0ZXIgdGhpcyBpcyBv biB0aGUgbGlzdD8KClRoYW5rcywKU3R1YXJ0Cgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWxhc3Rf cSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKiBXZSBjYW4ndCBicmVhayBmZW5jZSBvcmRlcmluZyBmb3IgVExC IGludmFsaWRhdGlvbgo+IGpvYnMsIGlmCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqIFRMQiBpbnZhbGlkYXRpb25zIGFyZSBpbmZsaWdodCBpc3N1ZSBhIGR1bW15Cj4gaW52YWxp ZGF0aW9uIHRvCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIG1haW50YWluIG9y ZGVyaW5nLiBOb3IgY2FuIHdlIG1vdmUgc2FmZWx5IHRoZQo+IHNlcW5vX3JlY3Ygd2hlbgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiByZXR1cm5pbmcgLUVDQU5DRUxFRCBpZiBU TEIgaW52YWxpZGF0aW9ucyBhcmUgaW4KPiBmbGlnaHQuIFVzZQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKiBHR1RUIGludmFsaWRhdGlvbiBhcyBkdW1teSBpbnZhbGlkYXRpb24g Z2l2ZW4gQVNJRAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBpbnZhbGlkYXRp b25zIGFyZSB1bnN1cHBvcnRlZCBoZXJlLgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHhlX3RsYl9pbnZhbF9p ZGxlKHRsYl9pbnZhbCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBlcnIgPSAtRUNBTkNFTEVEOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl cnIgPSBzZW5kX3RsYl9pbnZhbF9nZ3R0KHRsYl9pbnZhbCwgc2Vxbm8pOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycl91bmxvY2s7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ ICsKPiArwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocSwgbmV4dCwgJnRs Yl9pbnZhbF9saXN0LAo+IHZtX2V4ZWNfcXVldWVfbGluaykgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX3N1YmFsbG9jICpfX3BybF9zYSA9IE5VTEw7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBfX3NlcW5vID0gVExCX0lOVkFMSURBVElP Tl9TRVFOT19JTlZBTElEOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgdHlw ZSA9IFhFX0dVQ19UTEJfSU5WQUxfUEFHRV9TRUxFQ1RJVkVfQ1RYOwo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfYXNzZXJ0KHhlLCBxLT52bSA9PSB2bSk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJyKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byB1bnJlZjsKPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChsYXN0X3EgPT0gcSkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX19wcmxfc2EgPSBwcmxfc2E7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3NlcW5vID0gc2Vx bm87Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IHNlbmRfdGxiX2ludmFsX3BwZ3R0KGd1YywgX19zZXFu bywgc3RhcnQsIGVuZCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBxLT5ndWMtPmlkLCB0 eXBlLAo+IF9fcHJsX3NhKTsKPiArCj4gK3VucmVmOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBNdXN0IGFsd2F5 cyByZXR1cm4gZXhlYyBxdWV1ZSB0byBvcmlnaW5hbCBsaXN0IC8KPiBkcm9wCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHJlZmVyZW5jZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlzdF9tb3Zl X3RhaWwoJnEtPnZtX2V4ZWNfcXVldWVfbGluaywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmdm0tPmV4ZWNfcXVldWVzLmxpc3Rb aWRdKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfZXhlY19xdWV1ZV9wdXQo cSk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArZXJyX3VubG9jazoKPiArwqDCoMKgwqDCoMKg wqB1cF9yZWFkKCZ2bS0+ZXhlY19xdWV1ZXMubG9jayk7Cj4gK8KgwqDCoMKgwqDCoMKgeGVfdm1f cHV0KHZtKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGVycjsKPiArfQo+ICsKPiDCoHN0 YXRpYyBib29sIHRsYl9pbnZhbF9pbml0aWFsaXplZChzdHJ1Y3QgeGVfdGxiX2ludmFsICp0bGJf aW52YWwpCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9ndWMgKmd1YyA9IHRsYl9p bnZhbC0+cHJpdmF0ZTsKPiBAQCAtMjI4LDcgKzM1MCw3IEBAIHN0YXRpYyBsb25nIHRsYl9pbnZh bF90aW1lb3V0X2RlbGF5KHN0cnVjdAo+IHhlX3RsYl9pbnZhbCAqdGxiX2ludmFsKQo+IMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gaHdfdGxiX3RpbWVvdXQgKyAyICogZGVsYXk7Cj4gwqB9Cj4gwqAK PiAtc3RhdGljIGNvbnN0IHN0cnVjdCB4ZV90bGJfaW52YWxfb3BzIGd1Y190bGJfaW52YWxfb3Bz ID0gewo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHhlX3RsYl9pbnZhbF9vcHMgZ3VjX3RsYl9pbnZh bF9hc2lkX29wcyA9IHsKPiDCoMKgwqDCoMKgwqDCoMKgLmFsbCA9IHNlbmRfdGxiX2ludmFsX2Fs bCwKPiDCoMKgwqDCoMKgwqDCoMKgLmdndHQgPSBzZW5kX3RsYl9pbnZhbF9nZ3R0LAo+IMKgwqDC oMKgwqDCoMKgwqAucHBndHQgPSBzZW5kX3RsYl9pbnZhbF9hc2lkX3BwZ3R0LAo+IEBAIC0yMzcs NiArMzU5LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfdGxiX2ludmFsX29wcwo+IGd1Y190 bGJfaW52YWxfb3BzID0gewo+IMKgwqDCoMKgwqDCoMKgwqAudGltZW91dF9kZWxheSA9IHRsYl9p bnZhbF90aW1lb3V0X2RlbGF5LAo+IMKgfTsKPiDCoAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHhl X3RsYl9pbnZhbF9vcHMgZ3VjX3RsYl9pbnZhbF9jdHhfb3BzID0gewo+ICvCoMKgwqDCoMKgwqDC oC5nZ3R0ID0gc2VuZF90bGJfaW52YWxfZ2d0dCwKPiArwqDCoMKgwqDCoMKgwqAuYWxsID0gc2Vu ZF90bGJfaW52YWxfYWxsLAo+ICvCoMKgwqDCoMKgwqDCoC5wcGd0dCA9IHNlbmRfdGxiX2ludmFs X2N0eF9wcGd0dCwKPiArwqDCoMKgwqDCoMKgwqAuaW5pdGlhbGl6ZWQgPSB0bGJfaW52YWxfaW5p dGlhbGl6ZWQsCj4gK8KgwqDCoMKgwqDCoMKgLmZsdXNoID0gdGxiX2ludmFsX2ZsdXNoLAo+ICvC oMKgwqDCoMKgwqDCoC50aW1lb3V0X2RlbGF5ID0gdGxiX2ludmFsX3RpbWVvdXRfZGVsYXksCj4g K307Cj4gKwo+IMKgLyoqCj4gwqAgKiB4ZV9ndWNfdGxiX2ludmFsX2luaXRfZWFybHkoKSAtIElu aXQgR3VDIFRMQiBpbnZhbGlkYXRpb24gZWFybHkKPiDCoCAqIEBndWM6IEd1QyBvYmplY3QKPiBA QCAtMjQ4LDggKzM3OSwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHhlX3RsYl9pbnZhbF9vcHMK PiBndWNfdGxiX2ludmFsX29wcyA9IHsKPiDCoHZvaWQgeGVfZ3VjX3RsYl9pbnZhbF9pbml0X2Vh cmx5KHN0cnVjdCB4ZV9ndWMgKmd1YywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4ZV90bGJfaW52YWwgKnRs Yl9pbnZhbCkKPiDCoHsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IGd1 Y190b194ZShndWMpOwo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgdGxiX2ludmFsLT5wcml2YXRlID0g Z3VjOwo+IC3CoMKgwqDCoMKgwqDCoHRsYl9pbnZhbC0+b3BzID0gJmd1Y190bGJfaW52YWxfb3Bz Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoeGUtPmluZm8uaGFzX2N0eF90bGJfaW52YWwpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRsYl9pbnZhbC0+b3BzID0gJmd1Y190bGJf aW52YWxfY3R4X29wczsKPiArwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHRsYl9pbnZhbC0+b3BzID0gJmd1Y190bGJfaW52YWxfYXNpZF9vcHM7Cj4g wqB9Cj4gwqAKPiDCoC8qKgoK