From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 9943F1E531 for ; Tue, 20 Jan 2026 10:02:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768903339; cv=none; b=cbzVF13pDRvywPuMfQDbLOhdxSWIsztBybAYQOZiIdwBBU9HppZ29F4vXdgYo7alSEzzBgYfxJfAN6+a29j4XNs+ul+04guQIkb7v9wU5eQsbCjp8EkUaW24RJcvFboUk3U2rltSZvFhTnroDFv493VdIxzqeJSwEBxH5DvwgXY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768903339; c=relaxed/simple; bh=Bj+zx4uodZUkRLXx6Miwu015r3Z28Sc3eUu9OJYpHzY=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: MIME-Version:Content-Type; b=to7BxcBKuJEW46gQ4tAvrpU4yzJeFB1aWw+64khUSUKfo599y/u7ctOJ98lrgsZZe1VRXbLhZ14tblCx7IPz3N75xzOaHK1+ZThrcEr/ddZyapRZz10U0uIpR510SXryJ2EQCNR3QsFSufI+TdlhxSDdY6O9WLq09T3ymV7LJMI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=TjaaqZPE; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="TjaaqZPE" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1768903335; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=Bj+zx4uodZUkRLXx6Miwu015r3Z28Sc3eUu9OJYpHzY=; b=TjaaqZPECtjXmrtITrHIEKely73f5smYSw0Zr62whndvB4fMBYzs0FFX9ZtvKsh7BRF/Bj UrwxUSMZhmRrTS9pqfNw/Fgq4U28Ks9Z/Yvz90JDoeO8xERSjkvoS6HkutpuLRtbQnDB0C r9cnLX21i5HOMMbgxDz0uuc8aGfBu6c= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-156-TukeA_0FN3S4vsY7J6UdbA-1; Tue, 20 Jan 2026 05:02:14 -0500 X-MC-Unique: TukeA_0FN3S4vsY7J6UdbA-1 X-Mimecast-MFC-AGG-ID: TukeA_0FN3S4vsY7J6UdbA_1768903332 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-430fdaba167so3514220f8f.3 for ; Tue, 20 Jan 2026 02:02:12 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768903331; x=1769508131; h=mime-version:user-agent:content-transfer-encoding:autocrypt :references:in-reply-to:date:cc:to:from:subject:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Bj+zx4uodZUkRLXx6Miwu015r3Z28Sc3eUu9OJYpHzY=; b=LMLVO+s7cg4F40kaUjkRffrOPJtg3GQCfYPuopdb1wyUo+iBSlREmHlBnn3Wr0tksH 8Lwp1rwTYEfdrLPMz5qImPxgyyOUeJkTp/JUC/VvsAoKZyEivxYtZ9koncvXKiKi1NsU HHka7zGJFQbfkcQIdyOsU2KS5eVpwTxecHmITmO8nhiGgvnTE8NnFzKRTnlCQwyC/Oc7 WIUpf6NwP4vwQw5OsPNA8tKAEeSUuN/IiaP1azkxoPEbzRfJnv9eglFLWs03juLKi+B8 TKHkylSS/La/F0dlJHm8ueTqM1p+3+d4pRD71NIgDl4qARKAQXDEo8c+c+b4rchQlT7f LfEg== X-Forwarded-Encrypted: i=1; AJvYcCUi7P6ornL0bm3Ip7ZhFm8Y1vsXPeEum5ch7vdnrM0rBNXbaMHZqBshSQm7gGWhJZXxgvC91+/71mZ0lBA1/hLlnxE=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/5S7x4Y+Xo8yl7ZBuD4jeVsHWjiXKeRMvjpBzug22SG9M1mYk 15vDC/O84oT5jIsWl1Fe+IDYH+NsTLtlFCnGqhGm+KvV91jdjV8CvHtNbIwvPNmBfvaUmmWuNq4 D9WBWdS6VrPQZ7pfC6xbyqBAOCUhlnGwGAtlf6SzJ73PWzohqkCNkoyUc4t/t7RTLchO2ZYK3PA == X-Gm-Gg: AZuq6aI+0v3py1cADV0OS+/JByi1KF07yuGAZ6bz9eizOXC5GIewZqREzIfuIDpS/PL B+f6kjxmo4Bom3GxWlRsxF8dc9BSW6xUa8Kgx/VFM0DPENaaM/+dFfhsIXhKz4M/HDAEp/Bik9q qWOsAOIWxaStkUACdgPdfJHdArSMYZyyy5Q6HqfZ4MCU3xO3IfWZ5OWVE2hyUm77pITT+lM9mZg HFMsoK4vewoqmqpG5ZTLkUuxqscaQ9T86dmSRZfaSOo/c+XFvnPeGhT6SCqzS+ANe81kXlKu2qp zwSBkP+/dI3yISNaTxecaQcUQPrgaVuh7tjqmS16p5tXqzO2srRyV4dP+vikeiK8Aq47kLkgEVt eJmWwr667J1ATmSSSaVXCsKiHxXqoAZ1WWDaAlF9kbRDs+/ljEGegn7ChYzxntRvwd1hvqP4DOu Sf/KBAORyF X-Received: by 2002:a05:6000:1ac5:b0:430:feb3:f5b4 with SMTP id ffacd0b85a97d-43569bd47dcmr14372131f8f.59.1768903329897; Tue, 20 Jan 2026 02:02:09 -0800 (PST) X-Received: by 2002:a05:6000:1ac5:b0:430:feb3:f5b4 with SMTP id ffacd0b85a97d-43569bd47dcmr14371890f8f.59.1768903327726; Tue, 20 Jan 2026 02:02:07 -0800 (PST) Received: from gmonaco-thinkpadt14gen3.rmtit.csb (185-132-178-103.hosted-by-worldstream.net. [185.132.178.103]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43569921facsm27229144f8f.5.2026.01.20.02.02.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 02:02:07 -0800 (PST) Message-ID: Subject: Re: [PATCH 03/26] rv/rvgen: replace % string formatting with f-strings From: Gabriele Monaco To: Wander Lairson Costa Cc: Steven Rostedt , Nam Cao , open list , "open list:RUNTIME VERIFICATION (RV)" Date: Tue, 20 Jan 2026 11:02:05 +0100 In-Reply-To: <20260119205601.105821-4-wander@redhat.com> References: <20260119205601.105821-1-wander@redhat.com> <20260119205601.105821-4-wander@redhat.com> Autocrypt: addr=gmonaco@redhat.com; prefer-encrypt=mutual; keydata=mDMEZuK5YxYJKwYBBAHaRw8BAQdAmJ3dM9Sz6/Hodu33Qrf8QH2bNeNbOikqYtxWFLVm0 1a0JEdhYnJpZWxlIE1vbmFjbyA8Z21vbmFjb0BrZXJuZWwub3JnPoiZBBMWCgBBFiEEysoR+AuB3R Zwp6j270psSVh4TfIFAmjKX2MCGwMFCQWjmoAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgk Q70psSVh4TfIQuAD+JulczTN6l7oJjyroySU55Fbjdvo52xiYYlMjPG7dCTsBAMFI7dSL5zg98I+8 cXY1J7kyNsY6/dcipqBM4RMaxXsOtCRHYWJyaWVsZSBNb25hY28gPGdtb25hY29AcmVkaGF0LmNvb T6InAQTFgoARAIbAwUJBaOagAULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgBYhBMrKEfgLgd0WcK eo9u9KbElYeE3yBQJoymCyAhkBAAoJEO9KbElYeE3yjX4BAJ/ETNnlHn8OjZPT77xGmal9kbT1bC1 7DfrYVISWV2Y1AP9HdAMhWNAvtCtN2S1beYjNybuK6IzWYcFfeOV+OBWRDQ== User-Agent: Evolution 3.58.2 (3.58.2-1.fc43) Precedence: bulk X-Mailing-List: linux-trace-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 8e3kc92OA7Tibnp2Sr1c3FzccFGAyO02DDAifnHyNlQ_1768903332 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 T24gTW9uLCAyMDI2LTAxLTE5IGF0IDE3OjQ1IC0wMzAwLCBXYW5kZXIgTGFpcnNvbiBDb3N0YSB3 cm90ZToKPiBSZXBsYWNlIGFsbCBpbnN0YW5jZXMgb2YgcGVyY2VudC1zdHlsZSBzdHJpbmcgZm9y bWF0dGluZyB3aXRoCj4gZi1zdHJpbmdzIGFjcm9zcyB0aGUgcnZnZW4gY29kZWJhc2UuIFRoaXMg bW9kZXJuaXplcyB0aGUgc3RyaW5nCj4gZm9ybWF0dGluZyB0byB1c2UgUHl0aG9uIDMuNisgZmVh dHVyZXMsIHByb3ZpZGluZyBjbGVhcmVyIGFuZCBtb3JlCj4gbWFpbnRhaW5hYmxlIGNvZGUgd2hp bGUgaW1wcm92aW5nIHJ1bnRpbWUgcGVyZm9ybWFuY2UuCj4gCj4gVGhlIGNvbnZlcnNpb24gaGFu ZGxlcyBhbGwgZm9ybWF0dGluZyBjYXNlcyBpbmNsdWRpbmcgc2ltcGxlIHZhcmlhYmxlCj4gc3Vi c3RpdHV0aW9uLCBtdWx0aS12YXJpYWJsZSBmb3JtYXR0aW5nLCBhbmQgY29tcGxleCBmb3JtYXQg c3BlY2lmaWVycy4KPiBEeW5hbWljIHdpZHRoIGZvcm1hdHRpbmcgaXMgY29udmVydGVkIGZyb20g IiUqcyIgdG8gInt2YXI6Pnt3aWR0aH19Igo+IHVzaW5nIHByb3BlciBhbGlnbm1lbnQgc3ludGF4 LiBUZW1wbGF0ZSBzdHJpbmdzIGZvciBnZW5lcmF0ZWQgQyBjb2RlCj4gcHJvcGVybHkgZXNjYXBl IGJyYWNlcyB1c2luZyBkb3VibGUtYnJhY2Ugc3ludGF4IHRvIHByb2R1Y2UgbGl0ZXJhbAo+IGJy YWNlcyBpbiB0aGUgb3V0cHV0Lgo+IAo+IEYtc3RyaW5ncyBwcm92aWRlIGFwcHJveGltYXRlbHkg MnggcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb3ZlciBwZXJjZW50Cj4gZm9ybWF0dGluZyBhbmQg YXJlIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaCBpbiBtb2Rlcm4gUHl0aG9uLgo+IAo+IFNpZ25l ZC1vZmYtYnk6IFdhbmRlciBMYWlyc29uIENvc3RhIDx3YW5kZXJAcmVkaGF0LmNvbT4KClNhZCB0 byBzZWUgdGhlIHByaW50Zi1zdHlsZSB0aGluZ3MgZ28sIGJ1dCBpdCdzIGZvciBiZXR0ZXIuIFRo YW5rcy4KClJldmlld2VkLWJ5OiBHYWJyaWVsZSBNb25hY28gPGdtb25hY29AcmVkaGF0LmNvbT4K Cj4gLS0tCj4gwqB0b29scy92ZXJpZmljYXRpb24vcnZnZW4vX19tYWluX18ucHnCoMKgwqDCoMKg wqDCoCB8wqAgNiArLS0KPiDCoHRvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9hdXRvbWF0 YS5wecKgIHzCoCA2ICstLQo+IMKgdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJj LnB5wqDCoMKgwqAgfCA0MCArKysrKysrLS0tLS0tLQo+IMKgdG9vbHMvdmVyaWZpY2F0aW9uL3J2 Z2VuL3J2Z2VuL2RvdDJrLnB5wqDCoMKgwqAgfCAyNiArKysrLS0tLS0KPiDCoHRvb2xzL3Zlcmlm aWNhdGlvbi9ydmdlbi9ydmdlbi9nZW5lcmF0b3IucHkgfCA1OSArKysrKysrKysrLS0tLS0tLS0t LS0KPiDCoHRvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9sdGwyay5wecKgwqDCoMKgIHwg MzAgKysrKystLS0tLS0KPiDCoDYgZmlsZXMgY2hhbmdlZCwgODIgaW5zZXJ0aW9ucygrKSwgODUg ZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9f X21haW5fXy5weQo+IGIvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL19fbWFpbl9fLnB5Cj4gaW5k ZXggNzY4YjExYTFlOTc4Yi4uZWVlY2NmODFkNGI5MCAxMDA2NDQKPiAtLS0gYS90b29scy92ZXJp ZmljYXRpb24vcnZnZW4vX19tYWluX18ucHkKPiArKysgYi90b29scy92ZXJpZmljYXRpb24vcnZn ZW4vX19tYWluX18ucHkKPiBAQCAtNDAsNyArNDAsNyBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWlu X18nOgo+IMKgwqDCoMKgIHBhcmFtcyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKPiDCoAo+IMKgwqDC oMKgIGlmIHBhcmFtcy5zdWJjbWQgPT0gIm1vbml0b3IiOgo+IC3CoMKgwqDCoMKgwqDCoCBwcmlu dCgiT3BlbmluZyBhbmQgcGFyc2luZyB0aGUgc3BlY2lmaWNhdGlvbiBmaWxlICVzIiAlIHBhcmFt cy5zcGVjKQo+ICvCoMKgwqDCoMKgwqDCoCBwcmludChmIk9wZW5pbmcgYW5kIHBhcnNpbmcgdGhl IHNwZWNpZmljYXRpb24gZmlsZSB7cGFyYW1zLnNwZWN9IikKPiDCoMKgwqDCoMKgwqDCoMKgIGlm IHBhcmFtcy5tb25pdG9yX2NsYXNzID09ICJkYSI6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG1vbml0b3IgPSBkb3QyayhwYXJhbXMuc3BlYywgcGFyYW1zLm1vbml0b3JfdHlwZSwgdmFycyhw YXJhbXMpKQo+IMKgwqDCoMKgwqDCoMKgwqAgZWxpZiBwYXJhbXMubW9uaXRvcl9jbGFzcyA9PSAi bHRsIjoKPiBAQCAtNTEsMTEgKzUxLDExIEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Cj4g wqDCoMKgwqAgZWxzZToKPiDCoMKgwqDCoMKgwqDCoMKgIG1vbml0b3IgPSBDb250YWluZXIodmFy cyhwYXJhbXMpKQo+IMKgCj4gLcKgwqDCoCBwcmludCgiV3JpdGluZyB0aGUgbW9uaXRvciBpbnRv IHRoZSBkaXJlY3RvcnkgJXMiICUgbW9uaXRvci5uYW1lKQo+ICvCoMKgwqAgcHJpbnQoZiJXcml0 aW5nIHRoZSBtb25pdG9yIGludG8gdGhlIGRpcmVjdG9yeSB7bW9uaXRvci5uYW1lfSIpCj4gwqDC oMKgwqAgbW9uaXRvci5wcmludF9maWxlcygpCj4gwqDCoMKgwqAgcHJpbnQoIkFsbW9zdCBkb25l LCBjaGVja2xpc3QiKQo+IMKgwqDCoMKgIGlmIHBhcmFtcy5zdWJjbWQgPT0gIm1vbml0b3IiOgo+ IC3CoMKgwqDCoMKgwqDCoCBwcmludCgiwqAgLSBFZGl0IHRoZSAlcy8lcy5jIHRvIGFkZCB0aGUg aW5zdHJ1bWVudGF0aW9uIiAlCj4gKG1vbml0b3IubmFtZSwgbW9uaXRvci5uYW1lKSkKPiArwqDC oMKgwqDCoMKgwqAgcHJpbnQoZiLCoCAtIEVkaXQgdGhlIHttb25pdG9yLm5hbWV9L3ttb25pdG9y Lm5hbWV9LmMgdG8gYWRkIHRoZQo+IGluc3RydW1lbnRhdGlvbiIpCj4gwqDCoMKgwqDCoMKgwqDC oCBwcmludChtb25pdG9yLmZpbGxfdHJhY2Vwb2ludF90b29sdGlwKCkpCj4gwqDCoMKgwqAgcHJp bnQobW9uaXRvci5maWxsX21ha2VmaWxlX3Rvb2x0aXAoKSkKPiDCoMKgwqDCoCBwcmludChtb25p dG9yLmZpbGxfa2NvbmZpZ190b29sdGlwKCkpCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL3ZlcmlmaWNh dGlvbi9ydmdlbi9ydmdlbi9hdXRvbWF0YS5weQo+IGIvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2Vu L3J2Z2VuL2F1dG9tYXRhLnB5Cj4gaW5kZXggOGQ4OGMzYjY1ZDAwZC4uM2UyNDMxM2EyZWFlYyAx MDA2NDQKPiAtLS0gYS90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vYXV0b21hdGEucHkK PiArKysgYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vYXV0b21hdGEucHkKPiBAQCAt MzksMTEgKzM5LDExIEBAIGNsYXNzIEF1dG9tYXRhOgo+IMKgwqDCoMKgwqDCoMKgwqAgYmFzZW5h bWUgPSBudHBhdGguYmFzZW5hbWUoc2VsZi5fX2RvdF9wYXRoKQo+IMKgwqDCoMKgwqDCoMKgwqAg aWYgbm90IGJhc2VuYW1lLmVuZHN3aXRoKCIuZG90IikgYW5kIG5vdCBiYXNlbmFtZS5lbmRzd2l0 aCgiLmd2Iik6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByaW50KCJub3QgYSBkb3QgZmls ZSIpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFpc2UgQXV0b21hdGFFcnJvcigibm90IGEg ZG90IGZpbGU6ICVzIiAlIHNlbGYuX19kb3RfcGF0aCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByYWlzZSBBdXRvbWF0YUVycm9yKGYibm90IGEgZG90IGZpbGU6IHtzZWxmLl9fZG90X3BhdGh9 IikKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgbW9kZWxfbmFtZSA9IG50cGF0aC5zcGxpdGV4dChi YXNlbmFtZSlbMF0KPiDCoMKgwqDCoMKgwqDCoMKgIGlmIG1vZGVsX25hbWUuX19sZW5fXygpID09 IDA6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFpc2UgQXV0b21hdGFFcnJvcigibm90IGEg ZG90IGZpbGU6ICVzIiAlIHNlbGYuX19kb3RfcGF0aCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByYWlzZSBBdXRvbWF0YUVycm9yKGYibm90IGEgZG90IGZpbGU6IHtzZWxmLl9fZG90X3BhdGh9 IikKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIG1vZGVsX25hbWUKPiDCoAo+IEBAIC02 Miw3ICs2Miw3IEBAIGNsYXNzIEF1dG9tYXRhOgo+IMKgwqDCoMKgwqDCoMKgwqAgbGluZSA9IGRv dF9saW5lc1tjdXJzb3JdLnNwbGl0KCkKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgaWYgKGxpbmVb MF0gIT0gImRpZ3JhcGgiKSBhbmQgKGxpbmVbMV0gIT0gInN0YXRlX2F1dG9tYXRvbiIpOgo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJhaXNlIEF1dG9tYXRhRXJyb3IoIk5vdCBhIHZhbGlkIC5k b3QgZm9ybWF0OiAlcyIgJQo+IHNlbGYuX19kb3RfcGF0aCkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByYWlzZSBBdXRvbWF0YUVycm9yKGYiTm90IGEgdmFsaWQgLmRvdCBmb3JtYXQ6Cj4ge3Nl bGYuX19kb3RfcGF0aH0iKQo+IMKgwqDCoMKgwqDCoMKgwqAgZWxzZToKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY3Vyc29yICs9IDEKPiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBkb3RfbGlu ZXMKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJjLnB5 Cj4gYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZG90MmMucHkKPiBpbmRleCAxYTE3 NzBlN2YyMGMwLi43ODk1OWQzNDVjMjZlIDEwMDY0NAo+IC0tLSBhL3Rvb2xzL3ZlcmlmaWNhdGlv bi9ydmdlbi9ydmdlbi9kb3QyYy5weQo+ICsrKyBiL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9y dmdlbi9kb3QyYy5weQo+IEBAIC0zNywxMSArMzcsMTEgQEAgY2xhc3MgRG90MmMoQXV0b21hdGEp Ogo+IMKgCj4gwqDCoMKgwqAgZGVmIF9fZ2V0X2VudW1fc3RhdGVzX2NvbnRlbnQoc2VsZik6Cj4g wqDCoMKgwqDCoMKgwqDCoCBidWZmID0gW10KPiAtwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQo Ilx0JXMlcyA9IDAsIiAlIChzZWxmLmluaXRpYWxfc3RhdGUsIHNlbGYuZW51bV9zdWZmaXgpKQo+ ICvCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChmIlx0e3NlbGYuaW5pdGlhbF9zdGF0ZX17c2Vs Zi5lbnVtX3N1ZmZpeH0gPSAwLCIpCj4gwqDCoMKgwqDCoMKgwqDCoCBmb3Igc3RhdGUgaW4gc2Vs Zi5zdGF0ZXM6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIHN0YXRlICE9IHNlbGYuaW5p dGlhbF9zdGF0ZToKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5k KCJcdCVzJXMsIiAlIChzdGF0ZSwgc2VsZi5lbnVtX3N1ZmZpeCkpCj4gLcKgwqDCoMKgwqDCoMKg IGJ1ZmYuYXBwZW5kKCJcdHN0YXRlX21heCVzIiAlIChzZWxmLmVudW1fc3VmZml4KSkKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYiXHR7c3RhdGV9e3NlbGYu ZW51bV9zdWZmaXh9LCIpCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYiXHRzdGF0ZV9t YXh7c2VsZi5lbnVtX3N1ZmZpeH0iKQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gYnVm Zgo+IMKgCj4gQEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgRG90MmMoQXV0b21hdGEpOgo+IMKgCj4g wqDCoMKgwqAgZGVmIGZvcm1hdF9zdGF0ZXNfZW51bShzZWxmKToKPiDCoMKgwqDCoMKgwqDCoMKg IGJ1ZmYgPSBbXQo+IC3CoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiZW51bSAlcyB7IiAlIHNl bGYuZW51bV9zdGF0ZXNfZGVmKQo+ICvCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChmImVudW0g e3NlbGYuZW51bV9zdGF0ZXNfZGVmfSB7eyIpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVu ZChzZWxmLmdldF9lbnVtX3N0YXRlc19zdHJpbmcoKSkKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYu YXBwZW5kKCJ9O1xuIikKPiDCoAo+IEBAIC02MiwxMiArNjIsMTIgQEAgY2xhc3MgRG90MmMoQXV0 b21hdGEpOgo+IMKgwqDCoMKgwqDCoMKgwqAgZmlyc3QgPSBUcnVlCj4gwqDCoMKgwqDCoMKgwqDC oCBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHM6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IGZpcnN0Ogo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIlx0 JXMlcyA9IDAsIiAlIChldmVudCwgc2VsZi5lbnVtX3N1ZmZpeCkpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChmIlx0e2V2ZW50fXtzZWxmLmVudW1fc3VmZml4 fSA9IDAsIikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmaXJzdCA9IEZhbHNl Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2U6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiXHQlcyVzLCIgJSAoZXZlbnQsIHNlbGYuZW51bV9zdWZm aXgpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiJcdHtl dmVudH17c2VsZi5lbnVtX3N1ZmZpeH0sIikKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCBidWZmLmFw cGVuZCgiXHRldmVudF9tYXglcyIgJSBzZWxmLmVudW1fc3VmZml4KQo+ICvCoMKgwqDCoMKgwqDC oCBidWZmLmFwcGVuZChmIlx0ZXZlbnRfbWF4e3NlbGYuZW51bV9zdWZmaXh9IikKPiDCoAo+IMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIGJ1ZmYKPiDCoAo+IEBAIC03Nyw3ICs3Nyw3IEBAIGNsYXNz IERvdDJjKEF1dG9tYXRhKToKPiDCoAo+IMKgwqDCoMKgIGRlZiBmb3JtYXRfZXZlbnRzX2VudW0o c2VsZik6Cj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmID0gW10KPiAtwqDCoMKgwqDCoMKgwqAgYnVm Zi5hcHBlbmQoImVudW0gJXMgeyIgJSBzZWxmLmVudW1fZXZlbnRzX2RlZikKPiArwqDCoMKgwqDC oMKgwqAgYnVmZi5hcHBlbmQoZiJlbnVtIHtzZWxmLmVudW1fZXZlbnRzX2RlZn0ge3siKQo+IMKg wqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoc2VsZi5nZXRfZW51bV9ldmVudHNfc3RyaW5nKCkp Cj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgifTtcbiIpCj4gwqAKPiBAQCAtOTMsMjUg KzkzLDI1IEBAIGNsYXNzIERvdDJjKEF1dG9tYXRhKToKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbWluX3R5cGUgPSAidW5zaWduZWQgaW50Igo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCBpZiBz ZWxmLnN0YXRlcy5fX2xlbl9fKCkgPiAxMDAwMDAwOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJhaXNlIEF1dG9tYXRhRXJyb3IoIlRvbyBtYW55IHN0YXRlczogJWQiICUKPiBzZWxmLnN0YXRl cy5fX2xlbl9fKCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFpc2UgQXV0b21hdGFFcnJv cihmIlRvbyBtYW55IHN0YXRlczoge3NlbGYuc3RhdGVzLl9fbGVuX18oKX0iKQo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gbWluX3R5cGUKPiDCoAo+IMKgwqDCoMKgIGRlZiBmb3JtYXRf YXV0b21hdG9uX2RlZmluaXRpb24oc2VsZik6Cj4gwqDCoMKgwqDCoMKgwqDCoCBtaW5fdHlwZSA9 IHNlbGYuZ2V0X21pbmltdW5fdHlwZSgpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmID0gW10KPiAt wqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoInN0cnVjdCAlcyB7IiAlIHNlbGYuc3RydWN0X2F1 dG9tYXRvbl9kZWYpCj4gLcKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJcdGNoYXIgKnN0YXRl X25hbWVzW3N0YXRlX21heCVzXTsiICUgKHNlbGYuZW51bV9zdWZmaXgpKQo+IC3CoMKgwqDCoMKg wqDCoCBidWZmLmFwcGVuZCgiXHRjaGFyICpldmVudF9uYW1lc1tldmVudF9tYXglc107IiAlIChz ZWxmLmVudW1fc3VmZml4KSkKPiAtwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIlx0JXMgZnVu Y3Rpb25bc3RhdGVfbWF4JXNdW2V2ZW50X21heCVzXTsiICUgKG1pbl90eXBlLAo+IHNlbGYuZW51 bV9zdWZmaXgsIHNlbGYuZW51bV9zdWZmaXgpKQo+IC3CoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVu ZCgiXHQlcyBpbml0aWFsX3N0YXRlOyIgJSBtaW5fdHlwZSkKPiAtwqDCoMKgwqDCoMKgwqAgYnVm Zi5hcHBlbmQoIlx0Ym9vbCBmaW5hbF9zdGF0ZXNbc3RhdGVfbWF4JXNdOyIgJSAoc2VsZi5lbnVt X3N1ZmZpeCkpCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYic3RydWN0IHtzZWxmLnN0 cnVjdF9hdXRvbWF0b25fZGVmfSB7eyIpCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYi XHRjaGFyICpzdGF0ZV9uYW1lc1tzdGF0ZV9tYXh7c2VsZi5lbnVtX3N1ZmZpeH1dOyIpCj4gK8Kg wqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYiXHRjaGFyICpldmVudF9uYW1lc1tldmVudF9tYXh7 c2VsZi5lbnVtX3N1ZmZpeH1dOyIpCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYiXHR7 bWluX3R5cGV9Cj4gZnVuY3Rpb25bc3RhdGVfbWF4e3NlbGYuZW51bV9zdWZmaXh9XVtldmVudF9t YXh7c2VsZi5lbnVtX3N1ZmZpeH1dOyIpCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYi XHR7bWluX3R5cGV9IGluaXRpYWxfc3RhdGU7IikKPiArwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBl bmQoZiJcdGJvb2wgZmluYWxfc3RhdGVzW3N0YXRlX21heHtzZWxmLmVudW1fc3VmZml4fV07IikK PiDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJ9O1xuIikKPiDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiBidWZmCj4gwqAKPiDCoMKgwqDCoCBkZWYgZm9ybWF0X2F1dF9pbml0X2hlYWRlcihz ZWxmKToKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYgPSBbXQo+IC3CoMKgwqDCoMKgwqDCoCBidWZm LmFwcGVuZCgic3RhdGljIGNvbnN0IHN0cnVjdCAlcyAlcyA9IHsiICUKPiAoc2VsZi5zdHJ1Y3Rf YXV0b21hdG9uX2RlZiwgc2VsZi52YXJfYXV0b21hdG9uX2RlZikpCj4gK8KgwqDCoMKgwqDCoMKg IGJ1ZmYuYXBwZW5kKGYic3RhdGljIGNvbnN0IHN0cnVjdCB7c2VsZi5zdHJ1Y3RfYXV0b21hdG9u X2RlZn0KPiB7c2VsZi52YXJfYXV0b21hdG9uX2RlZn0gPSB7eyIpCj4gwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gYnVmZgo+IMKgCj4gwqDCoMKgwqAgZGVmIF9fZ2V0X3N0cmluZ192ZWN0b3JfcGVy X2xpbmVfY29udGVudChzZWxmLCBidWZmKToKPiBAQCAtMTY5LDkgKzE2OSw5IEBAIGNsYXNzIERv dDJjKEF1dG9tYXRhKToKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG5leHRfc3RhdGUgPSBzZWxmLmZ1bmN0aW9uW3hdW3ldICsgc2VsZi5lbnVtX3N1ZmZpeAo+IMKg Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgbGluZXRvb2xvbmc6Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxpbmUgKz0gIlx0XHRcdCVzIiAl IG5leHRfc3RhdGUKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGlu ZSArPSBmIlx0XHRcdHtuZXh0X3N0YXRlfSIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBlbHNlOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaW5l ICs9ICIlKnMiICUgKG1heGxlbiwgbmV4dF9zdGF0ZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbGluZSArPSBmIntuZXh0X3N0YXRlOj57bWF4bGVufX0iCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgeSAhPSBucl9ldmVudHMtMToKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxpbmUgKz0gIixcbiIgaWYgbGlu ZXRvb2xvbmcgZWxzZSAiLCAiCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxz ZToKPiBAQCAtMjE1LDcgKzIxNSw3IEBAIGNsYXNzIERvdDJjKEF1dG9tYXRhKToKPiDCoAo+IMKg wqDCoMKgIGRlZiBmb3JtYXRfYXV0X2luaXRfZmluYWxfc3RhdGVzKHNlbGYpOgo+IMKgwqDCoMKg wqDCoMKgIGJ1ZmYgPSBbXQo+IC3CoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIlx0LmZpbmFsX3N0 YXRlcyA9IHsgJXMgfSwiICUKPiBzZWxmLmdldF9hdXRfaW5pdF9maW5hbF9zdGF0ZXMoKSkKPiAr wqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYiXHQuZmluYWxfc3RhdGVzID0ge3sge3NlbGYuZ2V0 X2F1dF9pbml0X2ZpbmFsX3N0YXRlcygpfQo+IH19LCIpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gYnVmZgo+IMKgCj4gQEAgLTIzMSw3ICsyMzEsNyBAQCBjbGFzcyBEb3QyYyhBdXRvbWF0 YSk6Cj4gwqAKPiDCoMKgwqDCoCBkZWYgZm9ybWF0X2ludmFsaWRfc3RhdGUoc2VsZik6Cj4gwqDC oMKgwqDCoMKgwqDCoCBidWZmID0gW10KPiAtwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIiNk ZWZpbmUgJXMgc3RhdGVfbWF4JXNcbiIgJSAoc2VsZi5pbnZhbGlkX3N0YXRlX3N0ciwKPiBzZWxm LmVudW1fc3VmZml4KSkKPiArwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiIjZGVmaW5lIHtz ZWxmLmludmFsaWRfc3RhdGVfc3RyfQo+IHN0YXRlX21heHtzZWxmLmVudW1fc3VmZml4fVxuIikK PiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGJ1ZmYKPiDCoAo+IGRpZmYgLS1naXQgYS90 b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZG90MmsucHkKPiBiL3Rvb2xzL3ZlcmlmaWNh dGlvbi9ydmdlbi9ydmdlbi9kb3Qyay5weQo+IGluZGV4IGVkMGEzYzkwMTEwNjkuLjFjMGQwMjM1 YmRmNjIgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJr LnB5Cj4gKysrIGIvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJrLnB5Cj4gQEAg LTE5LDcgKzE5LDcgQEAgY2xhc3MgZG90MmsoTW9uaXRvciwgRG90MmMpOgo+IMKgwqDCoMKgwqDC oMKgwqAgc2VsZi5tb25pdG9yX3R5cGUgPSBNb25pdG9yVHlwZQo+IMKgwqDCoMKgwqDCoMKgwqAg TW9uaXRvci5fX2luaXRfXyhzZWxmLCBleHRyYV9wYXJhbXMpCj4gwqDCoMKgwqDCoMKgwqDCoCBE b3QyYy5fX2luaXRfXyhzZWxmLCBmaWxlX3BhdGgsIGV4dHJhX3BhcmFtcy5nZXQoIm1vZGVsX25h bWUiKSkKPiAtwqDCoMKgwqDCoMKgwqAgc2VsZi5lbnVtX3N1ZmZpeCA9ICJfJXMiICUgc2VsZi5u YW1lCj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYuZW51bV9zdWZmaXggPSBmIl97c2VsZi5uYW1lfSIK PiDCoAo+IMKgwqDCoMKgIGRlZiBmaWxsX21vbml0b3JfdHlwZShzZWxmKToKPiDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiBzZWxmLm1vbml0b3JfdHlwZS51cHBlcigpCj4gQEAgLTI3LDcgKzI3LDcg QEAgY2xhc3MgZG90MmsoTW9uaXRvciwgRG90MmMpOgo+IMKgwqDCoMKgIGRlZiBmaWxsX3RyYWNl cG9pbnRfaGFuZGxlcnNfc2tlbChzZWxmKToKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYgPSBbXQo+ IMKgwqDCoMKgwqDCoMKgwqAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzOgo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJzdGF0aWMgdm9pZCBoYW5kbGVfJXModm9pZCAqZGF0 YSwgLyogWFhYOiBmaWxsCj4gaGVhZGVyICovKSIgJSBldmVudCkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBidWZmLmFwcGVuZChmInN0YXRpYyB2b2lkIGhhbmRsZV97ZXZlbnR9KHZvaWQgKmRh dGEsIC8qIFhYWDogZmlsbAo+IGhlYWRlciAqLykiKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBidWZmLmFwcGVuZCgieyIpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhhbmRsZSA9ICJo YW5kbGVfZXZlbnQiCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIHNlbGYuaXNfc3RhcnRf ZXZlbnQoZXZlbnQpOgo+IEBAIC0zOCw5ICszOCw5IEBAIGNsYXNzIGRvdDJrKE1vbml0b3IsIERv dDJjKToKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoYW5kbGUgPSAiaGFuZGxl X3N0YXJ0X3J1bl9ldmVudCIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgc2VsZi5tb25p dG9yX3R5cGUgPT0gInBlcl90YXNrIjoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBidWZmLmFwcGVuZCgiXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSAvKiBYWFg6IGhvdyBkbyBJ IGdldAo+IHA/ICovOyIpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5h cHBlbmQoIlx0ZGFfJXNfJXMocCwgJXMlcyk7IiAlIChoYW5kbGUsIHNlbGYubmFtZSwKPiBldmVu dCwgc2VsZi5lbnVtX3N1ZmZpeCkpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnVmZi5hcHBlbmQoZiJcdGRhX3toYW5kbGV9X3tzZWxmLm5hbWV9KHAsCj4ge2V2ZW50fXtzZWxm LmVudW1fc3VmZml4fSk7Iik7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2U6Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiXHRkYV8lc18lcyglcyVz KTsiICUgKGhhbmRsZSwgc2VsZi5uYW1lLCBldmVudCwKPiBzZWxmLmVudW1fc3VmZml4KSk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IGJ1ZmYuYXBwZW5kKGYiXHRkYV97aGFu ZGxlfV97c2VsZi5uYW1lfSh7ZXZlbnR9e3NlbGYuZW51bV9zdWZmaXh9KTsiKTsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIn0iKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBidWZmLmFwcGVuZCgiIikKPiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAnXG4nLmpvaW4o YnVmZikKPiBAQCAtNDgsMjAgKzQ4LDIwIEBAIGNsYXNzIGRvdDJrKE1vbml0b3IsIERvdDJjKToK PiDCoMKgwqDCoCBkZWYgZmlsbF90cmFjZXBvaW50X2F0dGFjaF9wcm9iZShzZWxmKToKPiDCoMKg wqDCoMKgwqDCoMKgIGJ1ZmYgPSBbXQo+IMKgwqDCoMKgwqDCoMKgwqAgZm9yIGV2ZW50IGluIHNl bGYuZXZlbnRzOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJcdHJ2X2F0 dGFjaF90cmFjZV9wcm9iZShcIiVzXCIsIC8qIFhYWDogdHJhY2Vwb2ludAo+ICovLCBoYW5kbGVf JXMpOyIgJSAoc2VsZi5uYW1lLCBldmVudCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVm Zi5hcHBlbmQoZiJcdHJ2X2F0dGFjaF90cmFjZV9wcm9iZShcIntzZWxmLm5hbWV9XCIsIC8qIFhY WDoKPiB0cmFjZXBvaW50ICovLCBoYW5kbGVfe2V2ZW50fSk7IikKPiDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiAnXG4nLmpvaW4oYnVmZikKPiDCoAo+IMKgwqDCoMKgIGRlZiBmaWxsX3RyYWNlcG9p bnRfZGV0YWNoX2hlbHBlcihzZWxmKToKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYgPSBbXQo+IMKg wqDCoMKgwqDCoMKgwqAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzOgo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJcdHJ2X2RldGFjaF90cmFjZV9wcm9iZShcIiVzXCIsIC8q IFhYWDogdHJhY2Vwb2ludAo+ICovLCBoYW5kbGVfJXMpOyIgJSAoc2VsZi5uYW1lLCBldmVudCkp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiJcdHJ2X2RldGFjaF90cmFj ZV9wcm9iZShcIntzZWxmLm5hbWV9XCIsIC8qIFhYWDoKPiB0cmFjZXBvaW50ICovLCBoYW5kbGVf e2V2ZW50fSk7IikKPiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAnXG4nLmpvaW4oYnVmZikKPiDC oAo+IMKgwqDCoMKgIGRlZiBmaWxsX21vZGVsX2hfaGVhZGVyKHNlbGYpOgo+IMKgwqDCoMKgwqDC oMKgwqAgYnVmZiA9IFtdCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8iKQo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5h cHBlbmQoIi8qIikKPiAtwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIiAqIEF1dG9tYXRpY2Fs bHkgZ2VuZXJhdGVkIEMgcmVwcmVzZW50YXRpb24gb2YgJXMKPiBhdXRvbWF0b24iICUgKHNlbGYu bmFtZSkpCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYiICogQXV0b21hdGljYWxseSBn ZW5lcmF0ZWQgQyByZXByZXNlbnRhdGlvbiBvZgo+IHtzZWxmLm5hbWV9IGF1dG9tYXRvbiIpCj4g wqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiICogRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24g YWJvdXQgdGhpcyBmb3JtYXQsIHNlZSBrZXJuZWwKPiBkb2N1bWVudGF0aW9uOiIpCj4gwqDCoMKg wqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiICrCoMKgIERvY3VtZW50YXRpb24vdHJhY2UvcnYvZGV0 ZXJtaW5pc3RpY19hdXRvbWF0YS5yc3QiKQo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQo IiAqLyIpCj4gQEAgLTczLDEwICs3MywxMCBAQCBjbGFzcyBkb3QyayhNb25pdG9yLCBEb3QyYyk6 Cj4gwqDCoMKgwqDCoMKgwqDCoCAjCj4gwqDCoMKgwqDCoMKgwqDCoCAjIEFkanVzdCB0aGUgZGVm aW5pdGlvbiBuYW1lcwo+IMKgwqDCoMKgwqDCoMKgwqAgIwo+IC3CoMKgwqDCoMKgwqDCoCBzZWxm LmVudW1fc3RhdGVzX2RlZiA9ICJzdGF0ZXNfJXMiICUgc2VsZi5uYW1lCj4gLcKgwqDCoMKgwqDC oMKgIHNlbGYuZW51bV9ldmVudHNfZGVmID0gImV2ZW50c18lcyIgJSBzZWxmLm5hbWUKPiAtwqDC oMKgwqDCoMKgwqAgc2VsZi5zdHJ1Y3RfYXV0b21hdG9uX2RlZiA9ICJhdXRvbWF0b25fJXMiICUg c2VsZi5uYW1lCj4gLcKgwqDCoMKgwqDCoMKgIHNlbGYudmFyX2F1dG9tYXRvbl9kZWYgPSAiYXV0 b21hdG9uXyVzIiAlIHNlbGYubmFtZQo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLmVudW1fc3RhdGVz X2RlZiA9IGYic3RhdGVzX3tzZWxmLm5hbWV9Igo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLmVudW1f ZXZlbnRzX2RlZiA9IGYiZXZlbnRzX3tzZWxmLm5hbWV9Igo+ICvCoMKgwqDCoMKgwqDCoCBzZWxm LnN0cnVjdF9hdXRvbWF0b25fZGVmID0gZiJhdXRvbWF0b25fe3NlbGYubmFtZX0iCj4gK8KgwqDC oMKgwqDCoMKgIHNlbGYudmFyX2F1dG9tYXRvbl9kZWYgPSBmImF1dG9tYXRvbl97c2VsZi5uYW1l fSIKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZiA9IHNlbGYuZmlsbF9tb2RlbF9oX2hlYWRl cigpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmICs9IHNlbGYuZm9ybWF0X21vZGVsKCkKPiBAQCAt MTExLDggKzExMSw4IEBAIGNsYXNzIGRvdDJrKE1vbml0b3IsIERvdDJjKToKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdHBfYXJncy5pbnNlcnQoMCwgdHBfYXJnc19pZCkKPiDCoMKgwqDCoMKg wqDCoMKgIHRwX3Byb3RvX2MgPSAiLCAiLmpvaW4oW2ErYiBmb3IgYSxiIGluIHRwX2FyZ3NdKQo+ IMKgwqDCoMKgwqDCoMKgwqAgdHBfYXJnc19jID0gIiwgIi5qb2luKFtiIGZvciBhLGIgaW4gdHBf YXJnc10pCj4gLcKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCIJwqDCoMKgwqAgVFBfUFJPVE8o JXMpLCIgJSB0cF9wcm90b19jKQo+IC3CoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiCcKgwqDC oMKgIFRQX0FSR1MoJXMpIiAlIHRwX2FyZ3NfYykKPiArwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBl bmQoZiIJwqDCoMKgwqAgVFBfUFJPVE8oe3RwX3Byb3RvX2N9KSwiKQo+ICvCoMKgwqDCoMKgwqDC oCBidWZmLmFwcGVuZChmIgnCoMKgwqDCoCBUUF9BUkdTKHt0cF9hcmdzX2N9KSIpCj4gwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gJ1xuJy5qb2luKGJ1ZmYpCj4gwqAKPiDCoMKgwqDCoCBkZWYgZmls bF9tYWluX2Moc2VsZik6Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9y dmdlbi9nZW5lcmF0b3IucHkKPiBiL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9nZW5l cmF0b3IucHkKPiBpbmRleCBhZjE2NjJlMmMyMGE3Li42ZDE2ZmI2ODc5OGE3IDEwMDY0NAo+IC0t LSBhL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9nZW5lcmF0b3IucHkKPiArKysgYi90 b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZ2VuZXJhdG9yLnB5Cj4gQEAgLTQwLDcgKzQw LDcgQEAgY2xhc3MgUlZHZW5lcmF0b3I6Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiBwbGF0Zm9ybS5z eXN0ZW0oKSAhPSAiTGludXgiOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYWlzZSBPU0Vy cm9yKCJJIGNhbiBvbmx5IHJ1biBvbiBMaW51eC4iKQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgIGtl cm5lbF9wYXRoID0gb3MucGF0aC5qb2luKCIvbGliL21vZHVsZXMvJXMvYnVpbGQiICUKPiBwbGF0 Zm9ybS5yZWxlYXNlKCksIHNlbGYucnZfZGlyKQo+ICvCoMKgwqDCoMKgwqDCoCBrZXJuZWxfcGF0 aCA9Cj4gb3MucGF0aC5qb2luKGYiL2xpYi9tb2R1bGVzL3twbGF0Zm9ybS5yZWxlYXNlKCl9L2J1 aWxkIiwgc2VsZi5ydl9kaXIpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgICMgaWYgdGhlIGN1cnJl bnQga2VybmVsIGlzIGZyb20gYSBkaXN0cm8gdGhpcyBtYXkgbm90IGJlIGEgZnVsbAo+IGtlcm5l bCB0cmVlCj4gwqDCoMKgwqDCoMKgwqDCoCAjIHZlcmlmeSB0aGF0IG9uZSBvZiB0aGUgZmlsZXMg d2UgYXJlIGdvaW5nIHRvIG1vZGlmeSBpcyBhdmFpbGFibGUKPiBAQCAtNjksMTEgKzY5LDExIEBA IGNsYXNzIFJWR2VuZXJhdG9yOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gc2Vs Zi5fcmVhZF9maWxlKHBhdGgpCj4gwqAKPiDCoMKgwqDCoCBkZWYgZmlsbF9wYXJlbnQoc2VsZik6 Cj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiAiJnJ2XyVzIiAlIHNlbGYucGFyZW50IGlmIHNlbGYu cGFyZW50IGVsc2UgIk5VTEwiCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmIiZydl97c2VsZi5w YXJlbnR9IiBpZiBzZWxmLnBhcmVudCBlbHNlICJOVUxMIgo+IMKgCj4gwqDCoMKgwqAgZGVmIGZp bGxfaW5jbHVkZV9wYXJlbnQoc2VsZik6Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiBzZWxmLnBhcmVu dDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gIiNpbmNsdWRlIDxtb25pdG9ycy8l cy8lcy5oPlxuIiAlIChzZWxmLnBhcmVudCwKPiBzZWxmLnBhcmVudCkKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gZiIjaW5jbHVkZSA8bW9uaXRvcnMve3NlbGYucGFyZW50fS97c2Vs Zi5wYXJlbnR9Lmg+XG4iCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gIiIKPiDCoAo+IMKgwqDC oMKgIGRlZiBmaWxsX3RyYWNlcG9pbnRfaGFuZGxlcnNfc2tlbChzZWxmKToKPiBAQCAtMTE5LDcg KzExOSw3IEBAIGNsYXNzIFJWR2VuZXJhdG9yOgo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZiA9IFtd Cj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiCSMgWFhYOiBhZGQgZGVwZW5kZW5jaWVz IGlmIHRoZXJlIikKPiDCoMKgwqDCoMKgwqDCoMKgIGlmIHNlbGYucGFyZW50Ogo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCIJZGVwZW5kcyBvbiBSVl9NT05fJXMiICUgc2Vs Zi5wYXJlbnQudXBwZXIoKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChm IglkZXBlbmRzIG9uIFJWX01PTl97c2VsZi5wYXJlbnQudXBwZXIoKX0iKQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiCWRlZmF1bHQgeSIpCj4gwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gJ1xuJy5qb2luKGJ1ZmYpCj4gwqAKPiBAQCAtMTQ1LDMxICsxNDUsMzAgQEAgY2xh c3MgUlZHZW5lcmF0b3I6Cj4gwqDCoMKgwqDCoMKgwqDCoCBtb25pdG9yX2NsYXNzX3R5cGUgPSBz ZWxmLmZpbGxfbW9uaXRvcl9jbGFzc190eXBlKCkKPiDCoMKgwqDCoMKgwqDCoMKgIGlmIHNlbGYu YXV0b19wYXRjaDoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5fcGF0Y2hfZmlsZSgi cnZfdHJhY2UuaCIsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAiLy8gQWRkIG5ldyBtb25pdG9ycyBiYXNlZCBvbiBDT05GSUdfJXMgaGVy ZSIgJQo+IG1vbml0b3JfY2xhc3NfdHlwZSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIjaW5jbHVkZSA8bW9uaXRvcnMvJXMvJXNfdHJh Y2UuaD4iICUgKHNlbGYubmFtZSwKPiBzZWxmLm5hbWUpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAiwqAgLSBQYXRjaGluZyAlcy9ydl90cmFjZS5oLCBkb3VibGUgY2hlY2sgdGhl IHJlc3VsdCIgJQo+IHNlbGYucnZfZGlyCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmIi8vIEFkZCBuZXcgbW9uaXRvcnMgYmFzZWQgb24K PiBDT05GSUdfe21vbml0b3JfY2xhc3NfdHlwZX0gaGVyZSIsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmIiNpbmNsdWRlCj4gPG1vbml0 b3JzL3tzZWxmLm5hbWV9L3tzZWxmLm5hbWV9X3RyYWNlLmg+IikKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gZiLCoCAtIFBhdGNoaW5nIHtzZWxmLnJ2X2Rpcn0vcnZfdHJhY2UuaCwg ZG91YmxlIGNoZWNrIHRoZQo+IHJlc3VsdCIKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4g IiIiwqAgLSBFZGl0ICVzL3J2X3RyYWNlLmg6Cj4gLUFkZCB0aGlzIGxpbmUgd2hlcmUgb3RoZXIg dHJhY2Vwb2ludHMgYXJlIGluY2x1ZGVkIGFuZCAlcyBpcyBkZWZpbmVkOgo+IC0jaW5jbHVkZSA8 bW9uaXRvcnMvJXMvJXNfdHJhY2UuaD4KPiAtIiIiICUgKHNlbGYucnZfZGlyLCBtb25pdG9yX2Ns YXNzX3R5cGUsIHNlbGYubmFtZSwgc2VsZi5uYW1lKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g ZiIiIsKgIC0gRWRpdCB7c2VsZi5ydl9kaXJ9L3J2X3RyYWNlLmg6Cj4gK0FkZCB0aGlzIGxpbmUg d2hlcmUgb3RoZXIgdHJhY2Vwb2ludHMgYXJlIGluY2x1ZGVkIGFuZCB7bW9uaXRvcl9jbGFzc190 eXBlfQo+IGlzIGRlZmluZWQ6Cj4gKyNpbmNsdWRlIDxtb25pdG9ycy97c2VsZi5uYW1lfS97c2Vs Zi5uYW1lfV90cmFjZS5oPgo+ICsiIiIKPiDCoAo+IMKgwqDCoMKgIGRlZiBfa2NvbmZpZ19tYXJr ZXIoc2VsZiwgY29udGFpbmVyPU5vbmUpIC0+IHN0cjoKPiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJu ICIjIEFkZCBuZXcgJXNtb25pdG9ycyBoZXJlIiAlIChjb250YWluZXIgKyAiICIKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIGNvbnRhaW5lciBlbHNlICIiKQo+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gZiIjIEFkZCBuZXcge2NvbnRhaW5lciArICcgJyBpZiBjb250YWlu ZXIgZWxzZSAnJ31tb25pdG9ycwo+IGhlcmUiCj4gwqAKPiDCoMKgwqDCoCBkZWYgZmlsbF9rY29u ZmlnX3Rvb2x0aXAoc2VsZik6Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiBzZWxmLmF1dG9fcGF0Y2g6 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICMgbW9uaXRvcnMgd2l0aCBhIGNvbnRhaW5lciBz aG91bGQgc3RheSB0b2dldGhlciBpbiB0aGUgS2NvbmZpZwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzZWxmLl9wYXRjaF9maWxlKCJLY29uZmlnIiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuX2tjb25maWdfbWFya2Vy KHNlbGYucGFyZW50KSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICJzb3VyY2UgXCJrZXJuZWwvdHJhY2UvcnYvbW9uaXRvcnMvJXMvS2Nv bmZpZ1wiIgo+ICUgKHNlbGYubmFtZSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu ICLCoCAtIFBhdGNoaW5nICVzL0tjb25maWcsIGRvdWJsZSBjaGVjayB0aGUgcmVzdWx0IiAlCj4g c2VsZi5ydl9kaXIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGYic291cmNlCj4gXCJrZXJuZWwvdHJhY2UvcnYvbW9uaXRvcnMve3NlbGYu bmFtZX0vS2NvbmZpZ1wiIikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZiLCoCAt IFBhdGNoaW5nIHtzZWxmLnJ2X2Rpcn0vS2NvbmZpZywgZG91YmxlIGNoZWNrIHRoZQo+IHJlc3Vs dCIKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gIiIiwqAgLSBFZGl0ICVzL0tjb25maWc6 Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmIiIiwqAgLSBFZGl0IHtzZWxmLnJ2X2Rpcn0vS2Nv bmZpZzoKPiDCoEFkZCB0aGlzIGxpbmUgd2hlcmUgb3RoZXIgbW9uaXRvcnMgYXJlIGluY2x1ZGVk Ogo+IC1zb3VyY2UgXCJrZXJuZWwvdHJhY2UvcnYvbW9uaXRvcnMvJXMvS2NvbmZpZ1wiCj4gLSIi IiAlIChzZWxmLnJ2X2Rpciwgc2VsZi5uYW1lKQo+ICtzb3VyY2UgXCJrZXJuZWwvdHJhY2UvcnYv bW9uaXRvcnMve3NlbGYubmFtZX0vS2NvbmZpZ1wiCj4gKyIiIgo+IMKgCj4gwqDCoMKgwqAgZGVm IGZpbGxfbWFrZWZpbGVfdG9vbHRpcChzZWxmKToKPiDCoMKgwqDCoMKgwqDCoMKgIG5hbWUgPSBz ZWxmLm5hbWUKPiBAQCAtMTc3LDE4ICsxNzYsMTggQEAgc291cmNlIFwia2VybmVsL3RyYWNlL3J2 L21vbml0b3JzLyVzL0tjb25maWdcIgo+IMKgwqDCoMKgwqDCoMKgwqAgaWYgc2VsZi5hdXRvX3Bh dGNoOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLl9wYXRjaF9maWxlKCJNYWtlZmls ZSIsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIiMgQWRkIG5ldyBtb25pdG9ycyBoZXJlIiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJvYmotJChDT05GSUdfUlZfTU9OXyVz KSArPSBtb25pdG9ycy8lcy8lcy5vIiAlCj4gKG5hbWVfdXAsIG5hbWUsIG5hbWUpKQo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAiwqAgLSBQYXRjaGluZyAlcy9NYWtlZmlsZSwgZG91 YmxlIGNoZWNrIHRoZSByZXN1bHQiICUKPiBzZWxmLnJ2X2Rpcgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZiJvYmotJChDT05GSUdfUlZf TU9OX3tuYW1lX3VwfSkgKz0KPiBtb25pdG9ycy97bmFtZX0ve25hbWV9Lm8iKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiBmIsKgIC0gUGF0Y2hpbmcge3NlbGYucnZfZGlyfS9NYWtl ZmlsZSwgZG91YmxlIGNoZWNrIHRoZQo+IHJlc3VsdCIKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCBy ZXR1cm4gIiIiwqAgLSBFZGl0ICVzL01ha2VmaWxlOgo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g ZiIiIsKgIC0gRWRpdCB7c2VsZi5ydl9kaXJ9L01ha2VmaWxlOgo+IMKgQWRkIHRoaXMgbGluZSB3 aGVyZSBvdGhlciBtb25pdG9ycyBhcmUgaW5jbHVkZWQ6Cj4gLW9iai0kKENPTkZJR19SVl9NT05f JXMpICs9IG1vbml0b3JzLyVzLyVzLm8KPiAtIiIiICUgKHNlbGYucnZfZGlyLCBuYW1lX3VwLCBu YW1lLCBuYW1lKQo+ICtvYmotJChDT05GSUdfUlZfTU9OX3tuYW1lX3VwfSkgKz0gbW9uaXRvcnMv e25hbWV9L3tuYW1lfS5vCj4gKyIiIgo+IMKgCj4gwqDCoMKgwqAgZGVmIGZpbGxfbW9uaXRvcl90 b29sdGlwKHNlbGYpOgo+IMKgwqDCoMKgwqDCoMKgwqAgaWYgc2VsZi5hdXRvX3BhdGNoOgo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAiwqAgLSBNb25pdG9yIGNyZWF0ZWQgaW4gJXMv bW9uaXRvcnMvJXMiICUgKHNlbGYucnZfZGlyLAo+IHNlbGYuIG5hbWUpCj4gLcKgwqDCoMKgwqDC oMKgIHJldHVybiAiwqAgLSBNb3ZlICVzLyB0byB0aGUga2VybmVsJ3MgbW9uaXRvciBkaXJlY3Rv cnkgKCVzL21vbml0b3JzKSIKPiAlIChzZWxmLm5hbWUsIHNlbGYucnZfZGlyKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiBmIsKgIC0gTW9uaXRvciBjcmVhdGVkIGluCj4ge3NlbGYu cnZfZGlyfS9tb25pdG9ycy97c2VsZi5uYW1lfSIKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGYi wqAgLSBNb3ZlIHtzZWxmLm5hbWV9LyB0byB0aGUga2VybmVsJ3MgbW9uaXRvciBkaXJlY3RvcnkK PiAoe3NlbGYucnZfZGlyfS9tb25pdG9ycykiCj4gwqAKPiDCoMKgwqDCoCBkZWYgX19jcmVhdGVf ZGlyZWN0b3J5KHNlbGYpOgo+IMKgwqDCoMKgwqDCoMKgwqAgcGF0aCA9IHNlbGYubmFtZQo+IEBA IC0yMDUsMTMgKzIwNCwxMyBAQCBvYmotJChDT05GSUdfUlZfTU9OXyVzKSArPSBtb25pdG9ycy8l cy8lcy5vCj4gwqDCoMKgwqDCoMKgwqDCoCBmaWxlLmNsb3NlKCkKPiDCoAo+IMKgwqDCoMKgIGRl ZiBfY3JlYXRlX2ZpbGUoc2VsZiwgZmlsZV9uYW1lLCBjb250ZW50KToKPiAtwqDCoMKgwqDCoMKg wqAgcGF0aCA9ICIlcy8lcyIgJSAoc2VsZi5uYW1lLCBmaWxlX25hbWUpCj4gK8KgwqDCoMKgwqDC oMKgIHBhdGggPSBmIntzZWxmLm5hbWV9L3tmaWxlX25hbWV9Igo+IMKgwqDCoMKgwqDCoMKgwqAg aWYgc2VsZi5hdXRvX3BhdGNoOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYXRoID0gb3Mu cGF0aC5qb2luKHNlbGYucnZfZGlyLCAibW9uaXRvcnMiLCBwYXRoKQo+IMKgwqDCoMKgwqDCoMKg wqAgc2VsZi5fX3dyaXRlX2ZpbGUocGF0aCwgY29udGVudCkKPiDCoAo+IMKgwqDCoMKgIGRlZiBf X2dldF9tYWluX25hbWUoc2VsZik6Cj4gLcKgwqDCoMKgwqDCoMKgIHBhdGggPSAiJXMvJXMiICUg KHNlbGYubmFtZSwgIm1haW4uYyIpCj4gK8KgwqDCoMKgwqDCoMKgIHBhdGggPSBmIntzZWxmLm5h bWV9L21haW4uYyIKPiDCoMKgwqDCoMKgwqDCoMKgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRo KToKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuICJtYWluLmMiCj4gwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gIl9fbWFpbi5jIgo+IEBAIC0yMjEsMTEgKzIyMCwxMSBAQCBvYmotJChD T05GSUdfUlZfTU9OXyVzKSArPSBtb25pdG9ycy8lcy8lcy5vCj4gwqAKPiDCoMKgwqDCoMKgwqDC oMKgIHNlbGYuX19jcmVhdGVfZGlyZWN0b3J5KCkKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCBwYXRo ID0gIiVzLmMiICUgc2VsZi5uYW1lCj4gK8KgwqDCoMKgwqDCoMKgIHBhdGggPSBmIntzZWxmLm5h bWV9LmMiCj4gwqDCoMKgwqDCoMKgwqDCoCBzZWxmLl9jcmVhdGVfZmlsZShwYXRoLCBtYWluX2Mp Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIG1vZGVsX2ggPSBzZWxmLmZpbGxfbW9kZWxfaCgpCj4g LcKgwqDCoMKgwqDCoMKgIHBhdGggPSAiJXMuaCIgJSBzZWxmLm5hbWUKPiArwqDCoMKgwqDCoMKg wqAgcGF0aCA9IGYie3NlbGYubmFtZX0uaCIKPiDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuX2NyZWF0 ZV9maWxlKHBhdGgsIG1vZGVsX2gpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIGtjb25maWcgPSBz ZWxmLmZpbGxfa2NvbmZpZygpCj4gQEAgLTI1Niw1ICsyNTUsNSBAQCBjbGFzcyBNb25pdG9yKFJW R2VuZXJhdG9yKToKPiDCoMKgwqDCoCBkZWYgcHJpbnRfZmlsZXMoc2VsZik6Cj4gwqDCoMKgwqDC oMKgwqDCoCBzdXBlcigpLnByaW50X2ZpbGVzKCkKPiDCoMKgwqDCoMKgwqDCoMKgIHRyYWNlX2gg PSBzZWxmLmZpbGxfdHJhY2VfaCgpCj4gLcKgwqDCoMKgwqDCoMKgIHBhdGggPSAiJXNfdHJhY2Uu aCIgJSBzZWxmLm5hbWUKPiArwqDCoMKgwqDCoMKgwqAgcGF0aCA9IGYie3NlbGYubmFtZX1fdHJh Y2UuaCIKPiDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuX2NyZWF0ZV9maWxlKHBhdGgsIHRyYWNlX2gp Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9sdGwyay5weQo+ IGIvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2x0bDJrLnB5Cj4gaW5kZXggYjA3NWY5 OGQ1MGM0Ny4uZmE5ZWE2ZDU5NzA5NSAxMDA2NDQKPiAtLS0gYS90b29scy92ZXJpZmljYXRpb24v cnZnZW4vcnZnZW4vbHRsMmsucHkKPiArKysgYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZn ZW4vbHRsMmsucHkKPiBAQCAtNzMsNyArNzMsNyBAQCBjbGFzcyBsdGwyayhnZW5lcmF0b3IuTW9u aXRvcik6Cj4gwqDCoMKgwqDCoMKgwqDCoCBdCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIGZvciBu b2RlIGluIHNlbGYuYmE6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVuZCgiXHRT JWksIiAlIG5vZGUuaWQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVuZChmIlx0 U3tub2RlLmlkfSwiKQo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVuZCgiXHRSVl9OVU1fQkFf U1RBVEVTIikKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoIn07IikKPiDCoMKgwqDCoMKg wqDCoMKgIGJ1Zi5hcHBlbmQoInN0YXRpY19hc3NlcnQoUlZfTlVNX0JBX1NUQVRFUyA8PSBSVl9N QVhfQkFfU1RBVEVTKTsiKQo+IEBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIGx0bDJrKGdlbmVyYXRv ci5Nb25pdG9yKToKPiDCoMKgwqDCoCBkZWYgX2ZpbGxfYXRvbXMoc2VsZik6Cj4gwqDCoMKgwqDC oMKgwqDCoCBidWYgPSBbImVudW0gbHRsX2F0b20geyJdCj4gwqDCoMKgwqDCoMKgwqDCoCBmb3Ig YSBpbiBzb3J0ZWQoc2VsZi5hdG9tcyk6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFw cGVuZCgiXHRMVExfJXMsIiAlIGEpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVu ZChmIlx0TFRMX3thfSwiKQo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVuZCgiXHRMVExfTlVN X0FUT00iKQo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVuZCgifTsiKQo+IMKgwqDCoMKgwqDC oMKgwqAgYnVmLmFwcGVuZCgic3RhdGljX2Fzc2VydChMVExfTlVNX0FUT00gPD0gUlZfTUFYX0xU TF9BVE9NKTsiKQo+IEBAIC05Niw3ICs5Niw3IEBAIGNsYXNzIGx0bDJrKGdlbmVyYXRvci5Nb25p dG9yKToKPiDCoMKgwqDCoMKgwqDCoMKgIF0KPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgZm9yIG5h bWUgaW4gc2VsZi5hdG9tc19hYmJyOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBl bmQoIlx0XHRcIiVzXCIsIiAlIG5hbWUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFw cGVuZChmIlx0XHRcIntuYW1lfVwiLCIpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5leHRl bmQoWwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiXHR9OyIsCj4gQEAgLTExMywxOSArMTEz LDE5IEBAIGNsYXNzIGx0bDJrKGdlbmVyYXRvci5Nb25pdG9yKToKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIGlzaW5zdGFuY2Uobm9kZS5vcCwgbHRsMmJhLkFuZE9wKToKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoIlx0Ym9vbCAlcyA9ICVzICYmICVzOyIgJSAobm9k ZSwgbm9kZS5vcC5sZWZ0LAo+IG5vZGUub3AucmlnaHQpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYnVmLmFwcGVuZChmIlx0Ym9vbCB7bm9kZX0gPSB7bm9kZS5vcC5sZWZ0fSAm Jgo+IHtub2RlLm9wLnJpZ2h0fTsiKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJlcXVpcmVkX3ZhbHVlcyB8PSB7c3RyKG5vZGUub3AubGVmdCksIHN0cihub2RlLm9wLnJpZ2h0 KX0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxpZiBpc2luc3RhbmNlKG5vZGUub3AsIGx0 bDJiYS5Pck9wKToKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQo Ilx0Ym9vbCAlcyA9ICVzIHx8ICVzOyIgJSAobm9kZSwgbm9kZS5vcC5sZWZ0LAo+IG5vZGUub3Au cmlnaHQpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVuZChmIlx0 Ym9vbCB7bm9kZX0gPSB7bm9kZS5vcC5sZWZ0fSB8fAo+IHtub2RlLm9wLnJpZ2h0fTsiKQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcXVpcmVkX3ZhbHVlcyB8PSB7c3RyKG5v ZGUub3AubGVmdCksIHN0cihub2RlLm9wLnJpZ2h0KX0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZWxpZiBpc2luc3RhbmNlKG5vZGUub3AsIGx0bDJiYS5Ob3RPcCk6Cj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5kKCJcdGJvb2wgJXMgPSAhJXM7IiAlIChub2Rl LCBub2RlLm9wLmNoaWxkKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5h cHBlbmQoZiJcdGJvb2wge25vZGV9ID0gIXtub2RlLm9wLmNoaWxkfTsiKQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcXVpcmVkX3ZhbHVlcy5hZGQoc3RyKG5vZGUub3AuY2hp bGQpKQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCBmb3IgYXRvbSBpbiBzZWxmLmF0b21zOgo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBhdG9tLmxvd2VyKCkgbm90IGluIHJlcXVpcmVkX3Zh bHVlczoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZQo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoIlx0Ym9vbCAlcyA9IHRlc3RfYml0KExUTF8l cywgbW9uLT5hdG9tcyk7IiAlCj4gKGF0b20ubG93ZXIoKSwgYXRvbSkpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYnVmLmFwcGVuZChmIlx0Ym9vbCB7YXRvbS5sb3dlcigpfSA9IHRlc3RfYml0 KExUTF97YXRvbX0sIG1vbi0KPiA+YXRvbXMpOyIpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1 Zi5yZXZlcnNlKCkKPiDCoAo+IEBAIC0xNTMsNyArMTUzLDcgQEAgY2xhc3MgbHRsMmsoZ2VuZXJh dG9yLk1vbml0b3IpOgo+IMKgwqDCoMKgwqDCoMKgwqAgXSkKPiDCoAo+IMKgwqDCoMKgwqDCoMKg wqAgZm9yIG5vZGUgaW4gc2VsZi5iYToKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBw ZW5kKCJcdGNhc2UgUyVpOiIgJSBub2RlLmlkKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1 Zi5hcHBlbmQoZiJcdGNhc2UgU3tub2RlLmlkfToiKQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGZvciBvIGluIHNvcnRlZChub2RlLm91dGdvaW5nKToKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBsaW5lwqDCoCA9ICJcdFx0aWYgIgo+IEBAIC0xNjMsNyArMTYzLDcg QEAgY2xhc3MgbHRsMmsoZ2VuZXJhdG9yLk1vbml0b3IpOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGxpbmVzID0gYnJlYWtfbG9uZ19saW5lKGxpbmUsIGluZGVudCkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuZXh0ZW5kKGxpbmVzKQo+IMKgCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5kKCJcdFx0XHRfX3NldF9iaXQo UyVpLCBuZXh0KTsiICUgby5pZCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1 Zi5hcHBlbmQoZiJcdFx0XHRfX3NldF9iaXQoU3tvLmlkfSwgbmV4dCk7IikKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVuZCgiXHRcdGJyZWFrOyIpCj4gwqDCoMKgwqDCoMKgwqDC oCBidWYuZXh0ZW5kKFsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIlx0fSIsCj4gQEAgLTE5 Nyw3ICsxOTcsNyBAQCBjbGFzcyBsdGwyayhnZW5lcmF0b3IuTW9uaXRvcik6Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGxpbmVzID0gYnJlYWtfbG9uZ19saW5lKGxpbmUsIGluZGVudCkKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLmV4dGVuZChsaW5lcykKPiDCoAo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoIlx0XHRfX3NldF9iaXQoUyVpLCBtb24tPnN0YXRl cyk7IiAlIG5vZGUuaWQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVuZChmIlx0 XHRfX3NldF9iaXQoU3tub2RlLmlkfSwgbW9uLT5zdGF0ZXMpOyIpCj4gwqDCoMKgwqDCoMKgwqDC oCBidWYuYXBwZW5kKCJ9IikKPiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBidWYKPiDCoAo+IEBA IC0yMDUsMjMgKzIwNSwyMSBAQCBjbGFzcyBsdGwyayhnZW5lcmF0b3IuTW9uaXRvcik6Cj4gwqDC oMKgwqDCoMKgwqDCoCBidWZmID0gW10KPiDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJz dGF0aWMgdm9pZCBoYW5kbGVfZXhhbXBsZV9ldmVudCh2b2lkICpkYXRhLCAvKiBYWFg6Cj4gZmls bCBoZWFkZXIgKi8pIikKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJ7IikKPiAtwqDC oMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIlx0bHRsX2F0b21fdXBkYXRlKHRhc2ssIExUTF8lcywg dHJ1ZS9mYWxzZSk7IiAlCj4gc2VsZi5hdG9tc1swXSkKPiArwqDCoMKgwqDCoMKgwqAgYnVmZi5h cHBlbmQoZiJcdGx0bF9hdG9tX3VwZGF0ZSh0YXNrLCBMVExfe3NlbGYuYXRvbXNbMF19LAo+IHRy dWUvZmFsc2UpOyIpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgifSIpCj4gwqDCoMKg wqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiIikKPiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAnXG4n LmpvaW4oYnVmZikKPiDCoAo+IMKgwqDCoMKgIGRlZiBmaWxsX3RyYWNlcG9pbnRfYXR0YWNoX3By b2JlKHNlbGYpOgo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gIlx0cnZfYXR0YWNoX3RyYWNlX3By b2JlKFwiJXNcIiwgLyogWFhYOiB0cmFjZXBvaW50ICovLAo+IGhhbmRsZV9leGFtcGxlX2V2ZW50 KTsiIFwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICUgc2VsZi5uYW1lCj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiBmIlx0cnZfYXR0YWNoX3RyYWNlX3Byb2JlKFwie3NlbGYubmFt ZX1cIiwgLyogWFhYOiB0cmFjZXBvaW50Cj4gKi8sIGhhbmRsZV9leGFtcGxlX2V2ZW50KTsiCj4g wqAKPiDCoMKgwqDCoCBkZWYgZmlsbF90cmFjZXBvaW50X2RldGFjaF9oZWxwZXIoc2VsZik6Cj4g LcKgwqDCoMKgwqDCoMKgIHJldHVybiAiXHRydl9kZXRhY2hfdHJhY2VfcHJvYmUoXCIlc1wiLCAv KiBYWFg6IHRyYWNlcG9pbnQgKi8sCj4gaGFuZGxlX3NhbXBsZV9ldmVudCk7IiBcCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAlIHNlbGYubmFtZQo+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gZiJcdHJ2X2RldGFjaF90cmFjZV9wcm9iZShcIntzZWxmLm5hbWV9XCIsIC8qIFhYWDog dHJhY2Vwb2ludAo+ICovLCBoYW5kbGVfc2FtcGxlX2V2ZW50KTsiCj4gwqAKPiDCoMKgwqDCoCBk ZWYgZmlsbF9hdG9tc19pbml0KHNlbGYpOgo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZiA9IFtdCj4g wqDCoMKgwqDCoMKgwqDCoCBmb3IgYSBpbiBzZWxmLmF0b21zOgo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJ1ZmYuYXBwZW5kKCJcdGx0bF9hdG9tX3NldChtb24sIExUTF8lcywgdHJ1ZS9mYWxz ZSk7IiAlIGEpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiJcdGx0bF9h dG9tX3NldChtb24sIExUTF97YX0sIHRydWUvZmFsc2UpOyIpCj4gwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gJ1xuJy5qb2luKGJ1ZmYpCj4gwqAKPiDCoMKgwqDCoCBkZWYgZmlsbF9tb2RlbF9oKHNl bGYpOgo=