Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp845528rwr; Wed, 19 Apr 2023 14:08:25 -0700 (PDT) X-Google-Smtp-Source: AKy350b0ql9FlAQUXzoMtCNqSrDlA4ubyTQerrGjDCXcGfwWhvxe0e3jWtWFLApxo6EuTF5H7fPx X-Received: by 2002:a17:90a:1197:b0:247:78c0:125e with SMTP id e23-20020a17090a119700b0024778c0125emr4091561pja.15.1681938505467; Wed, 19 Apr 2023 14:08:25 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1681938505; cv=pass; d=google.com; s=arc-20160816; b=tXREb0I5lzgpBEfEDcqKN0FKMi4A/uS/01huOiHVEmYJHlUxA5QJ0nOef5h/RymECf VcLWspFiyBos3UjRDJrCBmoHoM4NCHd9YAjO5Ieb/Ucke2F5KND+ysKDawXnJsgzffD3 pPI6oqKcG4H9IKTYvcuK7I8p4/t+r0fmLd1FYzW2oRDwG4zn49RZvxNs5yUUXEH/aq7F ADzArmbIpUBUJNAsSr3ulTWKQ8EdhwY1NCWX+kSzkLp7Imt69AnpkKg7VLubkuFNZ8x6 BCfdPCUg45svc827eWoq2nnFYd3gIePKQE+w/NwSv+vW4rUfSedyzUiPvu4PoIqUEqYJ Ke+Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_contentbits :msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_actionid :msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_siteid :msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_name :msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_method :msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_setdate :msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_enabled:msip_labels :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:to:from:dkim-signature; bh=AMC7ECZp1X8mjeTMZTPaTc6rib68HTshgFQ4Tyj4qw4=; b=WRQi1e2DErx1j76jAxVqxz4GTFIbFXzM0rD9xLp2FXBZjDX3VCLBmOPCHITWM1KqQL Mp0J48vZBzvoXIRSoVIICw16d1DUww/mUWttDP/fxz4ecJcq12M+DPt5jlGvx36F+pLZ L3ip2w9oFH0+l+qFHsaEZPfPq87xfFFxmGdb25zd+OYZ7cqMKRkCTd0532ApiYYa/jjc x5W+/l3+v/WGANderW3ZSig1Xp1WUAq+UmY48hz2N+E3xDff9nb/UJfcKYad7GWF/7Rb XOkR1gDZoWxDY5AQOjHQeAyy+fy6UKWH0MChVvz1kC3lMpVAAWU3ntaL2Jv/FB13wO+V qBKA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=ilHXF1ef; arc=pass (i=1 spf=pass spfdomain=amd.com dkim=pass dkdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a70-20020a639049000000b00520b3928bebsi2380421pge.7.2023.04.19.14.08.11; Wed, 19 Apr 2023 14:08:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=ilHXF1ef; arc=pass (i=1 spf=pass spfdomain=amd.com dkim=pass dkdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230217AbjDSU7i (ORCPT + 99 others); Wed, 19 Apr 2023 16:59:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229673AbjDSU7h (ORCPT ); Wed, 19 Apr 2023 16:59:37 -0400 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2069.outbound.protection.outlook.com [40.107.212.69]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 772DC4C19; Wed, 19 Apr 2023 13:59:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lDm49BxxsQau4hB5bop+aDFfDxLnjueL/glmp6JiyIuCmyjvp7tQxq2kuCVm1CzJbQJEjdeLTqgZWNPzwQ+1TCv6zlMDc29cx+VddggLS9PYh9s47Mmt0SJzTQcLVZzv7ruW3idpQ+1pEtbPUib/h/fWtWM59XAvH9VGNKZ50qws62Xw6vdxgC2GazgBbJBYmeSgAYf0F9TuSUi64mIdrmZ2t1XcIWeTwv1+O4qCQA+bnXvwZiK934Lq9gXn4uVeTwVkq5pm3F/7TKaWwBce2/vLt/lRxkVYu1zCDf2aWd/PB0Yju2/9KIKOC01/QkHNAMhVmcGk5ypxoj/zGae/kg== 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=AMC7ECZp1X8mjeTMZTPaTc6rib68HTshgFQ4Tyj4qw4=; b=N8jgsut4aYPExSFzBzqcaQoDQVHOPrBESyu/YcgqIRgszGf7NTf1TY/zT0eh32s/ZuRjHUq/Hq/5j4ftJrXkQD/EEx/NsXyfBJlUEzO8pNnOpimCooNHbUtyuYTpzR+Y1d+/EowVg8q089+ulivrLJttWqm4j8A4up24sLkLuBuAsTbgOoWds82a38OhYyrqxI4HHDF6BE31aWggcyndAT0Bx/66IGAMFcLqK92yNKVrCI3EepoFbAMx5oQwdOj+zwZOcxNuVC8o5LMguz0Fo7Htb6KTuha8yW2rvxbxo4A2kKXdNprrwXRnmuyGxzpSjwj18rGT9a69hm7UTtZERA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AMC7ECZp1X8mjeTMZTPaTc6rib68HTshgFQ4Tyj4qw4=; b=ilHXF1ef8fH0KsO1caKm9lXFMsip4TZZt0iYdzeqwOqwS5ZPwZywjcAPWmxZ1Umv4IWUkf/+ylwtlUuWhAfKyF5uyZSBe6cD8JTI8KhEL8iMetvuFYv9q5eogaYh0intCszfzZviOt5tZPjKjxR7wMfU4aeMQUPA9AJu5/y595Y= Received: from MN0PR12MB6101.namprd12.prod.outlook.com (2603:10b6:208:3cb::10) by BN9PR12MB5381.namprd12.prod.outlook.com (2603:10b6:408:102::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Wed, 19 Apr 2023 20:59:28 +0000 Received: from MN0PR12MB6101.namprd12.prod.outlook.com ([fe80::3f45:358e:abba:24f5]) by MN0PR12MB6101.namprd12.prod.outlook.com ([fe80::3f45:358e:abba:24f5%3]) with mapi id 15.20.6298.045; Wed, 19 Apr 2023 20:59:28 +0000 From: "Limonciello, Mario" To: Armin Wolf , Jorge Lopez , "hdegoede@redhat.com" , "platform-driver-x86@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "thomas@t-8ch.de" , "Wang, Crag" Subject: RE: [PATCH v10 03/14] HP BIOSCFG driver - bioscfg Thread-Topic: [PATCH v10 03/14] HP BIOSCFG driver - bioscfg Thread-Index: AQHZculpv4QlQR5SLU+AXjaGM8JIJa8zHayA Date: Wed, 19 Apr 2023 20:59:27 +0000 Message-ID: References: <20230419151321.6167-1-jorge.lopez2@hp.com> <20230419151321.6167-4-jorge.lopez2@hp.com> <38929a45-79de-964b-5d6f-cfa44099b35e@gmx.de> In-Reply-To: <38929a45-79de-964b-5d6f-cfa44099b35e@gmx.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Enabled=true; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SetDate=2023-04-19T20:59:25Z; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Method=Privileged; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Name=Public-AIP 2.0; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ActionId=bbc6a2a6-3d1e-491f-a586-b411350e8515; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ContentBits=1 msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_enabled: true msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_setdate: 2023-04-19T20:59:25Z msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_method: Privileged msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_name: Public-AIP 2.0 msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_siteid: 3dd8961f-e488-4e60-8e11-a82d994e183d msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_actionid: d618f59c-9ee8-4970-9f53-49b893dc76d1 msip_label_d4243a53-6221-4f75-8154-e4b33a5707a1_contentbits: 0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN0PR12MB6101:EE_|BN9PR12MB5381:EE_ x-ms-office365-filtering-correlation-id: 2f0b16c1-2380-42a7-3cb0-08db4118f6e1 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: bIazCjWszkEIJBSZroCG39m97vShHRS6+u4Km+Y51TmAMkCnyj/GdL5IjkW35WW1IFguSi/tovUEHdi5Upopc+Eoq/OgT91UsJ7hmAkjXuAKpEqus9Ih/ncTjTBo9SveE7U/FUImZM1flvPReaVUggoh+Q6eBW+hvxbYmW2EbbzfqDX+Zyr1x4JyW7mcnzo9qP6Vp5H068dsalU4SUfzv2s/TRqQPR4O34SCFgaIAbA9+JWNBEqXhwkWo3v9b+jZo7IrQIO1OVuWsj15XR+w76NiasZ/InP3DUY24rlfoJWT3ygWTHmL/qmuwjEy2PpeiExQwwo8l+9b6Ow0KfIe32KGgM3rKSdtdAs0d5FIWsQa7u103SUSkwgBk1pyfeoBUhlZjkME0UM4B1jsB48jS8lzEj6EBPWH7K49+6k6Ow7t9w4Z7JQfeDDY5vhSO2Rpt0gNg/mdHnjeGV97q19Z0Uzy3HgNM81+wHrfeFg6k1XLOyIjp5IjOoApzz64WPxCqBQS4/LHMzkHpzomcAj62Ad34C/ZwsMYXc7WNxlJdViT0jIJ+6KohiPzbcBPrAIeyJzyPRXaX1iS6oniP5QZXMWf7PIl9CxdNkaQGwQ8ts0= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN0PR12MB6101.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(39860400002)(366004)(136003)(346002)(396003)(451199021)(33656002)(110136005)(316002)(76116006)(66946007)(66556008)(66476007)(66446008)(64756008)(186003)(478600001)(7696005)(71200400001)(55016003)(8936002)(8676002)(5660300002)(41300700001)(52536014)(30864003)(2906002)(38070700005)(86362001)(122000001)(38100700002)(6506007)(53546011)(9686003)(83380400001)(84970400001)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TG1hRkJQcS9uajA1ekNjSFlhSlV6TnZsSnBvTFdkT2tuMC9KTjlJV05adnBw?= =?utf-8?B?c2NNYnBNMUxlcmZPenJENGh0TjRISVNVellaUFpIREdEVWRIOTNaMVhHbytk?= =?utf-8?B?NFRCYWluMnJ2Q2oxVnRNMFJsc0lNVGR1c0hxU0ttT25DYjdZa2c4Z1dKMWYy?= =?utf-8?B?ZDFoWU5wTTl2VDdVRUI2SXl6M3E2NUR6V29BNjVra04xb2dFNW44Z0FaYUhi?= =?utf-8?B?T1lkTW10cGRVZ2ptaEREeVo4Yjd2dDRLYTZoWW1qd0RzUkVoNXpidy9wbnc1?= =?utf-8?B?UGUrd0l5UU9DbFkzNXdJMUR1U0d0b05JbEhMOEI2NjM4V3llZjVIbnZNQ3Vw?= =?utf-8?B?bkYrYmsyOHo0UGN4N0U5WGV0YW5INVNPR2dhODdOUjRjbTB4OXF3Q08yZU1a?= =?utf-8?B?NmRYQnM5Wm5JZFR1eG1TSlRsdzczQlhDaHhiaDU1eEl1OE9GUVloeTVNSzMz?= =?utf-8?B?OXByY1pNc3AzT2Q2K0tNeW1TbFd3b2FzM3hNMVd3bTd4MGQ2cFE2SklCaURV?= =?utf-8?B?WlNCejBvbzY4cGw3SDFhU3BDU1NCZTNMNUhLY0F5ZWZEZENBQzdyT080YldK?= =?utf-8?B?YWpMUjhLM2gxL2JnNDR1M1o3SDhJTnVPc1BCT0pGVVZQQktvd3BGdFlKcGRG?= =?utf-8?B?WEkzcmtqajdodFNFYkZGa3JJLzc1MGVPemhoTzBEOE5Pb0pPL2l0R1lqUnNJ?= =?utf-8?B?WXlDZGpYa0xVRTBoU2w0YkltbHladWo2VTE4bGRyYkpTT1ZJU2EyNzJFaDl1?= =?utf-8?B?djhpekZud3lJUnVHVTh0NFI1V0wwbGlkUXFQNzluT2JwR2U4TlZkaDdrOWxK?= =?utf-8?B?TkdLMVJsY0hONm92OTF0K3VBNStkUzhZSFdpUnpUUlhlNjhXQllWRTI3bE9w?= =?utf-8?B?UFVRWnFKWXJZeUxhQWlNM3RWdW9oc1p3bDZqRnprV2ZwdDFlZUIxYXEvYVVn?= =?utf-8?B?Y25EYXpiQUdOVzBiM2p1bDkzdWRJekVYcXBrZFgya2ljNytRUlFTZDdmZTZj?= =?utf-8?B?WUlrakJ2a1lJcFVhYmhtQWZxT1hwZDFpVnNoRTRzbzZpL3hIalhIOGJyaHpv?= =?utf-8?B?b0xjT1BEaEVLNzhTSVRZeEJ3d2t3TGZKcmprcENtMlNpYlFRcEQwajRsTHY5?= =?utf-8?B?VjFReFk3VFhKbCttbFRxRml3aU45TzhWVTJQbk9IOTJtaVRiMDVGcVVYUkJ5?= =?utf-8?B?S3JGRjM3dkY3c0JGc0FKTzM1MldPQ2UzajZaZldYNlljam9xR3lVQXpNYVgy?= =?utf-8?B?bXF2Ti9wTThzTVUrUHVsbkpqeTFjcUJ2NWNVZjJ5aXdKYnZBNlB0Z2svUVpr?= =?utf-8?B?aUpZeWVMbGVKRUYzclVUTTZGN2R1OVBnelRRUWxLdi9rT0RCRFZYMkh0YVV3?= =?utf-8?B?L2dwQVdVbVZMNFJjcnB3VEdGSnhLRnhHTVBiOWxzL2dNZ1RPK2xIY3RGbUxX?= =?utf-8?B?OHc4ZTBuQkVTRmRTbE5FSnhxdGQ5VUMxbnZkdFFxMW1OVzg5S3c0TDVua2RR?= =?utf-8?B?SUc1UHdPQ1VQRW5WeFFzamdERXFaQmo4aDFaVzJQcFF6Q1cvWXRSNzYrR2hY?= =?utf-8?B?eTM1aytrUlJabjBHaC9zaC9oSTVyQWdOQlZpUXRxWVRQMWlpRW1CcS9FUlkw?= =?utf-8?B?VVRsa0NNQ2ozaGEyeXA5ZXBuZmNqVG8vT1RlbFFjV0kxRjUrcDVoTEMwNks2?= =?utf-8?B?eEJjWmRWMzE5aURZRmRscVRQNXFwajIyVVBMQTc5bHJjL3VVajBCaGhRY25M?= =?utf-8?B?RXdOQUdNUG9kZWxUeHNJdTcyVU5ZNS81L0hISTNZUjZ6aDZaU0Y0elFHSDhK?= =?utf-8?B?REt6MGFISUk1aTUzR0dPSDBOb1gwWjJpNUMreUlXd0owQkVIR0JLeFViM1FB?= =?utf-8?B?ZFVHdzQvWlB2QnBzSGdOOHgxVlA0SkJZMWl0SUxhc1JvbVNXNzZBaWQzSThX?= =?utf-8?B?SUFtbWJBaG94clliM3pYVkRMdkxGejN6SC93MFovWTBncmx0U0p2SUFvcHRP?= =?utf-8?B?Z01mTmY5RTR0WE5DYnFYTUlYd1UxbWliTGl2eUpIYkNQMFpyWWNIaDFRWmsy?= =?utf-8?B?V3RybktLRit2MzlCZXgxTGtnVldaUXdGZnRWV0hZM1NIM1RXOTlacUFBQVlN?= =?utf-8?B?KzhkRllDRGdjZFZsRzFuWW5wQWdWanpRNTBwYXdYZnRuVFFWWGl3VkdKcTcy?= =?utf-8?Q?tAecHiixFlTHELY1ROARQeg=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN0PR12MB6101.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2f0b16c1-2380-42a7-3cb0-08db4118f6e1 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Apr 2023 20:59:27.9502 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: OdbJkS4AFpN2Zcy3s07vpQFCVuh4kO3Ui0SjAUNpxTVb1oEkDHEsjwHe+VIktpjCwC7D/8AAB4WAULpoAbFXqA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR12MB5381 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org W1B1YmxpY10NCg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQXJt aW4gV29sZiA8V19Bcm1pbkBnbXguZGU+DQo+IFNlbnQ6IFdlZG5lc2RheSwgQXByaWwgMTksIDIw MjMgMTM6MDQNCj4gVG86IEpvcmdlIExvcGV6IDxqb3JnZWFsdHh3b3JrQGdtYWlsLmNvbT47IGhk ZWdvZWRlQHJlZGhhdC5jb207DQo+IHBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3Jn OyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOw0KPiB0aG9tYXNAdC04Y2guZGUNCj4gU3Vi amVjdDogUmU6IFtQQVRDSCB2MTAgMDMvMTRdIEhQIEJJT1NDRkcgZHJpdmVyIC0gYmlvc2NmZw0K PiANCj4gQW0gMTkuMDQuMjMgdW0gMTc6MTMgc2NocmllYiBKb3JnZSBMb3BlejoNCj4gDQo+ID4g SFAgQklPUyBDb25maWd1cmF0aW9uIGRyaXZlciBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgYSBkcml2 ZXIgc3VwcG9ydGluZw0KPiA+IHRoZSBsYXRlc3Qgc3lzZnMgY2xhc3MgZmlybXdhcmUgYXR0cmli dXRlcyBmcmFtZXdvcmsgYWxsb3dpbmcgdGhlIHVzZXINCj4gPiB0byBjaGFuZ2UgQklPUyBzZXR0 aW5ncyBhbmQgc2VjdXJpdHkgc29sdXRpb25zIG9uIEhQIEluYy7igJlzIGNvbW1lcmNpYWwNCj4g PiBub3RlYm9va3MuDQo+ID4NCj4gPiBNYW55IGZlYXR1cmVzIG9mIEhQIENvbW1lcmNpYWwgbm90 ZWJvb2tzIGNhbiBiZSBtYW5hZ2VkIHVzaW5nDQo+IFdpbmRvd3MNCj4gPiBNYW5hZ2VtZW50IElu c3RydW1lbnRhdGlvbiAoV01JKS4gV01JIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIFdlYi0NCj4g QmFzZWQNCj4gPiBFbnRlcnByaXNlIE1hbmFnZW1lbnQgKFdCRU0pIHRoYXQgcHJvdmlkZXMgYSBz dGFuZGFyZHMtYmFzZWQNCj4gaW50ZXJmYWNlDQo+ID4gZm9yIGNoYW5naW5nIGFuZCBtb25pdG9y aW5nIHN5c3RlbSBzZXR0aW5ncy4gSFAgQklPU0NGRyBkcml2ZXIgcHJvdmlkZXMNCj4gPiBhIG5h dGl2ZSBMaW51eCBzb2x1dGlvbiBhbmQgdGhlIGV4cG9zZWQgZmVhdHVyZXMgZmFjaWxpdGF0ZXMg dGhlDQo+ID4gbWlncmF0aW9uIHRvIExpbnV4IGVudmlyb25tZW50cy4NCj4gPg0KPiA+IFRoZSBM aW51eCBzZWN1cml0eSBmZWF0dXJlcyB0byBiZSBwcm92aWRlZCBpbiBocC1iaW9zY2ZnIGRyaXZl ciBlbmFibGVzDQo+ID4gbWFuYWdpbmcgdGhlIEJJT1Mgc2V0dGluZ3MgYW5kIHNlY3VyaXR5IHNv bHV0aW9ucyB2aWEgc3lzZnMsIGEgdmlydHVhbA0KPiA+IGZpbGVzeXN0ZW0gdGhhdCBjYW4gYmUg dXNlZCBieSB1c2VyLW1vZGUgYXBwbGljYXRpb25zLiBUaGUgbmV3DQo+ID4gZG9jdW1lbnRhdGlv biBjb3ZlciBIUC1zcGVjaWZpYyBmaXJtd2FyZSBzeXNmcyBhdHRyaWJ1dGVzIHN1Y2ggU2VjdXJl DQo+ID4gUGxhdGZvcm0gTWFuYWdlbWVudCBhbmQgU3VyZSBTdGFydC4gRWFjaCBzZWN0aW9uIHBy b3ZpZGVzIHNlY3VyaXR5DQo+ID4gZmVhdHVyZSBkZXNjcmlwdGlvbiBhbmQgaWRlbnRpZmllcyBz eXNmcyBkaXJlY3RvcmllcyBhbmQgZmlsZXMgZXhwb3NlZA0KPiA+IGJ5IHRoZSBkcml2ZXIuDQo+ ID4NCj4gPiBNYW55IEhQIENvbW1lcmNpYWwgbm90ZWJvb2tzIGluY2x1ZGUgYSBmZWF0dXJlIGNh bGxlZCBTZWN1cmUgUGxhdGZvcm0NCj4gPiBNYW5hZ2VtZW50IChTUE0pLCB3aGljaCByZXBsYWNl cyBvbGRlciBwYXNzd29yZC1iYXNlZCBCSU9TIHNldHRpbmdzDQo+ID4gbWFuYWdlbWVudCB3aXRo IHB1YmxpYyBrZXkgY3J5cHRvZ3JhcGh5LiBQQyBzZWN1cmUgcHJvZHVjdA0KPiBtYW5hZ2VtZW50 DQo+ID4gYmVnaW5zIHdoZW4gYSB0YXJnZXQgc3lzdGVtIGlzIHByb3Zpc2lvbmVkIHdpdGggY3J5 cHRvZ3JhcGhpYyBrZXlzDQo+ID4gdGhhdCBhcmUgdXNlZCB0byBlbnN1cmUgdGhlIGludGVncml0 eSBvZiBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIHN5c3RlbQ0KPiA+IG1hbmFnZW1lbnQgdXRpbGl0 aWVzIGFuZCB0aGUgQklPUy4NCj4gPg0KPiA+IEhQIENvbW1lcmNpYWwgbm90ZWJvb2tzIGhhdmUg c2V2ZXJhbCBCSU9TIHNldHRpbmdzIHRoYXQgY29udHJvbCBpdHMNCj4gPiBiZWhhdmlvdXIgYW5k IGNhcGFiaWxpdGllcywgbWFueSBvZiB3aGljaCBhcmUgcmVsYXRlZCB0byBzZWN1cml0eS4NCj4g PiBUbyBwcmV2ZW50IHVuYXV0aG9yaXplZCBjaGFuZ2VzIHRvIHRoZXNlIHNldHRpbmdzLCB0aGUg c3lzdGVtIGNhbg0KPiA+IGJlIGNvbmZpZ3VyZWQgdG8gdXNlIGEgY3J5cHRvZ3JhcGhpYyBzaWdu YXR1cmUtYmFzZWQgYXV0aG9yaXphdGlvbg0KPiA+IHN0cmluZyB0aGF0IHRoZSBCSU9TIHdpbGwg dXNlIHRvIHZlcmlmeSBhdXRob3JpemF0aW9uIHRvIG1vZGlmeSB0aGUNCj4gPiBzZXR0aW5nLg0K PiA+DQo+ID4gTGludXggU2VjdXJpdHkgY29tcG9uZW50cyBhcmUgdW5kZXIgZGV2ZWxvcG1lbnQg YW5kIG5vdCBwdWJsaXNoZWQgeWV0Lg0KPiA+IFRoZSBvbmx5IGxpbnV4IGNvbXBvbmVudCBpcyB0 aGUgZHJpdmVyIChocCBiaW9zY2ZnKSBhdCB0aGlzIHRpbWUuDQo+ID4gT3RoZXIgcHVibGlzaGVk IHNlY3VyaXR5IGNvbXBvbmVudHMgYXJlIHVuZGVyIFdpbmRvd3MuDQo+ID4NCj4gPiBTaWduZWQt b2ZmLWJ5OiBKb3JnZSBMb3BleiA8am9yZ2UubG9wZXoyQGhwLmNvbT4NCj4gPg0KPiA+IC0tLQ0K PiA+IEJhc2VkIG9uIHRoZSBsYXRlc3QgcGxhdGZvcm0tZHJpdmVycy14ODYuZ2l0L2Zvci1uZXh0 DQo+ID4gLS0tDQo+ID4gICBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC9ocC1iaW9zY2ZnL2Jpb3Nj ZmcuYyB8IDk2MQ0KPiArKysrKysrKysrKysrKysrKysrDQo+ID4gICAxIGZpbGUgY2hhbmdlZCwg OTYxIGluc2VydGlvbnMoKykNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BsYXRm b3JtL3g4Ni9ocC9ocC1iaW9zY2ZnL2Jpb3NjZmcuYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvcGxhdGZvcm0veDg2L2hwL2hwLWJpb3NjZmcvYmlvc2NmZy5jDQo+IGIvZHJpdmVycy9w bGF0Zm9ybS94ODYvaHAvaHAtYmlvc2NmZy9iaW9zY2ZnLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNGIwZDRmNTZlNjVmDQo+ID4gLS0tIC9kZXYv bnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwL2hwLWJpb3NjZmcvYmlvc2Nm Zy5jDQo+ID4gQEAgLTAsMCArMSw5NjEgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogQ29tbW9uIG1ldGhvZHMgZm9yIHVzZSB3aXRo IGhwLWJpb3NjZmcgZHJpdmVyDQo+ID4gKyAqDQo+ID4gKyAqICBDb3B5cmlnaHQgKGMpIDIwMjIg SFAgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNkZWZp bmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQNCj4gPiArDQo+ID4gKyNpbmNs dWRlIDxsaW51eC9mcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3dtaS5oPg0KPiA+ ICsjaW5jbHVkZSAiYmlvc2NmZy5oIg0KPiA+ICsjaW5jbHVkZSAiLi4vLi4vZmlybXdhcmVfYXR0 cmlidXRlc19jbGFzcy5oIg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbmxzLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9lcnJuby5oPg0KPiA+ICsNCj4gPiArTU9EVUxFX0FVVEhPUigiSm9yZ2UgTG9w ZXogPGpvcmdlLmxvcGV6MkBocC5jb20+Iik7DQo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiSFAg QklPUyBDb25maWd1cmF0aW9uIERyaXZlciIpOw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYmlvc2NmZ19wcml2IGJpb3NjZmdfZHJ2ID0gew0KPiA+ICsJ Lm11dGV4ID0gX19NVVRFWF9JTklUSUFMSVpFUihiaW9zY2ZnX2Rydi5tdXRleCksDQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGNsYXNzICpmd19hdHRyX2NsYXNzOw0KPiA+ICsN Cj4gPiAraW50IGdldF9pbnRlZ2VyX2Zyb21fYnVmZmVyKGludCAqKmJ1ZmZlciwgdTMyICpidWZm ZXJfc2l6ZSwgaW50ICppbnRlZ2VyKQ0KPiA+ICt7DQo+ID4gKwlpbnQgKnB0ciA9IFBUUl9BTElH TigqYnVmZmVyLCA0KTsNCj4gPiArDQo+ID4gKwkvKiBFbnN1cmUgdGhlcmUgaXMgZW5vdWdoIHNw YWNlIHJlbWFpbmluZyB0byByZWFkIHRoZSBpbnRlZ2VyICovDQo+ID4gKwlpZiAoKmJ1ZmZlcl9z aXplIDwgc2l6ZW9mKGludCkpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJ KmludGVnZXIgPSAqKHB0cisrKTsNCj4gPiArCSpidWZmZXIgPSBwdHI7DQo+ID4gKwkqYnVmZmVy X3NpemUgLT0gc2l6ZW9mKGludCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g PiArDQo+ID4gKw0KPiA+ICtpbnQgZ2V0X3N0cmluZ19mcm9tX2J1ZmZlcih1OCAqKmJ1ZmZlciwg dTMyICpidWZmZXJfc2l6ZSwgY2hhciAqZHN0LCB1MzINCj4gZHN0X3NpemUpDQo+ID4gK3sNCj4g PiArCXUxNiAqc3JjID0gKHUxNiAqKSpidWZmZXI7DQo+ID4gKwl1MTYgc3JjX3NpemU7DQo+ID4g Kw0KPiA+ICsJdTE2IHNpemU7DQo+ID4gKwlpbnQgaTsNCj4gPiArCWludCBlc2NhcGUgPSAwOw0K PiA+ICsJaW50IGNvbnZfZHN0X3NpemU7DQo+ID4gKw0KPiA+ICsJaWYgKCpidWZmZXJfc2l6ZSA8 IHNpemVvZih1MTYpKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCXNyY19z aXplID0gKihzcmMrKyk7DQo+ID4gKwkvKiBzaXplIHZhbHVlIGluIHUxNiBjaGFycyAqLw0KPiA+ ICsJc2l6ZSA9IHNyY19zaXplIC8gc2l6ZW9mKHUxNik7DQo+ID4gKw0KPiA+ICsJLyogRW5zdXJl IHRoZXJlIGlzIGVub3VnaCBzcGFjZSByZW1haW5pbmcgdG8gcmVhZCBhbmQgY29udmVydA0KPiA+ ICsJICogdGhlIHN0cmluZw0KPiA+ICsJICovDQo+ID4gKwlpZiAoKmJ1ZmZlcl9zaXplIDwgc3Jj X3NpemUpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsg aSA8IHNpemU7IGkrKykNCj4gPiArCQlpZiAoc3JjW2ldID09ICdcXCcgfHwNCj4gPiArCQkgICAg c3JjW2ldID09ICdccicgfHwNCj4gPiArCQkgICAgc3JjW2ldID09ICdcbicgfHwNCj4gPiArCQkg ICAgc3JjW2ldID09ICdcdCcpDQo+ID4gKwkJCWVzY2FwZSsrOw0KPiA+ICsNCj4gPiArCXNpemUg Kz0gZXNjYXBlOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBDb252ZXJzaW9uIGlzIGxpbWl0 ZWQgdG8gZGVzdGluYXRpb24gc3RyaW5nIG1heCBudW1iZXIgb2YNCj4gPiArCSAqIGJ5dGVzLg0K PiA+ICsJICovDQo+ID4gKwljb252X2RzdF9zaXplID0gc2l6ZTsNCj4gPiArCWlmIChzaXplID4g ZHN0X3NpemUpDQo+ID4gKwkJY29udl9kc3Rfc2l6ZSA9IGRzdF9zaXplIC0gMTsNCj4gPiArDQo+ ID4gKwkvKg0KPiA+ICsJICogY29udmVydCBmcm9tIFVURi0xNiB1bmljb2RlIHRvIEFTQ0lJDQo+ ID4gKwkgKi8NCj4gPiArCXV0ZjE2c190b191dGY4cyhzcmMsIHNyY19zaXplLCBVVEYxNl9IT1NU X0VORElBTiwgZHN0LA0KPiBjb252X2RzdF9zaXplKTsNCj4gPiArCWRzdFtjb252X2RzdF9zaXpl XSA9IDA7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IHNpemUgJiYgaSA8IGNvbnZfZHN0 X3NpemU7IGkrKykgew0KPiA+ICsJCWlmICgqc3JjID09ICdcXCcgfHwNCj4gPiArCQkgICAgKnNy YyA9PSAnXHInIHx8DQo+ID4gKwkJICAgICpzcmMgPT0gJ1xuJyB8fA0KPiA+ICsJCSAgICAqc3Jj ID09ICdcdCcpDQo+ID4gKwkJCWRzdFtpKytdID0gJ1xcJzsNCj4gPiArDQo+ID4gKwkJaWYgKCpz cmMgPT0gJ1xyJykNCj4gPiArCQkJZHN0W2ldID0gJ3InOw0KPiA+ICsJCWVsc2UgaWYgKCpzcmMg PT0gJ1xuJykNCj4gPiArCQkJZHN0W2ldID0gJ24nOw0KPiA+ICsJCWVsc2UgaWYgKCpzcmMgPT0g J1x0JykNCj4gPiArCQkJZHN0W2ldID0gJ3QnOw0KPiA+ICsJCWVsc2UgaWYgKCpzcmMgPT0gJyIn KQ0KPiA+ICsJCQlkc3RbaV0gPSAnXCcnOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJZHN0W2ldID0g KnNyYzsNCj4gPiArCQlzcmMrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkqYnVmZmVyID0gKHU4 ICopc3JjOw0KPiA+ICsJKmJ1ZmZlcl9zaXplIC09IHNpemUgKiBzaXplb2YodTE2KTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gc2l6ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8qDQo+ID4g KyAqIGNhbGN1bGF0ZV9zdHJpbmdfYnVmZmVyKCkgLSBkZXRlcm1pbmVzIHNpemUgb2Ygc3RyaW5n IGJ1ZmZlciBmb3IgdXNlIHdpdGgNCj4gQklPUyBjb21tdW5pY2F0aW9uDQo+ID4gKyAqIEBzdHI6 IHRoZSBzdHJpbmcgdG8gY2FsY3VsYXRlIGJhc2VkIHVwb24NCj4gPiArICovDQo+ID4gK3NpemVf dCBiaW9zY2ZnX2NhbGN1bGF0ZV9zdHJpbmdfYnVmZmVyKGNvbnN0IGNoYXIgKnN0cikNCj4gPiAr ew0KPiA+ICsJaW50IGxlbmd0aCA9IHN0cmxlbihzdHIpOw0KPiA+ICsJaW50IHNpemU7DQo+ID4g Kw0KPiA+ICsJLyogQklPUyBleHBlY3RzIDQgYnl0ZXMgd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMg Zm91bmQgKi8NCj4gPiArCWlmICghbGVuZ3RoKQ0KPiA+ICsJCWxlbmd0aCA9IDE7DQo+ID4gKw0K PiA+ICsJLyogdTE2IGxlbmd0aCBmaWVsZCArIG9uZSBVVEYxNiBjaGFyIGZvciBlYWNoIGlucHV0 IGNoYXIgKi8NCj4gPiArCXNpemUgPSBzaXplb2YodTE2KSArIGxlbmd0aCAqIHNpemVvZih1MTYp Ow0KPiA+ICsNCj4gPiArCXJldHVybiBzaXplOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgYmlv c2NmZ193bWlfZXJyb3JfYW5kX21lc3NhZ2UoaW50IGVycm9yX2NvZGUpDQo+ID4gK3sNCj4gPiAr CWNoYXIgKmVycm9yX21zZyA9IE5VTEw7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXN3 aXRjaCAoZXJyb3JfY29kZSkgew0KPiA+ICsJY2FzZSBTVUNDRVNTOg0KPiA+ICsJCWVycm9yX21z ZyA9ICJTdWNjZXNzIjsNCj4gPiArCQlyZXQgPSAwOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBDTURfRkFJTEVEOg0KPiA+ICsJCWVycm9yX21zZyA9ICJDb21tYW5kIGZhaWxlZCI7DQo+ID4g KwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgSU5WQUxJRF9TSUdO Og0KPiA+ICsJCWVycm9yX21zZyA9ICJJbnZhbGlkIHNpZ25hdHVyZSI7DQo+ID4gKwkJcmV0ID0g LUVJTlZBTDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgSU5WQUxJRF9DTURfVkFMVUU6DQo+ ID4gKwkJZXJyb3JfbXNnID0gIkludmFsaWQgY29tbWFuZCB2YWx1ZS9GZWF0dXJlIG5vdA0KPiBz dXBwb3J0ZWQiOw0KPiA+ICsJCXJldCA9IC1FT1BOT1RTVVBQOw0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBJTlZBTElEX0NNRF9UWVBFOg0KPiA+ICsJCWVycm9yX21zZyA9ICJJbnZhbGlkIGNv bW1hbmQgdHlwZSI7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlicmVhazsNCj4gPiAr CWNhc2UgSU5WQUxJRF9EQVRBX1NJWkU6DQo+ID4gKwkJZXJyb3JfbXNnID0gIkludmFsaWQgZGF0 YSBzaXplIjsNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBJTlZBTElEX0NNRF9QQVJBTToNCj4gPiArCQllcnJvcl9tc2cgPSAiSW52YWxpZCBjb21tYW5k IHBhcmFtZXRlciI7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlicmVhazsNCj4gPiAr CWNhc2UgRU5DUllQX0NNRF9SRVFVSVJFRDoNCj4gPiArCQllcnJvcl9tc2cgPSAiU2VjdXJlL2Vu Y3J5cHRlZCBjb21tYW5kIHJlcXVpcmVkIjsNCj4gPiArCQlyZXQgPSAtRUFDQ0VTOw0KPiA+ICsJ CWJyZWFrOw0KPiA+ICsJY2FzZSBOT19TRUNVUkVfU0VTU0lPTjoNCj4gPiArCQllcnJvcl9tc2cg PSAiTm8gc2VjdXJlIHNlc3Npb24gZXN0YWJsaXNoZWQiOw0KPiA+ICsJCXJldCA9IC1FQUNDRVM7 DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFNFQ1VSRV9TRVNTSU9OX0ZPVU5EOg0KPiA+ICsJ CWVycm9yX21zZyA9ICJTZWN1cmUgc2Vzc2lvbiBhbHJlYWR5IGVzdGFibGlzaGVkIjsNCj4gPiAr CQlyZXQgPSAtRUFDQ0VTOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBTRUNVUkVfU0VTU0lP Tl9GQUlMRUQ6DQo+ID4gKwkJZXJyb3JfbXNnID0gIlNlY3VyZSBzZXNzaW9uIGZhaWxlZCI7DQo+ ID4gKwkJcmV0ID0gLUVJTzsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgQVVUSF9GQUlMRUQ6 DQo+ID4gKwkJZXJyb3JfbXNnID0gIk90aGVyIHBlcm1pc3Npb24vQXV0aGVudGljYXRpb24gZmFp bGVkIjsNCj4gPiArCQlyZXQgPSAtRUFDQ0VTOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBJ TlZBTElEX0JJT1NfQVVUSDoNCj4gPiArCQllcnJvcl9tc2cgPSAiSW52YWxpZCBCSU9TIGFkbWlu aXN0cmF0b3IgcGFzc3dvcmQiOw0KPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIE5PTkNFX0RJRF9OT1RfTUFUQ0g6DQo+ID4gKwkJZXJyb3JfbXNnID0gIk5v bmNlIGRpZCBub3QgbWF0Y2giOw0KPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIEdFTkVSSUNfRVJST1I6DQo+ID4gKwkJZXJyb3JfbXNnID0gIkdlbmVyaWMv T3RoZXIgZXJyb3IiOw0KPiA+ICsJCXJldCA9IC1FSU87DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlj YXNlIEJJT1NfQURNSU5fUE9MSUNZX05PVF9NRVQ6DQo+ID4gKwkJZXJyb3JfbXNnID0gIkJJT1Mg QWRtaW4gcGFzc3dvcmQgZG9lcyBub3QgbWVldCBwYXNzd29yZA0KPiBwb2xpY3kgcmVxdWlyZW1l bnRzIjsNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBC SU9TX0FETUlOX05PVF9TRVQ6DQo+ID4gKwkJZXJyb3JfbXNnID0gIkJJT1MgU2V0dXAgcGFzc3dv cmQgaXMgbm90IHNldC4iOw0KPiA+ICsJCXJldCA9IC1FUEVSTTsNCj4gPiArCQlicmVhazsNCj4g PiArCWNhc2UgUDIxX05PX1BST1ZJU0lPTkVEOg0KPiA+ICsJCWVycm9yX21zZyA9ICJQMjEgaXMg bm90IHByb3Zpc2lvbmVkIjsNCj4gPiArCQlyZXQgPSAtRVBFUk07DQo+ID4gKwkJYnJlYWs7DQo+ ID4gKwljYXNlIFAyMV9QUk9WSVNJT05fSU5fUFJPR1JFU1M6DQo+ID4gKwkJZXJyb3JfbXNnID0g IlAyMSBpcyBhbHJlYWR5IHByb3Zpc2lvbmVkIG9yIHByb3Zpc2lvbmluZyBpcyBpbg0KPiBwcm9n cmVzcyBhbmQgYSBzaWduaW5nIGtleSBoYXMgYWxyZWFkeSBiZWVuIHNlbnQuIjsNCj4gPiArCQly ZXQgPSAtRUlOUFJPR1JFU1M7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFAyMV9JTl9VU0U6 DQo+ID4gKwkJZXJyb3JfbXNnID0gIlAyMSBpbiB1c2UgKGNhbm5vdCBkZXByb3Zpc2lvbikiOw0K PiA+ICsJCXJldCA9IC1FUEVSTTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgSEVQX05PVF9B Q1RJVkU6DQo+ID4gKwkJZXJyb3JfbXNnID0gIkhFUCBub3QgYWN0aXZhdGVkIjsNCj4gPiArCQly ZXQgPSAtRVBFUk07DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIEhFUF9BTFJFQURZX1NFVDoN Cj4gPiArCQllcnJvcl9tc2cgPSAiSEVQIFRyYW5zcG9ydCBhbHJlYWR5IHNldCI7DQo+ID4gKwkJ cmV0ID0gLUVJTlZBTDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgSEVQX0NIRUNLX1NUQVRF Og0KPiA+ICsJCWVycm9yX21zZyA9ICJDaGVjayB0aGUgY3VycmVudCBIRVAgc3RhdGUiOw0KPiA+ ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJ CWVycm9yX21zZyA9ICJHZW5lcmljL090aGVyIGVycm9yIjsNCj4gPiArCQlyZXQgPSAtRUlPOw0K PiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChlcnJvcl9jb2RlKQ0KPiA+ ICsJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoIlJldHVybmVkIGVycm9yIDB4JXgsIFwiJXNcIlxuIiwN Cj4gZXJyb3JfY29kZSwgZXJyb3JfbXNnKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogcGVuZGluZ19yZWJvb3Rfc2hvdygp IC0gc3lzZnMgaW1wbGVtZW50YXRvbiBmb3IgcmVhZA0KPiBwZW5kaW5nX3JlYm9vdA0KPiA+ICsg KiBAa29iajogS2VybmVsIG9iamVjdCBmb3IgdGhpcyBhdHRyaWJ1dGUNCj4gPiArICogQGF0dHI6 IEtlcm5lbCBvYmplY3QgYXR0cmlidXRlDQo+ID4gKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gZGlz cGxheSB0byB1c2Vyc3BhY2UNCj4gPiArICoNCj4gPiArICogU3RvcmVzIGRlZmF1bHQgdmFsdWUg YXMgMA0KPiA+ICsgKiBXaGVuIGN1cnJlbnRfdmFsdWUgaXMgY2hhbmdlZCB0aGlzIGF0dHJpYnV0 ZSBpcyBzZXQgdG8gMSB0byBub3RpZnkgcmVib290DQo+IG1heSBiZSByZXF1aXJlZA0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIHNzaXplX3QgcGVuZGluZ19yZWJvb3Rfc2hvdyhzdHJ1Y3Qga29iamVj dCAqa29iaiwNCj4gPiArCQkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiAr CQkJCSAgIGNoYXIgKmJ1ZikNCj4gPiArew0KPiA+ICsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAi JWRcbiIsIGJpb3NjZmdfZHJ2LnBlbmRpbmdfcmVib290KTsNCj4gPiArfQ0KPiA+ICtzdGF0aWMg c3RydWN0IGtvYmpfYXR0cmlidXRlIHBlbmRpbmdfcmVib290ID0NCj4gX19BVFRSX1JPKHBlbmRp bmdfcmVib290KTsNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIGNyZWF0ZV9hdHRyaWJ1dGVzX2xl dmVsX3N5c2ZzX2ZpbGVzKCkgLSBDcmVhdGVzIHBlbmRpbmdfcmVib290DQo+IGF0dHJpYnV0ZXMN Cj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgY3JlYXRlX2F0dHJpYnV0ZXNfbGV2ZWxfc3lzZnNf ZmlsZXModm9pZCkNCj4gPiArew0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSBz eXNmc19jcmVhdGVfZmlsZSgmYmlvc2NmZ19kcnYubWFpbl9kaXJfa3NldC0+a29iaiwNCj4gJnBl bmRpbmdfcmVib290LmF0dHIpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0K PiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgYXR0cl9uYW1lX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopDQo+ID4gK3sNCj4g PiArCWtmcmVlKGtvYmopOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGtvYmpfdHlwZSBhdHRyX25hbWVfa3R5cGUgPSB7DQo+ID4gKwkucmVsZWFzZQk9IGF0dHJfbmFt ZV9yZWxlYXNlLA0KPiA+ICsJLnN5c2ZzX29wcwk9ICZrb2JqX3N5c2ZzX29wcywNCj4gPiArfTsN Cj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIGdldF93bWlvYmpfcG9pbnRlcigpIC0gR2V0IENvbnRl bnQgb2YgV01JIGJsb2NrIGZvciBwYXJ0aWN1bGFyDQo+IGluc3RhbmNlDQo+ID4gKyAqDQo+ID4g KyAqIEBpbnN0YW5jZV9pZDogV01JIGluc3RhbmNlIElEDQo+ID4gKyAqIEBndWlkX3N0cmluZzog V01JIEdVSUQgKGluIHN0ciBmb3JtKQ0KPiA+ICsgKg0KPiA+ICsgKiBGZXRjaGVzIHRoZSBjb250 ZW50IGZvciBXTUkgYmxvY2sgKGluc3RhbmNlX2lkKSB1bmRlciBHVUlEDQo+IChndWlkX3N0cmlu ZykNCj4gPiArICogQ2FsbGVyIG11c3Qga2ZyZWUgdGhlIHJldHVybg0KPiA+ICsgKi8NCj4gPiAr dW5pb24gYWNwaV9vYmplY3QgKmdldF93bWlvYmpfcG9pbnRlcihpbnQgaW5zdGFuY2VfaWQsIGNv bnN0IGNoYXINCj4gKmd1aWRfc3RyaW5nKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNwaV9idWZm ZXIgb3V0ID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9Ow0KPiA+ICsJYWNwaV9zdGF0 dXMgc3RhdHVzOw0KPiA+ICsNCj4gPiArCXN0YXR1cyA9IHdtaV9xdWVyeV9ibG9jayhndWlkX3N0 cmluZywgaW5zdGFuY2VfaWQsICZvdXQpOw0KPiA+ICsJcmV0dXJuIEFDUElfU1VDQ0VTUyhzdGF0 dXMpID8gKHVuaW9uIGFjcGlfb2JqZWN0ICopb3V0LnBvaW50ZXIgOg0KPiBOVUxMOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBnZXRfaW5zdGFuY2VfY291bnQoKSAtIENvbXB1dGUg dG90YWwgbnVtYmVyIG9mIGluc3RhbmNlcyB1bmRlcg0KPiBndWlkX3N0cmluZw0KPiA+ICsgKg0K PiA+ICsgKiBAZ3VpZF9zdHJpbmc6IFdNSSBHVUlEIChpbiBzdHJpbmcgZm9ybSkNCj4gPiArICov DQo+ID4gK2ludCBnZXRfaW5zdGFuY2VfY291bnQoY29uc3QgY2hhciAqZ3VpZF9zdHJpbmcpDQo+ ID4gK3sNCj4gPiArCXVuaW9uIGFjcGlfb2JqZWN0ICp3bWlfb2JqID0gTlVMTDsNCj4gPiArCWlu dCBpID0gMDsNCj4gPiArDQo+ID4gKwlkbyB7DQo+ID4gKwkJa2ZyZWUod21pX29iaik7DQo+ID4g KwkJd21pX29iaiA9IGdldF93bWlvYmpfcG9pbnRlcihpLCBndWlkX3N0cmluZyk7DQo+ID4gKwkJ aSsrOw0KPiA+ICsJfSB3aGlsZSAod21pX29iaik7DQo+ID4gKw0KPiANCj4gSGksDQo+IA0KPiB0 aGUgaW5zdGFuY2UgY291bnQgb2YgYSBXTUkgb2JqZWN0IGlzIGFscmVhZHkga25vd24gdG8gdGhl IFdNSSBkcml2ZXIgY29yZSwNCj4gc2VlIGRyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jIChzdHJ1 Y3QgZ3VpZF9ibG9jaykuIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzDQo+IGN1cnJlbnRseQ0KPiBu byB3YXkgZm9yIFdNSSBkcml2ZXJzIHRvIGFjY2VzcyB0aGlzIGluZm9ybWF0aW9uLg0KPiBNYXli ZSB5b3UgY2FuIGltcGxlbWVudCBzdWNoIGEgZnVuY3Rpb24gaW5zdGVhZD8NCj4gDQoNClN1Y2gg YW4gaW1wcm92ZW1lbnQgY2FuIHByb2JhYmx5IGFsc28gbWVhbiB0aGF0IHRoZSBlcXVpdmFsZW50 IGZ1bmN0aW9uDQppbiB0aGUgRGVsbCBkcml2ZXIgY2FuIGdvIHRvby4NCg0KPiA+ICsJcmV0dXJu IGktMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogYWxsb2NfYXR0cmlidXRlc19k YXRhKCkgLSBBbGxvY2F0ZSBhdHRyaWJ1dGVzIGRhdGEgZm9yIGEgcGFydGljdWxhciB0eXBlDQo+ ID4gKyAqDQo+ID4gKyAqIEBhdHRyX3R5cGU6IEF0dHJpYnV0ZSB0eXBlIHRvIGFsbG9jYXRlDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IGFsbG9jX2F0dHJpYnV0ZXNfZGF0YShpbnQgYXR0cl90 eXBlKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0dmFsID0gMDsNCj4gPiArDQo+ID4gKwlzd2l0Y2gg KGF0dHJfdHlwZSkgew0KPiA+ICsJY2FzZSBIUFdNSV9TVFJJTkdfVFlQRToNCj4gPiArCQlyZXR2 YWwgPSBhbGxvY19zdHJpbmdfZGF0YSgpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBIUFdN SV9JTlRFR0VSX1RZUEU6DQo+ID4gKwkJcmV0dmFsID0gYWxsb2NfaW50ZWdlcl9kYXRhKCk7DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIEhQV01JX0VOVU1FUkFUSU9OX1RZUEU6DQo+ID4gKwkJ cmV0dmFsID0gYWxsb2NfZW51bWVyYXRpb25fZGF0YSgpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJ Y2FzZSBIUFdNSV9PUkRFUkVEX0xJU1RfVFlQRToNCj4gPiArCQlyZXR2YWwgPSBhbGxvY19vcmRl cmVkX2xpc3RfZGF0YSgpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBIUFdNSV9QQVNTV09S RF9UWVBFOg0KPiA+ICsJCXJldHZhbCA9IGFsbG9jX3Bhc3N3b3JkX2RhdGEoKTsNCj4gPiArCQli cmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIHJldHZhbDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IGNvbnZlcnRfaGV4c3Ry X3RvX3N0cihjb25zdCBjaGFyICppbnB1dCwgdTMyIGlucHV0X2xlbiwgY2hhciAqKnN0ciwgaW50 DQo+ICpsZW4pDQo+ID4gK3sNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsJaW50IG5ld19sZW4g PSAwOw0KPiA+ICsJY2hhciB0bXBbXSA9ICIweDAwIjsNCj4gPiArCWNoYXIgKm5ld19zdHIgPSBO VUxMOw0KPiA+ICsJbG9uZyAgY2g7DQo+ID4gKwlpbnQgaTsNCj4gPiArDQo+ID4gKwlpZiAoaW5w dXRfbGVuIDw9IDAgfHwgaW5wdXQgPT0gTlVMTCB8fCBzdHIgPT0gTlVMTCB8fCBsZW4gPT0gTlVM TCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkqbGVuID0gMDsNCj4gPiAr CSpzdHIgPSBOVUxMOw0KPiA+ICsNCj4gPiArCW5ld19zdHIgPSBrbWFsbG9jKGlucHV0X2xlbiwg R0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIW5ld19zdHIpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07 DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGlucHV0X2xlbjsgaSArPSA1KSB7DQo+ID4g KwkJc3RybmNweSh0bXAsIGlucHV0ICsgaSwgc3RybGVuKHRtcCkpOw0KPiA+ICsJCWlmIChrc3Ry dG9sKHRtcCwgMTYsICZjaCkgPT0gMCkgew0KPiA+ICsJCQkvLyBlc2NhcGUgY2hhcg0KPiA+ICsJ CQlpZiAoY2ggPT0gJ1xcJyB8fCBjaCA9PSAnXHInIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1x0 Jykgew0KPiA+ICsJCQkJaWYgKGNoID09ICdccicpDQo+ID4gKwkJCQkJY2ggPSAncic7DQo+ID4g KwkJCQllbHNlIGlmIChjaCA9PSAnXG4nKQ0KPiA+ICsJCQkJCWNoID0gJ24nOw0KPiA+ICsJCQkJ ZWxzZSBpZiAoY2ggPT0gJ1x0JykNCj4gPiArCQkJCQljaCA9ICd0JzsNCj4gPiArCQkJCW5ld19z dHJbbmV3X2xlbisrXSA9ICdcXCc7DQo+ID4gKwkJCX0NCj4gPiArCQkJbmV3X3N0cltuZXdfbGVu KytdID0gY2g7DQo+ID4gKwkJCWlmIChjaCA9PSAnXDAnKQ0KPiA+ICsJCQkJYnJlYWs7DQo+ID4g KwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChuZXdfbGVuKSB7DQo+ID4gKwkJbmV3X3N0 cltuZXdfbGVuXSA9ICdcMCc7DQo+ID4gKwkJKnN0ciA9IGtyZWFsbG9jKG5ld19zdHIsIChuZXdf bGVuICsgMSkgKiBzaXplb2YoY2hhciksDQo+IEdGUF9LRVJORUwpOw0KPiA+ICsJCWlmICgqc3Ry KQ0KPiA+ICsJCQkqbGVuID0gbmV3X2xlbjsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJldCA9IC1F Tk9NRU07DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJldCA9IC1FRkFVTFQ7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlrZnJlZShuZXdfc3RyKTsNCj4gPiArCXJldHVy biByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIG1hcCBvdXRwdXQgc2l6ZSB0byB0aGUgY29y cmVzcG9uZGluZyBXTUkgbWV0aG9kIGlkICovDQo+ID4gK2ludCBlbmNvZGVfb3V0c2l6ZV9mb3Jf cHZzeihpbnQgb3V0c2l6ZSkNCj4gPiArew0KPiA+ICsJaWYgKG91dHNpemUgPiA0MDk2KQ0KPiA+ ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJaWYgKG91dHNpemUgPiAxMDI0KQ0KPiA+ICsJCXJl dHVybiA1Ow0KPiA+ICsJaWYgKG91dHNpemUgPiAxMjgpDQo+ID4gKwkJcmV0dXJuIDQ7DQo+ID4g KwlpZiAob3V0c2l6ZSA+IDQpDQo+ID4gKwkJcmV0dXJuIDM7DQo+ID4gKwlpZiAob3V0c2l6ZSA+ IDApDQo+ID4gKwkJcmV0dXJuIDI7DQo+ID4gKwlyZXR1cm4gMTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoNCj4gPiArICogVXBkYXRlIGZyaWVuZGx5IGRpc3BsYXkgbmFtZSBmb3Igc2V2ZXJhbCBh dHRyaWJ1dGVzIGFzc29jaWF0ZWQgdG8NCj4gPiArICogJ1NjaGVkdWxlIFBvd2VyLU9uJw0KPiA+ ICsgKi8NCj4gPiArdm9pZCBmcmllbmRseV91c2VyX25hbWVfdXBkYXRlKGNoYXIgKnBhdGgsIGNv bnN0IGNoYXIgKmF0dHJfbmFtZSwNCj4gPiArCQkJICAgICAgIGNoYXIgKmF0dHJfZGlzcGxheSwg aW50IGF0dHJfc2l6ZSkNCj4gPiArew0KPiA+ICsJY2hhciAqZm91bmQgPSBOVUxMOw0KPiA+ICsN Cj4gPiArCWZvdW5kID0gc3Ryc3RyKHBhdGgsIFNDSEVEVUxFX1BPV0VSX09OKTsNCj4gPiArCWlm IChmb3VuZCkNCj4gPiArCQlzbnByaW50ZihhdHRyX2Rpc3BsYXksDQo+ID4gKwkJCSBhdHRyX3Np emUsDQo+ID4gKwkJCSAiJXMgLSAlcyIsDQo+ID4gKwkJCSBTQ0hFRFVMRV9QT1dFUl9PTiwNCj4g PiArCQkJIGF0dHJfbmFtZSk7DQo+ID4gKwllbHNlDQo+ID4gKwkJc3Ryc2NweShhdHRyX2Rpc3Bs YXksIGF0dHJfbmFtZSwgYXR0cl9zaXplKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiAr ICogdXBkYXRlX2F0dHJpYnV0ZV9wZXJtaXNzaW9ucygpIC0gVXBkYXRlIGF0dHJpYnV0ZXMgcGVy bWlzc2lvbnMgd2hlbg0KPiA+ICsgKiBpc1JlYWRPbmx5IHZhbHVlIGlzIDENCj4gPiArICoNCj4g PiArICogQGlzUmVhZE9ubHk6ICBSZWFkT25seSB2YWx1ZQ0KPiA+ICsgKiBAY3VycmVudF92YWw6 IGtvYmpfYXR0cmlidXRlIGNvcnJlc3BvbmRpbmcgdG8gYXR0cmlidXRlLg0KPiA+ICsgKg0KPiA+ ICsgKi8NCj4gPiArdm9pZCB1cGRhdGVfYXR0cmlidXRlX3Blcm1pc3Npb25zKHUzMiBpc1JlYWRP bmx5LCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUNCj4gKmN1cnJlbnRfdmFsKQ0KPiA+ICt7DQo+ID4g KwlpZiAoaXNSZWFkT25seSkNCj4gPiArCQljdXJyZW50X3ZhbC0+YXR0ci5tb2RlID0gKHVtb2Rl X3QpMDQ0NDsNCj4gPiArCWVsc2UNCj4gPiArCQljdXJyZW50X3ZhbC0+YXR0ci5tb2RlID0gKHVt b2RlX3QpMDY0NDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBkZXN0 cm95X2F0dHJpYnV0ZV9vYmpzKCkgLSBGcmVlIGEga3NldCBvZiBrb2JqZWN0cw0KPiA+ICsgKiBA a3NldDogVGhlIGtzZXQgdG8gZGVzdHJveQ0KPiA+ICsgKg0KPiA+ICsgKiBGcmVzcyBrb2JqZWN0 cyBjcmVhdGVkIGZvciBlYWNoIGF0dHJpYnV0ZV9uYW1lIHVuZGVyIGF0dHJpYnV0ZSB0eXBlDQo+ IGtzZXQNCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYXR0cmlidXRlX29ianMo c3RydWN0IGtzZXQgKmtzZXQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBrb2JqZWN0ICpwb3MsICpu ZXh0Ow0KPiA+ICsNCj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG5leHQsICZr c2V0LT5saXN0LCBlbnRyeSkNCj4gPiArCQlrb2JqZWN0X3B1dChwb3MpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogcmVsZWFzZV9hdHRyaWJ1dGVzX2RhdGEoKSAtIENsZWFuLXVw IGFsbCBzeXNmcyBkaXJlY3RvcmllcyBhbmQgZmlsZXMNCj4gY3JlYXRlZA0KPiA+ICsgKi8NCj4g PiArc3RhdGljIHZvaWQgcmVsZWFzZV9hdHRyaWJ1dGVzX2RhdGEodm9pZCkNCj4gPiArew0KPiA+ ICsJbXV0ZXhfbG9jaygmYmlvc2NmZ19kcnYubXV0ZXgpOw0KPiA+ICsNCj4gPiArCWV4aXRfc3Ry aW5nX2F0dHJpYnV0ZXMoKTsNCj4gPiArCWV4aXRfaW50ZWdlcl9hdHRyaWJ1dGVzKCk7DQo+ID4g KwlleGl0X2VudW1lcmF0aW9uX2F0dHJpYnV0ZXMoKTsNCj4gPiArCWV4aXRfb3JkZXJlZF9saXN0 X2F0dHJpYnV0ZXMoKTsNCj4gPiArCWV4aXRfcGFzc3dvcmRfYXR0cmlidXRlcygpOw0KPiA+ICsJ ZXhpdF9zdXJlX3N0YXJ0X2F0dHJpYnV0ZXMoKTsNCj4gPiArCWV4aXRfc2VjdXJlX3BsYXRmb3Jt X2F0dHJpYnV0ZXMoKTsNCj4gPiArDQo+ID4gKwlpZiAoYmlvc2NmZ19kcnYuYXV0aGVudGljYXRp b25fZGlyX2tzZXQpIHsNCj4gPiArDQo+IAlkZXN0cm95X2F0dHJpYnV0ZV9vYmpzKGJpb3NjZmdf ZHJ2LmF1dGhlbnRpY2F0aW9uX2Rpcl9rc2V0KTsNCj4gPiArCQlrc2V0X3VucmVnaXN0ZXIoYmlv c2NmZ19kcnYuYXV0aGVudGljYXRpb25fZGlyX2tzZXQpOw0KPiA+ICsJCWJpb3NjZmdfZHJ2LmF1 dGhlbnRpY2F0aW9uX2Rpcl9rc2V0ID0gTlVMTDsNCj4gPiArCX0NCj4gPiArCWlmIChiaW9zY2Zn X2Rydi5tYWluX2Rpcl9rc2V0KSB7DQo+ID4gKwkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmJpb3NjZmdf ZHJ2Lm1haW5fZGlyX2tzZXQtPmtvYmosDQo+ICZwZW5kaW5nX3JlYm9vdC5hdHRyKTsNCj4gPiAr CQlkZXN0cm95X2F0dHJpYnV0ZV9vYmpzKGJpb3NjZmdfZHJ2Lm1haW5fZGlyX2tzZXQpOw0KPiA+ ICsJCWtzZXRfdW5yZWdpc3RlcihiaW9zY2ZnX2Rydi5tYWluX2Rpcl9rc2V0KTsNCj4gPiArCQli aW9zY2ZnX2Rydi5tYWluX2Rpcl9rc2V0ID0gTlVMTDsNCj4gPiArCX0NCj4gPiArCW11dGV4X3Vu bG9jaygmYmlvc2NmZ19kcnYubXV0ZXgpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoN Cj4gPiArICogaHBfYWRkX290aGVyX2F0dHJpYnV0ZXMgLSBJbml0aWFsaXplIEhQIGN1c3RvbSBh dHRyaWJ1dGVzIG5vdCByZXBvcnRlZA0KPiBieQ0KPiA+ICsgKiBCSU9TIGFuZCByZXF1aXJlZCB0 byBzdXBwb3J0IFNlY3VyZSBQbGF0Zm9ybSwgU3VyZSBTdGFydCwgYW5kIFN1cmUNCj4gPiArICog QWRtaW4uDQo+ID4gKyAqIEBhdHRyX3R5cGU6IEN1c3RvbSBIUCBhdHRyaWJ1dGUgbm90IHJlcG9y dGVkIGJ5IEJJT1MNCj4gPiArICoNCj4gPiArICogSW5pdGlhbGlhemUgYWxsIDMgdHlwZXMgb2Yg YXR0cmlidXRlczogUGxhdGZvcm0sIFN1cmUgU3RhcnQsIGFuZCBTdXJlDQo+ID4gKyAqIEFkbWlu IG9iamVjdC4gIFBvcHVsYXRlcyBlYWNoIGF0dHJidXRlIHR5cGVzIHJlc3BlY3RpdmUgcHJvcGVy dGllcw0KPiA+ICsgKiB1bmRlciBzeXNmcyBmaWxlcy4NCj4gPiArICoNCj4gPiArICogUmV0dXJu cyB6ZXJvKDApIGlmIHN1Y2Nlc3NmdWwuICBPdGhlcndpc2UsIGEgbmVnYXRpdmUgdmFsdWUuDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IGhwX2FkZF9vdGhlcl9hdHRyaWJ1dGVzKGludCBhdHRy X3R5cGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBrb2JqZWN0ICphdHRyX25hbWVfa29iajsNCj4g PiArCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmogPSBOVUxMOw0KPiA+ICsJaW50IHJldHZhbCA9IDA7 DQo+ID4gKwl1OCAqYXR0cl9uYW1lOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJmJpb3NjZmdf ZHJ2Lm11dGV4KTsNCj4gPiArDQo+ID4gKwlhdHRyX25hbWVfa29iaiA9IGt6YWxsb2Moc2l6ZW9m KCphdHRyX25hbWVfa29iaiksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFhdHRyX25hbWVfa29i aikgew0KPiA+ICsJCXJldHZhbCA9IC1FTk9NRU07DQo+ID4gKwkJZ290byBlcnJfb3RoZXJfYXR0 cl9pbml0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIENoZWNrIGlmIGF0dHJpYnV0ZSB0eXBl IGlzIHN1cHBvcnRlZCAqLw0KPiA+ICsJc3dpdGNoIChhdHRyX3R5cGUpIHsNCj4gPiArCWNhc2Ug SFBXTUlfU0VDVVJFX1BMQVRGT1JNX1RZUEU6DQo+ID4gKwkJYXR0cl9uYW1lX2tvYmotPmtzZXQg PQ0KPiBiaW9zY2ZnX2Rydi5hdXRoZW50aWNhdGlvbl9kaXJfa3NldDsNCj4gPiArCQlhdHRyX25h bWUgPSBTUE1fU1RSOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsNCj4gPiArCWNhc2UgSFBXTUlfU1VS RV9TVEFSVF9UWVBFOg0KPiA+ICsJCWF0dHJfbmFtZV9rb2JqLT5rc2V0ID0gYmlvc2NmZ19kcnYu bWFpbl9kaXJfa3NldDsNCj4gPiArCQlhdHRyX25hbWUgPSBTVVJFX1NUQVJUX1NUUjsNCj4gPiAr CQlicmVhazsNCj4gPiArDQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXByX2VycigiRXJyb3I6IFVu a25vd24gYXR0cl90eXBlOiAlZFxuIiwgYXR0cl90eXBlKTsNCj4gPiArCQlyZXR2YWwgPSAtRUlO VkFMOw0KPiA+ICsJCWdvdG8gZXJyX290aGVyX2F0dHJfaW5pdDsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlyZXR2YWwgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChhdHRyX25hbWVfa29iaiwgJmF0dHJf bmFtZV9rdHlwZSwNCj4gPiArCQkJCSAgICAgIE5VTEwsICIlcyIsIGF0dHJfbmFtZSk7DQo+ID4g KwlpZiAocmV0dmFsKSB7DQo+ID4gKwkJcHJfZXJyKCJFcnJvciBlbmNvdW50ZXJlZCBbJWRdXG4i LCByZXR2YWwpOw0KPiA+ICsJCWtvYmplY3RfcHV0KGF0dHJfbmFtZV9rb2JqKTsNCj4gPiArCQln b3RvIGVycl9vdGhlcl9hdHRyX2luaXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogUG9wdWxh dGUgYXR0cmlidXRlIGRhdGEgKi8NCj4gPiArCXN3aXRjaCAoYXR0cl90eXBlKSB7DQo+ID4gKwlj YXNlIEhQV01JX1NFQ1VSRV9QTEFURk9STV9UWVBFOg0KPiA+ICsJCXJldHZhbCA9IHBvcHVsYXRl X3NlY3VyZV9wbGF0Zm9ybV9kYXRhKGF0dHJfbmFtZV9rb2JqKTsNCj4gPiArCQlicmVhazsNCj4g PiArDQo+ID4gKwljYXNlIEhQV01JX1NVUkVfU1RBUlRfVFlQRToNCj4gPiArCQlyZXR2YWwgPSBw b3B1bGF0ZV9zdXJlX3N0YXJ0X2RhdGEoYXR0cl9uYW1lX2tvYmopOw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJZ290byBlcnJfb3RoZXJfYXR0cl9pbml0Ow0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCW11dGV4X3VubG9jaygmYmlvc2NmZ19kcnYubXV0ZXgpOw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtlcnJfb3RoZXJfYXR0cl9pbml0Og0KPiA+ICsJ bXV0ZXhfdW5sb2NrKCZiaW9zY2ZnX2Rydi5tdXRleCk7DQo+ID4gKwlrZnJlZShvYmopOw0KPiA+ ICsJcmV0dXJuIHJldHZhbDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogaHBfaW5p dF9iaW9zX2F0dHJpYnV0ZXMgLSBJbml0aWFsaXplIGFsbCBhdHRyaWJ1dGVzIGZvciBhIHR5cGUN Cj4gPiArICogQGF0dHJfdHlwZTogVGhlIGF0dHJpYnV0ZSB0eXBlIHRvIGluaXRpYWxpemUNCj4g PiArICogQGd1aWQ6IFRoZSBXTUkgR1VJRCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0eXBlIHRvIGlu aXRpYWxpemUNCj4gPiArICoNCj4gPiArICogSW5pdGlhbGlhemUgYWxsIDUgdHlwZXMgb2YgYXR0 cmlidXRlczogZW51bWVyYXRpb24sIGludGVnZXIsDQo+ID4gKyAqIHN0cmluZywgcGFzc3dvcmQs IG9yZGVyZWQgbGlzdCAgb2JqZWN0LiAgUG9wdWxhdGVzIGVhY2ggYXR0cmJ1dGUgdHlwZXMNCj4g PiArICogcmVzcGVjdGl2ZSBwcm9wZXJ0aWVzIHVuZGVyIHN5c2ZzIGZpbGVzDQo+ID4gKyAqLw0K PiA+ICtzdGF0aWMgaW50IGhwX2luaXRfYmlvc19hdHRyaWJ1dGVzKGludCBhdHRyX3R5cGUsIGNv bnN0IGNoYXIgKmd1aWQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBrb2JqZWN0ICphdHRyX25hbWVf a29iajsNCj4gPiArCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmogPSBOVUxMOw0KPiA+ICsJdW5pb24g YWNwaV9vYmplY3QgKmVsZW1lbnRzOw0KPiA+ICsJc3RydWN0IGtzZXQgKnRtcF9zZXQ7DQo+ID4g KwlpbnQgbWluX2VsZW1lbnRzOw0KPiA+ICsJY2hhciBzdHJbTUFYX0JVRkZdOw0KPiA+ICsNCj4g PiArCWNoYXIgKnRlbXBfc3RyID0gTlVMTDsNCj4gPiArCWNoYXIgKnN0cl92YWx1ZSA9IE5VTEw7 DQo+ID4gKwlpbnQgc3RyX2xlbjsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCXU4 ICpidWZmZXJfcHRyID0gTlVMTDsNCj4gPiArCWludCBidWZmZXJfc2l6ZTsNCj4gPiArDQo+ID4g Kw0KPiA+ICsJLyogaW5zdGFuY2VfaWQgbmVlZHMgdG8gYmUgcmVzZXQgZm9yIGVhY2ggdHlwZSBH VUlEDQo+ID4gKwkgKiBhbHNvLCBpbnN0YW5jZSBJRHMgYXJlIHVuaXF1ZSB3aXRoaW4gR1VJRCBi dXQgbm90IGFjcm9zcw0KPiA+ICsJICovDQo+ID4gKwlpbnQgaW5zdGFuY2VfaWQgPSAwOw0KPiA+ ICsJaW50IHJldHZhbCA9IDA7DQo+ID4gKw0KPiA+ICsJcmV0dmFsID0gYWxsb2NfYXR0cmlidXRl c19kYXRhKGF0dHJfdHlwZSk7DQo+ID4gKwlpZiAocmV0dmFsKQ0KPiA+ICsJCXJldHVybiByZXR2 YWw7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChhdHRyX3R5cGUpIHsNCj4gPiArCWNhc2UgSFBXTUlf U1RSSU5HX1RZUEU6DQo+ID4gKwkJbWluX2VsZW1lbnRzID0gMTI7DQo+ID4gKwkJYnJlYWs7DQo+ ID4gKwljYXNlIEhQV01JX0lOVEVHRVJfVFlQRToNCj4gPiArCQltaW5fZWxlbWVudHMgPSAxMzsN Cj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgSFBXTUlfRU5VTUVSQVRJT05fVFlQRToNCj4gPiAr CQltaW5fZWxlbWVudHMgPSAxMzsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgSFBXTUlfT1JE RVJFRF9MSVNUX1RZUEU6DQo+ID4gKwkJbWluX2VsZW1lbnRzID0gMTI7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIEhQV01JX1BBU1NXT1JEX1RZUEU6DQo+ID4gKwkJbWluX2VsZW1lbnRzID0g MTU7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXByX2VycigiRXJyb3I6 IFVua25vd24gYXR0cl90eXBlOiAlZFxuIiwgYXR0cl90eXBlKTsNCj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBuZWVkIHRvIHVzZSBzcGVjaWZpYyBpbnN0 YW5jZV9pZCBhbmQgZ3VpZCBjb21iaW5hdGlvbiB0byBnZXQgcmlnaHQNCj4gZGF0YSAqLw0KPiA+ ICsJb2JqID0gZ2V0X3dtaW9ial9wb2ludGVyKGluc3RhbmNlX2lkLCBndWlkKTsNCj4gPiArCWlm ICghb2JqKQ0KPiA+ICsJCXJldHVybiAtRU5PREVWOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2so JmJpb3NjZmdfZHJ2Lm11dGV4KTsNCj4gPiArCXdoaWxlIChvYmopIHsNCj4gPiArCQlpZiAob2Jq LT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFICYmIG9iai0+dHlwZSAhPQ0KPiBBQ1BJX1RZUEVf QlVGRkVSKSB7DQo+ID4gKwkJCXByX2VycigiRXJyb3I6IEV4cGVjdGVkIEFDUEktcGFja2FnZSBv ciBidWZmZXIgdHlwZSwNCj4gZ290OiAlZFxuIiwgb2JqLT50eXBlKTsNCj4gPiArCQkJcmV0dmFs ID0gLUVJTzsNCj4gPiArCQkJZ290byBlcnJfYXR0cl9pbml0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ ID4gKwkJLyogVGFrZSBhY3Rpb24gYXBwcm9wcmlhdGUgdG8gZWFjaCBBQ1BJIFRZUEUgKi8NCj4g PiArCQlpZiAob2JqLT50eXBlID09IEFDUElfVFlQRV9QQUNLQUdFKSB7DQo+ID4gKwkJCWlmIChv YmotPnBhY2thZ2UuY291bnQgPCBtaW5fZWxlbWVudHMpIHsNCj4gPiArCQkJCXByX2VycigiQUNQ SS1wYWNrYWdlIGRvZXMgbm90IGhhdmUgZW5vdWdoDQo+IGVsZW1lbnRzOiAlZCA8ICVkXG4iLA0K PiA+ICsJCQkJICAgICAgIG9iai0+cGFja2FnZS5jb3VudCwgbWluX2VsZW1lbnRzKTsNCj4gPiAr CQkJCWdvdG8gbmV4dG9iajsNCj4gPiArCQkJfQ0KPiA+ICsNCj4gPiArCQkJZWxlbWVudHMgPSBv YmotPnBhY2thZ2UuZWxlbWVudHM7DQo+ID4gKw0KPiA+ICsJCQkvKiBzYW5pdHkgY2hlY2tpbmcg Ki8NCj4gPiArCQkJaWYgKGVsZW1lbnRzW05BTUVdLnR5cGUgIT0gQUNQSV9UWVBFX1NUUklORykg ew0KPiA+ICsJCQkJcHJfZGVidWcoImluY29ycmVjdCBlbGVtZW50IHR5cGVcbiIpOw0KPiA+ICsJ CQkJZ290byBuZXh0b2JqOw0KPiA+ICsJCQl9DQo+ID4gKwkJCWlmIChzdHJsZW4oZWxlbWVudHNb TkFNRV0uc3RyaW5nLnBvaW50ZXIpID09IDApIHsNCj4gPiArCQkJCXByX2RlYnVnKCJlbXB0eSBh dHRyaWJ1dGUgZm91bmRcbiIpOw0KPiA+ICsJCQkJZ290byBuZXh0b2JqOw0KPiA+ICsJCQl9DQo+ ID4gKw0KPiA+ICsJCQlpZiAoYXR0cl90eXBlID09IEhQV01JX1BBU1NXT1JEX1RZUEUpDQo+ID4g KwkJCQl0bXBfc2V0ID0NCj4gYmlvc2NmZ19kcnYuYXV0aGVudGljYXRpb25fZGlyX2tzZXQ7DQo+ ID4gKwkJCWVsc2UNCj4gPiArCQkJCXRtcF9zZXQgPSBiaW9zY2ZnX2Rydi5tYWluX2Rpcl9rc2V0 Ow0KPiA+ICsNCj4gPiArCQkJLyogY29udmVydCBhdHRyaWJ1dGUgbmFtZSB0byBzdHJpbmcgKi8N Cj4gPiArCQkJcmV0dmFsID0NCj4gY29udmVydF9oZXhzdHJfdG9fc3RyKGVsZW1lbnRzW05BTUVd LnN0cmluZy5wb2ludGVyLA0KPiA+ICsNCj4gZWxlbWVudHNbTkFNRV0uc3RyaW5nLmxlbmd0aCwN Cj4gPiArCQkJCQkJICAgICAgICZzdHJfdmFsdWUsICZzdHJfbGVuKTsNCj4gPiArDQo+ID4gKwkJ CWlmIChyZXR2YWwpIHsNCj4gPiArCQkJCXByX2RlYnVnKCJGYWlsZWQgdG8gcG9wdWxhdGUgaW50 ZWdlcg0KPiBwYWNrYWdlIGRhdGEuIEVycm9yIFswJTB4XVxuIiwgcmV0KTsNCj4gPiArCQkJCWtm cmVlKHN0cl92YWx1ZSk7DQo+ID4gKwkJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCQl9DQo+ID4gKw0K PiA+ICsJCQlpZiAoa3NldF9maW5kX29iaih0bXBfc2V0LCBzdHJfdmFsdWUpKSB7DQo+ID4gKwkJ CQlwcl9kZWJ1ZygiRHVwbGljYXRlIGF0dHJpYnV0ZSBuYW1lIGZvdW5kIC0NCj4gJXNcbiIsDQo+ ID4gKwkJCQkJIHN0cl92YWx1ZSk7DQo+ID4gKwkJCQlnb3RvIG5leHRvYmo7DQo+ID4gKwkJCX0N Cj4gPiArDQo+ID4gKwkJCS8qIGJ1aWxkIGF0dHJpYnV0ZSAqLw0KPiA+ICsJCQlhdHRyX25hbWVf a29iaiA9IGt6YWxsb2Moc2l6ZW9mKCphdHRyX25hbWVfa29iaiksDQo+IEdGUF9LRVJORUwpOw0K PiA+ICsJCQlpZiAoIWF0dHJfbmFtZV9rb2JqKSB7DQo+ID4gKwkJCQlyZXR2YWwgPSAtRU5PTUVN Ow0KPiA+ICsJCQkJZ290byBlcnJfYXR0cl9pbml0Ow0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJ CQlhdHRyX25hbWVfa29iai0+a3NldCA9IHRtcF9zZXQ7DQo+ID4gKw0KPiA+ICsJCQlyZXR2YWwg PSBrb2JqZWN0X2luaXRfYW5kX2FkZChhdHRyX25hbWVfa29iaiwNCj4gJmF0dHJfbmFtZV9rdHlw ZSwNCj4gPiArCQkJCQkJICAgICAgTlVMTCwgIiVzIiwgc3RyX3ZhbHVlKTsNCj4gPiArDQo+ID4g KwkJCWlmIChyZXR2YWwpIHsNCj4gPiArCQkJCWtvYmplY3RfcHV0KGF0dHJfbmFtZV9rb2JqKTsN Cj4gPiArCQkJCWdvdG8gZXJyX2F0dHJfaW5pdDsNCj4gPiArCQkJfQ0KPiA+ICsNCj4gPiArCQkJ LyogZW51bWVyYXRlIGFsbCBvZiB0aGVzZSBhdHRyaWJ1dGVzICovDQo+ID4gKwkJCXN3aXRjaCAo YXR0cl90eXBlKSB7DQo+ID4gKwkJCWNhc2UgSFBXTUlfU1RSSU5HX1RZUEU6DQo+ID4gKwkJCQly ZXR2YWwgPQ0KPiBwb3B1bGF0ZV9zdHJpbmdfcGFja2FnZV9kYXRhKGVsZW1lbnRzLA0KPiA+ICsN Cj4gaW5zdGFuY2VfaWQsDQo+ID4gKw0KPiBhdHRyX25hbWVfa29iaik7DQo+ID4gKwkJCQlicmVh azsNCj4gPiArCQkJY2FzZSBIUFdNSV9JTlRFR0VSX1RZUEU6DQo+ID4gKwkJCQlyZXR2YWwgPQ0K PiBwb3B1bGF0ZV9pbnRlZ2VyX3BhY2thZ2VfZGF0YShlbGVtZW50cywNCj4gPiArDQo+IGluc3Rh bmNlX2lkLA0KPiA+ICsNCj4gYXR0cl9uYW1lX2tvYmopOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4g KwkJCWNhc2UgSFBXTUlfRU5VTUVSQVRJT05fVFlQRToNCj4gPiArCQkJCXJldHZhbCA9DQo+IHBv cHVsYXRlX2VudW1lcmF0aW9uX3BhY2thZ2VfZGF0YShlbGVtZW50cywNCj4gPiArDQo+IGluc3Rh bmNlX2lkLA0KPiA+ICsNCj4gYXR0cl9uYW1lX2tvYmopOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4g KwkJCWNhc2UgSFBXTUlfT1JERVJFRF9MSVNUX1RZUEU6DQo+ID4gKwkJCQlyZXR2YWwgPQ0KPiBw b3B1bGF0ZV9vcmRlcmVkX2xpc3RfcGFja2FnZV9kYXRhKGVsZW1lbnRzLA0KPiA+ICsNCj4gaW5z dGFuY2VfaWQsDQo+ID4gKw0KPiBhdHRyX25hbWVfa29iaik7DQo+ID4gKwkJCQlicmVhazsNCj4g PiArCQkJY2FzZSBIUFdNSV9QQVNTV09SRF9UWVBFOg0KPiA+ICsJCQkJcmV0dmFsID0NCj4gcG9w dWxhdGVfcGFzc3dvcmRfcGFja2FnZV9kYXRhKGVsZW1lbnRzLA0KPiA+ICsNCj4gCWluc3RhbmNl X2lkLA0KPiA+ICsNCj4gCWF0dHJfbmFtZV9rb2JqKTsNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJ CQlkZWZhdWx0Og0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCWtm cmVlKHN0cl92YWx1ZSk7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpZiAob2JqLT50eXBlID09 IEFDUElfVFlQRV9CVUZGRVIpIHsNCj4gPiArDQo+ID4gKwkJCWJ1ZmZlcl9zaXplID0gb2JqLT5i dWZmZXIubGVuZ3RoOw0KPiA+ICsJCQlidWZmZXJfcHRyID0gb2JqLT5idWZmZXIucG9pbnRlcjsN Cj4gPiArDQo+ID4gKwkJCXJldHZhbCA9IGdldF9zdHJpbmdfZnJvbV9idWZmZXIoJmJ1ZmZlcl9w dHIsDQo+ICZidWZmZXJfc2l6ZSwgc3RyLCBNQVhfQlVGRik7DQo+ID4gKwkJCWlmIChyZXR2YWwg PCAwKQ0KPiA+ICsJCQkJZ290byBlcnJfYXR0cl9pbml0Ow0KPiA+ICsNCj4gPiArCQkJaWYgKGF0 dHJfdHlwZSA9PSBIUFdNSV9QQVNTV09SRF9UWVBFIHx8DQo+IGF0dHJfdHlwZSA9PSBIUFdNSV9T RUNVUkVfUExBVEZPUk1fVFlQRSkNCj4gPiArCQkJCXRtcF9zZXQgPQ0KPiBiaW9zY2ZnX2Rydi5h dXRoZW50aWNhdGlvbl9kaXJfa3NldDsNCj4gPiArCQkJZWxzZQ0KPiA+ICsJCQkJdG1wX3NldCA9 IGJpb3NjZmdfZHJ2Lm1haW5fZGlyX2tzZXQ7DQo+ID4gKw0KPiA+ICsJCQlpZiAoa3NldF9maW5k X29iaih0bXBfc2V0LCBzdHIpKSB7DQo+ID4gKwkJCQlwcl93YXJuKCJEdXBsaWNhdGUgYXR0cmli dXRlIG5hbWUgZm91bmQgLQ0KPiAlc1xuIiwgc3RyKTsNCj4gPiArCQkJCWdvdG8gbmV4dG9iajsN Cj4gPiArCQkJfQ0KPiA+ICsNCj4gPiArCQkJLyogYnVpbGQgYXR0cmlidXRlICovDQo+ID4gKwkJ CWF0dHJfbmFtZV9rb2JqID0ga3phbGxvYyhzaXplb2YoKmF0dHJfbmFtZV9rb2JqKSwNCj4gR0ZQ X0tFUk5FTCk7DQo+ID4gKwkJCWlmICghYXR0cl9uYW1lX2tvYmopIHsNCj4gPiArCQkJCXJldHZh bCA9IC1FTk9NRU07DQo+ID4gKwkJCQlnb3RvIGVycl9hdHRyX2luaXQ7DQo+ID4gKwkJCX0NCj4g PiArDQo+ID4gKwkJCWF0dHJfbmFtZV9rb2JqLT5rc2V0ID0gdG1wX3NldDsNCj4gPiArDQo+ID4g KwkJCXRlbXBfc3RyID0gc3RyOw0KPiA+ICsJCQlpZiAoYXR0cl90eXBlID09IEhQV01JX1NFQ1VS RV9QTEFURk9STV9UWVBFKQ0KPiA+ICsJCQkJdGVtcF9zdHIgPSAiU1BNIjsNCj4gPiArDQo+ID4g KwkJCXJldHZhbCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKGF0dHJfbmFtZV9rb2JqLA0KPiA+ICsJ CQkJCQkgICAgICAmYXR0cl9uYW1lX2t0eXBlLCBOVUxMLA0KPiAiJXMiLA0KPiA+ICsJCQkJCQkg ICAgICB0ZW1wX3N0cik7DQo+ID4gKwkJCWlmIChyZXR2YWwpIHsNCj4gPiArCQkJCWtvYmplY3Rf cHV0KGF0dHJfbmFtZV9rb2JqKTsNCj4gPiArCQkJCWdvdG8gZXJyX2F0dHJfaW5pdDsNCj4gPiAr CQkJfQ0KPiA+ICsNCj4gPiArCQkJLyogZW51bWVyYXRlIGFsbCBvZiB0aGVzZSBhdHRyaWJ1dGVz ICovDQo+ID4gKwkJCXN3aXRjaCAoYXR0cl90eXBlKSB7DQo+ID4gKwkJCWNhc2UgSFBXTUlfU1RS SU5HX1RZUEU6DQo+ID4gKwkJCQlyZXR2YWwgPQ0KPiBwb3B1bGF0ZV9zdHJpbmdfYnVmZmVyX2Rh dGEoYnVmZmVyX3B0ciwNCj4gPiArDQo+ICZidWZmZXJfc2l6ZSwNCj4gPiArDQo+IGluc3RhbmNl X2lkLA0KPiA+ICsNCj4gYXR0cl9uYW1lX2tvYmopOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJ CWNhc2UgSFBXTUlfSU5URUdFUl9UWVBFOg0KPiA+ICsJCQkJcmV0dmFsID0NCj4gcG9wdWxhdGVf aW50ZWdlcl9idWZmZXJfZGF0YShidWZmZXJfcHRyLA0KPiA+ICsNCj4gJmJ1ZmZlcl9zaXplLA0K PiA+ICsNCj4gaW5zdGFuY2VfaWQsDQo+ID4gKw0KPiBhdHRyX25hbWVfa29iaik7DQo+ID4gKwkJ CQlicmVhazsNCj4gPiArCQkJY2FzZSBIUFdNSV9FTlVNRVJBVElPTl9UWVBFOg0KPiA+ICsJCQkJ cmV0dmFsID0NCj4gcG9wdWxhdGVfZW51bWVyYXRpb25fYnVmZmVyX2RhdGEoYnVmZmVyX3B0ciwN Cj4gPiArDQo+ICZidWZmZXJfc2l6ZSwNCj4gPiArDQo+IGluc3RhbmNlX2lkLA0KPiA+ICsNCj4g YXR0cl9uYW1lX2tvYmopOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCWNhc2UgSFBXTUlfT1JE RVJFRF9MSVNUX1RZUEU6DQo+ID4gKwkJCQlyZXR2YWwgPQ0KPiBwb3B1bGF0ZV9vcmRlcmVkX2xp c3RfYnVmZmVyX2RhdGEoYnVmZmVyX3B0ciwNCj4gPiArDQo+ICZidWZmZXJfc2l6ZSwNCj4gPiAr DQo+IGluc3RhbmNlX2lkLA0KPiA+ICsNCj4gYXR0cl9uYW1lX2tvYmopOw0KPiA+ICsJCQkJYnJl YWs7DQo+ID4gKwkJCWNhc2UgSFBXTUlfUEFTU1dPUkRfVFlQRToNCj4gPiArCQkJCXJldHZhbCA9 DQo+IHBvcHVsYXRlX3Bhc3N3b3JkX2J1ZmZlcl9kYXRhKGJ1ZmZlcl9wdHIsDQo+ID4gKw0KPiAm YnVmZmVyX3NpemUsDQo+ID4gKw0KPiBpbnN0YW5jZV9pZCwNCj4gPiArDQo+IGF0dHJfbmFtZV9r b2JqKTsNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJCQlkZWZhdWx0Og0KPiA+ICsJCQkJYnJlYWs7 DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gK25leHRvYmo6DQo+ID4gKwkJa2ZyZWUoc3RyX3Zh bHVlKTsNCj4gPiArCQlrZnJlZShvYmopOw0KPiA+ICsJCWluc3RhbmNlX2lkKys7DQo+ID4gKwkJ b2JqID0gZ2V0X3dtaW9ial9wb2ludGVyKGluc3RhbmNlX2lkLCBndWlkKTsNCj4gPiArCX0NCj4g PiArCW11dGV4X3VubG9jaygmYmlvc2NmZ19kcnYubXV0ZXgpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ ID4gKw0KPiA+ICtlcnJfYXR0cl9pbml0Og0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZiaW9zY2ZnX2Ry di5tdXRleCk7DQo+ID4gKwlrZnJlZShvYmopOw0KPiA+ICsJcmV0dXJuIHJldHZhbDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX2luaXQgYmlvc2NmZ19pbml0KHZvaWQpDQo+ID4g K3sNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsJaW50IGJpb3NfY2FwYWJsZSA9IHdtaV9oYXNf Z3VpZChIUF9XTUlfQklPU19HVUlEKTsNCj4gPiArDQo+ID4gKwlpZiAoIWJpb3NfY2FwYWJsZSkg ew0KPiA+ICsJCXByX2VycigiVW5hYmxlIHRvIHJ1biBvbiBub24tSFAgc3lzdGVtXG4iKTsNCj4g PiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+IA0KPiBDdXJyZW50bHksIHRo aXMgZHJpdmVyIHdpbGwgbm8gZ2V0IGF1dG9tYXRpY2FsbHkgbG9hZGVkIG9uIHN1cHBvcnRlZA0K PiBoYXJkd2FyZSwNCj4gc29tZXRoaW5nIHdoaWNoIHdvdWxkIGJlIHF1aXRlIGJlbmVmaWNpYWwg Zm9yIHVzZXJzIHRvIGhhdmUuDQo+IFNpbmNlIHRoZSBIUF9XTUlfQklPU19HVUlEIGlzIGFscmVh ZHkgaGFuZGxlZCBieSB0aGUgaHAtd21pIGRyaXZlciwNCj4gbWF5YmUgdGhpcw0KPiBkcml2ZXIg KHdoaWNoIGFsc28gYWxyZWFkeSBpbXBsZW1lbnRzIGEgZnVuY3Rpb24gc2ltaWxhciB0bw0KPiBo cF93bWlfcGVyZm9ybV9xdWVyeSgpKQ0KPiBjb3VsZCByZWdpc3RlciBhIHBsYXRmb3JtIGRldmlj ZSB3aGljaCBpcyB0aGVuIHVzZWQgYnkgdGhpcyBkcml2ZXI/IFRoaXMNCj4gdG9nZXRoZXINCj4g d2l0aCBNT0RVTEVfREVWSUNFX1RBQkxFKCkgd291bGQgYWxsb3cgZm9yIGF1dG9tYXRpY2FsbHkg bG9hZGluZyB0aGUNCj4gbW9kdWxlIG9uIHN1cHBvcnRlZCBoYXJkd2FyZS4NCj4gDQo+IEFybWlu IFdvbGYNCj4gDQo+ID4gKwlyZXQgPSBpbml0X2Jpb3NfYXR0cl9zZXRfaW50ZXJmYWNlKCk7DQo+ ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gaW5p dF9iaW9zX2F0dHJfcGFzc19pbnRlcmZhY2UoKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJZ290 byBlcnJfZXhpdF9iaW9zX2F0dHJfc2V0X2ludGVyZmFjZTsNCj4gPiArDQo+ID4gKwlpZiAoIWJp b3NjZmdfZHJ2LmJpb3NfYXR0cl93ZGV2IHx8DQo+ICFiaW9zY2ZnX2Rydi5wYXNzd29yZF9hdHRy X3dkZXYpIHsNCj4gPiArCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGZpbmQgc2V0IG9yIHBhc3MgaW50 ZXJmYWNlXG4iKTsNCj4gPiArCQlyZXQgPSAtRU5PREVWOw0KPiA+ICsJCWdvdG8gZXJyX2V4aXRf Ymlvc19hdHRyX3Bhc3NfaW50ZXJmYWNlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IGZ3 X2F0dHJpYnV0ZXNfY2xhc3NfZ2V0KCZmd19hdHRyX2NsYXNzKTsNCj4gPiArCWlmIChyZXQpDQo+ ID4gKwkJZ290byBlcnJfZXhpdF9iaW9zX2F0dHJfcGFzc19pbnRlcmZhY2U7DQo+ID4gKw0KPiA+ ICsJYmlvc2NmZ19kcnYuY2xhc3NfZGV2ID0gZGV2aWNlX2NyZWF0ZShmd19hdHRyX2NsYXNzLCBO VUxMLA0KPiBNS0RFVigwLCAwKSwNCj4gPiArCQkJCQkgICAgICBOVUxMLCAiJXMiLCBEUklWRVJf TkFNRSk7DQo+ID4gKwlpZiAoSVNfRVJSKGJpb3NjZmdfZHJ2LmNsYXNzX2RldikpIHsNCj4gPiAr CQlyZXQgPSBQVFJfRVJSKGJpb3NjZmdfZHJ2LmNsYXNzX2Rldik7DQo+ID4gKwkJZ290byBlcnJf dW5yZWdpc3Rlcl9jbGFzczsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwliaW9zY2ZnX2Rydi5tYWlu X2Rpcl9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgiYXR0cmlidXRlcyIsDQo+IE5VTEwsDQo+ ID4gKw0KPiAJJmJpb3NjZmdfZHJ2LmNsYXNzX2Rldi0+a29iaik7DQo+ID4gKwlpZiAoIWJpb3Nj ZmdfZHJ2Lm1haW5fZGlyX2tzZXQpIHsNCj4gPiArCQlyZXQgPSAtRU5PTUVNOw0KPiA+ICsJCXBy X2RlYnVnKCJGYWlsZWQgdG8gY3JlYXRlIGFuZCBhZGQgYXR0cmlidXRlc1xuIik7DQo+ID4gKwkJ Z290byBlcnJfZGVzdHJveV9jbGFzc2RldjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwliaW9zY2Zn X2Rydi5hdXRoZW50aWNhdGlvbl9kaXJfa3NldCA9DQo+IGtzZXRfY3JlYXRlX2FuZF9hZGQoImF1 dGhlbnRpY2F0aW9uIiwgTlVMTCwNCj4gPiArDQo+ICZiaW9zY2ZnX2Rydi5jbGFzc19kZXYtPmtv YmopOw0KPiA+ICsJaWYgKCFiaW9zY2ZnX2Rydi5hdXRoZW50aWNhdGlvbl9kaXJfa3NldCkgew0K PiA+ICsJCXJldCA9IC1FTk9NRU07DQo+ID4gKwkJcHJfZGVidWcoIkZhaWxlZCB0byBjcmVhdGUg YW5kIGFkZCBhdXRoZW50aWNhdGlvblxuIik7DQo+ID4gKwkJZ290byBlcnJfcmVsZWFzZV9hdHRy aWJ1dGVzX2RhdGE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIHN5c2ZzIGxl dmVsIGF0dHJpYnV0ZXMuDQo+ID4gKwkgKiAtIHBlbmRpbmdfcmVib290DQo+ID4gKwkgKi8NCj4g PiArCXJldCA9IGNyZWF0ZV9hdHRyaWJ1dGVzX2xldmVsX3N5c2ZzX2ZpbGVzKCk7DQo+ID4gKwlp ZiAocmV0KQ0KPiA+ICsJCXByX2RlYnVnKCJGYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGxldmVsIGF0 dHJpYnV0ZXNcbiIpOw0KPiA+ICsNCj4gPiArCXJldCA9IGhwX2luaXRfYmlvc19hdHRyaWJ1dGVz KEhQV01JX1NUUklOR19UWVBFLA0KPiBIUF9XTUlfQklPU19TVFJJTkdfR1VJRCk7DQo+ID4gKwlp ZiAocmV0KQ0KPiA+ICsJCXByX2RlYnVnKCJGYWlsZWQgdG8gcG9wdWxhdGUgc3RyaW5nIHR5cGUg YXR0cmlidXRlc1xuIik7DQo+ID4gKw0KPiA+ICsJcmV0ID0gaHBfaW5pdF9iaW9zX2F0dHJpYnV0 ZXMoSFBXTUlfSU5URUdFUl9UWVBFLA0KPiBIUF9XTUlfQklPU19JTlRFR0VSX0dVSUQpOw0KPiA+ ICsJaWYgKHJldCkNCj4gPiArCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHBvcHVsYXRlIGludGVnZXIg dHlwZSBhdHRyaWJ1dGVzXG4iKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBocF9pbml0X2Jpb3NfYXR0 cmlidXRlcyhIUFdNSV9FTlVNRVJBVElPTl9UWVBFLA0KPiBIUF9XTUlfQklPU19FTlVNRVJBVElP Tl9HVUlEKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcHJfZGVidWcoIkZhaWxlZCB0byBwb3B1 bGF0ZSBlbnVtZXJhdGlvbiB0eXBlDQo+IGF0dHJpYnV0ZXNcbiIpOw0KPiA+ICsNCj4gPiArCXJl dCA9IGhwX2luaXRfYmlvc19hdHRyaWJ1dGVzKEhQV01JX09SREVSRURfTElTVF9UWVBFLA0KPiBI UF9XTUlfQklPU19PUkRFUkVEX0xJU1RfR1VJRCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXBy X2RlYnVnKCJGYWlsZWQgdG8gcG9wdWxhdGUgb3JkZXJlZCBsaXN0IG9iamVjdCB0eXBlDQo+IGF0 dHJpYnV0ZXNcbiIpOw0KPiA+ICsNCj4gPiArCXJldCA9IGhwX2luaXRfYmlvc19hdHRyaWJ1dGVz KEhQV01JX1BBU1NXT1JEX1RZUEUsDQo+IEhQX1dNSV9CSU9TX1BBU1NXT1JEX0dVSUQpOw0KPiA+ ICsJaWYgKHJldCkNCj4gPiArCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHBvcHVsYXRlIHBhc3N3b3Jk IG9iamVjdCB0eXBlDQo+IGF0dHJpYnV0ZXNcbiIpOw0KPiA+ICsNCj4gPiArCWJpb3NjZmdfZHJ2 LnNwbV9kYXRhLmF0dHJfbmFtZV9rb2JqID0gTlVMTDsNCj4gPiArCXJldCA9IGhwX2FkZF9vdGhl cl9hdHRyaWJ1dGVzKEhQV01JX1NFQ1VSRV9QTEFURk9STV9UWVBFKTsNCj4gPiArCWlmIChyZXQp DQo+ID4gKwkJcHJfZGVidWcoIkZhaWxlZCB0byBwb3B1bGF0ZSBzZWN1cmUgcGxhdGZvcm0gb2Jq ZWN0IHR5cGUNCj4gYXR0cmlidXRlXG4iKTsNCj4gPiArDQo+ID4gKwliaW9zY2ZnX2Rydi5zdXJl X3N0YXJ0X2F0dHJfa29iaiA9IE5VTEw7DQo+ID4gKwlyZXQgPSBocF9hZGRfb3RoZXJfYXR0cmli dXRlcyhIUFdNSV9TVVJFX1NUQVJUX1RZUEUpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlwcl9k ZWJ1ZygiRmFpbGVkIHRvIHBvcHVsYXRlIHN1cmUgc3RhcnQgb2JqZWN0IHR5cGUNCj4gYXR0cmli dXRlXG4iKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArDQo+ID4gK2Vycl9yZWxlYXNl X2F0dHJpYnV0ZXNfZGF0YToNCj4gPiArCXJlbGVhc2VfYXR0cmlidXRlc19kYXRhKCk7DQo+ID4g Kw0KPiA+ICtlcnJfZGVzdHJveV9jbGFzc2RldjoNCj4gPiArCWRldmljZV9kZXN0cm95KGZ3X2F0 dHJfY2xhc3MsIE1LREVWKDAsIDApKTsNCj4gPiArDQo+ID4gK2Vycl91bnJlZ2lzdGVyX2NsYXNz Og0KPiA+ICsJZndfYXR0cmlidXRlc19jbGFzc19wdXQoKTsNCj4gPiArDQo+ID4gK2Vycl9leGl0 X2Jpb3NfYXR0cl9wYXNzX2ludGVyZmFjZToNCj4gPiArCWV4aXRfYmlvc19hdHRyX3Bhc3NfaW50 ZXJmYWNlKCk7DQo+ID4gKw0KPiA+ICtlcnJfZXhpdF9iaW9zX2F0dHJfc2V0X2ludGVyZmFjZToN Cj4gPiArCWV4aXRfYmlvc19hdHRyX3NldF9pbnRlcmZhY2UoKTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBfX2V4aXQgYmlvc2NmZ19l eGl0KHZvaWQpDQo+ID4gK3sNCj4gPiArCXJlbGVhc2VfYXR0cmlidXRlc19kYXRhKCk7DQo+ID4g KwlkZXZpY2VfZGVzdHJveShmd19hdHRyX2NsYXNzLCBNS0RFVigwLCAwKSk7DQo+ID4gKw0KPiA+ ICsJZndfYXR0cmlidXRlc19jbGFzc19wdXQoKTsNCj4gPiArCWV4aXRfYmlvc19hdHRyX3NldF9p bnRlcmZhY2UoKTsNCj4gPiArCWV4aXRfYmlvc19hdHRyX3Bhc3NfaW50ZXJmYWNlKCk7DQo+ID4g K30NCj4gPiArDQo+ID4gK21vZHVsZV9pbml0KGJpb3NjZmdfaW5pdCk7DQo+ID4gK21vZHVsZV9l eGl0KGJpb3NjZmdfZXhpdCk7DQo=