From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Vladimir Kazanov Newsgroups: gmane.emacs.bugs Subject: bug#69714: 30.0.50; ert-font-lock doesn't handle list of faces Date: Wed, 13 Mar 2024 18:20:23 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000b33a0806138ed47f" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="20950"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 69714@debbugs.gnu.org To: Troy Brown Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Mar 13 19:22:48 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rkTFW-0005Ao-4A for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 13 Mar 2024 19:22:46 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rkTFL-0005PM-RH; Wed, 13 Mar 2024 14:22:36 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rkTFD-0005Cr-Ka for bug-gnu-emacs@gnu.org; Wed, 13 Mar 2024 14:22:29 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rkTFD-00083s-AV for bug-gnu-emacs@gnu.org; Wed, 13 Mar 2024 14:22:27 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rkTFm-0000rB-AM for bug-gnu-emacs@gnu.org; Wed, 13 Mar 2024 14:23:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Vladimir Kazanov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 13 Mar 2024 18:23:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 69714 X-GNU-PR-Package: emacs Original-Received: via spool by 69714-submit@debbugs.gnu.org id=B69714.17103541423235 (code B ref 69714); Wed, 13 Mar 2024 18:23:02 +0000 Original-Received: (at 69714) by debbugs.gnu.org; 13 Mar 2024 18:22:22 +0000 Original-Received: from localhost ([127.0.0.1]:47403 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rkTF6-0000q6-Rv for submit@debbugs.gnu.org; Wed, 13 Mar 2024 14:22:22 -0400 Original-Received: from mail-lf1-f45.google.com ([209.85.167.45]:50190) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rkTF2-0000pq-JY for 69714@debbugs.gnu.org; Wed, 13 Mar 2024 14:22:18 -0400 Original-Received: by mail-lf1-f45.google.com with SMTP id 2adb3069b0e04-513ca834ad7so228318e87.0 for <69714@debbugs.gnu.org>; Wed, 13 Mar 2024 11:21:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710354035; x=1710958835; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=RMx1f1+0mvLQjqHrv1P9GlCVv74NUrhDR6hgnIvehD0=; b=lLswUzEvb5Djp78mJ8rgvuySJNX9lwPLOB1G/O2dQ5iazIZky2T/k5LOGW7IXxZs+n ce4R3xNRrWwuHNzJR9KY+t3TsUAfwuNXW8+45UA7NoMzG/gQvsjj+PULIyiPHM2if0RP 656FNN+TiM85txXvMu2i/dTABBJ7jsJbGRoHJ9diI46fj3IB1Ct6i8m8Igym8PgmCmE8 BSA8mdTyiiAn3N9qjT91eNX8bDUaZtG1Jx35r32X6FWHMF+xS5baqnh7sw0kpymmg4QM /CHYOMb1emq+J4ya21gbK9q+/Sn19nuN6sqmANy2IzvBipw6mQrbp9rkvPOy4nGExhXG Ip3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710354035; x=1710958835; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RMx1f1+0mvLQjqHrv1P9GlCVv74NUrhDR6hgnIvehD0=; b=SgLDtKHNrEOygvH/+S/t0/w+YFZ0nHzIrE5jBRb5c9pdpNEavAj4fqdUdEVEcpPu+m 9I/mOGKOLW3RIiWwIjFRRWCf9v0HECvk2yzvH4uh8Ih75CttMqwW7Z/rNONhAyYlnhTJ PGTGFGZOIsb22DQPcv1NQ6znoEi2S/1DK78ubgKpipOeR8opuvofBCcfW5sPQPwmjiah vYYf17PkPk8bTc54gTHb2AHQ9lFwX84BJ0NCFZPZOteDN6JKJBeZnwsgS0Ykf9nqaff6 HhqQ6yWW/vdTYSXf8CABDqJ//l/BH5ZTP4Uos62gh5ov83Egw+TrVLWiWgCEAnUyYB1m kFOA== X-Gm-Message-State: AOJu0YxjjlpCUnxTgzN5QTkwRKCcmxQDXTyBfTetxSxviQeS+OniI1P5 e9fKn3IUMN4Qr6xRoK/jyIM7EVAqDcZomZrjmePXeJdUQuPTWcaeAKu8Iml77LV3cwjItdhNiep a4CdR6qfFFmy2+TuFbjymEyZ9Kw== X-Google-Smtp-Source: AGHT+IECziy5dNwo3W8LooVTvRNLbdLjqEWJq3+tNXRMKvRJ1OmeAfy0ayL/VRC0OXli4wHER2NtP5gq45JhjhjXTU8= X-Received: by 2002:a05:6512:3585:b0:513:9f30:e33f with SMTP id m5-20020a056512358500b005139f30e33fmr7704932lfr.23.1710354035054; Wed, 13 Mar 2024 11:20:35 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:281562 Archived-At: --000000000000b33a0806138ed47f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Yeah, this is unintentional but I like it. "nil" is happily parsed by both the (read) call and the guarding regex. There's a little thing that needs to be fixed - avoid turning 'nil into '(nil) when comparing lists. It works but for the wrong reason. Anyway, I'll update the docs to suggest using nil and !nil in assertions, and also add a test. The patch looks ready. I'll wait for a few days and if nobody notices I will give the maintainers a shout. On Wed, 13 Mar 2024 at 17:49, Troy Brown wrote: > > The new patch looks good to me. > > One other thing I thought I'd mention. I have places in my test where > I want to verify that there is no font lock face. I've been able to > specify "nil" for the face and that works perfectly to check this. I > thought I'd mention this because I wasn't sure if it was intentional > behavior, but I do find that useful. > > > Thanks, > > Troy. > > On Wed, Mar 13, 2024 at 1:04=E2=80=AFPM Vladimir Kazanov wrote: > > > > Thanks a lot! > > > > The suggestions really do make sense. > > > > Here's the final integrated patch, complete with updated tests and > > docs. If you're fine with it then I'll ask somebody to install it on > > master. > > > > PS I've got to write an additional announcement in the main mailing > > list inviting people to check the updated version out. > > > > On Wed, 13 Mar 2024 at 16:14, Troy Brown wrote: > > > > > > Hi Vlad, sorry for the delayed response. > > > > > > I haven't pushed my change which uses this package yet, as I was > > > struggling to get it working and didn't want to push failing tests. = I > > > just discovered the package and was working on a regression test for = a > > > bug fix involving font locking. This seemed like the perfect reason > > > to use your package. At the moment I only have this one > > > work-in-progress test, but I expect to use it more going forward. > > > > > > I did check out your patch and for my immediate needs, it worked > > > perfectly. Thanks! Additionally, I did experiment a little with the > > > multi-caret functionality, which is nice as I have a use for that. I > > > also experimented with the negation functionality (although I don't > > > have an immediate need for that), and did notice a couple things. Th= e > > > first was that the assertion would be ignored if there was a space > > > between the negation symbol and the face. Also, if the actual and > > > expected faces didn't match and the negation flag was being used, it > > > acted like the negation was not indicated at all and failed the test. > > > I've included a diff below containing the changes I made which seemed > > > to address those concerns. > > > > > > diff --git a/lisp/emacs-lisp/ert-font-lock.el b/lisp/emacs-lisp/ert-f= ont-lock.el > > > index 06c90add9d3..1a5fe96fb09 100644 > > > --- a/lisp/emacs-lisp/ert-font-lock.el > > > +++ b/lisp/emacs-lisp/ert-font-lock.el > > > @@ -61,6 +61,7 @@ ert-font-lock--assertion-line-re > > > (group (zero-or-more (seq "^" (zero-or-more whitespace)))) > > > ;; optional negation of the face specification > > > (group (optional "!")) > > > + (zero-or-more whitespace) > > > ;; face symbol name or a list of symbols > > > (group (or (regexp ert-font-lock--face-symbol-re) > > > (regexp ert-font-lock--face-symbol-list-re)))) > > > @@ -354,7 +355,7 @@ ert-font-lock--check-faces > > > (when (symbolp expected-face) > > > (setq expected-face (list expected-face))) > > > > > > - (when (not (equal actual-face expected-face)) > > > + (when (and (not negation) (not (equal actual-face expected-fac= e))) > > > (ert-fail > > > (list (format "Expected face %S, got %S on line %d column %= d" > > > expected-face actual-face line-checked column= -checked) > > > > > > > > > Thanks, > > > > > > Troy. > > > > > > On Tue, Mar 12, 2024 at 4:47=E2=80=AFPM Vladimir Kazanov wrote: > > > > > > > > Hi, > > > > > > > > I've attached a patch that handles face lists, fails on files witho= ut > > > > assertions and expands the parser a bit to support multiple carets = per > > > > line. > > > > > > > > For faces it does the following: > > > > > > > > 1. Turn symbols into single element lists. > > > > 2. Parses face lists from the assertions. > > > > 3. Compare face lists using equas. > > > > > > > > Could you please check if this works for you? > > > > > > > > Thanks > > > > > > > > On Mon, 11 Mar 2024 at 08:36, Vladimir Kazanov wrote: > > > > > > > > > > Hi, > > > > > > > > > > Thanks for reporting this! I have a bunch of ert-font-lock > > > > > improvements in my local repo getting ready for submission, and c= an > > > > > look into your suggestions as well. > > > > > > > > > > Do you have your unit test code somewhere in a public repo? It'd = be > > > > > great to think of further improvements to support your use case. > > > > > > > > > > Thanks, > > > > > Vlad > > > > > > > > > > On Sun, 10 Mar 2024 at 20:33, Troy Brown = wrote: > > > > > > > > > > > > I'm trying to use this package to test out my tree-sitter mode,= but am > > > > > > running into an issue with lists of faces. It's possible that = the > > > > > > face for a location in the buffer will contain a list of 1 or m= ore > > > > > > faces. For example, when I use the ":override 'prepend" keywor= d in > > > > > > the call to treesit-font-lock-rules, even if only a single face= is > > > > > > specified for the rule that matches that section of the buffer,= this > > > > > > will result in a list of one entry (i.e., "(face-name)"). > > > > > > > > > > > > When this happens, ert-font-lock fails to recognize that this m= atches > > > > > > the face "face-name" (e.g., "^ face-name" will fail to match in= this > > > > > > case). I feel the tool should recognize a list containing a si= ngle > > > > > > face as matching the face. Even worse however, it appears > > > > > > ert-font-lock doesn't support a list of faces in the comment. = I tried > > > > > > to work around the original issue by using "^ (face-name)", but= the > > > > > > tool silently ignores this, as it doesn't match the internal re= gular > > > > > > expression (which ended up allowing my test to pass without act= ually > > > > > > checking anything). > > > > > > > > > > > > I can't figure out a way to use this tool in its current state = due to > > > > > > its lack of support for a list of faces. Also, I find that sin= ce it > > > > > > silently ignores incorrect comment syntax (e.g., "^face-name", = "^ > > > > > > (face-name)"), it gives a false illusion that it's actually per= forming > > > > > > those checks (and the checks are passing), when it's really jus= t > > > > > > ignoring them. Maybe any comment line starting with a "^" or "= <-" > > > > > > should be considered an assertion check and to fail if the rest= of the > > > > > > syntax is not as expected. Maybe it should also fail the test = if no > > > > > > assertion checks are found in a source file or string. > > > > > > > > > > > > Even if the tool would allow a list of a single face to match t= he > > > > > > supplied face in the comment, I think it should also allow for > > > > > > multiple faces to be listed in the comment. I have other place= s where > > > > > > multiple faces are used (e.g., "(font-lock-constant-face > > > > > > font-lock-variable-name-face)" to highlight a constant variable= ), > > > > > > which would not be testable with the current state of the packa= ge. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Regards, > > > > > > > > > > Vladimir Kazanov > > > > > > > > > > > > > > > > -- > > > > Regards, > > > > > > > > Vladimir Kazanov > > > > > > > > -- > > Regards, > > > > Vladimir Kazanov --=20 Regards, Vladimir Kazanov --000000000000b33a0806138ed47f Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Improve-ert-font-lock-assertion-parser-Bug-69714.patch" Content-Disposition: attachment; filename="0001-Improve-ert-font-lock-assertion-parser-Bug-69714.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltq4h3lu0 RnJvbSA0MDI2ODhmMjI3ZWI3ODZmZTgxYWQzNzk5Zjk3YjUxY2Q2ZjdhNjkzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWbGFkaW1pciBLYXphbm92IDx2ZWthemFub3ZAZ21haWwuY29t PgpEYXRlOiBUdWUsIDEyIE1hciAyMDI0IDExOjE0OjU0ICswMDAwClN1YmplY3Q6IFtQQVRDSF0g SW1wcm92ZSBlcnQtZm9udC1sb2NrIGFzc2VydGlvbiBwYXJzZXIgKEJ1ZyM2OTcxNCkKCkZhaWwg b24gZmlsZXMgd2l0aCBubyBhc3NlcnRpb25zLCBwYXJzZXIgbm93IGFjY2VwdHMgbXVsdGlwbGUK Y2FyZXRzIHBlciBsaW5lIGFuZCBmYWNlIGxpc3RzOgoqIGxpc3AvZW1hY3MtbGlzcC9lcnQtZm9u dC1sb2NrLmVsOiBBc3NlcnRpb24gcGFyc2VyIGZpeC4KKiB0ZXN0L2xpc3AvZW1hY3MtbGlzcC9l cnQtZm9udC1sb2NrLXJlc291cmNlcy9uby1hc3NlcnRzLmpzOgoqIHRlc3QvbGlzcC9lbWFjcy1s aXNwL2VydC1mb250LWxvY2stdGVzdHMuZWw6IFVwZGF0ZSB1bml0IHRlc3RzLgoqIGRvYy9taXNj L2VydC50ZXhpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbi4KLS0tCiBkb2MvbWlzYy9lcnQudGV4aSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDUgKysrKystCiBsaXNwL2VtYWNzLWxpc3Av ZXJ0LWZvbnQtbG9jay5lbCAgICAgICAgICAgICAgfCAgNzMgKysrKysrKy0tCiAuLi4vZXJ0LWZv bnQtbG9jay1yZXNvdXJjZXMvbm8tYXNzZXJ0cy5qcyAgICAgfCAgIDIgKwogdGVzdC9saXNwL2Vt YWNzLWxpc3AvZXJ0LWZvbnQtbG9jay10ZXN0cy5lbCAgIHwgMTUzICsrKysrKysrKysrKysrKy0t LQogNCBmaWxlcyBjaGFuZ2VkLCAyMjggaW5zZXJ0aW9ucygrKSwgNDUgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9saXNwL2VtYWNzLWxpc3AvZXJ0LWZvbnQtbG9jay1yZXNv dXJjZXMvbm8tYXNzZXJ0cy5qcwoKZGlmZiAtLWdpdCBhL2RvYy9taXNjL2VydC50ZXhpIGIvZG9j L21pc2MvZXJ0LnRleGkKaW5kZXggYmQyYWQ0OTUxNDIuLjg3NjdkZTcxNDk2IDEwMDY0NAotLS0g YS9kb2MvbWlzYy9lcnQudGV4aQorKysgYi9kb2MvbWlzYy9lcnQudGV4aQpAQCAtOTUxLDExICs5 NTEsMTMgQEAgU3ludGF4IEhpZ2hsaWdodGluZyBUZXN0cwogQGNvZGV7ZXJ0LWZvbnQtbG9ja30g cGFja2FnZSBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbnRyb2R1Y2UgdW5pdCB0ZXN0cwogY2hlY2tp bmcgZmFjZSBhc3NpZ25tZW50LiAgVGVzdCBhc3NlcnRpb25zIGFyZSBpbmNsdWRlZCBpbiBjb2Rl LWxldmVsCiBjb21tZW50cyBkaXJlY3RseSBhbmQgY2FuIGJlIHJlYWQgZWl0aGVyIGZyb20gaW5s aW5lIHN0cmluZ3Mgb3IgZmlsZXMuCitUaGUgcGFyc2VyIGV4cGVjdHMgdGhlIGlucHV0IHN0cmlu ZyB0byBjb250YWluIGF0IGxlYXN0IG9uZSBhc3NlcnRpb24uCgogVGVzdCBhc3NlcnRpb24gcGFy c2VyIGV4dHJhY3RzIHRlc3RzIGZyb20gY29tbWVudC1vbmx5IGxpbmVzLiAgRXZlcnkKLWNvbW1l bnQgYXNzZXJ0aW9uIGxpbmUgc3RhcnRzIGVpdGhlciB3aXRoIGEgY2FyZXQgKEBzYW1we159KSBv ciBhbgotYXJyb3cgKEBzYW1wezwtfSkuICBBIGNhcmV0L2Fycm93IHNob3VsZCBiZSBmb2xsb3dl ZCBpbW1lZGlhdGVseSBieSB0aGUKLW5hbWUgb2YgYSBmYWNlIHRvIGJlIGNoZWNrZWQuCitjb21t ZW50IGFzc2VydGlvbiBsaW5lIHN0YXJ0cyBlaXRoZXIgd2l0aCBhIGNhcmV0IChAc2FtcHtefSkg b3IgYW4gYXJyb3cKKyhAc2FtcHs8LX0pLiAgQSBzaW5nbGUgY2FyZXQvYXJyb3cgb3IgY2FyZXRz IHNob3VsZCBiZSBmb2xsb3dlZAoraW1tZWRpYXRlbHkgYnkgdGhlIG5hbWUgb2YgYSBmYWNlIG9y IGEgbGlzdCBvZiBmYWNlcyB0byBiZSBjaGVja2VkCithZ2FpbnN0IHRoZSBAY29kZXs6ZmFjZX0g cHJvcGVydHkgYXQgcG9pbnQuCgogVGhlIHRlc3QgdGhlbiBjaGVja3MgaWYgdGhlIGZpcnN0IG5v bi1hc3NlcnRpb24gY29sdW1uIGFib3ZlIHRoZSBjYXJldAogY29udGFpbnMgYSBmYWNlIGV4cGVj dGVkIGJ5IHRoZSBhc3NlcnRpb246CkBAIC05NjcsMTAgKzk2OSw0MyBAQCBTeW50YXggSGlnaGxp Z2h0aW5nIFRlc3RzCiAvLyAgICAgICAgICAgICAgIF4gZm9udC1sb2NrLXB1bmN0dWF0aW9uLWZh Y2UKIC8vIHRoaXMgaXMgbm90IGFuIGFzc2VydGlvbiwgaXQncyBqdXN0IGEgY29tbWVudAogLy8g ICBeIGZvbnQtbG9jay1jb21tZW50LWZhY2UKKworLy8gbXVsdGlwbGUgY2FyZXRzIHBlciBsaW5l CisvLyBeXl5eICAgICBeICAgIF4gZm9udC1sb2NrLWNvbW1lbnQtZmFjZQorQGVuZCBleGFtcGxl CisKK0JvdGggc3ltYm9sLW9ubHkgQGNvZGV7OmZhY2V9IHByb3BlcnR5IHZhbHVlcyBhbmQgYXNz ZXJ0aW9uIGZhY2UgdmFsdWVzCithcmUgbm9ybWFsaXplZCB0byBzaW5nbGUgZWxlbWVudCBsaXN0 cyBzbyBhc3NlcnRpb25zIGJlbG93IGFyZQorZXF1aXZhbGVudDoKKworQGV4YW1wbGUKKy8vIHNp bmdsZQorLy8gXiBmb250LWxvY2stY29tbWVudC1mYWNlCisvLyBzaW5nbGUKKy8vIF4gKGZvbnQt bG9jay1jb21tZW50LWZhY2UpCitAZW5kIGV4YW1wbGUKKworQXNzZXJ0aW9ucyBjYW4gYmUgbmVn YXRlZDoKKworQGV4YW1wbGUKK3ZhciB2YXJpYWJsZSA9IDExOworLy8gIF4gIWZvbnQtbG9jay1j b21tZW50LWZhY2UKK0BlbmQgZXhhbXBsZQorCitJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IGZh Y2UgbGlzdHMgaW4gYXNzZXJ0aW9uczoKKworQGV4YW1wbGUKKy8vIFRPRE8KKy8vIF5eXl4gKGZv bnQtbG9jay1jb21tZW50LWZhY2UgaGwtdG9kbykKKyAgICAgdmFyIHRlc3QgPSAxOworLy8gXiAg ICAoKQorLy8gXiAgICBuaWwKKy8vICAgbmVnYXRpb24gd29ya3MgYXMgZXhwZWN0ZWQKKy8vICAg XiAgIW5pbAogQGVuZCBleGFtcGxlCgotVGhlIGFycm93IG1lYW5zIHRoYXQgdGhlIGZpcnN0IG5v bi1lbXB0eSBjb2x1bW4gb2YgdGhlIGFzc2VydGlvbiBsaW5lCi13aWxsIGJlIHVzZWQgZm9yIHRo ZSBjaGVjazoKK1RoZSBhcnJvdyAoQHNhbXB7PC19KSBtZWFucyB0aGF0IHRoZSBmaXJzdCBub24t ZW1wdHkgY29sdW1uIG9mIHRoZQorYXNzZXJ0aW9uIGxpbmUgd2lsbCBiZSB1c2VkIGZvciB0aGUg Y2hlY2s6CgogQGV4YW1wbGUKIHZhciB2YXJpYWJsZSA9IDE7CmRpZmYgLS1naXQgYS9saXNwL2Vt YWNzLWxpc3AvZXJ0LWZvbnQtbG9jay5lbCBiL2xpc3AvZW1hY3MtbGlzcC9lcnQtZm9udC1sb2Nr LmVsCmluZGV4IDI5MTE0NzEyZjkyLi5lNzdjODk0NWRjMyAxMDA2NDQKLS0tIGEvbGlzcC9lbWFj cy1saXNwL2VydC1mb250LWxvY2suZWwKKysrIGIvbGlzcC9lbWFjcy1saXNwL2VydC1mb250LWxv Y2suZWwKQEAgLTM5LDE2ICszOSwzMyBAQAogKHJlcXVpcmUgJ25ld2NvbW1lbnQpCiAocmVxdWly ZSAncGNhc2UpCgotKGRlZmNvbnN0IGVydC1mb250LWxvY2stLWFzc2VydGlvbi1yZQorKGRlZmNv bnN0IGVydC1mb250LWxvY2stLWZhY2Utc3ltYm9sLXJlCisgIChyeCAob25lLW9yLW1vcmUgKG9y IGFscGhhbnVtZXJpYyAiLSIgIl8iICIuIikpKQorICAiQSBmYWNlIHN5bWJvbCBtYXRjaGluZyBy ZWdleC4iKQorCisoZGVmY29uc3QgZXJ0LWZvbnQtbG9jay0tZmFjZS1zeW1ib2wtbGlzdC1yZQor ICAocnggIigiCisgICAgICAoKiB3aGl0ZXNwYWNlKQorICAgICAgKG9uZS1vci1tb3JlCisgICAg ICAgKHNlcSAocmVnZXhwIGVydC1mb250LWxvY2stLWZhY2Utc3ltYm9sLXJlKQorICAgICAgICAg ICAgKCogd2hpdGVzcGFjZSkpKQorICAgICAgIikiKQorICAiQSBmYWNlIHN5bWJvbCBsaXN0IG1h dGNoaW5nIHJlZ2V4LiIpCisKKyhkZWZjb25zdCBlcnQtZm9udC1sb2NrLS1hc3NlcnRpb24tbGlu ZS1yZQogICAocngKLSAgIDs7IGNvbHVtbiBzcGVjaWZpZXJzCisgICA7OyBsZWFkaW5nIGNvbHVt biBhc3NlcnRpb24gKGFycm93L2NhcmV0KQogICAgKGdyb3VwIChvciAiXiIgIjwtIikpCi0gICAo b25lLW9yLW1vcmUgIiAiKQorICAgKHplcm8tb3ItbW9yZSB3aGl0ZXNwYWNlKQorICAgOzsgcG9z c2libGUgdG8gaGF2ZSBtYW55IGNhcmV0cyBvbiBhbiBhc3NlcnRpb24gbGluZQorICAgKGdyb3Vw ICh6ZXJvLW9yLW1vcmUgKHNlcSAiXiIgKHplcm8tb3ItbW9yZSB3aGl0ZXNwYWNlKSkpKQogICAg Ozsgb3B0aW9uYWwgbmVnYXRpb24gb2YgdGhlIGZhY2Ugc3BlY2lmaWNhdGlvbgogICAgKGdyb3Vw IChvcHRpb25hbCAiISIpKQotICAgOzsgZmFjZSBzeW1ib2wgbmFtZQotICAgKGdyb3VwIChvbmUt b3ItbW9yZSAob3IgYWxwaGFudW1lcmljICItIiAiXyIgIi4iKSkpKQotICAiQW4gZXJ0LWZvbnQt bG9jayBhc3NlcnRpb24gcmVnZXguIikKKyAgICh6ZXJvLW9yLW1vcmUgd2hpdGVzcGFjZSkKKyAg IDs7IGZhY2Ugc3ltYm9sIG5hbWUgb3IgYSBsaXN0IG9mIHN5bWJvbHMKKyAgIChncm91cCAob3Ig KHJlZ2V4cCBlcnQtZm9udC1sb2NrLS1mYWNlLXN5bWJvbC1yZSkKKyAgICAgICAgICAgICAgKHJl Z2V4cCBlcnQtZm9udC1sb2NrLS1mYWNlLXN5bWJvbC1saXN0LXJlKSkpKQorICAiQW4gZXJ0LWZv bnQtbG9jayBhc3NlcnRpb24gbGluZSByZWdleC4iKQoKIChkZWZ1biBlcnQtZm9udC1sb2NrLS12 YWxpZGF0ZS1tYWpvci1tb2RlIChtb2RlKQogICAiVmFsaWRhdGUgaWYgTU9ERSBpcyBhIHZhbGlk IG1ham9yIG1vZGUuIgpAQCAtMjEyLDcgKzIyOSw3IEBAIGVydC1mb250LWxvY2stLWxpbmUtYXNz ZXJ0aW9uLXAKICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAg IChza2lwLXN5bnRheC1mb3J3YXJkICIgIikKLSAgICAocmUtc2VhcmNoLWZvcndhcmQgZXJ0LWZv bnQtbG9jay0tYXNzZXJ0aW9uLXJlCisgICAgKHJlLXNlYXJjaC1mb3J3YXJkIGVydC1mb250LWxv Y2stLWFzc2VydGlvbi1saW5lLXJlCiAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lLWVuZC1w b3NpdGlvbikgdCAxKSkpCgogKGRlZnVuIGVydC1mb250LWxvY2stLWdvdG8tZmlyc3QtY2hhciAo KQpAQCAtMjUyLDggKzI2OSw4IEBAIGVydC1mb250LWxvY2stLXBhcnNlLWNvbW1lbnRzCiAgICAg ICAgICAgKHRocm93ICduZXh0bGluZSB0KSkKCgotICAgICAgICA7OyBDb2xsZWN0IHRoZSBhc3Nl cnRpb24KLSAgICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkIGVydC1mb250LWxvY2stLWFz c2VydGlvbi1yZQorICAgICAgICA7OyBDb2xsZWN0IHRoZSBmaXJzdCBsaW5lIGFzc2VydGlvbiAo Y2FyZXQgb3IgYXJyb3cpCisgICAgICAgICh3aGVuIChyZS1zZWFyY2gtZm9yd2FyZCBlcnQtZm9u dC1sb2NrLS1hc3NlcnRpb24tbGluZS1yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxpbmUtZW5kLXBvc2l0aW9uKSB0IDEpCgogICAgICAgICAgICh1bmxlc3MgKD4gbGluZXRv Y2hlY2sgLTEpCkBAIC0yNjYsMjEgKzI4MywzOCBAQCBlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21t ZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIChtYXRjaC1iZWdp bm5pbmcgMSkgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGVydC1mb250LWxvY2stLWdldC1maXJzdC1jaGFyLWNvbHVtbikpKQog ICAgICAgICAgICAgICAgICA7OyBuZWdhdGUgdGhlIGZhY2U/Ci0gICAgICAgICAgICAgICAgIChu ZWdhdGlvbiAoc3RyaW5nLWVxdWFsIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAyKSAiISIp KQorICAgICAgICAgICAgICAgICAobmVnYXRpb24gKHN0cmluZy1lcXVhbCAobWF0Y2gtc3RyaW5n LW5vLXByb3BlcnRpZXMgMykgIiEiKSkKICAgICAgICAgICAgICAgICAgOzsgdGhlIGZhY2UgdGhh dCBpcyBzdXBwb3NlZCB0byBiZSBpbiB0aGUgcG9zaXRpb24gc3BlY2lmaWVkCi0gICAgICAgICAg ICAgICAgIChmYWNlIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAzKSkpCisgICAgICAgICAg ICAgICAgIChmYWNlIChyZWFkIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyA0KSkpKQoKKyAg ICAgICAgICAgIDs7IENvbGxlY3QgdGhlIGZpcnN0IGFzc2VydGlvbiBvbiB0aGUgbGluZQogICAg ICAgICAgICAgKHB1c2ggKGxpc3QgOmxpbmUtY2hlY2tlZCBsaW5ldG9jaGVjawogICAgICAgICAg ICAgICAgICAgICAgICAgOmxpbmUtYXNzZXJ0IGN1cmxpbmUKICAgICAgICAgICAgICAgICAgICAg ICAgIDpjb2x1bW4tY2hlY2tlZCBjb2x1bW4tY2hlY2tlZAogICAgICAgICAgICAgICAgICAgICAg ICAgOmZhY2UgZmFjZQogICAgICAgICAgICAgICAgICAgICAgICAgOm5lZ2F0aW9uIG5lZ2F0aW9u KQotICAgICAgICAgICAgICAgICAgdGVzdHMpKSkpCisgICAgICAgICAgICAgICAgICB0ZXN0cykK KworICAgICAgICAgICAgOzsgQ29sbGVjdCBhbGwgdGhlIG90aGVyIGxpbmUgY2FyZXRzIChpZiBw cmVzZW50KQorICAgICAgICAgICAgKGdvdG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDIpKQorICAg ICAgICAgICAgKHdoaWxlIChlcXVhbCAoZm9sbG93aW5nLWNoYXIpID9eKQorICAgICAgICAgICAg ICAoc2V0cSBjb2x1bW4tY2hlY2tlZCAoLSAocG9pbnQpIChsaW5lLWJlZ2lubmluZy1wb3NpdGlv bikpKQorICAgICAgICAgICAgICAocHVzaCAobGlzdCA6bGluZS1jaGVja2VkIGxpbmV0b2NoZWNr CisgICAgICAgICAgICAgICAgICAgICAgICAgIDpsaW5lLWFzc2VydCBjdXJsaW5lCisgICAgICAg ICAgICAgICAgICAgICAgICAgIDpjb2x1bW4tY2hlY2tlZCBjb2x1bW4tY2hlY2tlZAorICAgICAg ICAgICAgICAgICAgICAgICAgICA6ZmFjZSBmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAg IDpuZWdhdGlvbiBuZWdhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMpCisgICAgICAg ICAgICAgIChmb3J3YXJkLWNoYXIpCisgICAgICAgICAgICAgIChza2lwLXN5bnRheC1mb3J3YXJk ICIgIikpKSkpCgogICAgICAgOzsgbmV4dCBsaW5lCiAgICAgICAoc2V0cSBjdXJsaW5lICgxKyBj dXJsaW5lKSkKICAgICAgIChmb3J3YXJkLWxpbmUgMSkpCgorICAgICh1bmxlc3MgdGVzdHMKKyAg ICAgICh1c2VyLWVycm9yICJObyB0ZXN0IGFzc2VydGlvbnMgZm91bmQiKSkKKwogICAgIChyZXZl cnNlIHRlc3RzKSkpCgogKGRlZnVuIGVydC1mb250LWxvY2stLXBvaW50LWF0LWxpbmUtYW5kLWNv bHVtbiAobGluZSBjb2x1bW4pCkBAIC0zMDcsMjEgKzM0MSwzMCBAQCBlcnQtZm9udC1sb2NrLS1j aGVjay1mYWNlcwogICAgIChsZXQqICgobGluZS1jaGVja2VkIChwbGlzdC1nZXQgdGVzdCA6bGlu ZS1jaGVja2VkKSkKICAgICAgICAgICAgKGxpbmUtYXNzZXJ0IChwbGlzdC1nZXQgdGVzdCA6bGlu ZS1hc3NlcnQpKQogICAgICAgICAgICAoY29sdW1uLWNoZWNrZWQgKHBsaXN0LWdldCB0ZXN0IDpj b2x1bW4tY2hlY2tlZCkpCi0gICAgICAgICAgIChleHBlY3RlZC1mYWNlIChpbnRlcm4gKHBsaXN0 LWdldCB0ZXN0IDpmYWNlKSkpCisgICAgICAgICAgIChleHBlY3RlZC1mYWNlIChwbGlzdC1nZXQg dGVzdCA6ZmFjZSkpCiAgICAgICAgICAgIChuZWdhdGlvbiAocGxpc3QtZ2V0IHRlc3QgOm5lZ2F0 aW9uKSkKCiAgICAgICAgICAgIChhY3R1YWwtZmFjZSAoZ2V0LXRleHQtcHJvcGVydHkgKGVydC1m b250LWxvY2stLXBvaW50LWF0LWxpbmUtYW5kLWNvbHVtbiBsaW5lLWNoZWNrZWQgY29sdW1uLWNo ZWNrZWQpICdmYWNlKSkKICAgICAgICAgICAgKGxpbmUtc3RyIChlcnQtZm9udC1sb2NrLS1nZXQt bGluZSBsaW5lLWNoZWNrZWQpKQogICAgICAgICAgICAobGluZS1hc3NlcnQtc3RyIChlcnQtZm9u dC1sb2NrLS1nZXQtbGluZSBsaW5lLWFzc2VydCkpKQoKLSAgICAgICh3aGVuIChub3QgKGVxIGFj dHVhbC1mYWNlIGV4cGVjdGVkLWZhY2UpKQorICAgICAgOzsgbm9ybWFsaXplIGJvdGggZXhwZWN0 ZWQgYW5kIHJlc3VsdGluZyBmYWNlIC0gdGhlc2UgY2FuIGJlCisgICAgICA7OyBlaXRoZXIgc3lt Ym9scywgbmlscyBvciBsaXN0cyBvZiBzeW1ib2xzCisgICAgICAod2hlbiAobm90IChsaXN0cCBh Y3R1YWwtZmFjZSkpCisgICAgICAgIChzZXRxIGFjdHVhbC1mYWNlIChsaXN0IGFjdHVhbC1mYWNl KSkpCisgICAgICAod2hlbiAobm90IChsaXN0cCBleHBlY3RlZC1mYWNlKSkKKyAgICAgICAgKHNl dHEgZXhwZWN0ZWQtZmFjZSAobGlzdCBleHBlY3RlZC1mYWNlKSkpCisKKyAgICAgIDs7IGZhaWwg d2hlbiBsaXN0cyBhcmUgbm90ICdlcXVhbCBhbmQgdGhlIGFzc2VydGlvbiBpcyAqbm90IG5lZ2F0 ZWQqCisgICAgICAod2hlbiAoYW5kIChub3QgbmVnYXRpb24pIChub3QgKGVxdWFsIGFjdHVhbC1m YWNlIGV4cGVjdGVkLWZhY2UpKSkKICAgICAgICAgKGVydC1mYWlsCiAgICAgICAgICAobGlzdCAo Zm9ybWF0ICJFeHBlY3RlZCBmYWNlICVTLCBnb3QgJVMgb24gbGluZSAlZCBjb2x1bW4gJWQiCiAg ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLWZhY2UgYWN0dWFsLWZhY2UgbGluZS1jaGVj a2VkIGNvbHVtbi1jaGVja2VkKQogICAgICAgICAgICAgICAgOmxpbmUgbGluZS1zdHIKICAgICAg ICAgICAgICAgIDphc3NlcnQgbGluZS1hc3NlcnQtc3RyKSkpCgotICAgICAgKHdoZW4gKGFuZCBu ZWdhdGlvbiAoZXEgYWN0dWFsLWZhY2UgZXhwZWN0ZWQtZmFjZSkpCisgICAgICA7OyBmYWlsIHdo ZW4gbGlzdHMgYXJlICdlcXVhbCBhbmQgdGhlIGFzc2VydGlvbiBpcyAqbmVnYXRlZCoKKyAgICAg ICh3aGVuIChhbmQgbmVnYXRpb24gKGVxdWFsIGFjdHVhbC1mYWNlIGV4cGVjdGVkLWZhY2UpKQog ICAgICAgICAoZXJ0LWZhaWwKICAgICAgICAgIChsaXN0IChmb3JtYXQgIkRpZCBub3QgZXhwZWN0 IGZhY2UgJVMgZmFjZSBvbiBsaW5lICVkLCBjb2x1bW4gJWQiCiAgICAgICAgICAgICAgICAgICAg ICAgIGFjdHVhbC1mYWNlIGxpbmUtY2hlY2tlZCBjb2x1bW4tY2hlY2tlZCkKZGlmZiAtLWdpdCBh L3Rlc3QvbGlzcC9lbWFjcy1saXNwL2VydC1mb250LWxvY2stcmVzb3VyY2VzL25vLWFzc2VydHMu anMgYi90ZXN0L2xpc3AvZW1hY3MtbGlzcC9lcnQtZm9udC1sb2NrLXJlc291cmNlcy9uby1hc3Nl cnRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZWFlOWFmMjEy ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvbGlzcC9lbWFjcy1saXNwL2VydC1mb250LWxvY2st cmVzb3VyY2VzL25vLWFzc2VydHMuanMKQEAgLTAsMCArMSwyIEBACit2YXIgYWJjID0gZnVuY3Rp b24oZCkgeworfTsKZGlmZiAtLWdpdCBhL3Rlc3QvbGlzcC9lbWFjcy1saXNwL2VydC1mb250LWxv Y2stdGVzdHMuZWwgYi90ZXN0L2xpc3AvZW1hY3MtbGlzcC9lcnQtZm9udC1sb2NrLXRlc3RzLmVs CmluZGV4IGUwYmExZTk0OWIyLi5mYTJlNWRjNGRiNyAxMDA2NDQKLS0tIGEvdGVzdC9saXNwL2Vt YWNzLWxpc3AvZXJ0LWZvbnQtbG9jay10ZXN0cy5lbAorKysgYi90ZXN0L2xpc3AvZW1hY3MtbGlz cC9lcnQtZm9udC1sb2NrLXRlc3RzLmVsCkBAIC0xMzgsMTMgKzEzOCwyNCBAQCB0ZXN0LWxpbmUt Y29tbWVudC1wLS1jCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaG91bGQgKGVydC1mb250LWxvY2stLWxp bmUtY29tbWVudC1wKSkpKQoKKyhlcnQtZGVmdGVzdCB0ZXN0LXBhcnNlLWNvbW1lbnRzLS1uby1h c3NlcnRpb24tZXJyb3IgKCkKKyAgKGxldCogKChzdHIgIgorbm90X2FuX2Fzc2VydGlvbgorcmFu ZG9tX3N5bWJvbAorIikpCisgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgIChpbnNlcnQgc3Ry KQorICAgICAgKGphdmFzY3JpcHQtbW9kZSkKKworICAgICAgKHNob3VsZC1lcnJvciAoZXJ0LWZv bnQtbG9jay0tcGFyc2UtY29tbWVudHMpIDp0eXBlICd1c2VyLWVycm9yKSkpKQorCiAoZXJ0LWRl ZnRlc3QgdGVzdC1wYXJzZS1jb21tZW50cy0tc2luZ2xlLWxpbmUtZXJyb3IgKCkKICAgKGxldCog KChzdHIgIi8vIF4gZmFjZS5mYWNlMSIpKQogICAgICh3aXRoLXRlbXAtYnVmZmVyCiAgICAgICAo aW5zZXJ0IHN0cikKICAgICAgIChqYXZhc2NyaXB0LW1vZGUpCgotICAgICAgKHNob3VsZC1lcnJv ciAoZXJ0LWZvbnQtbG9jay0tcGFyc2UtY29tbWVudHMpKSkpKQorICAgICAgKHNob3VsZC1lcnJv ciAoZXJ0LWZvbnQtbG9jay0tcGFyc2UtY29tbWVudHMpIDp0eXBlICd1c2VyLWVycm9yKSkpKQoK IChlcnQtZGVmdGVzdCB0ZXN0LXBhcnNlLWNvbW1lbnRzLS1zaW5nbGUtbGluZS1zaW5nbGUtY2Fy ZXQgKCkKICAgKGxldCogKChzdHIgIgpAQCAtMTU5LDcgKzE3MCw0NiBAQCB0ZXN0LXBhcnNlLWNv bW1lbnRzLS1zaW5nbGUtbGluZS1zaW5nbGUtY2FyZXQKICAgICAgIChzZXRxIGFzc2VydHMgKGVy dC1mb250LWxvY2stLXBhcnNlLWNvbW1lbnRzKSkKICAgICAgIChzaG91bGQgKGVxbCAobGVuZ3Ro IGFzc2VydHMpIDEpKQogICAgICAgKHNob3VsZCAoZXF1YWwgKGNhciBhc3NlcnRzKQotICAgICAg ICAgICAgICAgICAgICAgJyg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDMgOmNvbHVtbi1j aGVja2VkIDMgOmZhY2UgImZhY2UuZmFjZTEiIDpuZWdhdGlvbiBuaWwpKSkpKSkKKyAgICAgICAg ICAgICAgICAgICAgICcoOmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFzc2VydCAzIDpjb2x1bW4tY2hl Y2tlZCAzIDpmYWNlIGZhY2UuZmFjZTEgOm5lZ2F0aW9uIG5pbCkpKSkpKQorCisoZXJ0LWRlZnRl c3QgdGVzdC1wYXJzZS1jb21tZW50cy0tc2luZ2xlLWxpbmUtbWFueS1jYXJldHMgKCkKKyAgKGxl dCogKChzdHIgIgorbXVsdGlwbGVjYXJldHMKKy8vXl5eIF5eIF4gZmFjZS5mYWNlMQorIikKKyAg ICAgICAgIGFzc2VydHMpCisgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgIChpbnNlcnQgc3Ry KQorICAgICAgKGphdmFzY3JpcHQtbW9kZSkKKworICAgICAgKHNldHEgYXNzZXJ0cyAoZXJ0LWZv bnQtbG9jay0tcGFyc2UtY29tbWVudHMpKQorICAgICAgKHNob3VsZCAoZXFsIChsZW5ndGggYXNz ZXJ0cykgNikpCisgICAgICAoc2hvdWxkIChlcXVhbCBhc3NlcnRzCisgICAgICAgICAgICAgICAg ICAgICAnKCg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDMgOmNvbHVtbi1jaGVja2VkIDIg OmZhY2UgZmFjZS5mYWNlMSA6bmVnYXRpb24gbmlsKQorICAgICAgICAgICAgICAgICAgICAgICAo OmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFzc2VydCAzIDpjb2x1bW4tY2hlY2tlZCAzIDpmYWNlIGZh Y2UuZmFjZTEgOm5lZ2F0aW9uIG5pbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKDpsaW5lLWNo ZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6Y29sdW1uLWNoZWNrZWQgNCA6ZmFjZSBmYWNlLmZhY2Ux IDpuZWdhdGlvbiBuaWwpCisgICAgICAgICAgICAgICAgICAgICAgICg6bGluZS1jaGVja2VkIDIg OmxpbmUtYXNzZXJ0IDMgOmNvbHVtbi1jaGVja2VkIDYgOmZhY2UgZmFjZS5mYWNlMSA6bmVnYXRp b24gbmlsKQorICAgICAgICAgICAgICAgICAgICAgICAoOmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFz c2VydCAzIDpjb2x1bW4tY2hlY2tlZCA3IDpmYWNlIGZhY2UuZmFjZTEgOm5lZ2F0aW9uIG5pbCkK KyAgICAgICAgICAgICAgICAgICAgICAgKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6 Y29sdW1uLWNoZWNrZWQgOSA6ZmFjZSBmYWNlLmZhY2UxIDpuZWdhdGlvbiBuaWwpKSkpKSkpCisK KyhlcnQtZGVmdGVzdCB0ZXN0LXBhcnNlLWNvbW1lbnRzLS1mYWNlLWxpc3QgKCkKKyAgKGxldCog KChzdHIgIgorZmFjZWxpc3QKKy8vIF4gKGZhY2UxIGZhY2UyKQorLy8gXiAhKGZhY2UzIGZhY2U0 KQorLy8gXiAoZmFjZTUpCisiKQorICAgICAgICAgYXNzZXJ0cykKKyAgICAod2l0aC10ZW1wLWJ1 ZmZlcgorICAgICAgKGluc2VydCBzdHIpCisgICAgICAoamF2YXNjcmlwdC1tb2RlKQorCisgICAg ICAoc2V0cSBhc3NlcnRzIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpCisgICAgICAo c2hvdWxkIChlcWwgKGxlbmd0aCBhc3NlcnRzKSAzKSkKKyAgICAgIChzaG91bGQgKGVxdWFsIGFz c2VydHMKKyAgICAgICAgICAgICAgICAgICAgICcoKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3Nl cnQgMyA6Y29sdW1uLWNoZWNrZWQgMyA6ZmFjZSAoZmFjZTEgZmFjZTIpIDpuZWdhdGlvbiBuaWwp CisgICAgICAgICAgICAgICAgICAgICAgICg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDQg OmNvbHVtbi1jaGVja2VkIDMgOmZhY2UgKGZhY2UzIGZhY2U0KSA6bmVnYXRpb24gdCkKKyAgICAg ICAgICAgICAgICAgICAgICAgKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgNSA6Y29sdW1u LWNoZWNrZWQgMyA6ZmFjZSAoZmFjZTUpIDpuZWdhdGlvbiBuaWwpKSkpKSkpCgogKGVydC1kZWZ0 ZXN0IHRlc3QtcGFyc2UtY29tbWVudHMtLWNhcmV0LW5lZ2F0aW9uICgpCiAgIChsZXQqICgoc3Ry ICIKQEAgLTE3NSwxMSArMjI1LDExIEBAIHRlc3QtcGFyc2UtY29tbWVudHMtLWNhcmV0LW5lZ2F0 aW9uCiAgICAgICAoc2V0cSBhc3NlcnRzIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykp CiAgICAgICAoc2hvdWxkIChlcWwgKGxlbmd0aCBhc3NlcnRzKSAyKSkKICAgICAgIChzaG91bGQg KGVxdWFsIGFzc2VydHMKLSAgICAgICAgICAgICAgICAgICAgICcoKDpsaW5lLWNoZWNrZWQgMiA6 bGluZS1hc3NlcnQgMyA6Y29sdW1uLWNoZWNrZWQgMyA6ZmFjZSAiZmFjZSIgOm5lZ2F0aW9uIHQp Ci0gICAgICAgICAgICAgICAgICAgICAgICg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDQg OmNvbHVtbi1jaGVja2VkIDMgOmZhY2UgImZhY2UiIDpuZWdhdGlvbiBuaWwpKSkpKSkpCisgICAg ICAgICAgICAgICAgICAgICAnKCg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDMgOmNvbHVt bi1jaGVja2VkIDMgOmZhY2UgZmFjZSA6bmVnYXRpb24gdCkKKyAgICAgICAgICAgICAgICAgICAg ICAgKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgNCA6Y29sdW1uLWNoZWNrZWQgMyA6ZmFj ZSBmYWNlIDpuZWdhdGlvbiBuaWwpKSkpKSkpCgoKLShlcnQtZGVmdGVzdCB0ZXN0LXBhcnNlLWNv bW1lbnRzLS1zaW5nbGUtbGluZS1tdWx0aXBsZS1jYXJldHMgKCkKKyhlcnQtZGVmdGVzdCB0ZXN0 LXBhcnNlLWNvbW1lbnRzLS1zaW5nbGUtbGluZS1tdWx0aXBsZS1hc3NlcnQtbGluZXMgKCkKICAg KGxldCogKChzdHIgIgogZmlyc3QKIC8vIF4gZmFjZTEKQEAgLTE5NiwxMiArMjQ2LDEyIEBAIHRl c3QtcGFyc2UtY29tbWVudHMtLXNpbmdsZS1saW5lLW11bHRpcGxlLWNhcmV0cwogICAgICAgKHNl dHEgYXNzZXJ0cyAoZXJ0LWZvbnQtbG9jay0tcGFyc2UtY29tbWVudHMpKQogICAgICAgKHNob3Vs ZCAoZXFsIChsZW5ndGggYXNzZXJ0cykgNCkpCiAgICAgICAoc2hvdWxkIChlcXVhbCBhc3NlcnRz Ci0gICAgICAgICAgICAgICAgICAgICAnKCg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDMg OmNvbHVtbi1jaGVja2VkIDMgOmZhY2UgImZhY2UxIiA6bmVnYXRpb24gbmlsKQotICAgICAgICAg ICAgICAgICAgICAgICAoOmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFzc2VydCA0IDpjb2x1bW4tY2hl Y2tlZCA3IDpmYWNlICJmYWNlLmZhY2UyIiA6bmVnYXRpb24gbmlsKQotICAgICAgICAgICAgICAg ICAgICAgICAoOmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFzc2VydCA1IDpjb2x1bW4tY2hlY2tlZCA3 IDpmYWNlICJmYWNlLWZhY2UuZmFjZTMiIDpuZWdhdGlvbiBuaWwpCi0gICAgICAgICAgICAgICAg ICAgICAgICg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDYgOmNvbHVtbi1jaGVja2VkIDcg OmZhY2UgImZhY2VfZmFjZS5mYWNlNCIgOm5lZ2F0aW9uIG5pbCkpKSkpKSkKKyAgICAgICAgICAg ICAgICAgICAgICcoKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6Y29sdW1uLWNoZWNr ZWQgMyA6ZmFjZSBmYWNlMSA6bmVnYXRpb24gbmlsKQorICAgICAgICAgICAgICAgICAgICAgICAo OmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFzc2VydCA0IDpjb2x1bW4tY2hlY2tlZCA3IDpmYWNlIGZh Y2UuZmFjZTIgOm5lZ2F0aW9uIG5pbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKDpsaW5lLWNo ZWNrZWQgMiA6bGluZS1hc3NlcnQgNSA6Y29sdW1uLWNoZWNrZWQgNyA6ZmFjZSBmYWNlLWZhY2Uu ZmFjZTMgOm5lZ2F0aW9uIG5pbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKDpsaW5lLWNoZWNr ZWQgMiA6bGluZS1hc3NlcnQgNiA6Y29sdW1uLWNoZWNrZWQgNyA6ZmFjZSBmYWNlX2ZhY2UuZmFj ZTQgOm5lZ2F0aW9uIG5pbCkpKSkpKSkKCi0oZXJ0LWRlZnRlc3QgdGVzdC1wYXJzZS1jb21tZW50 cy0tbXVsdGlwbGUtbGluZS1tdWx0aXBsZS1jYXJldHMgKCkKKyhlcnQtZGVmdGVzdCB0ZXN0LXBh cnNlLWNvbW1lbnRzLS1tdWx0aXBsZS1saW5lLW11bHRpcGxlLWFzc2VydC1saW5lcyAoKQogICAo bGV0KiAoKHN0ciAiCiBmaXJzdAogLy8gXiBmYWNlMQpAQCAtMjE4LDkgKzI2OCw5IEBAIHRlc3Qt cGFyc2UtY29tbWVudHMtLW11bHRpcGxlLWxpbmUtbXVsdGlwbGUtY2FyZXRzCiAgICAgICAoc2V0 cSBhc3NlcnRzIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpCiAgICAgICAoc2hvdWxk IChlcWwgKGxlbmd0aCBhc3NlcnRzKSAzKSkKICAgICAgIChzaG91bGQgKGVxdWFsIGFzc2VydHMK LSAgICAgICAgICAgICAgICAgICAgICcoKDpsaW5lLWNoZWNrZWQgMiAgOmxpbmUtYXNzZXJ0IDMg OmNvbHVtbi1jaGVja2VkIDMgOmZhY2UgImZhY2UxIiA6bmVnYXRpb24gbmlsKQotICAgICAgICAg ICAgICAgICAgICAgICAoOmxpbmUtY2hlY2tlZCA0ICA6bGluZS1hc3NlcnQgNSA6Y29sdW1uLWNo ZWNrZWQgMyA6ZmFjZSAiZmFjZTIiIDpuZWdhdGlvbiBuaWwpCi0gICAgICAgICAgICAgICAgICAg ICAgICg6bGluZS1jaGVja2VkIDQgIDpsaW5lLWFzc2VydCA2IDpjb2x1bW4tY2hlY2tlZCA1IDpm YWNlICJmYWNlMyIgOm5lZ2F0aW9uIG5pbCkpKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICco KDpsaW5lLWNoZWNrZWQgMiAgOmxpbmUtYXNzZXJ0IDMgOmNvbHVtbi1jaGVja2VkIDMgOmZhY2Ug ZmFjZTEgOm5lZ2F0aW9uIG5pbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKDpsaW5lLWNoZWNr ZWQgNCAgOmxpbmUtYXNzZXJ0IDUgOmNvbHVtbi1jaGVja2VkIDMgOmZhY2UgZmFjZTIgOm5lZ2F0 aW9uIG5pbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKDpsaW5lLWNoZWNrZWQgNCAgOmxpbmUt YXNzZXJ0IDYgOmNvbHVtbi1jaGVja2VkIDUgOmZhY2UgZmFjZTMgOm5lZ2F0aW9uIG5pbCkpKSkp KSkKCgogKGVydC1kZWZ0ZXN0IHRlc3QtcGFyc2UtY29tbWVudHMtLWFycm93LXNpbmdsZS1saW5l LXNpbmdsZSAoKQpAQCAtMjM2LDcgKzI4Niw3IEBAIHRlc3QtcGFyc2UtY29tbWVudHMtLWFycm93 LXNpbmdsZS1saW5lLXNpbmdsZQogICAgICAgKHNldHEgYXNzZXJ0cyAoZXJ0LWZvbnQtbG9jay0t cGFyc2UtY29tbWVudHMpKQogICAgICAgKHNob3VsZCAoZXFsIChsZW5ndGggYXNzZXJ0cykgMSkp CiAgICAgICAoc2hvdWxkIChlcXVhbCAoY2FyIGFzc2VydHMpCi0gICAgICAgICAgICAgICAgICAg ICAnKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6Y29sdW1uLWNoZWNrZWQgMCA6ZmFj ZSAiZmFjZTEiIDpuZWdhdGlvbiBuaWwpKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICcoOmxp bmUtY2hlY2tlZCAyIDpsaW5lLWFzc2VydCAzIDpjb2x1bW4tY2hlY2tlZCAwIDpmYWNlIGZhY2Ux IDpuZWdhdGlvbiBuaWwpKSkpKSkKCgogKGVydC1kZWZ0ZXN0IHRlc3QtcGFyc2UtY29tbWVudHMt YXJyb3ctbXVsdGlwbGUtbGluZS1zaW5nbGUgKCkKQEAgLTI1NCw5ICszMDQsOSBAQCB0ZXN0LXBh cnNlLWNvbW1lbnRzLWFycm93LW11bHRpcGxlLWxpbmUtc2luZ2xlCiAgICAgICAoc2V0cSBhc3Nl cnRzIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpCiAgICAgICAoc2hvdWxkIChlcWwg KGxlbmd0aCBhc3NlcnRzKSAzKSkKICAgICAgIChzaG91bGQgKGVxdWFsIGFzc2VydHMKLSAgICAg ICAgICAgICAgICAgICAgICcoKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6Y29sdW1u LWNoZWNrZWQgMCA6ZmFjZSAiZmFjZTEiIDpuZWdhdGlvbiBuaWwpCi0gICAgICAgICAgICAgICAg ICAgICAgICg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDQgOmNvbHVtbi1jaGVja2VkIDIg OmZhY2UgImZhY2UyIiA6bmVnYXRpb24gbmlsKQotICAgICAgICAgICAgICAgICAgICAgICAoOmxp bmUtY2hlY2tlZCAyIDpsaW5lLWFzc2VydCA1IDpjb2x1bW4tY2hlY2tlZCA0IDpmYWNlICJmYWNl MyIgOm5lZ2F0aW9uIG5pbCkpKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICcoKDpsaW5lLWNo ZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6Y29sdW1uLWNoZWNrZWQgMCA6ZmFjZSBmYWNlMSA6bmVn YXRpb24gbmlsKQorICAgICAgICAgICAgICAgICAgICAgICAoOmxpbmUtY2hlY2tlZCAyIDpsaW5l LWFzc2VydCA0IDpjb2x1bW4tY2hlY2tlZCAyIDpmYWNlIGZhY2UyIDpuZWdhdGlvbiBuaWwpCisg ICAgICAgICAgICAgICAgICAgICAgICg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDUgOmNv bHVtbi1jaGVja2VkIDQgOmZhY2UgZmFjZTMgOm5lZ2F0aW9uIG5pbCkpKSkpKSkKCiAoZXJ0LWRl ZnRlc3QgdGVzdC1wYXJzZS1jb21tZW50cy0tbm9uLWFzc2VydC1jb21tZW50LXNpbmdsZSAoKQog ICAobGV0KiAoKHN0ciAiCkBAIC0yNzEsNyArMzIxLDcgQEAgdGVzdC1wYXJzZS1jb21tZW50cy0t bm9uLWFzc2VydC1jb21tZW50LXNpbmdsZQogICAgICAgKHNldHEgYXNzZXJ0cyAoZXJ0LWZvbnQt bG9jay0tcGFyc2UtY29tbWVudHMpKQogICAgICAgKHNob3VsZCAoZXFsIChsZW5ndGggYXNzZXJ0 cykgMSkpCiAgICAgICAoc2hvdWxkIChlcXVhbCAoY2FyIGFzc2VydHMpCi0gICAgICAgICAgICAg ICAgICAgICAnKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6Y29sdW1uLWNoZWNrZWQg NCA6ZmFjZSAiY29tbWVudC1mYWNlIiA6bmVnYXRpb24gbmlsKSkpKSkpCisgICAgICAgICAgICAg ICAgICAgICAnKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6Y29sdW1uLWNoZWNrZWQg NCA6ZmFjZSBjb21tZW50LWZhY2UgOm5lZ2F0aW9uIG5pbCkpKSkpKQoKIChlcnQtZGVmdGVzdCB0 ZXN0LXBhcnNlLWNvbW1lbnRzLS1ub24tYXNzZXJ0LWNvbW1lbnQtbXVsdGlwbGUgKCkKICAgKGxl dCogKChzdHIgIgpAQCAtMjg4LDkgKzMzOCw5IEBAIHRlc3QtcGFyc2UtY29tbWVudHMtLW5vbi1h c3NlcnQtY29tbWVudC1tdWx0aXBsZQogICAgICAgKHNldHEgYXNzZXJ0cyAoZXJ0LWZvbnQtbG9j ay0tcGFyc2UtY29tbWVudHMpKQogICAgICAgKHNob3VsZCAoZXFsIChsZW5ndGggYXNzZXJ0cykg MykpCiAgICAgICAoc2hvdWxkIChlcXVhbCBhc3NlcnRzCi0gICAgICAgICAgICAgICAgICAgICAn KCg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDMgOmNvbHVtbi1jaGVja2VkIDQgOmZhY2Ug ImNvbW1lbnQtZmFjZSIgOm5lZ2F0aW9uIG5pbCkKLSAgICAgICAgICAgICAgICAgICAgICAgKDps aW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgNCA6Y29sdW1uLWNoZWNrZWQgMTAgOmZhY2UgImNv bW1lbnQtZmFjZSIgOm5lZ2F0aW9uIG5pbCkKLSAgICAgICAgICAgICAgICAgICAgICAgKDpsaW5l LWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgNSA6Y29sdW1uLWNoZWNrZWQgMTggOmZhY2UgImNvbW1l bnQtZmFjZSIgOm5lZ2F0aW9uIG5pbCkpKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICcoKDps aW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6Y29sdW1uLWNoZWNrZWQgNCA6ZmFjZSBjb21t ZW50LWZhY2UgOm5lZ2F0aW9uIG5pbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKDpsaW5lLWNo ZWNrZWQgMiA6bGluZS1hc3NlcnQgNCA6Y29sdW1uLWNoZWNrZWQgMTAgOmZhY2UgY29tbWVudC1m YWNlIDpuZWdhdGlvbiBuaWwpCisgICAgICAgICAgICAgICAgICAgICAgICg6bGluZS1jaGVja2Vk IDIgOmxpbmUtYXNzZXJ0IDUgOmNvbHVtbi1jaGVja2VkIDE4IDpmYWNlIGNvbW1lbnQtZmFjZSA6 bmVnYXRpb24gbmlsKSkpKSkpKQoKCiAoZXJ0LWRlZnRlc3QgdGVzdC1wYXJzZS1jb21tZW50cy0t bXVsdGlsaW5lLWNvbW1lbnQtc2luZ2xlICgpCkBAIC0zMDgsNyArMzU4LDcgQEAgdGVzdC1wYXJz ZS1jb21tZW50cy0tbXVsdGlsaW5lLWNvbW1lbnQtc2luZ2xlCiAgICAgICAoc2V0cSBhc3NlcnRz IChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpCiAgICAgICAoc2hvdWxkIChlcWwgKGxl bmd0aCBhc3NlcnRzKSAxKSkKICAgICAgIChzaG91bGQgKGVxdWFsIChjYXIgYXNzZXJ0cykKLSAg ICAgICAgICAgICAgICAgICAgICcoOmxpbmUtY2hlY2tlZCAzIDpsaW5lLWFzc2VydCA0IDpjb2x1 bW4tY2hlY2tlZCAzIDpmYWNlICJjb21tZW50LWZhY2UiIDpuZWdhdGlvbiBuaWwpKSkpKSkKKyAg ICAgICAgICAgICAgICAgICAgICcoOmxpbmUtY2hlY2tlZCAzIDpsaW5lLWFzc2VydCA0IDpjb2x1 bW4tY2hlY2tlZCAzIDpmYWNlIGNvbW1lbnQtZmFjZSA6bmVnYXRpb24gbmlsKSkpKSkpCgogKGVy dC1kZWZ0ZXN0IHRlc3QtcGFyc2UtY29tbWVudHMtLW11bHRpbGluZS1jb21tZW50LW11bHRpcGxl ICgpCiAgIChsZXQqICgoc3RyICIKQEAgLTMyNywxMyArMzc3LDQ3IEBAIHRlc3QtcGFyc2UtY29t bWVudHMtLW11bHRpbGluZS1jb21tZW50LW11bHRpcGxlCiAgICAgICAoc2V0cSBhc3NlcnRzIChl cnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpCiAgICAgICAoc2hvdWxkIChlcWwgKGxlbmd0 aCBhc3NlcnRzKSAyKSkKICAgICAgIChzaG91bGQgKGVxdWFsIGFzc2VydHMKLSAgICAgICAgICAg ICAgICAgICAgICcoKDpsaW5lLWNoZWNrZWQgMyA6bGluZS1hc3NlcnQgNCA6Y29sdW1uLWNoZWNr ZWQgMyA6ZmFjZSAiY29tbWVudC1mYWNlIiA6bmVnYXRpb24gbmlsKQotICAgICAgICAgICAgICAg ICAgICAgICAoOmxpbmUtY2hlY2tlZCA1IDpsaW5lLWFzc2VydCA2IDpjb2x1bW4tY2hlY2tlZCA0 IDpmYWNlICJjb21tZW50LWZhY2UiIDpuZWdhdGlvbiBuaWwpKSkpKSkpCisgICAgICAgICAgICAg ICAgICAgICAnKCg6bGluZS1jaGVja2VkIDMgOmxpbmUtYXNzZXJ0IDQgOmNvbHVtbi1jaGVja2Vk IDMgOmZhY2UgY29tbWVudC1mYWNlIDpuZWdhdGlvbiBuaWwpCisgICAgICAgICAgICAgICAgICAg ICAgICg6bGluZS1jaGVja2VkIDUgOmxpbmUtYXNzZXJ0IDYgOmNvbHVtbi1jaGVja2VkIDQgOmZh Y2UgY29tbWVudC1mYWNlIDpuZWdhdGlvbiBuaWwpKSkpKSkpCgogOzs7IFN5bnRheCBoaWdobGln aHRpbmcgYXNzZXJ0aW9uIHRlc3RzCiA7OwoKLShlcnQtZGVmdGVzdCB0ZXN0LXN5bnRheC1oaWdo bGlnaHQtaW5saW5lLS1jYXJldC1tdWx0aXBsZS1mYWNlcyAoKQorKGVydC1kZWZ0ZXN0IHRlc3Qt c3ludGF4LWhpZ2hsaWdodC1pbmxpbmUtLW5pbC1saXN0ICgpCisgIChsZXQgKChzdHIgIgordmFy IGFiYyA9IGZ1bmN0aW9uKGQpIHsKKy8vIF4gbmlsCisvLyAgIF4gIW5pbAorfTsKKworIikpCisg ICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgIChpbnNlcnQgc3RyKQorICAgICAgKGphdmFzY3Jp cHQtbW9kZSkKKyAgICAgIChmb250LWxvY2stZW5zdXJlKQorCisgICAgICAoZXJ0LWZvbnQtbG9j ay0tY2hlY2stZmFjZXMKKyAgICAgICAoZXJ0LWZvbnQtbG9jay0tcGFyc2UtY29tbWVudHMpKSkp KQorCisoZXJ0LWRlZnRlc3QgdGVzdC1zeW50YXgtaGlnaGxpZ2h0LWlubGluZS0tZmFjZS1saXN0 ICgpCisgIChsZXQgKChzdHIgIgordmFyIGFiYyA9IGZ1bmN0aW9uKGQpIHsKKy8vICAgXiAodGVz dC1mYWNlLTIgdGVzdC1mYWNlLTEgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkKK307CisK KyIpKQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAoaW5zZXJ0IHN0cikKKyAgICAgIChq YXZhc2NyaXB0LW1vZGUpCisgICAgICAoZm9udC1sb2NrLWVuc3VyZSkKKworICAgICAgKGFkZC1m YWNlLXRleHQtcHJvcGVydHkgKHBvaW50LW1pbikgKHBvaW50LW1heCkgJ3Rlc3QtZmFjZS0xKQor ICAgICAgKGFkZC1mYWNlLXRleHQtcHJvcGVydHkgKHBvaW50LW1pbikgKHBvaW50LW1heCkgJ3Rl c3QtZmFjZS0yKQorCisgICAgICAoZXJ0LWZvbnQtbG9jay0tY2hlY2stZmFjZXMKKyAgICAgICAo ZXJ0LWZvbnQtbG9jay0tcGFyc2UtY29tbWVudHMpKSkpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC1z eW50YXgtaGlnaGxpZ2h0LWlubGluZS0tY2FyZXQtbXVsdGlwbGUtYXNzZXJ0aW9ucyAoKQogICAo bGV0ICgoc3RyICIKIHZhciBhYmMgPSBmdW5jdGlvbihkKSB7CiAvLyAgIF4gZm9udC1sb2NrLXZh cmlhYmxlLW5hbWUtZmFjZQpAQCAtMzY0LDYgKzQ0OCwxOSBAQCB0ZXN0LXN5bnRheC1oaWdobGln aHQtaW5saW5lLS1jYXJldC13cm9uZy1mYWNlCiAgICAgICAoc2hvdWxkLWVycm9yIChlcnQtZm9u dC1sb2NrLS1jaGVjay1mYWNlcwogICAgICAgICAgICAgICAgICAgICAgKGVydC1mb250LWxvY2st LXBhcnNlLWNvbW1lbnRzKSkpKSkpCgorKGVydC1kZWZ0ZXN0IHRlc3Qtc3ludGF4LWhpZ2hsaWdo dC1pbmxpbmUtLWNhcmV0LW5lZ2F0ZWQtd3JvbmctZmFjZSAoKQorICAobGV0KiAoKHN0ciAiCit2 YXIgYWJjID0gZnVuY3Rpb24oZCkgeworLy8gICBeICFub3QtYS1mYWNlCit9OworIikpCisgICAg KHdpdGgtdGVtcC1idWZmZXIKKyAgICAgIChpbnNlcnQgc3RyKQorICAgICAgKGphdmFzY3JpcHQt bW9kZSkKKyAgICAgIChmb250LWxvY2stZW5zdXJlKQorCisgICAgICAoZXJ0LWZvbnQtbG9jay0t Y2hlY2stZmFjZXMKKyAgICAgICAoZXJ0LWZvbnQtbG9jay0tcGFyc2UtY29tbWVudHMpKSkpKQoK IChlcnQtZGVmdGVzdCB0ZXN0LXN5bnRheC1oaWdobGlnaHQtaW5saW5lLS1jb21tZW50LWZhY2Ug KCkKICAgKGxldCogKChzdHIgIgpAQCAtNDU1LDYgKzU1MiwxMiBAQCB0ZXN0LW1hY3JvLXRlc3Qt LWZpbGUKICAgamF2YXNjcmlwdC1tb2RlCiAgICJjb3JyZWN0LmpzIikKCisoZXJ0LWZvbnQtbG9j ay1kZWZ0ZXN0LWZpbGUgdGVzdC1tYWNyby10ZXN0LS1maWxlLW5vLWFzc2VydHMKKyAgICAiQ2hl Y2sgZmFpbGluZyBvbiBmaWxlcyB3aXRob3V0IGFzc2VydGlvbnMiCisgIDpleHBlY3RlZC1yZXN1 bHQgOmZhaWxlZAorICBqYXZhc2NyaXB0LW1vZGUKKyAgIm5vLWFzc2VydHMuanMiKQorCiAoZXJ0 LWZvbnQtbG9jay1kZWZ0ZXN0LWZpbGUgdGVzdC1tYWNyby10ZXN0LS1maWxlLWZhaWxpbmcKICAg ICAiVGVzdCByZWFkaW5nIHdyb25nIGFzc2VydGlvbnMgZnJvbSBhIGZpbGUiCiAgIDpleHBlY3Rl ZC1yZXN1bHQgOmZhaWxlZAotLQoyLjM0LjEK --000000000000b33a0806138ed47f--