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 7BCF52DECBA for ; Thu, 5 Feb 2026 11:37:19 +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=1770291439; cv=none; b=IufC5iA8yhHt1E+rd08UZ9htngentv/M41vJdrn0fG9/wtZEsTBvqpK4QbGn/iNf+wawSNQwUuzR0gK3O/aIuSpP5RnMJvtCx9tF0e4IQqL0SuF44mZJkT2HglSIKIeZ2IMb/JNWYRSxWJdHa6AgHYCoVO3YJn+O8y3WreNaDDk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770291439; c=relaxed/simple; bh=Jv+B1SWLjnpP+KfhqKvMOONVr1ickPLWHfYW3O9GnZo=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: MIME-Version:Content-Type; b=Bo19r7zFshosBg5EbQx53ci8aUkRNuIKzbjrV5aym5cEXV4wy2v9SX576NbyPd+ZSeYRuktZYAabTQcphxrsURpgRlMiDvdToWDBfyPBvRxmMATd73e3rVhG8Jt3NG7pydVs7cn8bVOg3EBViettVYpGt6tebnOOcGBWuAe8Za8= 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=UjcihXPF; 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="UjcihXPF" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1770291438; 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=Jv+B1SWLjnpP+KfhqKvMOONVr1ickPLWHfYW3O9GnZo=; b=UjcihXPF6B+gORak97N1YtHqaQuPBBINrU4CRs9F4dVofLEjGKCNcDxfm9hFHXDHs2npnA 2AySzJ9ho4kQT5UG/Oc743M3wSoUYH/LEC2LWzgAv0pgvFEqFi1t44kzbiS/YNDUgC1Ru/ zOvcQyfW8lQN6cgcRDGNnq+gdwhmjro= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-474-bA47sSu3MRSpkul3iV8aWA-1; Thu, 05 Feb 2026 06:37:17 -0500 X-MC-Unique: bA47sSu3MRSpkul3iV8aWA-1 X-Mimecast-MFC-AGG-ID: bA47sSu3MRSpkul3iV8aWA_1770291436 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-4362197d1easo724572f8f.2 for ; Thu, 05 Feb 2026 03:37:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770291436; x=1770896236; 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=Jv+B1SWLjnpP+KfhqKvMOONVr1ickPLWHfYW3O9GnZo=; b=lMQUl3JhB6OGzm0M0WKunY4pcKVITo1fizwcyGQ+CDroJSTQASr3rYcWw27xj2n4Sp tcaL6vp5cU6SRTqTtcWOTugVf3J+FOBiYIfOMSLr04X5SBC+LFAc/m43nphQ7rl8tKFD 2Fo1JZQBfJfJpZ8/1WuLJqaNQqQQiyaejFijIxnxsAfOcXYTWhpyMgA7Md8TNzMSFppX 1C95HIjfkaXbbvSTW3Yt63lsYV3kaCBG3MMvNeZq42qy2yMbp8BkcnCi6aTcvP0ngw7f EwD+EhYRYZ7SmT2hsSpJ/5YOs/kjKyK2eCNacs1Xri9gGbFw4gPTeJTZLhIqBlCrXTZU 2V4g== X-Forwarded-Encrypted: i=1; AJvYcCUXiNfxhCBpHOnRifAucY2mP3gtUMx+vx+/exoJ2ZvOM7l+TRDUvpcKPXmJd3DeeB5TY8tN/Wp35Gi72mnsYfT1HGo=@vger.kernel.org X-Gm-Message-State: AOJu0Ywm6MSBTQeOE9n2vmyzzMlh2fIYSh194tBri9WROHvw1z4qq7y2 y0yeaf3urH8A3creqkNhY7K9FptPFMyEfU1q7TgD/W6/Hr+vIHnphiT1TnaTgdAyjjLymySh9wz 8lsp5t8Nh7hCWYZBPRlwZgpCxFybvwf3OFIPnUWsBLzZYKoSfcUnJUKug5RtxDTX1zMORb9BwbA == X-Gm-Gg: AZuq6aJwIkLvu6k7Q5zLN46mSdSCQaRN4KJlK0direZ2WBX+30hhxHEFy5ACAzFYV+K 8LRkl7Nyl+hX8/mWqbCjBI4QgQJ4dzQcNaqsjvAuX/ejh6yS2jw3trOhUzoB40K42H6k6co5KdH FArWLeputZee9mUu4Os4WFJQfxOOPcF4IEklq6+kjfzO6cPNwc9T7NwmZI+LDJPHL9zuk79ihOO 9I+6qFUtQrZGbiMrOFcfvEPKjX2pxBwYXibt5TRGdrybQSPRgOhFaNFywkGtTlUCbXeaYBinppu 63X5qjP2Z+EHp3kvCKzaljOYSDz1W9KkWOuqhV+k9P5kfZW2zidupJDq7WM/gV6uxE+XM1ea44o ckEo3xgSgOffLZ7GTkenYHK8K97jXvxhw/BqzMr72LT1ZnZOspLP+GYhmOBv54bc0jdrBOAVLyk b9PhXVu+N1 X-Received: by 2002:a05:6000:438a:b0:435:96b7:e0db with SMTP id ffacd0b85a97d-43617e410b4mr8826725f8f.17.1770291435607; Thu, 05 Feb 2026 03:37:15 -0800 (PST) X-Received: by 2002:a05:6000:438a:b0:435:96b7:e0db with SMTP id ffacd0b85a97d-43617e410b4mr8826667f8f.17.1770291435029; Thu, 05 Feb 2026 03:37:15 -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-43617e3a486sm13713346f8f.16.2026.02.05.03.37.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Feb 2026 03:37:14 -0800 (PST) Message-ID: Subject: Re: [PATCH v2 03/20] rv/rvgen: replace % string formatting with f-strings From: Gabriele Monaco To: Wander Lairson Costa Cc: Steven Rostedt , Nam Cao , "open list:RUNTIME VERIFICATION (RV)" , open list Date: Thu, 05 Feb 2026 12:37:13 +0100 In-Reply-To: <20260204144914.104028-4-wander@redhat.com> References: <20260204144914.104028-1-wander@redhat.com> <20260204144914.104028-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: 1tq299t5yoyEORWVvVlh9wgUBw8_uYm2fvbc41CyTU8_1770291436 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 T24gV2VkLCAyMDI2LTAyLTA0IGF0IDExOjQyIC0wMzAwLCBXYW5kZXIgTGFpcnNvbiBDb3N0YSB3 cm90ZToKPiBSZXBsYWNlIGFsbCBpbnN0YW5jZXMgb2YgcGVyY2VudC1zdHlsZSBzdHJpbmcgZm9y bWF0dGluZyB3aXRoCj4gZi1zdHJpbmdzIGFjcm9zcyB0aGUgcnZnZW4gY29kZWJhc2UuIFRoaXMg bW9kZXJuaXplcyB0aGUgc3RyaW5nCj4gZm9ybWF0dGluZyB0byB1c2UgUHl0aG9uIDMuNisgZmVh dHVyZXMsIHByb3ZpZGluZyBjbGVhcmVyIGFuZCBtb3JlCj4gbWFpbnRhaW5hYmxlIGNvZGUgd2hp bGUgaW1wcm92aW5nIHJ1bnRpbWUgcGVyZm9ybWFuY2UuCj4gCj4gVGhlIGNvbnZlcnNpb24gaGFu ZGxlcyBhbGwgZm9ybWF0dGluZyBjYXNlcyBpbmNsdWRpbmcgc2ltcGxlIHZhcmlhYmxlCj4gc3Vi c3RpdHV0aW9uLCBtdWx0aS12YXJpYWJsZSBmb3JtYXR0aW5nLCBhbmQgY29tcGxleCBmb3JtYXQg c3BlY2lmaWVycy4KPiBEeW5hbWljIHdpZHRoIGZvcm1hdHRpbmcgaXMgY29udmVydGVkIGZyb20g IiUqcyIgdG8gInt2YXI6Pnt3aWR0aH19Igo+IHVzaW5nIHByb3BlciBhbGlnbm1lbnQgc3ludGF4 LiBUZW1wbGF0ZSBzdHJpbmdzIGZvciBnZW5lcmF0ZWQgQyBjb2RlCj4gcHJvcGVybHkgZXNjYXBl IGJyYWNlcyB1c2luZyBkb3VibGUtYnJhY2Ugc3ludGF4IHRvIHByb2R1Y2UgbGl0ZXJhbAo+IGJy YWNlcyBpbiB0aGUgb3V0cHV0Lgo+IAo+IEYtc3RyaW5ncyBwcm92aWRlIGFwcHJveGltYXRlbHkg MnggcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb3ZlciBwZXJjZW50Cj4gZm9ybWF0dGluZyBhbmQg YXJlIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaCBpbiBtb2Rlcm4gUHl0aG9uLgo+IAo+IFNpZ25l ZC1vZmYtYnk6IFdhbmRlciBMYWlyc29uIENvc3RhIDx3YW5kZXJAcmVkaGF0LmNvbT4KPiBSZXZp ZXdlZC1ieTogTmFtIENhbyA8bmFtY2FvQGxpbnV0cm9uaXguZGU+Cj4gUmV2aWV3ZWQtYnk6IEdh YnJpZWxlIE1vbmFjbyA8Z21vbmFjb0ByZWRoYXQuY29tPgo+IC0tLQoKVGhlcmUncyBhIG5ldyBv bmUgYWZ0ZXIgdGhlIHJlYmFzZSwgeW91IG1heSB3YW50IHRvIGFkZCB0aGlzIGh1bms6CgpkaWZm IC0tZ2l0IGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJrLnB5CmIvdG9vbHMv dmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJrLnB5CmluZGV4IDRiZjBkYjUyZTYyNi4uMGQy Y2RmZGYyNWViIDEwMDY0NAotLS0gYS90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZG90 MmsucHkKKysrIGIvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJrLnB5CkBAIC02 Niw3ICs2Niw3IEBAIGNsYXNzIGRvdDJrKE1vbml0b3IsIERvdDJjKToKICAgICAgICAgYnVmZi5h cHBlbmQoIiAqICAgRG9jdW1lbnRhdGlvbi90cmFjZS9ydi9kZXRlcm1pbmlzdGljX2F1dG9tYXRh LnJzdCIpCiAgICAgICAgIGJ1ZmYuYXBwZW5kKCIgKi8iKQogICAgICAgICBidWZmLmFwcGVuZCgi IikKLSAgICAgICAgYnVmZi5hcHBlbmQoIiNkZWZpbmUgTU9OSVRPUl9OQU1FICVzIiAlIChzZWxm Lm5hbWUpKQorICAgICAgICBidWZmLmFwcGVuZChmIiNkZWZpbmUgTU9OSVRPUl9OQU1FIHtzZWxm Lm5hbWV9IikKICAgICAgICAgYnVmZi5hcHBlbmQoIiIpCiAKICAgICAgICAgcmV0dXJuIGJ1ZmYK Ci0tLQoKVGhhbmtzLApHYWJyaWVsZQoKPiDCoHRvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9fX21h aW5fXy5wecKgwqDCoMKgwqDCoMKgIHzCoCA2ICstLQo+IMKgdG9vbHMvdmVyaWZpY2F0aW9uL3J2 Z2VuL3J2Z2VuL2F1dG9tYXRhLnB5wqAgfMKgIDYgKy0tCj4gwqB0b29scy92ZXJpZmljYXRpb24v cnZnZW4vcnZnZW4vZG90MmMucHnCoMKgwqDCoCB8IDM4ICsrKysrKy0tLS0tLS0KPiDCoHRvb2xz L3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9kb3Qyay5wecKgwqDCoMKgIHwgMjYgKysrKy0tLS0t Cj4gwqB0b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZ2VuZXJhdG9yLnB5IHwgNTkgKysr KysrKysrKy0tLS0tLS0tLS0tCj4gwqB0b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vbHRs MmsucHnCoMKgwqDCoCB8IDMwICsrKysrLS0tLS0tCj4gwqA2IGZpbGVzIGNoYW5nZWQsIDgxIGlu c2VydGlvbnMoKyksIDg0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS90b29scy92ZXJp ZmljYXRpb24vcnZnZW4vX19tYWluX18ucHkKPiBiL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9f X21haW5fXy5weQo+IGluZGV4IDNiZDQzOGY4NDc2ZWQuLjUwYjdkNDIyN2ZiMTYgMTAwNjQ0Cj4g LS0tIGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL19fbWFpbl9fLnB5Cj4gKysrIGIvdG9vbHMv dmVyaWZpY2F0aW9uL3J2Z2VuL19fbWFpbl9fLnB5Cj4gQEAgLTQ1LDcgKzQ1LDcgQEAgaWYgX19u YW1lX18gPT0gJ19fbWFpbl9fJzoKPiDCoAo+IMKgwqDCoMKgIHRyeToKPiDCoMKgwqDCoMKgwqDC oMKgIGlmIHBhcmFtcy5zdWJjbWQgPT0gIm1vbml0b3IiOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHByaW50KCJPcGVuaW5nIGFuZCBwYXJzaW5nIHRoZSBzcGVjaWZpY2F0aW9uIGZpbGUgJXMi ICUKPiBwYXJhbXMuc3BlYykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcmludChmIk9wZW5p bmcgYW5kIHBhcnNpbmcgdGhlIHNwZWNpZmljYXRpb24gZmlsZQo+IHtwYXJhbXMuc3BlY30iKQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBwYXJhbXMubW9uaXRvcl9jbGFzcyA9PSAiZGEi Ogo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vbml0b3IgPSBkb3QyayhwYXJh bXMuc3BlYywgcGFyYW1zLm1vbml0b3JfdHlwZSwKPiB2YXJzKHBhcmFtcykpCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGVsaWYgcGFyYW1zLm1vbml0b3JfY2xhc3MgPT0gImx0bCI6Cj4gQEAg LTU5LDExICs1OSwxMSBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgo+IMKgwqDCoMKgwqDC oMKgwqAgcHJpbnQoZiJUaGVyZSB3YXMgYW4gZXJyb3IgcHJvY2Vzc2luZyB7cGFyYW1zLnNwZWN9 OiB7ZX0iLAo+IGZpbGU9c3lzLnN0ZGVycikKPiDCoMKgwqDCoMKgwqDCoMKgIHN5cy5leGl0KDEp Cj4gwqAKPiAtwqDCoMKgIHByaW50KCJXcml0aW5nIHRoZSBtb25pdG9yIGludG8gdGhlIGRpcmVj dG9yeSAlcyIgJSBtb25pdG9yLm5hbWUpCj4gK8KgwqDCoCBwcmludChmIldyaXRpbmcgdGhlIG1v bml0b3IgaW50byB0aGUgZGlyZWN0b3J5IHttb25pdG9yLm5hbWV9IikKPiDCoMKgwqDCoCBtb25p dG9yLnByaW50X2ZpbGVzKCkKPiDCoMKgwqDCoCBwcmludCgiQWxtb3N0IGRvbmUsIGNoZWNrbGlz dCIpCj4gwqDCoMKgwqAgaWYgcGFyYW1zLnN1YmNtZCA9PSAibW9uaXRvciI6Cj4gLcKgwqDCoMKg wqDCoMKgIHByaW50KCLCoCAtIEVkaXQgdGhlICVzLyVzLmMgdG8gYWRkIHRoZSBpbnN0cnVtZW50 YXRpb24iICUKPiAobW9uaXRvci5uYW1lLCBtb25pdG9yLm5hbWUpKQo+ICvCoMKgwqDCoMKgwqDC oCBwcmludChmIsKgIC0gRWRpdCB0aGUge21vbml0b3IubmFtZX0ve21vbml0b3IubmFtZX0uYyB0 byBhZGQgdGhlCj4gaW5zdHJ1bWVudGF0aW9uIikKPiDCoMKgwqDCoMKgwqDCoMKgIHByaW50KG1v bml0b3IuZmlsbF90cmFjZXBvaW50X3Rvb2x0aXAoKSkKPiDCoMKgwqDCoCBwcmludChtb25pdG9y LmZpbGxfbWFrZWZpbGVfdG9vbHRpcCgpKQo+IMKgwqDCoMKgIHByaW50KG1vbml0b3IuZmlsbF9r Y29uZmlnX3Rvb2x0aXAoKSkKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2Vu L3J2Z2VuL2F1dG9tYXRhLnB5Cj4gYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vYXV0 b21hdGEucHkKPiBpbmRleCA2ZWNkNWNjZDhmM2QzLi5iZDhjMDQ1MjZiZTNhIDEwMDY0NAo+IC0t LSBhL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9hdXRvbWF0YS5weQo+ICsrKyBiL3Rv b2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9hdXRvbWF0YS5weQo+IEBAIC0zOSwxMSArMzks MTEgQEAgY2xhc3MgQXV0b21hdGE6Cj4gwqDCoMKgwqDCoMKgwqDCoCBiYXNlbmFtZSA9IG50cGF0 aC5iYXNlbmFtZShzZWxmLl9fZG90X3BhdGgpCj4gwqDCoMKgwqDCoMKgwqDCoCBpZiBub3QgYmFz ZW5hbWUuZW5kc3dpdGgoIi5kb3QiKSBhbmQgbm90IGJhc2VuYW1lLmVuZHN3aXRoKCIuZ3YiKToK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpbnQoIm5vdCBhIGRvdCBmaWxlIikKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByYWlzZSBBdXRvbWF0YUVycm9yKCJub3QgYSBkb3QgZmlsZTog JXMiICUgc2VsZi5fX2RvdF9wYXRoKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJhaXNlIEF1 dG9tYXRhRXJyb3IoZiJub3QgYSBkb3QgZmlsZToge3NlbGYuX19kb3RfcGF0aH0iKQo+IMKgCj4g wqDCoMKgwqDCoMKgwqDCoCBtb2RlbF9uYW1lID0gbnRwYXRoLnNwbGl0ZXh0KGJhc2VuYW1lKVsw XQo+IMKgwqDCoMKgwqDCoMKgwqAgaWYgbW9kZWxfbmFtZS5fX2xlbl9fKCkgPT0gMDoKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByYWlzZSBBdXRvbWF0YUVycm9yKCJub3QgYSBkb3QgZmlsZTog JXMiICUgc2VsZi5fX2RvdF9wYXRoKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJhaXNlIEF1 dG9tYXRhRXJyb3IoZiJub3QgYSBkb3QgZmlsZToge3NlbGYuX19kb3RfcGF0aH0iKQo+IMKgCj4g wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gbW9kZWxfbmFtZQo+IMKgCj4gQEAgLTYyLDcgKzYyLDcg QEAgY2xhc3MgQXV0b21hdGE6Cj4gwqDCoMKgwqDCoMKgwqDCoCBsaW5lID0gZG90X2xpbmVzW2N1 cnNvcl0uc3BsaXQoKQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCBpZiAobGluZVswXSAhPSAiZGln cmFwaCIpIGFuZCAobGluZVsxXSAhPSAic3RhdGVfYXV0b21hdG9uIik6Cj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmFpc2UgQXV0b21hdGFFcnJvcigiTm90IGEgdmFsaWQgLmRvdCBmb3JtYXQ6 ICVzIiAlCj4gc2VsZi5fX2RvdF9wYXRoKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJhaXNl IEF1dG9tYXRhRXJyb3IoZiJOb3QgYSB2YWxpZCAuZG90IGZvcm1hdDoKPiB7c2VsZi5fX2RvdF9w YXRofSIpCj4gwqDCoMKgwqDCoMKgwqDCoCBlbHNlOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjdXJzb3IgKz0gMQo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGRvdF9saW5lcwo+IGRpZmYg LS1naXQgYS90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZG90MmMucHkKPiBiL3Rvb2xz L3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9kb3QyYy5weQo+IGluZGV4IDc0MTQ3YWUyOTQyZjku LjZhMmFkNGZiZjc4MjQgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2 Z2VuL2RvdDJjLnB5Cj4gKysrIGIvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJj LnB5Cj4gQEAgLTI4LDE3ICsyOCwxNyBAQCBjbGFzcyBEb3QyYyhBdXRvbWF0YSk6Cj4gwqAKPiDC oMKgwqDCoCBkZWYgX19nZXRfZW51bV9zdGF0ZXNfY29udGVudChzZWxmKSAtPiBsaXN0W3N0cl06 Cj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmID0gW10KPiAtwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBl bmQoIlx0JXMlcywiICUgKHNlbGYuaW5pdGlhbF9zdGF0ZSwgc2VsZi5lbnVtX3N1ZmZpeCkpCj4g K8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYiXHR7c2VsZi5pbml0aWFsX3N0YXRlfXtzZWxm LmVudW1fc3VmZml4fSwiKQo+IMKgwqDCoMKgwqDCoMKgwqAgZm9yIHN0YXRlIGluIHNlbGYuc3Rh dGVzOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBzdGF0ZSAhPSBzZWxmLmluaXRpYWxf c3RhdGU6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiXHQl cyVzLCIgJSAoc3RhdGUsIHNlbGYuZW51bV9zdWZmaXgpKQo+IC3CoMKgwqDCoMKgwqDCoCBidWZm LmFwcGVuZCgiXHRzdGF0ZV9tYXglcywiICUgKHNlbGYuZW51bV9zdWZmaXgpKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiJcdHtzdGF0ZX17c2VsZi5lbnVt X3N1ZmZpeH0sIikKPiArwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiJcdHN0YXRlX21heHtz ZWxmLmVudW1fc3VmZml4fSwiKQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gYnVmZgo+ IMKgCj4gwqDCoMKgwqAgZGVmIGZvcm1hdF9zdGF0ZXNfZW51bShzZWxmKSAtPiBsaXN0W3N0cl06 Cj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmID0gW10KPiAtwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBl bmQoImVudW0gJXMgeyIgJSBzZWxmLmVudW1fc3RhdGVzX2RlZikKPiArwqDCoMKgwqDCoMKgwqAg YnVmZi5hcHBlbmQoZiJlbnVtIHtzZWxmLmVudW1fc3RhdGVzX2RlZn0ge3siKQo+IMKgwqDCoMKg wqDCoMKgwqAgYnVmZiArPSBzZWxmLl9fZ2V0X2VudW1fc3RhdGVzX2NvbnRlbnQoKQo+IMKgwqDC oMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIn07XG4iKQo+IMKgCj4gQEAgLTQ3LDE1ICs0NywxNSBA QCBjbGFzcyBEb3QyYyhBdXRvbWF0YSk6Cj4gwqDCoMKgwqAgZGVmIF9fZ2V0X2VudW1fZXZlbnRz X2NvbnRlbnQoc2VsZikgLT4gbGlzdFtzdHJdOgo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZiA9IFtd Cj4gwqDCoMKgwqDCoMKgwqDCoCBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHM6Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIlx0JXMlcywiICUgKGV2ZW50LCBzZWxmLmVudW1f c3VmZml4KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChmIlx0e2V2ZW50 fXtzZWxmLmVudW1fc3VmZml4fSwiKQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5k KCJcdGV2ZW50X21heCVzLCIgJSBzZWxmLmVudW1fc3VmZml4KQo+ICvCoMKgwqDCoMKgwqDCoCBi dWZmLmFwcGVuZChmIlx0ZXZlbnRfbWF4e3NlbGYuZW51bV9zdWZmaXh9LCIpCj4gwqAKPiDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBidWZmCj4gwqAKPiDCoMKgwqDCoCBkZWYgZm9ybWF0X2V2ZW50 c19lbnVtKHNlbGYpIC0+IGxpc3Rbc3RyXToKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYgPSBbXQo+ IC3CoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiZW51bSAlcyB7IiAlIHNlbGYuZW51bV9ldmVu dHNfZGVmKQo+ICvCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChmImVudW0ge3NlbGYuZW51bV9l dmVudHNfZGVmfSB7eyIpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmICs9IHNlbGYuX19nZXRfZW51 bV9ldmVudHNfY29udGVudCgpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgifTtcbiIp Cj4gwqAKPiBAQCAtNzEsMjUgKzcxLDI1IEBAIGNsYXNzIERvdDJjKEF1dG9tYXRhKToKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbWluX3R5cGUgPSAidW5zaWduZWQgaW50Igo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoCBpZiBzZWxmLnN0YXRlcy5fX2xlbl9fKCkgPiAxMDAwMDAwOgo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJhaXNlIEF1dG9tYXRhRXJyb3IoIlRvbyBtYW55IHN0YXRlczog JWQiICUKPiBzZWxmLnN0YXRlcy5fX2xlbl9fKCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmFpc2UgQXV0b21hdGFFcnJvcihmIlRvbyBtYW55IHN0YXRlczoge3NlbGYuc3RhdGVzLl9fbGVu X18oKX0iKQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gbWluX3R5cGUKPiDCoAo+IMKg wqDCoMKgIGRlZiBmb3JtYXRfYXV0b21hdG9uX2RlZmluaXRpb24oc2VsZikgLT4gbGlzdFtzdHJd Ogo+IMKgwqDCoMKgwqDCoMKgwqAgbWluX3R5cGUgPSBzZWxmLmdldF9taW5pbXVuX3R5cGUoKQo+ IMKgwqDCoMKgwqDCoMKgwqAgYnVmZiA9IFtdCj4gLcKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5k KCJzdHJ1Y3QgJXMgeyIgJSBzZWxmLnN0cnVjdF9hdXRvbWF0b25fZGVmKQo+IC3CoMKgwqDCoMKg wqDCoCBidWZmLmFwcGVuZCgiXHRjaGFyICpzdGF0ZV9uYW1lc1tzdGF0ZV9tYXglc107IiAlIChz ZWxmLmVudW1fc3VmZml4KSkKPiAtwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIlx0Y2hhciAq ZXZlbnRfbmFtZXNbZXZlbnRfbWF4JXNdOyIgJSAoc2VsZi5lbnVtX3N1ZmZpeCkpCj4gLcKgwqDC oMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJcdCVzIGZ1bmN0aW9uW3N0YXRlX21heCVzXVtldmVudF9t YXglc107IiAlIChtaW5fdHlwZSwKPiBzZWxmLmVudW1fc3VmZml4LCBzZWxmLmVudW1fc3VmZml4 KSkKPiAtwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIlx0JXMgaW5pdGlhbF9zdGF0ZTsiICUg bWluX3R5cGUpCj4gLcKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJcdGJvb2wgZmluYWxfc3Rh dGVzW3N0YXRlX21heCVzXTsiICUgKHNlbGYuZW51bV9zdWZmaXgpKQo+ICvCoMKgwqDCoMKgwqDC oCBidWZmLmFwcGVuZChmInN0cnVjdCB7c2VsZi5zdHJ1Y3RfYXV0b21hdG9uX2RlZn0ge3siKQo+ ICvCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChmIlx0Y2hhciAqc3RhdGVfbmFtZXNbc3RhdGVf bWF4e3NlbGYuZW51bV9zdWZmaXh9XTsiKQo+ICvCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChm Ilx0Y2hhciAqZXZlbnRfbmFtZXNbZXZlbnRfbWF4e3NlbGYuZW51bV9zdWZmaXh9XTsiKQo+ICvC oMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChmIlx0e21pbl90eXBlfQo+IGZ1bmN0aW9uW3N0YXRl X21heHtzZWxmLmVudW1fc3VmZml4fV1bZXZlbnRfbWF4e3NlbGYuZW51bV9zdWZmaXh9XTsiKQo+ ICvCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChmIlx0e21pbl90eXBlfSBpbml0aWFsX3N0YXRl OyIpCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYiXHRib29sIGZpbmFsX3N0YXRlc1tz dGF0ZV9tYXh7c2VsZi5lbnVtX3N1ZmZpeH1dOyIpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFw cGVuZCgifTtcbiIpCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gYnVmZgo+IMKgCj4gwqDCoMKg wqAgZGVmIGZvcm1hdF9hdXRfaW5pdF9oZWFkZXIoc2VsZikgLT4gbGlzdFtzdHJdOgo+IMKgwqDC oMKgwqDCoMKgwqAgYnVmZiA9IFtdCj4gLcKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJzdGF0 aWMgY29uc3Qgc3RydWN0ICVzICVzID0geyIgJQo+IChzZWxmLnN0cnVjdF9hdXRvbWF0b25fZGVm LCBzZWxmLnZhcl9hdXRvbWF0b25fZGVmKSkKPiArwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQo ZiJzdGF0aWMgY29uc3Qgc3RydWN0IHtzZWxmLnN0cnVjdF9hdXRvbWF0b25fZGVmfQo+IHtzZWxm LnZhcl9hdXRvbWF0b25fZGVmfSA9IHt7IikKPiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBidWZm Cj4gwqAKPiDCoMKgwqDCoCBkZWYgX19nZXRfc3RyaW5nX3ZlY3Rvcl9wZXJfbGluZV9jb250ZW50 KHNlbGYsIGVudHJpZXM6IGxpc3Rbc3RyXSkgLT4KPiBzdHI6Cj4gQEAgLTEzNCw5ICsxMzQsOSBA QCBjbGFzcyBEb3QyYyhBdXRvbWF0YSk6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBuZXh0X3N0YXRlID0gc2VsZi5mdW5jdGlvblt4XVt5XSArIHNlbGYuZW51bV9z dWZmaXgKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIGxpbmV0b29s b25nOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaW5lICs9ICJc dFx0XHQlcyIgJSBuZXh0X3N0YXRlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGxpbmUgKz0gZiJcdFx0XHR7bmV4dF9zdGF0ZX0iCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZWxzZToKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbGluZSArPSAiJSpzIiAlIChtYXhsZW4sIG5leHRfc3RhdGUpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxpbmUgKz0gZiJ7bmV4dF9zdGF0ZTo+e21heGxl bn19Igo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIHkgIT0gbnJfZXZlbnRz LTE6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaW5lICs9ICIs XG4iIGlmIGxpbmV0b29sb25nIGVsc2UgIiwgIgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGVsc2U6Cj4gQEAgLTE4MCw3ICsxODAsNyBAQCBjbGFzcyBEb3QyYyhBdXRvbWF0YSk6 Cj4gwqAKPiDCoMKgwqDCoCBkZWYgZm9ybWF0X2F1dF9pbml0X2ZpbmFsX3N0YXRlcyhzZWxmKSAt PiBsaXN0W3N0cl06Cj4gwqDCoMKgwqDCoMKgwqAgYnVmZiA9IFtdCj4gLcKgwqDCoMKgwqDCoCBi dWZmLmFwcGVuZCgiXHQuZmluYWxfc3RhdGVzID0geyAlcyB9LCIgJQo+IHNlbGYuZ2V0X2F1dF9p bml0X2ZpbmFsX3N0YXRlcygpKQo+ICvCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiJcdC5maW5h bF9zdGF0ZXMgPSB7eyB7c2VsZi5nZXRfYXV0X2luaXRfZmluYWxfc3RhdGVzKCl9Cj4gfX0sIikK PiDCoAo+IMKgwqDCoMKgwqDCoMKgIHJldHVybiBidWZmCj4gwqAKPiBAQCAtMTk2LDcgKzE5Niw3 IEBAIGNsYXNzIERvdDJjKEF1dG9tYXRhKToKPiDCoAo+IMKgwqDCoMKgIGRlZiBmb3JtYXRfaW52 YWxpZF9zdGF0ZShzZWxmKSAtPiBsaXN0W3N0cl06Cj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmID0g W10KPiAtwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIiNkZWZpbmUgJXMgc3RhdGVfbWF4JXNc biIgJSAoc2VsZi5pbnZhbGlkX3N0YXRlX3N0ciwKPiBzZWxmLmVudW1fc3VmZml4KSkKPiArwqDC oMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiIjZGVmaW5lIHtzZWxmLmludmFsaWRfc3RhdGVfc3Ry fQo+IHN0YXRlX21heHtzZWxmLmVudW1fc3VmZml4fVxuIikKPiDCoAo+IMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIGJ1ZmYKPiDCoAo+IGRpZmYgLS1naXQgYS90b29scy92ZXJpZmljYXRpb24vcnZn ZW4vcnZnZW4vZG90MmsucHkKPiBiL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9kb3Qy ay5weQo+IGluZGV4IDYxMjhmZTIzODQzMDguLjZkNDE1MWFjYzlmZTMgMTAwNjQ0Cj4gLS0tIGEv dG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJrLnB5Cj4gKysrIGIvdG9vbHMvdmVy aWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJrLnB5Cj4gQEAgLTE5LDcgKzE5LDcgQEAgY2xhc3Mg ZG90MmsoTW9uaXRvciwgRG90MmMpOgo+IMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5tb25pdG9yX3R5 cGUgPSBNb25pdG9yVHlwZQo+IMKgwqDCoMKgwqDCoMKgwqAgTW9uaXRvci5fX2luaXRfXyhzZWxm LCBleHRyYV9wYXJhbXMpCj4gwqDCoMKgwqDCoMKgwqDCoCBEb3QyYy5fX2luaXRfXyhzZWxmLCBm aWxlX3BhdGgsIGV4dHJhX3BhcmFtcy5nZXQoIm1vZGVsX25hbWUiKSkKPiAtwqDCoMKgwqDCoMKg wqAgc2VsZi5lbnVtX3N1ZmZpeCA9ICJfJXMiICUgc2VsZi5uYW1lCj4gK8KgwqDCoMKgwqDCoMKg IHNlbGYuZW51bV9zdWZmaXggPSBmIl97c2VsZi5uYW1lfSIKPiDCoAo+IMKgwqDCoMKgIGRlZiBm aWxsX21vbml0b3JfdHlwZShzZWxmKSAtPiBzdHI6Cj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g c2VsZi5tb25pdG9yX3R5cGUudXBwZXIoKQo+IEBAIC0yNyw3ICsyNyw3IEBAIGNsYXNzIGRvdDJr KE1vbml0b3IsIERvdDJjKToKPiDCoMKgwqDCoCBkZWYgZmlsbF90cmFjZXBvaW50X2hhbmRsZXJz X3NrZWwoc2VsZikgLT4gc3RyOgo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZiA9IFtdCj4gwqDCoMKg wqDCoMKgwqDCoCBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHM6Cj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYnVmZi5hcHBlbmQoInN0YXRpYyB2b2lkIGhhbmRsZV8lcyh2b2lkICpkYXRhLCAvKiBY WFg6IGZpbGwKPiBoZWFkZXIgKi8pIiAlIGV2ZW50KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJ1ZmYuYXBwZW5kKGYic3RhdGljIHZvaWQgaGFuZGxlX3tldmVudH0odm9pZCAqZGF0YSwgLyog WFhYOiBmaWxsCj4gaGVhZGVyICovKSIpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYu YXBwZW5kKCJ7IikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGFuZGxlID0gImhhbmRsZV9l dmVudCIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgc2VsZi5pc19zdGFydF9ldmVudChl dmVudCk6Cj4gQEAgLTM4LDkgKzM4LDkgQEAgY2xhc3MgZG90MmsoTW9uaXRvciwgRG90MmMpOgo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhhbmRsZSA9ICJoYW5kbGVfc3RhcnRf cnVuX2V2ZW50Igo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBzZWxmLm1vbml0b3JfdHlw ZSA9PSAicGVyX3Rhc2siOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYu YXBwZW5kKCJcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IC8qIFhYWDogaG93IGRvIEkgZ2V0Cj4g cD8gKi87Iik7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgi XHRkYV8lcyhwLCAlcyVzKTsiICUgKGhhbmRsZSwgZXZlbnQsCj4gc2VsZi5lbnVtX3N1ZmZpeCkp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiJcdGRhX3to YW5kbGV9KHAsIHtldmVudH17c2VsZi5lbnVtX3N1ZmZpeH0pOyIpOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBlbHNlOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5h cHBlbmQoIlx0ZGFfJXMoJXMlcyk7IiAlIChoYW5kbGUsIGV2ZW50LAo+IHNlbGYuZW51bV9zdWZm aXgpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYiXHRk YV97aGFuZGxlfSh7ZXZlbnR9e3NlbGYuZW51bV9zdWZmaXh9KTsiKTsKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIn0iKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi dWZmLmFwcGVuZCgiIikKPiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAnXG4nLmpvaW4oYnVmZikK PiBAQCAtNDgsMjAgKzQ4LDIwIEBAIGNsYXNzIGRvdDJrKE1vbml0b3IsIERvdDJjKToKPiDCoMKg wqDCoCBkZWYgZmlsbF90cmFjZXBvaW50X2F0dGFjaF9wcm9iZShzZWxmKSAtPiBzdHI6Cj4gwqDC oMKgwqDCoMKgwqDCoCBidWZmID0gW10KPiDCoMKgwqDCoMKgwqDCoMKgIGZvciBldmVudCBpbiBz ZWxmLmV2ZW50czoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiXHRydl9h dHRhY2hfdHJhY2VfcHJvYmUoXCIlc1wiLCAvKiBYWFg6IHRyYWNlcG9pbnQKPiAqLywgaGFuZGxl XyVzKTsiICUgKHNlbGYubmFtZSwgZXZlbnQpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1 ZmYuYXBwZW5kKGYiXHRydl9hdHRhY2hfdHJhY2VfcHJvYmUoXCJ7c2VsZi5uYW1lfVwiLCAvKiBY WFg6Cj4gdHJhY2Vwb2ludCAqLywgaGFuZGxlX3tldmVudH0pOyIpCj4gwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gJ1xuJy5qb2luKGJ1ZmYpCj4gwqAKPiDCoMKgwqDCoCBkZWYgZmlsbF90cmFjZXBv aW50X2RldGFjaF9oZWxwZXIoc2VsZikgLT4gc3RyOgo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZiA9 IFtdCj4gwqDCoMKgwqDCoMKgwqDCoCBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHM6Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIlx0cnZfZGV0YWNoX3RyYWNlX3Byb2JlKFwi JXNcIiwgLyogWFhYOiB0cmFjZXBvaW50Cj4gKi8sIGhhbmRsZV8lcyk7IiAlIChzZWxmLm5hbWUs IGV2ZW50KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChmIlx0cnZfZGV0 YWNoX3RyYWNlX3Byb2JlKFwie3NlbGYubmFtZX1cIiwgLyogWFhYOgo+IHRyYWNlcG9pbnQgKi8s IGhhbmRsZV97ZXZlbnR9KTsiKQo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuICdcbicuam9pbihi dWZmKQo+IMKgCj4gwqDCoMKgwqAgZGVmIGZpbGxfbW9kZWxfaF9oZWFkZXIoc2VsZikgLT4gbGlz dFtzdHJdOgo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZiA9IFtdCj4gwqDCoMKgwqDCoMKgwqDCoCBi dWZmLmFwcGVuZCgiLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8iKQo+IMKg wqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIi8qIikKPiAtwqDCoMKgwqDCoMKgwqAgYnVmZi5h cHBlbmQoIiAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIEMgcmVwcmVzZW50YXRpb24gb2YgJXMK PiBhdXRvbWF0b24iICUgKHNlbGYubmFtZSkpCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5k KGYiICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgQyByZXByZXNlbnRhdGlvbiBvZgo+IHtzZWxm Lm5hbWV9IGF1dG9tYXRvbiIpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiICogRm9y IGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmb3JtYXQsIHNlZSBrZXJuZWwKPiBkb2N1 bWVudGF0aW9uOiIpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiICrCoMKgIERvY3Vt ZW50YXRpb24vdHJhY2UvcnYvZGV0ZXJtaW5pc3RpY19hdXRvbWF0YS5yc3QiKQo+IMKgwqDCoMKg wqDCoMKgwqAgYnVmZi5hcHBlbmQoIiAqLyIpCj4gQEAgLTc1LDEwICs3NSwxMCBAQCBjbGFzcyBk b3QyayhNb25pdG9yLCBEb3QyYyk6Cj4gwqDCoMKgwqDCoMKgwqDCoCAjCj4gwqDCoMKgwqDCoMKg wqDCoCAjIEFkanVzdCB0aGUgZGVmaW5pdGlvbiBuYW1lcwo+IMKgwqDCoMKgwqDCoMKgwqAgIwo+ IC3CoMKgwqDCoMKgwqDCoCBzZWxmLmVudW1fc3RhdGVzX2RlZiA9ICJzdGF0ZXNfJXMiICUgc2Vs Zi5uYW1lCj4gLcKgwqDCoMKgwqDCoMKgIHNlbGYuZW51bV9ldmVudHNfZGVmID0gImV2ZW50c18l cyIgJSBzZWxmLm5hbWUKPiAtwqDCoMKgwqDCoMKgwqAgc2VsZi5zdHJ1Y3RfYXV0b21hdG9uX2Rl ZiA9ICJhdXRvbWF0b25fJXMiICUgc2VsZi5uYW1lCj4gLcKgwqDCoMKgwqDCoMKgIHNlbGYudmFy X2F1dG9tYXRvbl9kZWYgPSAiYXV0b21hdG9uXyVzIiAlIHNlbGYubmFtZQo+ICvCoMKgwqDCoMKg wqDCoCBzZWxmLmVudW1fc3RhdGVzX2RlZiA9IGYic3RhdGVzX3tzZWxmLm5hbWV9Igo+ICvCoMKg wqDCoMKgwqDCoCBzZWxmLmVudW1fZXZlbnRzX2RlZiA9IGYiZXZlbnRzX3tzZWxmLm5hbWV9Igo+ ICvCoMKgwqDCoMKgwqDCoCBzZWxmLnN0cnVjdF9hdXRvbWF0b25fZGVmID0gZiJhdXRvbWF0b25f e3NlbGYubmFtZX0iCj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYudmFyX2F1dG9tYXRvbl9kZWYgPSBm ImF1dG9tYXRvbl97c2VsZi5uYW1lfSIKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZiA9IHNl bGYuZmlsbF9tb2RlbF9oX2hlYWRlcigpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmICs9IHNlbGYu Zm9ybWF0X21vZGVsKCkKPiBAQCAtMTEzLDggKzExMyw4IEBAIGNsYXNzIGRvdDJrKE1vbml0b3Is IERvdDJjKToKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHBfYXJncy5pbnNlcnQoMCwgdHBf YXJnc19pZCkKPiDCoMKgwqDCoMKgwqDCoMKgIHRwX3Byb3RvX2MgPSAiLCAiLmpvaW4oW2ErYiBm b3IgYSxiIGluIHRwX2FyZ3NdKQo+IMKgwqDCoMKgwqDCoMKgwqAgdHBfYXJnc19jID0gIiwgIi5q b2luKFtiIGZvciBhLGIgaW4gdHBfYXJnc10pCj4gLcKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5k KCIJwqDCoMKgwqAgVFBfUFJPVE8oJXMpLCIgJSB0cF9wcm90b19jKQo+IC3CoMKgwqDCoMKgwqDC oCBidWZmLmFwcGVuZCgiCcKgwqDCoMKgIFRQX0FSR1MoJXMpIiAlIHRwX2FyZ3NfYykKPiArwqDC oMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiIJwqDCoMKgwqAgVFBfUFJPVE8oe3RwX3Byb3RvX2N9 KSwiKQo+ICvCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZChmIgnCoMKgwqDCoCBUUF9BUkdTKHt0 cF9hcmdzX2N9KSIpCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gJ1xuJy5qb2luKGJ1ZmYpCj4g wqAKPiDCoMKgwqDCoCBkZWYgZmlsbF9tYWluX2Moc2VsZikgLT4gc3RyOgo+IGRpZmYgLS1naXQg YS90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZ2VuZXJhdG9yLnB5Cj4gYi90b29scy92 ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZ2VuZXJhdG9yLnB5Cj4gaW5kZXggYWYxNjYyZTJjMjBh Ny4uNmQxNmZiNjg3OThhNyAxMDA2NDQKPiAtLS0gYS90b29scy92ZXJpZmljYXRpb24vcnZnZW4v cnZnZW4vZ2VuZXJhdG9yLnB5Cj4gKysrIGIvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2Vu L2dlbmVyYXRvci5weQo+IEBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFJWR2VuZXJhdG9yOgo+IMKg wqDCoMKgwqDCoMKgwqAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgIT0gIkxpbnV4IjoKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmFpc2UgT1NFcnJvcigiSSBjYW4gb25seSBydW4gb24gTGludXgu IikKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCBrZXJuZWxfcGF0aCA9IG9zLnBhdGguam9pbigiL2xp Yi9tb2R1bGVzLyVzL2J1aWxkIiAlCj4gcGxhdGZvcm0ucmVsZWFzZSgpLCBzZWxmLnJ2X2RpcikK PiArwqDCoMKgwqDCoMKgwqAga2VybmVsX3BhdGggPQo+IG9zLnBhdGguam9pbihmIi9saWIvbW9k dWxlcy97cGxhdGZvcm0ucmVsZWFzZSgpfS9idWlsZCIsIHNlbGYucnZfZGlyKQo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoCAjIGlmIHRoZSBjdXJyZW50IGtlcm5lbCBpcyBmcm9tIGEgZGlzdHJvIHRo aXMgbWF5IG5vdCBiZSBhIGZ1bGwKPiBrZXJuZWwgdHJlZQo+IMKgwqDCoMKgwqDCoMKgwqAgIyB2 ZXJpZnkgdGhhdCBvbmUgb2YgdGhlIGZpbGVzIHdlIGFyZSBnb2luZyB0byBtb2RpZnkgaXMgYXZh aWxhYmxlCj4gQEAgLTY5LDExICs2OSwxMSBAQCBjbGFzcyBSVkdlbmVyYXRvcjoKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHNlbGYuX3JlYWRfZmlsZShwYXRoKQo+IMKgCj4gwqDC oMKgwqAgZGVmIGZpbGxfcGFyZW50KHNlbGYpOgo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gIiZy dl8lcyIgJSBzZWxmLnBhcmVudCBpZiBzZWxmLnBhcmVudCBlbHNlICJOVUxMIgo+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gZiImcnZfe3NlbGYucGFyZW50fSIgaWYgc2VsZi5wYXJlbnQgZWxzZSAi TlVMTCIKPiDCoAo+IMKgwqDCoMKgIGRlZiBmaWxsX2luY2x1ZGVfcGFyZW50KHNlbGYpOgo+IMKg wqDCoMKgwqDCoMKgwqAgaWYgc2VsZi5wYXJlbnQ6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuICIjaW5jbHVkZSA8bW9uaXRvcnMvJXMvJXMuaD5cbiIgJSAoc2VsZi5wYXJlbnQsCj4g c2VsZi5wYXJlbnQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGYiI2luY2x1ZGUg PG1vbml0b3JzL3tzZWxmLnBhcmVudH0ve3NlbGYucGFyZW50fS5oPlxuIgo+IMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuICIiCj4gwqAKPiDCoMKgwqDCoCBkZWYgZmlsbF90cmFjZXBvaW50X2hhbmRs ZXJzX3NrZWwoc2VsZik6Cj4gQEAgLTExOSw3ICsxMTksNyBAQCBjbGFzcyBSVkdlbmVyYXRvcjoK PiDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYgPSBbXQo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBl bmQoIgkjIFhYWDogYWRkIGRlcGVuZGVuY2llcyBpZiB0aGVyZSIpCj4gwqDCoMKgwqDCoMKgwqDC oCBpZiBzZWxmLnBhcmVudDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgi CWRlcGVuZHMgb24gUlZfTU9OXyVzIiAlIHNlbGYucGFyZW50LnVwcGVyKCkpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoZiIJZGVwZW5kcyBvbiBSVl9NT05fe3NlbGYucGFy ZW50LnVwcGVyKCl9IikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIglk ZWZhdWx0IHkiKQo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuICdcbicuam9pbihidWZmKQo+IMKg Cj4gQEAgLTE0NSwzMSArMTQ1LDMwIEBAIGNsYXNzIFJWR2VuZXJhdG9yOgo+IMKgwqDCoMKgwqDC oMKgwqAgbW9uaXRvcl9jbGFzc190eXBlID0gc2VsZi5maWxsX21vbml0b3JfY2xhc3NfdHlwZSgp Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiBzZWxmLmF1dG9fcGF0Y2g6Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNlbGYuX3BhdGNoX2ZpbGUoInJ2X3RyYWNlLmgiLAo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIi8vIEFkZCBuZXcgbW9u aXRvcnMgYmFzZWQgb24gQ09ORklHXyVzIGhlcmUiICUKPiBtb25pdG9yX2NsYXNzX3R5cGUsCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAi I2luY2x1ZGUgPG1vbml0b3JzLyVzLyVzX3RyYWNlLmg+IiAlIChzZWxmLm5hbWUsCj4gc2VsZi5u YW1lKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gIsKgIC0gUGF0Y2hpbmcgJXMv cnZfdHJhY2UuaCwgZG91YmxlIGNoZWNrIHRoZSByZXN1bHQiICUKPiBzZWxmLnJ2X2Rpcgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZiIv LyBBZGQgbmV3IG1vbml0b3JzIGJhc2VkIG9uCj4gQ09ORklHX3ttb25pdG9yX2NsYXNzX3R5cGV9 IGhlcmUiLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZiIjaW5jbHVkZQo+IDxtb25pdG9ycy97c2VsZi5uYW1lfS97c2VsZi5uYW1lfV90 cmFjZS5oPiIpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGYiwqAgLSBQYXRjaGlu ZyB7c2VsZi5ydl9kaXJ9L3J2X3RyYWNlLmgsIGRvdWJsZSBjaGVjayB0aGUKPiByZXN1bHQiCj4g wqAKPiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuICIiIsKgIC0gRWRpdCAlcy9ydl90cmFjZS5oOgo+ IC1BZGQgdGhpcyBsaW5lIHdoZXJlIG90aGVyIHRyYWNlcG9pbnRzIGFyZSBpbmNsdWRlZCBhbmQg JXMgaXMgZGVmaW5lZDoKPiAtI2luY2x1ZGUgPG1vbml0b3JzLyVzLyVzX3RyYWNlLmg+Cj4gLSIi IiAlIChzZWxmLnJ2X2RpciwgbW9uaXRvcl9jbGFzc190eXBlLCBzZWxmLm5hbWUsIHNlbGYubmFt ZSkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGYiIiLCoCAtIEVkaXQge3NlbGYucnZfZGlyfS9y dl90cmFjZS5oOgo+ICtBZGQgdGhpcyBsaW5lIHdoZXJlIG90aGVyIHRyYWNlcG9pbnRzIGFyZSBp bmNsdWRlZCBhbmQge21vbml0b3JfY2xhc3NfdHlwZX0KPiBpcyBkZWZpbmVkOgo+ICsjaW5jbHVk ZSA8bW9uaXRvcnMve3NlbGYubmFtZX0ve3NlbGYubmFtZX1fdHJhY2UuaD4KPiArIiIiCj4gwqAK PiDCoMKgwqDCoCBkZWYgX2tjb25maWdfbWFya2VyKHNlbGYsIGNvbnRhaW5lcj1Ob25lKSAtPiBz dHI6Cj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiAiIyBBZGQgbmV3ICVzbW9uaXRvcnMgaGVyZSIg JSAoY29udGFpbmVyICsgIiAiCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiBjb250YWluZXIgZWxzZSAiIikKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGYiIyBBZGQgbmV3 IHtjb250YWluZXIgKyAnICcgaWYgY29udGFpbmVyIGVsc2UgJyd9bW9uaXRvcnMKPiBoZXJlIgo+ IMKgCj4gwqDCoMKgwqAgZGVmIGZpbGxfa2NvbmZpZ190b29sdGlwKHNlbGYpOgo+IMKgwqDCoMKg wqDCoMKgwqAgaWYgc2VsZi5hdXRvX3BhdGNoOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAj IG1vbml0b3JzIHdpdGggYSBjb250YWluZXIgc2hvdWxkIHN0YXkgdG9nZXRoZXIgaW4gdGhlIEtj b25maWcKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5fcGF0Y2hfZmlsZSgiS2NvbmZp ZyIsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzZWxmLl9rY29uZmlnX21hcmtlcihzZWxmLnBhcmVudCksCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAic291cmNlIFwia2Vy bmVsL3RyYWNlL3J2L21vbml0b3JzLyVzL0tjb25maWdcIiIKPiAlIChzZWxmLm5hbWUpKQo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAiwqAgLSBQYXRjaGluZyAlcy9LY29uZmlnLCBk b3VibGUgY2hlY2sgdGhlIHJlc3VsdCIgJQo+IHNlbGYucnZfZGlyCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmInNvdXJjZQo+IFwia2Vy bmVsL3RyYWNlL3J2L21vbml0b3JzL3tzZWxmLm5hbWV9L0tjb25maWdcIiIpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIGYiwqAgLSBQYXRjaGluZyB7c2VsZi5ydl9kaXJ9L0tjb25m aWcsIGRvdWJsZSBjaGVjayB0aGUKPiByZXN1bHQiCj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAgcmV0 dXJuICIiIsKgIC0gRWRpdCAlcy9LY29uZmlnOgo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZiIi IsKgIC0gRWRpdCB7c2VsZi5ydl9kaXJ9L0tjb25maWc6Cj4gwqBBZGQgdGhpcyBsaW5lIHdoZXJl IG90aGVyIG1vbml0b3JzIGFyZSBpbmNsdWRlZDoKPiAtc291cmNlIFwia2VybmVsL3RyYWNlL3J2 L21vbml0b3JzLyVzL0tjb25maWdcIgo+IC0iIiIgJSAoc2VsZi5ydl9kaXIsIHNlbGYubmFtZSkK PiArc291cmNlIFwia2VybmVsL3RyYWNlL3J2L21vbml0b3JzL3tzZWxmLm5hbWV9L0tjb25maWdc Igo+ICsiIiIKPiDCoAo+IMKgwqDCoMKgIGRlZiBmaWxsX21ha2VmaWxlX3Rvb2x0aXAoc2VsZik6 Cj4gwqDCoMKgwqDCoMKgwqDCoCBuYW1lID0gc2VsZi5uYW1lCj4gQEAgLTE3NywxOCArMTc2LDE4 IEBAIHNvdXJjZSBcImtlcm5lbC90cmFjZS9ydi9tb25pdG9ycy8lcy9LY29uZmlnXCIKPiDCoMKg wqDCoMKgwqDCoMKgIGlmIHNlbGYuYXV0b19wYXRjaDoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc2VsZi5fcGF0Y2hfZmlsZSgiTWFrZWZpbGUiLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIjIEFkZCBuZXcgbW9uaXRvcnMgaGVy ZSIsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAib2JqLSQoQ09ORklHX1JWX01PTl8lcykgKz0gbW9uaXRvcnMvJXMvJXMubyIgJQo+IChu YW1lX3VwLCBuYW1lLCBuYW1lKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gIsKg IC0gUGF0Y2hpbmcgJXMvTWFrZWZpbGUsIGRvdWJsZSBjaGVjayB0aGUgcmVzdWx0IiAlCj4gc2Vs Zi5ydl9kaXIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGYib2JqLSQoQ09ORklHX1JWX01PTl97bmFtZV91cH0pICs9Cj4gbW9uaXRvcnMv e25hbWV9L3tuYW1lfS5vIikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZiLCoCAt IFBhdGNoaW5nIHtzZWxmLnJ2X2Rpcn0vTWFrZWZpbGUsIGRvdWJsZSBjaGVjayB0aGUKPiByZXN1 bHQiCj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuICIiIsKgIC0gRWRpdCAlcy9NYWtlZmls ZToKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGYiIiLCoCAtIEVkaXQge3NlbGYucnZfZGlyfS9N YWtlZmlsZToKPiDCoEFkZCB0aGlzIGxpbmUgd2hlcmUgb3RoZXIgbW9uaXRvcnMgYXJlIGluY2x1 ZGVkOgo+IC1vYmotJChDT05GSUdfUlZfTU9OXyVzKSArPSBtb25pdG9ycy8lcy8lcy5vCj4gLSIi IiAlIChzZWxmLnJ2X2RpciwgbmFtZV91cCwgbmFtZSwgbmFtZSkKPiArb2JqLSQoQ09ORklHX1JW X01PTl97bmFtZV91cH0pICs9IG1vbml0b3JzL3tuYW1lfS97bmFtZX0ubwo+ICsiIiIKPiDCoAo+ IMKgwqDCoMKgIGRlZiBmaWxsX21vbml0b3JfdG9vbHRpcChzZWxmKToKPiDCoMKgwqDCoMKgwqDC oMKgIGlmIHNlbGYuYXV0b19wYXRjaDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g IsKgIC0gTW9uaXRvciBjcmVhdGVkIGluICVzL21vbml0b3JzLyVzIiAlIChzZWxmLnJ2X2RpciwK PiBzZWxmLiBuYW1lKQo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gIsKgIC0gTW92ZSAlcy8gdG8g dGhlIGtlcm5lbCdzIG1vbml0b3IgZGlyZWN0b3J5ICglcy9tb25pdG9ycykiCj4gJSAoc2VsZi5u YW1lLCBzZWxmLnJ2X2RpcikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZiLCoCAt IE1vbml0b3IgY3JlYXRlZCBpbgo+IHtzZWxmLnJ2X2Rpcn0vbW9uaXRvcnMve3NlbGYubmFtZX0i Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmIsKgIC0gTW92ZSB7c2VsZi5uYW1lfS8gdG8gdGhl IGtlcm5lbCdzIG1vbml0b3IgZGlyZWN0b3J5Cj4gKHtzZWxmLnJ2X2Rpcn0vbW9uaXRvcnMpIgo+ IMKgCj4gwqDCoMKgwqAgZGVmIF9fY3JlYXRlX2RpcmVjdG9yeShzZWxmKToKPiDCoMKgwqDCoMKg wqDCoMKgIHBhdGggPSBzZWxmLm5hbWUKPiBAQCAtMjA1LDEzICsyMDQsMTMgQEAgb2JqLSQoQ09O RklHX1JWX01PTl8lcykgKz0gbW9uaXRvcnMvJXMvJXMubwo+IMKgwqDCoMKgwqDCoMKgwqAgZmls ZS5jbG9zZSgpCj4gwqAKPiDCoMKgwqDCoCBkZWYgX2NyZWF0ZV9maWxlKHNlbGYsIGZpbGVfbmFt ZSwgY29udGVudCk6Cj4gLcKgwqDCoMKgwqDCoMKgIHBhdGggPSAiJXMvJXMiICUgKHNlbGYubmFt ZSwgZmlsZV9uYW1lKQo+ICvCoMKgwqDCoMKgwqDCoCBwYXRoID0gZiJ7c2VsZi5uYW1lfS97Zmls ZV9uYW1lfSIKPiDCoMKgwqDCoMKgwqDCoMKgIGlmIHNlbGYuYXV0b19wYXRjaDoKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnJ2X2RpciwgIm1vbml0 b3JzIiwgcGF0aCkKPiDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuX193cml0ZV9maWxlKHBhdGgsIGNv bnRlbnQpCj4gwqAKPiDCoMKgwqDCoCBkZWYgX19nZXRfbWFpbl9uYW1lKHNlbGYpOgo+IC3CoMKg wqDCoMKgwqDCoCBwYXRoID0gIiVzLyVzIiAlIChzZWxmLm5hbWUsICJtYWluLmMiKQo+ICvCoMKg wqDCoMKgwqDCoCBwYXRoID0gZiJ7c2VsZi5uYW1lfS9tYWluLmMiCj4gwqDCoMKgwqDCoMKgwqDC oCBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiAibWFpbi5jIgo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuICJfX21haW4uYyIKPiBA QCAtMjIxLDExICsyMjAsMTEgQEAgb2JqLSQoQ09ORklHX1JWX01PTl8lcykgKz0gbW9uaXRvcnMv JXMvJXMubwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCBzZWxmLl9fY3JlYXRlX2RpcmVjdG9yeSgp Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAgcGF0aCA9ICIlcy5jIiAlIHNlbGYubmFtZQo+ICvCoMKg wqDCoMKgwqDCoCBwYXRoID0gZiJ7c2VsZi5uYW1lfS5jIgo+IMKgwqDCoMKgwqDCoMKgwqAgc2Vs Zi5fY3JlYXRlX2ZpbGUocGF0aCwgbWFpbl9jKQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCBtb2Rl bF9oID0gc2VsZi5maWxsX21vZGVsX2goKQo+IC3CoMKgwqDCoMKgwqDCoCBwYXRoID0gIiVzLmgi ICUgc2VsZi5uYW1lCj4gK8KgwqDCoMKgwqDCoMKgIHBhdGggPSBmIntzZWxmLm5hbWV9LmgiCj4g wqDCoMKgwqDCoMKgwqDCoCBzZWxmLl9jcmVhdGVfZmlsZShwYXRoLCBtb2RlbF9oKQo+IMKgCj4g wqDCoMKgwqDCoMKgwqDCoCBrY29uZmlnID0gc2VsZi5maWxsX2tjb25maWcoKQo+IEBAIC0yNTYs NSArMjU1LDUgQEAgY2xhc3MgTW9uaXRvcihSVkdlbmVyYXRvcik6Cj4gwqDCoMKgwqAgZGVmIHBy aW50X2ZpbGVzKHNlbGYpOgo+IMKgwqDCoMKgwqDCoMKgwqAgc3VwZXIoKS5wcmludF9maWxlcygp Cj4gwqDCoMKgwqDCoMKgwqDCoCB0cmFjZV9oID0gc2VsZi5maWxsX3RyYWNlX2goKQo+IC3CoMKg wqDCoMKgwqDCoCBwYXRoID0gIiVzX3RyYWNlLmgiICUgc2VsZi5uYW1lCj4gK8KgwqDCoMKgwqDC oMKgIHBhdGggPSBmIntzZWxmLm5hbWV9X3RyYWNlLmgiCj4gwqDCoMKgwqDCoMKgwqDCoCBzZWxm Ll9jcmVhdGVfZmlsZShwYXRoLCB0cmFjZV9oKQo+IGRpZmYgLS1naXQgYS90b29scy92ZXJpZmlj YXRpb24vcnZnZW4vcnZnZW4vbHRsMmsucHkKPiBiL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9y dmdlbi9sdGwyay5weQo+IGluZGV4IGIwNzVmOThkNTBjNDcuLmZhOWVhNmQ1OTcwOTUgMTAwNjQ0 Cj4gLS0tIGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2x0bDJrLnB5Cj4gKysrIGIv dG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2x0bDJrLnB5Cj4gQEAgLTczLDcgKzczLDcg QEAgY2xhc3MgbHRsMmsoZ2VuZXJhdG9yLk1vbml0b3IpOgo+IMKgwqDCoMKgwqDCoMKgwqAgXQo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCBmb3Igbm9kZSBpbiBzZWxmLmJhOgo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoIlx0UyVpLCIgJSBub2RlLmlkKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoZiJcdFN7bm9kZS5pZH0sIikKPiDCoMKgwqDCoMKgwqDC oMKgIGJ1Zi5hcHBlbmQoIlx0UlZfTlVNX0JBX1NUQVRFUyIpCj4gwqDCoMKgwqDCoMKgwqDCoCBi dWYuYXBwZW5kKCJ9OyIpCj4gwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5kKCJzdGF0aWNfYXNz ZXJ0KFJWX05VTV9CQV9TVEFURVMgPD0gUlZfTUFYX0JBX1NUQVRFUyk7IikKPiBAQCAtODIsNyAr ODIsNyBAQCBjbGFzcyBsdGwyayhnZW5lcmF0b3IuTW9uaXRvcik6Cj4gwqDCoMKgwqAgZGVmIF9m aWxsX2F0b21zKHNlbGYpOgo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmID0gWyJlbnVtIGx0bF9hdG9t IHsiXQo+IMKgwqDCoMKgwqDCoMKgwqAgZm9yIGEgaW4gc29ydGVkKHNlbGYuYXRvbXMpOgo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoIlx0TFRMXyVzLCIgJSBhKQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoZiJcdExUTF97YX0sIikKPiDCoMKgwqDCoMKg wqDCoMKgIGJ1Zi5hcHBlbmQoIlx0TFRMX05VTV9BVE9NIikKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1 Zi5hcHBlbmQoIn07IikKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoInN0YXRpY19hc3Nl cnQoTFRMX05VTV9BVE9NIDw9IFJWX01BWF9MVExfQVRPTSk7IikKPiBAQCAtOTYsNyArOTYsNyBA QCBjbGFzcyBsdGwyayhnZW5lcmF0b3IuTW9uaXRvcik6Cj4gwqDCoMKgwqDCoMKgwqDCoCBdCj4g wqAKPiDCoMKgwqDCoMKgwqDCoMKgIGZvciBuYW1lIGluIHNlbGYuYXRvbXNfYWJicjoKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5kKCJcdFx0XCIlc1wiLCIgJSBuYW1lKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoZiJcdFx0XCJ7bmFtZX1cIiwiKQo+IMKg Cj4gwqDCoMKgwqDCoMKgwqDCoCBidWYuZXh0ZW5kKFsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgIlx0fTsiLAo+IEBAIC0xMTMsMTkgKzExMywxOSBAQCBjbGFzcyBsdGwyayhnZW5lcmF0b3Iu TW9uaXRvcik6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWUKPiDC oAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBpc2luc3RhbmNlKG5vZGUub3AsIGx0bDJi YS5BbmRPcCk6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5kKCJc dGJvb2wgJXMgPSAlcyAmJiAlczsiICUgKG5vZGUsIG5vZGUub3AubGVmdCwKPiBub2RlLm9wLnJp Z2h0KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoZiJcdGJv b2wge25vZGV9ID0ge25vZGUub3AubGVmdH0gJiYKPiB7bm9kZS5vcC5yaWdodH07IikKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXF1aXJlZF92YWx1ZXMgfD0ge3N0cihub2Rl Lm9wLmxlZnQpLCBzdHIobm9kZS5vcC5yaWdodCl9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGVsaWYgaXNpbnN0YW5jZShub2RlLm9wLCBsdGwyYmEuT3JPcCk6Cj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5kKCJcdGJvb2wgJXMgPSAlcyB8fCAlczsiICUgKG5v ZGUsIG5vZGUub3AubGVmdCwKPiBub2RlLm9wLnJpZ2h0KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoZiJcdGJvb2wge25vZGV9ID0ge25vZGUub3AubGVmdH0g fHwKPiB7bm9kZS5vcC5yaWdodH07IikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXF1aXJlZF92YWx1ZXMgfD0ge3N0cihub2RlLm9wLmxlZnQpLCBzdHIobm9kZS5vcC5yaWdo dCl9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsaWYgaXNpbnN0YW5jZShub2RlLm9wLCBs dGwyYmEuTm90T3ApOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVu ZCgiXHRib29sICVzID0gISVzOyIgJSAobm9kZSwgbm9kZS5vcC5jaGlsZCkpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5kKGYiXHRib29sIHtub2RlfSA9ICF7bm9k ZS5vcC5jaGlsZH07IikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXF1aXJl ZF92YWx1ZXMuYWRkKHN0cihub2RlLm9wLmNoaWxkKSkKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAg Zm9yIGF0b20gaW4gc2VsZi5hdG9tczoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgYXRv bS5sb3dlcigpIG5vdCBpbiByZXF1aXJlZF92YWx1ZXM6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY29udGludWUKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5k KCJcdGJvb2wgJXMgPSB0ZXN0X2JpdChMVExfJXMsIG1vbi0+YXRvbXMpOyIgJQo+IChhdG9tLmxv d2VyKCksIGF0b20pKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoZiJcdGJv b2wge2F0b20ubG93ZXIoKX0gPSB0ZXN0X2JpdChMVExfe2F0b219LCBtb24tCj4gPmF0b21zKTsi KQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCBidWYucmV2ZXJzZSgpCj4gwqAKPiBAQCAtMTUzLDcg KzE1Myw3IEBAIGNsYXNzIGx0bDJrKGdlbmVyYXRvci5Nb25pdG9yKToKPiDCoMKgwqDCoMKgwqDC oMKgIF0pCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIGZvciBub2RlIGluIHNlbGYuYmE6Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVuZCgiXHRjYXNlIFMlaToiICUgbm9kZS5pZCkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5kKGYiXHRjYXNlIFN7bm9kZS5pZH06 IikKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgbyBpbiBzb3J0ZWQobm9kZS5v dXRnb2luZyk6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGluZcKgwqAgPSAi XHRcdGlmICIKPiBAQCAtMTYzLDcgKzE2Myw3IEBAIGNsYXNzIGx0bDJrKGdlbmVyYXRvci5Nb25p dG9yKToKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaW5lcyA9IGJyZWFrX2xv bmdfbGluZShsaW5lLCBpbmRlbnQpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnVmLmV4dGVuZChsaW5lcykKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnVmLmFwcGVuZCgiXHRcdFx0X19zZXRfYml0KFMlaSwgbmV4dCk7IiAlIG8uaWQpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5kKGYiXHRcdFx0X19zZXRfYml0KFN7 by5pZH0sIG5leHQpOyIpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoIlx0 XHRicmVhazsiKQo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmLmV4dGVuZChbCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICJcdH0iLAo+IEBAIC0xOTcsNyArMTk3LDcgQEAgY2xhc3MgbHRsMmsoZ2Vu ZXJhdG9yLk1vbml0b3IpOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaW5lcyA9IGJyZWFr X2xvbmdfbGluZShsaW5lLCBpbmRlbnQpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Zi5l eHRlbmQobGluZXMpCj4gwqAKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYuYXBwZW5kKCJc dFx0X19zZXRfYml0KFMlaSwgbW9uLT5zdGF0ZXMpOyIgJSBub2RlLmlkKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJ1Zi5hcHBlbmQoZiJcdFx0X19zZXRfYml0KFN7bm9kZS5pZH0sIG1vbi0+ c3RhdGVzKTsiKQo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmLmFwcGVuZCgifSIpCj4gwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gYnVmCj4gwqAKPiBAQCAtMjA1LDIzICsyMDUsMjEgQEAgY2xhc3MgbHRs MmsoZ2VuZXJhdG9yLk1vbml0b3IpOgo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZiA9IFtdCj4gwqDC oMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgic3RhdGljIHZvaWQgaGFuZGxlX2V4YW1wbGVfZXZl bnQodm9pZCAqZGF0YSwgLyogWFhYOgo+IGZpbGwgaGVhZGVyICovKSIpCj4gwqDCoMKgwqDCoMKg wqDCoCBidWZmLmFwcGVuZCgieyIpCj4gLcKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCJcdGx0 bF9hdG9tX3VwZGF0ZSh0YXNrLCBMVExfJXMsIHRydWUvZmFsc2UpOyIgJQo+IHNlbGYuYXRvbXNb MF0pCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKGYiXHRsdGxfYXRvbV91cGRhdGUodGFz aywgTFRMX3tzZWxmLmF0b21zWzBdfSwKPiB0cnVlL2ZhbHNlKTsiKQo+IMKgwqDCoMKgwqDCoMKg wqAgYnVmZi5hcHBlbmQoIn0iKQo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIiIpCj4g wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gJ1xuJy5qb2luKGJ1ZmYpCj4gwqAKPiDCoMKgwqDCoCBk ZWYgZmlsbF90cmFjZXBvaW50X2F0dGFjaF9wcm9iZShzZWxmKToKPiAtwqDCoMKgwqDCoMKgwqAg cmV0dXJuICJcdHJ2X2F0dGFjaF90cmFjZV9wcm9iZShcIiVzXCIsIC8qIFhYWDogdHJhY2Vwb2lu dCAqLywKPiBoYW5kbGVfZXhhbXBsZV9ldmVudCk7IiBcCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAlIHNlbGYubmFtZQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZiJcdHJ2X2F0 dGFjaF90cmFjZV9wcm9iZShcIntzZWxmLm5hbWV9XCIsIC8qIFhYWDogdHJhY2Vwb2ludAo+ICov LCBoYW5kbGVfZXhhbXBsZV9ldmVudCk7Igo+IMKgCj4gwqDCoMKgwqAgZGVmIGZpbGxfdHJhY2Vw b2ludF9kZXRhY2hfaGVscGVyKHNlbGYpOgo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gIlx0cnZf ZGV0YWNoX3RyYWNlX3Byb2JlKFwiJXNcIiwgLyogWFhYOiB0cmFjZXBvaW50ICovLAo+IGhhbmRs ZV9zYW1wbGVfZXZlbnQpOyIgXAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJSBz ZWxmLm5hbWUKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGYiXHRydl9kZXRhY2hfdHJhY2VfcHJv YmUoXCJ7c2VsZi5uYW1lfVwiLCAvKiBYWFg6IHRyYWNlcG9pbnQKPiAqLywgaGFuZGxlX3NhbXBs ZV9ldmVudCk7Igo+IMKgCj4gwqDCoMKgwqAgZGVmIGZpbGxfYXRvbXNfaW5pdChzZWxmKToKPiDC oMKgwqDCoMKgwqDCoMKgIGJ1ZmYgPSBbXQo+IMKgwqDCoMKgwqDCoMKgwqAgZm9yIGEgaW4gc2Vs Zi5hdG9tczoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiXHRsdGxfYXRv bV9zZXQobW9uLCBMVExfJXMsIHRydWUvZmFsc2UpOyIgJSBhKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJ1ZmYuYXBwZW5kKGYiXHRsdGxfYXRvbV9zZXQobW9uLCBMVExfe2F9LCB0cnVlL2Zh bHNlKTsiKQo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuICdcbicuam9pbihidWZmKQo+IMKgCj4g wqDCoMKgwqAgZGVmIGZpbGxfbW9kZWxfaChzZWxmKToK