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.129.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 0A56F1A23A6 for ; Tue, 27 May 2025 09:15:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748337332; cv=none; b=hSGSAXNkI4ONz1+kNX3KoyLCNUsS9yyVMOQpMEE7rGt08EIOevMTMFxCNugQmStiu16ceXsReSHoZkTY2HZ/9Se6s09c4Lx3ts4AAeA3Bivdty57tk85YVQNh8ZmK9InfguRnhP/RscTLvHVYA17ktPHJy0U0tnuA4JAU/28uWk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748337332; c=relaxed/simple; bh=BhbIGrvTDKXYIW7R/YXaf1veNKvQZ63wWPtIVxTiCOQ=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: MIME-Version:Content-Type; b=o7KhsOxPXJRrJkJ7ohQnGjpTGbsldiN8GLahut1Qku1ksYasNGddUlXlFs3fsINexkfpJvVaE8sb7z1ZgsZ8RQWRC/VVjM7hhdMYU2wrbd75wvfcSlHa1u8j/R0YhYOltlTrupSfB3klfw6PngkEeHY6BOmdzFwtPuw0mgir854= 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=awX8BoRs; arc=none smtp.client-ip=170.10.129.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="awX8BoRs" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748337327; 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=BhbIGrvTDKXYIW7R/YXaf1veNKvQZ63wWPtIVxTiCOQ=; b=awX8BoRsaNVC5tWKZR6U47umkdhukWxsk493e4r0Ok81eGXgB9KJbaP1AQ78c2CiOWqUrm EuTOdb7OlJAsrD7ctiIczGkaU8JerXicpCjXOz/N4+MKpFO3bsob417CFCKdBulV8PPhHU iyreLkvbTIcBDuMrkJEY2T6iQRFbScE= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-457-7BJHdVhQMKuVHlfItbvaqg-1; Tue, 27 May 2025 05:15:25 -0400 X-MC-Unique: 7BJHdVhQMKuVHlfItbvaqg-1 X-Mimecast-MFC-AGG-ID: 7BJHdVhQMKuVHlfItbvaqg_1748337324 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-442dc702850so19812695e9.1 for ; Tue, 27 May 2025 02:15:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748337324; x=1748942124; h=mime-version:user-agent:content-transfer-encoding:autocrypt :references:in-reply-to:date:cc:to:from:subject:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=BhbIGrvTDKXYIW7R/YXaf1veNKvQZ63wWPtIVxTiCOQ=; b=QImcWYbDSMddGH+COUpVQToAVH6/y3M8z4+/hdRVGNYD8LJKLC5orD8dhlb2ggPlGz nHZC7u+zZqdW48xyWpThCsGPJtrvQWphT3NNs0iMQ+j3gGj9x82U3qLOSzZ2Wb0a7Kif DWXjyEJxW952ynxDeqpWxjaub28GcvH6/b2W3QPuS9sSBVPFvoT458yHpFcfTqxFk5Hu RY5wznwLBeFWSK00gIjWE98SrOyoK03SH6d73lu4kcq1GfDbrSeMDYw+TWxLqbPo9Cv7 O+wdgoWB1Fva0EH9/zVUy1XIhBcvTE3q3OB3Oc5ByaJ9lASX/qrwYxdK0rBAkCzfUJ8G hSTQ== X-Forwarded-Encrypted: i=1; AJvYcCUg5rPp9VXMdNrL/cH6qTo+OIChjNxf7M3tZmnE8VCaykG+Fd21pxd3P9unYHQFR8tNtJCxaNoJCnDVqURKeKk/v84=@vger.kernel.org X-Gm-Message-State: AOJu0YzFkNtbXhbfOKqsaDzINaL3IwpKT0L8gKtr0zUz10uHUQO0boc0 0i5v4E0jZytifYfPXyKxZZrr1/yRuVmFvT+rcYzlC78afO+MwFxWJkQO9QPkBmzW30kObB8s+zX vZixoMZdkQKSi/zMVqOAv3bR/YMlxefmccTXKfUqiT5OfYO9csxOKmWKiLrfCjQZDr0Dgs2XyFQ == X-Gm-Gg: ASbGnctJDe5IKGHoE5ZMMN5CNepT2UqkV/qZHF+a1vLEnwVCLszK+dg4VYYOH+yGzRa ph/tKwjWWx/gC/gZrQ3g9r9clglTBjQa6Cvd7GaXAwDrC12fEPgKaB+eA7AgkKrywQvHVa8gtXk A3a/x68ZKubhSkzRsHETIH9gdEFH63FV+77D5FdIWtAA+LU7PZ5AiQlykumD0xOxW/C2AlO+81o s/eGgat8hnwQNNCYcYYx65KIhPD8YHYWHjbkwe82kohf73FH9hEJ5skUyN5QQQfHzrosdsudllk ioh8u0G44Mbht+/TxNczqGpfXYFk2GgHvkINCg== X-Received: by 2002:a05:6000:288b:b0:3a4:e059:4a1 with SMTP id ffacd0b85a97d-3a4e05904d3mr2224522f8f.59.1748337324293; Tue, 27 May 2025 02:15:24 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHelzW7BHwGSqLFHsHctDrcZmg0ZpqsHJJl/UeayGdd5qbPNsFVsfkq3G51uAQokspWoRWb+A== X-Received: by 2002:a05:6000:288b:b0:3a4:e059:4a1 with SMTP id ffacd0b85a97d-3a4e05904d3mr2224484f8f.59.1748337323752; Tue, 27 May 2025 02:15:23 -0700 (PDT) Received: from gmonaco-thinkpadt14gen3.rmtit.csb ([185.107.56.30]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-447f6b29633sm275796635e9.8.2025.05.27.02.15.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 May 2025 02:15:23 -0700 (PDT) Message-ID: <1927d98817cd97a70d177e0a3001603ee3e34b35.camel@redhat.com> Subject: Re: [PATCH v9 12/22] verification/rvgen: Restructure the classes to prepare for LTL inclusion From: Gabriele Monaco To: Steven Rostedt , linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: john.ogness@linutronix.de, Nam Cao Date: Tue, 27 May 2025 11:15:21 +0200 In-Reply-To: References: Autocrypt: addr=gmonaco@redhat.com; prefer-encrypt=mutual; keydata=mDMEZuK5YxYJKwYBBAHaRw8BAQdAmJ3dM9Sz6/Hodu33Qrf8QH2bNeNbOikqYtxWFLVm0 1a0JEdhYnJpZWxlIE1vbmFjbyA8Z21vbmFjb0ByZWRoYXQuY29tPoiZBBMWCgBBFiEEysoR+AuB3R Zwp6j270psSVh4TfIFAmbiuWMCGwMFCQWjmoAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgk Q70psSVh4TfJzZgD/TXjnqCyqaZH/Y2w+YVbvm93WX2eqBqiVZ6VEjTuGNs8A/iPrKbzdWC7AicnK xyhmqeUWOzFx5P43S1E1dhsrLWgP User-Agent: Evolution 3.56.2 (3.56.2-1.fc42) 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: iZ8AQbDVw6SrXSbTLCV0fEsNkbcPFQVBlF1xBn_haQk_1748337324 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 CgpPbiBNb24sIDIwMjUtMDUtMTkgYXQgMTI6MjcgKzAyMDAsIE5hbSBDYW8gd3JvdGU6Cj4gQm90 aCBjb250YWluZXIgZ2VuZXJhdGlvbiBhbmQgREEgbW9uaXRvciBnZW5lcmF0aW9uIGlzIGltcGxl bWVudGVkIGluCj4gdGhlCj4gY2xhc3MgZG90MmsuIFRoYXQgcmVxdWlyZXMgc29tZSB1Z2x5ICJp ZiBpc19jb250YWluZXIgLi4uIGVsc2UgLi4uIi4KPiBJZgo+IGxpbmVhciB0ZW1wb3JhbCBsb2dp YyBzdXBwb3J0IGlzIGFkZGVkIGF0IHRoZSBjdXJyZW50IHN0YXRlLCB0aGUgImlmCj4gZWxzZSIK PiBjaGFpbiBpcyBsb25nZXIgYW5kIHVnbGllci4KPiAKPiBGdXJ0aGVybW9yZSwgY29udGFpbmVy IGdlbmVyYXRpb24gaXMgaXJyZXZlbGFudCB0byAuZG90IGZpbGVzLiBJdCBpcwo+IHRoZXJlZm9y ZSBpbGxvZ2ljYWwgdG8gYmUgaW1wbGVtZW50ZWQgaW4gY2xhc3MgImRvdDJrIi4KPiAKPiBDbGVh biBpdCB1cCwgcmVzdHJ1Y3R1cmUgdGhlIGRvdDJrIGNsYXNzIGludG8gdGhlIGZvbGxvd2luZyBj bGFzcwo+IGhpZXJhcmNoeToKPiAKPiDCoMKgwqDCoMKgwqDCoMKgIChSVkdlbmVyYXRvcikKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAv wqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgL8KgwqDCoCBcCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqAgL8KgwqDCoMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoCAvwqDCoMKgwqDCoMKgwqAg XAo+IMKgwqDCoCAoQ29udGFpbmVyKcKgIChNb25pdG9yKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC9cCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC/CoCBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvwqDCoMKgIFwK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvwqDCoMKgwqDCoCBcCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKGRvdDJrKcKgIFtsdGwya10gPC0gaW50ZW5kZWQKPiAKPiBU aGlzIGFsbG93cyBhIHNpbXBsZSBhbmQgY2xlYW4gaW50ZWdyYXRpb24gb2YgTFRMLgo+IAo+IFJl dmlld2VkLWJ5OiBHYWJyaWVsZSBNb25hY28gPGdtb25hY29AcmVkaGF0LmNvbT4KPiBTaWduZWQt b2ZmLWJ5OiBOYW0gQ2FvIDxuYW1jYW9AbGludXRyb25peC5kZT4KPiAtLS0KClN0ZXZlLAoKc2lu Y2UgdGhpcyBzZXJpZXMgaXMgcXVpdGUgL21lYXR5LyBhbmQgaXQgc2VlbXMgdGhlIGxhdGVyIHBh cnRzIHJlcXVpcmUKYSBiaXQgbW9yZSBkaXNjdXNzaW9uIGFib3V0IHRyYWNlcG9pbnRzLCBjb3Vs ZCB3ZSBzdGFydCBtZXJnaW5nIHVudGlsCmhlcmUgKDEtMTIvMjIpPwpJJ2QgYmUgdGVtcHRlZCBt ZXJnaW5nIGFsc28gMTMgKGFjdHVhbCBMVEwgaW50cm9kdWN0aW9uKSBidXQgcGVyaGFwcwprZWVw aW5nIGl0IHRvZ2V0aGVyIHdpdGggdGhlIExUTCBtb25pdG9ycyBpcyBjbGVhbmVyLgoKV2hhdCBk byB5b3UgdGhpbms/CgpUaGFua3MsCkdhYnJpZWxlCgo+IMKgdG9vbHMvdmVyaWZpY2F0aW9uL3J2 Z2VuL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArCj4gwqB0b29scy92ZXJp ZmljYXRpb24vcnZnZW4vX19tYWluX18ucHnCoMKgwqDCoMKgwqDCoCB8wqDCoCA2ICstCj4gwqB0 b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vY29udGFpbmVyLnB5IHzCoCAyMiArKwo+IMKg dG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJrLnB5wqDCoMKgwqAgfCAyNzUgKyst LS0tLS0tLS0tLS0tLS0tCj4gLS0KPiDCoHRvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9n ZW5lcmF0b3IucHkgfCAyNjQKPiArKysrKysrKysrKysrKysrKysrCj4gwqA1IGZpbGVzIGNoYW5n ZWQsIDMwOCBpbnNlcnRpb25zKCspLCAyNjEgZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUgbW9kZSAx MDA2NDQgdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2NvbnRhaW5lci5weQo+IMKgY3Jl YXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9nZW5lcmF0b3Iu cHkKPiAKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL01ha2VmaWxlCj4g Yi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vTWFrZWZpbGUKPiBpbmRleCA4ZDA4ODI1ZTdlNTQu LmNjYThjOWJhODJlOCAxMDA2NDQKPiAtLS0gYS90b29scy92ZXJpZmljYXRpb24vcnZnZW4vTWFr ZWZpbGUKPiArKysgYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vTWFrZWZpbGUKPiBAQCAtMTks NSArMTksNyBAQCBpbnN0YWxsOgo+IMKgCSQoSU5TVEFMTCkgcnZnZW4vZG90MmMucHkgLUQgLW0g NjQ0Cj4gJChERVNURElSKSQoUFlMSUIpL3J2Z2VuL2RvdDJjLnB5Cj4gwqAJJChJTlNUQUxMKSBk b3QyYyAtRCAtbSA3NTUgJChERVNURElSKSQoYmluZGlyKS8KPiDCoAkkKElOU1RBTEwpIHJ2Z2Vu L2RvdDJrLnB5IC1EIC1tIDY0NAo+ICQoREVTVERJUikkKFBZTElCKS9ydmdlbi9kb3Qyay5weQo+ ICsJJChJTlNUQUxMKSBydmdlbi9jb250YWluZXIucHkgLUQgLW0gNjQ0Cj4gJChERVNURElSKSQo UFlMSUIpL3J2Z2VuL2NvbnRhaW5lci5weQo+ICsJJChJTlNUQUxMKSBydmdlbi9nZW5lcmF0b3Iu cHkgLUQgLW0gNjQ0Cj4gJChERVNURElSKSQoUFlMSUIpL3J2Z2VuL2dlbmVyYXRvci5weQo+IMKg CSQoSU5TVEFMTCkgX19tYWluX18ucHkgLUQgLW0gNzU1ICQoREVTVERJUikkKGJpbmRpcikvcnZn ZW4KPiDCoAljcCAtcnAgcnZnZW4vdGVtcGxhdGVzICQoREVTVERJUikkKFBZTElCKS9ydmdlbi8K PiBkaWZmIC0tZ2l0IGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL19fbWFpbl9fLnB5Cj4gYi90 b29scy92ZXJpZmljYXRpb24vcnZnZW4vX19tYWluX18ucHkKPiBpbmRleCA5OTRkMzIwYWQyZDEu LjYzZWNmMGMzNzAzNCAxMDA2NDQKPiAtLS0gYS90b29scy92ZXJpZmljYXRpb24vcnZnZW4vX19t YWluX18ucHkKPiArKysgYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vX19tYWluX18ucHkKPiBA QCAtMTAsNiArMTAsOCBAQAo+IMKgCj4gwqBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgo+IMKg wqDCoMKgIGZyb20gcnZnZW4uZG90MmsgaW1wb3J0IGRvdDJrCj4gK8KgwqDCoCBmcm9tIHJ2Z2Vu LmdlbmVyYXRvciBpbXBvcnQgTW9uaXRvcgo+ICvCoMKgwqAgZnJvbSBydmdlbi5jb250YWluZXIg aW1wb3J0IENvbnRhaW5lcgo+IMKgwqDCoMKgIGltcG9ydCBhcmdwYXJzZQo+IMKgwqDCoMKgIGlt cG9ydCBzeXMKPiDCoAo+IEBAIC0yOSw3ICszMSw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5f Xyc6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBoZWxwPSJNb25pdG9yIGNsYXNzLCBlaXRoZXIgXCJkYVwiCj4gb3IgXCJs dGxcIiIpCj4gwqDCoMKgwqAgbW9uaXRvcl9wYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICItLXNw ZWMiLCBkZXN0PSJzcGVjIiwKPiBoZWxwPSJNb25pdG9yIHNwZWNpZmljYXRpb24gZmlsZSIpCj4g wqDCoMKgwqAgbW9uaXRvcl9wYXJzZXIuYWRkX2FyZ3VtZW50KCctdCcsICItLW1vbml0b3JfdHlw ZSIsCj4gZGVzdD0ibW9uaXRvcl90eXBlIiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGVscD1mIkF2YWlsYWJsZSBvcHRp b25zOiB7JywKPiAnLmpvaW4oZG90MmsubW9uaXRvcl90eXBlcy5rZXlzKCkpfSIpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGhlbHA9ZiJBdmFpbGFibGUgb3B0aW9uczogeycsCj4gJy5qb2luKE1vbml0b3IubW9uaXRvcl90 eXBlcy5rZXlzKCkpfSIpCj4gwqAKPiDCoMKgwqDCoCBjb250YWluZXJfcGFyc2VyID0gc3VicGFy c2Vycy5hZGRfcGFyc2VyKCJjb250YWluZXIiKQo+IMKgwqDCoMKgIGNvbnRhaW5lcl9wYXJzZXIu YWRkX2FyZ3VtZW50KCctbicsICItLW1vZGVsX25hbWUiLAo+IGRlc3Q9Im1vZGVsX25hbWUiLCBy ZXF1aXJlZD1UcnVlKQo+IEBAIC00Nyw3ICs0OSw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5f Xyc6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpbnQoIlVua25vd24gbW9u aXRvciBjbGFzczoiLAo+IHBhcmFtcy5tb25pdG9yX2NsYXNzKQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN5cy5leGl0KDEpCj4gwqDCoMKgwqDCoMKgwqDCoCBlbHNlOgo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vbml0b3IgPSBkb3QyayhOb25lLCBOb25lLCB2YXJzKHBh cmFtcykpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbW9uaXRvciA9IENvbnRhaW5lcih2YXJz KHBhcmFtcykpCj4gwqDCoMKgwqAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgo+IMKgwqDCoMKgwqDC oMKgwqAgcHJpbnQoJ0Vycm9yOiAnKyBzdHIoZSkpCj4gwqDCoMKgwqDCoMKgwqDCoCBwcmludCgi U29ycnkgOiA6LSgiKQo+IGRpZmYgLS1naXQgYS90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZn ZW4vY29udGFpbmVyLnB5Cj4gYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vY29udGFp bmVyLnB5Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQ3ZDhh YjJhZDNlYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4v cnZnZW4vY29udGFpbmVyLnB5Cj4gQEAgLTAsMCArMSwyMiBAQAo+ICsjIS91c3IvYmluL2VudiBw eXRob24zCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsjCj4g KyMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgUmVkIEhhdCwgSW5jLiBEYW5pZWwgQnJpc3RvdCBk ZSBPbGl2ZWlyYQo+IDxicmlzdG90QGtlcm5lbC5vcmc+Cj4gKyMKPiArIyBHZW5lcmF0b3IgZm9y IHJ1bnRpbWUgdmVyaWZpY2F0aW9uIG1vbml0b3IgY29udGFpbmVyCj4gKwo+ICtmcm9tIC4gaW1w b3J0IGdlbmVyYXRvcgo+ICsKPiArCj4gK2NsYXNzIENvbnRhaW5lcihnZW5lcmF0b3IuUlZHZW5l cmF0b3IpOgo+ICvCoMKgwqAgdGVtcGxhdGVfZGlyID0gImNvbnRhaW5lciIKPiArCj4gK8KgwqDC oCBkZWYgX19pbml0X18oc2VsZiwgZXh0cmFfcGFyYW1zPXt9KToKPiArwqDCoMKgwqDCoMKgwqAg c3VwZXIoKS5fX2luaXRfXyhleHRyYV9wYXJhbXMpCj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYubmFt ZSA9IGV4dHJhX3BhcmFtcy5nZXQoIm1vZGVsX25hbWUiKQo+ICvCoMKgwqDCoMKgwqDCoCBzZWxm Lm1haW5faCA9IHNlbGYuX3JlYWRfdGVtcGxhdGVfZmlsZSgibWFpbi5oIikKPiArCj4gK8KgwqDC oCBkZWYgZmlsbF9tb2RlbF9oKHNlbGYpOgo+ICvCoMKgwqDCoMKgwqDCoCBtYWluX2ggPSBzZWxm Lm1haW5faAo+ICvCoMKgwqDCoMKgwqDCoCBtYWluX2ggPSBtYWluX2gucmVwbGFjZSgiJSVNT0RF TF9OQU1FJSUiLCBzZWxmLm5hbWUpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBtYWluX2gKPiBk aWZmIC0tZ2l0IGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2RvdDJrLnB5Cj4gYi90 b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZG90MmsucHkKPiBpbmRleCBhOWVkOTdkMGIy MjQuLmVkMGEzYzkwMTEwNiAxMDA2NDQKPiAtLS0gYS90b29scy92ZXJpZmljYXRpb24vcnZnZW4v cnZnZW4vZG90MmsucHkKPiArKysgYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZG90 MmsucHkKPiBAQCAtOSwxMDggKzksMjEgQEAKPiDCoCPCoMKgIERvY3VtZW50YXRpb24vdHJhY2Uv cnYvZGFfbW9uaXRvcl9zeW50aGVzaXMucnN0Cj4gwqAKPiDCoGZyb20gLmRvdDJjIGltcG9ydCBE b3QyYwo+IC1pbXBvcnQgcGxhdGZvcm0KPiAtaW1wb3J0IG9zCj4gK2Zyb20gLmdlbmVyYXRvciBp bXBvcnQgTW9uaXRvcgo+IMKgCj4gLWNsYXNzIGRvdDJrKERvdDJjKToKPiAtwqDCoMKgIG1vbml0 b3JfdHlwZXMgPSB7ICJnbG9iYWwiIDogMSwgInBlcl9jcHUiIDogMiwgInBlcl90YXNrIiA6IDMg fQo+IC3CoMKgwqAgcnZfZGlyID0gImtlcm5lbC90cmFjZS9ydiIKPiAtwqDCoMKgIG1vbml0b3Jf dHlwZSA9ICJwZXJfY3B1Igo+IMKgCj4gLcKgwqDCoCBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9w YXRoLCBNb25pdG9yVHlwZSwgZXh0cmFfcGFyYW1zPXt9KToKPiAtwqDCoMKgwqDCoMKgwqAgc2Vs Zi5jb250YWluZXIgPSBleHRyYV9wYXJhbXMuZ2V0KCJzdWJjbWQiKSA9PSAiY29udGFpbmVyIgo+ IC3CoMKgwqDCoMKgwqDCoCBzZWxmLnBhcmVudCA9IGV4dHJhX3BhcmFtcy5nZXQoInBhcmVudCIp Cj4gLcKgwqDCoMKgwqDCoMKgIGlmIHNlbGYuY29udGFpbmVyOgo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNlbGYuYWJzX3RlbXBsYXRlX2RpciA9Cj4gb3MucGF0aC5qb2luKG9zLnBhdGguZGly bmFtZShfX2ZpbGVfXyksICJ0ZW1wbGF0ZXMvY29udGFpbmVyIikKPiAtwqDCoMKgwqDCoMKgwqAg ZWxzZToKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLmFic190ZW1wbGF0ZV9kaXIgPQo+ IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAidGVtcGxhdGVzL2RvdDJr IikKPiAtCj4gLcKgwqDCoMKgwqDCoMKgIGlmIHNlbGYuY29udGFpbmVyOgo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIGZpbGVfcGF0aDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJhaXNlIFZhbHVlRXJyb3IoIkEgY29udGFpbmVyIGRvZXMgbm90IHJlcXVpcmUgYSBkb3QK PiBmaWxlIikKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBNb25pdG9yVHlwZToKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJhaXNlIFZhbHVlRXJyb3IoIkEgY29udGFpbmVy IGRvZXMgbm90IHJlcXVpcmUgYQo+IG1vbml0b3IgdHlwZSIpCj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgc2VsZi5wYXJlbnQ6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy YWlzZSBWYWx1ZUVycm9yKCJBIGNvbnRhaW5lciBjYW5ub3QgaGF2ZSBhIHBhcmVudCIpCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5uYW1lID0gZXh0cmFfcGFyYW1zLmdldCgibW9kZWxf bmFtZSIpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5ldmVudHMgPSBbXQo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuc3RhdGVzID0gW10KPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzZWxmLm1haW5faCA9IHNlbGYuX3JlYWRfdGVtcGxhdGVfZmlsZSgibWFpbi5oIikKPiAt wqDCoMKgwqDCoMKgwqAgZWxzZToKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdXBlcigpLl9f aW5pdF9fKGZpbGVfcGF0aCwKPiBleHRyYV9wYXJhbXMuZ2V0KCJtb2RlbF9uYW1lIikpCj4gK2Ns YXNzIGRvdDJrKE1vbml0b3IsIERvdDJjKToKPiArwqDCoMKgIHRlbXBsYXRlX2RpciA9ICJkb3Qy ayIKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYubW9uaXRvcl90eXBlID0gc2Vs Zi5tb25pdG9yX3R5cGVzLmdldChNb25pdG9yVHlwZSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZiBzZWxmLm1vbml0b3JfdHlwZSBpcyBOb25lOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBtb25pdG9yIHR5cGU6ICVzIiAlCj4g TW9uaXRvclR5cGUpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5tb25pdG9yX3R5cGUg PSBNb25pdG9yVHlwZQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYudHJhY2VfaCA9IHNl bGYuX3JlYWRfdGVtcGxhdGVfZmlsZSgidHJhY2UuaCIpCj4gLQo+IC3CoMKgwqDCoMKgwqDCoCBz ZWxmLm1haW5fYyA9IHNlbGYuX3JlYWRfdGVtcGxhdGVfZmlsZSgibWFpbi5jIikKPiAtwqDCoMKg wqDCoMKgwqAgc2VsZi5rY29uZmlnID0gc2VsZi5fcmVhZF90ZW1wbGF0ZV9maWxlKCJLY29uZmln IikKPiArwqDCoMKgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX3BhdGgsIE1vbml0b3JUeXBlLCBl eHRyYV9wYXJhbXM9e30pOgo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLm1vbml0b3JfdHlwZSA9IE1v bml0b3JUeXBlCj4gK8KgwqDCoMKgwqDCoMKgIE1vbml0b3IuX19pbml0X18oc2VsZiwgZXh0cmFf cGFyYW1zKQo+ICvCoMKgwqDCoMKgwqDCoCBEb3QyYy5fX2luaXRfXyhzZWxmLCBmaWxlX3BhdGgs Cj4gZXh0cmFfcGFyYW1zLmdldCgibW9kZWxfbmFtZSIpKQo+IMKgwqDCoMKgwqDCoMKgwqAgc2Vs Zi5lbnVtX3N1ZmZpeCA9ICJfJXMiICUgc2VsZi5uYW1lCj4gLcKgwqDCoMKgwqDCoMKgIHNlbGYu ZGVzY3JpcHRpb24gPSBleHRyYV9wYXJhbXMuZ2V0KCJkZXNjcmlwdGlvbiIsCj4gc2VsZi5uYW1l KSBvciAiYXV0by1nZW5lcmF0ZWQiCj4gLcKgwqDCoMKgwqDCoMKgIHNlbGYuYXV0b19wYXRjaCA9 IGV4dHJhX3BhcmFtcy5nZXQoImF1dG9fcGF0Y2giKQo+IC3CoMKgwqDCoMKgwqDCoCBpZiBzZWxm LmF1dG9fcGF0Y2g6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5fX2ZpbGxfcnZfa2Vy bmVsX2RpcigpCj4gLQo+IC3CoMKgwqAgZGVmIF9fZmlsbF9ydl9rZXJuZWxfZGlyKHNlbGYpOgo+ IC0KPiAtwqDCoMKgwqDCoMKgwqAgIyBmaXJzdCB0cnkgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gdGhl IGtlcm5lbCB0cmVlIHJvb3QKPiAtwqDCoMKgwqDCoMKgwqAgaWYgb3MucGF0aC5leGlzdHMoc2Vs Zi5ydl9kaXIpOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybgo+IC0KPiAtwqDCoMKg wqDCoMKgwqAgIyBvZmZzZXQgaWYgd2UgYXJlIHJ1bm5pbmcgaW5zaWRlIHRoZSBrZXJuZWwgdHJl ZSBmcm9tCj4gdmVyaWZpY2F0aW9uL2RvdDIKPiAtwqDCoMKgwqDCoMKgwqAga2VybmVsX3BhdGgg PSBvcy5wYXRoLmpvaW4oIi4uLy4uIiwgc2VsZi5ydl9kaXIpCj4gLQo+IC3CoMKgwqDCoMKgwqDC oCBpZiBvcy5wYXRoLmV4aXN0cyhrZXJuZWxfcGF0aCk6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc2VsZi5ydl9kaXIgPSBrZXJuZWxfcGF0aAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybgo+IC0KPiAtwqDCoMKgwqDCoMKgwqAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgIT0gIkxpbnV4 IjoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYWlzZSBPU0Vycm9yKCJJIGNhbiBvbmx5IHJ1 biBvbiBMaW51eC4iKQo+IC0KPiAtwqDCoMKgwqDCoMKgwqAga2VybmVsX3BhdGggPSBvcy5wYXRo LmpvaW4oIi9saWIvbW9kdWxlcy8lcy9idWlsZCIgJQo+IHBsYXRmb3JtLnJlbGVhc2UoKSwgc2Vs Zi5ydl9kaXIpCj4gLQo+IC3CoMKgwqDCoMKgwqDCoCAjIGlmIHRoZSBjdXJyZW50IGtlcm5lbCBp cyBmcm9tIGEgZGlzdHJvIHRoaXMgbWF5IG5vdCBiZSBhCj4gZnVsbCBrZXJuZWwgdHJlZQo+IC3C oMKgwqDCoMKgwqDCoCAjIHZlcmlmeSB0aGF0IG9uZSBvZiB0aGUgZmlsZXMgd2UgYXJlIGdvaW5n IHRvIG1vZGlmeSBpcwo+IGF2YWlsYWJsZQo+IC3CoMKgwqDCoMKgwqDCoCBpZiBvcy5wYXRoLmV4 aXN0cyhvcy5wYXRoLmpvaW4oa2VybmVsX3BhdGgsICJydl90cmFjZS5oIikpOgo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNlbGYucnZfZGlyID0ga2VybmVsX3BhdGgKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4KPiAtCj4gLcKgwqDCoMKgwqDCoMKgIHJhaXNlIEZpbGVOb3RGb3Vu ZEVycm9yKCJDb3VsZCBub3QgZmluZCB0aGUgcnYgZGlyZWN0b3J5LCBkbwo+IHlvdSBoYXZlIHRo ZSBrZXJuZWwgc291cmNlIGluc3RhbGxlZD8iKQo+IC0KPiAtwqDCoMKgIGRlZiBfX3JlYWRfZmls ZShzZWxmLCBwYXRoKToKPiAtwqDCoMKgwqDCoMKgwqAgdHJ5Ogo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGZkID0gb3BlbihwYXRoLCAncicpCj4gLcKgwqDCoMKgwqDCoMKgIGV4Y2VwdCBPU0Vy cm9yOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJhaXNlIEV4Y2VwdGlvbigiQ2Fubm90IG9w ZW4gdGhlIGZpbGU6ICVzIiAlIHBhdGgpCj4gLQo+IC3CoMKgwqDCoMKgwqDCoCBjb250ZW50ID0g ZmQucmVhZCgpCj4gLQo+IC3CoMKgwqDCoMKgwqDCoCBmZC5jbG9zZSgpCj4gLcKgwqDCoMKgwqDC oMKgIHJldHVybiBjb250ZW50Cj4gLQo+IC3CoMKgwqAgZGVmIF9yZWFkX3RlbXBsYXRlX2ZpbGUo c2VsZiwgZmlsZSk6Cj4gLcKgwqDCoMKgwqDCoMKgIHRyeToKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYWJzX3RlbXBsYXRlX2RpciwgZmlsZSkKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gc2VsZi5fX3JlYWRfZmlsZShwYXRoKQo+IC3C oMKgwqDCoMKgwqDCoCBleGNlcHQgRXhjZXB0aW9uOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICMgU3BlY2lmaWMgdGVtcGxhdGUgZmlsZSBub3QgZm91bmQuIFRyeSB0aGUgZ2VuZXJpYwo+IHRl bXBsYXRlIGZpbGUgaW4gdGhlIHRlbXBsYXRlLwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgICMg ZGlyZWN0b3J5LCB3aGljaCBpcyBvbmUgbGV2ZWwgdXAKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYWJzX3RlbXBsYXRlX2RpciwgIi4uIiwgZmlsZSkK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gc2VsZi5fX3JlYWRfZmlsZShwYXRoKQo+ IMKgCj4gwqDCoMKgwqAgZGVmIGZpbGxfbW9uaXRvcl90eXBlKHNlbGYpOgo+IMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIHNlbGYubW9uaXRvcl90eXBlLnVwcGVyKCkKPiDCoAo+IC3CoMKgwqAgZGVm IGZpbGxfcGFyZW50KHNlbGYpOgo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gIiZydl8lcyIgJSBz ZWxmLnBhcmVudCBpZiBzZWxmLnBhcmVudCBlbHNlICJOVUxMIgo+IC0KPiAtwqDCoMKgIGRlZiBm aWxsX2luY2x1ZGVfcGFyZW50KHNlbGYpOgo+IC3CoMKgwqDCoMKgwqDCoCBpZiBzZWxmLnBhcmVu dDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gIiNpbmNsdWRlIDxtb25pdG9ycy8l cy8lcy5oPlxuIiAlIChzZWxmLnBhcmVudCwKPiBzZWxmLnBhcmVudCkKPiAtwqDCoMKgwqDCoMKg wqAgcmV0dXJuICIiCj4gLQo+IMKgwqDCoMKgIGRlZiBmaWxsX3RyYWNlcG9pbnRfaGFuZGxlcnNf c2tlbChzZWxmKToKPiDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmYgPSBbXQo+IMKgwqDCoMKgwqDCoMKg wqAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzOgo+IEBAIC0xNDQsMzAgKzU3LDYgQEAgY2xhc3Mg ZG90MmsoRG90MmMpOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiXHRy dl9kZXRhY2hfdHJhY2VfcHJvYmUoXCIlc1wiLCAvKiBYWFg6Cj4gdHJhY2Vwb2ludCAqLywgaGFu ZGxlXyVzKTsiICUgKHNlbGYubmFtZSwgZXZlbnQpKQo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu ICdcbicuam9pbihidWZmKQo+IMKgCj4gLcKgwqDCoCBkZWYgZmlsbF9tYWluX2Moc2VsZik6Cj4g LcKgwqDCoMKgwqDCoMKgIG1haW5fYyA9IHNlbGYubWFpbl9jCj4gLcKgwqDCoMKgwqDCoMKgIG1v bml0b3JfdHlwZSA9IHNlbGYuZmlsbF9tb25pdG9yX3R5cGUoKQo+IC3CoMKgwqDCoMKgwqDCoCBt aW5fdHlwZSA9IHNlbGYuZ2V0X21pbmltdW5fdHlwZSgpCj4gLcKgwqDCoMKgwqDCoMKgIG5yX2V2 ZW50cyA9IGxlbihzZWxmLmV2ZW50cykKPiAtwqDCoMKgwqDCoMKgwqAgdHJhY2Vwb2ludF9oYW5k bGVycyA9IHNlbGYuZmlsbF90cmFjZXBvaW50X2hhbmRsZXJzX3NrZWwoKQo+IC3CoMKgwqDCoMKg wqDCoCB0cmFjZXBvaW50X2F0dGFjaCA9IHNlbGYuZmlsbF90cmFjZXBvaW50X2F0dGFjaF9wcm9i ZSgpCj4gLcKgwqDCoMKgwqDCoMKgIHRyYWNlcG9pbnRfZGV0YWNoID0gc2VsZi5maWxsX3RyYWNl cG9pbnRfZGV0YWNoX2hlbHBlcigpCj4gLcKgwqDCoMKgwqDCoMKgIHBhcmVudCA9IHNlbGYuZmls bF9wYXJlbnQoKQo+IC3CoMKgwqDCoMKgwqDCoCBwYXJlbnRfaW5jbHVkZSA9IHNlbGYuZmlsbF9p bmNsdWRlX3BhcmVudCgpCj4gLQo+IC3CoMKgwqDCoMKgwqDCoCBtYWluX2MgPSBtYWluX2MucmVw bGFjZSgiJSVNT05JVE9SX1RZUEUlJSIsIG1vbml0b3JfdHlwZSkKPiAtwqDCoMKgwqDCoMKgwqAg bWFpbl9jID0gbWFpbl9jLnJlcGxhY2UoIiUlTUlOX1RZUEUlJSIsIG1pbl90eXBlKQo+IC3CoMKg wqDCoMKgwqDCoCBtYWluX2MgPSBtYWluX2MucmVwbGFjZSgiJSVNT0RFTF9OQU1FJSUiLCBzZWxm Lm5hbWUpCj4gLcKgwqDCoMKgwqDCoMKgIG1haW5fYyA9IG1haW5fYy5yZXBsYWNlKCIlJU5SX0VW RU5UUyUlIiwgc3RyKG5yX2V2ZW50cykpCj4gLcKgwqDCoMKgwqDCoMKgIG1haW5fYyA9IG1haW5f Yy5yZXBsYWNlKCIlJVRSQUNFUE9JTlRfSEFORExFUlNfU0tFTCUlIiwKPiB0cmFjZXBvaW50X2hh bmRsZXJzKQo+IC3CoMKgwqDCoMKgwqDCoCBtYWluX2MgPSBtYWluX2MucmVwbGFjZSgiJSVUUkFD RVBPSU5UX0FUVEFDSCUlIiwKPiB0cmFjZXBvaW50X2F0dGFjaCkKPiAtwqDCoMKgwqDCoMKgwqAg bWFpbl9jID0gbWFpbl9jLnJlcGxhY2UoIiUlVFJBQ0VQT0lOVF9ERVRBQ0glJSIsCj4gdHJhY2Vw b2ludF9kZXRhY2gpCj4gLcKgwqDCoMKgwqDCoMKgIG1haW5fYyA9IG1haW5fYy5yZXBsYWNlKCIl JURFU0NSSVBUSU9OJSUiLCBzZWxmLmRlc2NyaXB0aW9uKQo+IC3CoMKgwqDCoMKgwqDCoCBtYWlu X2MgPSBtYWluX2MucmVwbGFjZSgiJSVQQVJFTlQlJSIsIHBhcmVudCkKPiAtwqDCoMKgwqDCoMKg wqAgbWFpbl9jID0gbWFpbl9jLnJlcGxhY2UoIiUlSU5DTFVERV9QQVJFTlQlJSIsCj4gcGFyZW50 X2luY2x1ZGUpCj4gLQo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gbWFpbl9jCj4gLQo+IMKgwqDC oMKgIGRlZiBmaWxsX21vZGVsX2hfaGVhZGVyKHNlbGYpOgo+IMKgwqDCoMKgwqDCoMKgwqAgYnVm ZiA9IFtdCj4gwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAgKi8iKQo+IEBAIC0yMjYsMTQ3ICsxMTUsMTUgQEAgY2xhc3MgZG90 MmsoRG90MmMpOgo+IMKgwqDCoMKgwqDCoMKgwqAgYnVmZi5hcHBlbmQoIgnCoMKgwqDCoCBUUF9B UkdTKCVzKSIgJSB0cF9hcmdzX2MpCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gJ1xuJy5qb2lu KGJ1ZmYpCj4gwqAKPiAtwqDCoMKgIGRlZiBmaWxsX21vbml0b3JfZGVwcyhzZWxmKToKPiAtwqDC oMKgwqDCoMKgwqAgYnVmZiA9IFtdCj4gLcKgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCIJIyBY WFg6IGFkZCBkZXBlbmRlbmNpZXMgaWYgdGhlcmUiKQo+IC3CoMKgwqDCoMKgwqDCoCBpZiBzZWxm LnBhcmVudDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiCWRlcGVuZHMg b24gUlZfTU9OXyVzIiAlCj4gc2VsZi5wYXJlbnQudXBwZXIoKSkKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBidWZmLmFwcGVuZCgiCWRlZmF1bHQgeSIpCj4gLcKgwqDCoMKgwqDCoMKgIHJldHVy biAnXG4nLmpvaW4oYnVmZikKPiAtCj4gLcKgwqDCoCBkZWYgZmlsbF90cmFjZV9oKHNlbGYpOgo+ IC3CoMKgwqDCoMKgwqDCoCB0cmFjZV9oID0gc2VsZi50cmFjZV9oCj4gLcKgwqDCoMKgwqDCoMKg IG1vbml0b3JfY2xhc3MgPSBzZWxmLmZpbGxfbW9uaXRvcl9jbGFzcygpCj4gLcKgwqDCoMKgwqDC oMKgIG1vbml0b3JfY2xhc3NfdHlwZSA9IHNlbGYuZmlsbF9tb25pdG9yX2NsYXNzX3R5cGUoKQo+ IC3CoMKgwqDCoMKgwqDCoCB0cmFjZXBvaW50X2FyZ3Nfc2tlbF9ldmVudCA9Cj4gc2VsZi5maWxs X3RyYWNlcG9pbnRfYXJnc19za2VsKCJldmVudCIpCj4gLcKgwqDCoMKgwqDCoMKgIHRyYWNlcG9p bnRfYXJnc19za2VsX2Vycm9yID0KPiBzZWxmLmZpbGxfdHJhY2Vwb2ludF9hcmdzX3NrZWwoImVy cm9yIikKPiAtwqDCoMKgwqDCoMKgwqAgdHJhY2VfaCA9IHRyYWNlX2gucmVwbGFjZSgiJSVNT0RF TF9OQU1FJSUiLCBzZWxmLm5hbWUpCj4gLcKgwqDCoMKgwqDCoMKgIHRyYWNlX2ggPSB0cmFjZV9o LnJlcGxhY2UoIiUlTU9ERUxfTkFNRV9VUCUlIiwKPiBzZWxmLm5hbWUudXBwZXIoKSkKPiAtwqDC oMKgwqDCoMKgwqAgdHJhY2VfaCA9IHRyYWNlX2gucmVwbGFjZSgiJSVNT05JVE9SX0NMQVNTJSUi LAo+IG1vbml0b3JfY2xhc3MpCj4gLcKgwqDCoMKgwqDCoMKgIHRyYWNlX2ggPSB0cmFjZV9oLnJl cGxhY2UoIiUlTU9OSVRPUl9DTEFTU19UWVBFJSUiLAo+IG1vbml0b3JfY2xhc3NfdHlwZSkKPiAt wqDCoMKgwqDCoMKgwqAgdHJhY2VfaCA9IHRyYWNlX2gucmVwbGFjZSgiJSVUUkFDRVBPSU5UX0FS R1NfU0tFTF9FVkVOVCUlIiwKPiB0cmFjZXBvaW50X2FyZ3Nfc2tlbF9ldmVudCkKPiAtwqDCoMKg wqDCoMKgwqAgdHJhY2VfaCA9IHRyYWNlX2gucmVwbGFjZSgiJSVUUkFDRVBPSU5UX0FSR1NfU0tF TF9FUlJPUiUlIiwKPiB0cmFjZXBvaW50X2FyZ3Nfc2tlbF9lcnJvcikKPiAtwqDCoMKgwqDCoMKg wqAgcmV0dXJuIHRyYWNlX2gKPiAtCj4gLcKgwqDCoCBkZWYgZmlsbF9rY29uZmlnKHNlbGYpOgo+ IC3CoMKgwqDCoMKgwqDCoCBrY29uZmlnID0gc2VsZi5rY29uZmlnCj4gLcKgwqDCoMKgwqDCoMKg IG1vbml0b3JfY2xhc3NfdHlwZSA9IHNlbGYuZmlsbF9tb25pdG9yX2NsYXNzX3R5cGUoKQo+IC3C oMKgwqDCoMKgwqDCoCBtb25pdG9yX2RlcHMgPSBzZWxmLmZpbGxfbW9uaXRvcl9kZXBzKCkKPiAt wqDCoMKgwqDCoMKgwqAga2NvbmZpZyA9IGtjb25maWcucmVwbGFjZSgiJSVNT0RFTF9OQU1FJSUi LCBzZWxmLm5hbWUpCj4gLcKgwqDCoMKgwqDCoMKgIGtjb25maWcgPSBrY29uZmlnLnJlcGxhY2Uo IiUlTU9ERUxfTkFNRV9VUCUlIiwKPiBzZWxmLm5hbWUudXBwZXIoKSkKPiAtwqDCoMKgwqDCoMKg wqAga2NvbmZpZyA9IGtjb25maWcucmVwbGFjZSgiJSVNT05JVE9SX0NMQVNTX1RZUEUlJSIsCj4g bW9uaXRvcl9jbGFzc190eXBlKQo+IC3CoMKgwqDCoMKgwqDCoCBrY29uZmlnID0ga2NvbmZpZy5y ZXBsYWNlKCIlJURFU0NSSVBUSU9OJSUiLAo+IHNlbGYuZGVzY3JpcHRpb24pCj4gLcKgwqDCoMKg wqDCoMKgIGtjb25maWcgPSBrY29uZmlnLnJlcGxhY2UoIiUlTU9OSVRPUl9ERVBTJSUiLCBtb25p dG9yX2RlcHMpCj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiBrY29uZmlnCj4gLQo+IC3CoMKgwqAg ZGVmIGZpbGxfbWFpbl9jb250YWluZXJfaChzZWxmKToKPiAtwqDCoMKgwqDCoMKgwqAgbWFpbl9o ID0gc2VsZi5tYWluX2gKPiAtwqDCoMKgwqDCoMKgwqAgbWFpbl9oID0gbWFpbl9oLnJlcGxhY2Uo IiUlTU9ERUxfTkFNRSUlIiwgc2VsZi5uYW1lKQo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gbWFp bl9oCj4gLQo+IC3CoMKgwqAgZGVmIF9fcGF0Y2hfZmlsZShzZWxmLCBmaWxlLCBtYXJrZXIsIGxp bmUpOgo+IC3CoMKgwqDCoMKgwqDCoCBmaWxlX3RvX3BhdGNoID0gb3MucGF0aC5qb2luKHNlbGYu cnZfZGlyLCBmaWxlKQo+IC3CoMKgwqDCoMKgwqDCoCBjb250ZW50ID0gc2VsZi5fX3JlYWRfZmls ZShmaWxlX3RvX3BhdGNoKQo+IC3CoMKgwqDCoMKgwqDCoCBjb250ZW50ID0gY29udGVudC5yZXBs YWNlKG1hcmtlciwgbGluZSArICJcbiIgKyBtYXJrZXIpCj4gLcKgwqDCoMKgwqDCoMKgIHNlbGYu X193cml0ZV9maWxlKGZpbGVfdG9fcGF0Y2gsIGNvbnRlbnQpCj4gLQo+IC3CoMKgwqAgZGVmIGZp bGxfdHJhY2Vwb2ludF90b29sdGlwKHNlbGYpOgo+IC3CoMKgwqDCoMKgwqDCoCBtb25pdG9yX2Ns YXNzX3R5cGUgPSBzZWxmLmZpbGxfbW9uaXRvcl9jbGFzc190eXBlKCkKPiAtwqDCoMKgwqDCoMKg wqAgaWYgc2VsZi5hdXRvX3BhdGNoOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuX19w YXRjaF9maWxlKCJydl90cmFjZS5oIiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIvLyBBZGQgbmV3IG1vbml0b3JzIGJhc2VkIG9uIENP TkZJR18lcwo+IGhlcmUiICUgbW9uaXRvcl9jbGFzc190eXBlLAo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIiNpbmNsdWRlIDxtb25pdG9y cy8lcy8lc190cmFjZS5oPiIgJQo+IChzZWxmLm5hbWUsIHNlbGYubmFtZSkpCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuICLCoCAtIFBhdGNoaW5nICVzL3J2X3RyYWNlLmgsIGRvdWJs ZSBjaGVjayB0aGUKPiByZXN1bHQiICUgc2VsZi5ydl9kaXIKPiAtCj4gLcKgwqDCoMKgwqDCoMKg IHJldHVybiAiIiLCoCAtIEVkaXQgJXMvcnZfdHJhY2UuaDoKPiAtQWRkIHRoaXMgbGluZSB3aGVy ZSBvdGhlciB0cmFjZXBvaW50cyBhcmUgaW5jbHVkZWQgYW5kICVzIGlzCj4gZGVmaW5lZDoKPiAt I2luY2x1ZGUgPG1vbml0b3JzLyVzLyVzX3RyYWNlLmg+Cj4gLSIiIiAlIChzZWxmLnJ2X2Rpciwg bW9uaXRvcl9jbGFzc190eXBlLCBzZWxmLm5hbWUsIHNlbGYubmFtZSkKPiAtCj4gLcKgwqDCoCBk ZWYgZmlsbF9rY29uZmlnX3Rvb2x0aXAoc2VsZik6Cj4gLcKgwqDCoMKgwqDCoMKgIGlmIHNlbGYu YXV0b19wYXRjaDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLl9fcGF0Y2hfZmlsZSgi S2NvbmZpZyIsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAiIyBBZGQgbmV3IG1vbml0b3JzIGhlcmUiLAo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInNvdXJjZQo+IFwia2VybmVs L3RyYWNlL3J2L21vbml0b3JzLyVzL0tjb25maWdcIiIgJSAoc2VsZi5uYW1lKSkKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gIsKgIC0gUGF0Y2hpbmcgJXMvS2NvbmZpZywgZG91Ymxl IGNoZWNrIHRoZQo+IHJlc3VsdCIgJSBzZWxmLnJ2X2Rpcgo+IC0KPiAtwqDCoMKgwqDCoMKgwqAg cmV0dXJuICIiIsKgIC0gRWRpdCAlcy9LY29uZmlnOgo+IC1BZGQgdGhpcyBsaW5lIHdoZXJlIG90 aGVyIG1vbml0b3JzIGFyZSBpbmNsdWRlZDoKPiAtc291cmNlIFwia2VybmVsL3RyYWNlL3J2L21v bml0b3JzLyVzL0tjb25maWdcIgo+IC0iIiIgJSAoc2VsZi5ydl9kaXIsIHNlbGYubmFtZSkKPiAt Cj4gLcKgwqDCoCBkZWYgZmlsbF9tYWtlZmlsZV90b29sdGlwKHNlbGYpOgo+IC3CoMKgwqDCoMKg wqDCoCBuYW1lID0gc2VsZi5uYW1lCj4gLcKgwqDCoMKgwqDCoMKgIG5hbWVfdXAgPSBuYW1lLnVw cGVyKCkKPiAtwqDCoMKgwqDCoMKgwqAgaWYgc2VsZi5hdXRvX3BhdGNoOgo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNlbGYuX19wYXRjaF9maWxlKCJNYWtlZmlsZSIsCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiIyBBZGQgbmV3IG1v bml0b3JzIGhlcmUiLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgIm9iai0kKENPTkZJR19SVl9NT05fJXMpICs9Cj4gbW9uaXRvcnMvJXMv JXMubyIgJSAobmFtZV91cCwgbmFtZSwgbmFtZSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuICLCoCAtIFBhdGNoaW5nICVzL01ha2VmaWxlLCBkb3VibGUgY2hlY2sgdGhlCj4gcmVz dWx0IiAlIHNlbGYucnZfZGlyCj4gLQo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gIiIiwqAgLSBF ZGl0ICVzL01ha2VmaWxlOgo+IC1BZGQgdGhpcyBsaW5lIHdoZXJlIG90aGVyIG1vbml0b3JzIGFy ZSBpbmNsdWRlZDoKPiAtb2JqLSQoQ09ORklHX1JWX01PTl8lcykgKz0gbW9uaXRvcnMvJXMvJXMu bwo+IC0iIiIgJSAoc2VsZi5ydl9kaXIsIG5hbWVfdXAsIG5hbWUsIG5hbWUpCj4gLQo+IC3CoMKg wqAgZGVmIGZpbGxfbW9uaXRvcl90b29sdGlwKHNlbGYpOgo+IC3CoMKgwqDCoMKgwqDCoCBpZiBz ZWxmLmF1dG9fcGF0Y2g6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuICLCoCAtIE1v bml0b3IgY3JlYXRlZCBpbiAlcy9tb25pdG9ycy8lcyIgJQo+IChzZWxmLnJ2X2Rpciwgc2VsZi4g bmFtZSkKPiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuICLCoCAtIE1vdmUgJXMvIHRvIHRoZSBrZXJu ZWwncyBtb25pdG9yIGRpcmVjdG9yeQo+ICglcy9tb25pdG9ycykiICUgKHNlbGYubmFtZSwgc2Vs Zi5ydl9kaXIpCj4gLQo+IC3CoMKgwqAgZGVmIF9fY3JlYXRlX2RpcmVjdG9yeShzZWxmKToKPiAt wqDCoMKgwqDCoMKgwqAgcGF0aCA9IHNlbGYubmFtZQo+IC3CoMKgwqDCoMKgwqDCoCBpZiBzZWxm LmF1dG9fcGF0Y2g6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGF0aCA9IG9zLnBhdGguam9p bihzZWxmLnJ2X2RpciwgIm1vbml0b3JzIiwgcGF0aCkKPiAtwqDCoMKgwqDCoMKgwqAgdHJ5Ogo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9zLm1rZGlyKHBhdGgpCj4gLcKgwqDCoMKgwqDCoMKg IGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu Cj4gLcKgwqDCoMKgwqDCoMKgIGV4Y2VwdDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcmlu dCgiRmFpbCBjcmVhdGluZyB0aGUgb3V0cHV0IGRpcjogJXMiICUgc2VsZi5uYW1lKQo+IC0KPiAt wqDCoMKgIGRlZiBfX3dyaXRlX2ZpbGUoc2VsZiwgZmlsZV9uYW1lLCBjb250ZW50KToKPiAtwqDC oMKgwqDCoMKgwqAgdHJ5Ogo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZpbGUgPSBvcGVuKGZp bGVfbmFtZSwgJ3cnKQo+IC3CoMKgwqDCoMKgwqDCoCBleGNlcHQ6Cj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcHJpbnQoIkZhaWwgd3JpdGluZyB0byBmaWxlOiAlcyIgJSBmaWxlX25hbWUpCj4g LQo+IC3CoMKgwqDCoMKgwqDCoCBmaWxlLndyaXRlKGNvbnRlbnQpCj4gLQo+IC3CoMKgwqDCoMKg wqDCoCBmaWxlLmNsb3NlKCkKPiAtCj4gLcKgwqDCoCBkZWYgX19jcmVhdGVfZmlsZShzZWxmLCBm aWxlX25hbWUsIGNvbnRlbnQpOgo+IC3CoMKgwqDCoMKgwqDCoCBwYXRoID0gIiVzLyVzIiAlIChz ZWxmLm5hbWUsIGZpbGVfbmFtZSkKPiAtwqDCoMKgwqDCoMKgwqAgaWYgc2VsZi5hdXRvX3BhdGNo Ogo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5ydl9k aXIsICJtb25pdG9ycyIsIHBhdGgpCj4gLcKgwqDCoMKgwqDCoMKgIHNlbGYuX193cml0ZV9maWxl KHBhdGgsIGNvbnRlbnQpCj4gLQo+IC3CoMKgwqAgZGVmIF9fZ2V0X21haW5fbmFtZShzZWxmKToK PiAtwqDCoMKgwqDCoMKgwqAgcGF0aCA9ICIlcy8lcyIgJSAoc2VsZi5uYW1lLCAibWFpbi5jIikK PiAtwqDCoMKgwqDCoMKgwqAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAibWFpbi5jIgo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4g Il9fbWFpbi5jIgo+IC0KPiAtwqDCoMKgIGRlZiBwcmludF9maWxlcyhzZWxmKToKPiAtwqDCoMKg wqDCoMKgwqAgbWFpbl9jID0gc2VsZi5maWxsX21haW5fYygpCj4gLQo+IC3CoMKgwqDCoMKgwqDC oCBzZWxmLl9fY3JlYXRlX2RpcmVjdG9yeSgpCj4gLQo+IC3CoMKgwqDCoMKgwqDCoCBwYXRoID0g IiVzLmMiICUgc2VsZi5uYW1lCj4gLcKgwqDCoMKgwqDCoMKgIHNlbGYuX19jcmVhdGVfZmlsZShw YXRoLCBtYWluX2MpCj4gK8KgwqDCoCBkZWYgZmlsbF9tYWluX2Moc2VsZik6Cj4gK8KgwqDCoMKg wqDCoMKgIG1haW5fYyA9IHN1cGVyKCkuZmlsbF9tYWluX2MoKQo+IMKgCj4gLcKgwqDCoMKgwqDC oMKgIGlmIHNlbGYuY29udGFpbmVyOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1haW5faCA9 IHNlbGYuZmlsbF9tYWluX2NvbnRhaW5lcl9oKCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw YXRoID0gIiVzLmgiICUgc2VsZi5uYW1lCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5f X2NyZWF0ZV9maWxlKHBhdGgsIG1haW5faCkKPiAtwqDCoMKgwqDCoMKgwqAgZWxzZToKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBtb2RlbF9oID0gc2VsZi5maWxsX21vZGVsX2goKQo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHBhdGggPSAiJXMuaCIgJSBzZWxmLm5hbWUKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzZWxmLl9fY3JlYXRlX2ZpbGUocGF0aCwgbW9kZWxfaCkKPiArwqDCoMKg wqDCoMKgwqAgbWluX3R5cGUgPSBzZWxmLmdldF9taW5pbXVuX3R5cGUoKQo+ICvCoMKgwqDCoMKg wqDCoCBucl9ldmVudHMgPSBsZW4oc2VsZi5ldmVudHMpCj4gK8KgwqDCoMKgwqDCoMKgIG1vbml0 b3JfdHlwZSA9IHNlbGYuZmlsbF9tb25pdG9yX3R5cGUoKQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdHJhY2VfaCA9IHNlbGYuZmlsbF90cmFjZV9oKCkKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwYXRoID0gIiVzX3RyYWNlLmgiICUgc2VsZi5uYW1lCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc2VsZi5fX2NyZWF0ZV9maWxlKHBhdGgsIHRyYWNlX2gpCj4gK8KgwqDCoMKgwqDC oMKgIG1haW5fYyA9IG1haW5fYy5yZXBsYWNlKCIlJU1JTl9UWVBFJSUiLCBtaW5fdHlwZSkKPiAr wqDCoMKgwqDCoMKgwqAgbWFpbl9jID0gbWFpbl9jLnJlcGxhY2UoIiUlTlJfRVZFTlRTJSUiLCBz dHIobnJfZXZlbnRzKSkKPiArwqDCoMKgwqDCoMKgwqAgbWFpbl9jID0gbWFpbl9jLnJlcGxhY2Uo IiUlTU9OSVRPUl9UWVBFJSUiLCBtb25pdG9yX3R5cGUpCj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAg a2NvbmZpZyA9IHNlbGYuZmlsbF9rY29uZmlnKCkKPiAtwqDCoMKgwqDCoMKgwqAgc2VsZi5fX2Ny ZWF0ZV9maWxlKCJLY29uZmlnIiwga2NvbmZpZykKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIG1h aW5fYwo+IGRpZmYgLS1naXQgYS90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZ2VuZXJh dG9yLnB5Cj4gYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZ2VuZXJhdG9yLnB5Cj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjE5ZDAwNzhhMzgwMwo+ IC0tLSAvZGV2L251bGwKPiArKysgYi90b29scy92ZXJpZmljYXRpb24vcnZnZW4vcnZnZW4vZ2Vu ZXJhdG9yLnB5Cj4gQEAgLTAsMCArMSwyNjQgQEAKPiArIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwo+ ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArIwo+ICsjIENvcHly aWdodCAoQykgMjAxOS0yMDIyIFJlZCBIYXQsIEluYy4gRGFuaWVsIEJyaXN0b3QgZGUgT2xpdmVp cmEKPiA8YnJpc3RvdEBrZXJuZWwub3JnPgo+ICsjCj4gKyMgQWJ0cmFjdCBjbGFzcyBmb3IgZ2Vu ZXJhdGluZyBrZXJuZWwgcnVudGltZSB2ZXJpZmljYXRpb24gbW9uaXRvcnMKPiBmcm9tIHNwZWNp ZmljYXRpb24gZmlsZQo+ICsKPiAraW1wb3J0IHBsYXRmb3JtCj4gK2ltcG9ydCBvcwo+ICsKPiAr Cj4gK2NsYXNzIFJWR2VuZXJhdG9yOgo+ICvCoMKgwqAgcnZfZGlyID0gImtlcm5lbC90cmFjZS9y diIKPiArCj4gK8KgwqDCoCBkZWYgX19pbml0X18oc2VsZiwgZXh0cmFfcGFyYW1zPXt9KToKPiAr wqDCoMKgwqDCoMKgwqAgc2VsZi5uYW1lID0gZXh0cmFfcGFyYW1zLmdldCgibW9kZWxfbmFtZSIp Cj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYucGFyZW50ID0gZXh0cmFfcGFyYW1zLmdldCgicGFyZW50 IikKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5hYnNfdGVtcGxhdGVfZGlyID0gXAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAi dGVtcGxhdGVzIiwKPiBzZWxmLnRlbXBsYXRlX2RpcikKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5t YWluX2MgPSBzZWxmLl9yZWFkX3RlbXBsYXRlX2ZpbGUoIm1haW4uYyIpCj4gK8KgwqDCoMKgwqDC oMKgIHNlbGYua2NvbmZpZyA9IHNlbGYuX3JlYWRfdGVtcGxhdGVfZmlsZSgiS2NvbmZpZyIpCj4g K8KgwqDCoMKgwqDCoMKgIHNlbGYuZGVzY3JpcHRpb24gPSBleHRyYV9wYXJhbXMuZ2V0KCJkZXNj cmlwdGlvbiIsCj4gc2VsZi5uYW1lKSBvciAiYXV0by1nZW5lcmF0ZWQiCj4gK8KgwqDCoMKgwqDC oMKgIHNlbGYuYXV0b19wYXRjaCA9IGV4dHJhX3BhcmFtcy5nZXQoImF1dG9fcGF0Y2giKQo+ICvC oMKgwqDCoMKgwqDCoCBpZiBzZWxmLmF1dG9fcGF0Y2g6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc2VsZi5fX2ZpbGxfcnZfa2VybmVsX2RpcigpCj4gKwo+ICvCoMKgwqAgZGVmIF9fZmlsbF9y dl9rZXJuZWxfZGlyKHNlbGYpOgo+ICsKPiArwqDCoMKgwqDCoMKgwqAgIyBmaXJzdCB0cnkgaWYg d2UgYXJlIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB0cmVlIHJvb3QKPiArwqDCoMKgwqDCoMKgwqAg aWYgb3MucGF0aC5leGlzdHMoc2VsZi5ydl9kaXIpOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybgo+ICsKPiArwqDCoMKgwqDCoMKgwqAgIyBvZmZzZXQgaWYgd2UgYXJlIHJ1bm5pbmcg aW5zaWRlIHRoZSBrZXJuZWwgdHJlZSBmcm9tCj4gdmVyaWZpY2F0aW9uL2RvdDIKPiArwqDCoMKg wqDCoMKgwqAga2VybmVsX3BhdGggPSBvcy5wYXRoLmpvaW4oIi4uLy4uIiwgc2VsZi5ydl9kaXIp Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBpZiBvcy5wYXRoLmV4aXN0cyhrZXJuZWxfcGF0aCk6Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5ydl9kaXIgPSBrZXJuZWxfcGF0aAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybgo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgcGxhdGZv cm0uc3lzdGVtKCkgIT0gIkxpbnV4IjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYWlzZSBP U0Vycm9yKCJJIGNhbiBvbmx5IHJ1biBvbiBMaW51eC4iKQo+ICsKPiArwqDCoMKgwqDCoMKgwqAg a2VybmVsX3BhdGggPSBvcy5wYXRoLmpvaW4oIi9saWIvbW9kdWxlcy8lcy9idWlsZCIgJQo+IHBs YXRmb3JtLnJlbGVhc2UoKSwgc2VsZi5ydl9kaXIpCj4gKwo+ICvCoMKgwqDCoMKgwqDCoCAjIGlm IHRoZSBjdXJyZW50IGtlcm5lbCBpcyBmcm9tIGEgZGlzdHJvIHRoaXMgbWF5IG5vdCBiZSBhCj4g ZnVsbCBrZXJuZWwgdHJlZQo+ICvCoMKgwqDCoMKgwqDCoCAjIHZlcmlmeSB0aGF0IG9uZSBvZiB0 aGUgZmlsZXMgd2UgYXJlIGdvaW5nIHRvIG1vZGlmeSBpcwo+IGF2YWlsYWJsZQo+ICvCoMKgwqDC oMKgwqDCoCBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oa2VybmVsX3BhdGgsICJydl90 cmFjZS5oIikpOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYucnZfZGlyID0ga2VybmVs X3BhdGgKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4KPiArCj4gK8KgwqDCoMKgwqDC oMKgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKCJDb3VsZCBub3QgZmluZCB0aGUgcnYgZGlyZWN0 b3J5LCBkbwo+IHlvdSBoYXZlIHRoZSBrZXJuZWwgc291cmNlIGluc3RhbGxlZD8iKQo+ICsKPiAr wqDCoMKgIGRlZiBfcmVhZF9maWxlKHNlbGYsIHBhdGgpOgo+ICvCoMKgwqDCoMKgwqDCoCB0cnk6 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmQgPSBvcGVuKHBhdGgsICdyJykKPiArwqDCoMKg wqDCoMKgwqAgZXhjZXB0IE9TRXJyb3I6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFpc2Ug RXhjZXB0aW9uKCJDYW5ub3Qgb3BlbiB0aGUgZmlsZTogJXMiICUgcGF0aCkKPiArCj4gK8KgwqDC oMKgwqDCoMKgIGNvbnRlbnQgPSBmZC5yZWFkKCkKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGZkLmNs b3NlKCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGNvbnRlbnQKPiArCj4gK8KgwqDCoCBkZWYg X3JlYWRfdGVtcGxhdGVfZmlsZShzZWxmLCBmaWxlKToKPiArwqDCoMKgwqDCoMKgwqAgdHJ5Ogo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5hYnNfdGVt cGxhdGVfZGlyLCBmaWxlKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBzZWxmLl9y ZWFkX2ZpbGUocGF0aCkKPiArwqDCoMKgwqDCoMKgwqAgZXhjZXB0IEV4Y2VwdGlvbjoKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAjIFNwZWNpZmljIHRlbXBsYXRlIGZpbGUgbm90IGZvdW5kLiBU cnkgdGhlIGdlbmVyaWMKPiB0ZW1wbGF0ZSBmaWxlIGluIHRoZSB0ZW1wbGF0ZS8KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAjIGRpcmVjdG9yeSwgd2hpY2ggaXMgb25lIGxldmVsIHVwCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmFic190ZW1wbGF0 ZV9kaXIsICIuLiIsIGZpbGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHNlbGYu X3JlYWRfZmlsZShwYXRoKQo+ICsKPiArwqDCoMKgIGRlZiBmaWxsX3BhcmVudChzZWxmKToKPiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuICImcnZfJXMiICUgc2VsZi5wYXJlbnQgaWYgc2VsZi5wYXJl bnQgZWxzZSAiTlVMTCIKPiArCj4gK8KgwqDCoCBkZWYgZmlsbF9pbmNsdWRlX3BhcmVudChzZWxm KToKPiArwqDCoMKgwqDCoMKgwqAgaWYgc2VsZi5wYXJlbnQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuICIjaW5jbHVkZSA8bW9uaXRvcnMvJXMvJXMuaD5cbiIgJSAoc2VsZi5wYXJl bnQsCj4gc2VsZi5wYXJlbnQpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAiIgo+ICsKPiArwqDC oMKgIGRlZiBmaWxsX3RyYWNlcG9pbnRfaGFuZGxlcnNfc2tlbChzZWxmKToKPiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuICJOb3RJbXBsZW1lbnRlZCIKPiArCj4gK8KgwqDCoCBkZWYgZmlsbF90cmFj ZXBvaW50X2F0dGFjaF9wcm9iZShzZWxmKToKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuICJOb3RJ bXBsZW1lbnRlZCIKPiArCj4gK8KgwqDCoCBkZWYgZmlsbF90cmFjZXBvaW50X2RldGFjaF9oZWxw ZXIoc2VsZik6Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAiTm90SW1wbGVtZW50ZWQiCj4gKwo+ ICvCoMKgwqAgZGVmIGZpbGxfbWFpbl9jKHNlbGYpOgo+ICvCoMKgwqDCoMKgwqDCoCBtYWluX2Mg PSBzZWxmLm1haW5fYwo+ICvCoMKgwqDCoMKgwqDCoCB0cmFjZXBvaW50X2hhbmRsZXJzID0gc2Vs Zi5maWxsX3RyYWNlcG9pbnRfaGFuZGxlcnNfc2tlbCgpCj4gK8KgwqDCoMKgwqDCoMKgIHRyYWNl cG9pbnRfYXR0YWNoID0gc2VsZi5maWxsX3RyYWNlcG9pbnRfYXR0YWNoX3Byb2JlKCkKPiArwqDC oMKgwqDCoMKgwqAgdHJhY2Vwb2ludF9kZXRhY2ggPSBzZWxmLmZpbGxfdHJhY2Vwb2ludF9kZXRh Y2hfaGVscGVyKCkKPiArwqDCoMKgwqDCoMKgwqAgcGFyZW50ID0gc2VsZi5maWxsX3BhcmVudCgp Cj4gK8KgwqDCoMKgwqDCoMKgIHBhcmVudF9pbmNsdWRlID0gc2VsZi5maWxsX2luY2x1ZGVfcGFy ZW50KCkKPiArCj4gK8KgwqDCoMKgwqDCoMKgIG1haW5fYyA9IG1haW5fYy5yZXBsYWNlKCIlJU1P REVMX05BTUUlJSIsIHNlbGYubmFtZSkKPiArwqDCoMKgwqDCoMKgwqAgbWFpbl9jID0gbWFpbl9j LnJlcGxhY2UoIiUlVFJBQ0VQT0lOVF9IQU5ETEVSU19TS0VMJSUiLAo+IHRyYWNlcG9pbnRfaGFu ZGxlcnMpCj4gK8KgwqDCoMKgwqDCoMKgIG1haW5fYyA9IG1haW5fYy5yZXBsYWNlKCIlJVRSQUNF UE9JTlRfQVRUQUNIJSUiLAo+IHRyYWNlcG9pbnRfYXR0YWNoKQo+ICvCoMKgwqDCoMKgwqDCoCBt YWluX2MgPSBtYWluX2MucmVwbGFjZSgiJSVUUkFDRVBPSU5UX0RFVEFDSCUlIiwKPiB0cmFjZXBv aW50X2RldGFjaCkKPiArwqDCoMKgwqDCoMKgwqAgbWFpbl9jID0gbWFpbl9jLnJlcGxhY2UoIiUl REVTQ1JJUFRJT04lJSIsIHNlbGYuZGVzY3JpcHRpb24pCj4gK8KgwqDCoMKgwqDCoMKgIG1haW5f YyA9IG1haW5fYy5yZXBsYWNlKCIlJVBBUkVOVCUlIiwgcGFyZW50KQo+ICvCoMKgwqDCoMKgwqDC oCBtYWluX2MgPSBtYWluX2MucmVwbGFjZSgiJSVJTkNMVURFX1BBUkVOVCUlIiwKPiBwYXJlbnRf aW5jbHVkZSkKPiArCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBtYWluX2MKPiArCj4gK8KgwqDC oCBkZWYgZmlsbF9tb2RlbF9oKHNlbGYpOgo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gIk5vdElt cGxlbWVudGVkIgo+ICsKPiArwqDCoMKgIGRlZiBmaWxsX21vbml0b3JfY2xhc3NfdHlwZShzZWxm KToKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuICJOb3RJbXBsZW1lbnRlZCIKPiArCj4gK8KgwqDC oCBkZWYgZmlsbF9tb25pdG9yX2NsYXNzKHNlbGYpOgo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g Ik5vdEltcGxlbWVudGVkIgo+ICsKPiArwqDCoMKgIGRlZiBmaWxsX3RyYWNlcG9pbnRfYXJnc19z a2VsKHNlbGYsIHRwX3R5cGUpOgo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gIk5vdEltcGxlbWVu dGVkIgo+ICsKPiArwqDCoMKgIGRlZiBmaWxsX21vbml0b3JfZGVwcyhzZWxmKToKPiArwqDCoMKg wqDCoMKgwqAgYnVmZiA9IFtdCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZmYuYXBwZW5kKCIJIyBYWFg6 IGFkZCBkZXBlbmRlbmNpZXMgaWYgdGhlcmUiKQo+ICvCoMKgwqDCoMKgwqDCoCBpZiBzZWxmLnBh cmVudDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWZmLmFwcGVuZCgiCWRlcGVuZHMgb24g UlZfTU9OXyVzIiAlCj4gc2VsZi5wYXJlbnQudXBwZXIoKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBidWZmLmFwcGVuZCgiCWRlZmF1bHQgeSIpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAn XG4nLmpvaW4oYnVmZikKPiArCj4gK8KgwqDCoCBkZWYgZmlsbF9rY29uZmlnKHNlbGYpOgo+ICvC oMKgwqDCoMKgwqDCoCBrY29uZmlnID0gc2VsZi5rY29uZmlnCj4gK8KgwqDCoMKgwqDCoMKgIG1v bml0b3JfY2xhc3NfdHlwZSA9IHNlbGYuZmlsbF9tb25pdG9yX2NsYXNzX3R5cGUoKQo+ICvCoMKg wqDCoMKgwqDCoCBtb25pdG9yX2RlcHMgPSBzZWxmLmZpbGxfbW9uaXRvcl9kZXBzKCkKPiArwqDC oMKgwqDCoMKgwqAga2NvbmZpZyA9IGtjb25maWcucmVwbGFjZSgiJSVNT0RFTF9OQU1FJSUiLCBz ZWxmLm5hbWUpCj4gK8KgwqDCoMKgwqDCoMKgIGtjb25maWcgPSBrY29uZmlnLnJlcGxhY2UoIiUl TU9ERUxfTkFNRV9VUCUlIiwKPiBzZWxmLm5hbWUudXBwZXIoKSkKPiArwqDCoMKgwqDCoMKgwqAg a2NvbmZpZyA9IGtjb25maWcucmVwbGFjZSgiJSVNT05JVE9SX0NMQVNTX1RZUEUlJSIsCj4gbW9u aXRvcl9jbGFzc190eXBlKQo+ICvCoMKgwqDCoMKgwqDCoCBrY29uZmlnID0ga2NvbmZpZy5yZXBs YWNlKCIlJURFU0NSSVBUSU9OJSUiLAo+IHNlbGYuZGVzY3JpcHRpb24pCj4gK8KgwqDCoMKgwqDC oMKgIGtjb25maWcgPSBrY29uZmlnLnJlcGxhY2UoIiUlTU9OSVRPUl9ERVBTJSUiLCBtb25pdG9y X2RlcHMpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBrY29uZmlnCj4gKwo+ICvCoMKgwqAgZGVm IF9fcGF0Y2hfZmlsZShzZWxmLCBmaWxlLCBtYXJrZXIsIGxpbmUpOgo+ICvCoMKgwqDCoMKgwqDC oCBmaWxlX3RvX3BhdGNoID0gb3MucGF0aC5qb2luKHNlbGYucnZfZGlyLCBmaWxlKQo+ICvCoMKg wqDCoMKgwqDCoCBjb250ZW50ID0gc2VsZi5fcmVhZF9maWxlKGZpbGVfdG9fcGF0Y2gpCj4gK8Kg wqDCoMKgwqDCoMKgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UobWFya2VyLCBsaW5lICsgIlxu IiArIG1hcmtlcikKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5fX3dyaXRlX2ZpbGUoZmlsZV90b19w YXRjaCwgY29udGVudCkKPiArCj4gK8KgwqDCoCBkZWYgZmlsbF90cmFjZXBvaW50X3Rvb2x0aXAo c2VsZik6Cj4gK8KgwqDCoMKgwqDCoMKgIG1vbml0b3JfY2xhc3NfdHlwZSA9IHNlbGYuZmlsbF9t b25pdG9yX2NsYXNzX3R5cGUoKQo+ICvCoMKgwqDCoMKgwqDCoCBpZiBzZWxmLmF1dG9fcGF0Y2g6 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5fX3BhdGNoX2ZpbGUoInJ2X3RyYWNlLmgi LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgIi8vIEFkZCBuZXcgbW9uaXRvcnMgYmFzZWQgb24gQ09ORklHXyVzCj4gaGVyZSIgJSBtb25p dG9yX2NsYXNzX3R5cGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAiI2luY2x1ZGUgPG1vbml0b3JzLyVzLyVzX3RyYWNlLmg+IiAlCj4g KHNlbGYubmFtZSwgc2VsZi5uYW1lKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g IsKgIC0gUGF0Y2hpbmcgJXMvcnZfdHJhY2UuaCwgZG91YmxlIGNoZWNrIHRoZQo+IHJlc3VsdCIg JSBzZWxmLnJ2X2Rpcgo+ICsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuICIiIsKgIC0gRWRpdCAl cy9ydl90cmFjZS5oOgo+ICtBZGQgdGhpcyBsaW5lIHdoZXJlIG90aGVyIHRyYWNlcG9pbnRzIGFy ZSBpbmNsdWRlZCBhbmQgJXMgaXMKPiBkZWZpbmVkOgo+ICsjaW5jbHVkZSA8bW9uaXRvcnMvJXMv JXNfdHJhY2UuaD4KPiArIiIiICUgKHNlbGYucnZfZGlyLCBtb25pdG9yX2NsYXNzX3R5cGUsIHNl bGYubmFtZSwgc2VsZi5uYW1lKQo+ICsKPiArwqDCoMKgIGRlZiBmaWxsX2tjb25maWdfdG9vbHRp cChzZWxmKToKPiArwqDCoMKgwqDCoMKgwqAgaWYgc2VsZi5hdXRvX3BhdGNoOgo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNlbGYuX19wYXRjaF9maWxlKCJLY29uZmlnIiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIjIEFkZCBuZXcg bW9uaXRvcnMgaGVyZSIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAic291cmNlCj4gXCJrZXJuZWwvdHJhY2UvcnYvbW9uaXRvcnMvJXMv S2NvbmZpZ1wiIiAlIChzZWxmLm5hbWUpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biAiwqAgLSBQYXRjaGluZyAlcy9LY29uZmlnLCBkb3VibGUgY2hlY2sgdGhlCj4gcmVzdWx0IiAl IHNlbGYucnZfZGlyCj4gKwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gIiIiwqAgLSBFZGl0ICVz L0tjb25maWc6Cj4gK0FkZCB0aGlzIGxpbmUgd2hlcmUgb3RoZXIgbW9uaXRvcnMgYXJlIGluY2x1 ZGVkOgo+ICtzb3VyY2UgXCJrZXJuZWwvdHJhY2UvcnYvbW9uaXRvcnMvJXMvS2NvbmZpZ1wiCj4g KyIiIiAlIChzZWxmLnJ2X2Rpciwgc2VsZi5uYW1lKQo+ICsKPiArwqDCoMKgIGRlZiBmaWxsX21h a2VmaWxlX3Rvb2x0aXAoc2VsZik6Cj4gK8KgwqDCoMKgwqDCoMKgIG5hbWUgPSBzZWxmLm5hbWUK PiArwqDCoMKgwqDCoMKgwqAgbmFtZV91cCA9IG5hbWUudXBwZXIoKQo+ICvCoMKgwqDCoMKgwqDC oCBpZiBzZWxmLmF1dG9fcGF0Y2g6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5fX3Bh dGNoX2ZpbGUoIk1ha2VmaWxlIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICIjIEFkZCBuZXcgbW9uaXRvcnMgaGVyZSIsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAib2JqLSQo Q09ORklHX1JWX01PTl8lcykgKz0KPiBtb25pdG9ycy8lcy8lcy5vIiAlIChuYW1lX3VwLCBuYW1l LCBuYW1lKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gIsKgIC0gUGF0Y2hpbmcg JXMvTWFrZWZpbGUsIGRvdWJsZSBjaGVjayB0aGUKPiByZXN1bHQiICUgc2VsZi5ydl9kaXIKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAiIiLCoCAtIEVkaXQgJXMvTWFrZWZpbGU6Cj4gK0Fk ZCB0aGlzIGxpbmUgd2hlcmUgb3RoZXIgbW9uaXRvcnMgYXJlIGluY2x1ZGVkOgo+ICtvYmotJChD T05GSUdfUlZfTU9OXyVzKSArPSBtb25pdG9ycy8lcy8lcy5vCj4gKyIiIiAlIChzZWxmLnJ2X2Rp ciwgbmFtZV91cCwgbmFtZSwgbmFtZSkKPiArCj4gK8KgwqDCoCBkZWYgZmlsbF9tb25pdG9yX3Rv b2x0aXAoc2VsZik6Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIHNlbGYuYXV0b19wYXRjaDoKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gIsKgIC0gTW9uaXRvciBjcmVhdGVkIGluICVzL21v bml0b3JzLyVzIiAlCj4gKHNlbGYucnZfZGlyLCBzZWxmLiBuYW1lKQo+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gIsKgIC0gTW92ZSAlcy8gdG8gdGhlIGtlcm5lbCdzIG1vbml0b3IgZGlyZWN0b3J5 Cj4gKCVzL21vbml0b3JzKSIgJSAoc2VsZi5uYW1lLCBzZWxmLnJ2X2RpcikKPiArCj4gK8KgwqDC oCBkZWYgX19jcmVhdGVfZGlyZWN0b3J5KHNlbGYpOgo+ICvCoMKgwqDCoMKgwqDCoCBwYXRoID0g c2VsZi5uYW1lCj4gK8KgwqDCoMKgwqDCoMKgIGlmIHNlbGYuYXV0b19wYXRjaDoKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYucnZfZGlyLCAibW9uaXRv cnMiLCBwYXRoKQo+ICvCoMKgwqDCoMKgwqDCoCB0cnk6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgb3MubWtkaXIocGF0aCkKPiArwqDCoMKgwqDCoMKgwqAgZXhjZXB0IEZpbGVFeGlzdHNFcnJv cjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4KPiArwqDCoMKgwqDCoMKgwqAgZXhj ZXB0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByaW50KCJGYWlsIGNyZWF0aW5nIHRoZSBv dXRwdXQgZGlyOiAlcyIgJSBzZWxmLm5hbWUpCj4gKwo+ICvCoMKgwqAgZGVmIF9fd3JpdGVfZmls ZShzZWxmLCBmaWxlX25hbWUsIGNvbnRlbnQpOgo+ICvCoMKgwqDCoMKgwqDCoCB0cnk6Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZmlsZSA9IG9wZW4oZmlsZV9uYW1lLCAndycpCj4gK8KgwqDC oMKgwqDCoMKgIGV4Y2VwdDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcmludCgiRmFpbCB3 cml0aW5nIHRvIGZpbGU6ICVzIiAlIGZpbGVfbmFtZSkKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGZp bGUud3JpdGUoY29udGVudCkKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGZpbGUuY2xvc2UoKQo+ICsK PiArwqDCoMKgIGRlZiBfY3JlYXRlX2ZpbGUoc2VsZiwgZmlsZV9uYW1lLCBjb250ZW50KToKPiAr wqDCoMKgwqDCoMKgwqAgcGF0aCA9ICIlcy8lcyIgJSAoc2VsZi5uYW1lLCBmaWxlX25hbWUpCj4g K8KgwqDCoMKgwqDCoMKgIGlmIHNlbGYuYXV0b19wYXRjaDoKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYucnZfZGlyLCAibW9uaXRvcnMiLCBwYXRoKQo+ ICvCoMKgwqDCoMKgwqDCoCBzZWxmLl9fd3JpdGVfZmlsZShwYXRoLCBjb250ZW50KQo+ICsKPiAr wqDCoMKgIGRlZiBfX2dldF9tYWluX25hbWUoc2VsZik6Cj4gK8KgwqDCoMKgwqDCoMKgIHBhdGgg PSAiJXMvJXMiICUgKHNlbGYubmFtZSwgIm1haW4uYyIpCj4gK8KgwqDCoMKgwqDCoMKgIGlmIG5v dCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g Im1haW4uYyIKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuICJfX21haW4uYyIKPiArCj4gK8KgwqDC oCBkZWYgcHJpbnRfZmlsZXMoc2VsZik6Cj4gK8KgwqDCoMKgwqDCoMKgIG1haW5fYyA9IHNlbGYu ZmlsbF9tYWluX2MoKQo+ICsKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5fX2NyZWF0ZV9kaXJlY3Rv cnkoKQo+ICsKPiArwqDCoMKgwqDCoMKgwqAgcGF0aCA9ICIlcy5jIiAlIHNlbGYubmFtZQo+ICvC oMKgwqDCoMKgwqDCoCBzZWxmLl9jcmVhdGVfZmlsZShwYXRoLCBtYWluX2MpCj4gKwo+ICvCoMKg wqDCoMKgwqDCoCBtb2RlbF9oID0gc2VsZi5maWxsX21vZGVsX2goKQo+ICvCoMKgwqDCoMKgwqDC oCBwYXRoID0gIiVzLmgiICUgc2VsZi5uYW1lCj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYuX2NyZWF0 ZV9maWxlKHBhdGgsIG1vZGVsX2gpCj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBrY29uZmlnID0gc2Vs Zi5maWxsX2tjb25maWcoKQo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLl9jcmVhdGVfZmlsZSgiS2Nv bmZpZyIsIGtjb25maWcpCj4gKwo+ICsKPiArY2xhc3MgTW9uaXRvcihSVkdlbmVyYXRvcik6Cj4g K8KgwqDCoCBtb25pdG9yX3R5cGVzID0geyAiZ2xvYmFsIiA6IDEsICJwZXJfY3B1IiA6IDIsICJw ZXJfdGFzayIgOiAzIH0KPiArCj4gK8KgwqDCoCBkZWYgX19pbml0X18oc2VsZiwgZXh0cmFfcGFy YW1zPXt9KToKPiArwqDCoMKgwqDCoMKgwqAgc3VwZXIoKS5fX2luaXRfXyhleHRyYV9wYXJhbXMp Cj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYudHJhY2VfaCA9IHNlbGYuX3JlYWRfdGVtcGxhdGVfZmls ZSgidHJhY2UuaCIpCj4gKwo+ICvCoMKgwqAgZGVmIGZpbGxfdHJhY2VfaChzZWxmKToKPiArwqDC oMKgwqDCoMKgwqAgdHJhY2VfaCA9IHNlbGYudHJhY2VfaAo+ICvCoMKgwqDCoMKgwqDCoCBtb25p dG9yX2NsYXNzID0gc2VsZi5maWxsX21vbml0b3JfY2xhc3MoKQo+ICvCoMKgwqDCoMKgwqDCoCBt b25pdG9yX2NsYXNzX3R5cGUgPSBzZWxmLmZpbGxfbW9uaXRvcl9jbGFzc190eXBlKCkKPiArwqDC oMKgwqDCoMKgwqAgdHJhY2Vwb2ludF9hcmdzX3NrZWxfZXZlbnQgPQo+IHNlbGYuZmlsbF90cmFj ZXBvaW50X2FyZ3Nfc2tlbCgiZXZlbnQiKQo+ICvCoMKgwqDCoMKgwqDCoCB0cmFjZXBvaW50X2Fy Z3Nfc2tlbF9lcnJvciA9Cj4gc2VsZi5maWxsX3RyYWNlcG9pbnRfYXJnc19za2VsKCJlcnJvciIp Cj4gK8KgwqDCoMKgwqDCoMKgIHRyYWNlX2ggPSB0cmFjZV9oLnJlcGxhY2UoIiUlTU9ERUxfTkFN RSUlIiwgc2VsZi5uYW1lKQo+ICvCoMKgwqDCoMKgwqDCoCB0cmFjZV9oID0gdHJhY2VfaC5yZXBs YWNlKCIlJU1PREVMX05BTUVfVVAlJSIsCj4gc2VsZi5uYW1lLnVwcGVyKCkpCj4gK8KgwqDCoMKg wqDCoMKgIHRyYWNlX2ggPSB0cmFjZV9oLnJlcGxhY2UoIiUlTU9OSVRPUl9DTEFTUyUlIiwKPiBt b25pdG9yX2NsYXNzKQo+ICvCoMKgwqDCoMKgwqDCoCB0cmFjZV9oID0gdHJhY2VfaC5yZXBsYWNl KCIlJU1PTklUT1JfQ0xBU1NfVFlQRSUlIiwKPiBtb25pdG9yX2NsYXNzX3R5cGUpCj4gK8KgwqDC oMKgwqDCoMKgIHRyYWNlX2ggPSB0cmFjZV9oLnJlcGxhY2UoIiUlVFJBQ0VQT0lOVF9BUkdTX1NL RUxfRVZFTlQlJSIsCj4gdHJhY2Vwb2ludF9hcmdzX3NrZWxfZXZlbnQpCj4gK8KgwqDCoMKgwqDC oMKgIHRyYWNlX2ggPSB0cmFjZV9oLnJlcGxhY2UoIiUlVFJBQ0VQT0lOVF9BUkdTX1NLRUxfRVJS T1IlJSIsCj4gdHJhY2Vwb2ludF9hcmdzX3NrZWxfZXJyb3IpCj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiB0cmFjZV9oCj4gKwo+ICvCoMKgwqAgZGVmIHByaW50X2ZpbGVzKHNlbGYpOgo+ICvCoMKg wqDCoMKgwqDCoCBzdXBlcigpLnByaW50X2ZpbGVzKCkKPiArwqDCoMKgwqDCoMKgwqAgdHJhY2Vf aCA9IHNlbGYuZmlsbF90cmFjZV9oKCkKPiArwqDCoMKgwqDCoMKgwqAgcGF0aCA9ICIlc190cmFj ZS5oIiAlIHNlbGYubmFtZQo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLl9jcmVhdGVfZmlsZShwYXRo LCB0cmFjZV9oKQo=