From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Taylan Kammer Newsgroups: gmane.lisp.guile.bugs Subject: bug#48442: [PATCH] Use a better SRFI-64 implementation Date: Sat, 15 May 2021 16:16:25 +0200 Message-ID: <455f44d7-6da9-031b-9489-ec2c2bf3df64@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------7F84FF52ECBA181E58238316" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="31497"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 To: 48442@debbugs.gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Sat May 15 16:17:19 2021 Return-path: Envelope-to: guile-bugs@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 1lhv6U-0007uH-Hl for guile-bugs@m.gmane-mx.org; Sat, 15 May 2021 16:17:18 +0200 Original-Received: from localhost ([::1]:58986 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lhv6T-0003Ys-Jb for guile-bugs@m.gmane-mx.org; Sat, 15 May 2021 10:17:17 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:46252) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lhv6F-0003FW-Mu for bug-guile@gnu.org; Sat, 15 May 2021 10:17:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:37484) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lhv6E-0005D3-HG for bug-guile@gnu.org; Sat, 15 May 2021 10:17:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lhv6E-0001x3-CY for bug-guile@gnu.org; Sat, 15 May 2021 10:17:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Taylan Kammer Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Sat, 15 May 2021 14:17:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 48442 X-GNU-PR-Package: guile X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-guile@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.16210881997464 (code B ref -1); Sat, 15 May 2021 14:17:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 15 May 2021 14:16:39 +0000 Original-Received: from localhost ([127.0.0.1]:49031 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lhv5r-0001wK-LK for submit@debbugs.gnu.org; Sat, 15 May 2021 10:16:39 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:58886) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lhv5q-0001wD-8x for submit@debbugs.gnu.org; Sat, 15 May 2021 10:16:38 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:46162) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lhv5q-0002LI-08 for bug-guile@gnu.org; Sat, 15 May 2021 10:16:38 -0400 Original-Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]:46631) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lhv5j-0004qv-Qe for bug-guile@gnu.org; Sat, 15 May 2021 10:16:37 -0400 Original-Received: by mail-ej1-x634.google.com with SMTP id u21so2610773ejo.13 for ; Sat, 15 May 2021 07:16:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=iW7oXDLkvjT6HhnsCB68vf/cyJpV2olGrcNR68zg5c0=; b=FDRbCF+1XDb6KesAQI+QzwAuNEiY5mKIyJ+T3ERGc6X4RS28ddgJ3GmVAvUMXq69iw 4HGDd9nF02yJu0Y9yJc5S6q+XRKab4zNawNOYJdZw6oDWj0cvKj51BH9rG2vD0MmxHbQ sy/IEvGrNlAwVUjDwN29NnMfy2EzFFwuH4x1iWnaOujf7M9oqTJnhxZfKCy6YOOVhoqZ sq1/RXeTO2V2YM0xeOlnqEtcOmS6P17jtqhr80Zo3ov733ChQfzxKANUwBHq2PjPt74e zP025jxF1OH/4rznJR4rm3FHJdZe5iGpBmifnnEofr2+0F5QOvT1KSHH7f92V2/wsS5S L3yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-language; bh=iW7oXDLkvjT6HhnsCB68vf/cyJpV2olGrcNR68zg5c0=; b=mQMfP+FtFtx7SRHWRGHu4uGewHq82cHzX8oe4Ly/32tgsVkzjbeepTOIMvzjXp+G15 EjrJ8nSgOwVGAPxNP0182owX3dWGP/hSuIIIBIsk5BgNiuo7uFYirQsLmVW9r+stfCAt oXJpJH5NYa1EUgnd07b2mKfceI2Q52RfFb/ThAy3SxTHIxFZIYqgN/r673unwTjqt9N3 Xwz/lTKwX+BfSQizXW5AHfDGqnPpX05S55hWYpQr1S+ze79+5J5y0k3V/f/bRn/bXwpG 4ZhhRmUtBBMxT1VH3KzKpHs9QFGASdn80JZAqB5QmssBcqZ8vgzDQrTh6mTbfxRyyO9X RezA== X-Gm-Message-State: AOAM533jAb8wA+cUoTJBtlXHaEWjGpTW/R8JWREx7I/AEezrdKYh8wvG 8ErkiDYnjKLBr4wgI+0qMZaNXaLUwxc= X-Google-Smtp-Source: ABdhPJyZDHozavzhzPlSorjKwrGwjucAjbdnZjS/gfb8Ekxe6X+qu/iMCWKIdglWjs/gQVZlxverlA== X-Received: by 2002:a17:907:f91:: with SMTP id kb17mr52356269ejc.521.1621088190285; Sat, 15 May 2021 07:16:30 -0700 (PDT) Original-Received: from [192.168.178.20] (b2b-109-90-125-150.unitymedia.biz. [109.90.125.150]) by smtp.gmail.com with ESMTPSA id r17sm6826827edt.33.2021.05.15.07.16.29 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 15 May 2021 07:16:29 -0700 (PDT) Content-Language: en-US Received-SPF: pass client-ip=2a00:1450:4864:20::634; envelope-from=taylan.kammer@gmail.com; helo=mail-ej1-x634.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 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-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Original-Sender: "bug-guile" Xref: news.gmane.io gmane.lisp.guile.bugs:10063 Archived-At: This is a multi-part message in MIME format. --------------7F84FF52ECBA181E58238316 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Tag: patch Hi Guilers, I've posted this to guile-devel already but thought I'd make it a debbugs ticket to ensure it doesn't get forgotten and because I made another minor improvement to the implementation. :-) The first attached patch changes the SRFI-64 implementation shipped with Guile to the one from the Scheme-SRFIs project.[0] This implementation has the following advantages: * Compile times of test suites reduced to less than half. [1] This can be quite significant for large test suites. The one of the scheme-bytestructures project is merely a file of less than 300 tests and yet takes about 9.5s to compile with the old SRFI-64 implementation on a very modern CPU (Ryzen 9 3900X), and about 4.5s with the new implementation. (Using Guile 3.0) * Modular, clean code using modern Scheme features. While "clean" code may be a subjective thing without concrete, agreed-upon criteria, I would implore you to simply take a look at the old implementation and compare it to the new one. I'm confident that the new implementation is significantly easier to reason about and modify if needed. * The default test runner outputs results in a format familiar to users of GNU software and makes it easier to identify which tests failed when they occur in nested test groups. * The implementation is more conformant to the specification than the reference implementation. In the reference implementation, the test runner returned by 'test-runner-simple' uses the 'aux' field for a log file, meaning that a user extending the simple test runner may not use the aux field. The spec also says that the runner returned by 'test-runner-simple' does no logging. * Offers a small number of extensions to the standard: 1. The 'test-runner-simple' procedure takes an optional argument that specifies the name of a log file. (A sane default is chosen if the user does not explicitly install any test runner.) This does *not* use the 'aux' field of the runner. 2. The 'test-read-eval-string' procedure takes an optional argument to specify an environment argument to be passed to 'eval'. 3. The new procedure 'test-exit' exits the running Scheme program, with an exit status indicating whether there have been any failures or unexpected passes. * Fixes a pair of bugs that still exist in the old implementation: 1. https://bugs.gnu.org/21181 "Possible bug in test-group" 2. Reported via IRC: per specification, test-end should remove any test runner that was installed automatically by test-begin. There is one incompatibility with the old implementation: * The reference implementation exports a non-standard variable called 'test-log-to-file' which can be set to #false to disable the logging performed by the default test runner. In the new implementation, the same effect can be achieved by explicitly installing the simple test runner without providing the optional log-file argument: (current-test-runner (test-runner-simple)) So far I've had positive feedback over, with one person saying that they've been recommending this implementation to everyone. One might think that the reference implementation is more stable as it has been around longer, but the very long-standing bugs in it prove this wrong in my opinion. I believe that the convoluted way the code is written invites programmer mistakes and discourages people from trying to find and fix bugs. The second attached patch contains a small number of additions to the SRFI-64 meta-test-suite that tests the SRFI-64 implementation. With kind regards, Taylan [0] https://github.com/TaylanUB/scheme-srfis [1] https://lists.gnu.org/archive/html/guile-devel/2021-05/msg00007.html --------------7F84FF52ECBA181E58238316 Content-Type: text/plain; charset=UTF-8; name="0001-Use-a-different-SRFI-64-implementation.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Use-a-different-SRFI-64-implementation.patch" RnJvbSBhMmVmMjRkYTgzNzQ2ZWU5MWQ3YTJmNWU0OTRhY2M5NWZhYTcxZmVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUYXlsYW4gS2FtbWVyIDx0YXlsYW4ua2FtbWVyQGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxMCBNYXkgMjAyMSAxNToyMzoxNyArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggMS8yXSBVc2UgYSBkaWZmZXJlbnQgU1JGSS02NCBpbXBsZW1lbnRhdGlvbi4K CiogbW9kdWxlL3NyZmkvc3JmaS02NC5zY206IEFkZCBpbXBvcnRzIGFuZCBvdGhlciBib2ls ZXJwbGF0ZSBmb3IgbmV3CiAgaW1wbGVtZW50YXRpb24uCiogbW9kdWxlL3NyZmkvc3JmaS02 NC9leGVjdXRpb24uYm9keS5zY206IE5ldyBmaWxlLgoqIG1vZHVsZS9zcmZpL3NyZmktNjQv c291cmNlLWluZm8uYm9keS5zY206IE5ldyBmaWxlLgoqIG1vZHVsZS9zcmZpL3NyZmktNjQv dGVzdC1ydW5uZXItc2ltcGxlLmJvZHkuc2NtOiBOZXcgZmlsZS4KKiBtb2R1bGUvc3JmaS9z cmZpLTY0L3Rlc3QtcnVubmVyLmJvZHkuc2NtOiBOZXcgZmlsZS4KKiBtb2R1bGUvc3JmaS9z cmZpLTY0L3Rlc3Rpbmcuc2NtOiBEZWxldGVkLgoqIG1vZHVsZS9NYWtlZmlsZS5hbSAoc3Jm aS02NC5nbywgTk9DT01QX1NPVVJDRVMpOiBDaGFuZ2UgYWNjb3JkaW5nbHkuCi0tLQogbW9k dWxlL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArLQog bW9kdWxlL3NyZmkvc3JmaS02NC5zY20gICAgICAgICAgICAgICAgICAgICAgIHwgICAxNyAr LQogbW9kdWxlL3NyZmkvc3JmaS02NC9leGVjdXRpb24uYm9keS5zY20gICAgICAgIHwgIDQz NCArKysrKysrCiBtb2R1bGUvc3JmaS9zcmZpLTY0L3NvdXJjZS1pbmZvLmJvZHkuc2NtICAg ICAgfCAgIDg4ICsrCiAuLi4vc3JmaS9zcmZpLTY0L3Rlc3QtcnVubmVyLXNpbXBsZS5ib2R5 LnNjbSAgfCAgMTczICsrKwogbW9kdWxlL3NyZmkvc3JmaS02NC90ZXN0LXJ1bm5lci5ib2R5 LnNjbSAgICAgIHwgIDE2OCArKysKIG1vZHVsZS9zcmZpL3NyZmktNjQvdGVzdGluZy5zY20g ICAgICAgICAgICAgICB8IDEwNDQgLS0tLS0tLS0tLS0tLS0tLS0KIDcgZmlsZXMgY2hhbmdl ZCwgODg1IGluc2VydGlvbnMoKyksIDEwNTAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgbW9kdWxlL3NyZmkvc3JmaS02NC9leGVjdXRpb24uYm9keS5zY20KIGNyZWF0ZSBt b2RlIDEwMDY0NCBtb2R1bGUvc3JmaS9zcmZpLTY0L3NvdXJjZS1pbmZvLmJvZHkuc2NtCiBj cmVhdGUgbW9kZSAxMDA2NDQgbW9kdWxlL3NyZmkvc3JmaS02NC90ZXN0LXJ1bm5lci1zaW1w bGUuYm9keS5zY20KIGNyZWF0ZSBtb2RlIDEwMDY0NCBtb2R1bGUvc3JmaS9zcmZpLTY0L3Rl c3QtcnVubmVyLmJvZHkuc2NtCiBkZWxldGUgbW9kZSAxMDA2NDQgbW9kdWxlL3NyZmkvc3Jm aS02NC90ZXN0aW5nLnNjbQoKZGlmZiAtLWdpdCBhL21vZHVsZS9NYWtlZmlsZS5hbSBiL21v ZHVsZS9NYWtlZmlsZS5hbQppbmRleCAzNzc4NmVkNDIuLjU3MTBkMDA1ZCAxMDA2NDQKLS0t IGEvbW9kdWxlL01ha2VmaWxlLmFtCisrKyBiL21vZHVsZS9NYWtlZmlsZS5hbQpAQCAtMjks NyArMjksMTEgQEAgJChWTV9UQVJHRVRTKTogJCh0b3BfYnVpbGRkaXIpL2xpYmd1aWxlL3Zt LW9wZXJhdGlvbnMuaAogCiBpY2UtOS9ib290LTkuZ286IGljZS05L2Jvb3QtOS5zY20gaWNl LTkvcXVhc2lzeW50YXguc2NtIGljZS05L3I2cnMtbGlicmFyaWVzLnNjbSBpY2UtOS9yN3Jz LWxpYnJhcmllcy5zY20gaWNlLTkvcmVhZC5zY20KIGljZS05L21hdGNoLmdvOiBpY2UtOS9t YXRjaC5zY20gaWNlLTkvbWF0Y2gudXBzdHJlYW0uc2NtCi1zcmZpL3NyZmktNjQuZ286IHNy Zmkvc3JmaS02NC5zY20gc3JmaS9zcmZpLTY0L3Rlc3Rpbmcuc2NtCitzcmZpL3NyZmktNjQu Z286IHNyZmkvc3JmaS02NC5zY20JCVwKKyAgc3JmaS9zcmZpLTY0L2V4ZWN1dGlvbi5ib2R5 LnNjbQkJXAorICBzcmZpL3NyZmktNjQvc291cmNlLWluZm8uYm9keS5zY20JCVwKKyAgc3Jm aS9zcmZpLTY0L3Rlc3QtcnVubmVyLXNpbXBsZS5ib2R5LnNjbQlcCisgIHNyZmkvc3JmaS02 NC90ZXN0LXJ1bm5lci5ib2R5LnNjbQogJChub2Jhc2VfY2NhY2hlX0RBVEEpOiAuLi9ib290 c3RyYXAvaWNlLTkvZXZhbC5nbwogCiAjIEtlZXAgdGhpcyBydWxlIGluIHN5bmMgd2l0aCB0 aGF0IGluIGBhbS9ndWlsZWMnLgpAQCAtNDA1LDcgKzQwOSwxMCBAQCBOT0NPTVBfU09VUkNF UyA9CQkJCVwKICAgaWNlLTkvcjdycy1saWJyYXJpZXMuc2NtCQkJXAogICBpY2UtOS9xdWFz aXN5bnRheC5zY20JCQkJXAogICBzcmZpL3NyZmktNDIvZWMuc2NtCQkJCVwKLSAgc3JmaS9z cmZpLTY0L3Rlc3Rpbmcuc2NtCQkJXAorICBzcmZpL3NyZmktNjQvZXhlY3V0aW9uLmJvZHku c2NtCQlcCisgIHNyZmkvc3JmaS02NC9zb3VyY2UtaW5mby5ib2R5LnNjbQkJXAorICBzcmZp L3NyZmktNjQvdGVzdC1ydW5uZXItc2ltcGxlLmJvZHkuc2NtCVwKKyAgc3JmaS9zcmZpLTY0 L3Rlc3QtcnVubmVyLmJvZHkuc2NtCQlcCiAgIHNyZmkvc3JmaS02Ny9jb21wYXJlLnNjbQkJ CVwKICAgc3lzdGVtL2Jhc2UvbGFsci51cHN0cmVhbS5zY20JCQlcCiAgIHN5c3RlbS9yZXBs L2Rlc2NyaWJlLnNjbQkJCVwKZGlmZiAtLWdpdCBhL21vZHVsZS9zcmZpL3NyZmktNjQuc2Nt IGIvbW9kdWxlL3NyZmkvc3JmaS02NC5zY20KaW5kZXggOTI1NzI2ZjVjLi5lNmM2Y2U4MGEg MTAwNjQ0Ci0tLSBhL21vZHVsZS9zcmZpL3NyZmktNjQuc2NtCisrKyBiL21vZHVsZS9zcmZp L3NyZmktNjQuc2NtCkBAIC0yNCw5ICsyNCw5IEBACiAgICB0ZXN0LW1hdGNoLW50aCB0ZXN0 LW1hdGNoLWFsbCB0ZXN0LW1hdGNoLWFueSB0ZXN0LW1hdGNoLW5hbWUKICAgIHRlc3Qtc2tp cCB0ZXN0LWV4cGVjdC1mYWlsIHRlc3QtcmVhZC1ldmFsLXN0cmluZwogICAgdGVzdC1ydW5u ZXItZ3JvdXAtcGF0aCB0ZXN0LWdyb3VwIHRlc3QtZ3JvdXAtd2l0aC1jbGVhbnVwCisgICB0 ZXN0LWV4aXQKICAgIHRlc3QtcmVzdWx0LXJlZiB0ZXN0LXJlc3VsdC1zZXQhIHRlc3QtcmVz dWx0LWNsZWFyIHRlc3QtcmVzdWx0LXJlbW92ZQogICAgdGVzdC1yZXN1bHQta2luZCB0ZXN0 LXBhc3NlZD8KLSAgIHRlc3QtbG9nLXRvLWZpbGUKICAgIHRlc3QtcnVubmVyPyB0ZXN0LXJ1 bm5lci1yZXNldCB0ZXN0LXJ1bm5lci1udWxsCiAgICB0ZXN0LXJ1bm5lci1zaW1wbGUgdGVz dC1ydW5uZXItY3VycmVudCB0ZXN0LXJ1bm5lci1mYWN0b3J5IHRlc3QtcnVubmVyLWdldAog ICAgdGVzdC1ydW5uZXItY3JlYXRlIHRlc3QtcnVubmVyLXRlc3QtbmFtZQpAQCAtNDgsOSAr NDgsMTggQEAKICAgIHRlc3Qtb24tZ3JvdXAtYmVnaW4tc2ltcGxlIHRlc3Qtb24tZ3JvdXAt ZW5kLXNpbXBsZQogICAgdGVzdC1vbi1iYWQtY291bnQtc2ltcGxlIHRlc3Qtb24tYmFkLWVu ZC1uYW1lLXNpbXBsZQogICAgdGVzdC1vbi1maW5hbC1zaW1wbGUgdGVzdC1vbi10ZXN0LWVu ZC1zaW1wbGUKLSAgIHRlc3Qtb24tZmluYWwtc2ltcGxlKQotICAjOmRlY2xhcmF0aXZlPyAj ZikgOyAjZiBuZWVkZWQgZm9yIHRlc3QtbG9nLXRvLWZpbGUKKyAgIHRlc3Qtb24tZmluYWwt c2ltcGxlKSkKIAogKGNvbmQtZXhwYW5kLXByb3ZpZGUgKGN1cnJlbnQtbW9kdWxlKSAnKHNy ZmktNjQpKQogCi0oaW5jbHVkZS1mcm9tLXBhdGggInNyZmkvc3JmaS02NC90ZXN0aW5nLnNj bSIpCisoaW1wb3J0CisgKG9ubHkgKHJucnMgZXhjZXB0aW9ucykgZ3VhcmQpCisgKHNyZmkg c3JmaS0xKQorIChzcmZpIHNyZmktOSkKKyAoc3JmaSBzcmZpLTExKQorIChzcmZpIHNyZmkt MzUpKQorCisoaW5jbHVkZS1mcm9tLXBhdGggInNyZmkvc3JmaS02NC9zb3VyY2UtaW5mby5i b2R5LnNjbSIpCisoaW5jbHVkZS1mcm9tLXBhdGggInNyZmkvc3JmaS02NC90ZXN0LXJ1bm5l ci5ib2R5LnNjbSIpCisoaW5jbHVkZS1mcm9tLXBhdGggInNyZmkvc3JmaS02NC90ZXN0LXJ1 bm5lci1zaW1wbGUuYm9keS5zY20iKQorKGluY2x1ZGUtZnJvbS1wYXRoICJzcmZpL3NyZmkt NjQvZXhlY3V0aW9uLmJvZHkuc2NtIikKZGlmZiAtLWdpdCBhL21vZHVsZS9zcmZpL3NyZmkt NjQvZXhlY3V0aW9uLmJvZHkuc2NtIGIvbW9kdWxlL3NyZmkvc3JmaS02NC9leGVjdXRpb24u Ym9keS5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi45MjJlMTJh NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGUvc3JmaS9zcmZpLTY0L2V4ZWN1dGlvbi5i b2R5LnNjbQpAQCAtMCwwICsxLDQzNCBAQAorOzsgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2 LCAyMDA3LCAyMDEyLCAyMDEzIFBlciBCb3RobmVyCis7OyBBZGRlZCAiZnVsbCIgc3VwcG9y dCBmb3IgQ2hpY2tlbiwgR2F1Y2hlLCBHdWlsZSBhbmQgU0lTQy4KKzs7ICAgQWxleCBTaGlu biwgQ29weXJpZ2h0IChjKSAyMDA1LgorOzsgTW9kaWZpZWQgZm9yIFNjaGVtZSBTcGhlcmVz IGJ5IMOBbHZhcm8gQ2FzdHJvLUNhc3RpbGxhLCBDb3B5cmlnaHQgKGMpIDIwMTIuCis7OyBT dXBwb3J0IGZvciBHdWlsZSAyIGJ5IE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPiwg Q29weXJpZ2h0IChjKSAyMDE0LgorOzsgUmVmYWN0b3JlZCBieSBUYXlsYW4gVWxyaWNoIEJh ecSxcmzEsS9LYW1tZXIsIENvcHlyaWdodCAoYykgMjAxNCwgMjAxNS4KKzs7Cis7OyBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv bgorOzsgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24KKzs7IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQKKzs7IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LAorOzsgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVz Cis7OyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZSBTb2Z0d2FyZSBpcworOzsgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKKzs7Cis7OyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorOzsgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCis7 OworOzsgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsCis7OyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKzs7IE1FUkNIQU5UQUJJTElUWSwg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECis7OyBOT05JTkZSSU5HRU1F TlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT Cis7OyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4KKzs7IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCis7OyBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCis7OyBT T0ZUV0FSRS4KKworOzs7IE5vdGU6IHRvIHByZXZlbnQgcHJvZHVjaW5nIG1hc3NpdmUgYW1v dW50cyBvZiBjb2RlIGZyb20gdGhlIG1hY3JvLWV4cGFuZAorOzs7IHBoYXNlICh3aGljaCBt YWtlcyBjb21waWxlIHRpbWVzIHN1ZmZlciBhbmQgbWF5IGhpdCBjb2RlIHNpemUgbGltaXRz IGluIHNvbWUKKzs7OyBzeXN0ZW1zKSwga2VlcCBtYWNybyBib2RpZXMgbWluaW1hbCBieSBk ZWxlZ2F0aW5nIHdvcmsgdG8gcHJvY2VkdXJlcy4KKworDAorOzs7IEdyb3VwaW5nCisKKyhk ZWZpbmUgKG1heWJlLWluc3RhbGwtZGVmYXVsdC1ydW5uZXIgc3VpdGUtbmFtZSkKKyAgKHdo ZW4gKG5vdCAodGVzdC1ydW5uZXItY3VycmVudCkpCisgICAgKGxldCogKChsb2ctZmlsZSAo c3RyaW5nLWFwcGVuZCBzdWl0ZS1uYW1lICIuc3JmaTY0LmxvZyIpKQorICAgICAgICAgICAo cnVubmVyICh0ZXN0LXJ1bm5lci1zaW1wbGUgbG9nLWZpbGUpKSkKKyAgICAgICgldGVzdC1y dW5uZXItYXV0by1pbnN0YWxsZWQhIHJ1bm5lciAjdCkKKyAgICAgICh0ZXN0LXJ1bm5lci1j dXJyZW50IHJ1bm5lcikpKSkKKworKGRlZmluZSAobWF5YmUtdW5pbnN0YWxsLWRlZmF1bHQt cnVubmVyKQorICAod2hlbiAoJXRlc3QtcnVubmVyLWF1dG8taW5zdGFsbGVkPyAodGVzdC1y dW5uZXItY3VycmVudCkpCisgICAgKHRlc3QtcnVubmVyLWN1cnJlbnQgI2YpKSkKKworKGRl ZmluZSB0ZXN0LWJlZ2luCisgIChjYXNlLWxhbWJkYQorICAgICgobmFtZSkKKyAgICAgKHRl c3QtYmVnaW4gbmFtZSAjZikpCisgICAgKChuYW1lIGNvdW50KQorICAgICAobWF5YmUtaW5z dGFsbC1kZWZhdWx0LXJ1bm5lciBuYW1lKQorICAgICAobGV0ICgociAodGVzdC1ydW5uZXIt Y3VycmVudCkpKQorICAgICAgIChsZXQgKChza2lwLWxpc3QgKCV0ZXN0LXJ1bm5lci1za2lw LWxpc3QgcikpCisgICAgICAgICAgICAgKHNraXAtc2F2ZSAoJXRlc3QtcnVubmVyLXNraXAt c2F2ZSByKSkKKyAgICAgICAgICAgICAoZmFpbC1saXN0ICgldGVzdC1ydW5uZXItZmFpbC1s aXN0IHIpKQorICAgICAgICAgICAgIChmYWlsLXNhdmUgKCV0ZXN0LXJ1bm5lci1mYWlsLXNh dmUgcikpCisgICAgICAgICAgICAgKHRvdGFsLWNvdW50ICgldGVzdC1ydW5uZXItdG90YWwt Y291bnQgcikpCisgICAgICAgICAgICAgKGNvdW50LWxpc3QgKCV0ZXN0LXJ1bm5lci1jb3Vu dC1saXN0IHIpKQorICAgICAgICAgICAgIChncm91cC1zdGFjayAodGVzdC1ydW5uZXItZ3Jv dXAtc3RhY2sgcikpKQorICAgICAgICAgKCh0ZXN0LXJ1bm5lci1vbi1ncm91cC1iZWdpbiBy KSByIG5hbWUgY291bnQpCisgICAgICAgICAoJXRlc3QtcnVubmVyLXNraXAtc2F2ZSEgciAo Y29ucyBza2lwLWxpc3Qgc2tpcC1zYXZlKSkKKyAgICAgICAgICgldGVzdC1ydW5uZXItZmFp bC1zYXZlISByIChjb25zIGZhaWwtbGlzdCBmYWlsLXNhdmUpKQorICAgICAgICAgKCV0ZXN0 LXJ1bm5lci1jb3VudC1saXN0ISByIChjb25zIChjb25zIHRvdGFsLWNvdW50IGNvdW50KQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LWxpc3Qp KQorICAgICAgICAgKHRlc3QtcnVubmVyLWdyb3VwLXN0YWNrISByIChjb25zIG5hbWUgZ3Jv dXAtc3RhY2spKSkpKSkpCisKKyhkZWZpbmUgdGVzdC1lbmQKKyAgKGNhc2UtbGFtYmRhCisg ICAgKCgpCisgICAgICh0ZXN0LWVuZCAjZikpCisgICAgKChuYW1lKQorICAgICAobGV0KiAo KHIgKHRlc3QtcnVubmVyLWdldCkpCisgICAgICAgICAgICAoZ3JvdXBzICh0ZXN0LXJ1bm5l ci1ncm91cC1zdGFjayByKSkpCisgICAgICAgKHRlc3QtcmVzdWx0LWNsZWFyIHIpCisgICAg ICAgKHdoZW4gKG51bGw/IGdyb3VwcykKKyAgICAgICAgIChlcnJvciAidGVzdC1lbmQgbm90 IGluIGEgZ3JvdXAiKSkKKyAgICAgICAod2hlbiAoYW5kIG5hbWUgKG5vdCAoZXF1YWw/IG5h bWUgKGNhciBncm91cHMpKSkpCisgICAgICAgICAoKHRlc3QtcnVubmVyLW9uLWJhZC1lbmQt bmFtZSByKSByIG5hbWUgKGNhciBncm91cHMpKSkKKyAgICAgICAobGV0KiAoKGNvdW50LWxp c3QgKCV0ZXN0LXJ1bm5lci1jb3VudC1saXN0IHIpKQorICAgICAgICAgICAgICAoZXhwZWN0 ZWQtY291bnQgKGNkYXIgY291bnQtbGlzdCkpCisgICAgICAgICAgICAgIChzYXZlZC1jb3Vu dCAoY2FhciBjb3VudC1saXN0KSkKKyAgICAgICAgICAgICAgKGdyb3VwLWNvdW50ICgtICgl dGVzdC1ydW5uZXItdG90YWwtY291bnQgcikgc2F2ZWQtY291bnQpKSkKKyAgICAgICAgICh3 aGVuIChhbmQgZXhwZWN0ZWQtY291bnQKKyAgICAgICAgICAgICAgICAgICAgKG5vdCAoPSBl eHBlY3RlZC1jb3VudCBncm91cC1jb3VudCkpKQorICAgICAgICAgICAoKHRlc3QtcnVubmVy LW9uLWJhZC1jb3VudCByKSByIGdyb3VwLWNvdW50IGV4cGVjdGVkLWNvdW50KSkKKyAgICAg ICAgICgodGVzdC1ydW5uZXItb24tZ3JvdXAtZW5kIHIpIHIpCisgICAgICAgICAodGVzdC1y dW5uZXItZ3JvdXAtc3RhY2shIHIgKGNkciAodGVzdC1ydW5uZXItZ3JvdXAtc3RhY2sgcikp KQorICAgICAgICAgKCV0ZXN0LXJ1bm5lci1za2lwLWxpc3QhIHIgKGNhciAoJXRlc3QtcnVu bmVyLXNraXAtc2F2ZSByKSkpCisgICAgICAgICAoJXRlc3QtcnVubmVyLXNraXAtc2F2ZSEg ciAoY2RyICgldGVzdC1ydW5uZXItc2tpcC1zYXZlIHIpKSkKKyAgICAgICAgICgldGVzdC1y dW5uZXItZmFpbC1saXN0ISByIChjYXIgKCV0ZXN0LXJ1bm5lci1mYWlsLXNhdmUgcikpKQor ICAgICAgICAgKCV0ZXN0LXJ1bm5lci1mYWlsLXNhdmUhIHIgKGNkciAoJXRlc3QtcnVubmVy LWZhaWwtc2F2ZSByKSkpCisgICAgICAgICAoJXRlc3QtcnVubmVyLWNvdW50LWxpc3QhIHIg KGNkciBjb3VudC1saXN0KSkKKyAgICAgICAgICh3aGVuIChudWxsPyAodGVzdC1ydW5uZXIt Z3JvdXAtc3RhY2sgcikpCisgICAgICAgICAgICgodGVzdC1ydW5uZXItb24tZmluYWwgcikg cikKKyAgICAgICAgICAgKG1heWJlLXVuaW5zdGFsbC1kZWZhdWx0LXJ1bm5lcikpKSkpKSkK KworKGRlZmluZS1zeW50YXggdGVzdC1ncm91cAorICAoc3ludGF4LXJ1bGVzICgpCisgICAg KChfIDxuYW1lPiA8Ym9keT4gLiA8Ym9keT4qKQorICAgICAoJXRlc3QtZ3JvdXAgPG5hbWU+ IChsYW1iZGEgKCkgPGJvZHk+IC4gPGJvZHk+KikpKSkpCisKKyhkZWZpbmUgKCV0ZXN0LWdy b3VwIG5hbWUgdGh1bmspCisgIChiZWdpbgorICAgIChtYXliZS1pbnN0YWxsLWRlZmF1bHQt cnVubmVyIG5hbWUpCisgICAgKGxldCAoKHJ1bm5lciAodGVzdC1ydW5uZXItZ2V0KSkpCisg ICAgICAodGVzdC1yZXN1bHQtY2xlYXIgcnVubmVyKQorICAgICAgKHRlc3QtcmVzdWx0LXNl dCEgcnVubmVyICduYW1lIG5hbWUpCisgICAgICAodW5sZXNzICh0ZXN0LXNraXA/IHJ1bm5l cikKKyAgICAgICAgKGR5bmFtaWMtd2luZAorICAgICAgICAgIChsYW1iZGEgKCkgKHRlc3Qt YmVnaW4gbmFtZSkpCisgICAgICAgICAgdGh1bmsKKyAgICAgICAgICAobGFtYmRhICgpICh0 ZXN0LWVuZCBuYW1lKSkpKSkpKQorCisoZGVmaW5lLXN5bnRheCB0ZXN0LWdyb3VwLXdpdGgt Y2xlYW51cAorICAoc3ludGF4LXJ1bGVzICgpCisgICAgKChfIDxuYW1lPiA8Ym9keT4gPGJv ZHk+KiAuLi4gPGNsZWFudXA+KQorICAgICAodGVzdC1ncm91cCA8bmFtZT4KKyAgICAgICAo ZHluYW1pYy13aW5kIChsYW1iZGEgKCkgI2YpCisgICAgICAgICAgICAgICAgICAgICAobGFt YmRhICgpIDxib2R5PiA8Ym9keT4qIC4uLikKKyAgICAgICAgICAgICAgICAgICAgIChsYW1i ZGEgKCkgPGNsZWFudXA+KSkpKSkpCisKKwwKKzs7OyBTa2lwcGluZywgZXhwZWN0ZWQtZmFp bGluZywgbWF0Y2hpbmcKKworKGRlZmluZSAodGVzdC1za2lwIC4gc3BlY3MpCisgIChsZXQg KChydW5uZXIgKHRlc3QtcnVubmVyLWdldCkpKQorICAgICgldGVzdC1ydW5uZXItc2tpcC1s aXN0IQorICAgICBydW5uZXIgKGNvbnMgKGFwcGx5IHRlc3QtbWF0Y2gtYWxsIHNwZWNzKQor ICAgICAgICAgICAgICAgICAgKCV0ZXN0LXJ1bm5lci1za2lwLWxpc3QgcnVubmVyKSkpKSkK KworKGRlZmluZSAodGVzdC1za2lwPyBydW5uZXIpCisgIChsZXQgKChydW4tbGlzdCAoJXRl c3QtcnVubmVyLXJ1bi1saXN0IHJ1bm5lcikpCisgICAgICAgIChza2lwLWxpc3QgKCV0ZXN0 LXJ1bm5lci1za2lwLWxpc3QgcnVubmVyKSkpCisgICAgKG9yIChhbmQgcnVuLWxpc3QgKG5v dCAoYW55LXByZWQgcnVuLWxpc3QgcnVubmVyKSkpCisgICAgICAgIChhbnktcHJlZCBza2lw LWxpc3QgcnVubmVyKSkpKQorCisoZGVmaW5lICh0ZXN0LWV4cGVjdC1mYWlsIC4gc3BlY3Mp CisgIChsZXQgKChydW5uZXIgKHRlc3QtcnVubmVyLWdldCkpKQorICAgICgldGVzdC1ydW5u ZXItZmFpbC1saXN0IQorICAgICBydW5uZXIgKGNvbnMgKGFwcGx5IHRlc3QtbWF0Y2gtYWxs IHNwZWNzKQorICAgICAgICAgICAgICAgICAgKCV0ZXN0LXJ1bm5lci1mYWlsLWxpc3QgcnVu bmVyKSkpKSkKKworKGRlZmluZSAodGVzdC1tYXRjaC1hbnkgLiBzcGVjcykKKyAgKGxldCAo KHByZWRzIChtYXAgbWFrZS1wcmVkIHNwZWNzKSkpCisgICAgKGxhbWJkYSAocnVubmVyKQor ICAgICAgKGFueS1wcmVkIHByZWRzIHJ1bm5lcikpKSkKKworKGRlZmluZSAodGVzdC1tYXRj aC1hbGwgLiBzcGVjcykKKyAgKGxldCAoKHByZWRzIChtYXAgbWFrZS1wcmVkIHNwZWNzKSkp CisgICAgKGxhbWJkYSAocnVubmVyKQorICAgICAgKGV2ZXJ5LXByZWQgcHJlZHMgcnVubmVy KSkpKQorCisoZGVmaW5lIChtYWtlLXByZWQgc3BlYykKKyAgKGNvbmQKKyAgICgocHJvY2Vk dXJlPyBzcGVjKQorICAgIHNwZWMpCisgICAoKGludGVnZXI/IHNwZWMpCisgICAgKHRlc3Qt bWF0Y2gtbnRoIDEgc3BlYykpCisgICAoKHN0cmluZz8gc3BlYykKKyAgICAodGVzdC1tYXRj aC1uYW1lIHNwZWMpKQorICAgKGVsc2UKKyAgICAoZXJyb3IgIm5vdCBhIHZhbGlkIHRlc3Qg c3BlY2lmaWVyIiBzcGVjKSkpKQorCisoZGVmaW5lIHRlc3QtbWF0Y2gtbnRoCisgIChjYXNl LWxhbWJkYQorICAgICgobikgKHRlc3QtbWF0Y2gtbnRoIG4gMSkpCisgICAgKChuIGNvdW50 KQorICAgICAobGV0ICgoaSAwKSkKKyAgICAgICAobGFtYmRhIChydW5uZXIpCisgICAgICAg ICAoc2V0ISBpICgrIGkgMSkpCisgICAgICAgICAoYW5kICg+PSBpIG4pICg8IGkgKCsgbiBj b3VudCkpKSkpKSkpCisKKyhkZWZpbmUgKHRlc3QtbWF0Y2gtbmFtZSBuYW1lKQorICAobGFt YmRhIChydW5uZXIpCisgICAgKGVxdWFsPyBuYW1lICh0ZXN0LXJ1bm5lci10ZXN0LW5hbWUg cnVubmVyKSkpKQorCis7OzsgQmV3YXJlOiBhbGwgcHJlZGljYXRlcyBtdXN0IGJlIGNhbGxl ZCBiZWNhdXNlIHRoZXkgbWlnaHQgaGF2ZSBzaWRlLWVmZmVjdHM7Cis7Ozsgbm8gZWFybHkg cmV0dXJuaW5nIG9yIGFuZC9vciBzaG9ydC1jaXJjdWl0aW5nIG9mIHByb2NlZHVyZSBjYWxs cyBhbGxvd2VkLgorCisoZGVmaW5lIChhbnktcHJlZCBwcmVkcyBvYmplY3QpCisgIChsZXQg bG9vcCAoKG1hdGNoZWQ/ICNmKQorICAgICAgICAgICAgIChwcmVkcyBwcmVkcykpCisgICAg KGlmIChudWxsPyBwcmVkcykKKyAgICAgICAgbWF0Y2hlZD8KKyAgICAgICAgKGxldCAoKHJl c3VsdCAoKGNhciBwcmVkcykgb2JqZWN0KSkpCisgICAgICAgICAgKGxvb3AgKG9yIG1hdGNo ZWQ/IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAoY2RyIHByZWRzKSkpKSkpCisKKyhkZWZp bmUgKGV2ZXJ5LXByZWQgcHJlZHMgb2JqZWN0KQorICAobGV0IGxvb3AgKChmYWlsZWQ/ICNm KQorICAgICAgICAgICAgIChwcmVkcyBwcmVkcykpCisgICAgKGlmIChudWxsPyBwcmVkcykK KyAgICAgICAgKG5vdCBmYWlsZWQ/KQorICAgICAgICAobGV0ICgocmVzdWx0ICgoY2FyIHBy ZWRzKSBvYmplY3QpKSkKKyAgICAgICAgICAobG9vcCAob3IgZmFpbGVkPyAobm90IHJlc3Vs dCkpCisgICAgICAgICAgICAgICAgKGNkciBwcmVkcykpKSkpKQorDAorOzs7IEFjdHVhbCB0 ZXN0aW5nCisKKyhkZWZpbmUtc3ludGF4IGZhbHNlLWlmLWVycm9yCisgIChzeW50YXgtcnVs ZXMgKCkKKyAgICAoKF8gPGV4cHJlc3Npb24+IDxydW5uZXI+KQorICAgICAoZ3VhcmQgKGVy cm9yCisgICAgICAgICAgICAgKGVsc2UKKyAgICAgICAgICAgICAgKHRlc3QtcmVzdWx0LXNl dCEgPHJ1bm5lcj4gJ2FjdHVhbC1lcnJvciBlcnJvcikKKyAgICAgICAgICAgICAgI2YpKQor ICAgICAgIDxleHByZXNzaW9uPikpKSkKKworKGRlZmluZSAodGVzdC1wcmVsdWRlIHNvdXJj ZS1pbmZvIHJ1bm5lciBuYW1lIGZvcm0pCisgICh0ZXN0LXJlc3VsdC1jbGVhciBydW5uZXIp CisgIChzZXQtc291cmNlLWluZm8hIHJ1bm5lciBzb3VyY2UtaW5mbykKKyAgKHdoZW4gbmFt ZQorICAgICh0ZXN0LXJlc3VsdC1zZXQhIHJ1bm5lciAnbmFtZSBuYW1lKSkKKyAgKHRlc3Qt cmVzdWx0LXNldCEgcnVubmVyICdzb3VyY2UtZm9ybSBmb3JtKQorICAobGV0ICgoc2tpcD8g KHRlc3Qtc2tpcD8gcnVubmVyKSkpCisgICAgKGlmIHNraXA/CisgICAgICAgICh0ZXN0LXJl c3VsdC1zZXQhIHJ1bm5lciAncmVzdWx0LWtpbmQgJ3NraXApCisgICAgICAgIChsZXQgKChm YWlsLWxpc3QgKCV0ZXN0LXJ1bm5lci1mYWlsLWxpc3QgcnVubmVyKSkpCisgICAgICAgICAg KHdoZW4gKGFueS1wcmVkIGZhaWwtbGlzdCBydW5uZXIpCisgICAgICAgICAgICA7OyBGb3Ig bGF0ZXIgaW5zcGVjdGlvbiBvbmx5LgorICAgICAgICAgICAgKHRlc3QtcmVzdWx0LXNldCEg cnVubmVyICdyZXN1bHQta2luZCAneGZhaWwpKSkpCisgICAgKCh0ZXN0LXJ1bm5lci1vbi10 ZXN0LWJlZ2luIHJ1bm5lcikgcnVubmVyKQorICAgIChub3Qgc2tpcD8pKSkKKworKGRlZmlu ZSAodGVzdC1wb3N0bHVkZSBydW5uZXIpCisgIChsZXQgKChyZXN1bHQta2luZCAodGVzdC1y ZXN1bHQta2luZCBydW5uZXIpKSkKKyAgICAoY2FzZSByZXN1bHQta2luZAorICAgICAgKChw YXNzKQorICAgICAgICh0ZXN0LXJ1bm5lci1wYXNzLWNvdW50ISBydW5uZXIgKCsgMSAodGVz dC1ydW5uZXItcGFzcy1jb3VudCBydW5uZXIpKSkpCisgICAgICAoKGZhaWwpCisgICAgICAg KHRlc3QtcnVubmVyLWZhaWwtY291bnQhIHJ1bm5lciAoKyAxICh0ZXN0LXJ1bm5lci1mYWls LWNvdW50IHJ1bm5lcikpKSkKKyAgICAgICgoeHBhc3MpCisgICAgICAgKHRlc3QtcnVubmVy LXhwYXNzLWNvdW50ISBydW5uZXIgKCsgMSAodGVzdC1ydW5uZXIteHBhc3MtY291bnQgcnVu bmVyKSkpKQorICAgICAgKCh4ZmFpbCkKKyAgICAgICAodGVzdC1ydW5uZXIteGZhaWwtY291 bnQhIHJ1bm5lciAoKyAxICh0ZXN0LXJ1bm5lci14ZmFpbC1jb3VudCBydW5uZXIpKSkpCisg ICAgICAoKHNraXApCisgICAgICAgKHRlc3QtcnVubmVyLXNraXAtY291bnQhIHJ1bm5lciAo KyAxICh0ZXN0LXJ1bm5lci1za2lwLWNvdW50IHJ1bm5lcikpKSkpCisgICAgKCV0ZXN0LXJ1 bm5lci10b3RhbC1jb3VudCEgcnVubmVyICgrIDEgKCV0ZXN0LXJ1bm5lci10b3RhbC1jb3Vu dCBydW5uZXIpKSkKKyAgICAoKHRlc3QtcnVubmVyLW9uLXRlc3QtZW5kIHJ1bm5lcikgcnVu bmVyKSkpCisKKyhkZWZpbmUgKHNldC1yZXN1bHQta2luZCEgcnVubmVyIHBhc3M/KQorICAo dGVzdC1yZXN1bHQtc2V0ISBydW5uZXIgJ3Jlc3VsdC1raW5kCisgICAgICAgICAgICAgICAg ICAgIChpZiAoZXE/ICh0ZXN0LXJlc3VsdC1raW5kIHJ1bm5lcikgJ3hmYWlsKQorICAgICAg ICAgICAgICAgICAgICAgICAgKGlmIHBhc3M/ICd4cGFzcyAneGZhaWwpCisgICAgICAgICAg ICAgICAgICAgICAgICAoaWYgcGFzcz8gJ3Bhc3MgJ2ZhaWwpKSkpCisKKzs7OyBXZSBuZWVk IHRvIHVzZSBzb21lIHRyaWNrZXJ5IHRvIGdldCB0aGUgc291cmNlIGluZm8gcmlnaHQuICBU aGUgaW1wb3J0YW50Cis7OzsgdGhpbmcgaXMgdG8gcGFzcyBhIHN5bnRheCBvYmplY3QgdGhh dCBpcyBhIHBhaXIgdG8gYHNvdXJjZS1pbmZvJywgYW5kIG1ha2UKKzs7OyBzdXJlIHRoaXMg c3ludGF4IG9iamVjdCBjb21lcyBmcm9tIHVzZXIgY29kZSBhbmQgbm90IGZyb20gb3Vyc2Vs dmVzLgorCisoZGVmaW5lLXN5bnRheCB0ZXN0LWFzc2VydAorICAoc3ludGF4LXJ1bGVzICgp CisgICAgKChfIC4gPHJlc3Q+KQorICAgICAodGVzdC1hc3NlcnQvc291cmNlLWluZm8gKHNv dXJjZS1pbmZvIDxyZXN0PikgLiA8cmVzdD4pKSkpCisKKyhkZWZpbmUtc3ludGF4IHRlc3Qt YXNzZXJ0L3NvdXJjZS1pbmZvCisgIChzeW50YXgtcnVsZXMgKCkKKyAgICAoKF8gPHNvdXJj ZS1pbmZvPiA8ZXhwcj4pCisgICAgICh0ZXN0LWFzc2VydC9zb3VyY2UtaW5mbyA8c291cmNl LWluZm8+ICNmIDxleHByPikpCisgICAgKChfIDxzb3VyY2UtaW5mbz4gPG5hbWU+IDxleHBy PikKKyAgICAgKCV0ZXN0LWFzc2VydCA8c291cmNlLWluZm8+IDxuYW1lPiAnPGV4cHI+IChs YW1iZGEgKCkgPGV4cHI+KSkpKSkKKworKGRlZmluZSAoJXRlc3QtYXNzZXJ0IHNvdXJjZS1p bmZvIG5hbWUgZm9ybSB0aHVuaykKKyAgKGxldCAoKHJ1bm5lciAodGVzdC1ydW5uZXItZ2V0 KSkpCisgICAgKHdoZW4gKHRlc3QtcHJlbHVkZSBzb3VyY2UtaW5mbyBydW5uZXIgbmFtZSBm b3JtKQorICAgICAgKGxldCAoKHZhbCAoZmFsc2UtaWYtZXJyb3IgKHRodW5rKSBydW5uZXIp KSkKKyAgICAgICAgKHRlc3QtcmVzdWx0LXNldCEgcnVubmVyICdhY3R1YWwtdmFsdWUgdmFs KQorICAgICAgICAoc2V0LXJlc3VsdC1raW5kISBydW5uZXIgdmFsKSkpCisgICAgKHRlc3Qt cG9zdGx1ZGUgcnVubmVyKSkpCisKKyhkZWZpbmUtc3ludGF4IHRlc3QtY29tcGFyZQorICAo c3ludGF4LXJ1bGVzICgpCisgICAgKChfIC4gPHJlc3Q+KQorICAgICAodGVzdC1jb21wYXJl L3NvdXJjZS1pbmZvIChzb3VyY2UtaW5mbyA8cmVzdD4pIC4gPHJlc3Q+KSkpKQorCisoZGVm aW5lLXN5bnRheCB0ZXN0LWNvbXBhcmUvc291cmNlLWluZm8KKyAgKHN5bnRheC1ydWxlcyAo KQorICAgICgoXyA8c291cmNlLWluZm8+IDxjb21wYXJlPiA8ZXhwZWN0ZWQ+IDxleHByPikK KyAgICAgKHRlc3QtY29tcGFyZS9zb3VyY2UtaW5mbyA8c291cmNlLWluZm8+IDxjb21wYXJl PiAjZiA8ZXhwZWN0ZWQ+IDxleHByPikpCisgICAgKChfIDxzb3VyY2UtaW5mbz4gPGNvbXBh cmU+IDxuYW1lPiA8ZXhwZWN0ZWQ+IDxleHByPikKKyAgICAgKCV0ZXN0LWNvbXBhcmUgPHNv dXJjZS1pbmZvPiA8Y29tcGFyZT4gPG5hbWU+IDxleHBlY3RlZD4gJzxleHByPgorICAgICAg ICAgICAgICAgICAgICAobGFtYmRhICgpIDxleHByPikpKSkpCisKKyhkZWZpbmUgKCV0ZXN0 LWNvbXBhcmUgc291cmNlLWluZm8gY29tcGFyZSBuYW1lIGV4cGVjdGVkIGZvcm0gdGh1bmsp CisgIChsZXQgKChydW5uZXIgKHRlc3QtcnVubmVyLWdldCkpKQorICAgICh3aGVuICh0ZXN0 LXByZWx1ZGUgc291cmNlLWluZm8gcnVubmVyIG5hbWUgZm9ybSkKKyAgICAgICh0ZXN0LXJl c3VsdC1zZXQhIHJ1bm5lciAnZXhwZWN0ZWQtdmFsdWUgZXhwZWN0ZWQpCisgICAgICAobGV0 ICgocGFzcz8gKGZhbHNlLWlmLWVycm9yCisgICAgICAgICAgICAgICAgICAgIChsZXQgKCh2 YWwgKHRodW5rKSkpCisgICAgICAgICAgICAgICAgICAgICAgKHRlc3QtcmVzdWx0LXNldCEg cnVubmVyICdhY3R1YWwtdmFsdWUgdmFsKQorICAgICAgICAgICAgICAgICAgICAgIChjb21w YXJlIGV4cGVjdGVkIHZhbCkpCisgICAgICAgICAgICAgICAgICAgIHJ1bm5lcikpKQorICAg ICAgICAoc2V0LXJlc3VsdC1raW5kISBydW5uZXIgcGFzcz8pKSkKKyAgICAodGVzdC1wb3N0 bHVkZSBydW5uZXIpKSkKKworKGRlZmluZS1zeW50YXggdGVzdC1lcXVhbAorICAoc3ludGF4 LXJ1bGVzICgpCisgICAgKChfIC4gPHJlc3Q+KQorICAgICAodGVzdC1jb21wYXJlL3NvdXJj ZS1pbmZvIChzb3VyY2UtaW5mbyA8cmVzdD4pIGVxdWFsPyAuIDxyZXN0PikpKSkKKworKGRl ZmluZS1zeW50YXggdGVzdC1lcXYKKyAgKHN5bnRheC1ydWxlcyAoKQorICAgICgoXyAuIDxy ZXN0PikKKyAgICAgKHRlc3QtY29tcGFyZS9zb3VyY2UtaW5mbyAoc291cmNlLWluZm8gPHJl c3Q+KSBlcXY/IC4gPHJlc3Q+KSkpKQorCisoZGVmaW5lLXN5bnRheCB0ZXN0LWVxCisgIChz eW50YXgtcnVsZXMgKCkKKyAgICAoKF8gLiA8cmVzdD4pCisgICAgICh0ZXN0LWNvbXBhcmUv c291cmNlLWluZm8gKHNvdXJjZS1pbmZvIDxyZXN0PikgZXE/IC4gPHJlc3Q+KSkpKQorCiso ZGVmaW5lIChhcHByb3g9IG1hcmdpbikKKyAgKGxhbWJkYSAodmFsdWUgZXhwZWN0ZWQpCisg ICAgKGxldCAoKHJ2YWwgKHJlYWwtcGFydCB2YWx1ZSkpCisgICAgICAgICAgKGl2YWwgKGlt YWctcGFydCB2YWx1ZSkpCisgICAgICAgICAgKHJleHAgKHJlYWwtcGFydCBleHBlY3RlZCkp CisgICAgICAgICAgKGlleHAgKGltYWctcGFydCBleHBlY3RlZCkpKQorICAgICAgKGFuZCAo Pj0gcnZhbCAoLSByZXhwIG1hcmdpbikpCisgICAgICAgICAgICg+PSBpdmFsICgtIGlleHAg bWFyZ2luKSkKKyAgICAgICAgICAgKDw9IHJ2YWwgKCsgcmV4cCBtYXJnaW4pKQorICAgICAg ICAgICAoPD0gaXZhbCAoKyBpZXhwIG1hcmdpbikpKSkpKQorCisoZGVmaW5lLXN5bnRheCB0 ZXN0LWFwcHJveGltYXRlCisgIChzeW50YXgtcnVsZXMgKCkKKyAgICAoKF8gLiA8cmVzdD4p CisgICAgICh0ZXN0LWFwcHJveGltYXRlL3NvdXJjZS1pbmZvIChzb3VyY2UtaW5mbyA8cmVz dD4pIC4gPHJlc3Q+KSkpKQorCisoZGVmaW5lLXN5bnRheCB0ZXN0LWFwcHJveGltYXRlL3Nv dXJjZS1pbmZvCisgIChzeW50YXgtcnVsZXMgKCkKKyAgICAoKF8gPHNvdXJjZS1pbmZvPiA8 ZXhwZWN0ZWQ+IDxleHByPiA8ZXJyb3ItbWFyZ2luPikKKyAgICAgKHRlc3QtYXBwcm94aW1h dGUvc291cmNlLWluZm8KKyAgICAgIDxzb3VyY2UtaW5mbz4gI2YgPGV4cGVjdGVkPiA8ZXhw cj4gPGVycm9yLW1hcmdpbj4pKQorICAgICgoXyA8c291cmNlLWluZm8+IDxuYW1lPiA8ZXhw ZWN0ZWQ+IDxleHByPiA8ZXJyb3ItbWFyZ2luPikKKyAgICAgKHRlc3QtY29tcGFyZS9zb3Vy Y2UtaW5mbworICAgICAgPHNvdXJjZS1pbmZvPiAoYXBwcm94PSA8ZXJyb3ItbWFyZ2luPikg PG5hbWU+IDxleHBlY3RlZD4gPGV4cHI+KSkpKQorCisoZGVmaW5lIChlcnJvci1tYXRjaGVz PyBlcnJvciB0eXBlKQorICAoY29uZAorICAgKChlcT8gdHlwZSAjdCkKKyAgICAjdCkKKyAg ICgoY29uZGl0aW9uLXR5cGU/IHR5cGUpCisgICAgKGFuZCAoY29uZGl0aW9uPyBlcnJvcikg KGNvbmRpdGlvbi1oYXMtdHlwZT8gZXJyb3IgdHlwZSkpKQorICAgKChwcm9jZWR1cmU/IHR5 cGUpCisgICAgKHR5cGUgZXJyb3IpKQorICAgKGVsc2UKKyAgICAobGV0ICgocnVubmVyICh0 ZXN0LXJ1bm5lci1nZXQpKSkKKyAgICAgICgoJXRlc3QtcnVubmVyLW9uLWJhZC1lcnJvci10 eXBlIHJ1bm5lcikgcnVubmVyIHR5cGUgZXJyb3IpKQorICAgICNmKSkpCisKKyhkZWZpbmUt c3ludGF4IHRlc3QtZXJyb3IKKyAgKHN5bnRheC1ydWxlcyAoKQorICAgICgoXyAuIDxyZXN0 PikKKyAgICAgKHRlc3QtZXJyb3Ivc291cmNlLWluZm8gKHNvdXJjZS1pbmZvIDxyZXN0Pikg LiA8cmVzdD4pKSkpCisKKyhkZWZpbmUtc3ludGF4IHRlc3QtZXJyb3Ivc291cmNlLWluZm8K KyAgKHN5bnRheC1ydWxlcyAoKQorICAgICgoXyA8c291cmNlLWluZm8+IDxleHByPikKKyAg ICAgKHRlc3QtZXJyb3Ivc291cmNlLWluZm8gPHNvdXJjZS1pbmZvPiAjZiAjdCA8ZXhwcj4p KQorICAgICgoXyA8c291cmNlLWluZm8+IDxlcnJvci10eXBlPiA8ZXhwcj4pCisgICAgICh0 ZXN0LWVycm9yL3NvdXJjZS1pbmZvIDxzb3VyY2UtaW5mbz4gI2YgPGVycm9yLXR5cGU+IDxl eHByPikpCisgICAgKChfIDxzb3VyY2UtaW5mbz4gPG5hbWU+IDxlcnJvci10eXBlPiA8ZXhw cj4pCisgICAgICgldGVzdC1lcnJvciA8c291cmNlLWluZm8+IDxuYW1lPiA8ZXJyb3ItdHlw ZT4gJzxleHByPgorICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKSA8ZXhwcj4pKSkpKQor CisoZGVmaW5lICgldGVzdC1lcnJvciBzb3VyY2UtaW5mbyBuYW1lIGVycm9yLXR5cGUgZm9y bSB0aHVuaykKKyAgKGxldCAoKHJ1bm5lciAodGVzdC1ydW5uZXItZ2V0KSkpCisgICAgKHdo ZW4gKHRlc3QtcHJlbHVkZSBzb3VyY2UtaW5mbyBydW5uZXIgbmFtZSBmb3JtKQorICAgICAg KHRlc3QtcmVzdWx0LXNldCEgcnVubmVyICdleHBlY3RlZC1lcnJvciBlcnJvci10eXBlKQor ICAgICAgKGxldCAoKHBhc3M/IChndWFyZCAoZXJyb3IgKGVsc2UgKHRlc3QtcmVzdWx0LXNl dCEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uZXIgJ2Fj dHVhbC1lcnJvciBlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChlcnJvci1tYXRjaGVzPyBlcnJvciBlcnJvci10eXBlKSkpCisgICAgICAgICAgICAg ICAgICAgICAobGV0ICgodmFsICh0aHVuaykpKQorICAgICAgICAgICAgICAgICAgICAgICAo dGVzdC1yZXN1bHQtc2V0ISBydW5uZXIgJ2FjdHVhbC12YWx1ZSB2YWwpKQorICAgICAgICAg ICAgICAgICAgICAgI2YpKSkKKyAgICAgICAgKHNldC1yZXN1bHQta2luZCEgcnVubmVyIHBh c3M/KSkpCisgICAgKHRlc3QtcG9zdGx1ZGUgcnVubmVyKSkpCisKKyhkZWZpbmUgKGRlZmF1 bHQtbW9kdWxlKQorICAoY29uZC1leHBhbmQKKyAgIChndWlsZSAoY3VycmVudC1tb2R1bGUp KQorICAgKGVsc2UgI2YpKSkKKworKGRlZmluZSB0ZXN0LXJlYWQtZXZhbC1zdHJpbmcKKyAg KGNhc2UtbGFtYmRhCisgICAgKChzdHJpbmcpCisgICAgICh0ZXN0LXJlYWQtZXZhbC1zdHJp bmcgc3RyaW5nIChkZWZhdWx0LW1vZHVsZSkpKQorICAgICgoc3RyaW5nIGVudikKKyAgICAg KGxldCogKChwb3J0IChvcGVuLWlucHV0LXN0cmluZyBzdHJpbmcpKQorICAgICAgICAgICAg KGZvcm0gKHJlYWQgcG9ydCkpKQorICAgICAgIChpZiAoZW9mLW9iamVjdD8gKHJlYWQtY2hh ciBwb3J0KSkKKyAgICAgICAgICAgKGlmIGVudgorICAgICAgICAgICAgICAgKGV2YWwgZm9y bSBlbnYpCisgICAgICAgICAgICAgICAoZXZhbCBmb3JtKSkKKyAgICAgICAgICAgKGVycm9y ICIobm90IGF0IGVvZikiKSkpKSkpCisKKwwKKzs7OyBUZXN0IHJ1bm5lciBjb250cm9sIGZs b3cKKworKGRlZmluZS1zeW50YXggdGVzdC13aXRoLXJ1bm5lcgorICAoc3ludGF4LXJ1bGVz ICgpCisgICAgKChfIDxydW5uZXI+IDxib2R5PiAuIDxib2R5PiopCisgICAgIChsZXQgKChz YXZlZC1ydW5uZXIgKHRlc3QtcnVubmVyLWN1cnJlbnQpKSkKKyAgICAgICAoZHluYW1pYy13 aW5kCisgICAgICAgICAobGFtYmRhICgpICh0ZXN0LXJ1bm5lci1jdXJyZW50IDxydW5uZXI+ KSkKKyAgICAgICAgIChsYW1iZGEgKCkgPGJvZHk+IC4gPGJvZHk+KikKKyAgICAgICAgIChs YW1iZGEgKCkgKHRlc3QtcnVubmVyLWN1cnJlbnQgc2F2ZWQtcnVubmVyKSkpKSkpKQorCiso ZGVmaW5lICh0ZXN0LWFwcGx5IGZpcnN0IC4gcmVzdCkKKyAgKGxldCAoKHJ1bm5lciAoaWYg KHRlc3QtcnVubmVyPyBmaXJzdCkKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QKKyAgICAg ICAgICAgICAgICAgICAgKG9yICh0ZXN0LXJ1bm5lci1jdXJyZW50KSAodGVzdC1ydW5uZXIt Y3JlYXRlKSkpKQorICAgICAgICAocnVuLWxpc3QgKGlmICh0ZXN0LXJ1bm5lcj8gZmlyc3Qp CisgICAgICAgICAgICAgICAgICAgICAgKGRyb3AtcmlnaHQgcmVzdCAxKQorICAgICAgICAg ICAgICAgICAgICAgIChjb25zIGZpcnN0IChkcm9wLXJpZ2h0IHJlc3QgMSkpKSkKKyAgICAg ICAgKHByb2MgKGxhc3QgcmVzdCkpKQorICAgICh0ZXN0LXdpdGgtcnVubmVyIHJ1bm5lcgor ICAgICAgKGxldCAoKHNhdmVkLXJ1bi1saXN0ICgldGVzdC1ydW5uZXItcnVuLWxpc3QgcnVu bmVyKSkpCisgICAgICAgICgldGVzdC1ydW5uZXItcnVuLWxpc3QhIHJ1bm5lciBydW4tbGlz dCkKKyAgICAgICAgKHByb2MpCisgICAgICAgICgldGVzdC1ydW5uZXItcnVuLWxpc3QhIHJ1 bm5lciBzYXZlZC1ydW4tbGlzdCkpKSkpCisKKwwKKzs7OyBJbmRpY2F0ZSBzdWNjZXNzL2Zh aWx1cmUgdmlhIGV4aXQgc3RhdHVzCisKKyhkZWZpbmUgKHRlc3QtZXhpdCkKKyAgKGxldCAo KHJ1bm5lciAodGVzdC1ydW5uZXItY3VycmVudCkpKQorICAgICh3aGVuIChub3QgcnVubmVy KQorICAgICAgKGVycm9yICJObyB0ZXN0IHJ1bm5lciBpbnN0YWxsZWQuICBNaWdodCBoYXZl IGJlZW4gYXV0by1yZW1vdmVkCitieSB0ZXN0LWVuZCBpZiB5b3UgaGFkIG5vdCBpbnN0YWxs ZWQgb25lIGV4cGxpY2l0bHkuIikpCisgICAgKGlmIChhbmQgKHplcm8/ICh0ZXN0LXJ1bm5l ci14cGFzcy1jb3VudCBydW5uZXIpKQorICAgICAgICAgICAgICh6ZXJvPyAodGVzdC1ydW5u ZXItZmFpbC1jb3VudCBydW5uZXIpKSkKKyAgICAgICAgKGV4aXQgMCkKKyAgICAgICAgKGV4 aXQgMSkpKSkKKworOzs7IGV4ZWN1dGlvbi5zY20gZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9t b2R1bGUvc3JmaS9zcmZpLTY0L3NvdXJjZS1pbmZvLmJvZHkuc2NtIGIvbW9kdWxlL3NyZmkv c3JmaS02NC9zb3VyY2UtaW5mby5ib2R5LnNjbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAuLjY4NDg3MzU4NwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZS9zcmZp L3NyZmktNjQvc291cmNlLWluZm8uYm9keS5zY20KQEAgLTAsMCArMSw4OCBAQAorOzsgQ29w eXJpZ2h0IChjKSAyMDE1IFRheWxhbiBVbHJpY2ggQmF5xLFybMSxL0thbW1lciA8dGF5bGFu YmF5aXJsaUBnbWFpbC5jb20+Cis7OworOzsgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKzs7IG9idGFpbmluZyBhIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCis7OyBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0Cis7 OyByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwKKzs7IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworOzsgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKzs7IGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cis7 OworOzsgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2Ugc2hhbGwgYmUKKzs7IGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorOzsKKzs7IFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorOzsgRVhQ UkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GCis7OyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORAorOzsgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworOzsgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCis7OyBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9V VCBPRiBPUiBJTgorOzsgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorOzsgU09GVFdBUkUuCisKKzs7OyBJbiBzb21l IHN5c3RlbXMsIGEgbWFjcm8gdXNlIGxpa2UgKHNvdXJjZS1pbmZvIC4uLiksIHRoYXQgcmVz aWRlcyBpbiBhCis7Ozsgc3ludGF4LXJ1bGVzIG1hY3JvIGJvZHksIGZpcnN0IGdldHMgaW5z ZXJ0ZWQgaW50byB0aGUgcGxhY2Ugd2hlcmUgdGhlCis7Ozsgc3ludGF4LXJ1bGVzIG1hY3Jv IHdhcyB1c2VkLCBhbmQgdGhlbiB0aGUgdHJhbnNmb3JtZXIgb2YgJ3NvdXJjZS1pbmZvJyBp cworOzs7IGNhbGxlZCB3aXRoIGEgc3ludGF4IG9iamVjdCB0aGF0IGhhcyB0aGUgc291cmNl IGxvY2F0aW9uIGluZm9ybWF0aW9uIG9mIHRoYXQKKzs7OyBwb3NpdGlvbi4gIFRoYXQgd29y a3MgZmluZSB3aGVuIHRoZSB1c2VyIGNhbGxzIGUuZy4gKHRlc3QtYXNzZXJ0IC4uLiksIHdo b3NlCis7OzsgYm9keSBjb250YWlucyAoc291cmNlLWluZm8gLi4uKTsgdGhlIHVzZXIgZ2V0 cyB0aGUgc291cmNlIGxvY2F0aW9uIG9mIHRoZQorOzs7ICh0ZXN0LWFzc2VydCAuLi4pIGNh bGwgYXMgaW50ZW5kZWQsIGFuZCBub3QgdGhlIHNvdXJjZSBsb2NhdGlvbiBvZiB0aGUgcmVh bAorOzs7IChzb3VyY2UtaW5mbyAuLi4pIGNhbGwuCisKKzs7OyBJbiBvdGhlciBzeXN0ZW1z LCAqZmlyc3QqIHRoZSAoc291cmNlLWluZm8gLi4uKSBpcyBwcm9jZXNzZWQgdG8gZ2V0IGl0 cyByZWFsCis7OzsgcG9zaXRpb24sIHdoaWNoIGlzIHdpdGhpbiB0aGUgYm9keSBvZiBhIHN5 bnRheC1ydWxlcyBtYWNybyBsaWtlIHRlc3QtYXNzZXJ0LAorOzs7IHNvIG5vIG1hdHRlciB3 aGVyZSB0aGUgdXNlciBjYWxscyAodGVzdC1hc3NlcnQgLi4uKSwgdGhleSBnZXQgc291cmNl Cis7OzsgbG9jYXRpb24gaW5mb3JtYXRpb24gb2Ygd2hlcmUgd2UgZGVmaW5lZCB0ZXN0LWFz c2VydCB3aXRoIHRoZSBjYWxsIHRvCis7OzsgKHNvdXJjZS1pbmZvIC4uLikgaW4gaXRzIGJv ZHkuICBUaGF0J3MgYXJndWFibHkgbW9yZSBjb3JyZWN0IGJlaGF2aW9yLAorOzs7IGFsdGhv dWdoIGluIHRoaXMgY2FzZSBpdCBtYWtlcyBvdXIgam9iIGEgYml0IGhhcmRlcjsgd2UgbmVl ZCB0byBnZXQgdGhlCis7Ozsgc291cmNlIGxvY2F0aW9uIGZyb20gYW4gYXJndW1lbnQgdG8g J3NvdXJjZS1pbmZvJyBpbnN0ZWFkLgorCisoZGVmaW5lIChjYW5vbmljYWwtc3ludGF4IGZv cm0gYXJnKQorICAoY29uZC1leHBhbmQKKyAgIChrYXdhIGFyZykKKyAgIChndWlsZS0yIGZv cm0pCisgICAoZWxzZSAjZikpKQorCisoY29uZC1leHBhbmQKKyAoKG9yIGthd2EgZ3VpbGUt MikKKyAgKGRlZmluZS1zeW50YXggc291cmNlLWluZm8KKyAgICAobGFtYmRhIChzdHgpCisg ICAgICAoc3ludGF4LWNhc2Ugc3R4ICgpCisgICAgICAgICgoXyA8eD4pCisgICAgICAgICAo bGV0KiAoKHN0eCAoY2Fub25pY2FsLXN5bnRheCBzdHggKHN5bnRheCA8eD4pKSkKKyAgICAg ICAgICAgICAgICAoZmlsZSAoc3ludGF4LXNvdXJjZS1maWxlIHN0eCkpCisgICAgICAgICAg ICAgICAgKGxpbmUgKHN5bnRheC1zb3VyY2UtbGluZSBzdHgpKSkKKyAgICAgICAgICAgKHF1 YXNpc3ludGF4CisgICAgICAgICAgICAoY29ucyAodW5zeW50YXggZmlsZSkgKHVuc3ludGF4 IGxpbmUpKSkpKSkpKSkKKyAoZWxzZQorICAoZGVmaW5lLXN5bnRheCBzb3VyY2UtaW5mbwor ICAgIChzeW50YXgtcnVsZXMgKCkKKyAgICAgICgoXyA8eD4pCisgICAgICAgI2YpKSkpKQor CisoZGVmaW5lIChzeW50YXgtc291cmNlLWZpbGUgc3R4KQorICAoY29uZC1leHBhbmQKKyAg IChrYXdhCisgICAgKHN5bnRheC1zb3VyY2Ugc3R4KSkKKyAgIChndWlsZS0yCisgICAgKGxl dCAoKHNvdXJjZSAoc3ludGF4LXNvdXJjZSBzdHgpKSkKKyAgICAgIChhbmQgc291cmNlIChh c3NxLXJlZiBzb3VyY2UgJ2ZpbGVuYW1lKSkpKQorICAgKGVsc2UKKyAgICAjZikpKQorCiso ZGVmaW5lIChzeW50YXgtc291cmNlLWxpbmUgc3R4KQorICAoY29uZC1leHBhbmQKKyAgIChr YXdhCisgICAgKHN5bnRheC1saW5lIHN0eCkpCisgICAoZ3VpbGUtMgorICAgIChsZXQgKChz b3VyY2UgKHN5bnRheC1zb3VyY2Ugc3R4KSkpCisgICAgICAoYW5kIHNvdXJjZSAoYXNzcS1y ZWYgc291cmNlICdsaW5lKSkpKQorICAgKGVsc2UKKyAgICAjZikpKQorCisoZGVmaW5lIChz ZXQtc291cmNlLWluZm8hIHJ1bm5lciBzb3VyY2UtaW5mbykKKyAgKHdoZW4gc291cmNlLWlu Zm8KKyAgICAodGVzdC1yZXN1bHQtc2V0ISBydW5uZXIgJ3NvdXJjZS1maWxlIChjYXIgc291 cmNlLWluZm8pKQorICAgICh0ZXN0LXJlc3VsdC1zZXQhIHJ1bm5lciAnc291cmNlLWxpbmUg KGNkciBzb3VyY2UtaW5mbykpKSkKKworOzs7IHNvdXJjZS1pbmZvLmJvZHkuc2NtIGVuZHMg aGVyZQpkaWZmIC0tZ2l0IGEvbW9kdWxlL3NyZmkvc3JmaS02NC90ZXN0LXJ1bm5lci1zaW1w bGUuYm9keS5zY20gYi9tb2R1bGUvc3JmaS9zcmZpLTY0L3Rlc3QtcnVubmVyLXNpbXBsZS5i b2R5LnNjbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjg3MGIzMTRk YwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZS9zcmZpL3NyZmktNjQvdGVzdC1ydW5uZXIt c2ltcGxlLmJvZHkuc2NtCkBAIC0wLDAgKzEsMTczIEBACis7OyBDb3B5cmlnaHQgKGMpIDIw MDUsIDIwMDYsIDIwMDcsIDIwMTIsIDIwMTMgUGVyIEJvdGhuZXIKKzs7IEFkZGVkICJmdWxs IiBzdXBwb3J0IGZvciBDaGlja2VuLCBHYXVjaGUsIEd1aWxlIGFuZCBTSVNDLgorOzsgICBB bGV4IFNoaW5uLCBDb3B5cmlnaHQgKGMpIDIwMDUuCis7OyBNb2RpZmllZCBmb3IgU2NoZW1l IFNwaGVyZXMgYnkgw4FsdmFybyBDYXN0cm8tQ2FzdGlsbGEsIENvcHlyaWdodCAoYykgMjAx Mi4KKzs7IFN1cHBvcnQgZm9yIEd1aWxlIDIgYnkgTWFyayBIIFdlYXZlciA8bWh3QG5ldHJp cy5vcmc+LCBDb3B5cmlnaHQgKGMpIDIwMTQuCis7OyBSZWZhY3RvcmVkIGJ5IFRheWxhbiBV bHJpY2ggQmF5xLFybMSxL0thbW1lciwgQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE1LgorOzsK Kzs7IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uCis7OyBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorOzsgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorOzsgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksCis7OyBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2Vs bCBjb3BpZXMKKzs7IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlIFNvZnR3YXJlIGlzCis7OyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorOzsKKzs7IFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCis7OyBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0 d2FyZS4KKzs7Cis7OyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKzs7IEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorOzsgTUVSQ0hBTlRB QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKzs7IE5PTklO RlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMKKzs7IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorOzsgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKzs7IENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBU SEUKKzs7IFNPRlRXQVJFLgorCis7OzsgSGVscGVycworCisoZGVmaW5lIChzdHJpbmctam9p biBzdHJpbmdzIGRlbGltaXRlcikKKyAgKGlmIChudWxsPyBzdHJpbmdzKQorICAgICAgIiIK KyAgICAgIChsZXQgbG9vcCAoKHJlc3VsdCAoY2FyIHN0cmluZ3MpKQorICAgICAgICAgICAg ICAgICAocmVzdCAoY2RyIHN0cmluZ3MpKSkKKyAgICAgICAgKGlmIChudWxsPyByZXN0KQor ICAgICAgICAgICAgcmVzdWx0CisgICAgICAgICAgICAobG9vcCAoc3RyaW5nLWFwcGVuZCBy ZXN1bHQgZGVsaW1pdGVyIChjYXIgcmVzdCkpCisgICAgICAgICAgICAgICAgICAoY2RyIHJl c3QpKSkpKSkKKworKGRlZmluZSAodHJ1bmNhdGUtc3RyaW5nIHN0cmluZyBsZW5ndGgpCisg IChkZWZpbmUgKG5ld2xpbmUtPnNwYWNlIGMpIChpZiAoY2hhcj0/ICNcbmV3bGluZSBjKSAj XHNwYWNlIGMpKQorICAobGV0KiAoKHN0cmluZyAoc3RyaW5nLW1hcCBuZXdsaW5lLT5zcGFj ZSBzdHJpbmcpKQorICAgICAgICAgKGZpbGwgIi4uLiIpCisgICAgICAgICAoZmlsbC1sZW4g KHN0cmluZy1sZW5ndGggZmlsbCkpCisgICAgICAgICAoc3RyaW5nLWxlbiAoc3RyaW5nLWxl bmd0aCBzdHJpbmcpKSkKKyAgICAoaWYgKDw9IHN0cmluZy1sZW4gKCsgbGVuZ3RoIGZpbGwt bGVuKSkKKyAgICAgICAgc3RyaW5nCisgICAgICAgIChsZXQtdmFsdWVzICgoKHEgcikgKGZs b29yLyBsZW5ndGggNCkpKQorICAgICAgICAgIDs7IExlZnQgcGFydCBnZXRzIDMvNCBwbHVz IHRoZSByZW1haW5kZXIuCisgICAgICAgICAgKGxldCAoKGxlZnQtZW5kICgrICgqIHEgMykg cikpCisgICAgICAgICAgICAgICAgKHJpZ2h0LXN0YXJ0ICgtIHN0cmluZy1sZW4gcSkpKQor ICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgKHN1YnN0cmluZyBzdHJpbmcgMCBsZWZ0LWVu ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzdWJzdHJpbmcgc3RyaW5nIHJpZ2h0LXN0YXJ0IHN0cmluZy1sZW4pKSkp KSkpCisKKyhkZWZpbmUgKHByaW50IHJ1bm5lciBmb3JtYXQtc3RyaW5nIC4gYXJncykKKyAg KGFwcGx5IGZvcm1hdCAjdCBmb3JtYXQtc3RyaW5nIGFyZ3MpCisgIChsZXQgKChwb3J0ICgl dGVzdC1ydW5uZXItbG9nLXBvcnQgcnVubmVyKSkpCisgICAgKHdoZW4gcG9ydAorICAgICAg KGFwcGx5IGZvcm1hdCBwb3J0IGZvcm1hdC1zdHJpbmcgYXJncykpKSkKKworOzs7IE1haW4K KworKGRlZmluZSB0ZXN0LXJ1bm5lci1zaW1wbGUKKyAgKGNhc2UtbGFtYmRhCisgICAoKCkK KyAgICAodGVzdC1ydW5uZXItc2ltcGxlICNmKSkKKyAgICgobG9nLWZpbGUpCisgICAgKGxl dCAoKHJ1bm5lciAodGVzdC1ydW5uZXItbnVsbCkpKQorICAgICAgKHRlc3QtcnVubmVyLXJl c2V0IHJ1bm5lcikKKyAgICAgICh0ZXN0LXJ1bm5lci1vbi1ncm91cC1iZWdpbiEgICAgIHJ1 bm5lciB0ZXN0LW9uLWdyb3VwLWJlZ2luLXNpbXBsZSkKKyAgICAgICh0ZXN0LXJ1bm5lci1v bi1ncm91cC1lbmQhICAgICAgIHJ1bm5lciB0ZXN0LW9uLWdyb3VwLWVuZC1zaW1wbGUpCisg ICAgICAodGVzdC1ydW5uZXItb24tZmluYWwhICAgICAgICAgICBydW5uZXIgdGVzdC1vbi1m aW5hbC1zaW1wbGUpCisgICAgICAodGVzdC1ydW5uZXItb24tdGVzdC1iZWdpbiEgICAgICBy dW5uZXIgdGVzdC1vbi10ZXN0LWJlZ2luLXNpbXBsZSkKKyAgICAgICh0ZXN0LXJ1bm5lci1v bi10ZXN0LWVuZCEgICAgICAgIHJ1bm5lciB0ZXN0LW9uLXRlc3QtZW5kLXNpbXBsZSkKKyAg ICAgICh0ZXN0LXJ1bm5lci1vbi1iYWQtY291bnQhICAgICAgIHJ1bm5lciB0ZXN0LW9uLWJh ZC1jb3VudC1zaW1wbGUpCisgICAgICAodGVzdC1ydW5uZXItb24tYmFkLWVuZC1uYW1lISAg ICBydW5uZXIgdGVzdC1vbi1iYWQtZW5kLW5hbWUtc2ltcGxlKQorICAgICAgKCV0ZXN0LXJ1 bm5lci1vbi1iYWQtZXJyb3ItdHlwZSEgcnVubmVyIG9uLWJhZC1lcnJvci10eXBlKQorICAg ICAgKCV0ZXN0LXJ1bm5lci1sb2ctZmlsZSEgICAgICAgICAgcnVubmVyIGxvZy1maWxlKQor ICAgICAgcnVubmVyKSkpKQorCisod2hlbiAobm90ICh0ZXN0LXJ1bm5lci1mYWN0b3J5KSkK KyAgKHRlc3QtcnVubmVyLWZhY3RvcnkgdGVzdC1ydW5uZXItc2ltcGxlKSkKKworKGRlZmlu ZSAodGVzdC1vbi1ncm91cC1iZWdpbi1zaW1wbGUgcnVubmVyIG5hbWUgY291bnQpCisgICh3 aGVuIChudWxsPyAodGVzdC1ydW5uZXItZ3JvdXAtc3RhY2sgcnVubmVyKSkKKyAgICAobWF5 YmUtc3RhcnQtbG9nZ2luZyBydW5uZXIpCisgICAgKHByaW50IHJ1bm5lciAiVGVzdCBzdWl0 ZSBiZWdpbjogfmF+JSIgbmFtZSkpKQorCisoZGVmaW5lICh0ZXN0LW9uLWdyb3VwLWVuZC1z aW1wbGUgcnVubmVyKQorICAobGV0ICgobmFtZSAoY2FyICh0ZXN0LXJ1bm5lci1ncm91cC1z dGFjayBydW5uZXIpKSkpCisgICAgKHdoZW4gKD0gMSAobGVuZ3RoICh0ZXN0LXJ1bm5lci1n cm91cC1zdGFjayBydW5uZXIpKSkKKyAgICAgIChwcmludCBydW5uZXIgIlRlc3Qgc3VpdGUg ZW5kOiB+YX4lIiBuYW1lKSkpKQorCisoZGVmaW5lICh0ZXN0LW9uLWZpbmFsLXNpbXBsZSBy dW5uZXIpCisgIChwcmludCBydW5uZXIgIlBhc3NlczogICAgICAgICAgICB+YVxuIiAodGVz dC1ydW5uZXItcGFzcy1jb3VudCBydW5uZXIpKQorICAocHJpbnQgcnVubmVyICJFeHBlY3Rl ZCBmYWlsdXJlczogfmFcbiIgKHRlc3QtcnVubmVyLXhmYWlsLWNvdW50IHJ1bm5lcikpCisg IChwcmludCBydW5uZXIgIkZhaWx1cmVzOiAgICAgICAgICB+YVxuIiAodGVzdC1ydW5uZXIt ZmFpbC1jb3VudCBydW5uZXIpKQorICAocHJpbnQgcnVubmVyICJVbmV4cGVjdGVkIHBhc3Nl czogfmFcbiIgKHRlc3QtcnVubmVyLXhwYXNzLWNvdW50IHJ1bm5lcikpCisgIChwcmludCBy dW5uZXIgIlNraXBwZWQgdGVzdHM6ICAgICB+YX4lIiAodGVzdC1ydW5uZXItc2tpcC1jb3Vu dCBydW5uZXIpKQorICAobWF5YmUtZmluaXNoLWxvZ2dpbmcgcnVubmVyKSkKKworKGRlZmlu ZSAobWF5YmUtc3RhcnQtbG9nZ2luZyBydW5uZXIpCisgIChsZXQgKChsb2ctZmlsZSAoJXRl c3QtcnVubmVyLWxvZy1maWxlIHJ1bm5lcikpKQorICAgICh3aGVuIGxvZy1maWxlCisgICAg ICA7OyBUaGUgcG9zc2libGUgcmFjZS1jb25kaXRpb24gaGVyZSBkb2Vzbid0IGJvdGhlciB1 cy4KKyAgICAgICh3aGVuIChmaWxlLWV4aXN0cz8gbG9nLWZpbGUpCisgICAgICAgIChkZWxl dGUtZmlsZSBsb2ctZmlsZSkpCisgICAgICAoJXRlc3QtcnVubmVyLWxvZy1wb3J0ISBydW5u ZXIgKG9wZW4tb3V0cHV0LWZpbGUgbG9nLWZpbGUpKQorICAgICAgKHByaW50IHJ1bm5lciAi V3JpdGluZyBsb2cgZmlsZTogfmF+JSIgbG9nLWZpbGUpKSkpCisKKyhkZWZpbmUgKG1heWJl LWZpbmlzaC1sb2dnaW5nIHJ1bm5lcikKKyAgKGxldCAoKGxvZy1maWxlICgldGVzdC1ydW5u ZXItbG9nLWZpbGUgcnVubmVyKSkpCisgICAgKHdoZW4gbG9nLWZpbGUKKyAgICAgIChwcmlu dCBydW5uZXIgIldyb3RlIGxvZyBmaWxlOiB+YX4lIiBsb2ctZmlsZSkKKyAgICAgIChjbG9z ZS1vdXRwdXQtcG9ydCAoJXRlc3QtcnVubmVyLWxvZy1wb3J0IHJ1bm5lcikpKSkpCisKKyhk ZWZpbmUgKHRlc3Qtb24tdGVzdC1iZWdpbi1zaW1wbGUgcnVubmVyKQorICAodmFsdWVzKSkK KworKGRlZmluZSAodGVzdC1vbi10ZXN0LWVuZC1zaW1wbGUgcnVubmVyKQorICAobGV0KiAo KHJlc3VsdC1raW5kICh0ZXN0LXJlc3VsdC1raW5kIHJ1bm5lcikpCisgICAgICAgICAocmVz dWx0LWtpbmQtbmFtZSAoY2FzZSByZXN1bHQta2luZAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKHBhc3MpICJQQVNTIikgKChmYWlsKSAiRkFJTCIpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgoeHBhc3MpICJYUEFTUyIpICgoeGZhaWwpICJYRkFJTCIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoc2tpcCkgIlNLSVAiKSkpCisgICAgICAg ICAobmFtZSAobGV0ICgobmFtZSAodGVzdC1ydW5uZXItdGVzdC1uYW1lIHJ1bm5lcikpKQor ICAgICAgICAgICAgICAgICAoaWYgKHN0cmluZz0/ICIiIG5hbWUpCisgICAgICAgICAgICAg ICAgICAgICAodHJ1bmNhdGUtc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgKGZvcm1h dCAjZiAifmEiICh0ZXN0LXJlc3VsdC1yZWYgcnVubmVyICdzb3VyY2UtZm9ybSkpCisgICAg ICAgICAgICAgICAgICAgICAgMzApCisgICAgICAgICAgICAgICAgICAgICBuYW1lKSkpCisg ICAgICAgICAobGFiZWwgKHN0cmluZy1qb2luIChhcHBlbmQgKHRlc3QtcnVubmVyLWdyb3Vw LXBhdGggcnVubmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs aXN0IG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiAiKSkpCisgICAg KHByaW50IHJ1bm5lciAiW35hXSB+YX4lIiByZXN1bHQta2luZC1uYW1lIGxhYmVsKQorICAg ICh3aGVuIChtZW1xIHJlc3VsdC1raW5kICcoZmFpbCB4cGFzcykpCisgICAgICAobGV0ICgo bmlsIChjb25zICNmICNmKSkpCisgICAgICAgIChkZWZpbmUgKGZvdW5kPyB2YWx1ZSkKKyAg ICAgICAgICAobm90IChlcT8gbmlsIHZhbHVlKSkpCisgICAgICAgIChkZWZpbmUgKG1heWJl LXByaW50IHZhbHVlIG1lc3NhZ2UpCisgICAgICAgICAgKHdoZW4gKGZvdW5kPyB2YWx1ZSkK KyAgICAgICAgICAgIChwcmludCBydW5uZXIgbWVzc2FnZSB2YWx1ZSkpKQorICAgICAgICAo bGV0ICgoZmlsZSAodGVzdC1yZXN1bHQtcmVmIHJ1bm5lciAnc291cmNlLWZpbGUgIih1bmtu b3duIGZpbGUpIikpCisgICAgICAgICAgICAgIChsaW5lICh0ZXN0LXJlc3VsdC1yZWYgcnVu bmVyICdzb3VyY2UtbGluZSAiKHVua25vd24gbGluZSkiKSkKKyAgICAgICAgICAgICAgKGV4 cHJlc3Npb24gKHRlc3QtcmVzdWx0LXJlZiBydW5uZXIgJ3NvdXJjZS1mb3JtKSkKKyAgICAg ICAgICAgICAgKGV4cGVjdGVkLXZhbHVlICh0ZXN0LXJlc3VsdC1yZWYgcnVubmVyICdleHBl Y3RlZC12YWx1ZSBuaWwpKQorICAgICAgICAgICAgICAoYWN0dWFsLXZhbHVlICh0ZXN0LXJl c3VsdC1yZWYgcnVubmVyICdhY3R1YWwtdmFsdWUgbmlsKSkKKyAgICAgICAgICAgICAgKGV4 cGVjdGVkLWVycm9yICh0ZXN0LXJlc3VsdC1yZWYgcnVubmVyICdleHBlY3RlZC1lcnJvciBu aWwpKQorICAgICAgICAgICAgICAoYWN0dWFsLWVycm9yICh0ZXN0LXJlc3VsdC1yZWYgcnVu bmVyICdhY3R1YWwtZXJyb3IgbmlsKSkpCisgICAgICAgICAgKHByaW50IHJ1bm5lciAifmE6 fmE6IH5zfiUiIGZpbGUgbGluZSBleHByZXNzaW9uKQorICAgICAgICAgIChtYXliZS1wcmlu dCBleHBlY3RlZC12YWx1ZSAiRXhwZWN0ZWQgdmFsdWU6IH5zfiUiKQorICAgICAgICAgICht YXliZS1wcmludCBleHBlY3RlZC1lcnJvciAiRXhwZWN0ZWQgZXJyb3I6IH5hfiUiKQorICAg ICAgICAgICh3aGVuIChvciAoZm91bmQ/IGV4cGVjdGVkLXZhbHVlKSAoZm91bmQ/IGV4cGVj dGVkLWVycm9yKSkKKyAgICAgICAgICAgIChtYXliZS1wcmludCBhY3R1YWwtdmFsdWUgIlJl dHVybmVkIHZhbHVlOiB+c34lIikpCisgICAgICAgICAgKG1heWJlLXByaW50IGFjdHVhbC1l cnJvciAiUmFpc2VkIGVycm9yOiB+YX4lIikKKyAgICAgICAgICAobmV3bGluZSkpKSkpKQor CisoZGVmaW5lICh0ZXN0LW9uLWJhZC1jb3VudC1zaW1wbGUgcnVubmVyIGNvdW50IGV4cGVj dGVkLWNvdW50KQorICAocHJpbnQgcnVubmVyICIqKiogVG90YWwgbnVtYmVyIG9mIHRlc3Rz IHdhcyB+YSBidXQgc2hvdWxkIGJlIH5hLiAqKip+JSIKKyAgICAgICAgICBjb3VudCBleHBl Y3RlZC1jb3VudCkKKyAgKHByaW50IHJ1bm5lcgorICAgICAgICAgIioqKiBEaXNjcmVwYW5j eSBpbmRpY2F0ZXMgdGVzdHN1aXRlIGVycm9yIG9yIGV4Y2VwdGlvbnMuICoqKn4lIikpCisK KyhkZWZpbmUgKHRlc3Qtb24tYmFkLWVuZC1uYW1lLXNpbXBsZSBydW5uZXIgYmVnaW4tbmFt ZSBlbmQtbmFtZSkKKyAgKGVycm9yIChmb3JtYXQgI2YgIlRlc3QtZW5kIFwifmFcIiBkb2Vz IG5vdCBtYXRjaCB0ZXN0LWJlZ2luIFwifmFcIi4iCisgICAgICAgICAgICAgICAgIGVuZC1u YW1lIGJlZ2luLW5hbWUpKSkKKworKGRlZmluZSAob24tYmFkLWVycm9yLXR5cGUgcnVubmVy IHR5cGUgZXJyb3IpCisgIChwcmludCBydW5uZXIgIldBUk5JTkc6IHVua25vd24gZXJyb3Ig dHlwZSBwcmVkaWNhdGU6IH5hfiUiIHR5cGUpCisgIChwcmludCBydW5uZXIgIiAgICAgICAg IGVycm9yIHdhczogfmF+JSIgZXJyb3IpKQorCis7OzsgdGVzdC1ydW5uZXItc2ltcGxlLnNj bSBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL21vZHVsZS9zcmZpL3NyZmktNjQvdGVzdC1ydW5u ZXIuYm9keS5zY20gYi9tb2R1bGUvc3JmaS9zcmZpLTY0L3Rlc3QtcnVubmVyLmJvZHkuc2Nt Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uYmRlN2U1MDJlCi0tLSAv ZGV2L251bGwKKysrIGIvbW9kdWxlL3NyZmkvc3JmaS02NC90ZXN0LXJ1bm5lci5ib2R5LnNj bQpAQCAtMCwwICsxLDE2OCBAQAorOzsgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2LCAyMDA3 LCAyMDEyLCAyMDEzIFBlciBCb3RobmVyCis7OyBBZGRlZCAiZnVsbCIgc3VwcG9ydCBmb3Ig Q2hpY2tlbiwgR2F1Y2hlLCBHdWlsZSBhbmQgU0lTQy4KKzs7ICAgQWxleCBTaGlubiwgQ29w eXJpZ2h0IChjKSAyMDA1LgorOzsgTW9kaWZpZWQgZm9yIFNjaGVtZSBTcGhlcmVzIGJ5IMOB bHZhcm8gQ2FzdHJvLUNhc3RpbGxhLCBDb3B5cmlnaHQgKGMpIDIwMTIuCis7OyBTdXBwb3J0 IGZvciBHdWlsZSAyIGJ5IE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPiwgQ29weXJp Z2h0IChjKSAyMDE0LgorOzsgUmVmYWN0b3JlZCBieSBUYXlsYW4gVWxyaWNoIEJhecSxcmzE sS9LYW1tZXIsIENvcHlyaWdodCAoYykgMjAxNCwgMjAxNS4KKzs7Cis7OyBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorOzsg b2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24KKzs7IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQKKzs7IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LAorOzsgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCis7OyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0 d2FyZSBpcworOzsgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKzs7Cis7OyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorOzsgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCis7OworOzsg VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsCis7OyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKzs7IE1FUkNIQU5UQUJJTElUWSwgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECis7OyBOT05JTkZSSU5HRU1FTlQuIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCis7OyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4KKzs7IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCis7OyBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCis7OyBTT0ZUV0FS RS4KKworDAorOzs7IFRoZSBkYXRhIHR5cGUKKworKGRlZmluZS1yZWNvcmQtdHlwZSA8dGVz dC1ydW5uZXI+CisgIChtYWtlLXRlc3QtcnVubmVyKSB0ZXN0LXJ1bm5lcj8KKworICAocmVz dWx0LWFsaXN0IHRlc3QtcmVzdWx0LWFsaXN0IHRlc3QtcmVzdWx0LWFsaXN0ISkKKworICAo cGFzcy1jb3VudCB0ZXN0LXJ1bm5lci1wYXNzLWNvdW50IHRlc3QtcnVubmVyLXBhc3MtY291 bnQhKQorICAoZmFpbC1jb3VudCB0ZXN0LXJ1bm5lci1mYWlsLWNvdW50IHRlc3QtcnVubmVy LWZhaWwtY291bnQhKQorICAoeHBhc3MtY291bnQgdGVzdC1ydW5uZXIteHBhc3MtY291bnQg dGVzdC1ydW5uZXIteHBhc3MtY291bnQhKQorICAoeGZhaWwtY291bnQgdGVzdC1ydW5uZXIt eGZhaWwtY291bnQgdGVzdC1ydW5uZXIteGZhaWwtY291bnQhKQorICAoc2tpcC1jb3VudCB0 ZXN0LXJ1bm5lci1za2lwLWNvdW50IHRlc3QtcnVubmVyLXNraXAtY291bnQhKQorICAodG90 YWwtY291bnQgJXRlc3QtcnVubmVyLXRvdGFsLWNvdW50ICV0ZXN0LXJ1bm5lci10b3RhbC1j b3VudCEpCisKKyAgOzsgU3RhY2sgKGxpc3QpIG9mIChjb3VudC1hdC1zdGFydCAuIGV4cGVj dGVkLWNvdW50KToKKyAgKGNvdW50LWxpc3QgJXRlc3QtcnVubmVyLWNvdW50LWxpc3QgJXRl c3QtcnVubmVyLWNvdW50LWxpc3QhKQorCisgIDs7IE5vcm1hbGx5ICNmLCBleGNlcHQgd2hl biBpbiBhIHRlc3QtYXBwbHkuCisgIChydW4tbGlzdCAldGVzdC1ydW5uZXItcnVuLWxpc3Qg JXRlc3QtcnVubmVyLXJ1bi1saXN0ISkKKworICAoc2tpcC1saXN0ICV0ZXN0LXJ1bm5lci1z a2lwLWxpc3QgJXRlc3QtcnVubmVyLXNraXAtbGlzdCEpCisgIChmYWlsLWxpc3QgJXRlc3Qt cnVubmVyLWZhaWwtbGlzdCAldGVzdC1ydW5uZXItZmFpbC1saXN0ISkKKworICAoc2tpcC1z YXZlICV0ZXN0LXJ1bm5lci1za2lwLXNhdmUgJXRlc3QtcnVubmVyLXNraXAtc2F2ZSEpCisg IChmYWlsLXNhdmUgJXRlc3QtcnVubmVyLWZhaWwtc2F2ZSAldGVzdC1ydW5uZXItZmFpbC1z YXZlISkKKworICAoZ3JvdXAtc3RhY2sgdGVzdC1ydW5uZXItZ3JvdXAtc3RhY2sgdGVzdC1y dW5uZXItZ3JvdXAtc3RhY2shKQorCisgIDs7IE5vdGU6IG9uLXRlc3QtYmVnaW4gYW5kIG9u LXRlc3QtZW5kIGFyZSB1bnJlbGF0ZWQgdG8gdGhlIHRlc3QtYmVnaW4gYW5kCisgIDs7IHRl c3QtZW5kIGZvcm1zIGluIHRoZSBleGVjdXRpb24gbGlicmFyeS4gIFRoZXkncmUgY2FsbGVk IGF0IHRoZQorICA7OyBiZWdpbm5pbmcvZW5kIG9mIGVhY2ggaW5kaXZpZHVhbCB0ZXN0LCB3 aGVyZWFzIHRoZSB0ZXN0LWJlZ2luIGFuZCB0ZXN0LWVuZAorICA7OyBmb3JtcyBkZW1hcmNh dGUgdGVzdCBncm91cHMuCisKKyAgKG9uLWdyb3VwLWJlZ2luIHRlc3QtcnVubmVyLW9uLWdy b3VwLWJlZ2luIHRlc3QtcnVubmVyLW9uLWdyb3VwLWJlZ2luISkKKyAgKG9uLXRlc3QtYmVn aW4gdGVzdC1ydW5uZXItb24tdGVzdC1iZWdpbiB0ZXN0LXJ1bm5lci1vbi10ZXN0LWJlZ2lu ISkKKyAgKG9uLXRlc3QtZW5kIHRlc3QtcnVubmVyLW9uLXRlc3QtZW5kIHRlc3QtcnVubmVy LW9uLXRlc3QtZW5kISkKKyAgKG9uLWdyb3VwLWVuZCB0ZXN0LXJ1bm5lci1vbi1ncm91cC1l bmQgdGVzdC1ydW5uZXItb24tZ3JvdXAtZW5kISkKKyAgKG9uLWZpbmFsIHRlc3QtcnVubmVy LW9uLWZpbmFsIHRlc3QtcnVubmVyLW9uLWZpbmFsISkKKyAgKG9uLWJhZC1jb3VudCB0ZXN0 LXJ1bm5lci1vbi1iYWQtY291bnQgdGVzdC1ydW5uZXItb24tYmFkLWNvdW50ISkKKyAgKG9u LWJhZC1lbmQtbmFtZSB0ZXN0LXJ1bm5lci1vbi1iYWQtZW5kLW5hbWUgdGVzdC1ydW5uZXIt b24tYmFkLWVuZC1uYW1lISkKKworICAob24tYmFkLWVycm9yLXR5cGUgJXRlc3QtcnVubmVy LW9uLWJhZC1lcnJvci10eXBlCisgICAgICAgICAgICAgICAgICAgICAldGVzdC1ydW5uZXIt b24tYmFkLWVycm9yLXR5cGUhKQorCisgIChhdXgtdmFsdWUgdGVzdC1ydW5uZXItYXV4LXZh bHVlIHRlc3QtcnVubmVyLWF1eC12YWx1ZSEpCisKKyAgKGF1dG8taW5zdGFsbGVkICV0ZXN0 LXJ1bm5lci1hdXRvLWluc3RhbGxlZD8gJXRlc3QtcnVubmVyLWF1dG8taW5zdGFsbGVkISkK KworICAobG9nLWZpbGUgJXRlc3QtcnVubmVyLWxvZy1maWxlICV0ZXN0LXJ1bm5lci1sb2ct ZmlsZSEpCisgIChsb2ctcG9ydCAldGVzdC1ydW5uZXItbG9nLXBvcnQgJXRlc3QtcnVubmVy LWxvZy1wb3J0ISkpCisKKyhkZWZpbmUgKHRlc3QtcnVubmVyLWdyb3VwLXBhdGggcnVubmVy KQorICAocmV2ZXJzZSAodGVzdC1ydW5uZXItZ3JvdXAtc3RhY2sgcnVubmVyKSkpCisKKyhk ZWZpbmUgKHRlc3QtcnVubmVyLXJlc2V0IHJ1bm5lcikKKyAgKHRlc3QtcmVzdWx0LWFsaXN0 ISBydW5uZXIgJygpKQorICAodGVzdC1ydW5uZXItcGFzcy1jb3VudCEgcnVubmVyIDApCisg ICh0ZXN0LXJ1bm5lci1mYWlsLWNvdW50ISBydW5uZXIgMCkKKyAgKHRlc3QtcnVubmVyLXhw YXNzLWNvdW50ISBydW5uZXIgMCkKKyAgKHRlc3QtcnVubmVyLXhmYWlsLWNvdW50ISBydW5u ZXIgMCkKKyAgKHRlc3QtcnVubmVyLXNraXAtY291bnQhIHJ1bm5lciAwKQorICAoJXRlc3Qt cnVubmVyLXRvdGFsLWNvdW50ISBydW5uZXIgMCkKKyAgKCV0ZXN0LXJ1bm5lci1jb3VudC1s aXN0ISBydW5uZXIgJygpKQorICAoJXRlc3QtcnVubmVyLXJ1bi1saXN0ISBydW5uZXIgI2Yp CisgICgldGVzdC1ydW5uZXItc2tpcC1saXN0ISBydW5uZXIgJygpKQorICAoJXRlc3QtcnVu bmVyLWZhaWwtbGlzdCEgcnVubmVyICcoKSkKKyAgKCV0ZXN0LXJ1bm5lci1za2lwLXNhdmUh IHJ1bm5lciAnKCkpCisgICgldGVzdC1ydW5uZXItZmFpbC1zYXZlISBydW5uZXIgJygpKQor ICAodGVzdC1ydW5uZXItZ3JvdXAtc3RhY2shIHJ1bm5lciAnKCkpKQorCisoZGVmaW5lICh0 ZXN0LXJ1bm5lci1udWxsKQorICAoZGVmaW5lICh0ZXN0LW51bGwtY2FsbGJhY2sgLiBhcmdz KSAjZikKKyAgKGxldCAoKHJ1bm5lciAobWFrZS10ZXN0LXJ1bm5lcikpKQorICAgICh0ZXN0 LXJ1bm5lci1yZXNldCBydW5uZXIpCisgICAgKHRlc3QtcnVubmVyLW9uLWdyb3VwLWJlZ2lu ISBydW5uZXIgdGVzdC1udWxsLWNhbGxiYWNrKQorICAgICh0ZXN0LXJ1bm5lci1vbi1ncm91 cC1lbmQhIHJ1bm5lciB0ZXN0LW51bGwtY2FsbGJhY2spCisgICAgKHRlc3QtcnVubmVyLW9u LWZpbmFsISBydW5uZXIgdGVzdC1udWxsLWNhbGxiYWNrKQorICAgICh0ZXN0LXJ1bm5lci1v bi10ZXN0LWJlZ2luISBydW5uZXIgdGVzdC1udWxsLWNhbGxiYWNrKQorICAgICh0ZXN0LXJ1 bm5lci1vbi10ZXN0LWVuZCEgcnVubmVyIHRlc3QtbnVsbC1jYWxsYmFjaykKKyAgICAodGVz dC1ydW5uZXItb24tYmFkLWNvdW50ISBydW5uZXIgdGVzdC1udWxsLWNhbGxiYWNrKQorICAg ICh0ZXN0LXJ1bm5lci1vbi1iYWQtZW5kLW5hbWUhIHJ1bm5lciB0ZXN0LW51bGwtY2FsbGJh Y2spCisgICAgKCV0ZXN0LXJ1bm5lci1vbi1iYWQtZXJyb3ItdHlwZSEgcnVubmVyIHRlc3Qt bnVsbC1jYWxsYmFjaykKKyAgICAoJXRlc3QtcnVubmVyLWF1dG8taW5zdGFsbGVkISBydW5u ZXIgI2YpCisgICAgKCV0ZXN0LXJ1bm5lci1sb2ctZmlsZSEgcnVubmVyICNmKQorICAgICgl dGVzdC1ydW5uZXItbG9nLXBvcnQhIHJ1bm5lciAjZikKKyAgICBydW5uZXIpKQorCisMCis7 OzsgU3RhdGUKKworKGRlZmluZSB0ZXN0LXJlc3VsdC1yZWYKKyAgKGNhc2UtbGFtYmRhCisg ICAgKChydW5uZXIga2V5KQorICAgICAodGVzdC1yZXN1bHQtcmVmIHJ1bm5lciBrZXkgI2Yp KQorICAgICgocnVubmVyIGtleSBkZWZhdWx0KQorICAgICAobGV0ICgoZW50cnkgKGFzc3Eg a2V5ICh0ZXN0LXJlc3VsdC1hbGlzdCBydW5uZXIpKSkpCisgICAgICAgKGlmIGVudHJ5IChj ZHIgZW50cnkpIGRlZmF1bHQpKSkpKQorCisoZGVmaW5lICh0ZXN0LXJlc3VsdC1zZXQhIHJ1 bm5lciBrZXkgdmFsdWUpCisgIChsZXQqICgoYWxpc3QgKHRlc3QtcmVzdWx0LWFsaXN0IHJ1 bm5lcikpCisgICAgICAgICAoZW50cnkgKGFzc3Ega2V5IGFsaXN0KSkpCisgICAgKGlmIGVu dHJ5CisgICAgICAgIChzZXQtY2RyISBlbnRyeSB2YWx1ZSkKKyAgICAgICAgKHRlc3QtcmVz dWx0LWFsaXN0ISBydW5uZXIgKGNvbnMgKGNvbnMga2V5IHZhbHVlKSBhbGlzdCkpKSkpCisK KyhkZWZpbmUgKHRlc3QtcmVzdWx0LXJlbW92ZSBydW5uZXIga2V5KQorICAodGVzdC1yZXN1 bHQtYWxpc3QhIHJ1bm5lciAocmVtb3ZlIChsYW1iZGEgKGVudHJ5KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxPyBrZXkgKGNhciBlbnRyeSkpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LXJlc3VsdC1hbGlzdCBy dW5uZXIpKSkpCisKKyhkZWZpbmUgKHRlc3QtcmVzdWx0LWNsZWFyIHJ1bm5lcikKKyAgKHRl c3QtcmVzdWx0LWFsaXN0ISBydW5uZXIgJygpKSkKKworKGRlZmluZSAodGVzdC1ydW5uZXIt dGVzdC1uYW1lIHJ1bm5lcikKKyAgKG9yICh0ZXN0LXJlc3VsdC1yZWYgcnVubmVyICduYW1l KSAiIikpCisKKyhkZWZpbmUgdGVzdC1yZXN1bHQta2luZAorICAoY2FzZS1sYW1iZGEKKyAg ICAoKCkgKHRlc3QtcmVzdWx0LWtpbmQgKHRlc3QtcnVubmVyLWdldCkpKQorICAgICgocnVu bmVyKSAodGVzdC1yZXN1bHQtcmVmIHJ1bm5lciAncmVzdWx0LWtpbmQpKSkpCisKKyhkZWZp bmUgdGVzdC1wYXNzZWQ/CisgIChjYXNlLWxhbWJkYQorICAgICgoKSAodGVzdC1wYXNzZWQ/ ICh0ZXN0LXJ1bm5lci1nZXQpKSkKKyAgICAoKHJ1bm5lcikgKG1lbXEgKHRlc3QtcmVzdWx0 LWtpbmQgcnVubmVyKSAnKHBhc3MgeHBhc3MpKSkpKQorCisMCis7OzsgRmFjdG9yeSBhbmQg Y3VycmVudCBpbnN0YW5jZQorCisoZGVmaW5lIHRlc3QtcnVubmVyLWZhY3RvcnkgKG1ha2Ut cGFyYW1ldGVyICNmKSkKKworKGRlZmluZSAodGVzdC1ydW5uZXItY3JlYXRlKSAoKHRlc3Qt cnVubmVyLWZhY3RvcnkpKSkKKworKGRlZmluZSB0ZXN0LXJ1bm5lci1jdXJyZW50IChtYWtl LXBhcmFtZXRlciAjZikpCisKKyhkZWZpbmUgKHRlc3QtcnVubmVyLWdldCkKKyAgKG9yICh0 ZXN0LXJ1bm5lci1jdXJyZW50KQorICAgICAgKGVycm9yICJ0ZXN0LXJ1bm5lciBub3QgaW5p dGlhbGl6ZWQgLSB0ZXN0LWJlZ2luIG1pc3Npbmc/IikpKQorCis7OzsgdGVzdC1ydW5uZXIu c2NtIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvbW9kdWxlL3NyZmkvc3JmaS02NC90ZXN0aW5n LnNjbSBiL21vZHVsZS9zcmZpL3NyZmktNjQvdGVzdGluZy5zY20KZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGNkYWFiMTQwZi4uMDAwMDAwMDAwCi0tLSBhL21vZHVsZS9zcmZp L3NyZmktNjQvdGVzdGluZy5zY20KKysrIC9kZXYvbnVsbApAQCAtMSwxMDQ0ICswLDAgQEAK LTs7IENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiwgMjAwNywgMjAxMiwgMjAxMyBQZXIgQm90 aG5lcgotOzsgQWRkZWQgImZ1bGwiIHN1cHBvcnQgZm9yIENoaWNrZW4sIEdhdWNoZSwgR3Vp bGUgYW5kIFNJU0MuCi07OyAgIEFsZXggU2hpbm4sIENvcHlyaWdodCAoYykgMjAwNS4KLTs7 IE1vZGlmaWVkIGZvciBTY2hlbWUgU3BoZXJlcyBieSDDgWx2YXJvIENhc3Ryby1DYXN0aWxs YSwgQ29weXJpZ2h0IChjKSAyMDEyLgotOzsgU3VwcG9ydCBmb3IgR3VpbGUgMiBieSBNYXJr IEggV2VhdmVyIDxtaHdAbmV0cmlzLm9yZz4sIENvcHlyaWdodCAoYykgMjAxNC4KLTs7Ci07 OyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbgotOzsgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24KLTs7IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKLTs7IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LAotOzsgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwg Y29waWVzCi07OyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZSBTb2Z0d2FyZSBpcwotOzsgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLTs7Ci07OyBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotOzsgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCi07OwotOzsgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi07OyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLTs7IE1FUkNIQU5UQUJJ TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi07OyBOT05JTkZS SU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTCi07OyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KLTs7IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCi07OyBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhF Ci07OyBTT0ZUV0FSRS4KLQotKGNvbmQtZXhwYW5kCi0gKGNoaWNrZW4KLSAgKHJlcXVpcmUt ZXh0ZW5zaW9uIHN5bnRheC1jYXNlKSkKLSAoZ3VpbGUtMgotICAodXNlLW1vZHVsZXMgKHNy Zmkgc3JmaS05KQotICAgICAgICAgICAgICAgOzsgSW4gMi4wLjksIHNyZmktMzQgYW5kIHNy ZmktMzUgYXJlIG5vdCB3ZWxsIGludGVncmF0ZWQKLSAgICAgICAgICAgICAgIDs7IHdpdGgg ZWl0aGVyIEd1aWxlJ3MgbmF0aXZlIGV4Y2VwdGlvbnMgb3IgUjZSUyBleGNlcHRpb25zLgot ICAgICAgICAgICAgICAgOzsoc3JmaSBzcmZpLTM0KSAoc3JmaSBzcmZpLTM1KQotICAgICAg ICAgICAgICAgKHNyZmkgc3JmaS0zOSkpKQotIChndWlsZQotICAodXNlLW1vZHVsZXMgKGlj ZS05IHN5bmNhc2UpIChzcmZpIHNyZmktOSkKLQkgICAgICAgOzsoc3JmaSBzcmZpLTM0KSAo c3JmaSBzcmZpLTM1KSAtIG5vdCBpbiBHdWlsZSAxLjYuNwotCSAgICAgICAoc3JmaSBzcmZp LTM5KSkpCi0gKHNpc2MKLSAgKHJlcXVpcmUtZXh0ZW5zaW9uIChzcmZpIDkgMzQgMzUgMzkp KSkKLSAoa2F3YQotICAobW9kdWxlLWNvbXBpbGUtb3B0aW9ucyB3YXJuLXVuZGVmaW5lZC12 YXJpYWJsZTogI3QKLQkJCSAgd2Fybi1pbnZva2UtdW5rbm93bi1tZXRob2Q6ICN0KQotICAo cHJvdmlkZSAnc3JmaS02NCkKLSAgKHByb3ZpZGUgJ3Rlc3RpbmcpCi0gIChyZXF1aXJlICdz cmZpLTM0KQotICAocmVxdWlyZSAnc3JmaS0zNSkpCi0gKGVsc2UgKCkKLSAgKSkKLQotKGNv bmQtZXhwYW5kCi0gKGthd2EKLSAgKGRlZmluZS1zeW50YXggJXRlc3QtZXhwb3J0Ci0gICAg KHN5bnRheC1ydWxlcyAoKQotICAgICAgKCgldGVzdC1leHBvcnQgdGVzdC1iZWdpbiAuIG90 aGVyLW5hbWVzKQotICAgICAgIChtb2R1bGUtZXhwb3J0ICV0ZXN0LWJlZ2luIC4gb3RoZXIt bmFtZXMpKSkpKQotIChlbHNlCi0gIChkZWZpbmUtc3ludGF4ICV0ZXN0LWV4cG9ydAotICAg IChzeW50YXgtcnVsZXMgKCkKLSAgICAgICgoJXRlc3QtZXhwb3J0IC4gbmFtZXMpIChpZiAj ZiAjZikpKSkpKQotCi07OyBMaXN0IG9mIGV4cG9ydGVkIG5hbWVzCi0oJXRlc3QtZXhwb3J0 Ci0gdGVzdC1iZWdpbiA7OyBtdXN0IGJlIGxpc3RlZCBmaXJzdCwgc2luY2UgaW4gS2F3YSAo YXQgbGVhc3QpIGl0IGlzICJtYWdpYyIuCi0gdGVzdC1lbmQgdGVzdC1hc3NlcnQgdGVzdC1l cXYgdGVzdC1lcSB0ZXN0LWVxdWFsCi0gdGVzdC1hcHByb3hpbWF0ZSB0ZXN0LWFzc2VydCB0 ZXN0LWVycm9yIHRlc3QtYXBwbHkgdGVzdC13aXRoLXJ1bm5lcgotIHRlc3QtbWF0Y2gtbnRo IHRlc3QtbWF0Y2gtYWxsIHRlc3QtbWF0Y2gtYW55IHRlc3QtbWF0Y2gtbmFtZQotIHRlc3Qt c2tpcCB0ZXN0LWV4cGVjdC1mYWlsIHRlc3QtcmVhZC1ldmFsLXN0cmluZwotIHRlc3QtcnVu bmVyLWdyb3VwLXBhdGggdGVzdC1ncm91cCB0ZXN0LWdyb3VwLXdpdGgtY2xlYW51cAotIHRl c3QtcmVzdWx0LXJlZiB0ZXN0LXJlc3VsdC1zZXQhIHRlc3QtcmVzdWx0LWNsZWFyIHRlc3Qt cmVzdWx0LXJlbW92ZQotIHRlc3QtcmVzdWx0LWtpbmQgdGVzdC1wYXNzZWQ/Ci0gdGVzdC1s b2ctdG8tZmlsZQotIDsgTWlzYyB0ZXN0LXJ1bm5lciBmdW5jdGlvbnMKLSB0ZXN0LXJ1bm5l cj8gdGVzdC1ydW5uZXItcmVzZXQgdGVzdC1ydW5uZXItbnVsbAotIHRlc3QtcnVubmVyLXNp bXBsZSB0ZXN0LXJ1bm5lci1jdXJyZW50IHRlc3QtcnVubmVyLWZhY3RvcnkgdGVzdC1ydW5u ZXItZ2V0Ci0gdGVzdC1ydW5uZXItY3JlYXRlIHRlc3QtcnVubmVyLXRlc3QtbmFtZQotIDs7 IHRlc3QtcnVubmVyIGZpZWxkIHNldHRlciBhbmQgZ2V0dGVyIGZ1bmN0aW9ucyAtIHNlZSAl dGVzdC1yZWNvcmQtZGVmaW5lOgotIHRlc3QtcnVubmVyLXBhc3MtY291bnQgdGVzdC1ydW5u ZXItcGFzcy1jb3VudCEKLSB0ZXN0LXJ1bm5lci1mYWlsLWNvdW50IHRlc3QtcnVubmVyLWZh aWwtY291bnQhCi0gdGVzdC1ydW5uZXIteHBhc3MtY291bnQgdGVzdC1ydW5uZXIteHBhc3Mt Y291bnQhCi0gdGVzdC1ydW5uZXIteGZhaWwtY291bnQgdGVzdC1ydW5uZXIteGZhaWwtY291 bnQhCi0gdGVzdC1ydW5uZXItc2tpcC1jb3VudCB0ZXN0LXJ1bm5lci1za2lwLWNvdW50IQot IHRlc3QtcnVubmVyLWdyb3VwLXN0YWNrIHRlc3QtcnVubmVyLWdyb3VwLXN0YWNrIQotIHRl c3QtcnVubmVyLW9uLXRlc3QtYmVnaW4gdGVzdC1ydW5uZXItb24tdGVzdC1iZWdpbiEKLSB0 ZXN0LXJ1bm5lci1vbi10ZXN0LWVuZCB0ZXN0LXJ1bm5lci1vbi10ZXN0LWVuZCEKLSB0ZXN0 LXJ1bm5lci1vbi1ncm91cC1iZWdpbiB0ZXN0LXJ1bm5lci1vbi1ncm91cC1iZWdpbiEKLSB0 ZXN0LXJ1bm5lci1vbi1ncm91cC1lbmQgdGVzdC1ydW5uZXItb24tZ3JvdXAtZW5kIQotIHRl c3QtcnVubmVyLW9uLWZpbmFsIHRlc3QtcnVubmVyLW9uLWZpbmFsIQotIHRlc3QtcnVubmVy LW9uLWJhZC1jb3VudCB0ZXN0LXJ1bm5lci1vbi1iYWQtY291bnQhCi0gdGVzdC1ydW5uZXIt b24tYmFkLWVuZC1uYW1lIHRlc3QtcnVubmVyLW9uLWJhZC1lbmQtbmFtZSEKLSB0ZXN0LXJl c3VsdC1hbGlzdCB0ZXN0LXJlc3VsdC1hbGlzdCEKLSB0ZXN0LXJ1bm5lci1hdXgtdmFsdWUg dGVzdC1ydW5uZXItYXV4LXZhbHVlIQotIDs7IGRlZmF1bHQvc2ltcGxlIGNhbGwtYmFjayBm dW5jdGlvbnMsIHVzZWQgaW4gZGVmYXVsdCB0ZXN0LXJ1bm5lciwKLSA7OyBidXQgY2FuIGJl IGNhbGxlZCB0byBjb25zdHJ1Y3QgbW9yZSBjb21wbGV4IG9uZXMuCi0gdGVzdC1vbi1ncm91 cC1iZWdpbi1zaW1wbGUgdGVzdC1vbi1ncm91cC1lbmQtc2ltcGxlCi0gdGVzdC1vbi1iYWQt Y291bnQtc2ltcGxlIHRlc3Qtb24tYmFkLWVuZC1uYW1lLXNpbXBsZQotIHRlc3Qtb24tZmlu YWwtc2ltcGxlIHRlc3Qtb24tdGVzdC1lbmQtc2ltcGxlCi0gdGVzdC1vbi1maW5hbC1zaW1w bGUpCi0KLShjb25kLWV4cGFuZAotIChzcmZpLTkKLSAgKGRlZmluZS1zeW50YXggJXRlc3Qt cmVjb3JkLWRlZmluZQotICAgIChzeW50YXgtcnVsZXMgKCkKLSAgICAgICgoJXRlc3QtcmVj b3JkLWRlZmluZSBhbGxvYyBydW5uZXI/IChuYW1lIGluZGV4IHNldHRlciBnZXR0ZXIpIC4u LikKLSAgICAgICAoZGVmaW5lLXJlY29yZC10eXBlIHRlc3QtcnVubmVyCi0JIChhbGxvYykK LQkgcnVubmVyPwotCSAobmFtZSBzZXR0ZXIgZ2V0dGVyKSAuLi4pKSkpKQotIChlbHNlCi0g IChkZWZpbmUgJXRlc3QtcnVubmVyLWNvb2tpZSAobGlzdCAidGVzdC1ydW5uZXIiKSkKLSAg KGRlZmluZS1zeW50YXggJXRlc3QtcmVjb3JkLWRlZmluZQotICAgIChzeW50YXgtcnVsZXMg KCkKLSAgICAgICgoJXRlc3QtcmVjb3JkLWRlZmluZSBhbGxvYyBydW5uZXI/IChuYW1lIGlu ZGV4IGdldHRlciBzZXR0ZXIpIC4uLikKLSAgICAgICAoYmVnaW4KLQkgKGRlZmluZSAocnVu bmVyPyBvYmopCi0JICAgKGFuZCAodmVjdG9yPyBvYmopCi0JCSg+ICh2ZWN0b3ItbGVuZ3Ro IG9iaikgMSkKLQkJKGVxICh2ZWN0b3ItcmVmIG9iaiAwKSAldGVzdC1ydW5uZXItY29va2ll KSkpCi0JIChkZWZpbmUgKGFsbG9jKQotCSAgIChsZXQgKChydW5uZXIgKG1ha2UtdmVjdG9y IDIzKSkpCi0JICAgICAodmVjdG9yLXNldCEgcnVubmVyIDAgJXRlc3QtcnVubmVyLWNvb2tp ZSkKLQkgICAgIHJ1bm5lcikpCi0JIChiZWdpbgotCSAgIChkZWZpbmUgKGdldHRlciBydW5u ZXIpCi0JICAgICAodmVjdG9yLXJlZiBydW5uZXIgaW5kZXgpKSAuLi4pCi0JIChiZWdpbgot CSAgIChkZWZpbmUgKHNldHRlciBydW5uZXIgdmFsdWUpCi0JICAgICAodmVjdG9yLXNldCEg cnVubmVyIGluZGV4IHZhbHVlKSkgLi4uKSkpKSkpKQotCi0oJXRlc3QtcmVjb3JkLWRlZmlu ZQotICV0ZXN0LXJ1bm5lci1hbGxvYyB0ZXN0LXJ1bm5lcj8KLSA7OyBDdW11bGF0ZSBjb3Vu dCBvZiBhbGwgdGVzdHMgdGhhdCBoYXZlIHBhc3NlZCBhbmQgd2VyZSBleHBlY3RlZCB0by4K LSAocGFzcy1jb3VudCAxIHRlc3QtcnVubmVyLXBhc3MtY291bnQgdGVzdC1ydW5uZXItcGFz cy1jb3VudCEpCi0gKGZhaWwtY291bnQgMiB0ZXN0LXJ1bm5lci1mYWlsLWNvdW50IHRlc3Qt cnVubmVyLWZhaWwtY291bnQhKQotICh4cGFzcy1jb3VudCAzIHRlc3QtcnVubmVyLXhwYXNz LWNvdW50IHRlc3QtcnVubmVyLXhwYXNzLWNvdW50ISkKLSAoeGZhaWwtY291bnQgNCB0ZXN0 LXJ1bm5lci14ZmFpbC1jb3VudCB0ZXN0LXJ1bm5lci14ZmFpbC1jb3VudCEpCi0gKHNraXAt Y291bnQgNSB0ZXN0LXJ1bm5lci1za2lwLWNvdW50IHRlc3QtcnVubmVyLXNraXAtY291bnQh KQotIChza2lwLWxpc3QgNiAldGVzdC1ydW5uZXItc2tpcC1saXN0ICV0ZXN0LXJ1bm5lci1z a2lwLWxpc3QhKQotIChmYWlsLWxpc3QgNyAldGVzdC1ydW5uZXItZmFpbC1saXN0ICV0ZXN0 LXJ1bm5lci1mYWlsLWxpc3QhKQotIDs7IE5vcm1hbGx5ICN0LCBleGNlcHQgd2hlbiBpbiBh IHRlc3QtYXBwbHkuCi0gKHJ1bi1saXN0IDggJXRlc3QtcnVubmVyLXJ1bi1saXN0ICV0ZXN0 LXJ1bm5lci1ydW4tbGlzdCEpCi0gKHNraXAtc2F2ZSA5ICV0ZXN0LXJ1bm5lci1za2lwLXNh dmUgJXRlc3QtcnVubmVyLXNraXAtc2F2ZSEpCi0gKGZhaWwtc2F2ZSAxMCAldGVzdC1ydW5u ZXItZmFpbC1zYXZlICV0ZXN0LXJ1bm5lci1mYWlsLXNhdmUhKQotIChncm91cC1zdGFjayAx MSB0ZXN0LXJ1bm5lci1ncm91cC1zdGFjayB0ZXN0LXJ1bm5lci1ncm91cC1zdGFjayEpCi0g KG9uLXRlc3QtYmVnaW4gMTIgdGVzdC1ydW5uZXItb24tdGVzdC1iZWdpbiB0ZXN0LXJ1bm5l ci1vbi10ZXN0LWJlZ2luISkKLSAob24tdGVzdC1lbmQgMTMgdGVzdC1ydW5uZXItb24tdGVz dC1lbmQgdGVzdC1ydW5uZXItb24tdGVzdC1lbmQhKQotIDs7IENhbGwtYmFjayB3aGVuIGVu dGVyaW5nIGEgZ3JvdXAuIFRha2VzIChydW5uZXIgc3VpdGUtbmFtZSBjb3VudCkuCi0gKG9u LWdyb3VwLWJlZ2luIDE0IHRlc3QtcnVubmVyLW9uLWdyb3VwLWJlZ2luIHRlc3QtcnVubmVy LW9uLWdyb3VwLWJlZ2luISkKLSA7OyBDYWxsLWJhY2sgd2hlbiBsZWF2aW5nIGEgZ3JvdXAu Ci0gKG9uLWdyb3VwLWVuZCAxNSB0ZXN0LXJ1bm5lci1vbi1ncm91cC1lbmQgdGVzdC1ydW5u ZXItb24tZ3JvdXAtZW5kISkKLSA7OyBDYWxsLWJhY2sgd2hlbiBsZWF2aW5nIHRoZSBvdXRl cm1vc3QgZ3JvdXAuCi0gKG9uLWZpbmFsIDE2IHRlc3QtcnVubmVyLW9uLWZpbmFsIHRlc3Qt cnVubmVyLW9uLWZpbmFsISkKLSA7OyBDYWxsLWJhY2sgd2hlbiBleHBlY3RlZCBudW1iZXIg b2YgdGVzdHMgd2FzIHdyb25nLgotIChvbi1iYWQtY291bnQgMTcgdGVzdC1ydW5uZXItb24t YmFkLWNvdW50IHRlc3QtcnVubmVyLW9uLWJhZC1jb3VudCEpCi0gOzsgQ2FsbC1iYWNrIHdo ZW4gbmFtZSBpbiB0ZXN0PWVuZCBkb2Vzbid0IG1hdGNoIHRlc3QtYmVnaW4uCi0gKG9uLWJh ZC1lbmQtbmFtZSAxOCB0ZXN0LXJ1bm5lci1vbi1iYWQtZW5kLW5hbWUgdGVzdC1ydW5uZXIt b24tYmFkLWVuZC1uYW1lISkKLSA7OyBDdW11bGF0ZSBjb3VudCBvZiBhbGwgdGVzdHMgdGhh dCBoYXZlIGJlZW4gZG9uZS4KLSAodG90YWwtY291bnQgMTkgJXRlc3QtcnVubmVyLXRvdGFs LWNvdW50ICV0ZXN0LXJ1bm5lci10b3RhbC1jb3VudCEpCi0gOzsgU3RhY2sgKGxpc3QpIG9m IChjb3VudC1hdC1zdGFydCAuIGV4cGVjdGVkLWNvdW50KToKLSAoY291bnQtbGlzdCAyMCAl dGVzdC1ydW5uZXItY291bnQtbGlzdCAldGVzdC1ydW5uZXItY291bnQtbGlzdCEpCi0gKHJl c3VsdC1hbGlzdCAyMSB0ZXN0LXJlc3VsdC1hbGlzdCB0ZXN0LXJlc3VsdC1hbGlzdCEpCi0g OzsgRmllbGQgY2FuIGJlIHVzZWQgYnkgdGVzdC1ydW5uZXIgZm9yIGFueSBwdXJwb3NlLgot IDs7IHRlc3QtcnVubmVyLXNpbXBsZSB1c2VzIGl0IGZvciBhIGxvZyBmaWxlLgotIChhdXgt dmFsdWUgMjIgdGVzdC1ydW5uZXItYXV4LXZhbHVlIHRlc3QtcnVubmVyLWF1eC12YWx1ZSEp Ci0pCi0KLShkZWZpbmUgKHRlc3QtcnVubmVyLXJlc2V0IHJ1bm5lcikKLSAgKHRlc3QtcmVz dWx0LWFsaXN0ISBydW5uZXIgJygpKQotICAodGVzdC1ydW5uZXItcGFzcy1jb3VudCEgcnVu bmVyIDApCi0gICh0ZXN0LXJ1bm5lci1mYWlsLWNvdW50ISBydW5uZXIgMCkKLSAgKHRlc3Qt cnVubmVyLXhwYXNzLWNvdW50ISBydW5uZXIgMCkKLSAgKHRlc3QtcnVubmVyLXhmYWlsLWNv dW50ISBydW5uZXIgMCkKLSAgKHRlc3QtcnVubmVyLXNraXAtY291bnQhIHJ1bm5lciAwKQot ICAoJXRlc3QtcnVubmVyLXRvdGFsLWNvdW50ISBydW5uZXIgMCkKLSAgKCV0ZXN0LXJ1bm5l ci1jb3VudC1saXN0ISBydW5uZXIgJygpKQotICAoJXRlc3QtcnVubmVyLXJ1bi1saXN0ISBy dW5uZXIgI3QpCi0gICgldGVzdC1ydW5uZXItc2tpcC1saXN0ISBydW5uZXIgJygpKQotICAo JXRlc3QtcnVubmVyLWZhaWwtbGlzdCEgcnVubmVyICcoKSkKLSAgKCV0ZXN0LXJ1bm5lci1z a2lwLXNhdmUhIHJ1bm5lciAnKCkpCi0gICgldGVzdC1ydW5uZXItZmFpbC1zYXZlISBydW5u ZXIgJygpKQotICAodGVzdC1ydW5uZXItZ3JvdXAtc3RhY2shIHJ1bm5lciAnKCkpKQotCi0o ZGVmaW5lICh0ZXN0LXJ1bm5lci1ncm91cC1wYXRoIHJ1bm5lcikKLSAgKHJldmVyc2UgKHRl c3QtcnVubmVyLWdyb3VwLXN0YWNrIHJ1bm5lcikpKQotCi0oZGVmaW5lICgldGVzdC1udWxs LWNhbGxiYWNrIHJ1bm5lcikgI2YpCi0KLShkZWZpbmUgKHRlc3QtcnVubmVyLW51bGwpCi0g IChsZXQgKChydW5uZXIgKCV0ZXN0LXJ1bm5lci1hbGxvYykpKQotICAgICh0ZXN0LXJ1bm5l ci1yZXNldCBydW5uZXIpCi0gICAgKHRlc3QtcnVubmVyLW9uLWdyb3VwLWJlZ2luISBydW5u ZXIgKGxhbWJkYSAocnVubmVyIG5hbWUgY291bnQpICNmKSkKLSAgICAodGVzdC1ydW5uZXIt b24tZ3JvdXAtZW5kISBydW5uZXIgJXRlc3QtbnVsbC1jYWxsYmFjaykKLSAgICAodGVzdC1y dW5uZXItb24tZmluYWwhIHJ1bm5lciAldGVzdC1udWxsLWNhbGxiYWNrKQotICAgICh0ZXN0 LXJ1bm5lci1vbi10ZXN0LWJlZ2luISBydW5uZXIgJXRlc3QtbnVsbC1jYWxsYmFjaykKLSAg ICAodGVzdC1ydW5uZXItb24tdGVzdC1lbmQhIHJ1bm5lciAldGVzdC1udWxsLWNhbGxiYWNr KQotICAgICh0ZXN0LXJ1bm5lci1vbi1iYWQtY291bnQhIHJ1bm5lciAobGFtYmRhIChydW5u ZXIgY291bnQgZXhwZWN0ZWQpICNmKSkKLSAgICAodGVzdC1ydW5uZXItb24tYmFkLWVuZC1u YW1lISBydW5uZXIgKGxhbWJkYSAocnVubmVyIGJlZ2luIGVuZCkgI2YpKQotICAgIHJ1bm5l cikpCi0KLTs7IE5vdCBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uLiAgRklYTUUKLTs7IENv bnRyb2xzIHdoZXRoZXIgYSBsb2cgZmlsZSBpcyBnZW5lcmF0ZWQuCi0oZGVmaW5lIHRlc3Qt bG9nLXRvLWZpbGUgI3QpCi0KLShkZWZpbmUgKHRlc3QtcnVubmVyLXNpbXBsZSkKLSAgKGxl dCAoKHJ1bm5lciAoJXRlc3QtcnVubmVyLWFsbG9jKSkpCi0gICAgKHRlc3QtcnVubmVyLXJl c2V0IHJ1bm5lcikKLSAgICAodGVzdC1ydW5uZXItb24tZ3JvdXAtYmVnaW4hIHJ1bm5lciB0 ZXN0LW9uLWdyb3VwLWJlZ2luLXNpbXBsZSkKLSAgICAodGVzdC1ydW5uZXItb24tZ3JvdXAt ZW5kISBydW5uZXIgdGVzdC1vbi1ncm91cC1lbmQtc2ltcGxlKQotICAgICh0ZXN0LXJ1bm5l ci1vbi1maW5hbCEgcnVubmVyIHRlc3Qtb24tZmluYWwtc2ltcGxlKQotICAgICh0ZXN0LXJ1 bm5lci1vbi10ZXN0LWJlZ2luISBydW5uZXIgdGVzdC1vbi10ZXN0LWJlZ2luLXNpbXBsZSkK LSAgICAodGVzdC1ydW5uZXItb24tdGVzdC1lbmQhIHJ1bm5lciB0ZXN0LW9uLXRlc3QtZW5k LXNpbXBsZSkKLSAgICAodGVzdC1ydW5uZXItb24tYmFkLWNvdW50ISBydW5uZXIgdGVzdC1v bi1iYWQtY291bnQtc2ltcGxlKQotICAgICh0ZXN0LXJ1bm5lci1vbi1iYWQtZW5kLW5hbWUh IHJ1bm5lciB0ZXN0LW9uLWJhZC1lbmQtbmFtZS1zaW1wbGUpCi0gICAgcnVubmVyKSkKLQot KGNvbmQtZXhwYW5kCi0gKHNyZmktMzkKLSAgKGRlZmluZSB0ZXN0LXJ1bm5lci1jdXJyZW50 IChtYWtlLXBhcmFtZXRlciAjZikpCi0gIChkZWZpbmUgdGVzdC1ydW5uZXItZmFjdG9yeSAo bWFrZS1wYXJhbWV0ZXIgdGVzdC1ydW5uZXItc2ltcGxlKSkpCi0gKGVsc2UKLSAgKGRlZmlu ZSAldGVzdC1ydW5uZXItY3VycmVudCAjZikKLSAgKGRlZmluZS1zeW50YXggdGVzdC1ydW5u ZXItY3VycmVudAotICAgIChzeW50YXgtcnVsZXMgKCkKLSAgICAgICgodGVzdC1ydW5uZXIt Y3VycmVudCkKLSAgICAgICAldGVzdC1ydW5uZXItY3VycmVudCkKLSAgICAgICgodGVzdC1y dW5uZXItY3VycmVudCBydW5uZXIpCi0gICAgICAgKHNldCEgJXRlc3QtcnVubmVyLWN1cnJl bnQgcnVubmVyKSkpKQotICAoZGVmaW5lICV0ZXN0LXJ1bm5lci1mYWN0b3J5IHRlc3QtcnVu bmVyLXNpbXBsZSkKLSAgKGRlZmluZS1zeW50YXggdGVzdC1ydW5uZXItZmFjdG9yeQotICAg IChzeW50YXgtcnVsZXMgKCkKLSAgICAgICgodGVzdC1ydW5uZXItZmFjdG9yeSkKLSAgICAg ICAldGVzdC1ydW5uZXItZmFjdG9yeSkKLSAgICAgICgodGVzdC1ydW5uZXItZmFjdG9yeSBy dW5uZXIpCi0gICAgICAgKHNldCEgJXRlc3QtcnVubmVyLWZhY3RvcnkgcnVubmVyKSkpKSkp Ci0KLTs7IEEgc2FmZXIgd3JhcHBlciB0byB0ZXN0LXJ1bm5lci1jdXJyZW50LgotKGRlZmlu ZSAodGVzdC1ydW5uZXItZ2V0KQotICAobGV0ICgociAodGVzdC1ydW5uZXItY3VycmVudCkp KQotICAgIChpZiAobm90IHIpCi0JKGNvbmQtZXhwYW5kCi0JIChzcmZpLTIzIChlcnJvciAi dGVzdC1ydW5uZXIgbm90IGluaXRpYWxpemVkIC0gdGVzdC1iZWdpbiBtaXNzaW5nPyIpKQot CSAoZWxzZSAjdCkpKQotICAgIHIpKQotCi0oZGVmaW5lICgldGVzdC1zcGVjaWZpZXItbWF0 Y2hlcyBzcGVjIHJ1bm5lcikKLSAgKHNwZWMgcnVubmVyKSkKLQotKGRlZmluZSAodGVzdC1y dW5uZXItY3JlYXRlKQotICAoKHRlc3QtcnVubmVyLWZhY3RvcnkpKSkKLQotKGRlZmluZSAo JXRlc3QtYW55LXNwZWNpZmllci1tYXRjaGVzIGxpc3QgcnVubmVyKQotICAobGV0ICgocmVz dWx0ICNmKSkKLSAgICAobGV0IGxvb3AgKChsIGxpc3QpKQotICAgICAgKGNvbmQgKChudWxs PyBsKSByZXN1bHQpCi0JICAgIChlbHNlCi0JICAgICAoaWYgKCV0ZXN0LXNwZWNpZmllci1t YXRjaGVzIChjYXIgbCkgcnVubmVyKQotCQkgKHNldCEgcmVzdWx0ICN0KSkKLQkgICAgIChs b29wIChjZHIgbCkpKSkpKSkKLQotOzsgUmV0dXJucyAjZiwgI3QsIG9yICd4ZmFpbC4KLShk ZWZpbmUgKCV0ZXN0LXNob3VsZC1leGVjdXRlIHJ1bm5lcikKLSAgKGxldCAoKHJ1biAoJXRl c3QtcnVubmVyLXJ1bi1saXN0IHJ1bm5lcikpKQotICAgIChjb25kICgob3IKLQkgICAgKG5v dCAob3IgKGVxdj8gcnVuICN0KQotCQkgICAgICgldGVzdC1hbnktc3BlY2lmaWVyLW1hdGNo ZXMgcnVuIHJ1bm5lcikpKQotCSAgICAoJXRlc3QtYW55LXNwZWNpZmllci1tYXRjaGVzCi0J ICAgICAoJXRlc3QtcnVubmVyLXNraXAtbGlzdCBydW5uZXIpCi0JICAgICBydW5uZXIpKQot CSAgICAodGVzdC1yZXN1bHQtc2V0ISBydW5uZXIgJ3Jlc3VsdC1raW5kICdza2lwKQotCSAg ICAjZikKLQkgICgoJXRlc3QtYW55LXNwZWNpZmllci1tYXRjaGVzCi0JICAgICgldGVzdC1y dW5uZXItZmFpbC1saXN0IHJ1bm5lcikKLQkgICAgcnVubmVyKQotCSAgICh0ZXN0LXJlc3Vs dC1zZXQhIHJ1bm5lciAncmVzdWx0LWtpbmQgJ3hmYWlsKQotCSAgICd4ZmFpbCkKLQkgIChl bHNlICN0KSkpKQotCi0oZGVmaW5lICgldGVzdC1iZWdpbiBzdWl0ZS1uYW1lIGNvdW50KQot ICAoaWYgKG5vdCAodGVzdC1ydW5uZXItY3VycmVudCkpCi0gICAgICAobGV0ICgociAodGVz dC1ydW5uZXItY3JlYXRlKSkpCi0JKHRlc3QtcnVubmVyLWN1cnJlbnQgcikKLQkodGVzdC1y dW5uZXItb24tZmluYWwhIHIKLQkgIChsZXQgKChvbGQtZmluYWwgKHRlc3QtcnVubmVyLW9u LWZpbmFsIHIpKSkKLQkgICAgKGxhbWJkYSAocikgKG9sZC1maW5hbCByKSAodGVzdC1ydW5u ZXItY3VycmVudCAjZikpKSkpKQotICAobGV0ICgocnVubmVyICh0ZXN0LXJ1bm5lci1jdXJy ZW50KSkpCi0gICAgKCh0ZXN0LXJ1bm5lci1vbi1ncm91cC1iZWdpbiBydW5uZXIpIHJ1bm5l ciBzdWl0ZS1uYW1lIGNvdW50KQotICAgICgldGVzdC1ydW5uZXItc2tpcC1zYXZlISBydW5u ZXIKLQkJCSAgICAgICAoY29ucyAoJXRlc3QtcnVubmVyLXNraXAtbGlzdCBydW5uZXIpCi0J CQkJICAgICAoJXRlc3QtcnVubmVyLXNraXAtc2F2ZSBydW5uZXIpKSkKLSAgICAoJXRlc3Qt cnVubmVyLWZhaWwtc2F2ZSEgcnVubmVyCi0JCQkgICAgICAgKGNvbnMgKCV0ZXN0LXJ1bm5l ci1mYWlsLWxpc3QgcnVubmVyKQotCQkJCSAgICAgKCV0ZXN0LXJ1bm5lci1mYWlsLXNhdmUg cnVubmVyKSkpCi0gICAgKCV0ZXN0LXJ1bm5lci1jb3VudC1saXN0ISBydW5uZXIKLQkJCSAg ICAgKGNvbnMgKGNvbnMgKCV0ZXN0LXJ1bm5lci10b3RhbC1jb3VudCBydW5uZXIpCi0JCQkJ CSBjb3VudCkKLQkJCQkgICAoJXRlc3QtcnVubmVyLWNvdW50LWxpc3QgcnVubmVyKSkpCi0g ICAgKHRlc3QtcnVubmVyLWdyb3VwLXN0YWNrISBydW5uZXIgKGNvbnMgc3VpdGUtbmFtZQot CQkJCQkodGVzdC1ydW5uZXItZ3JvdXAtc3RhY2sgcnVubmVyKSkpKSkKLShjb25kLWV4cGFu ZAotIChrYXdhCi0gIDs7IEthd2EgaGFzIHRlc3QtYmVnaW4gYnVpbHQgaW4sIGltcGxlbWVu dGVkIGFzOgotICA7OyAoYmVnaW4KLSAgOzsgICAoY29uZC1leHBhbmQgKHNyZmktNjQgIyF2 b2lkKSAoZWxzZSAocmVxdWlyZSAnc3JmaS02NCkpKQotICA7OyAgICgldGVzdC1iZWdpbiBz dWl0ZS1uYW1lIFtjb3VudF0pKQotICA7OyBUaGlzIHB1dHMgdGVzdC1iZWdpbiBidXQgb25s eSB0ZXN0LWJlZ2luIGluIHRoZSBkZWZhdWx0IGVudmlyb25tZW50LiwKLSAgOzsgd2hpY2gg bWFrZXMgbm9ybWFsIHRlc3Qgc3VpdGVzIGxvYWRhYmxlIHdpdGhvdXQgbm9uLXBvcnRhYmxl IGNvbW1hbmRzLgotICApCi0gKGVsc2UKLSAgKGRlZmluZS1zeW50YXggdGVzdC1iZWdpbgot ICAgIChzeW50YXgtcnVsZXMgKCkKLSAgICAgICgodGVzdC1iZWdpbiBzdWl0ZS1uYW1lKQot ICAgICAgICgldGVzdC1iZWdpbiBzdWl0ZS1uYW1lICNmKSkKLSAgICAgICgodGVzdC1iZWdp biBzdWl0ZS1uYW1lIGNvdW50KQotICAgICAgICgldGVzdC1iZWdpbiBzdWl0ZS1uYW1lIGNv dW50KSkpKSkpCi0KLShkZWZpbmUgKHRlc3Qtb24tZ3JvdXAtYmVnaW4tc2ltcGxlIHJ1bm5l ciBzdWl0ZS1uYW1lIGNvdW50KQotICAoaWYgKG51bGw/ICh0ZXN0LXJ1bm5lci1ncm91cC1z dGFjayBydW5uZXIpKQotICAgICAgKGJlZ2luCi0JKGRpc3BsYXkgIiUlJSUgU3RhcnRpbmcg dGVzdCAiKQotCShkaXNwbGF5IHN1aXRlLW5hbWUpCi0JKGlmIHRlc3QtbG9nLXRvLWZpbGUK LQkgICAgKGxldCogKChsb2ctZmlsZS1uYW1lCi0JCSAgICAoaWYgKHN0cmluZz8gdGVzdC1s b2ctdG8tZmlsZSkgdGVzdC1sb2ctdG8tZmlsZQotCQkJKHN0cmluZy1hcHBlbmQgc3VpdGUt bmFtZSAiLmxvZyIpKSkKLQkJICAgKGxvZy1maWxlCi0JCSAgICAoY29uZC1leHBhbmQgKG16 c2NoZW1lCi0JCQkJICAob3Blbi1vdXRwdXQtZmlsZSBsb2ctZmlsZS1uYW1lICd0cnVuY2F0 ZS9yZXBsYWNlKSkKLQkJCQkgKGVsc2UgKG9wZW4tb3V0cHV0LWZpbGUgbG9nLWZpbGUtbmFt ZSkpKSkpCi0JICAgICAgKGRpc3BsYXkgIiUlJSUgU3RhcnRpbmcgdGVzdCAiIGxvZy1maWxl KQotCSAgICAgIChkaXNwbGF5IHN1aXRlLW5hbWUgbG9nLWZpbGUpCi0JICAgICAgKG5ld2xp bmUgbG9nLWZpbGUpCi0JICAgICAgKHRlc3QtcnVubmVyLWF1eC12YWx1ZSEgcnVubmVyIGxv Zy1maWxlKQotCSAgICAgIChkaXNwbGF5ICIgIChXcml0aW5nIGZ1bGwgbG9nIHRvIFwiIikK LQkgICAgICAoZGlzcGxheSBsb2ctZmlsZS1uYW1lKQotCSAgICAgIChkaXNwbGF5ICJcIiki KSkpCi0JKG5ld2xpbmUpKSkKLSAgKGxldCAoKGxvZyAodGVzdC1ydW5uZXItYXV4LXZhbHVl IHJ1bm5lcikpKQotICAgIChpZiAob3V0cHV0LXBvcnQ/IGxvZykKLQkoYmVnaW4KLQkgIChk aXNwbGF5ICJHcm91cCBiZWdpbjogIiBsb2cpCi0JICAoZGlzcGxheSBzdWl0ZS1uYW1lIGxv ZykKLQkgIChuZXdsaW5lIGxvZykpKSkKLSAgI2YpCi0KLShkZWZpbmUgKHRlc3Qtb24tZ3Jv dXAtZW5kLXNpbXBsZSBydW5uZXIpCi0gIChsZXQgKChsb2cgKHRlc3QtcnVubmVyLWF1eC12 YWx1ZSBydW5uZXIpKSkKLSAgICAoaWYgKG91dHB1dC1wb3J0PyBsb2cpCi0JKGJlZ2luCi0J ICAoZGlzcGxheSAiR3JvdXAgZW5kOiAiIGxvZykKLQkgIChkaXNwbGF5IChjYXIgKHRlc3Qt cnVubmVyLWdyb3VwLXN0YWNrIHJ1bm5lcikpIGxvZykKLQkgIChuZXdsaW5lIGxvZykpKSkK LSAgI2YpCi0KLShkZWZpbmUgKCV0ZXN0LW9uLWJhZC1jb3VudC13cml0ZSBydW5uZXIgY291 bnQgZXhwZWN0ZWQtY291bnQgcG9ydCkKLSAgKGRpc3BsYXkgIioqKiBUb3RhbCBudW1iZXIg b2YgdGVzdHMgd2FzICIgcG9ydCkKLSAgKGRpc3BsYXkgY291bnQgcG9ydCkKLSAgKGRpc3Bs YXkgIiBidXQgc2hvdWxkIGJlICIgcG9ydCkKLSAgKGRpc3BsYXkgZXhwZWN0ZWQtY291bnQg cG9ydCkKLSAgKGRpc3BsYXkgIi4gKioqIiBwb3J0KQotICAobmV3bGluZSBwb3J0KQotICAo ZGlzcGxheSAiKioqIERpc2NyZXBhbmN5IGluZGljYXRlcyB0ZXN0c3VpdGUgZXJyb3Igb3Ig ZXhjZXB0aW9ucy4gKioqIiBwb3J0KQotICAobmV3bGluZSBwb3J0KSkKLQotKGRlZmluZSAo dGVzdC1vbi1iYWQtY291bnQtc2ltcGxlIHJ1bm5lciBjb3VudCBleHBlY3RlZC1jb3VudCkK LSAgKCV0ZXN0LW9uLWJhZC1jb3VudC13cml0ZSBydW5uZXIgY291bnQgZXhwZWN0ZWQtY291 bnQgKGN1cnJlbnQtb3V0cHV0LXBvcnQpKQotICAobGV0ICgobG9nICh0ZXN0LXJ1bm5lci1h dXgtdmFsdWUgcnVubmVyKSkpCi0gICAgKGlmIChvdXRwdXQtcG9ydD8gbG9nKQotCSgldGVz dC1vbi1iYWQtY291bnQtd3JpdGUgcnVubmVyIGNvdW50IGV4cGVjdGVkLWNvdW50IGxvZykp KSkKLQotKGRlZmluZSAodGVzdC1vbi1iYWQtZW5kLW5hbWUtc2ltcGxlIHJ1bm5lciBiZWdp bi1uYW1lIGVuZC1uYW1lKQotICAobGV0ICgobXNnIChzdHJpbmctYXBwZW5kICgldGVzdC1m b3JtYXQtbGluZSBydW5uZXIpICJ0ZXN0LWVuZCAiIGJlZ2luLW5hbWUKLQkJCSAgICAiIGRv ZXMgbm90IG1hdGNoIHRlc3QtYmVnaW4gIiBlbmQtbmFtZSkpKQotICAgIChjb25kLWV4cGFu ZAotICAgICAoc3JmaS0yMyAoZXJyb3IgbXNnKSkKLSAgICAgKGVsc2UgKGRpc3BsYXkgbXNn KSAobmV3bGluZSkpKSkpCi0gIAotCi0oZGVmaW5lICgldGVzdC1maW5hbC1yZXBvcnQxIHZh bHVlIGxhYmVsIHBvcnQpCi0gIChpZiAoPiB2YWx1ZSAwKQotICAgICAgKGJlZ2luCi0JKGRp c3BsYXkgbGFiZWwgcG9ydCkKLQkoZGlzcGxheSB2YWx1ZSBwb3J0KQotCShuZXdsaW5lIHBv cnQpKSkpCi0KLShkZWZpbmUgKCV0ZXN0LWZpbmFsLXJlcG9ydC1zaW1wbGUgcnVubmVyIHBv cnQpCi0gICgldGVzdC1maW5hbC1yZXBvcnQxICh0ZXN0LXJ1bm5lci1wYXNzLWNvdW50IHJ1 bm5lcikKLQkJICAgICAgIiMgb2YgZXhwZWN0ZWQgcGFzc2VzICAgICAgIiBwb3J0KQotICAo JXRlc3QtZmluYWwtcmVwb3J0MSAodGVzdC1ydW5uZXIteGZhaWwtY291bnQgcnVubmVyKQot CQkgICAgICAiIyBvZiBleHBlY3RlZCBmYWlsdXJlcyAgICAiIHBvcnQpCi0gICgldGVzdC1m aW5hbC1yZXBvcnQxICh0ZXN0LXJ1bm5lci14cGFzcy1jb3VudCBydW5uZXIpCi0JCSAgICAg ICIjIG9mIHVuZXhwZWN0ZWQgc3VjY2Vzc2VzICIgcG9ydCkKLSAgKCV0ZXN0LWZpbmFsLXJl cG9ydDEgKHRlc3QtcnVubmVyLWZhaWwtY291bnQgcnVubmVyKQotCQkgICAgICAiIyBvZiB1 bmV4cGVjdGVkIGZhaWx1cmVzICAiIHBvcnQpCi0gICgldGVzdC1maW5hbC1yZXBvcnQxICh0 ZXN0LXJ1bm5lci1za2lwLWNvdW50IHJ1bm5lcikKLQkJICAgICAgIiMgb2Ygc2tpcHBlZCB0 ZXN0cyAgICAgICAgIiBwb3J0KSkKLQotKGRlZmluZSAodGVzdC1vbi1maW5hbC1zaW1wbGUg cnVubmVyKQotICAoJXRlc3QtZmluYWwtcmVwb3J0LXNpbXBsZSBydW5uZXIgKGN1cnJlbnQt b3V0cHV0LXBvcnQpKQotICAobGV0ICgobG9nICh0ZXN0LXJ1bm5lci1hdXgtdmFsdWUgcnVu bmVyKSkpCi0gICAgKGlmIChvdXRwdXQtcG9ydD8gbG9nKQotCSgldGVzdC1maW5hbC1yZXBv cnQtc2ltcGxlIHJ1bm5lciBsb2cpKSkpCi0KLShkZWZpbmUgKCV0ZXN0LWZvcm1hdC1saW5l IHJ1bm5lcikKLSAgIChsZXQqICgobGluZS1pbmZvICh0ZXN0LXJlc3VsdC1hbGlzdCBydW5u ZXIpKQotCSAgKHNvdXJjZS1maWxlIChhc3NxICdzb3VyY2UtZmlsZSBsaW5lLWluZm8pKQot CSAgKHNvdXJjZS1saW5lIChhc3NxICdzb3VyY2UtbGluZSBsaW5lLWluZm8pKQotCSAgKGZp bGUgKGlmIHNvdXJjZS1maWxlIChjZHIgc291cmNlLWZpbGUpICIiKSkpCi0gICAgIChpZiBz b3VyY2UtbGluZQotCSAoc3RyaW5nLWFwcGVuZCBmaWxlICI6IgotCQkJKG51bWJlci0+c3Ry aW5nIChjZHIgc291cmNlLWxpbmUpKSAiOiAiKQotCSAiIikpKQotCi0oZGVmaW5lICgldGVz dC1lbmQgc3VpdGUtbmFtZSBsaW5lLWluZm8pCi0gIChsZXQqICgociAodGVzdC1ydW5uZXIt Z2V0KSkKLQkgKGdyb3VwcyAodGVzdC1ydW5uZXItZ3JvdXAtc3RhY2sgcikpCi0JIChsaW5l ICgldGVzdC1mb3JtYXQtbGluZSByKSkpCi0gICAgKHRlc3QtcmVzdWx0LWFsaXN0ISByIGxp bmUtaW5mbykKLSAgICAoaWYgKG51bGw/IGdyb3VwcykKLQkobGV0ICgobXNnIChzdHJpbmct YXBwZW5kIGxpbmUgInRlc3QtZW5kIG5vdCBpbiBhIGdyb3VwIikpKQotCSAgKGNvbmQtZXhw YW5kCi0JICAgKHNyZmktMjMgKGVycm9yIG1zZykpCi0JICAgKGVsc2UgKGRpc3BsYXkgbXNn KSAobmV3bGluZSkpKSkpCi0gICAgKGlmIChhbmQgc3VpdGUtbmFtZSAobm90IChlcXVhbD8g c3VpdGUtbmFtZSAoY2FyIGdyb3VwcykpKSkKLQkoKHRlc3QtcnVubmVyLW9uLWJhZC1lbmQt bmFtZSByKSByIHN1aXRlLW5hbWUgKGNhciBncm91cHMpKSkKLSAgICAobGV0KiAoKGNvdW50 LWxpc3QgKCV0ZXN0LXJ1bm5lci1jb3VudC1saXN0IHIpKQotCSAgIChleHBlY3RlZC1jb3Vu dCAoY2RhciBjb3VudC1saXN0KSkKLQkgICAoc2F2ZWQtY291bnQgKGNhYXIgY291bnQtbGlz dCkpCi0JICAgKGdyb3VwLWNvdW50ICgtICgldGVzdC1ydW5uZXItdG90YWwtY291bnQgcikg c2F2ZWQtY291bnQpKSkKLSAgICAgIChpZiAoYW5kIGV4cGVjdGVkLWNvdW50Ci0JICAgICAg IChub3QgKD0gZXhwZWN0ZWQtY291bnQgZ3JvdXAtY291bnQpKSkKLQkgICgodGVzdC1ydW5u ZXItb24tYmFkLWNvdW50IHIpIHIgZ3JvdXAtY291bnQgZXhwZWN0ZWQtY291bnQpKQotICAg ICAgKCh0ZXN0LXJ1bm5lci1vbi1ncm91cC1lbmQgcikgcikKLSAgICAgICh0ZXN0LXJ1bm5l ci1ncm91cC1zdGFjayEgciAoY2RyICh0ZXN0LXJ1bm5lci1ncm91cC1zdGFjayByKSkpCi0g ICAgICAoJXRlc3QtcnVubmVyLXNraXAtbGlzdCEgciAoY2FyICgldGVzdC1ydW5uZXItc2tp cC1zYXZlIHIpKSkKLSAgICAgICgldGVzdC1ydW5uZXItc2tpcC1zYXZlISByIChjZHIgKCV0 ZXN0LXJ1bm5lci1za2lwLXNhdmUgcikpKQotICAgICAgKCV0ZXN0LXJ1bm5lci1mYWlsLWxp c3QhIHIgKGNhciAoJXRlc3QtcnVubmVyLWZhaWwtc2F2ZSByKSkpCi0gICAgICAoJXRlc3Qt cnVubmVyLWZhaWwtc2F2ZSEgciAoY2RyICgldGVzdC1ydW5uZXItZmFpbC1zYXZlIHIpKSkK LSAgICAgICgldGVzdC1ydW5uZXItY291bnQtbGlzdCEgciAoY2RyIGNvdW50LWxpc3QpKQot ICAgICAgKGlmIChudWxsPyAodGVzdC1ydW5uZXItZ3JvdXAtc3RhY2sgcikpCi0JICAoKHRl c3QtcnVubmVyLW9uLWZpbmFsIHIpIHIpKSkpKQotCi0oZGVmaW5lLXN5bnRheCB0ZXN0LWdy b3VwCi0gIChzeW50YXgtcnVsZXMgKCkKLSAgICAoKHRlc3QtZ3JvdXAgc3VpdGUtbmFtZSAu IGJvZHkpCi0gICAgIChsZXQgKChyICh0ZXN0LXJ1bm5lci1jdXJyZW50KSkpCi0gICAgICAg OzsgSWRlYWxseSBzaG91bGQgYWxzbyBzZXQgbGluZS1udW1iZXIsIGlmIGF2YWlsYWJsZS4K LSAgICAgICAodGVzdC1yZXN1bHQtYWxpc3QhIHIgKGxpc3QgKGNvbnMgJ3Rlc3QtbmFtZSBz dWl0ZS1uYW1lKSkpCi0gICAgICAgKGlmICgldGVzdC1zaG91bGQtZXhlY3V0ZSByKQotCSAg IChkeW5hbWljLXdpbmQKLQkgICAgICAgKGxhbWJkYSAoKSAodGVzdC1iZWdpbiBzdWl0ZS1u YW1lKSkKLQkgICAgICAgKGxhbWJkYSAoKSAuIGJvZHkpCi0JICAgICAgIChsYW1iZGEgKCkg KHRlc3QtZW5kICBzdWl0ZS1uYW1lKSkpKSkpKSkKLQotKGRlZmluZS1zeW50YXggdGVzdC1n cm91cC13aXRoLWNsZWFudXAKLSAgKHN5bnRheC1ydWxlcyAoKQotICAgICgodGVzdC1ncm91 cC13aXRoLWNsZWFudXAgc3VpdGUtbmFtZSBmb3JtIGNsZWFudXAtZm9ybSkKLSAgICAgKHRl c3QtZ3JvdXAgc3VpdGUtbmFtZQotCQkgICAgKGR5bmFtaWMtd2luZAotCQkJKGxhbWJkYSAo KSAjZikKLQkJCShsYW1iZGEgKCkgZm9ybSkKLQkJCShsYW1iZGEgKCkgY2xlYW51cC1mb3Jt KSkpKQotICAgICgodGVzdC1ncm91cC13aXRoLWNsZWFudXAgc3VpdGUtbmFtZSBjbGVhbnVw LWZvcm0pCi0gICAgICh0ZXN0LWdyb3VwLXdpdGgtY2xlYW51cCBzdWl0ZS1uYW1lICNmIGNs ZWFudXAtZm9ybSkpCi0gICAgKCh0ZXN0LWdyb3VwLXdpdGgtY2xlYW51cCBzdWl0ZS1uYW1l IGZvcm0xIGZvcm0yIGZvcm0zIC4gcmVzdCkKLSAgICAgKHRlc3QtZ3JvdXAtd2l0aC1jbGVh bnVwIHN1aXRlLW5hbWUgKGJlZ2luIGZvcm0xIGZvcm0yKSBmb3JtMyAuIHJlc3QpKSkpCi0K LShkZWZpbmUgKHRlc3Qtb24tdGVzdC1iZWdpbi1zaW1wbGUgcnVubmVyKQotIChsZXQgKChs b2cgKHRlc3QtcnVubmVyLWF1eC12YWx1ZSBydW5uZXIpKSkKLSAgICAoaWYgKG91dHB1dC1w b3J0PyBsb2cpCi0JKGxldCogKChyZXN1bHRzICh0ZXN0LXJlc3VsdC1hbGlzdCBydW5uZXIp KQotCSAgICAgICAoc291cmNlLWZpbGUgKGFzc3EgJ3NvdXJjZS1maWxlIHJlc3VsdHMpKQot CSAgICAgICAoc291cmNlLWxpbmUgKGFzc3EgJ3NvdXJjZS1saW5lIHJlc3VsdHMpKQotCSAg ICAgICAoc291cmNlLWZvcm0gKGFzc3EgJ3NvdXJjZS1mb3JtIHJlc3VsdHMpKQotCSAgICAg ICAodGVzdC1uYW1lIChhc3NxICd0ZXN0LW5hbWUgcmVzdWx0cykpKQotCSAgKGRpc3BsYXkg IlRlc3QgYmVnaW46IiBsb2cpCi0JICAobmV3bGluZSBsb2cpCi0JICAoaWYgdGVzdC1uYW1l ICgldGVzdC13cml0ZS1yZXN1bHQxIHRlc3QtbmFtZSBsb2cpKQotCSAgKGlmIHNvdXJjZS1m aWxlICgldGVzdC13cml0ZS1yZXN1bHQxIHNvdXJjZS1maWxlIGxvZykpCi0JICAoaWYgc291 cmNlLWxpbmUgKCV0ZXN0LXdyaXRlLXJlc3VsdDEgc291cmNlLWxpbmUgbG9nKSkKLQkgIChp ZiBzb3VyY2UtZm9ybSAoJXRlc3Qtd3JpdGUtcmVzdWx0MSBzb3VyY2UtZm9ybSBsb2cpKSkp KSkKLQotKGRlZmluZS1zeW50YXggdGVzdC1yZXN1bHQtcmVmCi0gIChzeW50YXgtcnVsZXMg KCkKLSAgICAoKHRlc3QtcmVzdWx0LXJlZiBydW5uZXIgcG5hbWUpCi0gICAgICh0ZXN0LXJl c3VsdC1yZWYgcnVubmVyIHBuYW1lICNmKSkKLSAgICAoKHRlc3QtcmVzdWx0LXJlZiBydW5u ZXIgcG5hbWUgZGVmYXVsdCkKLSAgICAgKGxldCAoKHAgKGFzc3EgcG5hbWUgKHRlc3QtcmVz dWx0LWFsaXN0IHJ1bm5lcikpKSkKLSAgICAgICAoaWYgcCAoY2RyIHApIGRlZmF1bHQpKSkp KQotCi0oZGVmaW5lICh0ZXN0LW9uLXRlc3QtZW5kLXNpbXBsZSBydW5uZXIpCi0gIChsZXQg KChsb2cgKHRlc3QtcnVubmVyLWF1eC12YWx1ZSBydW5uZXIpKQotCShraW5kICh0ZXN0LXJl c3VsdC1yZWYgcnVubmVyICdyZXN1bHQta2luZCkpKQotICAgIChpZiAobWVtcSBraW5kICco ZmFpbCB4cGFzcykpCi0JKGxldCogKChyZXN1bHRzICh0ZXN0LXJlc3VsdC1hbGlzdCBydW5u ZXIpKQotCSAgICAgICAoc291cmNlLWZpbGUgKGFzc3EgJ3NvdXJjZS1maWxlIHJlc3VsdHMp KQotCSAgICAgICAoc291cmNlLWxpbmUgKGFzc3EgJ3NvdXJjZS1saW5lIHJlc3VsdHMpKQot CSAgICAgICAodGVzdC1uYW1lIChhc3NxICd0ZXN0LW5hbWUgcmVzdWx0cykpKQotCSAgKGlm IChvciBzb3VyY2UtZmlsZSBzb3VyY2UtbGluZSkKLQkgICAgICAoYmVnaW4KLQkJKGlmIHNv dXJjZS1maWxlIChkaXNwbGF5IChjZHIgc291cmNlLWZpbGUpKSkKLQkJKGRpc3BsYXkgIjoi KQotCQkoaWYgc291cmNlLWxpbmUgKGRpc3BsYXkgKGNkciBzb3VyY2UtbGluZSkpKQotCQko ZGlzcGxheSAiOiAiKSkpCi0JICAoZGlzcGxheSAoaWYgKGVxPyBraW5kICd4cGFzcykgIlhQ QVNTIiAiRkFJTCIpKQotCSAgKGlmIHRlc3QtbmFtZQotCSAgICAgIChiZWdpbgotCQkoZGlz cGxheSAiICIpCi0JCShkaXNwbGF5IChjZHIgdGVzdC1uYW1lKSkpKQotCSAgKG5ld2xpbmUp KSkKLSAgICAoaWYgKG91dHB1dC1wb3J0PyBsb2cpCi0JKGJlZ2luCi0JICAoZGlzcGxheSAi VGVzdCBlbmQ6IiBsb2cpCi0JICAobmV3bGluZSBsb2cpCi0JICAobGV0IGxvb3AgKChsaXN0 ICh0ZXN0LXJlc3VsdC1hbGlzdCBydW5uZXIpKSkKLQkgICAgKGlmIChwYWlyPyBsaXN0KQot CQkobGV0ICgocGFpciAoY2FyIGxpc3QpKSkKLQkJICA7OyBXcml0ZSBvdXQgcHJvcGVydGll cyBub3Qgd3JpdHRlbiBvdXQgYnkgb24tdGVzdC1iZWdpbi4KLQkJICAoaWYgKG5vdCAobWVt cSAoY2FyIHBhaXIpCi0JCQkJICcodGVzdC1uYW1lIHNvdXJjZS1maWxlIHNvdXJjZS1saW5l IHNvdXJjZS1mb3JtKSkpCi0JCSAgICAgICgldGVzdC13cml0ZS1yZXN1bHQxIHBhaXIgbG9n KSkKLQkJICAobG9vcCAoY2RyIGxpc3QpKSkpKSkpKSkKLQotKGRlZmluZSAoJXRlc3Qtd3Jp dGUtcmVzdWx0MSBwYWlyIHBvcnQpCi0gIChkaXNwbGF5ICIgICIgcG9ydCkKLSAgKGRpc3Bs YXkgKGNhciBwYWlyKSBwb3J0KQotICAoZGlzcGxheSAiOiAiIHBvcnQpCi0gICh3cml0ZSAo Y2RyIHBhaXIpIHBvcnQpCi0gIChuZXdsaW5lIHBvcnQpKQotCi0oZGVmaW5lICh0ZXN0LXJl c3VsdC1zZXQhIHJ1bm5lciBwbmFtZSB2YWx1ZSkKLSAgKGxldCogKChhbGlzdCAodGVzdC1y ZXN1bHQtYWxpc3QgcnVubmVyKSkKLQkgKHAgKGFzc3EgcG5hbWUgYWxpc3QpKSkKLSAgICAo aWYgcAotCShzZXQtY2RyISBwIHZhbHVlKQotCSh0ZXN0LXJlc3VsdC1hbGlzdCEgcnVubmVy IChjb25zIChjb25zIHBuYW1lIHZhbHVlKSBhbGlzdCkpKSkpCi0KLShkZWZpbmUgKHRlc3Qt cmVzdWx0LWNsZWFyIHJ1bm5lcikKLSAgKHRlc3QtcmVzdWx0LWFsaXN0ISBydW5uZXIgJygp KSkKLQotKGRlZmluZSAodGVzdC1yZXN1bHQtcmVtb3ZlIHJ1bm5lciBwbmFtZSkKLSAgKGxl dCogKChhbGlzdCAodGVzdC1yZXN1bHQtYWxpc3QgcnVubmVyKSkKLQkgKHAgKGFzc3EgcG5h bWUgYWxpc3QpKSkKLSAgICAoaWYgcAotCSh0ZXN0LXJlc3VsdC1hbGlzdCEgcnVubmVyCi0J CQkJICAgKGxldCBsb29wICgociBhbGlzdCkpCi0JCQkJICAgICAoaWYgKGVxPyByIHApIChj ZHIgcikKLQkJCQkJIChjb25zIChjYXIgcikgKGxvb3AgKGNkciByKSkpKSkpKSkpCi0KLShk ZWZpbmUgKHRlc3QtcmVzdWx0LWtpbmQgLiByZXN0KQotICAobGV0ICgocnVubmVyIChpZiAo cGFpcj8gcmVzdCkgKGNhciByZXN0KSAodGVzdC1ydW5uZXItY3VycmVudCkpKSkKLSAgICAo dGVzdC1yZXN1bHQtcmVmIHJ1bm5lciAncmVzdWx0LWtpbmQpKSkKLQotKGRlZmluZSAodGVz dC1wYXNzZWQ/IC4gcmVzdCkKLSAgKGxldCAoKHJ1bm5lciAoaWYgKHBhaXI/IHJlc3QpIChj YXIgcmVzdCkgKHRlc3QtcnVubmVyLWdldCkpKSkKLSAgICAobWVtcSAodGVzdC1yZXN1bHQt cmVmIHJ1bm5lciAncmVzdWx0LWtpbmQpICcocGFzcyB4cGFzcykpKSkKLQotKGRlZmluZSAo JXRlc3QtcmVwb3J0LXJlc3VsdCkKLSAgKGxldCogKChyICh0ZXN0LXJ1bm5lci1nZXQpKQot CSAocmVzdWx0LWtpbmQgKHRlc3QtcmVzdWx0LWtpbmQgcikpKQotICAgIChjYXNlIHJlc3Vs dC1raW5kCi0gICAgICAoKHBhc3MpCi0gICAgICAgKHRlc3QtcnVubmVyLXBhc3MtY291bnQh IHIgKCsgMSAodGVzdC1ydW5uZXItcGFzcy1jb3VudCByKSkpKQotICAgICAgKChmYWlsKQot ICAgICAgICh0ZXN0LXJ1bm5lci1mYWlsLWNvdW50IQlyICgrIDEgKHRlc3QtcnVubmVyLWZh aWwtY291bnQgcikpKSkKLSAgICAgICgoeHBhc3MpCi0gICAgICAgKHRlc3QtcnVubmVyLXhw YXNzLWNvdW50ISByICgrIDEgKHRlc3QtcnVubmVyLXhwYXNzLWNvdW50IHIpKSkpCi0gICAg ICAoKHhmYWlsKQotICAgICAgICh0ZXN0LXJ1bm5lci14ZmFpbC1jb3VudCEgciAoKyAxICh0 ZXN0LXJ1bm5lci14ZmFpbC1jb3VudCByKSkpKQotICAgICAgKGVsc2UKLSAgICAgICAodGVz dC1ydW5uZXItc2tpcC1jb3VudCEgciAoKyAxICh0ZXN0LXJ1bm5lci1za2lwLWNvdW50IHIp KSkpKQotICAgICgldGVzdC1ydW5uZXItdG90YWwtY291bnQhIHIgKCsgMSAoJXRlc3QtcnVu bmVyLXRvdGFsLWNvdW50IHIpKSkKLSAgICAoKHRlc3QtcnVubmVyLW9uLXRlc3QtZW5kIHIp IHIpKSkKLQotKGNvbmQtZXhwYW5kCi0gKGd1aWxlCi0gIChkZWZpbmUtc3ludGF4ICV0ZXN0 LWV2YWx1YXRlLXdpdGgtY2F0Y2gKLSAgICAoc3ludGF4LXJ1bGVzICgpCi0gICAgICAoKCV0 ZXN0LWV2YWx1YXRlLXdpdGgtY2F0Y2ggdGVzdC1leHByZXNzaW9uKQotICAgICAgIChjYXRj aCAjdAotICAgICAgICAgKGxhbWJkYSAoKSB0ZXN0LWV4cHJlc3Npb24pCi0gICAgICAgICAo bGFtYmRhIChrZXkgLiBhcmdzKQotICAgICAgICAgICAodGVzdC1yZXN1bHQtc2V0ISAodGVz dC1ydW5uZXItY3VycmVudCkgJ2FjdHVhbC1lcnJvcgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY29ucyBrZXkgYXJncykpCi0gICAgICAgICAgICNmKSkpKSkpCi0gKGthd2EK LSAgKGRlZmluZS1zeW50YXggJXRlc3QtZXZhbHVhdGUtd2l0aC1jYXRjaAotICAgIChzeW50 YXgtcnVsZXMgKCkKLSAgICAgICgoJXRlc3QtZXZhbHVhdGUtd2l0aC1jYXRjaCB0ZXN0LWV4 cHJlc3Npb24pCi0gICAgICAgKHRyeS1jYXRjaCB0ZXN0LWV4cHJlc3Npb24KLQkJICAoZXgg PGphdmEubGFuZy5UaHJvd2FibGU+Ci0JCSAgICAgICh0ZXN0LXJlc3VsdC1zZXQhICh0ZXN0 LXJ1bm5lci1jdXJyZW50KSAnYWN0dWFsLWVycm9yIGV4KQotCQkgICAgICAjZikpKSkpKQot IChzcmZpLTM0Ci0gIChkZWZpbmUtc3ludGF4ICV0ZXN0LWV2YWx1YXRlLXdpdGgtY2F0Y2gK LSAgICAoc3ludGF4LXJ1bGVzICgpCi0gICAgICAoKCV0ZXN0LWV2YWx1YXRlLXdpdGgtY2F0 Y2ggdGVzdC1leHByZXNzaW9uKQotICAgICAgIChndWFyZCAoZXJyIChlbHNlICNmKSkgdGVz dC1leHByZXNzaW9uKSkpKSkKLSAoY2hpY2tlbgotICAoZGVmaW5lLXN5bnRheCAldGVzdC1l dmFsdWF0ZS13aXRoLWNhdGNoCi0gICAgKHN5bnRheC1ydWxlcyAoKQotICAgICAgKCgldGVz dC1ldmFsdWF0ZS13aXRoLWNhdGNoIHRlc3QtZXhwcmVzc2lvbikKLSAgICAgICAoY29uZGl0 aW9uLWNhc2UgdGVzdC1leHByZXNzaW9uIChleCAoKSAjZikpKSkpKQotIChlbHNlCi0gIChk ZWZpbmUtc3ludGF4ICV0ZXN0LWV2YWx1YXRlLXdpdGgtY2F0Y2gKLSAgICAoc3ludGF4LXJ1 bGVzICgpCi0gICAgICAoKCV0ZXN0LWV2YWx1YXRlLXdpdGgtY2F0Y2ggdGVzdC1leHByZXNz aW9uKQotICAgICAgIHRlc3QtZXhwcmVzc2lvbikpKSkpCi0JICAgIAotKGNvbmQtZXhwYW5k Ci0gKChvciBrYXdhIG16c2NoZW1lKQotICAoY29uZC1leHBhbmQKLSAgIChtenNjaGVtZQot ICAgIChkZWZpbmUtZm9yLXN5bnRheCAoJXRlc3Qtc3ludGF4LWZpbGUgZm9ybSkKLSAgICAg IChsZXQgKChzb3VyY2UgKHN5bnRheC1zb3VyY2UgZm9ybSkpKQotCShjb25kICgoc3RyaW5n PyBzb3VyY2UpIGZpbGUpCi0JCQkJKChwYXRoPyBzb3VyY2UpIChwYXRoLT5zdHJpbmcgc291 cmNlKSkKLQkJCQkoZWxzZSAjZikpKSkpCi0gICAoa2F3YQotICAgIChkZWZpbmUgKCV0ZXN0 LXN5bnRheC1maWxlIGZvcm0pCi0gICAgICAoc3ludGF4LXNvdXJjZSBmb3JtKSkpKQotICAo ZGVmaW5lICgldGVzdC1zb3VyY2UtbGluZTIgZm9ybSkKLSAgICAobGV0KiAoKGxpbmUgKHN5 bnRheC1saW5lIGZvcm0pKQotCSAgIChmaWxlICgldGVzdC1zeW50YXgtZmlsZSBmb3JtKSkK LQkgICAobGluZS1wYWlyIChpZiBsaW5lIChsaXN0IChjb25zICdzb3VyY2UtbGluZSBsaW5l KSkgJygpKSkpCi0gICAgICAoY29ucyAoY29ucyAnc291cmNlLWZvcm0gKHN5bnRheC1vYmpl Y3QtPmRhdHVtIGZvcm0pKQotCSAgICAoaWYgZmlsZSAoY29ucyAoY29ucyAnc291cmNlLWZp bGUgZmlsZSkgbGluZS1wYWlyKSBsaW5lLXBhaXIpKSkpKQotIChndWlsZS0yCi0gIChkZWZp bmUgKCV0ZXN0LXNvdXJjZS1saW5lMiBmb3JtKQotICAgIChsZXQqICgoc3JjLXByb3BzIChz eW50YXgtc291cmNlIGZvcm0pKQotICAgICAgICAgICAoZmlsZSAoYW5kIHNyYy1wcm9wcyAo YXNzcS1yZWYgc3JjLXByb3BzICdmaWxlbmFtZSkpKQotICAgICAgICAgICAobGluZSAoYW5k IHNyYy1wcm9wcyAoYXNzcS1yZWYgc3JjLXByb3BzICdsaW5lKSkpCi0gICAgICAgICAgIChm aWxlLWFsaXN0IChpZiBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBgKChzb3Vy Y2UtZmlsZSAuICxmaWxlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICcoKSkpCi0g ICAgICAgICAgIChsaW5lLWFsaXN0IChpZiBsaW5lCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICBgKChzb3VyY2UtbGluZSAuICwoKyBsaW5lIDEpKSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICcoKSkpKQotICAgICAgKGRhdHVtLT5zeW50YXggKHN5bnRheCBoZXJlKQot ICAgICAgICAgICAgICAgICAgICAgYCgoc291cmNlLWZvcm0gLiAsKHN5bnRheC0+ZGF0dW0g Zm9ybSkpCi0gICAgICAgICAgICAgICAgICAgICAgICxAZmlsZS1hbGlzdAotICAgICAgICAg ICAgICAgICAgICAgICAsQGxpbmUtYWxpc3QpKSkpKQotIChlbHNlCi0gIChkZWZpbmUgKCV0 ZXN0LXNvdXJjZS1saW5lMiBmb3JtKQotICAgICcoKSkpKQotCi0oZGVmaW5lICgldGVzdC1v bi10ZXN0LWJlZ2luIHIpCi0gICgldGVzdC1zaG91bGQtZXhlY3V0ZSByKQotICAoKHRlc3Qt cnVubmVyLW9uLXRlc3QtYmVnaW4gcikgcikKLSAgKG5vdCAoZXE/ICdza2lwICh0ZXN0LXJl c3VsdC1yZWYgciAncmVzdWx0LWtpbmQpKSkpCi0KLShkZWZpbmUgKCV0ZXN0LW9uLXRlc3Qt ZW5kIHIgcmVzdWx0KQotICAgICh0ZXN0LXJlc3VsdC1zZXQhIHIgJ3Jlc3VsdC1raW5kCi0J CSAgICAgIChpZiAoZXE/ICh0ZXN0LXJlc3VsdC1yZWYgciAncmVzdWx0LWtpbmQpICd4ZmFp bCkKLQkJCSAgKGlmIHJlc3VsdCAneHBhc3MgJ3hmYWlsKQotCQkJICAoaWYgcmVzdWx0ICdw YXNzICdmYWlsKSkpKQotCi0oZGVmaW5lICh0ZXN0LXJ1bm5lci10ZXN0LW5hbWUgcnVubmVy KQotICAodGVzdC1yZXN1bHQtcmVmIHJ1bm5lciAndGVzdC1uYW1lICIiKSkKLQotKGRlZmlu ZS1zeW50YXggJXRlc3QtY29tcDJib2R5Ci0gIChzeW50YXgtcnVsZXMgKCkKLQkJKCgldGVz dC1jb21wMmJvZHkgciBjb21wIGV4cGVjdGVkIGV4cHIpCi0JCSAobGV0ICgpCi0JCSAgIChp ZiAoJXRlc3Qtb24tdGVzdC1iZWdpbiByKQotCQkgICAgICAgKGxldCAoKGV4cCBleHBlY3Rl ZCkpCi0JCQkgKHRlc3QtcmVzdWx0LXNldCEgciAnZXhwZWN0ZWQtdmFsdWUgZXhwKQotCQkJ IChsZXQgKChyZXMgKCV0ZXN0LWV2YWx1YXRlLXdpdGgtY2F0Y2ggZXhwcikpKQotCQkJICAg KHRlc3QtcmVzdWx0LXNldCEgciAnYWN0dWFsLXZhbHVlIHJlcykKLQkJCSAgICgldGVzdC1v bi10ZXN0LWVuZCByIChjb21wIGV4cCByZXMpKSkpKQotCQkgICAoJXRlc3QtcmVwb3J0LXJl c3VsdCkpKSkpCi0KLShkZWZpbmUgKCV0ZXN0LWFwcHJveGltYXRlPSBlcnJvcikKLSAgKGxh bWJkYSAodmFsdWUgZXhwZWN0ZWQpCi0gICAgKGxldCAoKHJ2YWwgKHJlYWwtcGFydCB2YWx1 ZSkpCi0gICAgICAgICAgKGl2YWwgKGltYWctcGFydCB2YWx1ZSkpCi0gICAgICAgICAgKHJl eHAgKHJlYWwtcGFydCBleHBlY3RlZCkpCi0gICAgICAgICAgKGlleHAgKGltYWctcGFydCBl eHBlY3RlZCkpKQotICAgICAgKGFuZCAoPj0gcnZhbCAoLSByZXhwIGVycm9yKSkKLSAgICAg ICAgICAgKD49IGl2YWwgKC0gaWV4cCBlcnJvcikpCi0gICAgICAgICAgICg8PSBydmFsICgr IHJleHAgZXJyb3IpKQotICAgICAgICAgICAoPD0gaXZhbCAoKyBpZXhwIGVycm9yKSkpKSkp Ci0KLShkZWZpbmUtc3ludGF4ICV0ZXN0LWNvbXAxYm9keQotICAoc3ludGF4LXJ1bGVzICgp Ci0gICAgKCgldGVzdC1jb21wMWJvZHkgciBleHByKQotICAgICAobGV0ICgpCi0gICAgICAg KGlmICgldGVzdC1vbi10ZXN0LWJlZ2luIHIpCi0JICAgKGxldCAoKQotCSAgICAgKGxldCAo KHJlcyAoJXRlc3QtZXZhbHVhdGUtd2l0aC1jYXRjaCBleHByKSkpCi0JICAgICAgICh0ZXN0 LXJlc3VsdC1zZXQhIHIgJ2FjdHVhbC12YWx1ZSByZXMpCi0JICAgICAgICgldGVzdC1vbi10 ZXN0LWVuZCByIHJlcykpKSkKLSAgICAgICAoJXRlc3QtcmVwb3J0LXJlc3VsdCkpKSkpCi0K LShjb25kLWV4cGFuZAotICgob3Iga2F3YSBtenNjaGVtZSBndWlsZS0yKQotICA7OyBTaG91 bGQgYmUgbWFkZSB0byB3b3JrIGZvciBhbnkgU2NoZW1lIHdpdGggc3ludGF4LWNhc2UKLSAg OzsgSG93ZXZlciwgSSBoYXZlbid0IGdvdHRlbiB0aGUgcXVvdGluZyB3b3JraW5nLiAgRklY TUUuCi0gIChkZWZpbmUtc3ludGF4IHRlc3QtZW5kCi0gICAgKGxhbWJkYSAoeCkKLSAgICAg IChzeW50YXgtY2FzZSAobGlzdCB4IChsaXN0IChzeW50YXggcXVvdGUpICgldGVzdC1zb3Vy Y2UtbGluZTIgeCkpKSAoKQotCSgoKG1hYyBzdWl0ZS1uYW1lKSBsaW5lKQotCSAoc3ludGF4 Ci0JICAoJXRlc3QtZW5kIHN1aXRlLW5hbWUgbGluZSkpKQotCSgoKG1hYykgbGluZSkKLQkg KHN5bnRheAotCSAgKCV0ZXN0LWVuZCAjZiBsaW5lKSkpKSkpCi0gIChkZWZpbmUtc3ludGF4 IHRlc3QtYXNzZXJ0Ci0gICAgKGxhbWJkYSAoeCkKLSAgICAgIChzeW50YXgtY2FzZSAobGlz dCB4IChsaXN0IChzeW50YXggcXVvdGUpICgldGVzdC1zb3VyY2UtbGluZTIgeCkpKSAoKQot CSgoKG1hYyB0bmFtZSBleHByKSBsaW5lKQotCSAoc3ludGF4Ci0JICAobGV0KiAoKHIgKHRl c3QtcnVubmVyLWdldCkpCi0JCSAobmFtZSB0bmFtZSkpCi0JICAgICh0ZXN0LXJlc3VsdC1h bGlzdCEgciAoY29ucyAoY29ucyAndGVzdC1uYW1lIHRuYW1lKSBsaW5lKSkKLQkgICAgKCV0 ZXN0LWNvbXAxYm9keSByIGV4cHIpKSkpCi0JKCgobWFjIGV4cHIpIGxpbmUpCi0JIChzeW50 YXgKLQkgIChsZXQqICgociAodGVzdC1ydW5uZXItZ2V0KSkpCi0JICAgICh0ZXN0LXJlc3Vs dC1hbGlzdCEgciBsaW5lKQotCSAgICAoJXRlc3QtY29tcDFib2R5IHIgZXhwcikpKSkpKSkK LSAgKGRlZmluZSAoJXRlc3QtY29tcDIgY29tcCB4KQotICAgIChzeW50YXgtY2FzZSAobGlz dCB4IChsaXN0IChzeW50YXggcXVvdGUpICgldGVzdC1zb3VyY2UtbGluZTIgeCkpIGNvbXAp ICgpCi0gICAgICAoKChtYWMgdG5hbWUgZXhwZWN0ZWQgZXhwcikgbGluZSBjb21wKQotICAg ICAgIChzeW50YXgKLQkobGV0KiAoKHIgKHRlc3QtcnVubmVyLWdldCkpCi0JICAgICAgIChu YW1lIHRuYW1lKSkKLQkgICh0ZXN0LXJlc3VsdC1hbGlzdCEgciAoY29ucyAoY29ucyAndGVz dC1uYW1lIHRuYW1lKSBsaW5lKSkKLQkgICgldGVzdC1jb21wMmJvZHkgciBjb21wIGV4cGVj dGVkIGV4cHIpKSkpCi0gICAgICAoKChtYWMgZXhwZWN0ZWQgZXhwcikgbGluZSBjb21wKQot ICAgICAgIChzeW50YXgKLQkobGV0KiAoKHIgKHRlc3QtcnVubmVyLWdldCkpKQotCSAgKHRl c3QtcmVzdWx0LWFsaXN0ISByIGxpbmUpCi0JICAoJXRlc3QtY29tcDJib2R5IHIgY29tcCBl eHBlY3RlZCBleHByKSkpKSkpCi0gIChkZWZpbmUtc3ludGF4IHRlc3QtZXF2Ci0gICAgKGxh bWJkYSAoeCkgKCV0ZXN0LWNvbXAyIChzeW50YXggZXF2PykgeCkpKQotICAoZGVmaW5lLXN5 bnRheCB0ZXN0LWVxCi0gICAgKGxhbWJkYSAoeCkgKCV0ZXN0LWNvbXAyIChzeW50YXggZXE/ KSB4KSkpCi0gIChkZWZpbmUtc3ludGF4IHRlc3QtZXF1YWwKLSAgICAobGFtYmRhICh4KSAo JXRlc3QtY29tcDIgKHN5bnRheCBlcXVhbD8pIHgpKSkKLSAgKGRlZmluZS1zeW50YXggdGVz dC1hcHByb3hpbWF0ZSA7OyBGSVhNRSAtIG5lZWRlZCBmb3Igbm9uLUthd2EKLSAgICAobGFt YmRhICh4KQotICAgICAgKHN5bnRheC1jYXNlIChsaXN0IHggKGxpc3QgKHN5bnRheCBxdW90 ZSkgKCV0ZXN0LXNvdXJjZS1saW5lMiB4KSkpICgpCi0gICAgICAoKChtYWMgdG5hbWUgZXhw ZWN0ZWQgZXhwciBlcnJvcikgbGluZSkKLSAgICAgICAoc3ludGF4Ci0JKGxldCogKChyICh0 ZXN0LXJ1bm5lci1nZXQpKQotCSAgICAgICAobmFtZSB0bmFtZSkpCi0JICAodGVzdC1yZXN1 bHQtYWxpc3QhIHIgKGNvbnMgKGNvbnMgJ3Rlc3QtbmFtZSB0bmFtZSkgbGluZSkpCi0JICAo JXRlc3QtY29tcDJib2R5IHIgKCV0ZXN0LWFwcHJveGltYXRlPSBlcnJvcikgZXhwZWN0ZWQg ZXhwcikpKSkKLSAgICAgICgoKG1hYyBleHBlY3RlZCBleHByIGVycm9yKSBsaW5lKQotICAg ICAgIChzeW50YXgKLQkobGV0KiAoKHIgKHRlc3QtcnVubmVyLWdldCkpKQotCSAgKHRlc3Qt cmVzdWx0LWFsaXN0ISByIGxpbmUpCi0JICAoJXRlc3QtY29tcDJib2R5IHIgKCV0ZXN0LWFw cHJveGltYXRlPSBlcnJvcikgZXhwZWN0ZWQgZXhwcikpKSkpKSkpCi0gKGVsc2UKLSAgKGRl ZmluZS1zeW50YXggdGVzdC1lbmQKLSAgICAoc3ludGF4LXJ1bGVzICgpCi0gICAgICAoKHRl c3QtZW5kKQotICAgICAgICgldGVzdC1lbmQgI2YgJygpKSkKLSAgICAgICgodGVzdC1lbmQg c3VpdGUtbmFtZSkKLSAgICAgICAoJXRlc3QtZW5kIHN1aXRlLW5hbWUgJygpKSkpKQotICAo ZGVmaW5lLXN5bnRheCB0ZXN0LWFzc2VydAotICAgIChzeW50YXgtcnVsZXMgKCkKLSAgICAg ICgodGVzdC1hc3NlcnQgdG5hbWUgdGVzdC1leHByZXNzaW9uKQotICAgICAgIChsZXQqICgo ciAodGVzdC1ydW5uZXItZ2V0KSkKLQkgICAgICAobmFtZSB0bmFtZSkpCi0JICh0ZXN0LXJl c3VsdC1hbGlzdCEgciAnKCh0ZXN0LW5hbWUgLiB0bmFtZSkpKQotCSAoJXRlc3QtY29tcDFi b2R5IHIgdGVzdC1leHByZXNzaW9uKSkpCi0gICAgICAoKHRlc3QtYXNzZXJ0IHRlc3QtZXhw cmVzc2lvbikKLSAgICAgICAobGV0KiAoKHIgKHRlc3QtcnVubmVyLWdldCkpKQotCSAodGVz dC1yZXN1bHQtYWxpc3QhIHIgJygpKQotCSAoJXRlc3QtY29tcDFib2R5IHIgdGVzdC1leHBy ZXNzaW9uKSkpKSkKLSAgKGRlZmluZS1zeW50YXggJXRlc3QtY29tcDIKLSAgICAoc3ludGF4 LXJ1bGVzICgpCi0gICAgICAoKCV0ZXN0LWNvbXAyIGNvbXAgdG5hbWUgZXhwZWN0ZWQgZXhw cikKLSAgICAgICAobGV0KiAoKHIgKHRlc3QtcnVubmVyLWdldCkpCi0JICAgICAgKG5hbWUg dG5hbWUpKQotCSAodGVzdC1yZXN1bHQtYWxpc3QhIHIgKGxpc3QgKGNvbnMgJ3Rlc3QtbmFt ZSB0bmFtZSkpKQotCSAoJXRlc3QtY29tcDJib2R5IHIgY29tcCBleHBlY3RlZCBleHByKSkp Ci0gICAgICAoKCV0ZXN0LWNvbXAyIGNvbXAgZXhwZWN0ZWQgZXhwcikKLSAgICAgICAobGV0 KiAoKHIgKHRlc3QtcnVubmVyLWdldCkpKQotCSAodGVzdC1yZXN1bHQtYWxpc3QhIHIgJygp KQotCSAoJXRlc3QtY29tcDJib2R5IHIgY29tcCBleHBlY3RlZCBleHByKSkpKSkKLSAgKGRl ZmluZS1zeW50YXggdGVzdC1lcXVhbAotICAgIChzeW50YXgtcnVsZXMgKCkKLSAgICAgICgo dGVzdC1lcXVhbCAuIHJlc3QpCi0gICAgICAgKCV0ZXN0LWNvbXAyIGVxdWFsPyAuIHJlc3Qp KSkpCi0gIChkZWZpbmUtc3ludGF4IHRlc3QtZXF2Ci0gICAgKHN5bnRheC1ydWxlcyAoKQot ICAgICAgKCh0ZXN0LWVxdiAuIHJlc3QpCi0gICAgICAgKCV0ZXN0LWNvbXAyIGVxdj8gLiBy ZXN0KSkpKQotICAoZGVmaW5lLXN5bnRheCB0ZXN0LWVxCi0gICAgKHN5bnRheC1ydWxlcyAo KQotICAgICAgKCh0ZXN0LWVxIC4gcmVzdCkKLSAgICAgICAoJXRlc3QtY29tcDIgZXE/IC4g cmVzdCkpKSkKLSAgKGRlZmluZS1zeW50YXggdGVzdC1hcHByb3hpbWF0ZQotICAgIChzeW50 YXgtcnVsZXMgKCkKLSAgICAgICgodGVzdC1hcHByb3hpbWF0ZSB0bmFtZSBleHBlY3RlZCBl eHByIGVycm9yKQotICAgICAgICgldGVzdC1jb21wMiAoJXRlc3QtYXBwcm94aW1hdGU9IGVy cm9yKSB0bmFtZSBleHBlY3RlZCBleHByKSkKLSAgICAgICgodGVzdC1hcHByb3hpbWF0ZSBl eHBlY3RlZCBleHByIGVycm9yKQotICAgICAgICgldGVzdC1jb21wMiAoJXRlc3QtYXBwcm94 aW1hdGU9IGVycm9yKSBleHBlY3RlZCBleHByKSkpKSkpCi0KLShjb25kLWV4cGFuZAotIChn dWlsZQotICAoZGVmaW5lLXN5bnRheCAldGVzdC1lcnJvcgotICAgIChzeW50YXgtcnVsZXMg KCkKLSAgICAgICgoJXRlc3QtZXJyb3IgciBldHlwZSBleHByKQotICAgICAgIChjb25kICgo JXRlc3Qtb24tdGVzdC1iZWdpbiByKQotICAgICAgICAgICAgICAobGV0ICgoZXQgZXR5cGUp KQotICAgICAgICAgICAgICAgICh0ZXN0LXJlc3VsdC1zZXQhIHIgJ2V4cGVjdGVkLWVycm9y IGV0KQotICAgICAgICAgICAgICAgICgldGVzdC1vbi10ZXN0LWVuZCByCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjYXRjaCAjdAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh0ZXN0LXJlc3VsdC1zZXQhIHIgJ2FjdHVhbC12YWx1ZSBleHBy KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2YpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoa2V5IC4gYXJncykKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IFRPRE86IGRlY2lkZSBo b3cgdG8gc3BlY2lmeSBleHBlY3RlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOzsgZXJyb3IgdHlwZXMgZm9yIEd1aWxlLgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHRlc3QtcmVzdWx0LXNldCEgciAnYWN0dWFsLWVycm9y Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29ucyBrZXkgYXJncykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjdCkpKQotICAgICAgICAgICAgICAgICgldGVzdC1yZXBvcnQtcmVzdWx0KSkp KSkpKSkKLSAobXpzY2hlbWUKLSAgKGRlZmluZS1zeW50YXggJXRlc3QtZXJyb3IKLSAgICAo c3ludGF4LXJ1bGVzICgpCi0gICAgICAoKCV0ZXN0LWVycm9yIHIgZXR5cGUgZXhwcikKLSAg ICAgICAoJXRlc3QtY29tcDFib2R5IHIgKHdpdGgtaGFuZGxlcnMgKCgobGFtYmRhIChoKSAj dCkgKGxhbWJkYSAoaCkgI3QpKSkKLQkJCQkJIChsZXQgKCkKLQkJCQkJICAgKHRlc3QtcmVz dWx0LXNldCEgciAnYWN0dWFsLXZhbHVlIGV4cHIpCi0JCQkJCSAgICNmKSkpKSkpKQotIChj aGlja2VuCi0gIChkZWZpbmUtc3ludGF4ICV0ZXN0LWVycm9yCi0gICAgKHN5bnRheC1ydWxl cyAoKQotICAgICAgKCgldGVzdC1lcnJvciByIGV0eXBlIGV4cHIpCi0gICAgICAgICgldGVz dC1jb21wMWJvZHkgciAoY29uZGl0aW9uLWNhc2UgZXhwciAoZXggKCkgI3QpKSkpKSkpCi0g KGthd2EKLSAgKGRlZmluZS1zeW50YXggJXRlc3QtZXJyb3IKLSAgICAoc3ludGF4LXJ1bGVz ICgpCi0gICAgICAoKCV0ZXN0LWVycm9yIHIgI3QgZXhwcikKLSAgICAgICAoY29uZCAoKCV0 ZXN0LW9uLXRlc3QtYmVnaW4gcikKLQkgICAgICAodGVzdC1yZXN1bHQtc2V0ISByICdleHBl Y3RlZC1lcnJvciAjdCkKLQkgICAgICAoJXRlc3Qtb24tdGVzdC1lbmQgcgotCQkJCSAodHJ5 LWNhdGNoCi0JCQkJICAobGV0ICgpCi0JCQkJICAgICh0ZXN0LXJlc3VsdC1zZXQhIHIgJ2Fj dHVhbC12YWx1ZSBleHByKQotCQkJCSAgICAjZikKLQkJCQkgIChleCA8amF2YS5sYW5nLlRo cm93YWJsZT4KLQkJCQkgICAgICAodGVzdC1yZXN1bHQtc2V0ISByICdhY3R1YWwtZXJyb3Ig ZXgpCi0JCQkJICAgICAgI3QpKSkKLQkgICAgICAoJXRlc3QtcmVwb3J0LXJlc3VsdCkpKSkK LSAgICAgICgoJXRlc3QtZXJyb3IgciBldHlwZSBleHByKQotICAgICAgIChpZiAoJXRlc3Qt b24tdGVzdC1iZWdpbiByKQotCSAgIChsZXQgKChldCBldHlwZSkpCi0JICAgICAodGVzdC1y ZXN1bHQtc2V0ISByICdleHBlY3RlZC1lcnJvciBldCkKLQkgICAgICgldGVzdC1vbi10ZXN0 LWVuZCByCi0JCQkJKHRyeS1jYXRjaAotCQkJCSAobGV0ICgpCi0JCQkJICAgKHRlc3QtcmVz dWx0LXNldCEgciAnYWN0dWFsLXZhbHVlIGV4cHIpCi0JCQkJICAgI2YpCi0JCQkJIChleCA8 amF2YS5sYW5nLlRocm93YWJsZT4KLQkJCQkgICAgICh0ZXN0LXJlc3VsdC1zZXQhIHIgJ2Fj dHVhbC1lcnJvciBleCkKLQkJCQkgICAgIChjb25kICgoYW5kIChpbnN0YW5jZT8gZXQgPGdu dS5ieXRlY29kZS5DbGFzc1R5cGU+KQotCQkJCQkJIChnbnUuYnl0ZWNvZGUuQ2xhc3NUeXBl OmlzU3ViY2xhc3MgZXQgPGphdmEubGFuZy5UaHJvd2FibGU+KSkKLQkJCQkJICAgIChpbnN0 YW5jZT8gZXggZXQpKQotCQkJCQkgICAoZWxzZSAjdCkpKSkpCi0JICAgICAoJXRlc3QtcmVw b3J0LXJlc3VsdCkpKSkpKSkKLSAoKGFuZCBzcmZpLTM0IHNyZmktMzUpCi0gIChkZWZpbmUt c3ludGF4ICV0ZXN0LWVycm9yCi0gICAgKHN5bnRheC1ydWxlcyAoKQotICAgICAgKCgldGVz dC1lcnJvciByIGV0eXBlIGV4cHIpCi0gICAgICAgKCV0ZXN0LWNvbXAxYm9keSByIChndWFy ZCAoZXggKChjb25kaXRpb24tdHlwZT8gZXR5cGUpCi0JCSAgIChhbmQgKGNvbmRpdGlvbj8g ZXgpIChjb25kaXRpb24taGFzLXR5cGU/IGV4IGV0eXBlKSkpCi0JCSAgKChwcm9jZWR1cmU/ IGV0eXBlKQotCQkgICAoZXR5cGUgZXgpKQotCQkgICgoZXF1YWw/IGV0eXBlICN0KQotCQkg ICAjdCkKLQkJICAoZWxzZSAjdCkpCi0JICAgICAgZXhwciAjZikpKSkpKQotIChzcmZpLTM0 Ci0gIChkZWZpbmUtc3ludGF4ICV0ZXN0LWVycm9yCi0gICAgKHN5bnRheC1ydWxlcyAoKQot ICAgICAgKCgldGVzdC1lcnJvciByIGV0eXBlIGV4cHIpCi0gICAgICAgKCV0ZXN0LWNvbXAx Ym9keSByIChndWFyZCAoZXggKGVsc2UgI3QpKSBleHByICNmKSkpKSkpCi0gKGVsc2UKLSAg KGRlZmluZS1zeW50YXggJXRlc3QtZXJyb3IKLSAgICAoc3ludGF4LXJ1bGVzICgpCi0gICAg ICAoKCV0ZXN0LWVycm9yIHIgZXR5cGUgZXhwcikKLSAgICAgICAoYmVnaW4KLQkgKCh0ZXN0 LXJ1bm5lci1vbi10ZXN0LWJlZ2luIHIpIHIpCi0JICh0ZXN0LXJlc3VsdC1zZXQhIHIgJ3Jl c3VsdC1raW5kICdza2lwKQotCSAoJXRlc3QtcmVwb3J0LXJlc3VsdCkpKSkpKSkKLQotKGNv bmQtZXhwYW5kCi0gKChvciBrYXdhIG16c2NoZW1lIGd1aWxlLTIpCi0KLSAgKGRlZmluZS1z eW50YXggdGVzdC1lcnJvcgotICAgIChsYW1iZGEgKHgpCi0gICAgICAoc3ludGF4LWNhc2Ug KGxpc3QgeCAobGlzdCAoc3ludGF4IHF1b3RlKSAoJXRlc3Qtc291cmNlLWxpbmUyIHgpKSkg KCkKLQkoKChtYWMgdG5hbWUgZXR5cGUgZXhwcikgbGluZSkKLQkgKHN5bnRheAotCSAgKGxl dCogKChyICh0ZXN0LXJ1bm5lci1nZXQpKQotCQkgKG5hbWUgdG5hbWUpKQotCSAgICAodGVz dC1yZXN1bHQtYWxpc3QhIHIgKGNvbnMgKGNvbnMgJ3Rlc3QtbmFtZSB0bmFtZSkgbGluZSkp Ci0JICAgICgldGVzdC1lcnJvciByIGV0eXBlIGV4cHIpKSkpCi0JKCgobWFjIGV0eXBlIGV4 cHIpIGxpbmUpCi0JIChzeW50YXgKLQkgIChsZXQqICgociAodGVzdC1ydW5uZXItZ2V0KSkp Ci0JICAgICh0ZXN0LXJlc3VsdC1hbGlzdCEgciBsaW5lKQotCSAgICAoJXRlc3QtZXJyb3Ig ciBldHlwZSBleHByKSkpKQotCSgoKG1hYyBleHByKSBsaW5lKQotCSAoc3ludGF4Ci0JICAo bGV0KiAoKHIgKHRlc3QtcnVubmVyLWdldCkpKQotCSAgICAodGVzdC1yZXN1bHQtYWxpc3Qh IHIgbGluZSkKLQkgICAgKCV0ZXN0LWVycm9yIHIgI3QgZXhwcikpKSkpKSkpCi0gKGVsc2UK LSAgKGRlZmluZS1zeW50YXggdGVzdC1lcnJvcgotICAgIChzeW50YXgtcnVsZXMgKCkKLSAg ICAgICgodGVzdC1lcnJvciBuYW1lIGV0eXBlIGV4cHIpCi0gICAgICAgKGxldCAoKHIgKHRl c3QtcnVubmVyLWdldCkpKQotICAgICAgICAgKHRlc3QtcmVzdWx0LWFsaXN0ISByIGAoKHRl c3QtbmFtZSAuICxuYW1lKSkpCi0gICAgICAgICAoJXRlc3QtZXJyb3IgciBldHlwZSBleHBy KSkpCi0gICAgICAoKHRlc3QtZXJyb3IgZXR5cGUgZXhwcikKLSAgICAgICAobGV0ICgociAo dGVzdC1ydW5uZXItZ2V0KSkpCi0gICAgICAgICAodGVzdC1yZXN1bHQtYWxpc3QhIHIgJygp KQotICAgICAgICAgKCV0ZXN0LWVycm9yIHIgZXR5cGUgZXhwcikpKQotICAgICAgKCh0ZXN0 LWVycm9yIGV4cHIpCi0gICAgICAgKGxldCAoKHIgKHRlc3QtcnVubmVyLWdldCkpKQotICAg ICAgICAgKHRlc3QtcmVzdWx0LWFsaXN0ISByICcoKSkKLSAgICAgICAgICgldGVzdC1lcnJv ciByICN0IGV4cHIpKSkpKSkpCi0KLShkZWZpbmUgKHRlc3QtYXBwbHkgZmlyc3QgLiByZXN0 KQotICAoaWYgKHRlc3QtcnVubmVyPyBmaXJzdCkKLSAgICAgICh0ZXN0LXdpdGgtcnVubmVy IGZpcnN0IChhcHBseSB0ZXN0LWFwcGx5IHJlc3QpKQotICAgICAgKGxldCAoKHIgKHRlc3Qt cnVubmVyLWN1cnJlbnQpKSkKLQkoaWYgcgotCSAgICAobGV0ICgocnVuLWxpc3QgKCV0ZXN0 LXJ1bm5lci1ydW4tbGlzdCByKSkpCi0JICAgICAgKGNvbmQgKChudWxsPyByZXN0KQotCQkg ICAgICgldGVzdC1ydW5uZXItcnVuLWxpc3QhIHIgKHJldmVyc2UgcnVuLWxpc3QpKQotCQkg ICAgIChmaXJzdCkpIDs7IGFjdHVhbGx5IGFwcGx5IHByb2NlZHVyZSB0aHVuawotCQkgICAg KGVsc2UKLQkJICAgICAoJXRlc3QtcnVubmVyLXJ1bi1saXN0IQotCQkgICAgICByCi0JCSAg ICAgIChpZiAoZXE/IHJ1bi1saXN0ICN0KSAobGlzdCBmaXJzdCkgKGNvbnMgZmlyc3QgcnVu LWxpc3QpKSkKLQkJICAgICAoYXBwbHkgdGVzdC1hcHBseSByZXN0KQotCQkgICAgICgldGVz dC1ydW5uZXItcnVuLWxpc3QhIHIgcnVuLWxpc3QpKSkpCi0JICAgIChsZXQgKChyICh0ZXN0 LXJ1bm5lci1jcmVhdGUpKSkKLQkgICAgICAodGVzdC13aXRoLXJ1bm5lciByIChhcHBseSB0 ZXN0LWFwcGx5IGZpcnN0IHJlc3QpKQotCSAgICAgICgodGVzdC1ydW5uZXItb24tZmluYWwg cikgcikpKSkpKQotCi0oZGVmaW5lLXN5bnRheCB0ZXN0LXdpdGgtcnVubmVyCi0gIChzeW50 YXgtcnVsZXMgKCkKLSAgICAoKHRlc3Qtd2l0aC1ydW5uZXIgcnVubmVyIGZvcm0gLi4uKQot ICAgICAobGV0ICgoc2F2ZWQtcnVubmVyICh0ZXN0LXJ1bm5lci1jdXJyZW50KSkpCi0gICAg ICAgKGR5bmFtaWMtd2luZAotICAgICAgICAgICAobGFtYmRhICgpICh0ZXN0LXJ1bm5lci1j dXJyZW50IHJ1bm5lcikpCi0gICAgICAgICAgIChsYW1iZGEgKCkgZm9ybSAuLi4pCi0gICAg ICAgICAgIChsYW1iZGEgKCkgKHRlc3QtcnVubmVyLWN1cnJlbnQgc2F2ZWQtcnVubmVyKSkp KSkpKQotCi07OzsgUHJlZGljYXRlcwotCi0oZGVmaW5lICgldGVzdC1tYXRjaC1udGggbiBj b3VudCkKLSAgKGxldCAoKGkgMCkpCi0gICAgKGxhbWJkYSAocnVubmVyKQotICAgICAgKHNl dCEgaSAoKyBpIDEpKQotICAgICAgKGFuZCAoPj0gaSBuKSAoPCBpICgrIG4gY291bnQpKSkp KSkKLQotKGRlZmluZS1zeW50YXggdGVzdC1tYXRjaC1udGgKLSAgKHN5bnRheC1ydWxlcyAo KQotICAgICgodGVzdC1tYXRjaC1udGggbikKLSAgICAgKHRlc3QtbWF0Y2gtbnRoIG4gMSkp Ci0gICAgKCh0ZXN0LW1hdGNoLW50aCBuIGNvdW50KQotICAgICAoJXRlc3QtbWF0Y2gtbnRo IG4gY291bnQpKSkpCi0KLShkZWZpbmUgKCV0ZXN0LW1hdGNoLWFsbCAuIHByZWQtbGlzdCkK LSAgKGxhbWJkYSAocnVubmVyKQotICAgIChsZXQgKChyZXN1bHQgI3QpKQotICAgICAgKGxl dCBsb29wICgobCBwcmVkLWxpc3QpKQotCShpZiAobnVsbD8gbCkKLQkgICAgcmVzdWx0Ci0J ICAgIChiZWdpbgotCSAgICAgIChpZiAobm90ICgoY2FyIGwpIHJ1bm5lcikpCi0JCSAgKHNl dCEgcmVzdWx0ICNmKSkKLQkgICAgICAobG9vcCAoY2RyIGwpKSkpKSkpKQotICAKLShkZWZp bmUtc3ludGF4IHRlc3QtbWF0Y2gtYWxsCi0gIChzeW50YXgtcnVsZXMgKCkKLSAgICAoKHRl c3QtbWF0Y2gtYWxsIHByZWQgLi4uKQotICAgICAoJXRlc3QtbWF0Y2gtYWxsICgldGVzdC1h cy1zcGVjaWZpZXIgcHJlZCkgLi4uKSkpKQotCi0oZGVmaW5lICgldGVzdC1tYXRjaC1hbnkg LiBwcmVkLWxpc3QpCi0gIChsYW1iZGEgKHJ1bm5lcikKLSAgICAobGV0ICgocmVzdWx0ICNm KSkKLSAgICAgIChsZXQgbG9vcCAoKGwgcHJlZC1saXN0KSkKLQkoaWYgKG51bGw/IGwpCi0J ICAgIHJlc3VsdAotCSAgICAoYmVnaW4KLQkgICAgICAoaWYgKChjYXIgbCkgcnVubmVyKQot CQkgIChzZXQhIHJlc3VsdCAjdCkpCi0JICAgICAgKGxvb3AgKGNkciBsKSkpKSkpKSkKLSAg Ci0oZGVmaW5lLXN5bnRheCB0ZXN0LW1hdGNoLWFueQotICAoc3ludGF4LXJ1bGVzICgpCi0g ICAgKCh0ZXN0LW1hdGNoLWFueSBwcmVkIC4uLikKLSAgICAgKCV0ZXN0LW1hdGNoLWFueSAo JXRlc3QtYXMtc3BlY2lmaWVyIHByZWQpIC4uLikpKSkKLQotOzsgQ29lcmNlIHRvIGEgcHJl ZGljYXRlIGZ1bmN0aW9uOgotKGRlZmluZSAoJXRlc3QtYXMtc3BlY2lmaWVyIHNwZWNpZmll cikKLSAgKGNvbmQgKChwcm9jZWR1cmU/IHNwZWNpZmllcikgc3BlY2lmaWVyKQotCSgoaW50 ZWdlcj8gc3BlY2lmaWVyKSAodGVzdC1tYXRjaC1udGggMSBzcGVjaWZpZXIpKQotCSgoc3Ry aW5nPyBzcGVjaWZpZXIpICh0ZXN0LW1hdGNoLW5hbWUgc3BlY2lmaWVyKSkKLQkoZWxzZQot CSAoZXJyb3IgIm5vdCBhIHZhbGlkIHRlc3Qgc3BlY2lmaWVyIikpKSkKLQotKGRlZmluZS1z eW50YXggdGVzdC1za2lwCi0gIChzeW50YXgtcnVsZXMgKCkKLSAgICAoKHRlc3Qtc2tpcCBw cmVkIC4uLikKLSAgICAgKGxldCAoKHJ1bm5lciAodGVzdC1ydW5uZXItZ2V0KSkpCi0gICAg ICAgKCV0ZXN0LXJ1bm5lci1za2lwLWxpc3QhIHJ1bm5lcgotCQkJCSAgKGNvbnMgKHRlc3Qt bWF0Y2gtYWxsICgldGVzdC1hcy1zcGVjaWZpZXIgcHJlZCkgIC4uLikKLQkJCQkJKCV0ZXN0 LXJ1bm5lci1za2lwLWxpc3QgcnVubmVyKSkpKSkpKQotCi0oZGVmaW5lLXN5bnRheCB0ZXN0 LWV4cGVjdC1mYWlsCi0gIChzeW50YXgtcnVsZXMgKCkKLSAgICAoKHRlc3QtZXhwZWN0LWZh aWwgcHJlZCAuLi4pCi0gICAgIChsZXQgKChydW5uZXIgKHRlc3QtcnVubmVyLWdldCkpKQot ICAgICAgICgldGVzdC1ydW5uZXItZmFpbC1saXN0ISBydW5uZXIKLQkJCQkgIChjb25zICh0 ZXN0LW1hdGNoLWFsbCAoJXRlc3QtYXMtc3BlY2lmaWVyIHByZWQpICAuLi4pCi0JCQkJCSgl dGVzdC1ydW5uZXItZmFpbC1saXN0IHJ1bm5lcikpKSkpKSkKLQotKGRlZmluZSAodGVzdC1t YXRjaC1uYW1lIG5hbWUpCi0gIChsYW1iZGEgKHJ1bm5lcikKLSAgICAoZXF1YWw/IG5hbWUg KHRlc3QtcnVubmVyLXRlc3QtbmFtZSBydW5uZXIpKSkpCi0KLShkZWZpbmUgKHRlc3QtcmVh ZC1ldmFsLXN0cmluZyBzdHJpbmcpCi0gIChsZXQqICgocG9ydCAob3Blbi1pbnB1dC1zdHJp bmcgc3RyaW5nKSkKLQkgKGZvcm0gKHJlYWQgcG9ydCkpKQotICAgIChpZiAoZW9mLW9iamVj dD8gKHJlYWQtY2hhciBwb3J0KSkKLQkoY29uZC1leHBhbmQKLQkgKGd1aWxlIChldmFsIGZv cm0gKGN1cnJlbnQtbW9kdWxlKSkpCi0JIChlbHNlIChldmFsIGZvcm0pKSkKLQkoY29uZC1l eHBhbmQKLQkgKHNyZmktMjMgKGVycm9yICIobm90IGF0IGVvZikiKSkKLQkgKGVsc2UgImVy cm9yIikpKSkpCi0KLS0gCjIuMzAuMgoK --------------7F84FF52ECBA181E58238316 Content-Type: text/plain; charset=UTF-8; name="0002-Augment-SRFI-64-test-suite.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-Augment-SRFI-64-test-suite.patch" RnJvbSBlMmY5YzhiYWEyZDMyMzdlOGQwMmZkZDA4NDk2NjZkMGRlMWIzNGJkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUYXlsYW4gS2FtbWVyIDx0YXlsYW4ua2FtbWVyQGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxMCBNYXkgMjAyMSAxNToyNjoxMCArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggMi8yXSBBdWdtZW50IFNSRkktNjQgdGVzdC1zdWl0ZS4KCiogdGVzdC1zdWl0 ZS90ZXN0cy9zcmZpLTY0LXRlc3Quc2NtICgiMS4zLiB0ZXN0LWFwcHJveGltYXRlIik6IE5l dwogIHNlY3Rpb24uCigiMi4xLjQuIEZBSUwgd2l0aCBhIHRlc3QgbmFtZSBhbmQgZXJyb3Ig dHlwZSIpOgooIjIuMS41LiBQQVNTIHdpdGggYW4gZXJyb3IgdHlwZSBidXQgbm8gbmFtZSIp OgooIjIuMS42LiBGQUlMIHdpdGggYW4gZXJyb3IgdHlwZSBidXQgbm8gbmFtZSIpOiBOZXcg dGVzdHMuCi0tLQogdGVzdC1zdWl0ZS90ZXN0cy9zcmZpLTY0LXRlc3Quc2NtIHwgMzcgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDM3IGluc2Vy dGlvbnMoKykKCmRpZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL3NyZmktNjQtdGVzdC5z Y20gYi90ZXN0LXN1aXRlL3Rlc3RzL3NyZmktNjQtdGVzdC5zY20KaW5kZXggY2EwYjU4OTQz Li5iN2Y2ZDI5MzQgMTAwNjQ0Ci0tLSBhL3Rlc3Qtc3VpdGUvdGVzdHMvc3JmaS02NC10ZXN0 LnNjbQorKysgYi90ZXN0LXN1aXRlL3Rlc3RzL3NyZmktNjQtdGVzdC5zY20KQEAgLTE2Nyw2 ICsxNjcsMTkgQEAKIAogKHRlc3QtZW5kKTsxLjIKIAorKHRlc3QtYmVnaW4gIjEuMy4gdGVz dC1hcHByb3hpbWF0ZSIpCisKKyh0ZXN0LWVxdWFsCisgIjEuMy4xLiBTaW1wbGUgbnVtZXJp Y2FsIGFwcHJveGltYXRpb24iCisgJygoImEiICJjIikgKCJiIikgKCkgKCkgKCkgKDIgMSAw IDAgMCkpCisgKHRyaXYtcnVubmVyCisgIChsYW1iZGEgKCkKKyAgICAodGVzdC1hcHByb3hp bWF0ZSAiYSIgKG1lYW4gMyA1KSA0ICAgMC4wMDEpCisgICAgKHRlc3QtYXBwcm94aW1hdGUg ImIiIChtZWFuIDMgNSkgNC41IDAuMDAxKQorICAgICh0ZXN0LWFwcHJveGltYXRlICJjIiAo bWVhbiAzIDUpIDQuMCAwLjAwMSkpKSkKKworKHRlc3QtZW5kKTsxLjMKKwogKHRlc3QtZW5k ICIxLiBTaW1wbGUgdGVzdC1jYXNlcyIpCiAKIDs7OwpAQCAtMjAyLDYgKzIxNSwzMCBAQAog ICAgIDs7IFBBU1MKICAgICAodGVzdC1lcnJvciAiYSIgI3QgKHZlY3Rvci1yZWYgJyMoMSAy KSA5KSkpKSkKIAorKHRlc3QtZXF1YWwKKyAiMi4xLjQuIEZBSUwgd2l0aCBhIHRlc3QgbmFt ZSBhbmQgZXJyb3IgdHlwZSIKKyAnKCgpICgiYSIpICgpICgpICgpICgwIDEgMCAwIDApKQor ICh0cml2LXJ1bm5lcgorICAobGFtYmRhICgpCisgICAgOzsgRkFJTAorICAgICh0ZXN0LWVy cm9yICJhIiAjdCAodmVjdG9yLXJlZiAnIygxIDIpIDApKSkpKQorCisodGVzdC1lcXVhbAor ICIyLjEuNS4gUEFTUyB3aXRoIGFuIGVycm9yIHR5cGUgYnV0IG5vIG5hbWUiCisgJygoIiIp ICgpICgpICgpICgpICgxIDAgMCAwIDApKQorICh0cml2LXJ1bm5lcgorICAobGFtYmRhICgp CisgICAgOzsgUEFTUworICAgICh0ZXN0LWVycm9yICN0ICh2ZWN0b3ItcmVmICcjKDEgMikg OSkpKSkpCisKKyh0ZXN0LWVxdWFsCisgIjIuMS42LiBGQUlMIHdpdGggYW4gZXJyb3IgdHlw ZSBidXQgbm8gbmFtZSIKKyAnKCgpICgiIikgKCkgKCkgKCkgKDAgMSAwIDAgMCkpCisgKHRy aXYtcnVubmVyCisgIChsYW1iZGEgKCkKKyAgICA7OyBGQUlMCisgICAgKHRlc3QtZXJyb3Ig I3QgKHZlY3Rvci1yZWYgJyMoMSAyKSAwKSkpKSkKKwogKHRlc3QtZW5kICIyLjEuIHRlc3Qt ZXJyb3IiKQogCiAodGVzdC1lbmQgIjIuIFRlc3RzIGZvciBjYXRjaGluZyBlcnJvcnMiKQot LSAKMi4zMC4yCgo= --------------7F84FF52ECBA181E58238316--