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 3E826FD88E2 for ; Wed, 11 Mar 2026 00:41:15 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 31E2A10E7CF; Wed, 11 Mar 2026 00:41:14 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.b="S0bU8mch"; dkim-atps=neutral Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011030.outbound.protection.outlook.com [52.101.62.30]) by gabe.freedesktop.org (Postfix) with ESMTPS id 96ED810E801; Wed, 11 Mar 2026 00:41:11 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xRErSRhq4BisK9aYSWvC+0EUSsugPrHCenp5J6QcDiyZNjKzowWLFsOf8Fc6nh14EGWWiEr5y3ZeqHJaG6ownEH8ZVPkDmAyikqzVAgB/2DhTfJWT/pEC6KLkao9rFH1Ws/uPslST2yeUkfaSz97c1PdNUanOZbaoCscqjkcITXI5p90LKi8oP+ijmS+C3tYv36sACzCZA+w8aSNdg/NejRFjvY7PrWhVsNsICBwefmQhViQ/+3krBaMx2wMdEEPiuQ+gJZtxQ1cvHFVyg8LHoQsR5NAMN+6ORub0Z+R8heJu8ejbYuGlloN/w8I4DuLVGZ2uBT/HDP4P98vhKz4Lg== 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=+p5wND4XzFYeDwkK1QNKfA3tojggvJOCP04AjuhGX1o=; b=RrPMvFmcjyNKq0bcRgjMlJY+j+xYS/9ZC919LKUlEttMnLHGoRWHqFK/L4WYf7peax0oe8ZpPAXMt+T6o6hxF3bi6jV0ay/vvAOraQurvJK0IRp6nEgHJ6uc/oP5b+1x5lWiJsBaWvliYQa2t5lB03ZKyZli6XwI6XgbtdP3IWoDja4f0z9NrmZQ1OUTGZR4g9Tw1aKCpCZBcB07s8o2r5eP62rgyWeEXk504tydKesXbtTsCtvXltYyZOH2JH3rjl7+8orC1HsX/mZIWIAMgTsgwP+NBXiu/Lt3kz08ghUOGPb10bx1nCgDkTz89p+0sokLmmB8OjO4ZliR0LhFmA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+p5wND4XzFYeDwkK1QNKfA3tojggvJOCP04AjuhGX1o=; b=S0bU8mchVEmIZgyhV0xGZ85ISWHi4iUnnJupGDf0FqaWlHU6QXp1Kg+9rcwr+gyDPmStEPkXa4zRCdm3XVTA+e+Gr/mJQm+vg7P6t90Yvhcfl6RLNwjqnl/vnYh2HmdU5GB6QtqLH8q4C8ohUYDN4meuDaimYY8wxU7o01DI2zcQRsQktlhNYQnig1ik6CHUjiELNm50XaH+aETTDQPlG+5L5pfwgMRXqeS1xP0MbGIN1hzl/ELCKbJQx5xZaB+OKzkRWtT48jvRBUApi/wKeWs5CJy+cjPjhAs8WGsv6oaYKJUdXo6JSJUJnqGCVbuv83sj0mZi7PLyCyfWWUqNbA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6486.namprd12.prod.outlook.com (2603:10b6:8:c5::21) by BN7PPF62A0C9A68.namprd12.prod.outlook.com (2603:10b6:40f:fc02::6d2) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.11; Wed, 11 Mar 2026 00:41:03 +0000 Received: from DS0PR12MB6486.namprd12.prod.outlook.com ([fe80::88a9:f314:c95f:8b33]) by DS0PR12MB6486.namprd12.prod.outlook.com ([fe80::88a9:f314:c95f:8b33%4]) with mapi id 15.20.9700.010; Wed, 11 Mar 2026 00:41:03 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org Cc: Miguel Ojeda , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Dave Airlie , Daniel Almeida , Koen Koning , dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, Nikola Djukic , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Helge Deller , Alex Gaynor , Boqun Feng , John Hubbard , Alistair Popple , Timur Tabi , Edwin Peer , Alexandre Courbot , Andrea Righi , Andy Ritger , Zhi Wang , Balbir Singh , Philipp Stanner , Elle Rhumsaa , alexeyi@nvidia.com, Eliot Courtney , joel@joelfernandes.org, linux-doc@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-fbdev@vger.kernel.org, Joel Fernandes Subject: [PATCH v9 21/23] gpu: nova-core: mm: Add BAR1 memory management self-tests Date: Tue, 10 Mar 2026 20:40:06 -0400 Message-Id: <20260311004008.2208806-22-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260311004008.2208806-1-joelagnelf@nvidia.com> References: <20260311004008.2208806-1-joelagnelf@nvidia.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-ClientProxiedBy: BLAPR03CA0004.namprd03.prod.outlook.com (2603:10b6:208:32b::9) To DS0PR12MB6486.namprd12.prod.outlook.com (2603:10b6:8:c5::21) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB6486:EE_|BN7PPF62A0C9A68:EE_ X-MS-Office365-Filtering-Correlation-Id: 4c4d878d-4db8-4209-702a-08de7f06dfb7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|7416014|376014|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: 2/fHGl3B780mzDfEPm8hDk/LMEnkPsnw23FfcQ2+equwc0Ky8KtKhc7DPCPr+acZW86Y64qJWMJ7zhYwOJtPspYgyN59vrVV6LjRawYFkwvQUkQY9haHFPXikkdhnplEYbNzWEVFNiK+UMWDQt4rN7nZkw9MNBZLvJWfH6QWmvpMWc2zga7C+vnrZAr/vocqfLblqialoRUR56rKWJ2IGDKl7z6IYwgiFpF7zknK/ND2MeW2ZINND0R8ff9ajL98A5+3FgCB3AkKx0LZDP8bSvuTKAzySVoUNjngdLmpRl6LK74987Z7rvAqtj3tdDreODoNjl6ql2o7mbVSd/7KNRnNPIUlbEZ/ODrEodyNXv7zd0vImOXyXoDLSe3GphDA9Ufsr24kc2lbABXYVipv13xgX/Qpn9EvB3oV1S3o5obORNc+Hw37wVy+ElQOMIv+4vtBJGhSLlFwxI6cruHZruMSqmBP9+aBaAtVxwwVTakDLtimxXzMXn9si4wyJww4Yr39xACUZCzmIZCvFiIz8KZPgLAcwqJjZedBpxWVjsZk4MICRM3n+hft3izWiiEEHiRwHnoYM0FonplgdaQ/H99fS4oSW21A1F1hN8vZfH8unE28yTutFmQ+6DXmln1JkF+a9ObVIhiEdu1JJnAeV3t5alm7F2fJtHNImI1UrG7eka6MjQh99voJodrC7vbtLC3QHjsexL2S6jb6VikpEHD5UshPG/3JO0vhpqYC8Jk= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DS0PR12MB6486.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(7416014)(376014)(1800799024)(18002099003)(56012099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cUJ5SzRWUWpZMDdKeDlycTNJTXZJbHVPSER5M2pZSVIvTXhvWEc5TjhZOU1N?= =?utf-8?B?bnlNaTV4M1lkL09OQ2cwUW9XVVBrTkRFclV6cXRLd2RkK1RtV3lvejBGL01H?= =?utf-8?B?eFhtUytVMmxIbXJRMjRBMjBLaXBIZU5XaTJYQ2xVcEptRUdVVDJ3STNjMzdh?= =?utf-8?B?OENoREFValNiaVErUktQWkEzVmc5T3ZqY21YL2VJbjBWVmlldngvK1N3bXZF?= =?utf-8?B?OWNWTFZZNzEyd0xySUlNRGJnY3YxNGNxNDh3TnIzeFV1bk4zajZ2TSt6bDZx?= =?utf-8?B?Ym40YUs3bzFEVW9yUGZFYm1VZU1DMGgwZjlaRWpiRmZhbC9YdVdLa1NsTGhZ?= =?utf-8?B?cUtBZDEwaW1PaGw1NFJSV3RacytsQU00UFM5WVljKzNtN1VGTWRDWGlvZytm?= =?utf-8?B?L2lXQjQxK2pRZFNoVklBbjNYV3VSNHdpYks5UlpxVHUwTlQvNlFKUFJnSE9X?= =?utf-8?B?dDRoTDZmdkdDNjJSQjdQOXN1andLTmxrWEJTU2prZ1UycjZFNmsvdEpmSGNi?= =?utf-8?B?WG1YcGdXTkhHVzBnU3pIV0J3U21TQlJLbWxLMVZCNm5sSmZIVXd0eXZTY0Fw?= =?utf-8?B?c1hMRFZaL3JLWnV2d3lJSDFJYUdUSVR3dzdzVmtBUllmUkRTOElmZEw3WGQx?= =?utf-8?B?VzJUMklXcjJtekE0SElXeGhlR2lqakpLa0FuVUQyODhYSjFORW5wRmxpUVJm?= =?utf-8?B?MlZhemo3dGN0QUVIRU1tcGk3YVJkUXlKVStzTFA1anhScEg4MmcwbHFPSUtv?= =?utf-8?B?N1FiYnM0elovbGVzY1JyZlI5dmsvZ1YwZmszOE9weVhFZ3U0bEhjZ3Q4UXBt?= =?utf-8?B?Yzlpd3lIMlhLWGdLSmhRWnVkOFlCQ0Q3ZzQ2b2MzZGZaTjhRa2JRMzNxRDVI?= =?utf-8?B?U3J0Y1ZtNjR4MDZpM3FycFJoYU1DQUdqOEExUGRXdldJVzJ4a3lYbU54cVNs?= =?utf-8?B?S3FXWDlkMFh4dzVDenlhbFIrTDlVZ0tldERweURzZU1mYUZqbm1yMW1LQmQx?= =?utf-8?B?YzNMMStFejhBc2RZWWpRN0NWb1hWZHVoRzhLMXNIZ1pDNy9TaXZCbE9zY3ZT?= =?utf-8?B?djNIU0EveDd4bE13TE5EcUxoa0pRaFNSQ0JjejFwVE1TSjNoQitSU3RCZlZG?= =?utf-8?B?VTh4emRBNDVaN1pxNjdsZzg3WjRvNklEQWtBQlFoRWg3MWhKYkVYTXl2MjU2?= =?utf-8?B?VWxkUVBJMGNsRE16Y05XcFVZbzdFUTE1VzJIUlBEWlF0aGpjVTRuRnFqT2lY?= =?utf-8?B?VzkxbzZUcDQyeWlKZ0dlbEtON0UxenlNU21ZUTE2dXlOSi9LRThwRmZhWko5?= =?utf-8?B?UmhJbDZkZDMwSWt5Ni90K2I2clFUcGtaemM0a1JsdEFrQXd4d3Z6NHVnMFor?= =?utf-8?B?aUVqTUxYMkdOdVRyenRJdHNGbWdUNVlpNUdVZEgySUVpMk14NFcvQ1BBNzVr?= =?utf-8?B?ZURRYUFzRHNWNUtNMDNUOFgxdGQ3bTZ4MUs2Q2NRZXIwQWhacHpIRm5Id1ZE?= =?utf-8?B?NjVQZGxNaDFxeVpHaExrR2twZmZDSVN3a2NvbHdqVWNZYm84OVo1V3FLWlVu?= =?utf-8?B?U2tsS2NDaGlRK1A3UW5GWldaSXFxTDFkaTduWHRNUWVrOWxxV0xRK1Rnaldp?= =?utf-8?B?TEpUT1Y5Q0ZYcmtoY3JyeVZhekV4eHV6anZrVFlGb0pld0lJdXVFc1liTTJI?= =?utf-8?B?aWExdXRvTjdGUFB6azBPOUZUVTVwbTlRaUhjZHI0UjhDVGxuMjNkdjg3OGcz?= =?utf-8?B?T2pnQTlQZit6R3IvZ0RTK1MwM3BvQUYxdUcvRkY5SnBkRHdndSszMEEzWlor?= =?utf-8?B?NU9EeXJpVnRzNkh4N01kOHpUcEt1Sm15R1dvM29tWTRzMllQOTd0cDdlaHpp?= =?utf-8?B?TzVvRk1QOGl6OHBvRmRvYjJ1aEp2NjUwbFg0WW5mcXRsVnk2TGVTNEN0MVM0?= =?utf-8?B?ZEdnb041V3VwUjd5S0RVMWg3dHVmN1ovOFlTRHFUMFhjeXQ5WGVEa0UvTWtM?= =?utf-8?B?QlVvK0lHRnA1aTRXNVcwNWI5U3BIdGx3bFpSc1lLNDVld2sydGpCbzllcHVU?= =?utf-8?B?M1paN3ordjZEVU1jR002RzRPaXFEdVZadmMxRkZRV1h6algxU0pyNEhIWVJH?= =?utf-8?B?WTFiemdJVTBMY2c2WEZEZGFhNEp3QWxCZjIyM1U0SlFoMEZwd1UyeEw4c1J4?= =?utf-8?B?VlducGlXVFVjcTc0cEFOUCtnbnpWbDNtWDlPUUN3RHU5S2U3Y1V4d0VhV3Qr?= =?utf-8?B?aUhQU2VJaUlhQVF1TXZjUzA0K0YvdkdDVkFtK0lGUEZBeDR6Q2wySytTVXJM?= =?utf-8?B?RDY4TzB4dFI4bitzeG9RSWp6aTgrcEdmOENnZUNrTm5OLytVbDR5UT09?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4c4d878d-4db8-4209-702a-08de7f06dfb7 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6486.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Mar 2026 00:41:03.5247 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1is6MPKzR02o4mZNRDE7wCEirg+7M1PigY211etcDG/q2DDcIKjZ5QT3/p7746/E83PnxWS196xXFGrpCProsA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PPF62A0C9A68 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QWRkIHNlbGYtdGVzdHMgZm9yIEJBUjEgYWNjZXNzIGR1cmluZyBkcml2ZXIgcHJvYmUgd2hlbgpD T05GSUdfTk9WQV9NTV9TRUxGVEVTVFMgaXMgZW5hYmxlZCAoZGVmYXVsdCBkaXNhYmxlZCkuIFRo aXMgcmVzdWx0cyBpbgp0ZXN0aW5nIHRoZSBWbW0sIEdQVSBidWRkeSBhbGxvY2F0b3IgYW5kIEJB UjEgcmVnaW9uIGFsbCBvZiB3aGljaCBzaG91bGQKZnVuY3Rpb24gY29ycmVjdGx5IGZvciB0aGUg dGVzdHMgdG8gcGFzcy4KCkNjOiBOaWtvbGEgRGp1a2ljIDxuZGp1a2ljQG52aWRpYS5jb20+ClNp Z25lZC1vZmYtYnk6IEpvZWwgRmVybmFuZGVzIDxqb2VsYWduZWxmQG52aWRpYS5jb20+Ci0tLQog ZHJpdmVycy9ncHUvbm92YS1jb3JlL0tjb25maWcgICAgICAgIHwgIDEwICsrCiBkcml2ZXJzL2dw dS9ub3ZhLWNvcmUvZHJpdmVyLnJzICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvbm92YS1jb3Jl L2dwdS5ycyAgICAgICAgIHwgIDM4ICsrKysKIGRyaXZlcnMvZ3B1L25vdmEtY29yZS9tbS9iYXJf dXNlci5ycyB8IDI1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdl ZCwgMzA2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ub3ZhLWNvcmUv S2NvbmZpZyBiL2RyaXZlcnMvZ3B1L25vdmEtY29yZS9LY29uZmlnCmluZGV4IDY1MTMwMDdiZjY2 Zi4uMzVkZTU1YWFiY2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9ub3ZhLWNvcmUvS2NvbmZp ZworKysgYi9kcml2ZXJzL2dwdS9ub3ZhLWNvcmUvS2NvbmZpZwpAQCAtMTUsMyArMTUsMTMgQEAg Y29uZmlnIE5PVkFfQ09SRQogCSAgVGhpcyBkcml2ZXIgaXMgd29yayBpbiBwcm9ncmVzcyBhbmQg bWF5IG5vdCBiZSBmdW5jdGlvbmFsLgogCiAJICBJZiBNIGlzIHNlbGVjdGVkLCB0aGUgbW9kdWxl IHdpbGwgYmUgY2FsbGVkIG5vdmFfY29yZS4KKworY29uZmlnIE5PVkFfTU1fU0VMRlRFU1RTCisJ Ym9vbCAiTWVtb3J5IG1hbmFnZW1lbnQgc2VsZi10ZXN0cyIKKwlkZXBlbmRzIG9uIE5PVkFfQ09S RQorCWhlbHAKKwkgIEVuYWJsZSBzZWxmLXRlc3RzIGZvciB0aGUgbWVtb3J5IG1hbmFnZW1lbnQg c3Vic3lzdGVtLiBXaGVuIGVuYWJsZWQsCisJICB0ZXN0cyBhcmUgcnVuIGR1cmluZyBHUFUgcHJv YmUgdG8gdmVyaWZ5IFBSQU1JTiBhcGVydHVyZSBhY2Nlc3MsCisJICBwYWdlIHRhYmxlIHdhbGtp bmcsIGFuZCBCQVIxIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcgZnVuY3Rpb25hbGl0eS4KKworCSAg VGhpcyBpcyBhIHRlc3Rpbmcgb3B0aW9uIGFuZCBpcyBkZWZhdWx0LWRpc2FibGVkLgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvbm92YS1jb3JlL2RyaXZlci5ycyBiL2RyaXZlcnMvZ3B1L25vdmEt Y29yZS9kcml2ZXIucnMKaW5kZXggM2JjMjY0YTA5OWRlLi5iMWFhZmFmZjBjZWUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L25vdmEtY29yZS9kcml2ZXIucnMKKysrIGIvZHJpdmVycy9ncHUvbm92 YS1jb3JlL2RyaXZlci5ycwpAQCAtMTAxLDYgKzEwMSw4IEBAIGZuIHByb2JlKHBkZXY6ICZwY2k6 OkRldmljZTxDb3JlPiwgX2luZm86ICZTZWxmOjpJZEluZm8pIC0+IGltcGwgUGluSW5pdDxTZWxm LCBFCiAKICAgICAgICAgICAgIE9rKHRyeV9waW5faW5pdCEoU2VsZiB7CiAgICAgICAgICAgICAg ICAgZ3B1IDwtIEdwdTo6bmV3KHBkZXYsIGJhci5jbG9uZSgpLCBiYXIuYWNjZXNzKHBkZXYuYXNf cmVmKCkpPyksCisgICAgICAgICAgICAgICAgLy8gUnVuIG9wdGlvbmFsIEdQVSBzZWxmdGVzdHMu CisgICAgICAgICAgICAgICAgXzogeyBncHUucnVuX3NlbGZ0ZXN0cyhwZGV2KT8gfSwKICAgICAg ICAgICAgICAgICBfcmVnIDwtIGF1eGlsaWFyeTo6UmVnaXN0cmF0aW9uOjpuZXcoCiAgICAgICAg ICAgICAgICAgICAgIHBkZXYuYXNfcmVmKCksCiAgICAgICAgICAgICAgICAgICAgIGMibm92YS1k cm0iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvbm92YS1jb3JlL2dwdS5ycyBiL2RyaXZlcnMv Z3B1L25vdmEtY29yZS9ncHUucnMKaW5kZXggZWZmZjc2MzEzYjg5Li4wMjJiMTU2ZGUwZGEgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L25vdmEtY29yZS9ncHUucnMKKysrIGIvZHJpdmVycy9ncHUv bm92YS1jb3JlL2dwdS5ycwpAQCAtMzQ5LDQgKzM0OSw0MiBAQCBwdWIoY3JhdGUpIGZuIHVuYmlu ZCgmc2VsZiwgZGV2OiAmZGV2aWNlOjpEZXZpY2U8ZGV2aWNlOjpDb3JlPikgewogICAgICAgICAg ICAgLmluc3BlY3QofGJhcnwgc2VsZi5zeXNtZW1fZmx1c2gudW5yZWdpc3RlcihiYXIpKQogICAg ICAgICAgICAgLmlzX2VycigpKTsKICAgICB9CisKKyAgICAvLy8gUnVuIHNlbGZ0ZXN0cyBvbiB0 aGUgY29uc3RydWN0ZWQgW2BHcHVgXS4KKyAgICBwdWIoY3JhdGUpIGZuIHJ1bl9zZWxmdGVzdHMo CisgICAgICAgIG11dCBzZWxmOiBQaW48Jm11dCBTZWxmPiwKKyAgICAgICAgcGRldjogJnBjaTo6 RGV2aWNlPGRldmljZTo6Qm91bmQ+LAorICAgICkgLT4gUmVzdWx0IHsKKyAgICAgICAgc2VsZi5h c19tdXQoKS5ydW5fbW1fc2VsZnRlc3RzKHBkZXYpPzsKKyAgICAgICAgT2soKCkpCisgICAgfQor CisgICAgI1tjZmcoQ09ORklHX05PVkFfTU1fU0VMRlRFU1RTKV0KKyAgICBmbiBydW5fbW1fc2Vs ZnRlc3RzKHNlbGY6IFBpbjwmbXV0IFNlbGY+LCBwZGV2OiAmcGNpOjpEZXZpY2U8ZGV2aWNlOjpC b3VuZD4pIC0+IFJlc3VsdCB7CisgICAgICAgIHVzZSBjcmF0ZTo6ZHJpdmVyOjpCQVIxX1NJWkU7 CisKKyAgICAgICAgbGV0IG1tdV92ZXJzaW9uID0gTW11VmVyc2lvbjo6ZnJvbShzZWxmLnNwZWMu Y2hpcHNldC5hcmNoKCkpOworCisgICAgICAgIC8vIEJBUjEgc2VsZi10ZXN0cy4KKyAgICAgICAg bGV0IGJhcjEgPSBBcmM6OnBpbl9pbml0KAorICAgICAgICAgICAgcGRldi5pb21hcF9yZWdpb25f c2l6ZWQ6OjxCQVIxX1NJWkU+KDEsIGMibm92YS1jb3JlL2JhcjEiKSwKKyAgICAgICAgICAgIEdG UF9LRVJORUwsCisgICAgICAgICk/OworICAgICAgICBsZXQgYmFyMV9hY2Nlc3MgPSBiYXIxLmFj Y2VzcyhwZGV2LmFzX3JlZigpKT87CisKKyAgICAgICAgY3JhdGU6Om1tOjpiYXJfdXNlcjo6cnVu X3NlbGZfdGVzdCgKKyAgICAgICAgICAgIHBkZXYuYXNfcmVmKCksCisgICAgICAgICAgICAmc2Vs Zi5tbSwKKyAgICAgICAgICAgIGJhcjFfYWNjZXNzLAorICAgICAgICAgICAgc2VsZi5nc3Bfc3Rh dGljX2luZm8uYmFyMV9wZGVfYmFzZSwKKyAgICAgICAgICAgIG1tdV92ZXJzaW9uLAorICAgICAg ICApPzsKKworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICAjW2NmZyhub3QoQ09ORklHX05P VkFfTU1fU0VMRlRFU1RTKSldCisgICAgZm4gcnVuX21tX3NlbGZ0ZXN0cyhzZWxmOiBQaW48Jm11 dCBTZWxmPiwgX3BkZXY6ICZwY2k6OkRldmljZTxkZXZpY2U6OkJvdW5kPikgLT4gUmVzdWx0IHsK KyAgICAgICAgT2soKCkpCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvbm92YS1j b3JlL21tL2Jhcl91c2VyLnJzIGIvZHJpdmVycy9ncHUvbm92YS1jb3JlL21tL2Jhcl91c2VyLnJz CmluZGV4IDBkMDgzZjNlNzJjMi4uZDJhMmUwYWQwOTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9ub3ZhLWNvcmUvbW0vYmFyX3VzZXIucnMKKysrIGIvZHJpdmVycy9ncHUvbm92YS1jb3JlL21t L2Jhcl91c2VyLnJzCkBAIC0xNTQsMyArMTU0LDI1OSBAQCBmbiBkcm9wKCZtdXQgc2VsZikgewog ICAgICAgICB9CiAgICAgfQogfQorCisvLy8gQ2hlY2sgaWYgdGhlIFBEQiBoYXMgdmFsaWQsIFZS QU0tYmFja2VkIHBhZ2UgdGFibGVzLgorLy8vCisvLy8gUmV0dXJucyBgRXJyKEVOT0VOVClgIGlm IHBhZ2UgdGFibGVzIGFyZSBtaXNzaW5nIG9yIG5vdCBpbiBWUkFNLgorI1tjZmcoQ09ORklHX05P VkFfTU1fU0VMRlRFU1RTKV0KK2ZuIGNoZWNrX3ZhbGlkX3BhZ2VfdGFibGVzKG1tOiAmR3B1TW0s IHBkYl9hZGRyOiBWcmFtQWRkcmVzcykgLT4gUmVzdWx0IHsKKyAgICB1c2UgY3JhdGU6Om1tOjpw YWdldGFibGU6OnsKKyAgICAgICAgdmVyMjo6UGRlLAorICAgICAgICBBcGVydHVyZVBkZSwgLy8K KyAgICB9OworCisgICAgbGV0IG11dCB3aW5kb3cgPSBtbS5wcmFtaW4oKS53aW5kb3coKT87Cisg ICAgbGV0IHBkYl9lbnRyeV9yYXcgPSB3aW5kb3cudHJ5X3JlYWQ2NChwZGJfYWRkci5yYXcoKSk/ OworICAgIGxldCBwZGJfZW50cnkgPSBQZGU6Om5ldyhwZGJfZW50cnlfcmF3KTsKKworICAgIGlm ICFwZGJfZW50cnkuaXNfdmFsaWQoKSB7CisgICAgICAgIHJldHVybiBFcnIoRU5PRU5UKTsKKyAg ICB9CisKKyAgICBpZiBwZGJfZW50cnkuYXBlcnR1cmUoKSAhPSBBcGVydHVyZVBkZTo6VmlkZW9N ZW1vcnkgeworICAgICAgICByZXR1cm4gRXJyKEVOT0VOVCk7CisgICAgfQorCisgICAgT2soKCkp Cit9CisKKy8vLyBSdW4gTU0gc3Vic3lzdGVtIHNlbGYtdGVzdHMgZHVyaW5nIHByb2JlLgorLy8v CisvLy8gVGVzdHMgcGFnZSB0YWJsZSBpbmZyYXN0cnVjdHVyZSBhbmQgYEJBUjFgIE1NSU8gYWNj ZXNzIHVzaW5nIHRoZSBgQkFSMWAKKy8vLyBhZGRyZXNzIHNwYWNlLiBVc2VzIHRoZSBgR3B1TW1g J3MgYnVkZHkgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHBhZ2UgdGFibGVzCisvLy8gYW5kIHRlc3Qg cGFnZXMgYXMgbmVlZGVkLgorI1tjZmcoQ09ORklHX05PVkFfTU1fU0VMRlRFU1RTKV0KK3B1Yihj cmF0ZSkgZm4gcnVuX3NlbGZfdGVzdCgKKyAgICBkZXY6ICZrZXJuZWw6OmRldmljZTo6RGV2aWNl LAorICAgIG1tOiAmR3B1TW0sCisgICAgYmFyMTogJmNyYXRlOjpkcml2ZXI6OkJhcjEsCisgICAg YmFyMV9wZGI6IHU2NCwKKyAgICBtbXVfdmVyc2lvbjogTW11VmVyc2lvbiwKKykgLT4gUmVzdWx0 IHsKKyAgICB1c2UgY3JhdGU6Om1tOjp7CisgICAgICAgIHZtbTo6Vm1tLAorICAgICAgICBQQUdF X1NJWkUsIC8vCisgICAgfTsKKyAgICB1c2Uga2VybmVsOjpncHU6OmJ1ZGR5Ojp7R3B1QnVkZHlB bGxvY0ZsYWdzLCBHcHVCdWRkeUFsbG9jTW9kZX07CisgICAgdXNlIGtlcm5lbDo6cHRyOjpBbGln bm1lbnQ7CisgICAgdXNlIGtlcm5lbDo6c2l6ZXM6OnsKKyAgICAgICAgU1pfMTZLLAorICAgICAg ICBTWl8zMkssCisgICAgICAgIFNaXzRLLAorICAgICAgICBTWl82NEssIC8vCisgICAgfTsKKwor ICAgIC8vIFNlbGYtdGVzdHMgb25seSBzdXBwb3J0IE1NVSB2MiBmb3Igbm93LgorICAgIGlmIG1t dV92ZXJzaW9uICE9IE1tdVZlcnNpb246OlYyIHsKKyAgICAgICAgZGV2X2luZm8hKAorICAgICAg ICAgICAgZGV2LAorICAgICAgICAgICAgIk1NOiBTa2lwcGluZyBzZWxmLXRlc3RzIGZvciBNTVUg ezo/fSAob25seSBWMiBzdXBwb3J0ZWQpXG4iLAorICAgICAgICAgICAgbW11X3ZlcnNpb24KKyAg ICAgICAgKTsKKyAgICAgICAgcmV0dXJuIE9rKCgpKTsKKyAgICB9CisKKyAgICAvLyBUZXN0IHBh dHRlcm5zLgorICAgIGNvbnN0IFBBVFRFUk5fUFJBTUlOOiB1MzIgPSAweERFQURfQkVFRjsKKyAg ICBjb25zdCBQQVRURVJOX0JBUjE6IHUzMiA9IDB4Q0FGRV9CQUJFOworCisgICAgZGV2X2luZm8h KGRldiwgIk1NOiBTdGFydGluZyBzZWxmLXRlc3QuLi5cbiIpOworCisgICAgbGV0IHBkYl9hZGRy ID0gVnJhbUFkZHJlc3M6Om5ldyhiYXIxX3BkYik7CisKKyAgICAvLyBDaGVjayBpZiBpbml0aWFs IHBhZ2UgdGFibGVzIGFyZSBpbiBWUkFNLgorICAgIGlmIGNoZWNrX3ZhbGlkX3BhZ2VfdGFibGVz KG1tLCBwZGJfYWRkcikuaXNfZXJyKCkgeworICAgICAgICBkZXZfaW5mbyEoZGV2LCAiTU06IFNl bGYtdGVzdCBTS0lQUEVEIC0gbm8gdmFsaWQgVlJBTSBwYWdlIHRhYmxlc1xuIik7CisgICAgICAg IHJldHVybiBPaygoKSk7CisgICAgfQorCisgICAgLy8gU2V0IHVwIGEgdGVzdCBwYWdlIGZyb20g dGhlIGJ1ZGR5IGFsbG9jYXRvci4KKyAgICBsZXQgdGVzdF9wYWdlX2Jsb2NrcyA9IEtCb3g6OnBp bl9pbml0KAorICAgICAgICBtbS5idWRkeSgpLmFsbG9jX2Jsb2NrcygKKyAgICAgICAgICAgIEdw dUJ1ZGR5QWxsb2NNb2RlOjpTaW1wbGUsCisgICAgICAgICAgICBTWl80SywKKyAgICAgICAgICAg IEFsaWdubWVudDo6bmV3Ojo8U1pfNEs+KCksCisgICAgICAgICAgICBHcHVCdWRkeUFsbG9jRmxh Z3M6OmRlZmF1bHQoKSwKKyAgICAgICAgKSwKKyAgICAgICAgR0ZQX0tFUk5FTCwKKyAgICApPzsK KyAgICBsZXQgdGVzdF92cmFtX29mZnNldCA9IHRlc3RfcGFnZV9ibG9ja3MuaXRlcigpLm5leHQo KS5va19vcihFTk9NRU0pPy5vZmZzZXQoKTsKKyAgICBsZXQgdGVzdF92cmFtID0gVnJhbUFkZHJl c3M6Om5ldyh0ZXN0X3ZyYW1fb2Zmc2V0KTsKKyAgICBsZXQgdGVzdF9wZm4gPSBQZm46OmZyb20o dGVzdF92cmFtKTsKKworICAgIC8vIENyZWF0ZSBhIFZNTSBvZiBzaXplIDY0SyB0byB0cmFjayB2 aXJ0dWFsIG1lbW9yeSBtYXBwaW5ncy4KKyAgICBsZXQgbXV0IHZtbSA9IFZtbTo6bmV3KHBkYl9h ZGRyLCBNbXVWZXJzaW9uOjpWMiwgU1pfNjRLLmludG9fc2FmZV9jYXN0KCkpPzsKKworICAgIC8v IENyZWF0ZSBhIHRlc3QgbWFwcGluZy4KKyAgICBsZXQgbWFwcGVkID0gdm1tLm1hcF9wYWdlcyht bSwgJlt0ZXN0X3Bmbl0sIE5vbmUsIHRydWUpPzsKKyAgICBsZXQgdGVzdF92Zm4gPSBtYXBwZWQu dmZuX3N0YXJ0OworCisgICAgLy8gUHJlLWNvbXB1dGUgdGVzdCBhZGRyZXNzZXMgZm9yIHRoZSBQ UkFNSU4gdG8gQkFSMSByZWFkIHRlc3QuCisgICAgbGV0IHZmbl9vZmZzZXQ6IHVzaXplID0gdGVz dF92Zm4ucmF3KCkuaW50b19zYWZlX2Nhc3QoKTsKKyAgICBsZXQgYmFyMV9iYXNlX29mZnNldCA9 IHZmbl9vZmZzZXQuY2hlY2tlZF9tdWwoUEFHRV9TSVpFKS5va19vcihFT1ZFUkZMT1cpPzsKKyAg ICBsZXQgYmFyMV9yZWFkX29mZnNldDogdXNpemUgPSBiYXIxX2Jhc2Vfb2Zmc2V0ICsgMHgxMDA7 CisgICAgbGV0IHZyYW1fcmVhZF9hZGRyOiB1c2l6ZSA9IHRlc3RfdnJhbS5yYXcoKSArIDB4MTAw OworCisgICAgLy8gVGVzdCAxOiBXcml0ZSB2aWEgUFJBTUlOLCByZWFkIHZpYSBCQVIxLgorICAg IHsKKyAgICAgICAgbGV0IG11dCB3aW5kb3cgPSBtbS5wcmFtaW4oKS53aW5kb3coKT87CisgICAg ICAgIHdpbmRvdy50cnlfd3JpdGUzMih2cmFtX3JlYWRfYWRkciwgUEFUVEVSTl9QUkFNSU4pPzsK KyAgICB9CisKKyAgICAvLyBSZWFkIGJhY2sgdmlhIEJBUjEgYXBlcnR1cmUuCisgICAgbGV0IGJh cjFfdmFsdWUgPSBiYXIxLnRyeV9yZWFkMzIoYmFyMV9yZWFkX29mZnNldCk/OworCisgICAgbGV0 IHRlc3QxX3Bhc3NlZCA9IGlmIGJhcjFfdmFsdWUgPT0gUEFUVEVSTl9QUkFNSU4geworICAgICAg ICB0cnVlCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGV2X2VyciEoCisgICAgICAgICAgICBkZXYs CisgICAgICAgICAgICAiTU06IFRlc3QgMSBGQUlMRUQgLSBFeHBlY3RlZCB7OiMwMTB4fSwgZ290 IHs6IzAxMHh9XG4iLAorICAgICAgICAgICAgUEFUVEVSTl9QUkFNSU4sCisgICAgICAgICAgICBi YXIxX3ZhbHVlCisgICAgICAgICk7CisgICAgICAgIGZhbHNlCisgICAgfTsKKworICAgIC8vIENs ZWFudXAgLSBpbnZhbGlkYXRlIFBURS4KKyAgICB2bW0udW5tYXBfcGFnZXMobW0sIG1hcHBlZCk/ OworCisgICAgLy8gVGVzdCAyOiBUd28tcGhhc2UgcHJlcGFyZS9leGVjdXRlIEFQSS4KKyAgICBs ZXQgcHJlcGFyZWQgPSB2bW0ucHJlcGFyZV9tYXAobW0sIDEsIE5vbmUpPzsKKyAgICBsZXQgbWFw cGVkMiA9IHZtbS5leGVjdXRlX21hcChtbSwgcHJlcGFyZWQsICZbdGVzdF9wZm5dLCB0cnVlKT87 CisgICAgbGV0IHJlYWRiYWNrID0gdm1tLnJlYWRfbWFwcGluZyhtbSwgbWFwcGVkMi52Zm5fc3Rh cnQpPzsKKyAgICBsZXQgdGVzdDJfcGFzc2VkID0gaWYgcmVhZGJhY2sgPT0gU29tZSh0ZXN0X3Bm bikgeworICAgICAgICB0cnVlCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGV2X2VyciEoZGV2LCAi TU06IFRlc3QgMiBGQUlMRUQgLSBUd28tcGhhc2UgbWFwIHJlYWRiYWNrIG1pc21hdGNoXG4iKTsK KyAgICAgICAgZmFsc2UKKyAgICB9OworICAgIHZtbS51bm1hcF9wYWdlcyhtbSwgbWFwcGVkMik/ OworCisgICAgLy8gVGVzdCAzOiBSYW5nZS1jb25zdHJhaW5lZCBhbGxvY2F0aW9uIHdpdGggYSBo b2xlIOKAlCBleGVyY2lzZXMgYmxvY2suc2l6ZSgpLWRyaXZlbgorICAgIC8vIEJBUjEgbWFwcGlu Zy4gQSA0SyBob2xlIGlzIHB1bmNoZWQgYXQgYmFzZSsxNkssIHRoZW4gYSBzaW5nbGUgMzJLIGFs bG9jYXRpb24KKyAgICAvLyBpcyByZXF1ZXN0ZWQgd2l0aGluIFtiYXNlLCBiYXNlKzM2SykuIFRo ZSBidWRkeSBhbGxvY2F0b3IgbXVzdCBzcGxpdCBhcm91bmQgdGhlCisgICAgLy8gaG9sZSwgcmV0 dXJuaW5nIG11bHRpcGxlIGJsb2NrcyAoZXhwZWN0ZWQ6IHsxNkssIDRLLCA4SywgNEt9ID0gMzJL IHRvdGFsKS4KKyAgICAvLyBFYWNoIGJsb2NrIGlzIG1hcHBlZCBpbnRvIEJBUjEgYW5kIHZlcmlm aWVkIHZpYSBQUkFNSU4gcmVhZC1iYWNrLgorICAgIC8vCisgICAgLy8gQWRkcmVzcyBsYXlvdXQg KGJhc2UgPSAweDEwMDAwKToKKyAgICAvLyAgIFsgICAgMTZLICAgIF0gW0hPTEUgNEtdIFs0S10g WyA4SyBdIFs0S10KKyAgICAvLyAgIDB4MTAwMDAgICAgICAgMHgxNDAwMCAgMHgxNTAwMCAweDE2 MDAwIDB4MTgwMDAgMHgxOTAwMAorICAgIGxldCByYW5nZV9iYXNlOiB1NjQgPSBTWl82NEsuaW50 b19zYWZlX2Nhc3QoKTsKKyAgICBsZXQgc3pfNGs6IHU2NCA9IFNaXzRLLmludG9fc2FmZV9jYXN0 KCk7CisgICAgbGV0IHN6XzE2azogdTY0ID0gU1pfMTZLLmludG9fc2FmZV9jYXN0KCk7CisgICAg bGV0IHN6XzMya180azogdTY0ID0gKFNaXzMySyArIFNaXzRLKS5pbnRvX3NhZmVfY2FzdCgpOwor CisgICAgLy8gUHVuY2ggYSA0SyBob2xlIGF0IGJhc2UrMTZLIHNvIHRoZSBzdWJzZXF1ZW50IDMy SyBhbGxvY2F0aW9uIG11c3Qgc3BsaXQuCisgICAgbGV0IF9ob2xlID0gS0JveDo6cGluX2luaXQo CisgICAgICAgIG1tLmJ1ZGR5KCkuYWxsb2NfYmxvY2tzKAorICAgICAgICAgICAgR3B1QnVkZHlB bGxvY01vZGU6OlJhbmdlIHsKKyAgICAgICAgICAgICAgICBzdGFydDogcmFuZ2VfYmFzZSArIHN6 XzE2aywKKyAgICAgICAgICAgICAgICBlbmQ6IHJhbmdlX2Jhc2UgKyBzel8xNmsgKyBzel80aywK KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBTWl80SywKKyAgICAgICAgICAgIEFsaWdubWVu dDo6bmV3Ojo8U1pfNEs+KCksCisgICAgICAgICAgICBHcHVCdWRkeUFsbG9jRmxhZ3M6OmRlZmF1 bHQoKSwKKyAgICAgICAgKSwKKyAgICAgICAgR0ZQX0tFUk5FTCwKKyAgICApPzsKKworICAgIC8v IEFsbG9jYXRlIDMySyB3aXRoaW4gW2Jhc2UsIGJhc2UrMzZLKS4gVGhlIGhvbGUgZm9yY2VzIHRo ZSBhbGxvY2F0b3IgdG8gcmV0dXJuCisgICAgLy8gc3BsaXQgYmxvY2tzIHdob3NlIHNpemVzIGFy ZSBkZXRlcm1pbmVkIGJ5IGJ1ZGR5IGFsaWdubWVudC4KKyAgICBsZXQgYmxvY2tzID0gS0JveDo6 cGluX2luaXQoCisgICAgICAgIG1tLmJ1ZGR5KCkuYWxsb2NfYmxvY2tzKAorICAgICAgICAgICAg R3B1QnVkZHlBbGxvY01vZGU6OlJhbmdlIHsKKyAgICAgICAgICAgICAgICBzdGFydDogcmFuZ2Vf YmFzZSwKKyAgICAgICAgICAgICAgICBlbmQ6IHJhbmdlX2Jhc2UgKyBzel8zMmtfNGssCisgICAg ICAgICAgICB9LAorICAgICAgICAgICAgU1pfMzJLLAorICAgICAgICAgICAgQWxpZ25tZW50Ojpu ZXc6OjxTWl80Sz4oKSwKKyAgICAgICAgICAgIEdwdUJ1ZGR5QWxsb2NGbGFnczo6ZGVmYXVsdCgp LAorICAgICAgICApLAorICAgICAgICBHRlBfS0VSTkVMLAorICAgICk/OworCisgICAgbGV0IG11 dCB0ZXN0M19wYXNzZWQgPSB0cnVlOworICAgIGxldCBtdXQgdG90YWxfc2l6ZSA9IDB1c2l6ZTsK KworICAgIGZvciBibG9jayBpbiBibG9ja3MuaXRlcigpIHsKKyAgICAgICAgdG90YWxfc2l6ZSAr PSBibG9jay5zaXplKCk7CisKKyAgICAgICAgLy8gTWFwIGFsbCBwYWdlcyBvZiB0aGlzIGJsb2Nr LgorICAgICAgICBsZXQgcGFnZV9zaXplOiB1NjQgPSBQQUdFX1NJWkUuaW50b19zYWZlX2Nhc3Qo KTsKKyAgICAgICAgbGV0IG51bV9wYWdlcyA9IGJsb2NrLnNpemUoKSAvIFBBR0VfU0laRTsKKwor ICAgICAgICBsZXQgbXV0IHBmbnMgPSBLVmVjOjpuZXcoKTsKKyAgICAgICAgZm9yIGogaW4gMC4u bnVtX3BhZ2VzIHsKKyAgICAgICAgICAgIGxldCBqX3U2NDogdTY0ID0gai5pbnRvX3NhZmVfY2Fz dCgpOworICAgICAgICAgICAgcGZucy5wdXNoKAorICAgICAgICAgICAgICAgIFBmbjo6ZnJvbShW cmFtQWRkcmVzczo6bmV3KAorICAgICAgICAgICAgICAgICAgICBibG9jay5vZmZzZXQoKSArIGpf dTY0LmNoZWNrZWRfbXVsKHBhZ2Vfc2l6ZSkub2tfb3IoRU9WRVJGTE9XKT8sCisgICAgICAgICAg ICAgICAgKSksCisgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCwKKyAgICAgICAgICAgICk/Owor ICAgICAgICB9CisKKyAgICAgICAgbGV0IG1hcHBlZCA9IHZtbS5tYXBfcGFnZXMobW0sICZwZm5z LCBOb25lLCB0cnVlKT87CisgICAgICAgIGxldCBiYXIxX2Jhc2VfdmZuOiB1c2l6ZSA9IG1hcHBl ZC52Zm5fc3RhcnQucmF3KCkuaW50b19zYWZlX2Nhc3QoKTsKKyAgICAgICAgbGV0IGJhcjFfYmFz ZSA9IGJhcjFfYmFzZV92Zm4uY2hlY2tlZF9tdWwoUEFHRV9TSVpFKS5va19vcihFT1ZFUkZMT1cp PzsKKworICAgICAgICBmb3IgaiBpbiAwLi5udW1fcGFnZXMgeworICAgICAgICAgICAgbGV0IHBh Z2VfYmFyMV9vZmYgPSBiYXIxX2Jhc2UgKyBqICogUEFHRV9TSVpFOworICAgICAgICAgICAgbGV0 IGpfdTY0OiB1NjQgPSBqLmludG9fc2FmZV9jYXN0KCk7CisgICAgICAgICAgICBsZXQgcGFnZV9w aHlzID0gYmxvY2sub2Zmc2V0KCkKKyAgICAgICAgICAgICAgICArIGpfdTY0CisgICAgICAgICAg ICAgICAgICAgIC5jaGVja2VkX211bChQQUdFX1NJWkUuaW50b19zYWZlX2Nhc3QoKSkKKyAgICAg ICAgICAgICAgICAgICAgLm9rX29yKEVPVkVSRkxPVyk/OworCisgICAgICAgICAgICBiYXIxLnRy eV93cml0ZTMyKFBBVFRFUk5fQkFSMSwgcGFnZV9iYXIxX29mZik/OworCisgICAgICAgICAgICBs ZXQgcHJhbWluX3ZhbCA9IHsKKyAgICAgICAgICAgICAgICBsZXQgbXV0IHdpbmRvdyA9IG1tLnBy YW1pbigpLndpbmRvdygpPzsKKyAgICAgICAgICAgICAgICB3aW5kb3cudHJ5X3JlYWQzMihwYWdl X3BoeXMuaW50b19zYWZlX2Nhc3QoKSk/CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBp ZiBwcmFtaW5fdmFsICE9IFBBVFRFUk5fQkFSMSB7CisgICAgICAgICAgICAgICAgZGV2X2VyciEo CisgICAgICAgICAgICAgICAgICAgIGRldiwKKyAgICAgICAgICAgICAgICAgICAgIk1NOiBUZXN0 IDMgRkFJTEVEIGJsb2NrIG9mZnNldCB7OiN4fSBwYWdlIHt9ICh2YWw9ezojeH0pXG4iLAorICAg ICAgICAgICAgICAgICAgICBibG9jay5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgaiwK KyAgICAgICAgICAgICAgICAgICAgcHJhbWluX3ZhbAorICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICAgICAgdGVzdDNfcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKworICAgICAgICB2bW0udW5tYXBfcGFnZXMobW0sIG1hcHBlZCk/OworICAgIH0KKworICAg IC8vIFZlcmlmeSBhZ2dyZWdhdGU6IGFsbCByZXR1cm5lZCBibG9jayBzaXplcyBtdXN0IHN1bSB0 byBhbGxvY2F0aW9uIHNpemUuCisgICAgaWYgdG90YWxfc2l6ZSAhPSBTWl8zMksgeworICAgICAg ICBkZXZfZXJyISgKKyAgICAgICAgICAgIGRldiwKKyAgICAgICAgICAgICJNTTogVGVzdCAzIEZB SUxFRCAtIHRvdGFsIHNpemUge30gIT0gZXhwZWN0ZWQge31cbiIsCisgICAgICAgICAgICB0b3Rh bF9zaXplLAorICAgICAgICAgICAgU1pfMzJLCisgICAgICAgICk7CisgICAgICAgIHRlc3QzX3Bh c3NlZCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIHRlc3QxX3Bhc3NlZCAmJiB0ZXN0Ml9wYXNz ZWQgJiYgdGVzdDNfcGFzc2VkIHsKKyAgICAgICAgZGV2X2luZm8hKGRldiwgIk1NOiBBbGwgc2Vs Zi10ZXN0cyBQQVNTRURcbiIpOworICAgICAgICBPaygoKSkKKyAgICB9IGVsc2UgeworICAgICAg ICBkZXZfZXJyIShkZXYsICJNTTogU2VsZi10ZXN0cyBGQUlMRURcbiIpOworICAgICAgICBFcnIo RUlPKQorICAgIH0KK30KLS0gCjIuMzQuMQoK