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#67460: [PATCH] Add ert-font-lock Date: Sun, 26 Nov 2023 18:47:30 +0000 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000cefb58060b129e56" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="28908"; mail-complaints-to="usenet@ciao.gmane.io" To: 67460@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Nov 26 19:49:15 2023 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 1r7KBv-0007Mp-Ku for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 26 Nov 2023 19:49:15 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r7KBf-0003vI-67; Sun, 26 Nov 2023 13:48:59 -0500 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 1r7KBd-0003uu-0z for bug-gnu-emacs@gnu.org; Sun, 26 Nov 2023 13:48:57 -0500 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 1r7KBc-0006DR-Nz for bug-gnu-emacs@gnu.org; Sun, 26 Nov 2023 13:48:56 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1r7KBi-00081T-GL for bug-gnu-emacs@gnu.org; Sun, 26 Nov 2023 13:49:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Vladimir Kazanov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 26 Nov 2023 18:49:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 67460 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.170102448930577 (code B ref -1); Sun, 26 Nov 2023 18:49:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 26 Nov 2023 18:48:09 +0000 Original-Received: from localhost ([127.0.0.1]:42712 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r7KAp-0007wv-KV for submit@debbugs.gnu.org; Sun, 26 Nov 2023 13:48:09 -0500 Original-Received: from lists.gnu.org ([2001:470:142::17]:60916) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r7KAk-0007vY-J6 for submit@debbugs.gnu.org; Sun, 26 Nov 2023 13:48:06 -0500 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 1r7KAZ-0003q2-EI for bug-gnu-emacs@gnu.org; Sun, 26 Nov 2023 13:47:51 -0500 Original-Received: from mail-lj1-x22b.google.com ([2a00:1450:4864:20::22b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r7KAU-0005v9-Ay for bug-gnu-emacs@gnu.org; Sun, 26 Nov 2023 13:47:51 -0500 Original-Received: by mail-lj1-x22b.google.com with SMTP id 38308e7fff4ca-2c51682fddeso46009551fa.1 for ; Sun, 26 Nov 2023 10:47:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701024462; x=1701629262; darn=gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Dvn/c3M22h6ICLemmCSB3Odn6Rs6fqjldjEgt/u+mSQ=; b=eCMeeQoMgqTLoap36lkawGB+BPiyWEvnOFHn5a9QbeuDU5aWORlAA/WncS0gcDBSdR GXE5bfPWK0IVTLqbfA6jRs9WaGvao/sEghhQxMLyIqOmHzF6QBzx5C8hwmfh63xRIqyr MbOqNHxtfNIxuSoZdr7mCZwZQEtUJdgtu3HBC2fMyOXreK1gu3jToVKnlwr2ZYZw9Gv1 XxYNSssTaerBXpgbAUqf9ofJdQNkKFFFydZH8AYnEHBDQ2kFah4DfmTGiUjgMhXUb83U Sj/lXIIGZPX+kmQNDsjhDBD/NrsSG9J3JDCNeJ8IraNuY8XisoSFFNWBvmXQs/D+WV2Y /aaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701024462; x=1701629262; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Dvn/c3M22h6ICLemmCSB3Odn6Rs6fqjldjEgt/u+mSQ=; b=iqeZvx7t1nRB5ZGOzcVulC3QM1lRRrMSK6GyfRb/30Ky3VLwCVZnaCXYdf9ecb/Bm/ WPcbMr43B2/tg7sHxhNoR9XtEoUjnPu4ZOf1fDvJdon0Ahs7ejL3vqNpFPaAjuiKEfCY As3lE1eFw2oO/i/ahCYGdvakI44WptZiSqT9r+wCQasU6tk7wAF9fdiMJrNEEIGd96H0 tASrPMA4f9AsQA7+PnWq7OZGvgEUzUptcRDRLv8KUvhP1CkyuVoYMYDsJQbvtr65CNlr gADLvpgLbuzR13uUQzdVCzoN4x3npg7FZJe5M9ZtXb3g5FIXSg773ziPqkp4MPWjvH8R 3ShQ== X-Gm-Message-State: AOJu0YzBuaY0m2FZEW2O6/nWzzyNkFK4xEpvsQXY/so3Vt7beLbINbUQ e6sWYHfLbDnwRpEGO2855n94cn3qS4cYzLPIoagA9qyZKQ== X-Google-Smtp-Source: AGHT+IFhsYLrsMGh4NZinShb2ifuYxsZuJv2mV0d8HN8xDXNldJFrYUSNxi4jZmqYZkYtB2rnIA1yn9BuyEqZjJm9Oc= X-Received: by 2002:a05:651c:3cf:b0:2c8:80bf:977b with SMTP id f15-20020a05651c03cf00b002c880bf977bmr4463531ljp.24.1701024461938; Sun, 26 Nov 2023 10:47:41 -0800 (PST) Received-SPF: pass client-ip=2a00:1450:4864:20::22b; envelope-from=vekazanov@gmail.com; helo=mail-lj1-x22b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action 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:275081 Archived-At: --000000000000cefb58060b129e56 Content-Type: text/plain; charset="UTF-8" As suggested in emacs-devel@ [1], this patch adds ert-lont-lock.el to Emacs. Ert-font-lock is an extension to ERT providing an easy way to check font faces either in inline strings or resource files. The assertion syntax is based on Tree-sitter's syntax highlighter unit tests [2]. This makes it easy to port existing tree-sitter grammar tests to support both new-style ts-based major modes and the traditional ones. [1] https://lists.gnu.org/archive/html/emacs-devel/2023-11/msg00867.html [2] https://tree-sitter.github.io/tree-sitter/syntax-highlighting#unit-testing -- Regards, Vladimir Kazanov --000000000000cefb58060b129e56 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-ert-font-lock.patch" Content-Disposition: attachment; filename="0001-Add-ert-font-lock.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lpftlako0 RnJvbSA0MDM2Yjc0ZGFhNjE3OGZiZjZjZGUzYjQyZWYxYWFjZDBmYmNlNzY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWbGFkaW1pciBLYXphbm92IDx2ZWthemFub3ZAZ21haWwuY29t PgpEYXRlOiBTdW4sIDI2IE5vdiAyMDIzIDExOjQ4OjE2ICswMDAwClN1YmplY3Q6IFtQQVRDSF0g QWRkIGVydC1mb250LWxvY2sKCkFkZCBlcnQtZm9udC1sb2NrIGFzIHdlbGwgYXMgdW5pdCB0ZXN0 cyBhbmQgdGVzdGluZyByZXNvdXJjZXMuCiogbGlzcC9lbWFjcy1saXNwL2VydC1mb250LWxvY2su ZWw6IHRoZSBsaWJyYXJ5IGl0c2VsZi4KKiB0ZXN0L2xpc3AvZW1hY3MtbGlzcC9lcnQtZm9udC1s b2NrLXJlc291cmNlcy9icm9rZW4uanM6CiogdGVzdC9saXNwL2VtYWNzLWxpc3AvZXJ0LWZvbnQt bG9jay1yZXNvdXJjZXMvY29ycmVjdC5qczoKKiB0ZXN0L2xpc3AvZW1hY3MtbGlzcC9lcnQtZm9u dC1sb2NrLXRlc3RzLmVsOiB1bml0IHRlc3RzLgotLS0KIGxpc3AvZW1hY3MtbGlzcC9lcnQtZm9u dC1sb2NrLmVsICAgICAgICAgICAgICB8IDM2NCArKysrKysrKysrKysrKwogLi4uL2VydC1mb250 LWxvY2stcmVzb3VyY2VzL2Jyb2tlbi5qcyAgICAgICAgIHwgICAzICsKIC4uLi9lcnQtZm9udC1s b2NrLXJlc291cmNlcy9jb3JyZWN0LmpzICAgICAgICB8ICAgMyArCiB0ZXN0L2xpc3AvZW1hY3Mt bGlzcC9lcnQtZm9udC1sb2NrLXRlc3RzLmVsICAgfCA0NjQgKysrKysrKysrKysrKysrKysrCiA0 IGZpbGVzIGNoYW5nZWQsIDgzNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlz cC9lbWFjcy1saXNwL2VydC1mb250LWxvY2suZWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2xp c3AvZW1hY3MtbGlzcC9lcnQtZm9udC1sb2NrLXJlc291cmNlcy9icm9rZW4uanMKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0ZXN0L2xpc3AvZW1hY3MtbGlzcC9lcnQtZm9udC1sb2NrLXJlc291cmNlcy9j b3JyZWN0LmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9saXNwL2VtYWNzLWxpc3AvZXJ0LWZv bnQtbG9jay10ZXN0cy5lbAoKZGlmZiAtLWdpdCBhL2xpc3AvZW1hY3MtbGlzcC9lcnQtZm9udC1s b2NrLmVsIGIvbGlzcC9lbWFjcy1saXNwL2VydC1mb250LWxvY2suZWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNmZjY0NGU5YWZiCi0tLSAvZGV2L251bGwKKysrIGIv bGlzcC9lbWFjcy1saXNwL2VydC1mb250LWxvY2suZWwKQEAgLTAsMCArMSwzNjQgQEAKKzs7OyBl cnQtZm9udC1sb2NrLmVsIC0tLSBFUlQgRm9udCBMb2NrICAgLSotIGxleGljYWwtYmluZGluZzog dCAtKi0KKworOzsgQ29weXJpZ2h0IChDKSAyMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCis7OyBBdXRob3I6IFZsYWRpbWlyIEthemFub3YKKzs7IEtleXdvcmRzOiBsaXNwLCB0 b29scworCis7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgRW1hY3MuCisKKzs7IEdOVSBFbWFj cyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Cis7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKzs7IChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisKKzs7IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzs7IE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzs7IEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKzs7IFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBhbG9u ZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKKzs7OyBDb21tZW50YXJ5OgorOzsKKzs7IEVSVCBGb250IExvY2sgaXMgYW4gZXh0 ZW5zaW9uIHRvIHRoZSBFbWFjcyBMaXNwIFJlZ3Jlc3Npb24gVGVzdAorOzsgbGlicmFyeSAoRVJU KSBwcm92aWRpbmcgYSBjb252ZW5pZW50IHdheSB0byBjaGVjayBzeW50YXgKKzs7IGhpZ2hsaWdo dGluZyBwcm92aWRlZCBieSBmb250LWxvY2suCis7OworOzsgZXJ0LWZvbnQtbG9jayBlbnRyeSBw b2ludHMgYXJlIGZ1bmN0aW9ucworOzsgYGVydC1mb250LWxvY2stdGVzdC1zdHJpbmcnIGFuZCBg ZXJ0LWZvbnQtbG9jay10ZXN0LWZpbGUnIGFuZAorOzsgY292ZW5pZW5jZSBtYWNyb3M6IGBlcnQt Zm9udC1sb2NrLWRlZnRlc3QnIGFuZAorOzsgYGVydC1mb250LWxvY2stZGVmdGVzdC1maWxlJy4K Kzs7Cis7OyBTZWUgdW5pdCB0ZXN0cyBpbiBlcnQtZm9udC1sb2NrLXRlc3RzLmVsIGZvciB1c2Fn ZSBleGFtcGxlcy4KKworOzs7IENvZGU6CisKKyhyZXF1aXJlICdlcnQpCisocmVxdWlyZSAnbmV3 Y29tbWVudCkKKyhyZXF1aXJlICdwY2FzZSkKKworKGRlZmNvbnN0IGVydC1mb250LWxvY2stLWFz c2VydGlvbi1yZQorICAocngKKyAgIDs7IGNvbHVtbiBzcGVjaWZpZXJzCisgICAoZ3JvdXAgKG9y ICJeIiAiPC0iKSkKKyAgIChvbmUtb3ItbW9yZSAiICIpCisgICA7OyBvcHRpb25hbCBuZWdhdGlv biBvZiB0aGUgZmFjZSBzcGVjaWZpY2F0aW9uCisgICAoZ3JvdXAgKG9wdGlvbmFsICIhIikpCisg ICA7OyBmYWNlIHN5bWJvbCBuYW1lCisgICAoZ3JvdXAgKG9uZS1vci1tb3JlIChvciBhbHBoYW51 bWVyaWMgIi0iICJfIiAiLiIpKSkpCisgICJBbiBlcnQtZm9udC1sb2NrIGFzc2VydGlvbiByZWdl eC4iKQorCisoZGVmdW4gZXJ0LWZvbnQtbG9jay0tdmFsaWRhdGUtbWFqb3ItbW9kZSAobW9kZSkK KyAgIlZhbGlkYXRlIGlmIE1PREUgaXMgYSB2YWxpZCBtYWpvciBtb2RlLiIKKyAgKHVubGVzcyAo ZnVuY3Rpb25wIG1vZGUpCisgICAgKGVycm9yICJJbnZhbGlkIG1ham9yIG1vZGU6ICVTLiBQbGVh c2Ugc3BlY2lmeSBhIHZhbGlkIG1ham9yIG1vZGUgZm9yCisgc3ludGF4IGhpZ2hsaWdodGluZyB0 ZXN0cyIgbW9kZSkpKQorCisoZGVmdW4gZXJ0LWZvbnQtbG9jay0tdGVzdC1ib2R5LXN0ciAobW9k ZSBzdHIgdGVzdC1uYW1lKQorICAiUnVuIGFzc2VydGlvbnMgZnJvbSBTVFIuCitBcmd1bWVudCBN T0RFIC0gbWFqb3IgbW9kZSB0byB0ZXN0LgorQXJndW1lbnQgVEVTVC1OQU1FIC0gbmFtZSBvZiB0 aGUgY3VycmVudGx5IHJ1bm5pbmcgZXJ0IHRlc3QuIgorICAoZXJ0LWZvbnQtbG9jay0tdmFsaWRh dGUtbWFqb3ItbW9kZSBtb2RlKQorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChpbnNlcnQgc3Ry KQorICAgIChmdW5jYWxsIG1vZGUpCisgICAgKGZvbnQtbG9jay1lbnN1cmUpCisgICAgKGxldCAo KHRlc3RzIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpKQorICAgICAgKGVydC1mb250 LWxvY2stLWNoZWNrLWZhY2VzIHRlc3RzKSkpCisgIHRlc3QtbmFtZSkKKworKGRlZnVuIGVydC1m b250LWxvY2stLXRlc3QtYm9keS1maWxlIChtb2RlIGZpbGUgdGVzdC1uYW1lKQorICAiUnVuIGFz c2VydGlvbnMgZnJvbSBGSUxFLgorQXJndW1lbnQgTU9ERSAtIG1ham9yIG1vZGUgdG8gdGVzdC4K K0FyZ3VtZW50IFRFU1QtTkFNRSAtIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGVydCB0 ZXN0LiIKKyAgKGVydC1mb250LWxvY2stLXZhbGlkYXRlLW1ham9yLW1vZGUgbW9kZSkKKyAgKGVy dC1mb250LWxvY2stdGVzdC1maWxlIGZpbGUgbW9kZSkKKyAgdGVzdC1uYW1lKQorCisoZGVmdW4g ZXJ0LWZvbnQtbG9jay0tcGFyc2UtbWFjcm8tYXJncyAoZG9jLWtleXMtbW9kZS1hcmcpCisgICJQ YXJzZSBET0MtS0VZUy1NT0RFLUFSRyBtYWNybyBhcmd1bWVudCBsaXN0LiIKKyAgKGxldCAoZG9j IGRvYy1wIGtleXMgbW9kZSBhcmcpCisKKyAgICAod2hlbiAoc3RyaW5ncCAoY2FyIGRvYy1rZXlz LW1vZGUtYXJnKSkKKyAgICAgIChzZXRxIGRvYyAocG9wIGRvYy1rZXlzLW1vZGUtYXJnKQorICAg ICAgICAgICAgZG9jLXAgdCkpCisKKyAgICAocGNhc2UtbGV0CisgICAgICAgICgoYCgsa2V5cyAs bW9kZS1hcmcpCisgICAgICAgICAgKGVydC0tcGFyc2Uta2V5cy1hbmQtYm9keSBkb2Mta2V5cy1t b2RlLWFyZykpKQorCisgICAgICAodW5sZXNzIChzeW1ib2xwIChjYXIgbW9kZS1hcmcpKQorICAg ICAgICAoZXJyb3IgIkEgbWFqb3IgbW9kZSBzeW1ib2wgZXhwZWN0ZWQ6ICVTIiAoY2FyIG1vZGUt YXJnKSkpCisgICAgICAoc2V0cSBtb2RlIChwb3AgbW9kZS1hcmcpKQorCisgICAgICAodW5sZXNz IChzdHJpbmdwIChjYXIgbW9kZS1hcmcpKQorICAgICAgICAoZXJyb3IgIkEgc3RyaW5nIG9yIGZp bGUgd2l0aCBhc3NlcnRpb25zIGV4cGVjdGVkOiAlUyIgKGNhciBtb2RlLWFyZykpKQorICAgICAg KHNldHEgYXJnIChwb3AgbW9kZS1hcmcpKQorCisgICAgICAobGlzdCBkb2MgZG9jLXAga2V5cyBt b2RlIGFyZykpKSkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZtYWNybyBlcnQtZm9udC1sb2NrLWRl ZnRlc3QgKG5hbWUgJnJlc3QgZG9jc3RyaW5nLWtleXMtbW9kZS1hbmQtc3RyKQorICAiRGVmaW5l IHRlc3QgTkFNRSAoYSBzeW1ib2wpIHVzaW5nIGFzc2VydGlvbnMgZnJvbSBURVNULVNUUi4KKwor T3RoZXIgdGhhbiBNQUpPUi1NT0RFIGFuZCBURVNULVNUUiBwYXJhbWV0ZXJzLCB0aGlzIG1hY3Jv IGFjY2VwdHMKK3RoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIGtleXdvcmRzIGFzIGBlcnQtZGVmdGVz dCcgYW5kIGlzIGludGVuZGVkCit0byBiZSB1c2VkIHRocm91Z2ggYGVydCcuCisKK1woZm4gTkFN RSAoKSBbRE9DU1RSSU5HXSBbOmV4cGVjdGVkLXJlc3VsdCBSRVNVTFQtVFlQRV0gXAorWzp0YWdz IFxcPScoVEFHLi4uKV0gTUFKT1ItTU9ERSBURVNULVNUUikiCisgIChkZWNsYXJlIChkZWJ1ZyAo JmRlZmluZSBbJm5hbWUgInRlc3RAIiBzeW1ib2xwXQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2V4cCBbJm9wdGlvbmFsIHN0cmluZ3BdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBb JnJlc3Qga2V5d29yZHAgc2V4cF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3ApKQorICAgICAgICAgICAoZG9jLXN0 cmluZyAzKQorICAgICAgICAgICAoaW5kZW50IDIpKQorICAocGNhc2UtbGV0ICgoYCgsZG9jdW1l bnRhdGlvbgorICAgICAgICAgICAgICAgICAsZG9jdW1lbnRhdGlvbi1zdXBwbGllZC1wCisgICAg ICAgICAgICAgICAgICxrZXlzICxtb2RlICxhcmcpCisgICAgICAgICAgICAgICAoZXJ0LWZvbnQt bG9jay0tcGFyc2UtbWFjcm8tYXJncyBkb2NzdHJpbmcta2V5cy1tb2RlLWFuZC1zdHIpKSkKKwor ICAgIGAoZXJ0LXNldC10ZXN0ICcsbmFtZQorICAgICAgICAgICAgICAgICAgIChtYWtlLWVydC10 ZXN0CisgICAgICAgICAgICAgICAgICAgIDpuYW1lICcsbmFtZQorICAgICAgICAgICAgICAgICAg ICAsQCh3aGVuIGRvY3VtZW50YXRpb24tc3VwcGxpZWQtcAorICAgICAgICAgICAgICAgICAgICAg ICAgYCg6ZG9jdW1lbnRhdGlvbiAsZG9jdW1lbnRhdGlvbikpCisgICAgICAgICAgICAgICAgICAg ICxAKHdoZW4gKG1hcC1jb250YWlucy1rZXkga2V5cyA6ZXhwZWN0ZWQtcmVzdWx0KQorICAgICAg ICAgICAgICAgICAgICAgICAgYCg6ZXhwZWN0ZWQtcmVzdWx0LXR5cGUgLChtYXAtZWx0IGtleXMg OmV4cGVjdGVkLXJlc3VsdCkpKQorICAgICAgICAgICAgICAgICAgICAsQCh3aGVuIChtYXAtY29u dGFpbnMta2V5IGtleXMgOnRhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBgKDp0YWdzICwo bWFwLWVsdCBrZXlzIDp0YWdzKSkpCisgICAgICAgICAgICAgICAgICAgIDpib2R5IChsYW1iZGEg KCkgKGVydC1mb250LWxvY2stLXRlc3QtYm9keS1zdHIgJyxtb2RlICxhcmcgJyxuYW1lKSkKKwor ICAgICAgICAgICAgICAgICAgICA6ZmlsZS1uYW1lICwob3IgKG1hY3JvZXhwLWZpbGUtbmFtZSkg YnVmZmVyLWZpbGUtbmFtZSkpKSkpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmbWFjcm8gZXJ0LWZv bnQtbG9jay1kZWZ0ZXN0LWZpbGUgKG5hbWUgJnJlc3QgZG9jc3RyaW5nLWtleXMtbW9kZS1hbmQt ZmlsZSkKKyAgIkRlZmluZSB0ZXN0IE5BTUUgKGEgc3ltYm9sKSB1c2luZyBhc3NlcnRpb25zIGZy b20gRklMRS4KKworRklMRSAtIHBhdGggdG8gYSBmaWxlIHdpdGggYXNzZXJ0aW9ucyBpbiBFUlQg cmVzb3VyY2UgZGlyZWN0b3IgYXMKK3JldHVybiBieSBgZXJ0LXJlc291cmNlLWRpcmVjdG9yeScu CisKK090aGVyIHRoYW4gTUFKT1ItTU9ERSBhbmQgRklMRSBwYXJhbWV0ZXJzLCB0aGlzIG1hY3Jv IGFjY2VwdHMgdGhlCitzYW1lIHBhcmFtZXRlcnMgYW5kIGtleXdvcmRzIGFzIGBlcnQtZGVmdGVz dCcgYW5kIGlzIGludGVuZGVkIHRvCitiZSB1c2VkIHRocm91Z2ggYGVydCcuCisKK1woZm4gTkFN RSAoKSBbRE9DU1RSSU5HXSBbOmV4cGVjdGVkLXJlc3VsdCBSRVNVTFQtVFlQRV0gXAorWzp0YWdz IFxcPScoVEFHLi4uKV0gTUFKT1ItTU9ERSBGSUxFKSIKKyAgKGRlY2xhcmUgKGRlYnVnICgmZGVm aW5lIFsmbmFtZSAidGVzdEAiIHN5bWJvbHBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZXhwIFsmb3B0aW9uYWwgc3RyaW5ncF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmcmVz dCBrZXl3b3JkcCBzZXhwXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncCkpCisgICAgICAgICAgIChkb2Mtc3RyaW5n IDMpCisgICAgICAgICAgIChpbmRlbnQgMikpCisKKyAgKHBjYXNlLWxldCAoKGAoLGRvY3VtZW50 YXRpb24KKyAgICAgICAgICAgICAgICAgLGRvY3VtZW50YXRpb24tc3VwcGxpZWQtcAorICAgICAg ICAgICAgICAgICAsa2V5cyAsbW9kZSAsYXJnKQorICAgICAgICAgICAgICAgKGVydC1mb250LWxv Y2stLXBhcnNlLW1hY3JvLWFyZ3MgZG9jc3RyaW5nLWtleXMtbW9kZS1hbmQtZmlsZSkpKQorCisg ICAgYChlcnQtc2V0LXRlc3QgJyxuYW1lCisgICAgICAgICAgICAgICAgICAgKG1ha2UtZXJ0LXRl c3QKKyAgICAgICAgICAgICAgICAgICAgOm5hbWUgJyxuYW1lCisgICAgICAgICAgICAgICAgICAg ICxAKHdoZW4gZG9jdW1lbnRhdGlvbi1zdXBwbGllZC1wCisgICAgICAgICAgICAgICAgICAgICAg ICBgKDpkb2N1bWVudGF0aW9uICxkb2N1bWVudGF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAg LEAod2hlbiAobWFwLWNvbnRhaW5zLWtleSBrZXlzIDpleHBlY3RlZC1yZXN1bHQpCisgICAgICAg ICAgICAgICAgICAgICAgICBgKDpleHBlY3RlZC1yZXN1bHQtdHlwZSAsKG1hcC1lbHQga2V5cyA6 ZXhwZWN0ZWQtcmVzdWx0KSkpCisgICAgICAgICAgICAgICAgICAgICxAKHdoZW4gKG1hcC1jb250 YWlucy1rZXkga2V5cyA6dGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgIGAoOnRhZ3MgLCht YXAtZWx0IGtleXMgOnRhZ3MpKSkKKyAgICAgICAgICAgICAgICAgICAgOmJvZHkgKGxhbWJkYSAo KSAoZXJ0LWZvbnQtbG9jay0tdGVzdC1ib2R5LWZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICcsbW9kZSAoZXJ0LXJlc291cmNlLWZpbGUgLGFyZykgJyxuYW1lKSkKKyAgICAg ICAgICAgICAgICAgICAgOmZpbGUtbmFtZSAsKG9yIChtYWNyb2V4cC1maWxlLW5hbWUpIGJ1ZmZl ci1maWxlLW5hbWUpKSkpKQorCisoZGVmdW4gZXJ0LWZvbnQtbG9jay0taW4tY29tbWVudC1wICgp CisgICJDaGVjayBpZiB0aGUgY3VycmVudCBwb2ludCBpcyBpbnNpZGUgYSBjb21tZW50LiIKKyAg KG50aCA0IChzeW50YXgtcHBzcykpKQorCisoZGVmdW4gZXJ0LWZvbnQtbG9jay0tY29tbWVudC1z dGFydC1wICgpCisgICJDaGVjayBpZiB0aGUgY3VycmVudCBwb2ludCBzdGFydHMgYSBjb21tZW50 LiIKKyAgKG9yCisgICA7OyByZWdleHBzIHVzZSBzeW50YXggdGFibGVzIHNvIGxldCdzIGNoZWNr IHRoYXQgZmlyc3QKKyAgIChsb29raW5nLWF0ICJcXHM8IikKKworICAgOzsgY2hlY2sgbmV3Y29t bWVudC5lbCBmYWNpbGl0aWVzCisgICAoYW5kIGNvbW1lbnQtc3RhcnQgKGxvb2tpbmctYXQgKHJl Z2V4cC1xdW90ZSBjb21tZW50LXN0YXJ0KSkpCisgICAoYW5kIGNvbW1lbnQtc3RhcnQtc2tpcCAo bG9va2luZy1hdCBjb21tZW50LXN0YXJ0LXNraXApKQorCisgICA7OyBzb21ldGltZXMgY29tbWVu dCBzeW50YXggaXMganVzdCBoYXJkY29kZWQKKyAgIChhbmQgKGRlcml2ZWQtbW9kZS1wICdjLW1v ZGUgJ2MrKy1tb2RlICdqYXZhLW1vZGUpCisgICAgICAgIChsb29raW5nLWF0LXAgIi8vIikpKSkK KworKGRlZnVuIGVydC1mb250LWxvY2stLWxpbmUtY29tbWVudC1wICgpCisgICJSZXR1cm4gdCBp ZiB0aGUgY3VycmVudCBsaW5lIGlzIGEgY29tbWVudC1vbmx5IGxpbmUuIgorICAoc3ludGF4LXBw c3MpCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChiZWdpbm5pbmctb2YtbGluZSkKKyAgICAoc2tp cC1zeW50YXgtZm9yd2FyZCAiICIpCisgICAgOzsgc2tpcCBlbXB0eSBsaW5lcworICAgICh1bmxl c3MgKGVvbHApCisgICAgICAob3IKKyAgICAgICA7OyBtdWx0aWxpbmUgY29tbWVudHMKKyAgICAg ICAoZXJ0LWZvbnQtbG9jay0taW4tY29tbWVudC1wKQorCisgICAgICAgOzsgc2luZ2xlIGxpbmUg Y29tbWVudHMKKyAgICAgICAoZXJ0LWZvbnQtbG9jay0tY29tbWVudC1zdGFydC1wKSkpKSkKKwor KGRlZnVuIGVydC1mb250LWxvY2stLWxpbmUtYXNzZXJ0aW9uLXAgKCkKKyAgIlJldHVybiB0IGlm IHRoZSBjdXJyZW50IGxpbmUgY29udGFpbnMgYW4gYXNzZXJ0aW9uLiIKKyAgKHN5bnRheC1wcHNz KQorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCisgICAgKHNraXAt c3ludGF4LWZvcndhcmQgIiAiKQorICAgIChyZS1zZWFyY2gtZm9yd2FyZCBlcnQtZm9udC1sb2Nr LS1hc3NlcnRpb24tcmUKKyAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUtZW5kLXBvc2l0aW9u KSB0IDEpKSkKKworKGRlZnVuIGVydC1mb250LWxvY2stLWdvdG8tZmlyc3QtY2hhciAoKQorICAi TW92ZSB0aGUgcG9pbnQgdG8gdGhlIGZpcnN0IGNoYXJhY3Rlci4iCisgIChiZWdpbm5pbmctb2Yt bGluZSkKKyAgKHNraXAtc3ludGF4LWZvcndhcmQgIiAiKSkKKworKGRlZnVuIGVydC1mb250LWxv Y2stLWdldC1maXJzdC1jaGFyLWNvbHVtbiAoKQorICAiR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUg Zmlyc3Qgbm9uLWVtcHR5IGNoYXIgaW4gdGhlIGN1cnJlbnQgbGluZS4iCisgIChzYXZlLWV4Y3Vy c2lvbgorICAgIChlcnQtZm9udC1sb2NrLS1nb3RvLWZpcnN0LWNoYXIpCisgICAgKC0gKHBvaW50 KSAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pKSkpCisKKyhkZWZ1biBlcnQtZm9udC1sb2NrLS1w YXJzZS1jb21tZW50cyAoKQorICAiUmVhZCB0ZXN0IGFzc2VydGlvbnMgZnJvbSBjb21tZW50cyBp biB0aGUgY3VycmVudCBidWZmZXIuIgorICAobGV0ICgodGVzdHMgJygpKQorICAgICAgICAoY3Vy bGluZSAxKQorICAgICAgICAobGluZXRvY2hlY2sgLTEpKQorCisgICAgKGdvdG8tY2hhciAocG9p bnQtbWluKSkKKworICAgIDs7IEdvIHRocm91Z2ggYWxsIGxpbmVzLCBmb3IgY29tbWVudHMgY2hl Y2sgaWYgdGhlcmUgYXJlCisgICAgOzsgYXNzZXJ0aW9ucy4gRm9yIG5vbi1jb21tZW50IGFuZCBj b21tZW50L25vbi1hc3NlcnQgbGluZXMKKyAgICA7OyByZW1lbWJlciB0aGUgbGFzdCBsaW5lIHNl ZW4uCisgICAgKHdoaWxlIChub3QgKGVvYnApKQorICAgICAgKGNhdGNoICduZXh0bGluZQorCisg ICAgICAgIDs7IE5vdCBhIGNvbW1lbnQ/IHJlbWVtYmVyIHRoZSBsaW5lLCBtb3ZlIHRvIHRoZSBu ZXh0IG9uZQorICAgICAgICAodW5sZXNzIChlcnQtZm9udC1sb2NrLS1saW5lLWNvbW1lbnQtcCkK KyAgICAgICAgICAoc2V0cSBsaW5ldG9jaGVjayBjdXJsaW5lKQorICAgICAgICAgICh0aHJvdyAn bmV4dGxpbmUgdCkpCisKKyAgICAgICAgOzsgQSBjb21tZW50LiBOb3QgYW4gYXNzZXJ0aW9uPyBy ZW1lbWJlciB0aGUgbGluZSB0byBiZQorICAgICAgICA7OyBjaGVja2VkLCBtb3ZlIHRvIHRoZSBu ZXh0IGxpbmUKKyAgICAgICAgKHVubGVzcyAoZXJ0LWZvbnQtbG9jay0tbGluZS1hc3NlcnRpb24t cCkKKyAgICAgICAgICAoc2V0cSBsaW5ldG9jaGVjayBjdXJsaW5lKQorICAgICAgICAgICh0aHJv dyAnbmV4dGxpbmUgdCkpCisKKworICAgICAgICA7OyBDb2xsZWN0IHRoZSBhc3NlcnRpb24KKyAg ICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkIGVydC1mb250LWxvY2stLWFzc2VydGlvbi1y ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUtZW5kLXBvc2l0aW9uKSB0 IDEpCisKKyAgICAgICAgICAodW5sZXNzICg+IGxpbmV0b2NoZWNrIC0xKQorICAgICAgICAgICAg KHVzZXItZXJyb3IgIkludmFsaWQgdGVzdCBjb21tZW50IHN5bnRheCBhdCBsaW5lICVkLiBFeHBl Y3RlZCBhIGxpbmUgdG8gdGVzdCBiZWZvcmUgdGhlIGNvbW1lbnQgbGluZSIgY3VybGluZSkpCisK KyAgICAgICAgICA7OyBjb25zdHJ1Y3QgYSB0ZXN0CisgICAgICAgICAgKGxldCogKDs7IGVpdGhl ciBjb21tZW50IHN0YXJ0IGNoYXIgY29sdW1uIChmb3IgYXJyb3dzKSBvcgorICAgICAgICAgICAg ICAgICA7OyBjYXJldCBjb2x1bW4KKyAgICAgICAgICAgICAgICAgKGNvbHVtbi1jaGVja2VkIChp ZiAoZXF1YWwgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpICJeIikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoLSAobWF0Y2gtYmVnaW5uaW5nIDEpIChsaW5lLWJl Z2lubmluZy1wb3NpdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChl cnQtZm9udC1sb2NrLS1nZXQtZmlyc3QtY2hhci1jb2x1bW4pKSkKKyAgICAgICAgICAgICAgICAg OzsgbmVnYXRlIHRoZSBmYWNlPworICAgICAgICAgICAgICAgICAobmVnYXRpb24gKHN0cmluZy1l cXVhbCAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMikgIiEiKSkKKyAgICAgICAgICAgICAg ICAgOzsgdGhlIGZhY2UgdGhhdCBpcyBzdXBwb3NlZCB0byBiZSBpbiB0aGUgcG9zaXRpb24gc3Bl Y2lmaWVkCisgICAgICAgICAgICAgICAgIChmYWNlIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGll cyAzKSkpCisKKyAgICAgICAgICAgIChwdXNoIChsaXN0IDpsaW5lLWNoZWNrZWQgbGluZXRvY2hl Y2sKKyAgICAgICAgICAgICAgICAgICAgICAgIDpsaW5lLWFzc2VydCBjdXJsaW5lCisgICAgICAg ICAgICAgICAgICAgICAgICA6Y29sdW1uLWNoZWNrZWQgY29sdW1uLWNoZWNrZWQKKyAgICAgICAg ICAgICAgICAgICAgICAgIDpmYWNlIGZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDpuZWdh dGlvbiBuZWdhdGlvbikKKyAgICAgICAgICAgICAgICAgIHRlc3RzKSkpKQorCisgICAgICA7OyBu ZXh0IGxpbmUKKyAgICAgIChzZXRxIGN1cmxpbmUgKDErIGN1cmxpbmUpKQorICAgICAgKGZvcndh cmQtbGluZSAxKSkKKworICAgIChyZXZlcnNlIHRlc3RzKSkpCisKKyhkZWZ1biBlcnQtZm9udC1s b2NrLS1wb2ludC1hdC1saW5lLWFuZC1jb2x1bW4gKGxpbmUgY29sdW1uKQorICAiR2V0IHRoZSBi dWZmZXIgcG9zaXRpb24gZm9yIExJTkUgYW5kIENPTFVNTi4iCisgIChzYXZlLWV4Y3Vyc2lvbgor ICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgKGZvcndhcmQtbGluZSAoMS0gbGluZSkp CisgICAgKG1vdmUtdG8tY29sdW1uIGNvbHVtbikKKyAgICAocG9pbnQpKSkKKworKGRlZnVuIGVy dC1mb250LWxvY2stLWdldC1saW5lIChsaW5lLW51bWJlcikKKyAgIlJldHVybiB0aGUgY29udGVu dCBvZiB0aGUgbGluZSBzcGVjaWZpZWQgYnkgTElORS1OVU1CRVIuIgorICAoc2F2ZS1leGN1cnNp b24KKyAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgIChmb3J3YXJkLWxpbmUgKDEtIGxp bmUtbnVtYmVyKSkKKyAgICAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIChsaW5lLWJl Z2lubmluZy1wb3NpdGlvbikgKGxpbmUtZW5kLXBvc2l0aW9uKSkpKQorCisoZGVmdW4gZXJ0LWZv bnQtbG9jay0tY2hlY2stZmFjZXMgKHRlc3RzKQorICAiQ2hlY2sgaWYgdGhlIGN1cnJlbnQgYnVm ZmVyIGlzIGZvbnRpZmllZCBjb3JyZWN0bHkuCitURVNUUyAtIHRlc3RzIHRvIHJ1bi4KKworVGhl IGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIHJ1biBmcm9tIHdpdGhpbiBhbiBFUlQgdGVzdC4iCisg IChkb2xpc3QgKHRlc3QgdGVzdHMpCisgICAgKGxldCogKChsaW5lLWNoZWNrZWQgKHBsaXN0LWdl dCB0ZXN0IDpsaW5lLWNoZWNrZWQpKQorICAgICAgICAgICAobGluZS1hc3NlcnQgKHBsaXN0LWdl dCB0ZXN0IDpsaW5lLWFzc2VydCkpCisgICAgICAgICAgIChjb2x1bW4tY2hlY2tlZCAocGxpc3Qt Z2V0IHRlc3QgOmNvbHVtbi1jaGVja2VkKSkKKyAgICAgICAgICAgKGV4cGVjdGVkLWZhY2UgKGlu dGVybiAocGxpc3QtZ2V0IHRlc3QgOmZhY2UpKSkKKyAgICAgICAgICAgKG5lZ2F0aW9uIChwbGlz dC1nZXQgdGVzdCA6bmVnYXRpb24pKQorCisgICAgICAgICAgIChhY3R1YWwtZmFjZSAoZ2V0LXRl eHQtcHJvcGVydHkgKGVydC1mb250LWxvY2stLXBvaW50LWF0LWxpbmUtYW5kLWNvbHVtbiBsaW5l LWNoZWNrZWQgY29sdW1uLWNoZWNrZWQpICdmYWNlKSkKKyAgICAgICAgICAgKGxpbmUtc3RyIChl cnQtZm9udC1sb2NrLS1nZXQtbGluZSBsaW5lLWNoZWNrZWQpKQorICAgICAgICAgICAobGluZS1h c3NlcnQtc3RyIChlcnQtZm9udC1sb2NrLS1nZXQtbGluZSBsaW5lLWFzc2VydCkpKQorCisgICAg ICAod2hlbiAobm90IChlcSBhY3R1YWwtZmFjZSBleHBlY3RlZC1mYWNlKSkKKyAgICAgICAgKGVy dC1mYWlsCisgICAgICAgICAobGlzdCAoZm9ybWF0ICJFeHBlY3RlZCBmYWNlICVTLCBnb3QgJVMg b24gbGluZSAlZCBjb2x1bW4gJWQiCisgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLWZh Y2UgYWN0dWFsLWZhY2UgbGluZS1jaGVja2VkIGNvbHVtbi1jaGVja2VkKQorICAgICAgICAgICAg ICAgOmxpbmUgbGluZS1zdHIKKyAgICAgICAgICAgICAgIDphc3NlcnQgbGluZS1hc3NlcnQtc3Ry KSkpCisKKyAgICAgICh3aGVuIChhbmQgbmVnYXRpb24gKGVxIGFjdHVhbC1mYWNlIGV4cGVjdGVk LWZhY2UpKQorICAgICAgICAoZXJ0LWZhaWwKKyAgICAgICAgIChsaXN0IChmb3JtYXQgIkRpZCBu b3QgZXhwZWN0IGZhY2UgJVMgZmFjZSBvbiBsaW5lICVkLCBjb2x1bW4gJWQiCisgICAgICAgICAg ICAgICAgICAgICAgIGFjdHVhbC1mYWNlIGxpbmUtY2hlY2tlZCBjb2x1bW4tY2hlY2tlZCkKKyAg ICAgICAgICAgICAgIDpsaW5lIGxpbmUtc3RyCisgICAgICAgICAgICAgICA6YXNzZXJ0IGxpbmUt YXNzZXJ0LXN0cikpKSkpKQorCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIGVydC1mb250LWxvY2st dGVzdC1zdHJpbmcgKHRlc3Qtc3RyaW5nIG1vZGUpCisgICJDaGVjayBmb250IGZhY2VzIGluIFRF U1QtU1RSSU5HIHNldCBieSBNT0RFLgorCitUaGUgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgcnVu IGZyb20gd2l0aGluIGFuIEVSVCB0ZXN0LiIKKyAgKGVydC1mb250LWxvY2stLXZhbGlkYXRlLW1h am9yLW1vZGUgbW9kZSkKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAoaW5zZXJ0IHRlc3Qtc3Ry aW5nKQorICAgIChmdW5jYWxsIG1vZGUpCisgICAgKGZvbnQtbG9jay1lbnN1cmUpCisKKyAgICAo ZXJ0LWZvbnQtbG9jay0tY2hlY2stZmFjZXMgKGVydC1mb250LWxvY2stLXBhcnNlLWNvbW1lbnRz KSkpCisKKyAgKGVydC1wYXNzKSkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biBlcnQtZm9udC1s b2NrLXRlc3QtZmlsZSAoZmlsZW5hbWUgbW9kZSkKKyAgIkNoZWNrIGZvbnQgZmFjZXMgaW4gRklM RU5BTUUgc2V0IGJ5IE1PREUuCisKK1RoZSBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBydW4gZnJv bSB3aXRoaW4gYW4gRVJUIHRlc3QuIgorICAoZXJ0LWZvbnQtbG9jay0tdmFsaWRhdGUtbWFqb3It bW9kZSBtb2RlKQorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChpbnNlcnQtZmlsZS1jb250ZW50 cyBmaWxlbmFtZSkKKyAgICAoZnVuY2FsbCBtb2RlKQorICAgIChmb250LWxvY2stZW5zdXJlKQor CisgICAgKGVydC1mb250LWxvY2stLWNoZWNrLWZhY2VzIChlcnQtZm9udC1sb2NrLS1wYXJzZS1j b21tZW50cykpKQorCisgIChlcnQtcGFzcykpCisKKworKHByb3ZpZGUgJ2VydC1mb250LWxvY2sp CisKKzs7OyBlcnQtZm9udC1sb2NrLmVsIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvdGVzdC9saXNw L2VtYWNzLWxpc3AvZXJ0LWZvbnQtbG9jay1yZXNvdXJjZXMvYnJva2VuLmpzIGIvdGVzdC9saXNw L2VtYWNzLWxpc3AvZXJ0LWZvbnQtbG9jay1yZXNvdXJjZXMvYnJva2VuLmpzCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42OWMxYzVjY2E4OAotLS0gL2Rldi9udWxsCisr KyBiL3Rlc3QvbGlzcC9lbWFjcy1saXNwL2VydC1mb250LWxvY2stcmVzb3VyY2VzL2Jyb2tlbi5q cwpAQCAtMCwwICsxLDMgQEAKK3ZhciBhYmMgPSBmdW5jdGlvbihkKSB7CisvLyAgIF4gd3Jvbmct ZmFjZQorfTsKZGlmZiAtLWdpdCBhL3Rlc3QvbGlzcC9lbWFjcy1saXNwL2VydC1mb250LWxvY2st cmVzb3VyY2VzL2NvcnJlY3QuanMgYi90ZXN0L2xpc3AvZW1hY3MtbGlzcC9lcnQtZm9udC1sb2Nr LXJlc291cmNlcy9jb3JyZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi41ZTYxNGM2NDc1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvbGlzcC9lbWFjcy1saXNw L2VydC1mb250LWxvY2stcmVzb3VyY2VzL2NvcnJlY3QuanMKQEAgLTAsMCArMSwzIEBACit2YXIg YWJjID0gZnVuY3Rpb24oZCkgeworLy8gICBeIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UK K307CmRpZmYgLS1naXQgYS90ZXN0L2xpc3AvZW1hY3MtbGlzcC9lcnQtZm9udC1sb2NrLXRlc3Rz LmVsIGIvdGVzdC9saXNwL2VtYWNzLWxpc3AvZXJ0LWZvbnQtbG9jay10ZXN0cy5lbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzNlZjBjNmVlZGUKLS0tIC9kZXYvbnVs bAorKysgYi90ZXN0L2xpc3AvZW1hY3MtbGlzcC9lcnQtZm9udC1sb2NrLXRlc3RzLmVsCkBAIC0w LDAgKzEsNDY0IEBACis7OzsgZXJ0LWZvbnQtbG9jay10ZXN0cy5lbCAtLS0gRVJUIEZvbnQgTG9j ayB0ZXN0cyAgLSotIGxleGljYWwtYmluZGluZzogdCAtKi0KKworOzsgQ29weXJpZ2h0IChDKSAy MDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCis7OyBBdXRob3I6IFZsYWRpbWly IEthemFub3YKKworOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgorCis7OyBHTlUg RW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCis7OyAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorCis7OyBHTlUgRW1hY3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7OyBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCis7OyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzsg YWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorCis7OzsgQ29tbWVudGFyeToKKworOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RVJUIEZvbnQgTG9jaywgYW4gZXh0ZW5zaW9uIHRvIHRoZSBFbWFjcyBMaXNwCis7OyBSZWdyZXNz aW9uIFRlc3QgbGlicmFyeSAoRVJUKSBwcm92aWRpbmcgYSBjb252ZW5pZW50IHdheSB0byBjaGVj aworOzsgc3ludGF4IGhpZ2hsaWdodGluZyBwcm92aWRlZCBieSBmb250LWxvY2suCis7OworOzsg U2VlIGVydC1mb250LWxvY2suZWwgZm9yIGRldGFpbHMsIGFuZCBiZWxvdyBmb3IgZXhhbXBsZSB1 c2FnZSBvZgorOzsgZXJ0LWZvbnQtbG9jayBmYWNpbGl0aWVzLgorCisocmVxdWlyZSAnZXJ0KQor KHJlcXVpcmUgJ2VydC14KQorKHJlcXVpcmUgJ2VydC1mb250LWxvY2spCisKKzs7OyBIZWxwZXJz Cis7OworCisoZGVmbWFjcm8gd2l0aC10ZW1wLWJ1ZmZlci1zdHItbW9kZSAobW9kZSBzdHIgJnJl c3QgYm9keSkKKyAgIkNyZWF0ZSBhIGJ1ZmZlciB3aXRoIFNUUiBjb250ZW50cyBhbmQgTU9ERS4g IgorICAoZGVjbGFyZSAoaW5kZW50IDEpIChkZWJ1ZyB0KSkKKyAgYCh3aXRoLXRlbXAtYnVmZmVy CisgICAgIChpbnNlcnQgLHN0cikKKyAgICAgKCxtb2RlKQorICAgICAoZ290by1jaGFyIChwb2lu dC1taW4pKQorICAgICAsQGJvZHkpKQorCis7OzsgQ29tbWVudCBwYXJzaW5nIHRlc3RzCis7Owor CisoZXJ0LWRlZnRlc3QgdGVzdC1saW5lLWNvbW1lbnQtcC0tZnVuZGFtZW50YWwgKCkKKyAgKHdp dGgtdGVtcC1idWZmZXItc3RyLW1vZGUgZnVuZGFtZW50YWwtbW9kZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiLy8gY29tbWVudFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc2hvdWxkLW5vdCAoZXJ0LWZvbnQtbG9jay0tbGluZS1jb21tZW50LXApKSkpCisKKyhlcnQt ZGVmdGVzdCB0ZXN0LWxpbmUtY29tbWVudC1wLS1lbWFjcy1saXNwICgpCisgICh3aXRoLXRlbXAt YnVmZmVyLXN0ci1tb2RlIGVtYWNzLWxpc3AtbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAibm90IGNvbW1lbnQKKzs7IGNvbW1lbnQKKyIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHNob3VsZC1ub3QgKGVydC1mb250LWxvY2stLWxpbmUtY29tbWVudC1wKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHNob3VsZCAoZXJ0LWZvbnQtbG9jay0tbGluZS1jb21tZW50LXApKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc2hvdWxkLW5vdCAoZXJ0LWZvbnQtbG9jay0tbGluZS1jb21tZW50LXAp KSkpCisKKyhlcnQtZGVmdGVzdCB0ZXN0LWxpbmUtY29tbWVudC1wLS1zaGVsbC1zY3JpcHQgKCkK KyAgKHdpdGgtdGVtcC1idWZmZXItc3RyLW1vZGUgc2hlbGwtc2NyaXB0LW1vZGUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImVjaG8gTm90IGEgY29tbWVudAorIyBjb21tZW50CisiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaG91bGQtbm90IChlcnQtZm9udC1sb2NrLS1s aW5lLWNvbW1lbnQtcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxp bmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaG91bGQgKGVydC1mb250LWxvY2st LWxpbmUtY29tbWVudC1wKSkpKQorCisoZGVjbGFyZS1mdW5jdGlvbiBwaHAtbW9kZSAicGhwLW1v ZGUiKQorKGVydC1kZWZ0ZXN0IHRlc3QtbGluZS1jb21tZW50LXAtLXBocCAoKQorICAoc2tpcC11 bmxlc3MgKGZlYXR1cmVwICdwaHAtbW9kZSkpCisKKyAgKHdpdGgtdGVtcC1idWZmZXItc3RyLW1v ZGUgcGhwLW1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVjaG8gJ05vdCBhIGNv bW1lbnQnCisvLyBjb21tZW50CisvKiBjb21tZW50ICovCisiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzaG91bGQtbm90IChlcnQtZm9udC1sb2NrLS1saW5lLWNvbW1lbnQtcCkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzaG91bGQgKGVydC1mb250LWxvY2stLWxpbmUtY29tbWVudC1wKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHNob3VsZCAoZXJ0LWZvbnQtbG9jay0tbGluZS1jb21tZW50LXAp KSkpCisKKworKGVydC1kZWZ0ZXN0IHRlc3QtbGluZS1jb21tZW50LXAtLWphdmFzY3JpcHQgKCkK KyAgKHdpdGgtdGVtcC1idWZmZXItc3RyLW1vZGUgamF2YXNjcmlwdC1tb2RlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICIvLyBjb21tZW50CisKKyAgIC8vIGNvbW1lbnQsIGFmdGVyIGEg YmxhbmsgbGluZQorCit2YXIgYWJjID0gZnVuY3Rpb24oZCkge307CisiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzaG91bGQgKGVydC1mb250LWxvY2stLWxpbmUtY29tbWVudC1wKSkK KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoc2hvdWxkLW5vdCAoZXJ0LWZvbnQtbG9jay0tbGluZS1jb21t ZW50LXApKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaG91bGQgKGVydC1mb250LWxvY2stLWxpbmUt Y29tbWVudC1wKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5l KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvdWxkLW5vdCAoZXJ0LWZvbnQtbG9j ay0tbGluZS1jb21tZW50LXApKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3 YXJkLWxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaG91bGQtbm90IChlcnQt Zm9udC1sb2NrLS1saW5lLWNvbW1lbnQtcCkpKSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtbGluZS1j b21tZW50LXAtLXB5dGhvbiAoKQorCisgICh3aXRoLXRlbXAtYnVmZmVyLXN0ci1tb2RlIHB5dGhv bi1tb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjIGNvbW1lbnQKKworICAgIyBj b21tZW50CitwcmludChcIkhlbGxvLCB3b3JsZCFcIikiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzaG91bGQgKGVydC1mb250LWxvY2stLWxpbmUtY29tbWVudC1wKSkKKworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoc2hvdWxkLW5vdCAoZXJ0LWZvbnQtbG9jay0tbGluZS1jb21tZW50LXApKQor CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChzaG91bGQgKGVydC1mb250LWxvY2stLWxpbmUtY29tbWVudC1w KSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc2hvdWxkLW5vdCAoZXJ0LWZvbnQtbG9jay0tbGluZS1j b21tZW50LXApKSkpCisKKyhlcnQtZGVmdGVzdCB0ZXN0LWxpbmUtY29tbWVudC1wLS1jICgpCisK KyAgKHdpdGgtdGVtcC1idWZmZXItc3RyLW1vZGUgYy1tb2RlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICIvLyBjb21tZW50CisvKiBhbHNvIGNvbW1lbnQgKi8iCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzaG91bGQgKGVydC1mb250LWxvY2stLWxpbmUtY29tbWVudC1wKSkK KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoc2hvdWxkIChlcnQtZm9udC1sb2NrLS1saW5lLWNvbW1lbnQt cCkpKSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtcGFyc2UtY29tbWVudHMtLXNpbmdsZS1saW5lLWVy cm9yICgpCisgIChsZXQqICgoc3RyICIvLyBeIGZhY2UuZmFjZTEiKSkKKyAgICAod2l0aC10ZW1w LWJ1ZmZlcgorICAgICAgKGluc2VydCBzdHIpCisgICAgICAoamF2YXNjcmlwdC1tb2RlKQorCisg ICAgICAoc2hvdWxkLWVycm9yIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpKSkpCisK KyhlcnQtZGVmdGVzdCB0ZXN0LXBhcnNlLWNvbW1lbnRzLS1zaW5nbGUtbGluZS1zaW5nbGUtY2Fy ZXQgKCkKKyAgKGxldCogKChzdHIgIgorZmlyc3QKKy8vIF4gZmFjZS5mYWNlMQorIikKKyAgICAg ICAgIGFzc2VydHMpCisgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgIChpbnNlcnQgc3RyKQor ICAgICAgKGphdmFzY3JpcHQtbW9kZSkKKworICAgICAgKHNldHEgYXNzZXJ0cyAoZXJ0LWZvbnQt bG9jay0tcGFyc2UtY29tbWVudHMpKQorICAgICAgKHNob3VsZCAoZXFsIChsZW5ndGggYXNzZXJ0 cykgMSkpCisgICAgICAoc2hvdWxkIChlcXVhbCAoY2FyIGFzc2VydHMpCisgICAgICAgICAgICAg ICAgICAgICAnKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6Y29sdW1uLWNoZWNrZWQg MyA6ZmFjZSAiZmFjZS5mYWNlMSIgOm5lZ2F0aW9uIG5pbCkpKSkpKQorCisoZXJ0LWRlZnRlc3Qg dGVzdC1wYXJzZS1jb21tZW50cy0tY2FyZXQtbmVnYXRpb24gKCkKKyAgKGxldCogKChzdHIgIgor Zmlyc3QKKy8vIF4gIWZhY2UKKy8vIF4gZmFjZQorIikKKyAgICAgICAgIGFzc2VydHMpCisgICAg KHdpdGgtdGVtcC1idWZmZXIKKyAgICAgIChpbnNlcnQgc3RyKQorICAgICAgKGphdmFzY3JpcHQt bW9kZSkKKworICAgICAgKHNldHEgYXNzZXJ0cyAoZXJ0LWZvbnQtbG9jay0tcGFyc2UtY29tbWVu dHMpKQorICAgICAgKHNob3VsZCAoZXFsIChsZW5ndGggYXNzZXJ0cykgMikpCisgICAgICAoc2hv dWxkIChlcXVhbCBhc3NlcnRzCisgICAgICAgICAgICAgICAgICAgICAnKCg6bGluZS1jaGVja2Vk IDIgOmxpbmUtYXNzZXJ0IDMgOmNvbHVtbi1jaGVja2VkIDMgOmZhY2UgImZhY2UiIDpuZWdhdGlv biB0KQorICAgICAgICAgICAgICAgICAgICAgICAoOmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFzc2Vy dCA0IDpjb2x1bW4tY2hlY2tlZCAzIDpmYWNlICJmYWNlIiA6bmVnYXRpb24gbmlsKSkpKSkpKQor CisKKyhlcnQtZGVmdGVzdCB0ZXN0LXBhcnNlLWNvbW1lbnRzLS1zaW5nbGUtbGluZS1tdWx0aXBs ZS1jYXJldHMgKCkKKyAgKGxldCogKChzdHIgIgorZmlyc3QKKy8vIF4gZmFjZTEKKy8vICAgICBe IGZhY2UuZmFjZTIKKy8vICAgICBeIGZhY2UtZmFjZS5mYWNlMworICAgLy8gIF4gZmFjZV9mYWNl LmZhY2U0CisiKQorICAgICAgICAgYXNzZXJ0cykKKworICAgICh3aXRoLXRlbXAtYnVmZmVyCisg ICAgICAoaW5zZXJ0IHN0cikKKyAgICAgIChqYXZhc2NyaXB0LW1vZGUpCisKKyAgICAgIChzZXRx IGFzc2VydHMgKGVydC1mb250LWxvY2stLXBhcnNlLWNvbW1lbnRzKSkKKyAgICAgIChzaG91bGQg KGVxbCAobGVuZ3RoIGFzc2VydHMpIDQpKQorICAgICAgKHNob3VsZCAoZXF1YWwgYXNzZXJ0cwor ICAgICAgICAgICAgICAgICAgICAgJygoOmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFzc2VydCAzIDpj b2x1bW4tY2hlY2tlZCAzIDpmYWNlICJmYWNlMSIgOm5lZ2F0aW9uIG5pbCkKKyAgICAgICAgICAg ICAgICAgICAgICAgKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgNCA6Y29sdW1uLWNoZWNr ZWQgNyA6ZmFjZSAiZmFjZS5mYWNlMiIgOm5lZ2F0aW9uIG5pbCkKKyAgICAgICAgICAgICAgICAg ICAgICAgKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgNSA6Y29sdW1uLWNoZWNrZWQgNyA6 ZmFjZSAiZmFjZS1mYWNlLmZhY2UzIiA6bmVnYXRpb24gbmlsKQorICAgICAgICAgICAgICAgICAg ICAgICAoOmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFzc2VydCA2IDpjb2x1bW4tY2hlY2tlZCA3IDpm YWNlICJmYWNlX2ZhY2UuZmFjZTQiIDpuZWdhdGlvbiBuaWwpKSkpKSkpCisKKyhlcnQtZGVmdGVz dCB0ZXN0LXBhcnNlLWNvbW1lbnRzLS1tdWx0aXBsZS1saW5lLW11bHRpcGxlLWNhcmV0cyAoKQor ICAobGV0KiAoKHN0ciAiCitmaXJzdAorLy8gXiBmYWNlMQorc2Vjb25kCisvLyBeIGZhY2UyCisv LyAgIF4gZmFjZTMKK3RoaXJkCisiKQorICAgICAgICAgYXNzZXJ0cykKKyAgICAod2l0aC10ZW1w LWJ1ZmZlcgorICAgICAgKGluc2VydCBzdHIpCisgICAgICAoamF2YXNjcmlwdC1tb2RlKQorCisg ICAgICAoc2V0cSBhc3NlcnRzIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpCisgICAg ICAoc2hvdWxkIChlcWwgKGxlbmd0aCBhc3NlcnRzKSAzKSkKKyAgICAgIChzaG91bGQgKGVxdWFs IGFzc2VydHMKKyAgICAgICAgICAgICAgICAgICAgICcoKDpsaW5lLWNoZWNrZWQgMiAgOmxpbmUt YXNzZXJ0IDMgOmNvbHVtbi1jaGVja2VkIDMgOmZhY2UgImZhY2UxIiA6bmVnYXRpb24gbmlsKQor ICAgICAgICAgICAgICAgICAgICAgICAoOmxpbmUtY2hlY2tlZCA0ICA6bGluZS1hc3NlcnQgNSA6 Y29sdW1uLWNoZWNrZWQgMyA6ZmFjZSAiZmFjZTIiIDpuZWdhdGlvbiBuaWwpCisgICAgICAgICAg ICAgICAgICAgICAgICg6bGluZS1jaGVja2VkIDQgIDpsaW5lLWFzc2VydCA2IDpjb2x1bW4tY2hl Y2tlZCA1IDpmYWNlICJmYWNlMyIgOm5lZ2F0aW9uIG5pbCkpKSkpKSkKKworCisoZXJ0LWRlZnRl c3QgdGVzdC1wYXJzZS1jb21tZW50cy0tYXJyb3ctc2luZ2xlLWxpbmUtc2luZ2xlICgpCisgIChs ZXQqICgoc3RyICIKK2ZpcnN0CisvLyA8LSBmYWNlMQorIikKKyAgICAgICAgIGFzc2VydHMpCisg ICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgIChpbnNlcnQgc3RyKQorICAgICAgKGphdmFzY3Jp cHQtbW9kZSkKKworICAgICAgKHNldHEgYXNzZXJ0cyAoZXJ0LWZvbnQtbG9jay0tcGFyc2UtY29t bWVudHMpKQorICAgICAgKHNob3VsZCAoZXFsIChsZW5ndGggYXNzZXJ0cykgMSkpCisgICAgICAo c2hvdWxkIChlcXVhbCAoY2FyIGFzc2VydHMpCisgICAgICAgICAgICAgICAgICAgICAnKDpsaW5l LWNoZWNrZWQgMiA6bGluZS1hc3NlcnQgMyA6Y29sdW1uLWNoZWNrZWQgMCA6ZmFjZSAiZmFjZTEi IDpuZWdhdGlvbiBuaWwpKSkpKSkKKworCisoZXJ0LWRlZnRlc3QgdGVzdC1wYXJzZS1jb21tZW50 cy1hcnJvdy1tdWx0aXBsZS1saW5lLXNpbmdsZSAoKQorICAobGV0KiAoKHN0ciAiCitmaXJzdAor Ly8gPC0gZmFjZTEKKyAgLy8gPC0gZmFjZTIKKyAgICAvLyA8LSBmYWNlMworIikKKyAgICAgICAg IGFzc2VydHMpCisgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgIChpbnNlcnQgc3RyKQorICAg ICAgKGphdmFzY3JpcHQtbW9kZSkKKworICAgICAgKHNldHEgYXNzZXJ0cyAoZXJ0LWZvbnQtbG9j ay0tcGFyc2UtY29tbWVudHMpKQorICAgICAgKHNob3VsZCAoZXFsIChsZW5ndGggYXNzZXJ0cykg MykpCisgICAgICAoc2hvdWxkIChlcXVhbCBhc3NlcnRzCisgICAgICAgICAgICAgICAgICAgICAn KCg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDMgOmNvbHVtbi1jaGVja2VkIDAgOmZhY2Ug ImZhY2UxIiA6bmVnYXRpb24gbmlsKQorICAgICAgICAgICAgICAgICAgICAgICAoOmxpbmUtY2hl Y2tlZCAyIDpsaW5lLWFzc2VydCA0IDpjb2x1bW4tY2hlY2tlZCAyIDpmYWNlICJmYWNlMiIgOm5l Z2F0aW9uIG5pbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKDpsaW5lLWNoZWNrZWQgMiA6bGlu ZS1hc3NlcnQgNSA6Y29sdW1uLWNoZWNrZWQgNCA6ZmFjZSAiZmFjZTMiIDpuZWdhdGlvbiBuaWwp KSkpKSkpCisKKyhlcnQtZGVmdGVzdCB0ZXN0LXBhcnNlLWNvbW1lbnRzLS1ub24tYXNzZXJ0LWNv bW1lbnQtc2luZ2xlICgpCisgIChsZXQqICgoc3RyICIKKy8vIGZpcnN0CisvLyAgXiBjb21tZW50 LWZhY2UKKyIpCisgICAgICAgICBhc3NlcnRzKQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAg ICAoaW5zZXJ0IHN0cikKKyAgICAgIChqYXZhc2NyaXB0LW1vZGUpCisKKyAgICAgIChzZXRxIGFz c2VydHMgKGVydC1mb250LWxvY2stLXBhcnNlLWNvbW1lbnRzKSkKKyAgICAgIChzaG91bGQgKGVx bCAobGVuZ3RoIGFzc2VydHMpIDEpKQorICAgICAgKHNob3VsZCAoZXF1YWwgKGNhciBhc3NlcnRz KQorICAgICAgICAgICAgICAgICAgICAgJyg6bGluZS1jaGVja2VkIDIgOmxpbmUtYXNzZXJ0IDMg OmNvbHVtbi1jaGVja2VkIDQgOmZhY2UgImNvbW1lbnQtZmFjZSIgOm5lZ2F0aW9uIG5pbCkpKSkp KQorCisoZXJ0LWRlZnRlc3QgdGVzdC1wYXJzZS1jb21tZW50cy0tbm9uLWFzc2VydC1jb21tZW50 LW11bHRpcGxlICgpCisgIChsZXQqICgoc3RyICIKKy8vIGZpcnN0IHNlY29uZCB0aGlyZAorLy8g IF4gY29tbWVudC1mYWNlCisvLyAgICAgICAgXiBjb21tZW50LWZhY2UKKy8vICAgICAgICAgICAg ICAgIF4gY29tbWVudC1mYWNlCisiKQorICAgICAgICAgYXNzZXJ0cykKKyAgICAod2l0aC10ZW1w LWJ1ZmZlcgorICAgICAgKGluc2VydCBzdHIpCisgICAgICAoamF2YXNjcmlwdC1tb2RlKQorCisg ICAgICAoc2V0cSBhc3NlcnRzIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpCisgICAg ICAoc2hvdWxkIChlcWwgKGxlbmd0aCBhc3NlcnRzKSAzKSkKKyAgICAgIChzaG91bGQgKGVxdWFs IGFzc2VydHMKKyAgICAgICAgICAgICAgICAgICAgICcoKDpsaW5lLWNoZWNrZWQgMiA6bGluZS1h c3NlcnQgMyA6Y29sdW1uLWNoZWNrZWQgNCA6ZmFjZSAiY29tbWVudC1mYWNlIiA6bmVnYXRpb24g bmlsKQorICAgICAgICAgICAgICAgICAgICAgICAoOmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFzc2Vy dCA0IDpjb2x1bW4tY2hlY2tlZCAxMCA6ZmFjZSAiY29tbWVudC1mYWNlIiA6bmVnYXRpb24gbmls KQorICAgICAgICAgICAgICAgICAgICAgICAoOmxpbmUtY2hlY2tlZCAyIDpsaW5lLWFzc2VydCA1 IDpjb2x1bW4tY2hlY2tlZCAxOCA6ZmFjZSAiY29tbWVudC1mYWNlIiA6bmVnYXRpb24gbmlsKSkp KSkpKQorCisKKyhlcnQtZGVmdGVzdCB0ZXN0LXBhcnNlLWNvbW1lbnRzLS1tdWx0aWxpbmUtY29t bWVudC1zaW5nbGUgKCkKKyAgKGxldCogKChzdHIgIgorLyoKKyAgdGhpcyBpcyBhIGNvbW1lbnQK KyAgIF4gY29tbWVudC1mYWNlCisgKi8KKyIpCisgICAgICAgICBhc3NlcnRzKQorICAgICh3aXRo LXRlbXAtYnVmZmVyCisgICAgICAoaW5zZXJ0IHN0cikKKyAgICAgIChjLW1vZGUpCisKKyAgICAg IChzZXRxIGFzc2VydHMgKGVydC1mb250LWxvY2stLXBhcnNlLWNvbW1lbnRzKSkKKyAgICAgIChz aG91bGQgKGVxbCAobGVuZ3RoIGFzc2VydHMpIDEpKQorICAgICAgKHNob3VsZCAoZXF1YWwgKGNh ciBhc3NlcnRzKQorICAgICAgICAgICAgICAgICAgICAgJyg6bGluZS1jaGVja2VkIDMgOmxpbmUt YXNzZXJ0IDQgOmNvbHVtbi1jaGVja2VkIDMgOmZhY2UgImNvbW1lbnQtZmFjZSIgOm5lZ2F0aW9u IG5pbCkpKSkpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC1wYXJzZS1jb21tZW50cy0tbXVsdGlsaW5l LWNvbW1lbnQtbXVsdGlwbGUgKCkKKyAgKGxldCogKChzdHIgIgorLyoKKyAgdGhpcyBpcyBhIGNv bW1lbnQKKyAgIF4gY29tbWVudC1mYWNlCisgIGFub3RoZXIgY29tbWVudAorICAgIF4gY29tbWVu dC1mYWNlCisgKi8KKyIpCisgICAgICAgICBhc3NlcnRzKQorICAgICh3aXRoLXRlbXAtYnVmZmVy CisgICAgICAoaW5zZXJ0IHN0cikKKyAgICAgIChjLW1vZGUpCisKKyAgICAgIChzZXRxIGFzc2Vy dHMgKGVydC1mb250LWxvY2stLXBhcnNlLWNvbW1lbnRzKSkKKyAgICAgIChzaG91bGQgKGVxbCAo bGVuZ3RoIGFzc2VydHMpIDIpKQorICAgICAgKHNob3VsZCAoZXF1YWwgYXNzZXJ0cworICAgICAg ICAgICAgICAgICAgICAgJygoOmxpbmUtY2hlY2tlZCAzIDpsaW5lLWFzc2VydCA0IDpjb2x1bW4t Y2hlY2tlZCAzIDpmYWNlICJjb21tZW50LWZhY2UiIDpuZWdhdGlvbiBuaWwpCisgICAgICAgICAg ICAgICAgICAgICAgICg6bGluZS1jaGVja2VkIDUgOmxpbmUtYXNzZXJ0IDYgOmNvbHVtbi1jaGVj a2VkIDQgOmZhY2UgImNvbW1lbnQtZmFjZSIgOm5lZ2F0aW9uIG5pbCkpKSkpKSkKKworOzs7IFN5 bnRheCBoaWdobGlnaHRpbmcgYXNzZXJ0aW9uIHRlc3RzCis7OworCisoZXJ0LWRlZnRlc3QgdGVz dC1zeW50YXgtaGlnaGxpZ2h0LWlubGluZS0tY2FyZXQtbXVsdGlwbGUtZmFjZXMgKCkKKyAgKGxl dCAoKHN0ciAiCit2YXIgYWJjID0gZnVuY3Rpb24oZCkgeworLy8gICBeIGZvbnQtbG9jay12YXJp YWJsZS1uYW1lLWZhY2UKKyAgICAvLyAgICAgICAgXiBmb250LWxvY2sta2V5d29yZC1mYWNlCisg ICAgLy8gICAgICAgICAgICAgXiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlCit9OworCisi KSkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGluc2VydCBzdHIpCisgICAgICAoamF2 YXNjcmlwdC1tb2RlKQorICAgICAgKGZvbnQtbG9jay1lbnN1cmUpCisKKyAgICAgIChlcnQtZm9u dC1sb2NrLS1jaGVjay1mYWNlcworICAgICAgIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50 cykpKSkpCisKKyhlcnQtZGVmdGVzdCB0ZXN0LXN5bnRheC1oaWdobGlnaHQtaW5saW5lLS1jYXJl dC13cm9uZy1mYWNlICgpCisgIChsZXQqICgoc3RyICIKK3ZhciBhYmMgPSBmdW5jdGlvbihkKSB7 CisvLyAgIF4gbm90LWEtZmFjZQorfTsKKyIpKQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAg ICAoaW5zZXJ0IHN0cikKKyAgICAgIChqYXZhc2NyaXB0LW1vZGUpCisgICAgICAoZm9udC1sb2Nr LWVuc3VyZSkKKworICAgICAgKHNob3VsZC1lcnJvciAoZXJ0LWZvbnQtbG9jay0tY2hlY2stZmFj ZXMKKyAgICAgICAgICAgICAgICAgICAgIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykp KSkpKQorCisKKyhlcnQtZGVmdGVzdCB0ZXN0LXN5bnRheC1oaWdobGlnaHQtaW5saW5lLS1jb21t ZW50LWZhY2UgKCkKKyAgKGxldCogKChzdHIgIgorLy8gdGhpcyBpcyBhIGNvbW1lbnQKKy8vICAg XiBmb250LWxvY2stY29tbWVudC1mYWNlCisvLyAgICAgICBeIGZvbnQtbG9jay1jb21tZW50LWZh Y2UKKy8vICAgICAgICAgICAgXiBmb250LWxvY2stY29tbWVudC1mYWNlCisiKSkKKyAgICAod2l0 aC10ZW1wLWJ1ZmZlcgorICAgICAgKGluc2VydCBzdHIpCisgICAgICAoamF2YXNjcmlwdC1tb2Rl KQorICAgICAgKGZvbnQtbG9jay1lbnN1cmUpCisKKyAgICAgIChlcnQtZm9udC1sb2NrLS1jaGVj ay1mYWNlcworICAgICAgIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpKSkpCisKKwor KGVydC1kZWZ0ZXN0IHRlc3Qtc3ludGF4LWhpZ2hsaWdodC1pbmxpbmUtLW11bHRpbGluZS1jb21t ZW50LWZhY2UgKCkKKyAgKGxldCogKChzdHIgIgorLyoKKyAgdGhpcyBpcyBhIGNvbW1lbnQKKyAg IF4gZm9udC1sb2NrLWNvbW1lbnQtZmFjZQorICBhbm90aGVyIGNvbW1lbnQKKyAgbW9yZSBjb21t ZW50cworICAgIF4gZm9udC1sb2NrLWNvbW1lbnQtZmFjZQorICovCisiKSkKKyAgICAod2l0aC10 ZW1wLWJ1ZmZlcgorICAgICAgKGluc2VydCBzdHIpCisgICAgICAoYy1tb2RlKQorICAgICAgKGZv bnQtbG9jay1lbnN1cmUpCisKKyAgICAgIChlcnQtZm9udC1sb2NrLS1jaGVjay1mYWNlcworICAg ICAgIChlcnQtZm9udC1sb2NrLS1wYXJzZS1jb21tZW50cykpKSkpCisKKworKGVydC1kZWZ0ZXN0 IHRlc3QtZm9udC1sb2NrLXRlc3Qtc3RyaW5nLS1jb3JyZWN0ICgpCisgIChlcnQtZm9udC1sb2Nr LXRlc3Qtc3RyaW5nCisgICAiCit2YXIgYWJjID0gZnVuY3Rpb24oZCkgeworLy8gPC0gZm9udC1s b2NrLWtleXdvcmQtZmFjZQorLy8gICBeIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UKKyAg ICAvLyAgICAgICAgXiBmb250LWxvY2sta2V5d29yZC1mYWNlCisgICAgLy8gICAgICAgICAgICAg XiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlCit9OworCisiCisgICAnamF2YXNjcmlwdC1t b2RlKSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtZm9udC1sb2NrLXRlc3QtZmlsZS0tY29ycmVjdCAo KQorICAoZXJ0LWZvbnQtbG9jay10ZXN0LWZpbGUKKyAgIChlcnQtcmVzb3VyY2UtZmlsZSAiY29y cmVjdC5qcyIpCisgICAnamF2YXNjcmlwdC1tb2RlKSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtZm9u dC1sb2NrLXRlc3QtZmlsZS0td3JvbmcgKCkKKyAgOmV4cGVjdGVkLXJlc3VsdCA6ZmFpbGVkCisg IChlcnQtZm9udC1sb2NrLXRlc3QtZmlsZQorICAgKGVydC1yZXNvdXJjZS1maWxlICJicm9rZW4u anMiKQorICAgJ2phdmFzY3JpcHQtbW9kZSkpCisKKzs7OyBNYWNybyB0ZXN0cworOzsKKworKGVy dC1mb250LWxvY2stZGVmdGVzdCB0ZXN0LW1hY3JvLXRlc3QtLWNvcnJlY3QtaGlnaGxpZ2h0aW5n CisgICAgZW1hY3MtbGlzcC1tb2RlCisgICIKKyhkZWZ1biBmdW4gKCkpCis7OyBeIGZvbnQtbG9j ay1rZXl3b3JkLWZhY2UKKzs7ICAgICAgXiBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlIikK KworKGVydC1mb250LWxvY2stZGVmdGVzdCB0ZXN0LW1hY3JvLXRlc3QtLWRvY3N0cmluZworICAg ICJBIHRlc3Qgd2l0aCBhIGRvY3N0cmluZy4iCisgIGVtYWNzLWxpc3AtbW9kZQorICAiCisoZGVm dW4gZnVuICgpKQorOzsgXiBmb250LWxvY2sta2V5d29yZC1mYWNlIgorICApCisKKyhlcnQtZm9u dC1sb2NrLWRlZnRlc3QgdGVzdC1tYWNyby10ZXN0LS1mYWlsaW5nCisgICAgIkEgZmFpbGluZyB0 ZXN0LiIKKyAgOmV4cGVjdGVkLXJlc3VsdCA6ZmFpbGVkCisgIGVtYWNzLWxpc3AtbW9kZQorICAi CisoZGVmdW4gZnVuICgpKQorOzsgXiB3cm9uZy1mYWNlIikKKworKGVydC1mb250LWxvY2stZGVm dGVzdC1maWxlIHRlc3QtbWFjcm8tdGVzdC0tZmlsZQorICAgICJUZXN0IHJlYWRpbmcgY29ycmVj dCBhc3NlcnRpb25zIGZyb20gYSBmaWxlIgorICBqYXZhc2NyaXB0LW1vZGUKKyAgImNvcnJlY3Qu anMiKQorCisoZXJ0LWZvbnQtbG9jay1kZWZ0ZXN0LWZpbGUgdGVzdC1tYWNyby10ZXN0LS1maWxl LWZhaWxpbmcKKyAgICAiVGVzdCByZWFkaW5nIHdyb25nIGFzc2VydGlvbnMgZnJvbSBhIGZpbGUi CisgIDpleHBlY3RlZC1yZXN1bHQgOmZhaWxlZAorICBqYXZhc2NyaXB0LW1vZGUKKyAgImJyb2tl bi5qcyIpCisKKzs7OyBlcnQtZm9udC1sb2NrLXRlc3RzLmVsIGVuZHMgaGVyZQotLQoyLjM0LjEK --000000000000cefb58060b129e56--