From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id F1C951FF164 for ; Wed, 23 Oct 2024 15:45:10 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B1A341EDBB; Wed, 23 Oct 2024 15:45:48 +0200 (CEST) To: "pve-devel@lists.proxmox.com" , "f.gruenbichler@proxmox.com" Date: Wed, 23 Oct 2024 13:45:07 +0000 References: <20240930113153.2896648-1-alexandre.derumier@groupe-cyllene.com> <723920338.717.1729678408238@webmail.proxmox.com> In-Reply-To: <723920338.717.1729678408238@webmail.proxmox.com> MIME-Version: 1.0 Message-ID: List-Id: Proxmox VE development discussion List-Post: From: "DERUMIER, Alexandre via pve-devel" Precedence: list Cc: "DERUMIER, Alexandre" X-Mailman-Version: 2.1.29 X-BeenThere: pve-devel@lists.proxmox.com List-Subscribe: , List-Unsubscribe: , List-Archive: Reply-To: Proxmox VE development discussion List-Help: Subject: Re: [pve-devel] [PATCH v2 pve-storage 2/2] add lvmqcow2 plugin: (lvm with external qcow2 snapshot) Content-Type: multipart/mixed; boundary="===============7853565281544078916==" Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" --===============7853565281544078916== Content-Type: message/rfc822 Content-Disposition: inline Return-Path: X-Original-To: pve-devel@lists.proxmox.com Delivered-To: pve-devel@lists.proxmox.com Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 67E01C7DA4 for ; Wed, 23 Oct 2024 15:45:47 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 498EC1ED54 for ; Wed, 23 Oct 2024 15:45:17 +0200 (CEST) Received: from PA5P264CU001.outbound.protection.outlook.com (mail-francecentralazlp170100000.outbound.protection.outlook.com [IPv6:2a01:111:f403:c20a::]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Wed, 23 Oct 2024 15:45:15 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=l8/Id9II3MTVINchMD1v0lIkgTmi9yVXVf0F36ltrGtSk1Ex3E7BAdcYb+EpYfrpGH95KQ8JHwdICXHpr9NeTcvrM8X3FMXGkKMPt9wwR3QOWg+VXe+2PfEisVyL0a3KFcFr9F0QWjjGGV+GsRunfYnak8yT+9kThb9l50K1KFssL7MBcTf3yAI/N57SaiJz1Jk554fVHJyhoZ5PHYMMobbugRi70ZbzlwToWm9/F2X8jmofWtFnxUNbIzFkPccw7Sy/l9n+JSkfiQvRp6CaLb4IRquEdHsfl9cgIOz0ZPePD/RuT1nqv4bvnxM/j5SB9D1Apl058KFu2tGydhw6Kw== 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=OTrAqKTqsJFH0eyXR+c9uwfFXhA6z9+Vnsa0+ny9b14=; b=DWvracO0zcZs6YcjMByaw54XxekS40HoyiFbH5/qsFG6yhDyQBVkH0K+LWty/rSiyzprRjnGnDnjZkQX37ce4MmHIstE/kYOBicVe+wAUoqp0wsq7Ij0qygVFm3tk51/OdIU/gSQYue5rRkJhauhDpjswiF0kuoglmmB3HsvZOtcH/39teAEgAuSmhnJJf8iaImOAa01NPkfVp6fRHRR3zNoATHqY8Co2x5Qw791lZTgNpKq4OBRFLlpD/nUSnK9QVZvAZcYA88hV5wiLmezHcVA6nTfgYofbT0X4u2vrKLe2xAEQwfj2RJmbetaYtzoRRUvDD7MiI1zv9t/0m+2Vw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=groupe-cyllene.com; dmarc=pass action=none header.from=groupe-cyllene.com; dkim=pass header.d=groupe-cyllene.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=groupecyllene.onmicrosoft.com; s=selector2-groupecyllene-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OTrAqKTqsJFH0eyXR+c9uwfFXhA6z9+Vnsa0+ny9b14=; b=ReMdfQGxbNZ65lMDvE+LJyZLiD/9iKQUmCkcl2pnteGlC5BLvxRbIf1Z8FLDZcnzngrkkzZteerWn2MxVBjTsI682VEXojNiIG8sF3bi4o4Vqgu1bh/F65yt6ckENVFEh6RXJHZQwdyjiNhoz2SXY5tCU5R+Iv+NOX+bsB+uwW4= Received: from PAZP264MB3686.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:d8::7) by PR1P264MB1981.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:193::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.17; Wed, 23 Oct 2024 13:45:07 +0000 Received: from PAZP264MB3686.FRAP264.PROD.OUTLOOK.COM ([fe80::4c89:3ea0:833e:abb]) by PAZP264MB3686.FRAP264.PROD.OUTLOOK.COM ([fe80::4c89:3ea0:833e:abb%7]) with mapi id 15.20.8093.014; Wed, 23 Oct 2024 13:45:07 +0000 From: "DERUMIER, Alexandre" To: "pve-devel@lists.proxmox.com" , "f.gruenbichler@proxmox.com" Subject: Re: [pve-devel] [PATCH v2 pve-storage 2/2] add lvmqcow2 plugin: (lvm with external qcow2 snapshot) Thread-Topic: [pve-devel] [PATCH v2 pve-storage 2/2] add lvmqcow2 plugin: (lvm with external qcow2 snapshot) Thread-Index: AQHbEyxrsu1lbEDa8UmEm4HrVQzY/LKUQg8AgAA7IQA= Date: Wed, 23 Oct 2024 13:45:07 +0000 Message-ID: References: <20240930113153.2896648-1-alexandre.derumier@groupe-cyllene.com> <723920338.717.1729678408238@webmail.proxmox.com> In-Reply-To: <723920338.717.1729678408238@webmail.proxmox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.52.0-1build2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=groupe-cyllene.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAZP264MB3686:EE_|PR1P264MB1981:EE_ x-ms-office365-filtering-correlation-id: 90fa4c4e-2fa5-4a6c-fde2-08dcf368e7d5 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|10070799003|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?cFZFZFU4N1gwUWRPSEVRMzNJSHBLdmt6blZYUGdMM2s3cHJja0QydjVRTmo3?= =?utf-8?B?d3BNbHRZUTVaYTNWaFlhOHd3M0ZlY0d3Q1d3bzZKejV1akxXMUtIemtBWDk5?= =?utf-8?B?NG5BS0tKaFB3amUwN2ZPNTRUOTM2SC96S1RVM3daTjNtVDQvQlB6NGtGb3dE?= =?utf-8?B?NDByZTExVHRrR0VFTTRDT09kNlJSR0phT0hERGsvbjdkMERmMEN0TkgzNkg3?= =?utf-8?B?QnQ5dDVlczdoR2Z0cWZRZ3pHUUJZYi9ERGxCOHI2S3V4VERzTmtYMW0vcFR1?= =?utf-8?B?MzcrZ2c5aldmL3Q5dk05S3d6aG80RUFWSm9JcVNZME9aR2E0ajZreTNYaTFG?= =?utf-8?B?NTBpUnZBcUEzdFZGdEVWMGJhUkNld2ZuNWxFMWtUc1J2YXBiQzNDY1BzQytR?= =?utf-8?B?OC93R2hIYmdKQklIQys2cmt6WE1CU3ZJNVB2TVpOZlR5MzA5QVhsVEg5Z25B?= =?utf-8?B?ajdIVG93UG9ubzU0Zkl1QUtxd21EMEpFMnRBTExWM2QwVHB2d3E2bno5QXNt?= =?utf-8?B?UTlOcjBqMGVUZVJ4K0l0UjRHNmNmZWxDcHV6ZEtGK3pDVnpxMUN6czF3R250?= =?utf-8?B?QkliK3JrN2FnTVBjMFZteHZsY2VXMmYvNGJKbzNhWFVmR2tiZTFJeFp6Nk1k?= =?utf-8?B?Z0o3SUZkZUN6aGVnU1pQTTl2cUdXb0FGc0IrTVRxWUZKeUx1SytSenJLSkw1?= =?utf-8?B?WEtqeTF0Qzk4MUhTbGFDR3cwYWNhQVUvNXRDQm82aWpXRHI3S3Y5SG5ZTEVP?= =?utf-8?B?UEdVVjRTUlZrd09hNkZaRjAwMUhvanhuSEF1M1RyVnlVRzBDSm5Zc3VwT2VM?= =?utf-8?B?UzZuSGFUTEkyWXlXYWtQTUtvR2VYL2JFdlVhWTdqOUlBYTVDeCtYMDd5ODN5?= =?utf-8?B?T2hQNGRqMjhjY2xsUm1nS05jUlB4bnZLekVzTVI5aHFxSXlaTFI4c01FUTFQ?= =?utf-8?B?S0hmRWVGekVhWms4UWZqUVhKYi9pWGNZb2hoWjdiR1lzSUtmOENNTmJwcGtQ?= =?utf-8?B?b1NFUS9lOWR0MTRWWHRWZWRtTVh4dFRBZTROM0Q1WHRNS0xHTHFYT0pPSzlz?= =?utf-8?B?SlBjbGNITGRIaUp4bkllRUVsbnlkU282cHF6QnViVGZJYkNNd1A1WW1mTEN0?= =?utf-8?B?OWJnb0hMbldSMDNpOE1tSVV6SXVMaFdzd2lraTZKTWV2ZHhGT3phV0prUVBn?= =?utf-8?B?eDVtUWxqOFkyK2hKb2FkcXhMcE5wV3YyaTlYcXhuZ1Z0T1NYcUdVL3FyUzBX?= =?utf-8?B?ZVZScjY2bkhWUjZmbXZjUll2ZXZuaUVDa25VMHFXSTY1RFVtblNodGxYbkFx?= =?utf-8?B?MUpnNUxMVHRYRkhjUlBuMUROeW1PUnh5cUVmRHdYNWhTSkt0K2Yza0ZFUmlm?= =?utf-8?B?eGwrSkVtcGt0QllSVmVLczJ2Q00yZ1ZuRkN4SjMzUnQ3d0ZmWjZvOTBUbThn?= =?utf-8?B?eVJLbGJlVXdsQ1JLOGp1YklNZTNjYXdTSTlnQmxOWlJtS2Y2UXZSOGY2RWJh?= =?utf-8?B?Y1BVeStDQkg4TGMyOGVmbC81NWVWZ2tkUXl3SjRweSs3REtDNldqRHRTbEF6?= =?utf-8?B?U1ZRa2t6Rnd3Mk9uU3dUY1Rib2ZYR0VVUVJEemRuVzAyNTdMeDZub1JSblls?= =?utf-8?B?ZmJZNWVIbm5McU5tQVc1T1U0VlJkY1JMUTVJTXQ1ZFNRbUZHK3g3OUZweEY5?= =?utf-8?B?NkZWM0hIeUQ2RTB1allacVBFUnhmaTlkTVJkenFGUmVYNHh2WCtLdE9RbGZl?= =?utf-8?B?RllZNW9hMUwzMnN1SHlpZWJycUh6RVFaQ0RhNlpIZ2FQOTBwTWd0bXVwV0VM?= =?utf-8?Q?NdfjPBnImLRr3PNShjewFOhCoNqSpxZ57cLxc=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAZP264MB3686.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(10070799003)(38070700018);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?aVRSSmNoa0xWblBnV0t6K2pkeEJSM1lyd1V2bE5aTDl1aEdSZGREWm1XcEtY?= =?utf-8?B?L3BOamczS0YxUHRLSG54cTExcDZBcGExMU8rQlhpZEZtU2FHdzRoZkVVTUhL?= =?utf-8?B?K3JINWFmOVM1d3BFZVNBTy92Q1NxOXE5VTd6UEpCK3MwS051VUhuUzdwN0t0?= =?utf-8?B?bDlWZzlBSXEwUEtybkJ1ZzAydm45U1ZGc1ZNeGxhZ3NNT1E1eFBKdEJVN1Jt?= =?utf-8?B?eVgrVWhaZFlWOHJoNWJKNms0a0UyK2pLaWEzcm4vaXFWN0J6WWhzME1hZU54?= =?utf-8?B?RVY3dnBqbldBT1d0Wk5sY0s4Q3pVS2ZyblBjbEVnQU9TaWliUkpTVVkzVGhp?= =?utf-8?B?RXNxRHpxcDB1bzVsTUF3a1BLZ3dEUnQ1Rk83N1l4U0dSWldJZmg3ak92V0tw?= =?utf-8?B?eG1vM3JwbDF2alZUdjQwMjhCL09oZWtjUWFHY09qOFZ0T1hyd0gxTGs2TzVC?= =?utf-8?B?RlhNMzFTaEQ3eEtMaDdrbVJrandaam5oK2c3K3RiNUJGQVJObGI3YnZRU3Bw?= =?utf-8?B?eU9wdzVzV0dLYWd4dE1hTzI4RDZRcEU1OEJEekkxblJjREZzNHJEajd1amZl?= =?utf-8?B?YnV6NzBSR0NXbGdlVHAzcEt5c0MreGs1cS9qVWNhNEdHTldUYjhYeXNkaDEx?= =?utf-8?B?bmNzK3hQWmo5ayt1TC9mc2paRHBZOGJqRWYveGNpZWRFYXBjOGVPMkdJaUdF?= =?utf-8?B?YWovWGMyeW13anNNV1J5UG5HRVk0ZDdSTEVKZ3doVzlBcUhINHlxVjNLcXJ4?= =?utf-8?B?cG9JMlRRZExLSUZUOUNsVDdsMFd5V1BVY2hmajlnS2VqaVNHZTZmQXVLQ3ov?= =?utf-8?B?MnU1NklYZEJGTEo5cG4vSWx1RzJmMUprL2lRRTAvR1RKOVdEcE4rLzBhYVNZ?= =?utf-8?B?TTJEUU9lYkRGUTRVVUdUWHdhNm0xVmRpK0gweW1ZM3ZRalJGM3J3L3RBYXB0?= =?utf-8?B?RVQ4RFhuN2VsajUxTXg0SGJoQk9XSkE3azRyckxpNjNUbE5zc1BGcUFYMEww?= =?utf-8?B?eFk0YkRjYlF3dTdpZE5Hc3BpN3AzOGxiZEFialpoQ0F4a2ZpWXlTNkR0RUI2?= =?utf-8?B?bnhZMG9hWWVhaEw4THZnQVFUeXFNUmVHdlpnWGxneXJ4UnFBVHppWmpiMmtr?= =?utf-8?B?UzY2NUk5dVZPWnFwSzAybmFMOTUzUmc3V3lWNUNFMDNPQzh4UTE0em1UdHdZ?= =?utf-8?B?L3o3M05GOXlGWGtXb3dBbWV2TFlrVW5FYkp1MHUvZVBnczZ6WmgrNFpLK2dF?= =?utf-8?B?OUFlWVlvUCt2N24ySzROVm9IT0MrYVRBa0JkclZFMEMxT2VPbzlTUjRLbjc3?= =?utf-8?B?dnYvRFhCZGQ4cUlNVTE1Mi90NXQxUzBaUXE5Wm9TRWFYQ1NJUmdibGlrc25B?= =?utf-8?B?SXhVQS83ZlZkczVkUWhvNDJ2RzBWcndhbkdaZmdTQmV3OVdIRk0yNllIWFpN?= =?utf-8?B?dklvVmVXdlhBV1lDemo4ZTlIdDY3dUpWdnRQai9wbmQ1c0d4enNYem9XVWh2?= =?utf-8?B?T3J6UDNwTXI4amR0NjdHZllmUXpRM2d2aVd0WHlZUEk2ZERQeDk1Z2NKL1pD?= =?utf-8?B?YVpQSDgzQ3B4OU9aMUJzQjlkY2FRV0dJN3l1L1JpWm50UlV4WGlsMzNieU5q?= =?utf-8?B?dlRjSWNzcDEyMTdjS3dzMU12aUVLMzdQbGppY1g4V0V2dnloN2FkRXZWZEcr?= =?utf-8?B?OTVPMXhLQlEydlFNVWVsWCs2S3pRcVdPRzlsdzZodW1EMDFwRi82MnB0UXRr?= =?utf-8?B?Zmk5bFNxNSs2eiszcG10Wmg3UHZSVER2dFNVUk5pbUIxTXh4UDlpNnZ2YTJq?= =?utf-8?B?bGN1SUM0bjVWM0djdjR6SUpGTlRGT2pwaFA1aFk1TW5Xa3laT3g3THFGRGtR?= =?utf-8?B?bXVMZ25HdW95VE04VFRGQkxWVVFKV2l4WFVWeVM3QjhBRnJOdTByWGgyOFdG?= =?utf-8?B?REVwUDhYSzdNbmxmaG1WeGgwdnBOcEhHNTN0OFkremNjNzVqOVlXVHgwU3R3?= =?utf-8?B?NEl2a1c4SHN3TCt4OGdHeVEyMmh1YTVWRnIrSTlYMy93WlhLMFNWcEVNTnVJ?= =?utf-8?B?Ynl5SnlBeWYvanNHeEJwdVpTbEFXbXd5SkJMbTAwR0NJWGhqMlNRVjNFdWtE?= =?utf-8?B?WDVUYzVOQS90NDNYZDZwclhvK1hZVldFb2JCek1OSW9MQzNnRThvMW5WaWg5?= =?utf-8?Q?3SLyvtuIbdmKfb7aOnZMWjboHA/blP5Wo+V5gcO9mtMC?= Content-Type: text/plain; charset="utf-8" Content-ID: <5541238657894A4AA6645AC06BA69332@FRAP264.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: groupe-cyllene.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAZP264MB3686.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 90fa4c4e-2fa5-4a6c-fde2-08dcf368e7d5 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Oct 2024 13:45:07.1208 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: ee11ccf7-112c-4284-848b-f229745e715b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 5VtXYkLEArDUkc6nY2KPSti82pzFrGk4lha0pGwY/rkeasuFpjIkIRdkbLX2n+bGLAu+SNLq9FUTH1MCs/vIFs5NV/kgDsQE9WqveTWmHiNM2L0BsfoOx4WuTX5fhVid X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1P264MB1981 X-SPAM-LEVEL: Spam detection results: 0 ARC_SIGNED 0.001 Message has a ARC signature ARC_VALID 0.001 Message has a valid ARC signature AWL -0.446 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DMARC_PASS -0.1 DMARC pass policy SPF_HELO_PASS -0.001 SPF: HELO matches SPF record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [btrfsplugin.pm,pbsplugin.pm,cyllene.com,storage.pm,groupecyllene.onmicrosoft.com,esxiplugin.pm,lvmqcow2plugin.pm,lvmthinplugin.pm] URI_NOVOWEL 0.5 URI hostname has long non-vowel sequence Pj5JIGFtIG5vdCB5ZXQgY29udmluY2VkIHRoaXMgaXMgc29tZWhvdyBhIGdvb2QgaWRlYSwgYnV0 IG1heWJlIHlvdSBjYW4NCj4+Y29udmluY2UgbWUgb3RoZXJ3aXNlIDspDQo+Pg0KPj52YXJpYW50 IEE6IHRoaXMgaXMganVzdCB1c2VmdWwgZm9yIHZlcnkgc2hvcnQtbGl2ZWQgc25hcHNob3RzDQo+ PnZhcmlhbnQgQjogdGhlc2Ugc25hcHNob3RzIGFyZSBzdXBwb3NlZCB0byBiZSBsb25nLWxpdmVk DQoNCkNhbiB5b3UgZGVmaW5lZCAic2hvcnQgIi8gImxvbmciICA/IGFuZCB0aGUgZGlmZmVyZW50 IHVzZWNhc2UgPw0KDQpiZWNhdXNlIGZvciBtZSwgYSBzbmFwc2hvdCBpcyBhIHNuYXBzaG90LiBT b21ldGltZSBJIHRha2UgYSBzbmFwc2hvdA0KYmVmb3JlIGRvaW5nIHNvbWUgY3JpdGljYWwgY2hh bmdlcywgYnV0IEkgY2FuJ3Qga25vd24gaWYgSSBuZWVkIHRvDQpyb2xsYmFjayBpbiBuZXh0IDJo LCBvciBuZXh0IG1vbnRoLg0KDQpJIHRoaW5rIHRoYXQgImxvbmctbGl2ZWQiIHVzZWNhc2UgaXMg YmFja3VwIChidXQgd2UgZG9uJ3QgbmVlZCBpdCksDQpvciByZXBsaWNhdGlvbiAodGhpcyBjb3Vs ZCBhcHBseSBoZXJlLCBpZiB3ZSB3YW50IHRvIGFkZCByZXBsaWNhdGlvbg0KZm9yIGRpc2FzdGVy IHJlY292ZXJ5KQ0KDQoNCj4+QSBpcyBub3Qgc29tZXRoaW5nIHdlIHdhbnQuIHdlIGludGVudGlv bmFsbHkgZG9uJ3QgaGF2ZSBub24tdGhpbiBMVk0NCj4+c25hcHNob3RzIGZvciBleGFtcGxlLg0K DQpBRkFJSywgd2UgbmV2ZXIgaGFkIGltcGxlbWVudGVkIGl0IGJlY2F1c2UgTFZNIHNuYXNwaG90 IGlzIHNsb3cgYXMNCmhlbGwuKGFzIGEgbHZtIGV4dGVudCBhcmUgYXJvdW5kIDRNQiwgaWYgeW91 IHdhbnQgNGsgb24gYSBzbmFwc2hvdCwgeW91DQpuZWVkIHRvIHJlcmVhZCBhbmQgcmV3cml0ZSB0 aGUgNE1CLCAgc28gYXJvdW5kIDEwMDB4IG92ZXItDQphbXBsaWZpY2F0aW9uIGFuZCBzbG93IGlv cHMpDQoNClRoaXMgaXMgcmVhbGx5IHRoZSBtYWluIGJsb2NrZXIgZm9yIG15IGN1c3RvbWVycyBt aWdyYXRpbmcgZnJvbSB2bXdhcmUNCihhbmQgdG8gYmUgaG9uZXN0IEkgaGF2ZSBzb21lIG9mIHRo ZW0gZ29pbmcgdG8gb3JhY2xlIG92bG0gKHdpdGgNCm92aXJ0KSwgYmVjYXVzZSBvdmlydCBzdXBw b3J0IGl0IHRoaXMgd2F5KS4gDQoNCg0KDQo+PkIgb25jZSBJIGNyZWF0ZSBhIHNpbmdsZSBzbmFw c2hvdCwgdGhlICJvcmlnaW5hbCIgc3RvcmFnZSBvbmx5DQo+PmNvbnRhaW5zIHRoZSBkYXRhIHdy aXR0ZW4gdXAgdG8gdGhhdCBwb2ludCwgYW55dGhpbmcgZWxzZSBpcyBzdG9yZWQNCj4+b24gdGhl ICJzbmFwc2hvdCIgc3RvcmFnZS4gdGhpcyBtZWFucyBteSBzbmFwc2hvdCBzdG9yYWdlIG11c3Qg YmUgYXQNCj4+bGVhc3QgYXMgZmFzdC9nb29kL3NoYXJlZC8uLiBhcyBteSBvcmlnaW5hbCBzdG9y YWdlLiBpbiB0aGF0IGNhc2UsIEkNCj4+Y2FuIGp1c3QgdXNlIHRoZSBzbmFwc2hvdCBzdG9yYWdl IGRpcmVjdGx5IGFuZCBkaXRjaCB0aGUgb3JpZ2luYWwNCj4+c3RvcmFnZT8NCg0KU29ycnksIGJ1 dCBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IHlvdSBhcmUgdGFsa2luZyBhYm91dA0Kb3JpZ2luYWwv c25hcHNob3Qgc3RvcmFnZSA/IEkgbmV2ZXIgaGF2ZSB0aGlua2VkIHRvIHVzZSBhbm90aGVyIHN0 b3JhZ2UNCmZvciBleHRlcm5hbCBzbmFwc2hvdC4NCg0KVGhlIHBhdGNoIGlzIHJlYWxseSB0byBh ZGQgZXh0ZXJuYWwgc25hcHNob3Qgb24gc2FtZSBsdm0gc3RvcmFnZSwNCnRocm91Z2ggbHZtIGFk ZGl0aW9uYWwgdm9sdW1lLCBidXQgd2l0aCBxY293MiBmb3JtYXQgdG8gaGF2ZSBnb29kDQpwZXJm b3JtYW5jZSAodnMgc2xvdyBsdm0gc25hcHNob3QpDQoNCg0KDQoNCg0KDQoNCg0KDQo+IEFsZXhh bmRyZSBEZXJ1bWllciB2aWEgcHZlLWRldmVsIDxwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20+ IGhhdCBhbQ0KPiAzMC4wOS4yMDI0IDEzOjMxIENFU1QgZ2VzY2hyaWViZW46DQo+IFNpZ25lZC1v ZmYtYnk6IEFsZXhhbmRyZSBEZXJ1bWllciA8YWxleGFuZHJlLmRlcnVtaWVyQGdyb3VwZS0NCj4g Y3lsbGVuZS5jb20+DQo+IC0tLQ0KPiDCoHNyYy9QVkUvU3RvcmFnZS5wbcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAyICsNCj4gwqBzcmMvUFZFL1N0b3JhZ2UvTHZtUWNvdzJQ bHVnaW4ucG0gfCA0NjANCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+IMKgc3Jj L1BWRS9TdG9yYWdlL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMgKy0NCj4gwqAz IGZpbGVzIGNoYW5nZWQsIDQ2NCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+IMKgY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9QVkUvU3RvcmFnZS9Mdm1RY293MlBsdWdpbi5wbQ0KPiANCj4g ZGlmZiAtLWdpdCBhL3NyYy9QVkUvU3RvcmFnZS5wbSBiL3NyYy9QVkUvU3RvcmFnZS5wbQ0KPiBp bmRleCA1N2IyMDM4Li4xMTk5OThmIDEwMDc1NQ0KPiAtLS0gYS9zcmMvUFZFL1N0b3JhZ2UucG0N Cj4gKysrIGIvc3JjL1BWRS9TdG9yYWdlLnBtDQo+IEBAIC0yOCw2ICsyOCw3IEBAIHVzZSBQVkU6 OlN0b3JhZ2U6OlBsdWdpbjsNCj4gwqB1c2UgUFZFOjpTdG9yYWdlOjpEaXJQbHVnaW47DQo+IMKg dXNlIFBWRTo6U3RvcmFnZTo6TFZNUGx1Z2luOw0KPiDCoHVzZSBQVkU6OlN0b3JhZ2U6Okx2bVRo aW5QbHVnaW47DQo+ICt1c2UgUFZFOjpTdG9yYWdlOjpMdm1RY293MlBsdWdpbjsNCj4gwqB1c2Ug UFZFOjpTdG9yYWdlOjpORlNQbHVnaW47DQo+IMKgdXNlIFBWRTo6U3RvcmFnZTo6Q0lGU1BsdWdp bjsNCj4gwqB1c2UgUFZFOjpTdG9yYWdlOjpJU0NTSVBsdWdpbjsNCj4gQEAgLTU0LDYgKzU1LDcg QEAgb3VyICRLTk9XTl9FWFBPUlRfRk9STUFUUyA9IFsncmF3K3NpemUnLA0KPiAndGFyK3NpemUn LCAncWNvdzIrc2l6ZScsICd2bWRrK3NpemUnLA0KPiDCoFBWRTo6U3RvcmFnZTo6RGlyUGx1Z2lu LT5yZWdpc3RlcigpOw0KPiDCoFBWRTo6U3RvcmFnZTo6TFZNUGx1Z2luLT5yZWdpc3RlcigpOw0K PiDCoFBWRTo6U3RvcmFnZTo6THZtVGhpblBsdWdpbi0+cmVnaXN0ZXIoKTsNCj4gK1BWRTo6U3Rv cmFnZTo6THZtUWNvdzJQbHVnaW4tPnJlZ2lzdGVyKCk7DQo+IMKgUFZFOjpTdG9yYWdlOjpORlNQ bHVnaW4tPnJlZ2lzdGVyKCk7DQo+IMKgUFZFOjpTdG9yYWdlOjpDSUZTUGx1Z2luLT5yZWdpc3Rl cigpOw0KPiDCoFBWRTo6U3RvcmFnZTo6SVNDU0lQbHVnaW4tPnJlZ2lzdGVyKCk7DQo+IGRpZmYg LS1naXQgYS9zcmMvUFZFL1N0b3JhZ2UvTHZtUWNvdzJQbHVnaW4ucG0NCj4gYi9zcmMvUFZFL1N0 b3JhZ2UvTHZtUWNvdzJQbHVnaW4ucG0NCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg MDAwMDAwMC4uNjhjODY4Ng0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL3NyYy9QVkUvU3RvcmFn ZS9Mdm1RY293MlBsdWdpbi5wbQ0KPiBAQCAtMCwwICsxLDQ2MCBAQA0KPiArcGFja2FnZSBQVkU6 OlN0b3JhZ2U6Okx2bVFjb3cyUGx1Z2luOw0KPiArDQo+ICt1c2Ugc3RyaWN0Ow0KPiArdXNlIHdh cm5pbmdzOw0KPiArDQo+ICt1c2UgSU86OkZpbGU7DQo+ICsNCj4gK3VzZSBQVkU6OlRvb2xzIHF3 KHJ1bl9jb21tYW5kIHRyaW0pOw0KPiArdXNlIFBWRTo6U3RvcmFnZTo6UGx1Z2luOw0KPiArdXNl IFBWRTo6U3RvcmFnZTo6TFZNUGx1Z2luOw0KPiArdXNlIFBWRTo6SlNPTlNjaGVtYSBxdyhnZXRf c3RhbmRhcmRfb3B0aW9uKTsNCj4gKw0KPiArdXNlIGJhc2UgcXcoUFZFOjpTdG9yYWdlOjpMVk1Q bHVnaW4pOw0KPiArDQo+ICsjIENvbmZpZ3VyYXRpb24NCj4gKw0KPiArc3ViIHR5cGUgew0KPiAr wqDCoMKgIHJldHVybiAnbHZtcWNvdzInOw0KPiArfQ0KPiArDQo+ICtzdWIgcGx1Z2luZGF0YSB7 DQo+ICvCoMKgwqAgcmV0dXJuIHsNCj4gKyAjY29udGFpbmVyIG5vdCB5ZXQgaW1wbGVtZW50ZWQg I25lZWQgdG8gaW1wbGVtZW50ZWQgZG0tcWNvdzINCj4gKyBjb250ZW50ID0+IFsge2ltYWdlcyA9 PiAxLCByb290ZGlyID0+IDF9LCB7IGltYWdlcyA9PiAxIH1dLA0KPiArwqDCoMKgIH07DQo+ICt9 DQo+ICsNCj4gK3N1YiBwcm9wZXJ0aWVzIHsNCj4gK8KgwqDCoCByZXR1cm4gew0KPiArwqDCoMKg IH07DQo+ICt9DQo+ICsNCj4gK3N1YiBvcHRpb25zIHsNCj4gK8KgwqDCoCByZXR1cm4gew0KPiAr IHZnbmFtZSA9PiB7IGZpeGVkID0+IDEgfSwNCj4gKyBub2RlcyA9PiB7IG9wdGlvbmFsID0+IDEg fSwNCj4gKyBzaGFyZWQgPT4geyBvcHRpb25hbCA9PiAxIH0sDQo+ICsgZGlzYWJsZSA9PiB7IG9w dGlvbmFsID0+IDEgfSwNCj4gKyBzYWZlcmVtb3ZlID0+IHsgb3B0aW9uYWwgPT4gMSB9LA0KPiAr IHNhZmVyZW1vdmVfdGhyb3VnaHB1dCA9PiB7IG9wdGlvbmFsID0+IDEgfSwNCj4gKyBjb250ZW50 ID0+IHsgb3B0aW9uYWwgPT4gMSB9LA0KPiArIGJhc2UgPT4geyBmaXhlZCA9PiAxLCBvcHRpb25h bCA9PiAxIH0sDQo+ICsgdGFnZ2VkX29ubHkgPT4geyBvcHRpb25hbCA9PiAxIH0sDQo+ICsgYnds aW1pdCA9PiB7IG9wdGlvbmFsID0+IDEgfSwNCj4gKyBzbmFwZXh0ID0+IHsgZml4ZWQgPT4gMSB9 LA0KPiArwqDCoMKgIH07DQo+ICt9DQo+ICsNCj4gKyMgU3RvcmFnZSBpbXBsZW1lbnRhdGlvbg0K PiArDQo+ICtzdWIgcGFyc2Vfdm9sbmFtZSB7DQo+ICvCoMKgwqAgbXkgKCRjbGFzcywgJHZvbG5h bWUpID0gQF87DQo+ICsNCj4gK8KgwqDCoCBQVkU6OlN0b3JhZ2U6OlBsdWdpbjo6cGFyc2VfbHZt X25hbWUoJHZvbG5hbWUpOw0KPiArwqDCoMKgIG15ICRmb3JtYXQgPSAkdm9sbmFtZSA9fiBtL14o LiopLXNuYXAtLyA/ICdxY293MicgOiAncmF3JzsNCj4gKw0KPiArwqDCoMKgIGlmICgkdm9sbmFt ZSA9fiBtL14oKHZtfGJhc2UpLShcZCspLVxTKykkLykgew0KPiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuICgnaW1hZ2VzJywgJDEsICQzLCB1bmRlZiwgdW5kZWYsICQyIGVxICdiYXNlJywNCj4gJGZv cm1hdCk7DQo+ICvCoMKgwqAgfQ0KPiArDQo+ICvCoMKgwqAgZGllICJ1bmFibGUgdG8gcGFyc2Ug bHZtIHZvbHVtZSBuYW1lICckdm9sbmFtZSdcbiI7DQo+ICt9DQo+ICsNCj4gK3N1YiBmaWxlc3lz dGVtX3BhdGggew0KPiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkdm9sbmFtZSwgJHNuYXBu YW1lLCAkY3VycmVudF9zbmFwKSA9IEBfOw0KPiArDQo+ICvCoMKgwqAgbXkgKCR2dHlwZSwgJG5h bWUsICR2bWlkKSA9ICRjbGFzcy0+cGFyc2Vfdm9sbmFtZSgkdm9sbmFtZSk7DQo+ICsNCj4gK8Kg wqDCoCBteSAkdmcgPSAkc2NmZy0+e3ZnbmFtZX07DQo+ICsNCj4gK8KgwqDCoCBteSAkcGF0aCA9 ICIvZGV2LyR2Zy8kbmFtZSI7DQo+ICsNCj4gK8KgwqDCoCBpZigkc25hcG5hbWUpIHsNCj4gKyAk cGF0aCA9IGdldF9zbmFwX3ZvbG5hbWUoJHBhdGgsICRzbmFwbmFtZSk7DQo+ICvCoMKgwqAgfSBl bHNpZiAoJGN1cnJlbnRfc25hcCkgew0KPiArICRwYXRoID0gJGN1cnJlbnRfc25hcC0+e2ZpbGV9 Ow0KPiArwqDCoMKgIH0NCj4gKw0KPiArwqDCoMKgIHJldHVybiB3YW50YXJyYXkgPyAoJHBhdGgs ICR2bWlkLCAkdnR5cGUpIDogJHBhdGg7DQo+ICt9DQo+ICsNCj4gK3N1YiBjcmVhdGVfYmFzZSB7 DQo+ICvCoMKgwqAgbXkgKCRjbGFzcywgJHN0b3JlaWQsICRzY2ZnLCAkdm9sbmFtZSkgPSBAXzsN Cj4gKw0KPiArwqDCoMKgIG15ICR2ZyA9ICRzY2ZnLT57dmduYW1lfTsNCj4gKw0KPiArwqDCoMKg IG15ICgkdnR5cGUsICRuYW1lLCAkdm1pZCwgJGJhc2VuYW1lLCAkYmFzZXZtaWQsICRpc0Jhc2Up ID0NCj4gK8KgwqDCoMKgwqDCoMKgICRjbGFzcy0+cGFyc2Vfdm9sbmFtZSgkdm9sbmFtZSk7DQo+ ICsNCj4gK8KgwqDCoCBkaWUgImNyZWF0ZV9iYXNlIG5vdCBwb3NzaWJsZSB3aXRoIGJhc2UgaW1h Z2VcbiIgaWYgJGlzQmFzZTsNCj4gKw0KPiArwqDCoMKgIGRpZSAidW5hYmxlIHRvIGNyZWF0ZSBi YXNlIHZvbHVtZSAtIGZvdW5kIHNuYXBzaG90IiBpZiAkY2xhc3MtDQo+ID5zbmFwc2hvdF9leGlz dCgkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1lKTsNCj4gKw0KPiArwqDCoMKgIG15ICRuZXduYW1l ID0gJG5hbWU7DQo+ICvCoMKgwqAgJG5ld25hbWUgPX4gcy9edm0tL2Jhc2UtLzsNCj4gKw0KPiAr wqDCoMKgIG15ICRjbWQgPSBbJy9zYmluL2x2cmVuYW1lJywgJHZnLCAkdm9sbmFtZSwgJG5ld25h bWVdOw0KPiArwqDCoMKgIHJ1bl9jb21tYW5kKCRjbWQsIGVycm1zZyA9PiAibHZyZW5hbWUgJyR2 Zy8kdm9sbmFtZScgPT4NCj4gJyR2Zy8kbmV3bmFtZScgZXJyb3IiKTsNCj4gKw0KPiArwqDCoMKg ICMgc2V0IGluYWN0aXZlLCByZWFkLW9ubHkgZmxhZ3MNCj4gK8KgwqDCoCAkY21kID0gWycvc2Jp bi9sdmNoYW5nZScsICctYW4nLCAnLXByJywgIiR2Zy8kbmV3bmFtZSJdOw0KPiArwqDCoMKgIGV2 YWwgeyBydW5fY29tbWFuZCgkY21kKTsgfTsNCj4gK8KgwqDCoCB3YXJuICRAIGlmICRAOw0KPiAr DQo+ICvCoMKgwqAgbXkgJG5ld3ZvbG5hbWUgPSAkbmV3bmFtZTsNCj4gKw0KPiArwqDCoMKgIHJl dHVybiAkbmV3dm9sbmFtZTsNCj4gK30NCj4gKw0KPiArc3ViIGNsb25lX2ltYWdlIHsNCj4gK8Kg wqDCoCBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1lLCAkdm1pZCwgJHNuYXAp ID0gQF87DQo+ICsNCj4gK8KgwqDCoCBkaWUgImNhbid0IGNsb25lIGltYWdlcyBpbiBsdm0gc3Rv cmFnZVxuIjsNCj4gK30NCj4gKw0KPiArc3ViIGFsbG9jX2ltYWdlIHsNCj4gK8KgwqDCoCBteSAo JGNsYXNzLCAkc3RvcmVpZCwgJHNjZmcsICR2bWlkLCAkZm10LCAkbmFtZSwgJHNpemUpID0gQF87 DQo+ICsNCj4gK8KgwqDCoCBkaWUgInVuc3VwcG9ydGVkIGZvcm1hdCAnJGZtdCciIGlmICRmbXQg bmUgJ3Jhdyc7DQo+ICsNCj4gK8KgwqDCoCBkaWUgImlsbGVnYWwgbmFtZSAnJG5hbWUnIC0gc2hv dWxkIGJlICd2bS0kdm1pZC0qJ1xuIg0KPiArIGlmwqAgJG5hbWUgJiYgJG5hbWUgIX4gbS9edm0t JHZtaWQtLzsNCj4gKw0KPiArwqDCoMKgIG15ICR2Z3MgPSBQVkU6OlN0b3JhZ2U6OkxWTVBsdWdp bjo6bHZtX3ZncygpOw0KPiArDQo+ICvCoMKgwqAgbXkgJHZnID0gJHNjZmctPnt2Z25hbWV9Ow0K PiArDQo+ICvCoMKgwqAgZGllICJubyBzdWNoIHZvbHVtZSBncm91cCAnJHZnJ1xuIiBpZiAhZGVm aW5lZCAoJHZncy0+eyR2Z30pOw0KPiArDQo+ICvCoMKgwqAgbXkgJGZyZWUgPSBpbnQoJHZncy0+ eyR2Z30tPntmcmVlfSk7DQo+ICsNCj4gK8KgwqDCoCBkaWUgIm5vdCBlbm91Z2ggZnJlZSBzcGFj ZSAoJGZyZWUgPCAkc2l6ZSlcbiIgaWYgJGZyZWUgPCAkc2l6ZTsNCj4gKw0KPiArwqDCoMKgICRu YW1lID0gJGNsYXNzLT5maW5kX2ZyZWVfZGlza25hbWUoJHN0b3JlaWQsICRzY2ZnLCAkdm1pZCkN Cj4gKyBpZiAhJG5hbWU7DQo+ICsNCj4gK8KgwqDCoCBteSAkdGFncyA9IFsicHZlLXZtLSR2bWlk Il07DQo+ICvCoMKgwqAgaWYgKCRuYW1lID1+IG0vXigoKHZtfGJhc2UpLShcZCspLWRpc2stKFxk KykpKSgtc25hcC0oLiopKT8vKSB7DQo+ICvCoMKgwqDCoMKgwqDCoCBwdXNoIEAkdGFncywgIlxA cHZlLSQxIjsNCj4gK8KgwqDCoCB9DQo+ICsNCj4gK8KgwqDCoCBQVkU6OlN0b3JhZ2U6OkxWTVBs dWdpbjo6bHZjcmVhdGUoJHZnLCAkbmFtZSwgJHNpemUsICR0YWdzKTsNCj4gKw0KPiArwqDCoMKg IHJldHVybiAkbmFtZTsNCj4gK30NCj4gKw0KPiArc3ViIHZvbHVtZV9zbmFwc2hvdF9pbmZvIHsN Cj4gK8KgwqDCoCBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1lKSA9IEBfOw0K PiArDQo+ICvCoMKgwqAgcmV0dXJuICRjbGFzcy0+bGlzdF9zbmFwc2hvdHMoJHNjZmcsICRzdG9y ZWlkLCAkdm9sbmFtZSk7DQo+ICt9DQo+ICsNCj4gK3N1YiBhY3RpdmF0ZV92b2x1bWUgew0KPiAr wqDCoMKgIG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJHZvbG5hbWUsICRzbmFwbmFtZSwg JGNhY2hlKSA9IEBfOw0KPiArDQo+ICvCoMKgwqAgbXkgJGx2bV9hY3RpdmF0ZV9tb2RlID0gJ2V5 JzsNCj4gK8KgwqDCoCBteSAkdGFnID0gdW5kZWY7DQo+ICsNCj4gK8KgwqDCoCAjYWN0aXZhdGUg dm9sdW1lICYmIGFsbCB2b2x1bWVzIHNuYXBzaG90cyBieSB0YWcNCj4gK8KgwqDCoCBpZigkdm9s bmFtZSA9fiBtL14oKCh2bXxiYXNlKS0oXGQrKS1kaXNrLShcZCspKSkoLXNuYXAtKC4qKSk/LykN Cj4gew0KPiArICR0YWcgPSAiXEBwdmUtdm0tJDQtZGlzay0kNSI7DQo+ICvCoMKgwqAgfQ0KPiAr DQo+ICvCoMKgwqAgbXkgJGNtZCA9IFsnL3NiaW4vbHZjaGFuZ2UnLCAiLWEkbHZtX2FjdGl2YXRl X21vZGUiLCAkdGFnXTsNCj4gK8KgwqDCoCBydW5fY29tbWFuZCgkY21kLCBlcnJtc2cgPT4gImNh bid0IGFjdGl2YXRlIExWICckdGFnJyIpOw0KPiArDQo+ICvCoMKgwqAgJGNtZCA9IFsnL3NiaW4v bHZjaGFuZ2UnLCAnLS1yZWZyZXNoJywgJHRhZ107DQo+ICvCoMKgwqAgcnVuX2NvbW1hbmQoJGNt ZCwgZXJybXNnID0+ICJjYW4ndCByZWZyZXNoIExWICckdGFnJyBmb3INCj4gYWN0aXZhdGlvbiIp Ow0KPiArfQ0KPiArDQo+ICtzdWIgZGVhY3RpdmF0ZV92b2x1bWUgew0KPiArwqDCoMKgIG15ICgk Y2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJHZvbG5hbWUsICRzbmFwbmFtZSwgJGNhY2hlKSA9IEBf Ow0KPiArDQo+ICvCoMKgwqAgbXkgJHRhZyA9IHVuZGVmOw0KPiArwqDCoMKgICNkZWFjdGl2YXRl IHZvbHVtZSAmJiBhbGwgdm9sdW1lcyBzbmFzcGhvdHMgYnkgdGFnDQo+ICvCoMKgwqAgaWYoJHZv bG5hbWUgPX4gbS9eKCgodm18YmFzZSktKFxkKyktZGlzay0oXGQrKSkpKC1zbmFwLSguKikpPy8p DQo+IHsNCj4gKyAkdGFnID0gIlxAcHZlLXZtLSQ0LWRpc2stJDUiOw0KPiArwqDCoMKgIH0NCj4g Kw0KPiArwqDCoMKgIG15ICRjbWQgPSBbJy9zYmluL2x2Y2hhbmdlJywgJy1hbG4nLCAkdGFnXTsN Cj4gK8KgwqDCoCBydW5fY29tbWFuZCgkY21kLCBlcnJtc2cgPT4gImNhbid0IGRlYWN0aXZhdGUg TFYgJyR0YWcnIik7DQo+ICt9DQo+ICsNCj4gK3N1YiB2b2x1bWVfcmVzaXplIHsNCj4gK8KgwqDC oCBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1lLCAkc2l6ZSwgJHJ1bm5pbmcp ID0gQF87DQo+ICsNCj4gK8KgwqDCoCAjd2Ugc2hvdWxkIHJlc2l6ZSB0aGUgYmFzZSBpbWFnZSBh bmQgcGFyZW50cyBzbmFwc2hvdHMsDQo+ICvCoMKgwqAgI2J1dCBob3cgdG8gbWFuYWdlIHJvbGxi YWNrID8NCj4gKw0KPiArwqDCoMKgIGRpZSAiY2FuJ3QgcmVzaXplIGlmIHNuYXNwaG90cyBleGlz dCIgaWYgJGNsYXNzLQ0KPiA+c25hcHNob3RfZXhpc3QoJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFt ZSk7DQo+ICsNCj4gK8KgwqDCoCByZXR1cm4gMTsNCj4gK30NCj4gKw0KPiArc3ViIHZvbHVtZV9z bmFwc2hvdCB7DQo+ICvCoMKgwqAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFt ZSwgJHNuYXApID0gQF87DQo+ICsNCj4gK8KgwqDCoCAkY2xhc3MtPmFjdGl2YXRlX3ZvbHVtZSgk c3RvcmVpZCwgJHNjZmcsICR2b2xuYW1lLCB1bmRlZiwge30pOw0KPiArDQo+ICvCoMKgwqAgbXkg JGN1cnJlbnRfcGF0aCA9ICRjbGFzcy0+cGF0aCgkc2NmZywgJHZvbG5hbWUsICRzdG9yZWlkKTsN Cj4gK8KgwqDCoCBteSAkY3VycmVudF9mb3JtYXQgPQ0KPiAoUFZFOjpTdG9yYWdlOjpQbHVnaW46 OmZpbGVfc2l6ZV9pbmZvKCRjdXJyZW50X3BhdGgpKVsxXTsNCj4gK8KgwqDCoCBteSAkc25hcHBh dGggPSBnZXRfc25hcF92b2xuYW1lKCRjdXJyZW50X3BhdGgsICRzbmFwKTsNCj4gKw0KPiArwqDC oMKgIG15ICRzbmFwdm9sbmFtZSA9IGdldF9zbmFwX3ZvbG5hbWUoJHZvbG5hbWUsICRzbmFwKTsN Cj4gK8KgwqDCoCAjYWxsb2NhdGUgbHZtIHNuYXBzaG90IHZvbHVtZQ0KPiArwqDCoMKgIG15ICgk dnR5cGUsICRuYW1lLCAkdm1pZCwgJGJhc2VuYW1lLCAkYmFzZXZtaWQsICRpc0Jhc2UpID0NCj4g KyAkY2xhc3MtPnBhcnNlX3ZvbG5hbWUoJHZvbG5hbWUpOw0KPiArwqDCoMKgIG15ICRzaXplID0g JGNsYXNzLT52b2x1bWVfc2l6ZV9pbmZvKCRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsDQo+IDUp Ow0KPiArwqDCoMKgICNhZGQgMTAwTSBmb3IgcWNvdzIgaGVhZGVycw0KPiArwqDCoMKgICRzaXpl ID0gaW50KCRzaXplLzEwMjQpICsgKDEwMCoxMDI0KTsNCj4gKw0KPiArwqDCoMKgICRjbGFzcy0+ YWxsb2NfaW1hZ2UoJHN0b3JlaWQsICRzY2ZnLCAkdm1pZCwgJ3JhdycsICRzbmFwdm9sbmFtZSwN Cj4gJHNpemUpOw0KPiArDQo+ICvCoMKgwqAgIyBjcmVhdGUgdGhlIHFjb3cyIGZzDQo+ICvCoMKg wqAgZXZhbCB7DQo+ICvCoMKgwqDCoMKgwqDCoCBteSAkY21kID0gWycvdXNyL2Jpbi9xZW11LWlt ZycsICdjcmVhdGUnLCAnLWInLA0KPiAkY3VycmVudF9wYXRoLA0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICctRicsICRjdXJyZW50X2Zvcm1hdCwgJy1mJywgJ3Fjb3cy JywgJHNuYXBwYXRoXTsNCj4gK8KgwqDCoMKgwqDCoMKgIG15ICRvcHRpb25zID0gImV4dGVuZGVk X2wyPW9uLCI7DQo+ICvCoMKgwqDCoMKgwqDCoCAkb3B0aW9ucyAuPQ0KPiBQVkU6OlN0b3JhZ2U6 OlBsdWdpbjo6cHJlYWxsb2NhdGlvbl9jbWRfb3B0aW9uKCRzY2ZnLCAncWNvdzInKTsNCj4gK8Kg wqDCoMKgwqDCoMKgIHB1c2ggQCRjbWQsICctbycsICRvcHRpb25zOw0KPiArwqDCoMKgwqDCoMKg wqAgcnVuX2NvbW1hbmQoJGNtZCk7DQo+ICvCoMKgwqAgfTsNCj4gK8KgwqDCoCBpZiAoJEApIHsN Cj4gKyBldmFsIHsgJGNsYXNzLT5mcmVlX2ltYWdlKCRzdG9yZWlkLCAkc2NmZywgJHNuYXB2b2xu YW1lLCAwKSB9Ow0KPiArIHdhcm4gJEAgaWYgJEA7DQo+ICvCoMKgwqAgfQ0KPiArfQ0KPiArDQo+ ICsjIEFzc2VydHMgdGhhdCBhIHJvbGxiYWNrIHRvICRzbmFwIG9uICR2b2xuYW1lIGlzIHBvc3Np YmxlLg0KPiArIyBJZiBjZXJ0YWluIHNuYXBzaG90cyBhcmUgcHJldmVudGluZyB0aGUgcm9sbGJh Y2sgYW5kICRibG9ja2VycyBpcw0KPiBhbiBhcnJheQ0KPiArIyByZWZlcmVuY2UsIHRoZSBzbmFw c2hvdCBuYW1lcyBjYW4gYmUgcHVzaGVkIG9udG8gJGJsb2NrZXJzIHByaW9yDQo+IHRvIGR5aW5n Lg0KPiArc3ViIHZvbHVtZV9yb2xsYmFja19pc19wb3NzaWJsZSB7DQo+ICvCoMKgwqAgbXkgKCRj bGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwgJHNuYXAsICRibG9ja2VycykgPSBAXzsN Cj4gKw0KPiArwqDCoMKgIG15ICRwYXRoID0gJGNsYXNzLT5maWxlc3lzdGVtX3BhdGgoJHNjZmcs ICR2b2xuYW1lKTsNCj4gK8KgwqDCoCBteSAkc25hcHBhdGggPSBnZXRfc25hcF92b2xuYW1lKCRw YXRoLCAkc25hcCk7DQo+ICvCoMKgwqAgbXkgJGN1cnJlbnRwYXRoID0gJGNsYXNzLT5wYXRoKCRz Y2ZnLCAkdm9sbmFtZSwgJHN0b3JlaWQpOw0KPiArwqDCoMKgIHJldHVybiAxIGlmICRjdXJyZW50 cGF0aCBlcSAkc25hcHBhdGg7DQo+ICsNCj4gK8KgwqDCoCBkaWUgImNhbid0IHJvbGxiYWNrLCAn JHNuYXAnIGlzIG5vdCBtb3N0IHJlY2VudCBzbmFwc2hvdCBvbg0KPiAnJHZvbG5hbWUnXG4iOw0K PiArDQo+ICvCoMKgwqAgcmV0dXJuIDE7DQo+ICt9DQo+ICsNCj4gK3N1YiB2b2x1bWVfc25hcHNo b3Rfcm9sbGJhY2sgew0KPiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZv bG5hbWUsICRzbmFwKSA9IEBfOw0KPiArDQo+ICvCoMKgwqAgJGNsYXNzLT5hY3RpdmF0ZV92b2x1 bWUoJHN0b3JlaWQsICRzY2ZnLCAkdm9sbmFtZSwgdW5kZWYsIHt9KTsNCj4gK8KgwqDCoCAjc2lt cGx5IGRlbGV0ZSB0aGUgY3VycmVudCBzbmFwc2hvdCBhbmQgcmVjcmVhdGUgaXQNCj4gKw0KPiAr wqDCoMKgIG15ICRzbmFwdm9sbmFtZSA9IGdldF9zbmFwX3ZvbG5hbWUoJHZvbG5hbWUsICRzbmFw KTsNCj4gKw0KPiArwqDCoMKgICRjbGFzcy0+ZnJlZV9pbWFnZSgkc3RvcmVpZCwgJHNjZmcsICRz bmFwdm9sbmFtZSwgMCk7DQo+ICvCoMKgwqAgJGNsYXNzLT52b2x1bWVfc25hcHNob3QoJHNjZmcs ICRzdG9yZWlkLCAkdm9sbmFtZSwgJHNuYXApOw0KPiArfQ0KPiArDQo+ICtzdWIgdm9sdW1lX3Nu YXBzaG90X2RlbGV0ZSB7DQo+ICvCoMKgwqAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAk dm9sbmFtZSwgJHNuYXAsICRydW5uaW5nKSA9IEBfOw0KPiArDQo+ICvCoMKgwqAgcmV0dXJuIDEg aWYgJHJ1bm5pbmc7DQo+ICsNCj4gK8KgwqDCoCAkY2xhc3MtPmFjdGl2YXRlX3ZvbHVtZSgkc3Rv cmVpZCwgJHNjZmcsICR2b2xuYW1lLCB1bmRlZiwge30pOw0KPiArDQo+ICvCoMKgwqAgbXkgJHNu YXBzaG90cyA9ICRjbGFzcy0+dm9sdW1lX3NuYXBzaG90X2luZm8oJHNjZmcsICRzdG9yZWlkLA0K PiAkdm9sbmFtZSk7DQo+ICvCoMKgwqAgbXkgJHNuYXBwYXRoID0gJHNuYXBzaG90cy0+eyRzbmFw fS0+e2ZpbGV9Ow0KPiArwqDCoMKgIGlmKCEkc25hcHBhdGgpIHsNCj4gKyB3YXJuICIkc25hcCBh bHJlYWR5IGRlbGV0ZWQuIHNraXBcbiI7DQo+ICsgcmV0dXJuOw0KPiArwqDCoMKgIH0NCj4gKw0K PiArwqDCoMKgIG15ICRzbmFwdm9sbmFtZSA9ICRzbmFwc2hvdHMtPnskc25hcH0tPnt2b2xuYW1l fTsNCj4gK8KgwqDCoCBteSAkcGFyZW50c25hcCA9ICRzbmFwc2hvdHMtPnskc25hcH0tPntwYXJl bnR9Ow0KPiArwqDCoMKgIG15ICRjaGlsZHNuYXAgPSAkc25hcHNob3RzLT57JHNuYXB9LT57Y2hp bGR9Ow0KPiArwqDCoMKgIGRpZSAiZXJyb3I6IGNhbid0IGZpbmQgYSBwYXJlbnQgZm9yIHRoaXMg c25hcHNob3QiIGlmDQo+ICEkcGFyZW50c25hcDsNCj4gKw0KPiArwqDCoMKgIG15ICRwYXJlbnRw YXRoID0gJHNuYXBzaG90cy0+eyRwYXJlbnRzbmFwfS0+e2ZpbGV9Ow0KPiArwqDCoMKgIG15ICRw YXJlbnRmb3JtYXQgPSAkc25hcHNob3RzLT57JHBhcmVudHNuYXB9LT57J2Zvcm1hdCd9IGlmDQo+ ICRwYXJlbnRzbmFwOw0KPiArwqDCoMKgIG15ICRjaGlsZHBhdGggPSAkc25hcHNob3RzLT57JGNo aWxkc25hcH0tPntmaWxlfSBpZiAkY2hpbGRzbmFwOw0KPiArwqDCoMKgIG15ICRjaGlsZGZvcm1h dCA9ICRzbmFwc2hvdHMtPnskY2hpbGRzbmFwfS0+eydmb3JtYXQnfSBpZg0KPiAkY2hpbGRzbmFw Ow0KPiArDQo+ICvCoMKgwqAgcHJpbnQgIm1lcmdlIHNuYXBzaG90ICRzbmFwIHRvICRwYXJlbnRz bmFwXG4iOw0KPiArwqDCoMKgIG15ICRjbWQgPSBbJy91c3IvYmluL3FlbXUtaW1nJywgJ2NvbW1p dCcsICRzbmFwcGF0aF07DQo+ICvCoMKgwqAgcnVuX2NvbW1hbmQoJGNtZCk7DQo+ICsNCj4gK8Kg wqDCoCAjaWYgd2UgZGVsZXRlIGFuIGludGVybWVkaWF0ZSBzbmFwc2hvdCwgd2UgbmVlZCB0byBs aW5rIHVwcGVyDQo+IHNuYXBzaG90IHRvIGJhc2Ugc25hcHNob3QNCj4gK8KgwqDCoCBpZigkY2hp bGRwYXRoICYmIC1lICRjaGlsZHBhdGgpIHsNCj4gKyBkaWUgIm1pc3NpbmcgcGFyZW50c25hcCBz bmFwc2hvdCB0byByZWJhc2UgY2hpbGQgJGNoaWxkcGF0aFxuIiBpZg0KPiAhJHBhcmVudHBhdGg7 DQo+ICsgcHJpbnQgImxpbmsgJGNoaWxkc25hcCB0byAkcGFyZW50c25hcFxuIjsNCj4gKyAkY21k ID0gWycvdXNyL2Jpbi9xZW11LWltZycsICdyZWJhc2UnLCAnLXUnLCAnLWInLCAkcGFyZW50cGF0 aCwgJy0NCj4gRicsICRwYXJlbnRmb3JtYXQsICctZicsICRjaGlsZGZvcm1hdCwgJGNoaWxkcGF0 aF07DQo+ICsgcnVuX2NvbW1hbmQoJGNtZCk7DQo+ICvCoMKgwqAgfQ0KPiArDQo+ICvCoMKgwqAg I2RlbGV0ZSB0aGUgc25hcHNob3QNCj4gK8KgwqDCoCAkY2xhc3MtPmZyZWVfaW1hZ2UoJHN0b3Jl aWQsICRzY2ZnLCAkc25hcHZvbG5hbWUsIDApOw0KPiArIA0KPiArwqDCoMKgIHJldHVybjsNCj4g K30NCj4gKw0KPiArc3ViIHZvbHVtZV9oYXNfZmVhdHVyZSB7DQo+ICvCoMKgwqAgbXkgKCRjbGFz cywgJHNjZmcsICRmZWF0dXJlLCAkc3RvcmVpZCwgJHZvbG5hbWUsICRzbmFwbmFtZSwNCj4gJHJ1 bm5pbmcpID0gQF87DQo+ICsNCj4gK8KgwqDCoCBteSAkZmVhdHVyZXMgPSB7DQo+ICsgc25hcHNo b3QgPT4geyBjdXJyZW50ID0+IDEgfSwNCj4gKyMgY2xvbmUgPT4geyBiYXNlID0+IDEsIHNuYXAg PT4gMX0swqDCoCAjZG9uJ3QgYWxsb3cgdG8gY2xvbmUgYXMgd2UNCj4gY2FuJ3QgYWN0aXZhdGUg dGhlIGJhc2UgYmV0d2VlbiBkaWZmZXJlbnQgaG9zdCA/DQo+ICsgdGVtcGxhdGUgPT4geyBjdXJy ZW50ID0+IDF9LA0KPiArIGNvcHkgPT4geyBiYXNlID0+IDEsIGN1cnJlbnQgPT4gMSwgc25hcCA9 PiAxfSwNCj4gKyBzcGFyc2Vpbml0ID0+IHsgYmFzZSA9PiAxLCBjdXJyZW50ID0+IDF9LA0KPiAr IHJlbmFtZSA9PiB7Y3VycmVudCA9PiAxfSwNCj4gK8KgwqDCoCB9Ow0KPiArDQo+ICvCoMKgwqAg bXkgKCR2dHlwZSwgJG5hbWUsICR2bWlkLCAkYmFzZW5hbWUsICRiYXNldm1pZCwgJGlzQmFzZSkg PQ0KPiArICRjbGFzcy0+cGFyc2Vfdm9sbmFtZSgkdm9sbmFtZSk7DQo+ICsNCj4gK8KgwqDCoCBt eSAka2V5ID0gdW5kZWY7DQo+ICvCoMKgwqAgaWYoJHNuYXBuYW1lKXsNCj4gKyAka2V5ID0gJ3Nu YXAnOw0KPiArwqDCoMKgIH1lbHNlew0KPiArICRrZXkgPcKgICRpc0Jhc2UgPyAnYmFzZScgOiAn Y3VycmVudCc7DQo+ICvCoMKgwqAgfQ0KPiArwqDCoMKgIHJldHVybiAxIGlmICRmZWF0dXJlcy0+ eyRmZWF0dXJlfS0+eyRrZXl9Ow0KPiArDQo+ICvCoMKgwqAgcmV0dXJuIHVuZGVmOw0KPiArfQ0K PiArDQo+ICtzdWIgZ2V0X3NuYXBfdm9sbmFtZSB7DQo+ICvCoMKgwqAgbXkgKCRwYXRoLCAkc25h cCkgPSBAXzsNCj4gKw0KPiArwqDCoMKgIG15ICRiYXNlcGF0aCA9ICIiOw0KPiArwqDCoMKgIG15 ICRiYXNlZm9ybWF0ID0gIiI7DQo+ICvCoMKgwqAgaWYgKCRwYXRoID1+IG0vXigoLiopKCh2bXxi YXNlKS0oXGQrKS1kaXNrLShcZCspKSkoLXNuYXAtKFthLXpBLQ0KPiBaMC05XSspKT8oXC4ocmF3 fHFjb3cyKSk/Lykgew0KPiArwqDCoMKgwqDCoMKgwqAgJGJhc2VwYXRoID0gJDE7DQo+ICvCoMKg wqDCoMKgwqDCoCAkYmFzZWZvcm1hdCA9ICQ4Ow0KPiArwqDCoMKgIH0NCj4gK8KgwqDCoCBteSAk c25hcHZvbG5hbWUgPSAkYmFzZXBhdGguIi1zbmFwLSRzbmFwLnFjb3cyIjsNCj4gK8KgwqDCoCBy ZXR1cm4gJHNuYXB2b2xuYW1lOw0KPiArfQ0KPiArDQo+ICtzdWIgZ2V0X3NuYXBuYW1lX2Zyb21f cGF0aCB7DQo+ICvCoMKgwqAgbXkgKCRwYXRoKSA9IEBfOw0KPiArDQo+ICvCoMKgwqAgaWYgKCRw YXRoID1+IG0vXigoLiopKCh2bXxiYXNlKS0oXGQrKS1kaXNrLShcZCspKSkoLXNuYXAtKFthLXpB LQ0KPiBaMC05XSspKT8oXC4ocmF3fHFjb3cyKSk/Lykgew0KPiArwqDCoMKgwqDCoMKgwqAgbXkg JHNuYXBuYW1lID0gJDc7DQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gJHNuYXBuYW1lOw0KPiAr wqDCoMKgIH0NCj4gK8KgwqDCoCBkaWUgImNhbid0IHBhcnNlIHNuYXBuYW1lIGZyb20gcGF0aCAk cGF0aCI7DQo+ICt9DQo+ICsNCj4gK3N1YiBnZXRfY3VycmVudF9zbmFwc2hvdCB7DQo+ICvCoMKg wqAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSkgPSBAXzsNCj4gKw0KPiAr wqDCoMKgICNnZXQgbW9yZSByZWNlbnQgY3RpbWUgdm9sdW1lDQo+ICvCoMKgwqAgcmV0dXJuICRj bGFzcy0+bGlzdF9zbmFwc2hvdHMoJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwgMSk7DQo+ICt9 DQo+ICtteSAkY2hlY2tfdGFncyA9IHN1YiB7DQo+ICvCoMKgwqAgbXkgKCR0YWdzKSA9IEBfOw0K PiArDQo+ICvCoMKgwqAgcmV0dXJuIGRlZmluZWQoJHRhZ3MpICYmICR0YWdzID1+IC8oXnwsKXB2 ZS12bS1cZCsoLHwkKS87DQo+ICt9Ow0KPiArDQo+ICtzdWIgbGlzdF9pbWFnZXMgew0KPiArwqDC oMKgIG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJHZtaWQsICR2b2xsaXN0LCAkY2FjaGUp ID0gQF87DQo+ICsNCj4gK8KgwqDCoCBteSAkdmduYW1lID0gJHNjZmctPnt2Z25hbWV9Ow0KPiAr DQo+ICvCoMKgwqAgJGNhY2hlLT57bHZzfSA9IFBWRTo6U3RvcmFnZTo6TFZNUGx1Z2luOjpsdm1f bGlzdF92b2x1bWVzKCkgaWYNCj4gISRjYWNoZS0+e2x2c307DQo+ICsNCj4gK8KgwqDCoCBteSAk cmVzID0gW107DQo+ICsNCj4gK8KgwqDCoCBpZiAobXkgJGRhdCA9ICRjYWNoZS0+e2x2c30tPnsk dmduYW1lfSkgew0KPiArDQo+ICsgZm9yZWFjaCBteSAkdm9sbmFtZSAoa2V5cyAlJGRhdCkgew0K PiArDQo+ICsgwqDCoMKgIG5leHQgaWYgJHZvbG5hbWUgIX4gbS9eKHZtfGJhc2UpLShcZCspLS87 DQo+ICsgwqDCoMKgIG15ICRvd25lciA9ICQyOw0KPiArDQo+ICsgwqDCoMKgIG15ICRpbmZvID0g JGRhdC0+eyR2b2xuYW1lfTsNCj4gKw0KPiArIMKgwqDCoCBuZXh0IGlmICRzY2ZnLT57dGFnZ2Vk X29ubHl9ICYmICEmJGNoZWNrX3RhZ3MoJGluZm8tPnt0YWdzfSk7DQo+ICsNCj4gKyDCoMKgwqAg IyBBbGxvdyBtaXJyb3JlZCBhbmQgUkFJRCBMVnMNCj4gKyDCoMKgwqAgbmV4dCBpZiAkaW5mby0+ e2x2X3R5cGV9ICF+IG0vXlstbU1yUl0kLzsNCj4gKw0KPiArIMKgwqDCoCBteSAkdm9saWQgPSAi JHN0b3JlaWQ6JHZvbG5hbWUiOw0KPiArDQo+ICsgwqDCoMKgIGlmICgkdm9sbGlzdCkgew0KPiAr IG15ICRmb3VuZCA9IGdyZXAgeyAkXyBlcSAkdm9saWQgfSBAJHZvbGxpc3Q7DQo+ICsgbmV4dCBp ZiAhJGZvdW5kOw0KPiArIMKgwqDCoCB9IGVsc2Ugew0KPiArIG5leHQgaWYgZGVmaW5lZCgkdm1p ZCkgJiYgKCRvd25lciBuZSAkdm1pZCk7DQo+ICsgwqDCoMKgIH0NCj4gKw0KPiArIMKgwqDCoCBw dXNoIEAkcmVzLCB7DQo+ICsgdm9saWQgPT4gJHZvbGlkLCBmb3JtYXQgPT4gJ3JhdycsIHNpemUg PT4gJGluZm8tPntsdl9zaXplfSwgdm1pZCA9Pg0KPiAkb3duZXIsDQo+ICsgY3RpbWUgPT4gJGlu Zm8tPntjdGltZX0sDQo+ICsgwqDCoMKgIH07DQo+ICsgfQ0KPiArwqDCoMKgIH0NCj4gKw0KPiAr wqDCoMKgIHJldHVybiAkcmVzOw0KPiArfQ0KPiArDQo+ICtzdWIgbGlzdF9zbmFwc2hvdHMgew0K PiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICRjdXJyZW50 X29ubHkpID0gQF87DQo+ICsNCj4gK8KgwqDCoCBteSAkdmduYW1lID0gJHNjZmctPnt2Z25hbWV9 Ow0KPiArDQo+ICvCoMKgwqAgbXkgJGJhc2V2b2xuYW1lID0gJHZvbG5hbWU7DQo+ICvCoMKgwqAg bXkgJGx2cyA9IFBWRTo6U3RvcmFnZTo6TFZNUGx1Z2luOjpsdm1fbGlzdF92b2x1bWVzKCR2Z25h bWUpOw0KPiArDQo+ICvCoMKgwqAgbXkgJHZnID0gJGx2cy0+eyR2Z25hbWV9Ow0KPiArDQo+ICvC oMKgwqAgbXkgKCR2dHlwZSwgJG5hbWUsICR2bWlkLCAkYmFzZW5hbWUsICRiYXNldm1pZCwgJGlz QmFzZSwNCj4gJGZvcm1hdCkgPSAkY2xhc3MtPnBhcnNlX3ZvbG5hbWUoJHZvbG5hbWUpOw0KPiAr wqDCoMKgIG15ICRzbmFwc2hvdHMgPSAkY2xhc3MtPmxpc3RfaW1hZ2VzKCRzdG9yZWlkLCAkc2Nm ZywgJHZtaWQpOw0KPiArDQo+ICvCoMKgwqAgbXkgJGluZm8gPSB7fTsNCj4gK8KgwqDCoCBmb3Ig bXkgJHNuYXAgKEAkc25hcHNob3RzKSB7DQo+ICsgbXkgJHNuYXBfdm9saWQgPSAkc25hcC0+e3Zv bGlkfTsNCj4gKyBuZXh0IGlmICgkc25hcF92b2xpZCAhfiBtLyRiYXNldm9sbmFtZS8pOw0KPiAr DQo+ICsgbXkgJHNuYXBuYW1lID0gZ2V0X3NuYXBuYW1lX2Zyb21fcGF0aCgkc25hcF92b2xpZCk7 DQo+ICsgbXkgKHVuZGVmLCAkc25hcF92b2xuYW1lKSA9DQo+IFBWRTo6U3RvcmFnZTo6cGFyc2Vf dm9sdW1lX2lkKCRzbmFwX3ZvbGlkKTsNCj4gKyBteSAkc25hcGZpbGUgPSAkY2xhc3MtPmZpbGVz eXN0ZW1fcGF0aCgkc2NmZywgJHNuYXBfdm9sbmFtZSwNCj4gJHNuYXBuYW1lKTsNCj4gKyAkc25h cG5hbWUgPSAnYmFzZScgaWYgISRzbmFwbmFtZTsNCj4gKyAkaW5mby0+eyRzbmFwbmFtZX0tPntm aWxlfSA9ICRzbmFwZmlsZTsNCj4gKyAkaW5mby0+eyRzbmFwbmFtZX0tPnt2b2xuYW1lfSA9ICRz bmFwX3ZvbG5hbWU7DQo+ICsgJGluZm8tPnskc25hcG5hbWV9LT57dm9saWR9ID0gJHNuYXBfdm9s aWQ7DQo+ICsgJGluZm8tPnskc25hcG5hbWV9LT57Y3RpbWV9ID0gJHNuYXAtPntjdGltZX07DQo+ ICsNCj4gKyBpZiAoISRjdXJyZW50X29ubHkpIHsNCj4gKyDCoMKgwqAgbXkgKHVuZGVmLCAkZm9y bWF0LCB1bmRlZiwgJHBhcmVudGZpbGUsIHVuZGVmKSA9DQo+IFBWRTo6U3RvcmFnZTo6UGx1Z2lu OjpmaWxlX3NpemVfaW5mbygkc25hcGZpbGUpOw0KPiArIMKgwqDCoCBuZXh0IGlmICEkcGFyZW50 ZmlsZSAmJiAkc25hcG5hbWUgbmUgJ2Jhc2UnO8KgwqAgI2JhZCB1bmxpbmtlZA0KPiBzbmFzcGhv dA0KPiArDQo+ICsgwqDCoMKgIG15ICRwYXJlbnRuYW1lID0gZ2V0X3NuYXBuYW1lX2Zyb21fcGF0 aCgkcGFyZW50ZmlsZSkgaWYNCj4gJHBhcmVudGZpbGU7DQo+ICsgwqDCoMKgICRwYXJlbnRuYW1l ID0gJ2Jhc2UnIGlmICEkcGFyZW50bmFtZSAmJiAkcGFyZW50ZmlsZTsNCj4gKw0KPiArIMKgwqDC oCAkaW5mby0+eyRzbmFwbmFtZX0tPnsnZm9ybWF0J30gPSAkZm9ybWF0Ow0KPiArIMKgwqDCoCAk aW5mby0+eyRzbmFwbmFtZX0tPntwYXJlbnR9ID0gJHBhcmVudG5hbWUgaWYgJHBhcmVudG5hbWU7 DQo+ICsgwqDCoMKgICRpbmZvLT57JHBhcmVudG5hbWV9LT57Y2hpbGR9ID0gJHNuYXBuYW1lIGlm ICRwYXJlbnRuYW1lOw0KPiArIH0NCj4gK8KgwqDCoCB9DQo+ICsNCj4gK8KgwqDCoCBteSBAc25h cHNob3RzX3NvcnRlZCA9IHNvcnQgeyAkaW5mby0+eyRifXtjdGltZX0gPD0+ICRpbmZvLQ0KPiA+ eyRhfXtjdGltZX0gfSBrZXlzICUkaW5mbzsNCj4gK8KgwqDCoCBteSAkY3VycmVudF9zbmFwbmFt ZSA9ICRzbmFwc2hvdHNfc29ydGVkWzBdOw0KPiArwqDCoMKgIG15ICRjdXJyZW50X3NuYXBzaG90 ID0gJGluZm8tPnskY3VycmVudF9zbmFwbmFtZX07DQo+ICvCoMKgwqAgcmV0dXJuICRjdXJyZW50 X3NuYXBzaG90IGlmICRjdXJyZW50X29ubHk7DQo+ICsNCj4gK8KgwqDCoCAkaW5mby0+e2N1cnJl bnR9ID0geyAlJGN1cnJlbnRfc25hcHNob3QgfTsNCj4gK8KgwqDCoCByZXR1cm4gJGluZm87DQo+ ICt9DQo+ICsNCj4gK3N1YiBzbmFwc2hvdF9leGlzdCB7DQo+ICvCoMKgwqAgbXkgKCRjbGFzcywg JHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSkgPSBAXzsNCj4gKw0KPiArwqDCoMKgIG15ICRiYXNl cGF0aCA9ICRjbGFzcy0+ZmlsZXN5c3RlbV9wYXRoKCRzY2ZnLCAkdm9sbmFtZSk7DQo+ICvCoMKg wqAgbXkgJGN1cnJlbnRwYXRoID0gJGNsYXNzLT5wYXRoKCRzY2ZnLCAkdm9sbmFtZSwgJHN0b3Jl aWQpOw0KPiArDQo+ICvCoMKgwqAgZGllICJjYW4ndCByZXNpemUgaWYgc25hc3Bob3RzIGV4aXN0 IiBpZiAkY3VycmVudHBhdGggbmUNCj4gJGJhc2VwYXRoOw0KPiArDQo+ICt9DQo+ICsxOw0KPiBk aWZmIC0tZ2l0IGEvc3JjL1BWRS9TdG9yYWdlL01ha2VmaWxlIGIvc3JjL1BWRS9TdG9yYWdlL01h a2VmaWxlDQo+IGluZGV4IGQ1Y2M5NDIuLjFhZjhhYWIgMTAwNjQ0DQo+IC0tLSBhL3NyYy9QVkUv U3RvcmFnZS9NYWtlZmlsZQ0KPiArKysgYi9zcmMvUFZFL1N0b3JhZ2UvTWFrZWZpbGUNCj4gQEAg LTE0LDcgKzE0LDggQEAgU09VUkNFUz0gXA0KPiDCoCBQQlNQbHVnaW4ucG0gXA0KPiDCoCBCVFJG U1BsdWdpbi5wbSBcDQo+IMKgIEx2bVRoaW5QbHVnaW4ucG0gXA0KPiAtIEVTWGlQbHVnaW4ucG0N Cj4gKyBFU1hpUGx1Z2luLnBtIFwNCj4gKyBMdm1RY293MlBsdWdpbi5wbQ0KPiDCoA0KPiDCoC5Q SE9OWTogaW5zdGFsbA0KPiDCoGluc3RhbGw6DQo+IC0tIA0KPiAyLjM5LjINCg0KDQo= --===============7853565281544078916== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel --===============7853565281544078916==--