From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D443D518 for ; Wed, 15 Nov 2023 10:09:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Y3B9tyUM" Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 29A42101 for ; Wed, 15 Nov 2023 02:09:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1700042960; x=1731578960; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=ZFJgITh9SVU4Eyuln7cYmoNxReL+hUKfGd7dt+nmSck=; b=Y3B9tyUM7MAvBJvtZMmrV913L3OLtuXtWASVBFzLlB/VvdQYDlp46Pai uo5jCB7KTI3eMZuDnKYBGPSq0q9N62qVWuCk4lzwNfhwcRtoNzxoJEIk8 sZZl4VSdj0LCtwIbqnlVNLeiwwepgGCRdxbui98/kbtG+nI/h4ZUYSfxg t2riRjdXJRPXMavRGv4aK2LTm1pvrDJsPIxSBWYdXuNz5zR0C7GZ8dNUk HFF+uQRU1/Bv+hEocr63ds4h93m7NFzXg4b9cmfKRZ2o7pWPz7FDDMaIy y+DaxsK5t7fon3Gp7expyA+Unw8CSfxJxGuLzJiwYwogQPa8hN9OfPmF5 Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10894"; a="12397221" X-IronPort-AV: E=Sophos;i="6.03,304,1694761200"; d="scan'208";a="12397221" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Nov 2023 02:09:19 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10894"; a="799793960" X-IronPort-AV: E=Sophos;i="6.03,304,1694761200"; d="scan'208";a="799793960" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga001.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 15 Nov 2023 02:09:18 -0800 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34; Wed, 15 Nov 2023 02:09:17 -0800 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34; Wed, 15 Nov 2023 02:09:17 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34 via Frontend Transport; Wed, 15 Nov 2023 02:09:17 -0800 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.168) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.34; Wed, 15 Nov 2023 02:09:17 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HF4n+N5eQi4b4sk2p/qsejx6Mciz361DOfDBzO+aJCMqSmShXSOibextDNQzKKAGoi58+fALJRBSvH+B/F/hW3vwC8g//j844TZd26TfT+GITz8W1a3s9t4mnqRDOz6ksp7uiAmR9nmFcWMyCEMvAMq/YDf9fidoXc/8ZpidFvuE2c4XMD3t3zPpIGERvIEmJHbzrzD8FuJBqxRKiiOOjWZCKTVbwCdpQ8R1Ht0s9R93dWN5lHVHkkCsXVAXKjuPAX28HMCgzAkOyZdnJHRKUV6rzNOeJ3L/U00/5+iWnXh2fcyDq5wTIbuMYyJ9XGtryAiCrVpheov5Ep+aiLifqg== 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=ZFJgITh9SVU4Eyuln7cYmoNxReL+hUKfGd7dt+nmSck=; b=EqLOcNl6of2rHklc9CYFhPTLkmB+IbB8gkBmi7HrZpWxmgQMfXArXMheQ4BKYnvmgDGpPzB/6gKW2In4Nn3GXWEEM7Ugob+gWNhVTaGEWrPK0jWkVX8F3ZNIYtU9hZ+LlpQcsxYiSPlhfOZqTYhrISPM+jr47u1cXUC6NkHubS4joz2HuCyrJwqo5E2axcx27JYa/XRoOW6XIDej54GJ6m6hfugQ5N/ubEf+QRyqiS2WmREqrmFbX77HxrrvW0OGJmvwkaqsDGWxs7ecvx5tE+IQYCuS/7Ii9qZa6+YX15+bm3nqKAGl0/Kb0/NRelZulvAjmRXZl+q48+l6VngLpg== 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 MW4PR11MB7125.namprd11.prod.outlook.com (2603:10b6:303:219::12) by CY8PR11MB7900.namprd11.prod.outlook.com (2603:10b6:930:7a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.34; Wed, 15 Nov 2023 10:09:15 +0000 Received: from MW4PR11MB7125.namprd11.prod.outlook.com ([fe80::703a:a01d:8718:5694]) by MW4PR11MB7125.namprd11.prod.outlook.com ([fe80::703a:a01d:8718:5694%7]) with mapi id 15.20.6954.025; Wed, 15 Nov 2023 10:09:15 +0000 From: "Verma, Vishal L" To: "Schofield, Alison" CC: "linux-cxl@vger.kernel.org" , "nvdimm@lists.linux.dev" Subject: Re: [ndctl PATCH v2 3/5] cxl/list: collect and parse the poison list records Thread-Topic: [ndctl PATCH v2 3/5] cxl/list: collect and parse the poison list records Thread-Index: AQHZ9LcPHaR1zVCeEE+auLqQkE8X/rB7biMA Date: Wed, 15 Nov 2023 10:09:15 +0000 Message-ID: <40bfee841cfcaaf5fe139f53fafe74ca394ebc54.camel@intel.com> References: <80f60f513ced74bc5eed7d0082faf74783fa41d7.1696196382.git.alison.schofield@intel.com> In-Reply-To: <80f60f513ced74bc5eed7d0082faf74783fa41d7.1696196382.git.alison.schofield@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.48.4 (3.48.4-1.fc38) 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: MW4PR11MB7125:EE_|CY8PR11MB7900:EE_ x-ms-office365-filtering-correlation-id: 67670bed-543c-4442-6818-08dbe5c2ec3c x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ytMVbxQmLRPvg66aRznDHg5wkteY2n1I2z0ZDx6NDw6V8KsnWrjSr65vzketPCUnqoNFcavL97CX56r0hl6hCCYOVu6sYIl4LOhdlYoxdm9IAneOagmaa7ZGuM7jORLGh8Jhm2e55srocQVQfdzCwkHiX5sKPOBiqiUHCaf4nyZN3N3oUCf3O877d7jyGFdkGHpOdI8ueMEyGohwXdOvmsnLh+0p8crGMqvIzZfOjY1UCZYsfb5n5epjNUIyZrCPGapU4rBthe4DFTg5/1cbN8sqEOosNKGNhnO2yRonhw5nZ1zyG/rcihfyu/Xi246OGicLqMy5hynFEjbhGBdvLZ41C84lc/t6PwX8PQerC29Bmjlx/Z0J/4fKNGYnIR6fcnfVjEKAqbAlfofCZVLMkDPNx9uYKVBH2wNUoh+8eF7qg4WirZrfB7W98CK6ep3nOS7V5UTgIEkDTbjs6h9aBaEwvykNdgOw1C9mu3y03u6OSlKSninfUTTs64lEl/Cm8EMrVb5n2l4LPol+zHxOT3srwJ9NcaGkZ4IYmC7XvVukCdcUn7AAQ5yBfMKkrBNqVPZiWC9X4G8E3gBdbvllS7efeSOy2C6iDbhonVn4qha25Ml6Hujut5snyU4Ei26lsvnhNx/6N9l8UVJbUGlGj7i4ysrT2stOKG4LobmHOYs= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB7125.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(136003)(396003)(366004)(39860400002)(346002)(376002)(230922051799003)(230173577357003)(230273577357003)(186009)(64100799003)(451199024)(1800799009)(5660300002)(2906002)(64756008)(54906003)(37006003)(6636002)(316002)(8936002)(6862004)(4326008)(8676002)(38070700009)(66446008)(36756003)(122000001)(82960400001)(41300700001)(66476007)(26005)(2616005)(6486002)(83380400001)(66556008)(76116006)(66946007)(6506007)(6512007)(478600001)(86362001)(71200400001)(38100700002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SlVpNitGN2xXVUFwQ29MSzRDV2V3d0N1WXRpakdzbm1uVW9SZFQ2WWliQUdZ?= =?utf-8?B?ZXU3NDEzMGtDYVpYMWdWQWZSR3A0ZzdsblhlS1R2NWVPZm1hOS9zQk91VU9M?= =?utf-8?B?OExGVCsrUnVnd1YzQkhwcmcwenlycEt6VTZuOUpqUzR1ZW9ZOVJSL3o1a1Nn?= =?utf-8?B?RVMzZ3dlL0hkN0ZEaHc2ejZ0TnpLbzhNZVlYT0ZaN2NVM0x1d3ZnRVEvQi9y?= =?utf-8?B?TjhIenNDaGN4NXkwZWN0REc3NisxcHhzckhJY3FCUkl0OGlnZG5zVWtBMXQv?= =?utf-8?B?M2V5NHVSZUtKem4raW16UHNxclZodUpudGY1K3lNTFRNTFR4eXlWUDVHd1pU?= =?utf-8?B?VUN6NG1yTXJ2VzI0SFE5Uzk5cGd1bEpoVnM5QnFLTnk3WmI0dm42TGJuTjBE?= =?utf-8?B?RFkwZ0hXZXM3L0w5WVNmNGIvVHk0TUVTWCsvTVo3aU9QOW1hMUNpR1BpUW4z?= =?utf-8?B?eERPaWdmUjFsVXBFSFU4bElqWXhISXhoTlhLWVVBL1BQUVUvL05GN0Yza2ts?= =?utf-8?B?V3NVOEROejM0ZFJ3ODNXYTBsMWNOVGhJU0pmamp2LzR2bzRGMG1pblkya1VQ?= =?utf-8?B?UXlaeHNiMDMzaHVoa1J2UlZ1Q3dLcFN5di9EaHdxSm1pb1JwTzN1ZFFpalZD?= =?utf-8?B?d3JLa3hENW9JNWhpZU1ncmw0azJ5K1RiUXlCTElFUC9pYThmS2hkU2hidG93?= =?utf-8?B?UW9wVWVwL1dSNlZBdGFSRjZPZUp6SityUGUrV1puNnY4RzJ6RWFmYmpmTXM0?= =?utf-8?B?TmU1cW9aejhXUXhTSmJrZDAyWHFiNG5QeWxoMUZsblBuWFIwV1BVb0FJeEp5?= =?utf-8?B?LzBwb3grWllIT3N1NEk4RGRXeGFHMjh1bEJXaWlscDB5a0d2MXMzZHBhdnRj?= =?utf-8?B?aS94RVpYWGNubXZWSStMdk8rWjhGVVova2RVUHVRNlY0aEZURHB5K283NVMw?= =?utf-8?B?dGdiRnhzZDN6RzQrMjJ3ZTFaTDRIcEtzSURTTEJLN0N1Q1JYQ3BSa2VCZGNR?= =?utf-8?B?bTZxZk1SaGl2RUI4N0FGK0tVc0VESFU1MWhuamlHY1J3VjNxZGJ1ZUFJQUty?= =?utf-8?B?VXRRYnRiT2YwSGZPQzl1bW5qMklJdC9tb0lIdlRuSExGZnlISTU3L04zakVu?= =?utf-8?B?MVRFRTByTnVocjdraDFsZG56cDRoYkxOblFCRFVQZjBZcWpCT3NsZFJNWHY4?= =?utf-8?B?MGd0WkR0U0ZjOWU1aWw2UkcyV3o1TndFTGkzREdPMEpJWHA4a3dvUjh6d0Ra?= =?utf-8?B?TDRVUWZzaC9vSTR6VzN0OG5SOWl1aUxFVmRISHE0ekJkWFRsWFRvd0l1eHVv?= =?utf-8?B?cm5kZWl1N0RFWTVXMVY3eWlzR3JVQjB2dzFyT1F0ZUdxUGMvQmNYM3JGTjk2?= =?utf-8?B?SS9helZuc1A1Mmk5czBDT29SQ2g2TmRwZ3FEcmEyREhSLzZZd3dSVWVJaFdF?= =?utf-8?B?YTYzVGZXRk5nYnJJcm5wN3NSUURYL2FOSEpmcTdTRm1XOHFQRXJ3SmI2Sjg0?= =?utf-8?B?Yjk1a1VHdlFtUm5EeWRKelJ5WEtDbmc3d0FaSkJkY3FQUEFaNlNlS1dSbDdF?= =?utf-8?B?Ly9IRXBzZ3AxVTlzRTFDWjNpYUNHSlZBYzR0dk84ZEVhTUNzQ0JoQzEva3RH?= =?utf-8?B?Z2lid1pNSCtVK29IdkU4eXJuUWhTSDZXSjdTKzJEYWpSQkNxN1BYWndYOXAw?= =?utf-8?B?U0FyVXhoN3IvU1ZyV3ZlQndKR3JJOHVGdm5VaWJHbmtJcXZJSUhJclBHa3lJ?= =?utf-8?B?aG8wSStvRkxlL2R3RzNBYWF3d0tVY1paeGFoRnUxRDE5QjFsSVY2T1ppRDhk?= =?utf-8?B?aUoyOWdBaE8zQzVtd0dFUHJGUU4vWGtjOUlVM2ZqaEZVUnAvTVlPZVo5bDl4?= =?utf-8?B?Q1E0T0JoQU9BQ2ZsS1ZpdWFSSVpQM2EzU2FIWnh3TTVkVWlZZlc5MmpMdkN2?= =?utf-8?B?SWlSTXpxNit2eDZEb1RHWStGaTVMQndUbXY1bVYveHBWbmg0bjRXRTloMkM5?= =?utf-8?B?UDNxTTZFdjUraGVnc1I4T1pjTVcxSlViUkpCQmVyOUFXZTZoQVNiaTlhazhr?= =?utf-8?B?bjB0a0wvbGpmM1pWQld2L1cvNXJhdTFLNzU0QWRjWERTVE9BL3Q3YklqV3cr?= =?utf-8?B?NTErTUZZeWhQRGw0RjZySE55OEtvVU5qdXNudTk5R0Z0WWgzcWEyNStCdURV?= =?utf-8?B?elE9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <02889D5451B51A4F91FC3E0F701D0088@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-cxl@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB7125.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 67670bed-543c-4442-6818-08dbe5c2ec3c X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Nov 2023 10:09:15.2694 (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: Tw5Lj1gltiWLglPSEw3BKFB1k5ltTcTgXXtMvsLRg4CYK9dqV1uMSvmXVGJkqRltCcTL+KyU5nc+viHIcsqZLawdpPgYNnzRaLQdyqdn6N4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR11MB7900 X-OriginatorOrg: intel.com T24gU3VuLCAyMDIzLTEwLTAxIGF0IDE1OjMxIC0wNzAwLCBhbGlzb24uc2Nob2ZpZWxkQGludGVs LmNvbSB3cm90ZToKPiBGcm9tOiBBbGlzb24gU2Nob2ZpZWxkIDxhbGlzb24uc2Nob2ZpZWxkQGlu dGVsLmNvbT4KPiAKPiBQb2lzb24gbGlzdCByZWNvcmRzIGFyZSBsb2dnZWQgYXMgZXZlbnRzIGlu IHRoZSBrZXJuZWwgdHJhY2luZwo+IHN1YnN5c3RlbS4gVG8gcHJlcGFyZSB0aGUgcG9pc29uIGxp c3QgZm9yIGN4bCBsaXN0LCBlbmFibGUgdHJhY2luZywKPiB0cmlnZ2VyIHRoZSBwb2lzb24gbGlz dCByZWFkLCBhbmQgcGFyc2UgdGhlIGdlbmVyYXRlZCBjeGxfcG9pc29uCj4gZXZlbnRzIGludG8g YSBqc29uIHJlcHJlc2VudGF0aW9uLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFsaXNvbiBTY2hvZmll bGQgPGFsaXNvbi5zY2hvZmllbGRAaW50ZWwuY29tPgo+IC0tLQo+IMKgY3hsL2pzb24uY8KgIHwg MjA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK PiDCoHV0aWwvanNvbi5oIHzCoMKgIDEgKwo+IMKgMiBmaWxlcyBjaGFuZ2VkLCAyMDkgaW5zZXJ0 aW9ucygrKQo+IAo+IGRpZmYgLS1naXQgYS9jeGwvanNvbi5jIGIvY3hsL2pzb24uYwo+IGluZGV4 IDc2NzhkMDIwMjBiNi4uMzZkYjczZGU0ZjhmIDEwMDY0NAo+IC0tLSBhL2N4bC9qc29uLmMKPiAr KysgYi9jeGwvanNvbi5jCj4gQEAgLTIsMTUgKzIsMTkgQEAKPiDCoC8vIENvcHlyaWdodCAoQykg MjAxNS0yMDIxIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+IMKgI2lu Y2x1ZGUgPGxpbWl0cy5oPgo+IMKgI2luY2x1ZGUgPHV0aWwvanNvbi5oPgo+ICsjaW5jbHVkZSA8 dXRpbC9iaXRtYXAuaD4KPiDCoCNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KPiDCoCNpbmNsdWRlIDxj eGwvbGliY3hsLmg+Cj4gwqAjaW5jbHVkZSA8anNvbi1jL2pzb24uaD4KPiDCoCNpbmNsdWRlIDxq c29uLWMvcHJpbnRidWYuaD4KPiDCoCNpbmNsdWRlIDxjY2FuL3Nob3J0X3R5cGVzL3Nob3J0X3R5 cGVzLmg+Cj4gKyNpbmNsdWRlIDx0cmFjZWV2ZW50L2V2ZW50LXBhcnNlLmg+Cj4gKyNpbmNsdWRl IDx0cmFjZWZzL3RyYWNlZnMuaD4KPiDCoAo+IMKgI2luY2x1ZGUgImZpbHRlci5oIgo+IMKgI2lu Y2x1ZGUgImpzb24uaCIKPiDCoCNpbmNsdWRlICIuLi9kYXhjdGwvanNvbi5oIgo+ICsjaW5jbHVk ZSAiZXZlbnRfdHJhY2UuaCIKPiDCoAo+IMKgI2RlZmluZSBDWExfRldfVkVSU0lPTl9TVFJfTEVO wqAxNgo+IMKgI2RlZmluZSBDWExfRldfTUFYX1NMT1RTwqDCoMKgwqDCoMKgwqA0Cj4gQEAgLTU3 MSw2ICs1NzUsMTkwIEBAIGVycl9qb2JqOgo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsK PiDCoH0KPiDCoAo+ICsvKiBDWEwgOC4yLjkuNS40LjEgR2V0IFBvaXNvbiBMaXN0OiBQb2lzb24g U291cmNlICovCgpUaGVzZSB1c3VhbGx5IGhhdmUgYSBzcGVjIHZlcnNpb24gdG9vIC0gIkNYTCAz LjAgOC4yLjkuLi4gIgoKPiArI2RlZmluZSBDWExfUE9JU09OX1NPVVJDRV9VTktOT1dOIDAKPiAr I2RlZmluZSBDWExfUE9JU09OX1NPVVJDRV9FWFRFUk5BTCAxCj4gKyNkZWZpbmUgQ1hMX1BPSVNP Tl9TT1VSQ0VfSU5URVJOQUwgMgo+ICsjZGVmaW5lIENYTF9QT0lTT05fU09VUkNFX0lOSkVDVEVE IDMKPiArI2RlZmluZSBDWExfUE9JU09OX1NPVVJDRV9WRU5ET1IgNwo+ICsKPiArLyogQ1hMIDgu Mi45LjUuNC4xIEdldCBQb2lzb24gTGlzdDogUGF5bG9hZCBvdXQgZmxhZ3MgKi8KClNhbWUgdGhp bmcgaGVyZS4KCj4gKyNkZWZpbmUgQ1hMX1BPSVNPTl9GTEFHX01PUkUgQklUKDApCj4gKyNkZWZp bmUgQ1hMX1BPSVNPTl9GTEFHX09WRVJGTE9XIEJJVCgxKQo+ICsjZGVmaW5lIENYTF9QT0lTT05f RkxBR19TQ0FOTklORyBCSVQoMikKPiArCj4gK3N0YXRpYyBzdHJ1Y3QganNvbl9vYmplY3QgKgo+ ICt1dGlsX2N4bF9wb2lzb25fZXZlbnRzX3RvX2pzb24oc3RydWN0IHRyYWNlZnNfaW5zdGFuY2Ug Kmluc3QsIGJvb2wgaXNfcmVnaW9uLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4gK3sKPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QganNvbl9vYmplY3QgKmplcnJvcnMsICpqbWVkaWEsICpqb2Jq ID0gTlVMTDsKClNpbmNlIGV2ZXJ5dGhpbmcgZWxzZSBpcyBub3cgJ3BvaXNvbicsIG1pZ2h0IGJl IGdvb2QgdG8gYWxzbwpzL2ptZWRpYS9qcG9pc29uLyBldmVyeXdoZXJlLgoKPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3Qgamxpc3Rfbm9kZSAqam5vZGUsICpuZXh0Owo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBldmVudF9jdHggZWN0eCA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LmV2ZW50X25hbWUgPSAiY3hsX3BvaXNvbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC5ldmVudF9waWQgPSBnZXRwaWQoKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLnN5c3RlbSA9ICJjeGwiLAo+ICvCoMKgwqDCoMKgwqDCoH07Cj4gK8KgwqDCoMKgwqDCoMKg aW50IHJjLCBjb3VudCA9IDA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfaGVhZF9pbml0KCZl Y3R4LmpsaXN0X2hlYWQpOwo+ICvCoMKgwqDCoMKgwqDCoHJjID0gY3hsX3BhcnNlX2V2ZW50cyhp bnN0LCAmZWN0eCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSBldmVu dHM6ICVkXG4iLCByYyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBO VUxMOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqAvKiBBZGQgbnJfcG9pc29u X3JlY29yZHM6MCB0byBqc29uICovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGxpc3RfZW1wdHkoJmVj dHguamxpc3RfaGVhZCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0 Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBqZXJyb3JzID0ganNvbl9vYmplY3RfbmV3X2FycmF5KCk7 Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFqZXJyb3JzKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gTlVMTDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9z YWZlKCZlY3R4LmpsaXN0X2hlYWQsIGpub2RlLCBuZXh0LCBsaXN0KSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBqc29uX29iamVjdCAqanZhbCA9IE5VTEw7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBqc29uX29iamVjdCAqanAgPSBOVUxM OwoKQXJlIHRoZSBOVUxMIGFzc2lnbm1lbnRzIG5lZWRlZD8gQXQgbGVhc3QgZm9yIEBqcCwgaXQg aXMKdW5jb25kaXRpb25hbGx5IGFzc2lnbmVkIGJlbG93LCBhbmQgaXNuJ3QgdXNlZCBiZWZvcmUg dGhhdC4gSSBzdXNwZWN0Cmpzb24tYyBwcm9iYWJseSBkb2Vzbid0IGNhcmUgYWJvdXQgd2hhdCdz IGluIEBqdmFsIGVpdGhlciBiZWZvcmUKd3JpdGluZyBpdC4KCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGludCBzb3VyY2UsIHBmbGFnczsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdTY0IGFkZHIsIGxlbjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGpwID0ganNvbl9vYmplY3RfbmV3X29iamVjdCgpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoIWpwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoaXNfcmVnaW9uKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAvKiBBZGQgdGhlIG1lbWRldiBuYW1lIGluIGEgYnkgcmVnaW9uIGxpc3Qg Ki8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChq c29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpub2RlLT5qb2JqLCAibWVtZGV2IiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmp2YWwpKQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGpzb25fb2JqZWN0X29iamVjdF9hZGQoanAsICJtZW1kZXYiLCBqdmFsKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLyoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogV2hlbiBsaXN0aW5nIGlz IGJ5IG1lbWRldiwgcmVnaW9uIG5hbWVzIGFuZCB2YWxpZCBIUEFzCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqIHdpbGwgYXBwZWFyIGlmIHRoZSBwb2lzb24gYWRkcmVzcyBpcyBw YXJ0IG9mIGEgcmVnaW9uLgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBQaWNr IHVwIHRob3NlIHZhbGlkIHJlZ2lvbiBuYW1lcyBhbmQgSFBBcyBidXQgaWdub3JlIHRoZQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBlbXB0aWVzIGFuZCBpbnZhbGlkcy4KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAvKiBPbmx5IGFkZCBub24gTlVMTCByZWdpb24gbmFtZXMgKi8KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgo am5vZGUtPmpvYmosICJyZWdpb24iLCAmanZhbCkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzdHJsZW4oanNvbl9vYmplY3RfZ2V0X3N0cmlu ZyhqdmFsKSkgIT0gMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGpwLCAicmVnaW9u IiwganZhbCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogT25seSBkaXNwbGF5IHZhbGlkIEhQQXMgKi8KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgo am5vZGUtPmpvYmosICJocGEiLCAmanZhbCkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFkZHIgPSBqc29uX29iamVjdF9nZXRfdWludDY0KGp2YWwp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGFk ZHIgIT0gVUxMT05HX01BWCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpvYmogPSB1dGlsX2pzb25fb2JqZWN0X2hleChh ZGRyLCBmbGFncyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqcCwgImhwYSIsIGpv YmopOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpub2RlLT5qb2JqLCAiZHBh IiwgJmp2YWwpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBhZGRyID0ganNvbl9vYmplY3RfZ2V0X2ludDY0KGp2YWwpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgam9iaiA9IHV0aWxfanNvbl9vYmplY3Rf aGV4KGFkZHIsIGZsYWdzKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoanAsICJkcGEiLCBqb2JqKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqbm9kZS0+am9iaiwgImRwYV9sZW5n dGgiLCAmanZhbCkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGxlbiA9IGpzb25fb2JqZWN0X2dldF9pbnQ2NChqdmFsKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpvYmogPSB1dGlsX2pzb25fb2JqZWN0 X3NpemUobGVuLCBmbGFncyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGpwLCAiZHBhX2xlbmd0aCIsIGpvYmop Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmIChqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpub2RlLT5qb2JqLCAi c291cmNlIiwgJmp2YWwpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzb3VyY2UgPSBqc29uX29iamVjdF9nZXRfaW50KGp2YWwpOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHNvdXJjZSA9PSBDWExf UE9JU09OX1NPVVJDRV9VTktOT1dOKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpvYmogPSBqc29uX29iamVjdF9uZXdfc3Ry aW5nKCJVbmtub3duIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBlbHNlIGlmIChzb3VyY2UgPT0gQ1hMX1BPSVNPTl9TT1VSQ0VfRVhURVJOQUwpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgam9iaiA9IGpzb25fb2JqZWN0X25ld19zdHJpbmcoIkV4dGVybmFsIik7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlIGlmIChzb3VyY2Ug PT0gQ1hMX1BPSVNPTl9TT1VSQ0VfSU5URVJOQUwpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgam9iaiA9IGpzb25fb2JqZWN0 X25ld19zdHJpbmcoIkludGVybmFsIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBlbHNlIGlmIChzb3VyY2UgPT0gQ1hMX1BPSVNPTl9TT1VSQ0VfSU5K RUNURUQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgam9iaiA9IGpzb25fb2JqZWN0X25ld19zdHJpbmcoIkluamVjdGVkIik7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlIGlm IChzb3VyY2UgPT0gQ1hMX1BPSVNPTl9TT1VSQ0VfVkVORE9SKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpvYmogPSBqc29u X29iamVjdF9uZXdfc3RyaW5nKCJWZW5kb3IiKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqb2JqID0ganNvbl9vYmplY3RfbmV3 X3N0cmluZygiUmVzZXJ2ZWQiKTsKCk1pbm9yIG5pdCwgYnV0IG1heWJlICdzd2l0Y2ggKHNvdXJj ZSkgLi4uJyB3b3VsZCBsb29rIGEgYml0IGNsZWFuZXI/Cgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqcCwgInNv dXJjZSIsIGpvYmopOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpu b2RlLT5qb2JqLCAiZmxhZ3MiLCAmanZhbCkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYXIgZmxhZ19zdHJbMzJdID0geyAnXDAnIH07Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGZsYWdzID0g anNvbl9vYmplY3RfZ2V0X2ludChqdmFsKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChwZmxhZ3MgJiBDWExfUE9JU09OX0ZMQUdfTU9SRSkKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzdHJjYXQoZmxhZ19zdHIsICJNb3JlLCIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHBmbGFncyAmIENYTF9QT0lTT05fRkxBR19PVkVS RkxPVykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzdHJjYXQoZmxhZ19zdHIsICJPdmVyZmxvdywiKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChwZmxhZ3MgJiBDWExfUE9J U09OX0ZMQUdfU0NBTk5JTkcpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RyY2F0KGZsYWdfc3RyLCAiU2Nhbm5pbmcsIik7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqb2JqID0g anNvbl9vYmplY3RfbmV3X3N0cmluZyhmbGFnX3N0cik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoam9iaikKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9v YmplY3RfYWRkKGpwLCAiZmxhZ3MiLCBqb2JqKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoanNvbl9vYmplY3Rf b2JqZWN0X2dldF9leChqbm9kZS0+am9iaiwgIm92ZXJmbG93X3QiLCAmanZhbCkpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmpl Y3RfYWRkKGpwLCAib3ZlcmZsb3dfdGltZSIsIGp2YWwpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3RfYXJyYXlfYWRkKGplcnJvcnMsIGpwKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY291bnQrKzsKPiArwqDCoMKgwqDCoMKgwqB9IC8q IGxpc3RfZm9yX2VhY2hfc2FmZSAqLwo+ICsKPiArb3V0Ogo+ICvCoMKgwqDCoMKgwqDCoGptZWRp YSA9IGpzb25fb2JqZWN0X25ld19vYmplY3QoKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWptZWRp YSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoC8qIEFsd2F5cyBpbmNsdWRlIHRoZSBjb3VudC4gSWYgY291bnQgaXMgemVy bywgbm8gcmVjb3JkcyBmb2xsb3cuICovCj4gK8KgwqDCoMKgwqDCoMKgam9iaiA9IGpzb25fb2Jq ZWN0X25ld19pbnQoY291bnQpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChqb2JqKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGptZWRpYSwgIm5y X3BvaXNvbl9yZWNvcmRzIiwgam9iaik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKGNvdW50KQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGptZWRp YSwgInBvaXNvbl9yZWNvcmRzIiwgamVycm9ycyk7CgpTaW5jZSB0aGVzZSBhcmUgYWxyZWFkeSBu ZXN0ZWQgdW5kZXIgYSAncG9pc29uJyBKU09OIG9iamVjdCwgSSdtCnRlbXB0ZWQgdG8gc2F5IHRo ZXNlIGNhbiBqdXN0IGJlICducl9yZWNvcmRzJyBhbmQgJ3JlY29yZHMnCnJlc3BlY3RpdmVseS4K Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBqbWVkaWE7Cj4gK30KPiArCj4gK3N0cnVjdCBj eGxfcG9pc29uX2N0eCB7Cj4gK8KgwqDCoMKgwqDCoMKgdm9pZCAqZGV2Owo+ICvCoMKgwqDCoMKg wqDCoGJvb2wgaXNfcmVnaW9uOwo+ICt9OwoKVGhpcyBzdHJ1Y3R1cmUgaXMgYSBiaXQgYXdrd2Fy ZCAtIHdoYXQgZG8geW91IHRoaW5rIGFib3V0IGNyZWF0aW5nCmRpZmZlcmVudCB3cmFwcGVycyBm b3IgdGhlIG1lbWRldiBhbmQgcmVnaW9uIGNhc2UgLQoKICB1dGlsX2N4bF9tZW1kZXZfcG9pc29u X2xpc3RfdG9fanNvbigpLCBhbmQKICB1dGlsX2N4bF9yZWdpb25fcG9pc29uX2xpc3RfdG9fanNv bigpIHRoYXQgYXJlIGNhbGxlZCByZXNwZWN0aXZlbHkgYnkKCnV0aWxfY3hsX3ttZW1kZXYscmVn aW9ufV90b19qc29uKCksIGFuZCBpbnRlcm5hbGx5IHRoZXkgY2FuIGNhbGw6CgogIHV0aWxfY3hs X3BvaXNvbl9saXN0X3RvX2pzb24oTlVMTCwgbWVtZGV2LCBmbGFncyksIG9yCiAgdXRpbF9jeGxf cG9pc29uX2xpc3RfdG9fanNvbihyZWdpb24sIE5VTEwsIGZsYWdzKQoKRm9yIHRoZSBuZXh0IGxl dmVsIGRvd24sIGkuZS4gcG9pc29uX2V2ZW50c190b19qc29uLCB0aGUgQGlzX3JlZ2lvbgpib29s IHBhc3NlZCBpbiBkaXJlY3RseSBpcyBmaW5lIGFzIGl0IGRvZXNuJ3QgbmVlZCB0aGUgbWVtZGV2 IG9yIHJlZ2lvbgpvYmplY3RzIHBhc3NlZCBpbiB2aWEgdm9pZCAqLgoKPiArCj4gK3N0YXRpYyBz dHJ1Y3QganNvbl9vYmplY3QgKgo+ICt1dGlsX2N4bF9wb2lzb25fbGlzdF90b19qc29uKHN0cnVj dCBjeGxfcG9pc29uX2N0eCAqcGN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4gK3sKPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QganNvbl9vYmplY3QgKmptZWRpYSA9IE5VTEw7Cj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IHRyYWNlZnNfaW5zdGFuY2UgKmluc3Q7Cj4gK8KgwqDCoMKgwqDCoMKgaW50 IHJjOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpbnN0ID0gdHJhY2Vmc19pbnN0YW5jZV9jcmVhdGUo ImN4bCBsaXN0Iik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFpbnN0KSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGZwcmludGYoc3RkZXJyLCAidHJhY2Vmc19pbnN0YW5jZV9jcmVh dGUoKSBmYWlsZWRcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g TlVMTDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJjID0gY3hsX2V2 ZW50X3RyYWNpbmdfZW5hYmxlKGluc3QsICJjeGwiLCAiY3hsX3BvaXNvbiIpOwo+ICvCoMKgwqDC oMKgwqDCoGlmIChyYyA8IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZnBy aW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZW5hYmxlIHRyYWNlOiAlZFxuIiwgcmMpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycl9mcmVlOwo+ICvCoMKgwqDCoMKgwqDC oH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHBjdHgtPmlzX3JlZ2lvbikKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmMgPSBjeGxfcmVnaW9uX3RyaWdnZXJfcG9pc29uX2xpc3Qo cGN0eC0+ZGV2KTsKPiArwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJjID0gY3hsX21lbWRldl90cmlnZ2VyX3BvaXNvbl9saXN0KHBjdHgtPmRldik7 Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHdyaXRlIG9mIHN5c2ZzIGF0dHJpYnV0ZTogJWRc biIsIHJjKTsKClRoaXMgd291bGQgYmUgaW5jb3JyZWN0IGlmIHRoZSBtZW1kZXYgdHJpZ2dlciBy ZXBvcnRlZCBhbiBFTk9NRU0sIGFuZAp0aGVuIHRoaXMgcmVwb3J0ZWQgYSBzeXNmcyB3cml0ZSBm YWlsdXJlLgoKSXQgc2hvdWxkIGF0IGxlYXN0IGJlIHNvbWV0aGluZyBsaWtlICdmYWlsZWQgdG8g dHJpZ2dlciBwb2lzb24iIC0gYnV0CnNpbmNlIHRoZSBtZW1kZXYgdHJpZ2dlciBoZWxwZXIgaGFz IHByaW50cyBmb3IgZXZlcnkgZmFpbHVyZSBjYXNlLAptYXliZSB0aGlzIGNhbiBqdXN0IGJlIG9t aXR0ZWQ/Cgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycl9mcmVlOwo+ ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcmMgPSBjeGxfZXZlbnRfdHJh Y2luZ19kaXNhYmxlKGluc3QpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZGlz YWJsZSB0cmFjZTogJWRcbiIsIHJjKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Z290byBlcnJfZnJlZTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGpt ZWRpYSA9IHV0aWxfY3hsX3BvaXNvbl9ldmVudHNfdG9fanNvbihpbnN0LCBwY3R4LT5pc19yZWdp b24sIGZsYWdzKTsKPiArZXJyX2ZyZWU6Cj4gK8KgwqDCoMKgwqDCoMKgdHJhY2Vmc19pbnN0YW5j ZV9mcmVlKGluc3QpOwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBqbWVkaWE7Cj4gK30KPiArCj4g wqBzdHJ1Y3QganNvbl9vYmplY3QgKnV0aWxfY3hsX21lbWRldl90b19qc29uKHN0cnVjdCBjeGxf bWVtZGV2ICptZW1kZXYsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25l ZCBsb25nIGZsYWdzKQo+IMKgewo+IEBAIC02NDksNiArODM3LDE2IEBAIHN0cnVjdCBqc29uX29i amVjdCAqdXRpbF9jeGxfbWVtZGV2X3RvX2pzb24oc3RydWN0IGN4bF9tZW1kZXYgKm1lbWRldiwK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29i amVjdF9vYmplY3RfYWRkKGpkZXYsICJmaXJtd2FyZSIsIGpvYmopOwo+IMKgwqDCoMKgwqDCoMKg wqB9Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqBpZiAoZmxhZ3MgJiBVVElMX0pTT05fUE9JU09OX0xJ U1QpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGN4bF9wb2lzb25f Y3R4IHBjdHggPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAuZGV2ID0gbWVtZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgLmlzX3JlZ2lvbiA9IGZhbHNlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqb2JqID0gdXRpbF9j eGxfcG9pc29uX2xpc3RfdG9fanNvbigmcGN0eCwgZmxhZ3MpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoam9iaikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoamRldiwgInBvaXNvbiIsIGpv YmopOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gwqDCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0 X3NldF91c2VyZGF0YShqZGV2LCBtZW1kZXYsIE5VTEwpOwo+IMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gamRldjsKPiDCoH0KPiBAQCAtOTg3LDYgKzExODUsMTYgQEAgc3RydWN0IGpzb25fb2JqZWN0 ICp1dGlsX2N4bF9yZWdpb25fdG9fanNvbihzdHJ1Y3QgY3hsX3JlZ2lvbiAqcmVnaW9uLAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0 X29iamVjdF9hZGQoanJlZ2lvbiwgInN0YXRlIiwgam9iaik7Cj4gwqDCoMKgwqDCoMKgwqDCoH0K PiDCoAo+ICvCoMKgwqDCoMKgwqDCoGlmIChmbGFncyAmIFVUSUxfSlNPTl9QT0lTT05fTElTVCkg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY3hsX3BvaXNvbl9jdHgg cGVjdHggPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAuZGV2ID0gcmVnaW9uLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLmlzX3JlZ2lvbiA9IHRydWUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpvYmogPSB1dGlsX2N4bF9w b2lzb25fbGlzdF90b19qc29uKCZwZWN0eCwgZmxhZ3MpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoam9iaikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoanJlZ2lvbiwgInBvaXNvbiIsIGpv YmopOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gwqDCoMKgwqDCoMKgwqDCoHV0aWxfY3hsX21h cHBpbmdzX2FwcGVuZF9qc29uKGpyZWdpb24sIHJlZ2lvbiwgZmxhZ3MpOwo+IMKgCj4gwqDCoMKg wqDCoMKgwqDCoGlmIChmbGFncyAmIFVUSUxfSlNPTl9EQVgpIHsKPiBkaWZmIC0tZ2l0IGEvdXRp bC9qc29uLmggYi91dGlsL2pzb24uaAo+IGluZGV4IGVhMzcwZGY0ZDFiNy4uM2FlNDA3NGE5NWMz IDEwMDY0NAo+IC0tLSBhL3V0aWwvanNvbi5oCj4gKysrIGIvdXRpbC9qc29uLmgKPiBAQCAtMjEs NiArMjEsNyBAQCBlbnVtIHV0aWxfanNvbl9mbGFncyB7Cj4gwqDCoMKgwqDCoMKgwqDCoFVUSUxf SlNPTl9UQVJHRVRTwqDCoMKgwqDCoMKgwqA9ICgxIDw8IDExKSwKPiDCoMKgwqDCoMKgwqDCoMKg VVRJTF9KU09OX1BBUlRJVElPTsKgwqDCoMKgwqA9ICgxIDw8IDEyKSwKPiDCoMKgwqDCoMKgwqDC oMKgVVRJTF9KU09OX0FMRVJUX0NPTkZJR8KgwqA9ICgxIDw8IDEzKSwKPiArwqDCoMKgwqDCoMKg wqBVVElMX0pTT05fUE9JU09OX0xJU1TCoMKgwqA9ICgxIDw8IDE0KSwKClRoZXJlJ3MgYWxyZWFk eSBhIFVUSUxfSlNPTl9NRURJQV9FUlJPUlMsIGNhbiB3ZSBqdXN0IHJldXNlIHRoYXQgKGluCnNw aXRlIG9mIHRoZSBuYW1lIDopKQoKPiDCoH07Cj4gwqAKPiDCoHZvaWQgdXRpbF9kaXNwbGF5X2pz b25fYXJyYXkoRklMRSAqZl9vdXQsIHN0cnVjdCBqc29uX29iamVjdCAqamFycmF5LAoK