From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id C29BF385840F; Thu, 23 Mar 2023 09:28:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C29BF385840F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.98,283,1673942400"; d="diff'?scan'208";a="81081" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa3.mentor.iphmx.com with ESMTP; 23 Mar 2023 01:28:33 -0800 IronPort-SDR: gX4RXtRfIr/jIs6P14YlNDmuZ87QzOpNamhla6xlBoNLvhiGuwuXk4ZDhxZSIjbIoRFG/9ZfNj drxyh/eaHPdwBRVlmf+sK2m1s2dU5/3tqV3o5wXzzzjizlTrbjqZF6ZLrSr3jGMsror3Q8R4Ln HrwqcH8T69jRpeV/l1i6z3PAvvRGxhXnsHyvYd7CMzuRUfgEZqJaZRf38t5udynroycLAnsXVg H4NmZHpP2ewZy7ybLIVgdDZMCeTfnpNccMwbXYS+xOFwC42+0H+weqyVwHVUTb3oy30Rg0A3Pq R/U= Content-Type: multipart/mixed; boundary="------------TZHETduP2BtfzIzqt7K2LIoB" Message-ID: <0b7ce95f-d86d-b960-3c20-4a62bdc2be9c@codesourcery.com> Date: Thu, 23 Mar 2023 10:28:26 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Subject: [Patch,v4] Fortran/OpenMP: Fix mapping of array descriptors and deferred-length strings Content-Language: en-US From: Tobias Burnus To: gcc-patches , Jakub Jelinek , fortran References: <57880257-d50f-e72b-5423-932af6c64e92@codesourcery.com> In-Reply-To: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-15.mgc.mentorg.com (139.181.222.15) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------TZHETduP2BtfzIzqt7K2LIoB Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable [GCC 13 vs GCC 14] I am unsure whether this should still go to GCC 13 or not. It is somewhat l= arger albeit well contained (Fortran, only OpenMP, ...) and fixes real-world bugs= , but it is not a regression - and we are meanwhile slowly approaching the re= lease. An alternative would be to go to GCC 14 and then be eventually backported t= o GCC 14 (albeit I am not sure whether early testing would be better). Or just to GC= C 14, hmm. Thoughts? * * * Another update - fixing an independent issue which makes sense to be part o= f this patch. Allocatable/pointer scalars are currently mapped as: #pragma omp target enter data map(to:*var.1_1 [len: 4]) map(alloc:var [po= inter assign, bias: 0]) #pragma omp target exit data map(from:*var.2_2 [len: 4]) where 'GOMP_MAP_POINTER' is removed in gimplify.cc. In v3 (and v4) of this = patch, this kind of handling moved from gimplify.cc to fortran/trans-openmp.cc; ho= wever, v3 has the same problem. For allocatable arrays, we have PSET + POINTER and the PSET part is changed/set to RELEASE/DELETE for 'exit data' But for scalars, the map was still left on the stack. Besides having a stal= e map, this could lead to fails when the stack was popped, especially when attempt= ing to later map another stack variable with the same stack address, partially overlapping with the stale POINTER. Side remark: I found this for testcase that is part of an upcoming deep-mapping follow-u= p patch; that test failed with -O1 but worked with -O0/-Og due to changed stack usag= e. (Deep-mapping of allocatable components is on the OG12 branch; it is schedu= led for mainline integration after stage1 opened.) The updated mainline patch is included; map-10.f90 is the new testcase. If anyone wants to see it separately, the patch has been committed to OG12 = as https://gcc.gnu.org/g:8ea805840200f7dfd2c11b37abf5fbfe479c2fe2 Comments/thoughts/remarks to this patch? Tobias PS: For the rest of the patch, see a short description below - or with some= longer remarks previous in this thread. On 27.02.23 13:15, Tobias Burnus wrote: > And another re-diff for GCC 13/mainline, updating gcc/testsuite/ > > (The last change is related to the "[OG12,committed] Update dg-dump-scan > for ..." discussion + OG12 https://gcc.gnu.org/g:e4de87a2309 / > https://gcc.gnu.org/pipermail/gcc-patches/2023-February/612871.html ) > > On 23.02.23 17:42, Tobias Burnus wrote: >> On 21.02.23 12:57, Tobias Burnus wrote: >>> This patch moves some generic code for Fortran out of gimplify.cc >>> to trans-openmp.cc and fixes several issues related to mapping. >>> >>> Tested with nvptx offloading. >>> OK for mainline? > Tobias >>> Caveats: >>> >>> Besides the issues shown in the comment-out code, there remains also an >>> issue with implicit mapping - at least for deferred-length strings, >>> but I wouldn't be surprised if - at least depending on the used >>> 'defaultmap' value (e.g. 'alloc') - there are also issues with array >>> descriptors. >>> >>> Note: >>> >>> Regarding the declare target check for mapping: Without declare >>> target, my assumption is that the hidden length variable will >>> get implicitly mapped if needed. Independent of deferred-length >>> or not, there is probably an issue with 'defaultmap(none)' and >>> the hidden variable. - In any case, I prefer to defer all those >>> issues to later (by having them captured in one/several PR). >>> >>> >>> Tobias >>> >>> PS: This patch is a follow up to >>> [Patch] Fortran/OpenMP: Fix DT struct-component with 'alloc' and >>> array descr >>> https://gcc.gnu.org/pipermail/gcc-patches/2022-November/604887.html >>> which fixed part of the problems. But as discussed on IRC, it did >>> treat 'alloc' >>> as special and missed some other map types. - In addition, this patch >>> has a >>> much extended test coverage and fixes some more issues found that way. ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------TZHETduP2BtfzIzqt7K2LIoB Content-Type: text/x-patch; charset="UTF-8"; name="map-fixes-v4.diff" Content-Disposition: attachment; filename="map-fixes-v4.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbi9PcGVuTVA6IEZpeCBtYXBwaW5nIG9mIGFycmF5IGRlc2NyaXB0b3JzIGFuZCBk ZWZlcnJlZC1sZW5ndGggc3RyaW5ncwoKUHJldmlvdXNseSwgYXJyYXkgZGVzY3JpcHRvcnMg bWlnaHQgaGF2ZSBiZWVuIG1hcHBlZCBhcyAnYWxsb2MnCmluc3RlYWQgb2YgJ3RvJyBmb3Ig J2FsbG9jJywgbm90IHVwZGF0aW5nIHRoZSBhcnJheSBib3VuZHMuIFRoZQonYWxsb2MnIGNv dWxkIGFsc28gYXBwZWFyIGZvciAnZGF0YSBleGl0JywgZmFpbGluZyB3aXRoIGEgbGliZ29t cAphc3NlcnQuIEluIHNvbWUgY2FzZXMsIGVpdGhlciBhcnJheSBkZXNjcmlwdG9ycyBvciBk ZWZlcnJlZC1sZW5ndGgKc3RyaW5nJ3MgbGVuZ3RoIHZhcmlhYmxlIHdhcyBub3QgbWFwcGVk LiBBbmQsIGZpbmFsbHksIHNvbWUgb2Zmc2V0CmNhbGN1bGF0aW9ucyB3aXRoIGFycmF5LXNl Y3Rpb25zIG1hcHBpbmdzIHdlbnQgd3JvbmcuCgpBZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBu b3cgdW5tYXBzIGZvciBzY2FsYXIgYWxsb2NhdGFibGVzL3BvaW50ZXJzCnRoZSBHT01QX01B UF9QT0lOVEVSLCBhdm9pZGluZyBzdGFsZSBtYXBwaW5ncy4KClRoZSB0ZXN0Y2FzZXMgY29u dGFpbiBzb21lIGNvbW1lbnQtb3V0IHRlc3RzIHdoaWNoIHJlcXVpcmUgZm9sbG93LXVwCndv cmsgYW5kIGZvciB3aGljaCBQUiBleGlzdC4gVGhvc2UgbW9zdGx5IHJlbGF0ZSB0byBkZWZl cnJlZC1sZW5ndGgKc3RyaW5ncyB3aGljaCBoYXZlIHNldmVyYWwgaXNzdWVzIGJleW9uZyBP cGVuTVAgc3VwcG9ydC4KCmdjYy9mb3J0cmFuL0NoYW5nZUxvZzoKCgkqIHRyYW5zLWRlY2wu Y2MgKGdmY19nZXRfc3ltYm9sX2RlY2wpOiBBZGQgYXR0cmlidXRlcwoJc3VjaCBhcyAnZGVj bGFyZSB0YXJnZXQnIGFsc28gdG8gaGlkZGVuIGFydGlmaWNpYWwKCXZhcmlhYmxlIGZvciBk ZWZlcnJlZC1sZW5ndGggY2hhcmFjdGVyIHZhcmlhYmxlcy4KCSogdHJhbnMtb3Blbm1wLmNj IChnZmNfdHJhbnNfb21wX2FycmF5X3NlY3Rpb24sCglnZmNfdHJhbnNfb21wX2NsYXVzZXMs IGdmY190cmFuc19vbXBfdGFyZ2V0X2V4aXRfZGF0YSk6CglJbXByb3ZlIG1hcHBpbmcgb2Yg YXJyYXkgZGVzY3JpcHRvcnMgYW5kIGRlZmVycmVkLWxlbmd0aAoJc3RyaW5nIHZhcmlhYmxl cy4KCmdjYy9DaGFuZ2VMb2c6CgoJKiBnaW1wbGlmeS5jYyAoZ2ltcGxpZnlfc2Nhbl9vbXBf Y2xhdXNlcyk6IFJlbW92ZSBGb3J0cmFuCglzcGVjaWFsIGNhc2UuCgpsaWJnb21wL0NoYW5n ZUxvZzoKCgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEt My5mOTA6IFVuY29tbWVudAoJJ3RhcmdldCBleGl0IGRhdGEnLgoJKiB0ZXN0c3VpdGUvbGli Z29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTQuZjkwOiBOZXcgdGVzdC4KCSogdGVz dHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS01LmY5MDogTmV3IHRl c3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNi5m OTA6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRl ci1kYXRhLTcuZjkwOiBOZXcgdGVzdC4KCmdjYy90ZXN0c3VpdGUvCgkqIGdmb3J0cmFuLmRn L2dvYWNjL2ZpbmFsaXplLTEuZjogVXBkYXRlIGRnLXRyZWU7IHNob3dzIGEgZml4Cglmb3Ig J2ZpbmFsaXplJyBhcyBhIHB0ciBpcyBub3cgJ2RlbGV0ZScgaW5zdGVhZCBvZiAncmVsZWFz ZScuCgkqIGdmb3J0cmFuLmRnL2dvbXAvcHI3ODI2MC0yLmY5MDogTGlrZXdpc2UgYXMgZWxl bS1zaXplIGNhbGMgbW92ZWQKCXRvIGlmIChhbGxvY2F0ZWQpIGJsb2NrCgkqIGdmb3J0cmFu LmRnL2dvbXAvdGFyZ2V0LWV4aXQtZGF0YS5mOTA6IExpa2V3aXNlIGFzIGEgdmFyIGlzIG5v dyBhCglyZXBsYWNlZCBieSBhIE1FTTwgXzI1ID4gZXhwcmVzc2lvbi4KCSogZ2ZvcnRyYW4u ZGcvZ29tcC9tYXAtOS5mOTA6IFVwZGF0ZSBkZy1zY2FuLXRyZWUtZHVtcC4KCSogZ2ZvcnRy YW4uZGcvZ29tcC9tYXAtMTAuZjkwOiBOZXcgdGVzdC4KCiBnY2MvZm9ydHJhbi90cmFucy1k ZWNsLmNjICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBnY2MvZm9ydHJhbi90 cmFucy1vcGVubXAuY2MgICAgICAgICAgICAgICAgICAgICAgICB8IDMzNiArKysrKysrKyst LS0tCiBnY2MvZ2ltcGxpZnkuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICA0MiArLQogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9maW5hbGl6ZS0x LmYgICAgICAgfCAgIDQgKy0KIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9tYXAt MTAuZjkwICAgICAgICAgIHwgIDY5ICsrKwogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9n b21wL21hcC05LmY5MCAgICAgICAgICAgfCAgIDIgKy0KIGdjYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvZ29tcC9wcjc4MjYwLTIuZjkwICAgICAgIHwgICA2ICstCiAuLi4vZ2ZvcnRyYW4u ZGcvZ29tcC90YXJnZXQtZXhpdC1kYXRhLmY5MCAgICAgICAgICB8ICAgNCArLQogLi4uL2xp YmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS0zLmY5MCAgICAgICAgfCAgIDIgKy0K IC4uLi9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNC5mOTAgICAgICAgIHwg NTQwICsrKysrKysrKysrKysrKysrKysrKwogLi4uL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQt ZW50ZXItZGF0YS01LmY5MCAgICAgICAgfCA1NDAgKysrKysrKysrKysrKysrKysrKysrCiAu Li4vbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTYuZjkwICAgICAgICB8IDM5 MiArKysrKysrKysrKysrKysKIC4uLi9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRh dGEtNy5mOTAgICAgICAgIHwgIDc4ICsrKwogMTMgZmlsZXMgY2hhbmdlZCwgMTg3NyBpbnNl cnRpb25zKCspLCAxNDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4v dHJhbnMtZGVjbC5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MKaW5kZXggNzc2MTBk ZjM0MGIuLjI0ZDNhNjVhMTU2IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1kZWNs LmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MKQEAgLTE4MjQsNiArMTgyNCw4 IEBAIGdmY19nZXRfc3ltYm9sX2RlY2wgKGdmY19zeW1ib2wgKiBzeW0pCiAgIC8qIEFkZCBh dHRyaWJ1dGVzIHRvIHZhcmlhYmxlcy4gIEZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBlbHNld2hl cmUuICAqLwogICBhdHRyaWJ1dGVzID0gYWRkX2F0dHJpYnV0ZXNfdG9fZGVjbCAoc3ltLT5h dHRyLCBOVUxMX1RSRUUpOwogICBkZWNsX2F0dHJpYnV0ZXMgKCZkZWNsLCBhdHRyaWJ1dGVz LCAwKTsKKyAgaWYgKHN5bS0+dHMuZGVmZXJyZWQpCisgICAgZGVjbF9hdHRyaWJ1dGVzICgm bGVuZ3RoLCBhdHRyaWJ1dGVzLCAwKTsKIAogICAvKiBTeW1ib2xzIGZyb20gbW9kdWxlcyBz aG91bGQgaGF2ZSB0aGVpciBhc3NlbWJsZXIgbmFtZXMgbWFuZ2xlZC4KICAgICAgVGhpcyBp cyBkb25lIGhlcmUgcmF0aGVyIHRoYW4gaW4gZ2ZjX2ZpbmlzaF92YXJfZGVjbCBiZWNhdXNl IGl0CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MgYi9nY2MvZm9y dHJhbi90cmFucy1vcGVubXAuY2MKaW5kZXggODRjMDE4NGY0OGUuLjVmODNlNDc2Y2U2IDEw MDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MKKysrIGIvZ2NjL2ZvcnRy YW4vdHJhbnMtb3Blbm1wLmNjCkBAIC0yNDAzLDMzICsyNDAzLDUwIEBAIHN0YXRpYyB2ZWM8 dHJlZSwgdmFfaGVhcCwgdmxfZW1iZWQ+ICpkb2Fjcm9zc19zdGVwczsKIC8qIFRyYW5zbGF0 ZSBhbiBhcnJheSBzZWN0aW9uIG9yIGFycmF5IGVsZW1lbnQuICAqLwogCiBzdGF0aWMgdm9p ZAotZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9uIChzdG10YmxvY2tfdCAqYmxvY2ssIGdm Y19vbXBfbmFtZWxpc3QgKm4sCi0JCQkgICAgIHRyZWUgZGVjbCwgYm9vbCBlbGVtZW50LCBn b21wX21hcF9raW5kIHB0cl9raW5kLAotCQkJICAgICB0cmVlICZub2RlLCB0cmVlICZub2Rl MiwgdHJlZSAmbm9kZTMsIHRyZWUgJm5vZGU0KQorZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0 aW9uIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19leGVjX29wIG9wLAorCQkJICAgICBnZmNf b21wX25hbWVsaXN0ICpuLCB0cmVlIGRlY2wsIGJvb2wgZWxlbWVudCwKKwkJCSAgICAgZ29t cF9tYXBfa2luZCBwdHJfa2luZCwgdHJlZSAmbm9kZSwgdHJlZSAmbm9kZTIsCisJCQkgICAg IHRyZWUgJm5vZGUzLCB0cmVlICZub2RlNCkKIHsKICAgZ2ZjX3NlIHNlOwogICB0cmVlIHB0 ciwgcHRyMjsKICAgdHJlZSBlbGVtc3ogPSBOVUxMX1RSRUU7CiAKICAgZ2ZjX2luaXRfc2Ug KCZzZSwgTlVMTCk7Ci0KICAgaWYgKGVsZW1lbnQpCiAgICAgewogICAgICAgZ2ZjX2NvbnZf ZXhwcl9yZWZlcmVuY2UgKCZzZSwgbi0+ZXhwcik7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3Rv X2Jsb2NrIChibG9jaywgJnNlLnByZSk7CiAgICAgICBwdHIgPSBzZS5leHByOwotICAgICAg T01QX0NMQVVTRV9TSVpFIChub2RlKSA9IFRZUEVfU0laRV9VTklUIChUUkVFX1RZUEUgKFRS RUVfVFlQRSAocHRyKSkpOwotICAgICAgZWxlbXN6ID0gT01QX0NMQVVTRV9TSVpFIChub2Rl KTsKICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgICBnZmNfY29udl9leHByX2Rlc2NyaXB0 b3IgKCZzZSwgbi0+ZXhwcik7CiAgICAgICBwdHIgPSBnZmNfY29udl9hcnJheV9kYXRhIChz ZS5leHByKTsKKyAgICB9CisgIGlmIChuLT5leHByLT50cy50eXBlID09IEJUX0NIQVJBQ1RF UiAmJiBuLT5leHByLT50cy5kZWZlcnJlZCkKKyAgICB7CisgICAgICBnY2NfYXNzZXJ0IChz ZS5zdHJpbmdfbGVuZ3RoKTsKKyAgICAgIHRyZWUgbGVuID0gZ2ZjX2V2YWx1YXRlX25vdyAo c2Uuc3RyaW5nX2xlbmd0aCwgYmxvY2spOworICAgICAgZWxlbXN6ID0gZ2ZjX2dldF9jaGFy X3R5cGUgKG4tPmV4cHItPnRzLmtpbmQpOworICAgICAgZWxlbXN6ID0gVFlQRV9TSVpFX1VO SVQgKGVsZW1zeik7CisgICAgICBlbGVtc3ogPSBmb2xkX2J1aWxkMiAoTVVMVF9FWFBSLCBz aXplX3R5cGVfbm9kZSwKKwkJCSAgICBmb2xkX2NvbnZlcnQgKHNpemVfdHlwZV9ub2RlLCBs ZW4pLCBlbGVtc3opOworICAgIH0KKyAgaWYgKGVsZW1lbnQpCisgICAgeworICAgICAgaWYg KCFlbGVtc3opCisJZWxlbXN6ID0gVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoVFJFRV9U WVBFIChwdHIpKSk7CisgICAgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpID0gZWxlbXN6Owor ICAgIH0KKyAgZWxzZQorICAgIHsKICAgICAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoc2Uu ZXhwcik7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChibG9jaywgJnNlLnByZSk7 CiAgICAgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpID0gZ2ZjX2Z1bGxfYXJyYXlfc2l6ZSAo YmxvY2ssIHNlLmV4cHIsCiAJCQkJCQkgICAgR0ZDX1RZUEVfQVJSQVlfUkFOSyAodHlwZSkp OwotICAgICAgZWxlbXN6ID0gVFlQRV9TSVpFX1VOSVQgKGdmY19nZXRfZWxlbWVudF90eXBl ICh0eXBlKSk7CisgICAgICBpZiAoIWVsZW1zeikKKwllbGVtc3ogPSBUWVBFX1NJWkVfVU5J VCAoZ2ZjX2dldF9lbGVtZW50X3R5cGUgKHR5cGUpKTsKICAgICAgIGVsZW1zeiA9IGZvbGRf Y29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIGVsZW1zeik7CiAgICAgICBPTVBfQ0xB VVNFX1NJWkUgKG5vZGUpID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgZ2ZjX2FycmF5X2lu ZGV4X3R5cGUsCiAJCQkJCSAgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpLCBlbGVtc3opOwpA QCAtMjQ0MSw3ICsyNDU4LDExIEBAIGdmY190cmFuc19vbXBfYXJyYXlfc2VjdGlvbiAoc3Rt dGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX25hbWVsaXN0ICpuLAogCiAgIGlmIChQT0lOVEVS X1RZUEVfUCAoVFJFRV9UWVBFIChkZWNsKSkKICAgICAgICYmIEdGQ19ERVNDUklQVE9SX1RZ UEVfUCAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKGRlY2wpKSkKLSAgICAgICYmIHB0cl9raW5k ID09IEdPTVBfTUFQX1BPSU5URVIpCisgICAgICAmJiBwdHJfa2luZCA9PSBHT01QX01BUF9Q T0lOVEVSCisgICAgICAmJiBvcCAhPSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBCisgICAg ICAmJiBPTVBfQ0xBVVNFX01BUF9LSU5EIChub2RlKSAhPSBHT01QX01BUF9SRUxFQVNFCisg ICAgICAmJiBPTVBfQ0xBVVNFX01BUF9LSU5EIChub2RlKSAhPSBHT01QX01BUF9ERUxFVEUp CisKICAgICB7CiAgICAgICBub2RlNCA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0 aW9uLAogCQkJCU9NUF9DTEFVU0VfTUFQKTsKQEAgLTI0NTUsMTMgKzI0NzYsMTMgQEAgZ2Zj X3RyYW5zX29tcF9hcnJheV9zZWN0aW9uIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBf bmFtZWxpc3QgKm4sCiAJICAgJiYgbi0+ZXhwci0+dHMuZGVmZXJyZWQpCiAgICAgewogICAg ICAgZ29tcF9tYXBfa2luZCBtYXBfa2luZDsKLSAgICAgIGlmIChHT01QX01BUF9DT1BZX1RP X1AgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKG5vZGUpKSkKLQltYXBfa2luZCA9IEdPTVBfTUFQ X1RPOwotICAgICAgZWxzZSBpZiAoT01QX0NMQVVTRV9NQVBfS0lORCAobm9kZSkgPT0gR09N UF9NQVBfUkVMRUFTRQotCSAgICAgICB8fCBPTVBfQ0xBVVNFX01BUF9LSU5EIChub2RlKSA9 PSBHT01QX01BUF9ERUxFVEUpCisgICAgICBpZiAoT01QX0NMQVVTRV9NQVBfS0lORCAobm9k ZSkgPT0gR09NUF9NQVBfREVMRVRFKQogCW1hcF9raW5kID0gT01QX0NMQVVTRV9NQVBfS0lO RCAobm9kZSk7CisgICAgICBlbHNlIGlmIChvcCA9PSBFWEVDX09NUF9UQVJHRVRfRVhJVF9E QVRBCisJICAgICAgIHx8IE9NUF9DTEFVU0VfTUFQX0tJTkQgKG5vZGUpID09IEdPTVBfTUFQ X1JFTEVBU0UpCisJbWFwX2tpbmQgPSBHT01QX01BUF9SRUxFQVNFOwogICAgICAgZWxzZQot CW1hcF9raW5kID0gR09NUF9NQVBfQUxMT0M7CisJbWFwX2tpbmQgPSBHT01QX01BUF9UTzsK ICAgICAgIGdjY19hc3NlcnQgKHNlLnN0cmluZ19sZW5ndGgpOwogICAgICAgbm9kZTQgPSBi dWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwgT01QX0NMQVVTRV9NQVApOwogICAg ICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGU0LCBtYXBfa2luZCk7CkBAIC0yNDc2 LDcgKzI0OTcsMTggQEAgZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9uIChzdG10YmxvY2tf dCAqYmxvY2ssIGdmY19vbXBfbmFtZWxpc3QgKm4sCiAgICAgICBkZXNjX25vZGUgPSBidWls ZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwgT01QX0NMQVVTRV9NQVApOwogICAgICAg T01QX0NMQVVTRV9ERUNMIChkZXNjX25vZGUpID0gZGVjbDsKICAgICAgIE9NUF9DTEFVU0Vf U0laRSAoZGVzY19ub2RlKSA9IFRZUEVfU0laRV9VTklUICh0eXBlKTsKLSAgICAgIGlmIChw dHJfa2luZCA9PSBHT01QX01BUF9BTFdBWVNfUE9JTlRFUikKKyAgICAgIGlmIChPTVBfQ0xB VVNFX01BUF9LSU5EIChub2RlKSA9PSBHT01QX01BUF9ERUxFVEUpCisJeworCSAgT01QX0NM QVVTRV9TRVRfTUFQX0tJTkQgKGRlc2Nfbm9kZSwgR09NUF9NQVBfREVMRVRFKTsKKwkgIG5v ZGUyID0gZGVzY19ub2RlOworCX0KKyAgICAgIGVsc2UgaWYgKE9NUF9DTEFVU0VfTUFQX0tJ TkQgKG5vZGUpID09IEdPTVBfTUFQX1JFTEVBU0UKKwkgICAgICAgfHwgb3AgPT0gRVhFQ19P TVBfVEFSR0VUX0VYSVRfREFUQSkKKwl7CisJICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAo ZGVzY19ub2RlLCBHT01QX01BUF9SRUxFQVNFKTsKKwkgIG5vZGUyID0gZGVzY19ub2RlOwor CX0KKyAgICAgIGVsc2UgaWYgKHB0cl9raW5kID09IEdPTVBfTUFQX0FMV0FZU19QT0lOVEVS KQogCXsKIAkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChkZXNjX25vZGUsIEdPTVBfTUFQ X1RPKTsKIAkgIG5vZGUyID0gbm9kZTsKQEAgLTI0ODcsMTEgKzI1MTksMTEgQEAgZ2ZjX3Ry YW5zX29tcF9hcnJheV9zZWN0aW9uIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfbmFt ZWxpc3QgKm4sCiAJICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAoZGVzY19ub2RlLCBHT01Q X01BUF9UT19QU0VUKTsKIAkgIG5vZGUyID0gZGVzY19ub2RlOwogCX0KLSAgICAgIG5vZGUz ID0gYnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9jYXRpb24sCi0JCQkJT01QX0NMQVVTRV9N QVApOworICAgICAgaWYgKG9wID09IEVYRUNfT01QX1RBUkdFVF9FWElUX0RBVEEpCisJcmV0 dXJuOworICAgICAgbm9kZTMgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwg T01QX0NMQVVTRV9NQVApOwogICAgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUz LCBwdHJfa2luZCk7Ci0gICAgICBPTVBfQ0xBVVNFX0RFQ0wgKG5vZGUzKQotCT0gZ2ZjX2Nv bnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoZGVjbCk7CisgICAgICBPTVBfQ0xBVVNFX0RFQ0wg KG5vZGUzKSA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKGRlY2wpOwogICAgICAg LyogVGhpcyBwdXJwb3NlbHkgZG9lcyBub3QgaW5jbHVkZSBHT01QX01BUF9BTFdBWVNfUE9J TlRFUi4gIFRoZSBleHRyYQogCSBjYXN0IHByZXZlbnRzIGdpbXBsaWZ5LmNjIGZyb20gcmVj b2duaXNpbmcgaXQgYXMgYmVpbmcgcGFydCBvZiB0aGUKIAkgc3RydWN0IC0gYW5kIGFkZGlu ZyBhbiAnYWxsb2M6IGZvciB0aGUgJ2Rlc2MuZGF0YScgcG9pbnRlciwgd2hpY2gKQEAgLTI1 OTUsNyArMjYyNyw3IEBAIGhhbmRsZV9pdGVyYXRvciAoZ2ZjX25hbWVzcGFjZSAqbnMsIHN0 bXRibG9ja190ICppdGVyX2Jsb2NrLCB0cmVlIGJsb2NrKQogc3RhdGljIHRyZWUKIGdmY190 cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMg KmNsYXVzZXMsCiAJCSAgICAgICBsb2N1cyB3aGVyZSwgYm9vbCBkZWNsYXJlX3NpbWQgPSBm YWxzZSwKLQkJICAgICAgIGJvb2wgb3BlbmFjYyA9IGZhbHNlKQorCQkgICAgICAgYm9vbCBv cGVuYWNjID0gZmFsc2UsIGdmY19leGVjX29wIG9wID0gRVhFQ19OT1ApCiB7CiAgIHRyZWUg b21wX2NsYXVzZXMgPSBOVUxMX1RSRUUsIHByZXZfY2xhdXNlcywgY2h1bmtfc2l6ZSwgYzsK ICAgdHJlZSBpdGVyYXRvciA9IE5VTExfVFJFRTsKQEAgLTMwMjYsNiArMzA1OCw3IEBAIGdm Y190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVz ZXMgKmNsYXVzZXMsCiAJICAgICAgdHJlZSBub2RlMiA9IE5VTExfVFJFRTsKIAkgICAgICB0 cmVlIG5vZGUzID0gTlVMTF9UUkVFOwogCSAgICAgIHRyZWUgbm9kZTQgPSBOVUxMX1RSRUU7 CisJICAgICAgdHJlZSBub2RlNSA9IE5VTExfVFJFRTsKIAogCSAgICAgIC8qIE9wZW5NUDog YXV0b21hdGljYWxseSBtYXAgcG9pbnRlciB0YXJnZXRzIHdpdGggdGhlIHBvaW50ZXI7CiAJ CSBoZW5jZSwgYWx3YXlzIHVwZGF0ZSB0aGUgZGVzY3JpcHRvci9wb2ludGVyIGl0c2VsZi4g ICovCkBAIC0zMTMwLDYgKzMxNjMsMjQgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10 YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJICB8fCAobi0+ ZXhwci0+cmVmLT50eXBlID09IFJFRl9BUlJBWQogCQkgICAgICAmJiBuLT5leHByLT5yZWYt PnUuYXIudHlwZSA9PSBBUl9GVUxMKSkKIAkJeworCQkgIGdvbXBfbWFwX2tpbmQgbWFwX2tp bmQ7CisJCSAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChkZWNsKTsKKwkJICBpZiAobi0+c3lt LT50cy50eXBlID09IEJUX0NIQVJBQ1RFUgorCQkgICAgICAmJiBuLT5zeW0tPnRzLmRlZmVy cmVkCisJCSAgICAgICYmIG4tPnN5bS0+YXR0ci5vbXBfZGVjbGFyZV90YXJnZXQKKwkJICAg ICAgJiYgKGFsd2F5c19tb2RpZmllciB8fCBuLT5zeW0tPmF0dHIucG9pbnRlcikKKwkJICAg ICAgJiYgb3AgIT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQQorCQkgICAgICAmJiBuLT51 Lm1hcF9vcCAhPSBPTVBfTUFQX0RFTEVURQorCQkgICAgICAmJiBuLT51Lm1hcF9vcCAhPSBP TVBfTUFQX1JFTEVBU0UpCisJCSAgICB7CisJCSAgICAgIGdjY19hc3NlcnQgKG4tPnN5bS0+ dHMudS5jbC0+YmFja2VuZF9kZWNsKTsKKwkJICAgICAgbm9kZTUgPSBidWlsZF9vbXBfY2xh dXNlIChpbnB1dF9sb2NhdGlvbiwgT01QX0NMQVVTRV9NQVApOworCQkgICAgICBPTVBfQ0xB VVNFX1NFVF9NQVBfS0lORCAobm9kZTUsIEdPTVBfTUFQX0FMV0FZU19UTyk7CisJCSAgICAg IE9NUF9DTEFVU0VfREVDTCAobm9kZTUpID0gbi0+c3ltLT50cy51LmNsLT5iYWNrZW5kX2Rl Y2w7CisJCSAgICAgIE9NUF9DTEFVU0VfU0laRSAobm9kZTUpCisJCQk9IFRZUEVfU0laRV9V TklUIChnZmNfY2hhcmxlbl90eXBlX25vZGUpOworCQkgICAgfQorCiAJCSAgdHJlZSBwcmVz ZW50ID0gZ2ZjX29tcF9jaGVja19vcHRpb25hbF9hcmd1bWVudCAoZGVjbCwgdHJ1ZSk7CiAJ CSAgaWYgKG9wZW5hY2MgJiYgbi0+c3ltLT50cy50eXBlID09IEJUX0NMQVNTKQogCQkgICAg ewpAQCAtMzE0NSwxMyArMzE5NiwxMiBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRi bG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkgICAgICBPTVBf Q0xBVVNFX1NJWkUgKG5vZGUyKSA9IHNpemVfaW50ICgwKTsKIAkJICAgICAgZ290byBmaW5h bGl6ZV9tYXBfY2xhdXNlOwogCQkgICAgfQotCQkgIGVsc2UgaWYgKFBPSU5URVJfVFlQRV9Q IChUUkVFX1RZUEUgKGRlY2wpKQorCQkgIGVsc2UgaWYgKFBPSU5URVJfVFlQRV9QICh0eXBl KQogCQkJICAgJiYgKGdmY19vbXBfcHJpdmF0aXplX2J5X3JlZmVyZW5jZSAoZGVjbCkKIAkJ CSAgICAgICB8fCBHRkNfREVDTF9HRVRfU0NBTEFSX1BPSU5URVIgKGRlY2wpCiAJCQkgICAg ICAgfHwgR0ZDX0RFQ0xfR0VUX1NDQUxBUl9BTExPQ0FUQUJMRSAoZGVjbCkKIAkJCSAgICAg ICB8fCBHRkNfREVDTF9DUkFZX1BPSU5URUUgKGRlY2wpCi0JCQkgICAgICAgfHwgR0ZDX0RF U0NSSVBUT1JfVFlQRV9QCi0JCQkJCSAgICAgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChkZWNs KSkpCisJCQkgICAgICAgfHwgR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKHR5 cGUpKQogCQkJICAgICAgIHx8IChuLT5zeW0tPnRzLnR5cGUgPT0gQlRfREVSSVZFRAogCQkJ CSAgICYmIChuLT5zeW0tPnRzLnUuZGVyaXZlZC0+dHMuZjkwX3R5cGUKIAkJCQkgICAgICAg IT0gQlRfVk9JRCkpKSkKQEAgLTMxNjQsNyArMzIxNCw3IEBAIGdmY190cmFuc19vbXBfY2xh dXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJ CQkgdG8gYXZvaWQgYWNjZXNzaW5nIHVuZGVmaW5lZCB2YXJpYWJsZXMuICBXZSBjYW5ub3Qg dXNlCiAJCQkgYSB0ZW1wb3JhcnkgdmFyaWFibGUgaGVyZSBhcyBvdGhlcndpc2UgdGhlIHJl cGxhY2VtZW50CiAJCQkgb2YgdGhlIHZhcmlhYmxlcyBpbiBvbXAtbG93LmNjIHdpbGwgbm90 IHdvcmsuICAqLwotCQkgICAgICBpZiAocHJlc2VudCAmJiBHRkNfQVJSQVlfVFlQRV9QIChU UkVFX1RZUEUgKGRlY2wpKSkKKwkJICAgICAgaWYgKHByZXNlbnQgJiYgR0ZDX0FSUkFZX1RZ UEVfUCAodHlwZSkpCiAJCQl7CiAJCQkgIHRyZWUgdG1wID0gZm9sZF9idWlsZDJfbG9jIChp bnB1dF9sb2NhdGlvbiwKIAkJCQkJCSAgICAgIE1PRElGWV9FWFBSLApAQCAtMzE4MSwyMiAr MzIzMSw1MSBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywg Z2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkJCQkJCSAgICAgY29uZCwgdG1wLAogCQkJ CQkJCSAgICAgTlVMTF9UUkVFKSk7CiAJCQl9Ci0JCSAgICAgIG5vZGU0ID0gYnVpbGRfb21w X2NsYXVzZSAoaW5wdXRfbG9jYXRpb24sCi0JCQkJCQlPTVBfQ0xBVVNFX01BUCk7Ci0JCSAg ICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlNCwgR09NUF9NQVBfUE9JTlRFUik7 Ci0JCSAgICAgIE9NUF9DTEFVU0VfREVDTCAobm9kZTQpID0gZGVjbDsKLQkJICAgICAgT01Q X0NMQVVTRV9TSVpFIChub2RlNCkgPSBzaXplX2ludCAoMCk7CisJCSAgICAgIC8qIEZvciBk ZXNjcmlwdG9yIHR5cGVzLCB0aGUgdW5tYXBwaW5nIGhhcHBlbnMgYmVsb3cuICAqLworCQkg ICAgICBpZiAob3AgIT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQQorCQkJICB8fCAhR0ZD X0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKGRlY2wpKSkKKwkJCXsKKwkJCSAgZW51 bSBnb21wX21hcF9raW5kIGdtayA9IEdPTVBfTUFQX1BPSU5URVI7CisJCQkgIGlmIChvcCA9 PSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBCisJCQkgICAgICAmJiBuLT51Lm1hcF9vcCA9 PSBPTVBfTUFQX0RFTEVURSkKKwkJCSAgICBnbWsgPSBHT01QX01BUF9ERUxFVEU7CisJCQkg IGVsc2UgaWYgKG9wID09IEVYRUNfT01QX1RBUkdFVF9FWElUX0RBVEEpCisJCQkgICAgZ21r ID0gR09NUF9NQVBfUkVMRUFTRTsKKwkJCSAgdHJlZSBzaXplOworCQkJICBpZiAoZ21rID09 IEdPTVBfTUFQX1JFTEVBU0UgfHwgZ21rID09IEdPTVBfTUFQX0RFTEVURSkKKwkJCSAgICBz aXplID0gVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoZGVjbCkpOworCQkJICBlbHNlCisJ CQkgICAgc2l6ZSA9IHNpemVfaW50ICgwKTsKKwkJCSAgbm9kZTQgPSBidWlsZF9vbXBfY2xh dXNlIChpbnB1dF9sb2NhdGlvbiwKKwkJCQkJCSAgICBPTVBfQ0xBVVNFX01BUCk7CisJCQkg IE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlNCwgZ21rKTsKKwkJCSAgT01QX0NMQVVT RV9ERUNMIChub2RlNCkgPSBkZWNsOworCQkJICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGU0KSA9 IHNpemU7CisJCQl9CiAJCSAgICAgIGRlY2wgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZiAo ZGVjbCk7CiAJCSAgICAgIGlmICgoVFJFRV9DT0RFIChUUkVFX1RZUEUgKG9yaWdfZGVjbCkp ID09IFJFRkVSRU5DRV9UWVBFCiAJCQkgICB8fCBnZmNfb21wX2lzX29wdGlvbmFsX2FyZ3Vt ZW50IChvcmlnX2RlY2wpKQogCQkJICAmJiAoR0ZDX0RFQ0xfR0VUX1NDQUxBUl9QT0lOVEVS IChvcmlnX2RlY2wpCiAJCQkgICAgICB8fCBHRkNfREVDTF9HRVRfU0NBTEFSX0FMTE9DQVRB QkxFIChvcmlnX2RlY2wpKSkKIAkJCXsKKwkJCSAgZW51bSBnb21wX21hcF9raW5kIGdtazsK KwkJCSAgaWYgKG9wID09IEVYRUNfT01QX1RBUkdFVF9FWElUX0RBVEEKKwkJCSAgICAgICYm IG4tPnUubWFwX29wID09IE9NUF9NQVBfREVMRVRFKQorCQkJICAgIGdtayA9IEdPTVBfTUFQ X0RFTEVURTsKKwkJCSAgZWxzZSBpZiAob3AgPT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFU QSkKKwkJCSAgICBnbWsgPSBHT01QX01BUF9SRUxFQVNFOworCQkJICBlbHNlCisJCQkgICAg Z21rID0gR09NUF9NQVBfUE9JTlRFUjsKKwkJCSAgdHJlZSBzaXplOworCQkJICBpZiAoZ21r ID09IEdPTVBfTUFQX1JFTEVBU0UgfHwgZ21rID09IEdPTVBfTUFQX0RFTEVURSkKKwkJCSAg ICBzaXplID0gVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoZGVjbCkpOworCQkJICBlbHNl CisJCQkgICAgc2l6ZSA9IHNpemVfaW50ICgwKTsKIAkJCSAgbm9kZTMgPSBidWlsZF9vbXBf Y2xhdXNlIChpbnB1dF9sb2NhdGlvbiwKIAkJCQkJCSAgICBPTVBfQ0xBVVNFX01BUCk7Ci0J CQkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMywgR09NUF9NQVBfUE9JTlRFUik7 CisJCQkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMywgZ21rKTsKIAkJCSAgT01Q X0NMQVVTRV9ERUNMIChub2RlMykgPSBkZWNsOwotCQkJICBPTVBfQ0xBVVNFX1NJWkUgKG5v ZGUzKSA9IHNpemVfaW50ICgwKTsKKwkJCSAgT01QX0NMQVVTRV9TSVpFIChub2RlMykgPSBz aXplOwogCQkJICBkZWNsID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYgKGRlY2wpOwogCQkJ fQogCQkgICAgfQpAQCAtMzIxMCw1NiArMzI4OSw3MCBAQCBnZmNfdHJhbnNfb21wX2NsYXVz ZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkg ICAgICBnY2NfYXNzZXJ0IChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChwdHIpKSk7CiAJ CSAgICAgIHB0ciA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmIChwdHIpOwogCQkgICAgICBP TVBfQ0xBVVNFX0RFQ0wgKG5vZGUpID0gcHRyOwotCQkgICAgICBub2RlMiA9IGJ1aWxkX29t cF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLAotCQkJCQkJT01QX0NMQVVTRV9NQVApOwotCQkg ICAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAobm9kZTIsIEdPTVBfTUFQX1RPX1BTRVQp OworCQkgICAgICBub2RlMiA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLCBP TVBfQ0xBVVNFX01BUCk7CiAJCSAgICAgIE9NUF9DTEFVU0VfREVDTCAobm9kZTIpID0gZGVj bDsKIAkJICAgICAgT01QX0NMQVVTRV9TSVpFIChub2RlMikgPSBUWVBFX1NJWkVfVU5JVCAo dHlwZSk7Ci0JCSAgICAgIG5vZGUzID0gYnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9jYXRp b24sCi0JCQkJCQlPTVBfQ0xBVVNFX01BUCk7Ci0JCSAgICAgIGlmIChwcmVzZW50KQotCQkJ ewotCQkJICBwdHIgPSBnZmNfY29udl9kZXNjcmlwdG9yX2RhdGFfZ2V0IChkZWNsKTsKLQkJ CSAgcHRyID0gZ2ZjX2J1aWxkX2FkZHJfZXhwciAoTlVMTCwgcHRyKTsKLQkJCSAgcHRyID0g Z2ZjX2J1aWxkX2NvbmRfYXNzaWduX2V4cHIgKGJsb2NrLCBwcmVzZW50LCBwdHIsCi0JCQkJ CQkJICAgIG51bGxfcG9pbnRlcl9ub2RlKTsKLQkJCSAgcHRyID0gYnVpbGRfZm9sZF9pbmRp cmVjdF9yZWYgKHB0cik7Ci0JCQkgIE9NUF9DTEFVU0VfREVDTCAobm9kZTMpID0gcHRyOwot CQkJfQorCQkgICAgICBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9ERUxFVEUpCisJCQlt YXBfa2luZCA9IEdPTVBfTUFQX0RFTEVURTsKKwkJICAgICAgZWxzZSBpZiAob3AgPT0gRVhF Q19PTVBfVEFSR0VUX0VYSVRfREFUQQorCQkJICAgICAgIHx8IG4tPnUubWFwX29wID09IE9N UF9NQVBfUkVMRUFTRSkKKwkJCW1hcF9raW5kID0gR09NUF9NQVBfUkVMRUFTRTsKIAkJICAg ICAgZWxzZQotCQkJT01QX0NMQVVTRV9ERUNMIChub2RlMykKLQkJCSAgPSBnZmNfY29udl9k ZXNjcmlwdG9yX2RhdGFfZ2V0IChkZWNsKTsKLQkJICAgICAgT01QX0NMQVVTRV9TSVpFIChu b2RlMykgPSBzaXplX2ludCAoMCk7Ci0JCSAgICAgIGlmIChuLT51Lm1hcF9vcCA9PSBPTVBf TUFQX0FUVEFDSCkKLQkJCXsKLQkJCSAgLyogU3RhbmRhbG9uZSBhdHRhY2ggY2xhdXNlcyB1 c2VkIHdpdGggYXJyYXlzIHdpdGgKLQkJCSAgICAgZGVzY3JpcHRvcnMgbXVzdCBjb3B5IHRo ZSBkZXNjcmlwdG9yIHRvIHRoZSB0YXJnZXQsCi0JCQkgICAgIGVsc2UgdGhleSB3b24ndCBo YXZlIGFueXRoaW5nIHRvIHBlcmZvcm0gdGhlCi0JCQkgICAgIGF0dGFjaG1lbnQgb250byAo c2VlIE9wZW5BQ0MgMi42LCAiMi42LjMuIERhdGEKLQkJCSAgICAgU3RydWN0dXJlcyB3aXRo IFBvaW50ZXJzIikuICAqLwotCQkJICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAobm9kZTMs IEdPTVBfTUFQX0FUVEFDSCk7Ci0JCQkgIC8qIFdlIGRvbid0IHdhbnQgdG8gbWFwIFBUUiBh dCBhbGwgaW4gdGhpcyBjYXNlLCBzbwotCQkJICAgICBkZWxldGUgaXRzIG5vZGUgYW5kIHNo dWZmbGUgdGhlIG90aGVycyBkb3duLiAgKi8KLQkJCSAgbm9kZSA9IG5vZGUyOwotCQkJICBu b2RlMiA9IG5vZGUzOwotCQkJICBub2RlMyA9IE5VTEw7Ci0JCQkgIGdvdG8gZmluYWxpemVf bWFwX2NsYXVzZTsKLQkJCX0KLQkJICAgICAgZWxzZSBpZiAobi0+dS5tYXBfb3AgPT0gT01Q X01BUF9ERVRBQ0gpCisJCQltYXBfa2luZCA9IEdPTVBfTUFQX1RPX1BTRVQ7CisJCSAgICAg IE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMiwgbWFwX2tpbmQpOworCisJCSAgICAg IGlmIChvcCAhPSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBCisJCQkgICYmIG4tPnUubWFw X29wICE9IE9NUF9NQVBfREVMRVRFCisJCQkgICYmIG4tPnUubWFwX29wICE9IE9NUF9NQVBf UkVMRUFTRSkKIAkJCXsKLQkJCSAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLCBH T01QX01BUF9ERVRBQ0gpOwotCQkJICAvKiBTaW1pbGFybHkgdG8gYWJvdmUsIHdlIGRvbid0 IHdhbnQgdG8gdW5tYXAgUFRSCi0JCQkgICAgIGhlcmUuICAqLwotCQkJICBub2RlID0gbm9k ZTI7Ci0JCQkgIG5vZGUyID0gbm9kZTM7Ci0JCQkgIG5vZGUzID0gTlVMTDsKLQkJCSAgZ290 byBmaW5hbGl6ZV9tYXBfY2xhdXNlOworCQkJICBub2RlMyA9IGJ1aWxkX29tcF9jbGF1c2Ug KGlucHV0X2xvY2F0aW9uLAorCQkJCQkJICAgIE9NUF9DTEFVU0VfTUFQKTsKKwkJCSAgaWYg KHByZXNlbnQpCisJCQkgICAgeworCQkJICAgICAgcHRyID0gZ2ZjX2NvbnZfZGVzY3JpcHRv cl9kYXRhX2dldCAoZGVjbCk7CisJCQkgICAgICBwdHIgPSBnZmNfYnVpbGRfYWRkcl9leHBy IChOVUxMLCBwdHIpOworCQkJICAgICAgcHRyID0gZ2ZjX2J1aWxkX2NvbmRfYXNzaWduX2V4 cHIgKAorCQkJCSAgICAgIGJsb2NrLCBwcmVzZW50LCBwdHIsIG51bGxfcG9pbnRlcl9ub2Rl KTsKKwkJCSAgICAgIHB0ciA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmIChwdHIpOworCQkJ ICAgICAgT01QX0NMQVVTRV9ERUNMIChub2RlMykgPSBwdHI7CisJCQkgICAgfQorCQkJICBl bHNlCisJCQkgICAgT01QX0NMQVVTRV9ERUNMIChub2RlMykKKwkJCSAgICAgID0gZ2ZjX2Nv bnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoZGVjbCk7CisJCQkgIE9NUF9DTEFVU0VfU0laRSAo bm9kZTMpID0gc2l6ZV9pbnQgKDApOworCisJCQkgIGlmIChuLT51Lm1hcF9vcCA9PSBPTVBf TUFQX0FUVEFDSCkKKwkJCSAgICB7CisJCQkgICAgICAvKiBTdGFuZGFsb25lIGF0dGFjaCBj bGF1c2VzIHVzZWQgd2l0aCBhcnJheXMgd2l0aAorCQkJCSBkZXNjcmlwdG9ycyBtdXN0IGNv cHkgdGhlIGRlc2NyaXB0b3IgdG8gdGhlCisJCQkJIHRhcmdldCwgZWxzZSB0aGV5IHdvbid0 IGhhdmUgYW55dGhpbmcgdG8KKwkJCQkgcGVyZm9ybSB0aGUgYXR0YWNobWVudCBvbnRvIChz ZWUgT3BlbkFDQyAyLjYsCisJCQkJICIyLjYuMy4gRGF0YSBTdHJ1Y3R1cmVzIHdpdGggUG9p bnRlcnMiKS4gICovCisJCQkgICAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAobm9kZTMs IEdPTVBfTUFQX0FUVEFDSCk7CisJCQkgICAgICAvKiBXZSBkb24ndCB3YW50IHRvIG1hcCBQ VFIgYXQgYWxsIGluIHRoaXMgY2FzZSwKKwkJCQkgc28gZGVsZXRlIGl0cyBub2RlIGFuZCBz aHVmZmxlIHRoZSBvdGhlcnMKKwkJCQkgZG93bi4gICovCisJCQkgICAgICBub2RlID0gbm9k ZTI7CisJCQkgICAgICBub2RlMiA9IG5vZGUzOworCQkJICAgICAgbm9kZTMgPSBOVUxMOwor CQkJICAgICAgZ290byBmaW5hbGl6ZV9tYXBfY2xhdXNlOworCQkJICAgIH0KKwkJCSAgZWxz ZSBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9ERVRBQ0gpCisJCQkgICAgeworCQkJICAg ICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLCBHT01QX01BUF9ERVRBQ0gpOwor CQkJICAgICAgLyogU2ltaWxhcmx5IHRvIGFib3ZlLCB3ZSBkb24ndCB3YW50IHRvIHVubWFw IFBUUgorCQkJCSBoZXJlLiAgKi8KKwkJCSAgICAgIG5vZGUgPSBub2RlMjsKKwkJCSAgICAg IG5vZGUyID0gbm9kZTM7CisJCQkgICAgICBub2RlMyA9IE5VTEw7CisJCQkgICAgICBnb3Rv IGZpbmFsaXplX21hcF9jbGF1c2U7CisJCQkgICAgfQorCQkJICBlbHNlCisJCQkgICAgT01Q X0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLAorCQkJCQkJICAgICBhbHdheXNfbW9kaWZp ZXIKKwkJCQkJCSAgICAgPyBHT01QX01BUF9BTFdBWVNfUE9JTlRFUgorCQkJCQkJICAgICA6 IEdPTVBfTUFQX1BPSU5URVIpOwogCQkJfQotCQkgICAgICBlbHNlCi0JCQlPTVBfQ0xBVVNF X1NFVF9NQVBfS0lORCAobm9kZTMsCi0JCQkJCQkgYWx3YXlzX21vZGlmaWVyCi0JCQkJCQkg PyBHT01QX01BUF9BTFdBWVNfUE9JTlRFUgotCQkJCQkJIDogR09NUF9NQVBfUE9JTlRFUik7 CiAKIAkJICAgICAgLyogV2UgaGF2ZSB0byBjaGVjayBmb3Igbi0+c3ltLT5hdHRyLmRpbWVu c2lvbiBiZWNhdXNlCiAJCQkgb2Ygc2NhbGFyIGNvYXJyYXlzLiAgKi8KQEAgLTMyNzUsNiAr MzM2OCwyMyBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywg Z2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkJICB0ZW0KIAkJCSAgICA9IGdmY19mdWxs X2FycmF5X3NpemUgKCZjb25kX2Jsb2NrLCBkZWNsLAogCQkJCQkJICAgR0ZDX1RZUEVfQVJS QVlfUkFOSyAodHlwZSkpOworCQkJICB0cmVlIGVsZW1zejsKKwkJCSAgaWYgKG4tPnN5bS0+ dHMudHlwZSA9PSBCVF9DSEFSQUNURVIKKwkJCSAgICAgICYmIG4tPnN5bS0+dHMuZGVmZXJy ZWQpCisJCQkgICAgeworCQkJICAgICAgdHJlZSBsZW4gPSBuLT5zeW0tPnRzLnUuY2wtPmJh Y2tlbmRfZGVjbDsKKwkJCSAgICAgIGxlbiA9IGZvbGRfY29udmVydCAoc2l6ZV90eXBlX25v ZGUsIGxlbik7CisJCQkgICAgICBlbGVtc3ogPSBnZmNfZ2V0X2NoYXJfdHlwZSAobi0+c3lt LT50cy5raW5kKTsKKwkJCSAgICAgIGVsZW1zeiA9IFRZUEVfU0laRV9VTklUIChlbGVtc3op OworCQkJICAgICAgZWxlbXN6ID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgc2l6ZV90eXBl X25vZGUsCisJCQkJCQkgICAgbGVuLCBlbGVtc3opOworCQkJICAgIH0KKwkJCSAgZWxzZQor CQkJICAgIGVsZW1zegorCQkJICAgICAgPSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2dldF9lbGVt ZW50X3R5cGUgKHR5cGUpKTsKKwkJCSAgZWxlbXN6ID0gZm9sZF9jb252ZXJ0IChnZmNfYXJy YXlfaW5kZXhfdHlwZSwgZWxlbXN6KTsKKwkJCSAgdGVtID0gZm9sZF9idWlsZDIgKE1VTFRf RVhQUiwgZ2ZjX2FycmF5X2luZGV4X3R5cGUsCisJCQkJCSAgICAgdGVtLCBlbGVtc3opOwog CQkJICBnZmNfYWRkX21vZGlmeSAoJmNvbmRfYmxvY2ssIHNpemUsIHRlbSk7CiAJCQkgIHRo ZW5fYiA9IGdmY19maW5pc2hfYmxvY2sgKCZjb25kX2Jsb2NrKTsKIAkJCSAgZ2ZjX2luaXRf YmxvY2sgKCZjb25kX2Jsb2NrKTsKQEAgLTMzMDUsNiArMzQxNSwxMiBAQCBnZmNfdHJhbnNf b21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1 c2VzLAogCQkJICBnZmNfaW5pdF9ibG9jayAoJmNvbmRfYmxvY2spOwogCQkJICB0cmVlIHNp emUgPSBnZmNfZnVsbF9hcnJheV9zaXplICgmY29uZF9ibG9jaywgZGVjbCwKIAkJCQkJR0ZD X1RZUEVfQVJSQVlfUkFOSyAodHlwZSkpOworCQkJICB0cmVlIGVsZW1zegorCQkJICAgID0g VFlQRV9TSVpFX1VOSVQgKGdmY19nZXRfZWxlbWVudF90eXBlICh0eXBlKSk7CisJCQkgIGVs ZW1zeiA9IGZvbGRfY29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIGVsZW1zeik7CisJ CQkgIHNpemUgPSBmb2xkX2J1aWxkMiAoTVVMVF9FWFBSLCBnZmNfYXJyYXlfaW5kZXhfdHlw ZSwKKwkJCQkJICAgICAgc2l6ZSwgZWxlbXN6KTsKKwkJCSAgc2l6ZSA9IGdmY19ldmFsdWF0 ZV9ub3cgKHNpemUsICZjb25kX2Jsb2NrKTsKIAkJCSAgaWYgKHByZXNlbnQpCiAJCQkgICAg ewogCQkJICAgICAgdHJlZSB2YXIgPSBnZmNfY3JlYXRlX3ZhciAoZ2ZjX2FycmF5X2luZGV4 X3R5cGUsCkBAIC0zMzIzLDE1ICszNDM5LDYgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChz dG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJCSAgICAg IE9NUF9DTEFVU0VfU0laRSAobm9kZSkgPSBzaXplOwogCQkJICAgIH0KIAkJCX0KLQkJICAg ICAgaWYgKG4tPnN5bS0+YXR0ci5kaW1lbnNpb24pCi0JCQl7Ci0JCQkgIHRyZWUgZWxlbXN6 Ci0JCQkgICAgPSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2dldF9lbGVtZW50X3R5cGUgKHR5cGUp KTsKLQkJCSAgZWxlbXN6ID0gZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwg ZWxlbXN6KTsKLQkJCSAgT01QX0NMQVVTRV9TSVpFIChub2RlKQotCQkJICAgID0gZm9sZF9i dWlsZDIgKE1VTFRfRVhQUiwgZ2ZjX2FycmF5X2luZGV4X3R5cGUsCi0JCQkJCSAgIE9NUF9D TEFVU0VfU0laRSAobm9kZSksIGVsZW1zeik7Ci0JCQl9CiAJCSAgICB9CiAJCSAgZWxzZSBp ZiAocHJlc2VudAogCQkJICAgJiYgVFJFRV9DT0RFIChkZWNsKSA9PSBJTkRJUkVDVF9SRUYK QEAgLTMzNDcsNiArMzQ1NCwzNyBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9j a190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkgICAgfQogCQkgIGVs c2UKIAkJICAgIE9NUF9DTEFVU0VfREVDTCAobm9kZSkgPSBkZWNsOworCisJCSAgaWYgKCFu LT5zeW0tPmF0dHIuZGltZW5zaW9uCisJCSAgICAgICYmIG4tPnN5bS0+dHMudHlwZSA9PSBC VF9DSEFSQUNURVIKKwkJICAgICAgJiYgbi0+c3ltLT50cy5kZWZlcnJlZCkKKwkJICAgIHsK KwkJICAgICAgaWYgKCFERUNMX1AgKGRlY2wpKQorCQkJeworCQkJICBnY2NfYXNzZXJ0IChU UkVFX0NPREUgKGRlY2wpID09IElORElSRUNUX1JFRik7CisJCQkgIGRlY2wgPSBUUkVFX09Q RVJBTkQgKGRlY2wsIDApOworCQkJfQorCQkgICAgICB0cmVlIGNvbmQgPSBmb2xkX2J1aWxk Ml9sb2MgKGlucHV0X2xvY2F0aW9uLCBORV9FWFBSLAorCQkJCQkJICAgYm9vbGVhbl90eXBl X25vZGUsCisJCQkJCQkgICBkZWNsLCBudWxsX3BvaW50ZXJfbm9kZSk7CisJCSAgICAgIGlm IChwcmVzZW50KQorCQkJY29uZCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24s CisJCQkJCQlUUlVUSF9BTkRJRl9FWFBSLAorCQkJCQkJYm9vbGVhbl90eXBlX25vZGUsCisJ CQkJCQlwcmVzZW50LCBjb25kKTsKKwkJICAgICAgdHJlZSBsZW4gPSBuLT5zeW0tPnRzLnUu Y2wtPmJhY2tlbmRfZGVjbDsKKwkJICAgICAgbGVuID0gZm9sZF9jb252ZXJ0IChzaXplX3R5 cGVfbm9kZSwgbGVuKTsKKwkJICAgICAgdHJlZSBzaXplID0gZ2ZjX2dldF9jaGFyX3R5cGUg KG4tPnN5bS0+dHMua2luZCk7CisJCSAgICAgIHNpemUgPSBUWVBFX1NJWkVfVU5JVCAoc2l6 ZSk7CisJCSAgICAgIHNpemUgPSBmb2xkX2J1aWxkMiAoTVVMVF9FWFBSLCBzaXplX3R5cGVf bm9kZSwgbGVuLCBzaXplKTsKKwkJICAgICAgc2l6ZSA9IGJ1aWxkM19sb2MgKGlucHV0X2xv Y2F0aW9uLAorCQkJCQkJCSBDT05EX0VYUFIsCisJCQkJCQkJIHNpemVfdHlwZV9ub2RlLAor CQkJCQkJCSBjb25kLCBzaXplLAorCQkJCQkJCSBzaXplX3plcm9fbm9kZSk7CisJCSAgICAg IHNpemUgPSBnZmNfZXZhbHVhdGVfbm93IChzaXplLCBibG9jayk7CisJCSAgICAgIE9NUF9D TEFVU0VfU0laRSAobm9kZSkgPSBzaXplOworCQkgICAgfQogCQl9CiAJICAgICAgZWxzZSBp ZiAobi0+ZXhwcgogCQkgICAgICAgJiYgbi0+ZXhwci0+ZXhwcl90eXBlID09IEVYUFJfVkFS SUFCTEUKQEAgLTMzNjMsNyArMzUwMSw3IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3Rt dGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCSAgICAgICYm ICEoUE9JTlRFUl9UWVBFX1AgKHR5cGUpCiAJCQkgICAmJiBHRkNfREVTQ1JJUFRPUl9UWVBF X1AgKFRSRUVfVFlQRSAodHlwZSkpKSkKIAkJICAgIGsgPSBHT01QX01BUF9GSVJTVFBSSVZB VEVfUE9JTlRFUjsKLQkJICBnZmNfdHJhbnNfb21wX2FycmF5X3NlY3Rpb24gKGJsb2NrLCBu LCBkZWNsLCBlbGVtZW50LCBrLAorCQkgIGdmY190cmFuc19vbXBfYXJyYXlfc2VjdGlvbiAo YmxvY2ssIG9wLCBuLCBkZWNsLCBlbGVtZW50LCBrLAogCQkJCQkgICAgICAgbm9kZSwgbm9k ZTIsIG5vZGUzLCBub2RlNCk7CiAJCX0KIAkgICAgICBlbHNlIGlmIChuLT5leHByCkBAIC0z NDExLDkgKzM1NDksMTUgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAq YmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJCQkJICAgZm9sZF9jb252ZXJ0 IChzaXplX3R5cGVfbm9kZSwKIAkJCQkJICAgICAgIHNlLnN0cmluZ19sZW5ndGgpLAogCQkJ CQkgICBUWVBFX1NJWkVfVU5JVCAodG1wKSk7CisJCQkgIGlmIChuLT51Lm1hcF9vcCA9PSBP TVBfTUFQX0RFTEVURSkKKwkJCSAgICBraW5kID0gR09NUF9NQVBfREVMRVRFOworCQkJICBl bHNlIGlmIChvcCA9PSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBKQorCQkJICAgIGtpbmQg PSBHT01QX01BUF9SRUxFQVNFOworCQkJICBlbHNlCisJCQkgICAga2luZCA9IEdPTVBfTUFQ X1RPOwogCQkJICBub2RlMyA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLAog CQkJCQkJICAgIE9NUF9DTEFVU0VfTUFQKTsKLQkJCSAgT01QX0NMQVVTRV9TRVRfTUFQX0tJ TkQgKG5vZGUzLCBHT01QX01BUF9UTyk7CisJCQkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5E IChub2RlMywga2luZCk7CiAJCQkgIE9NUF9DTEFVU0VfREVDTCAobm9kZTMpID0gc2Uuc3Ry aW5nX2xlbmd0aDsKIAkJCSAgT01QX0NMQVVTRV9TSVpFIChub2RlMykKIAkJCSAgICA9IFRZ UEVfU0laRV9VTklUIChnZmNfY2hhcmxlbl90eXBlX25vZGUpOwpAQCAtMzUxNywxMSArMzY2 MSwxNyBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2Zj X29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkJICAgID0gZ2ZjX2Z1bGxfYXJyYXlfc2l6ZSAo YmxvY2ssIGlubmVyLCByYW5rKTsKIAkJCSAgdHJlZSBlbGVtc3oKIAkJCSAgICA9IFRZUEVf U0laRV9VTklUIChnZmNfZ2V0X2VsZW1lbnRfdHlwZSAodHlwZSkpOwotCQkJICBpZiAoR09N UF9NQVBfQ09QWV9UT19QIChPTVBfQ0xBVVNFX01BUF9LSU5EIChub2RlKSkpCi0JCQkgICAg bWFwX2tpbmQgPSBHT01QX01BUF9UTzsKKwkJCSAgbWFwX2tpbmQgPSBPTVBfQ0xBVVNFX01B UF9LSU5EIChub2RlKTsKKwkJCSAgaWYgKEdPTVBfTUFQX0NPUFlfVE9fUCAobWFwX2tpbmQp CisJCQkgICAgICB8fCBtYXBfa2luZCA9PSBHT01QX01BUF9BTExPQykKKwkJCSAgICBtYXBf a2luZCA9ICgoR09NUF9NQVBfQUxXQVlTX1AgKG1hcF9raW5kKQorCQkJCQkgfHwgZ2ZjX2V4 cHJfYXR0ciAobi0+ZXhwcikucG9pbnRlcikKKwkJCQkJPyBHT01QX01BUF9BTFdBWVNfVE8g OiBHT01QX01BUF9UTyk7CiAJCQkgIGVsc2UgaWYgKG4tPnUubWFwX29wID09IE9NUF9NQVBf UkVMRUFTRQogCQkJCSAgIHx8IG4tPnUubWFwX29wID09IE9NUF9NQVBfREVMRVRFKQotCQkJ ICAgIG1hcF9raW5kID0gT01QX0NMQVVTRV9NQVBfS0lORCAobm9kZSk7CisJCQkgICAgOwor CQkJICBlbHNlIGlmIChvcCA9PSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBKQorCQkJICAg IG1hcF9raW5kID0gR09NUF9NQVBfUkVMRUFTRTsKIAkJCSAgZWxzZQogCQkJICAgIG1hcF9r aW5kID0gR09NUF9NQVBfQUxMT0M7CiAJCQkgIGlmICghb3BlbmFjYwpAQCAtMzU2Miw2ICsz NzEyLDggQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdm Y19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJCSAgICAgIG5vZGUyID0gbm9kZTsKIAkJCSAg ICAgIG5vZGUgPSBkZXNjX25vZGU7ICAvKiBQdXQgZmlyc3QuICAqLwogCQkJICAgIH0KKwkJ CSAgaWYgKG9wID09IEVYRUNfT01QX1RBUkdFVF9FWElUX0RBVEEpCisJCQkgICAgZ290byBm aW5hbGl6ZV9tYXBfY2xhdXNlOwogCQkJICBub2RlMyA9IGJ1aWxkX29tcF9jbGF1c2UgKGlu cHV0X2xvY2F0aW9uLAogCQkJCQkJICAgIE9NUF9DTEFVU0VfTUFQKTsKIAkJCSAgT01QX0NM QVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLApAQCAtMzU5Miw3ICszNzQ0LDcgQEAgZ2ZjX3Ry YW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAq Y2xhdXNlcywKIAkJICAgICAgYm9vbCBlbGVtZW50ID0gbGFzdHJlZi0+dS5hci50eXBlID09 IEFSX0VMRU1FTlQ7CiAJCSAgICAgIGdvbXBfbWFwX2tpbmQga2luZCA9IChvcGVuYWNjID8g R09NUF9NQVBfQVRUQUNIX0RFVEFDSAogCQkJCQkJICAgIDogR09NUF9NQVBfQUxXQVlTX1BP SU5URVIpOwotCQkgICAgICBnZmNfdHJhbnNfb21wX2FycmF5X3NlY3Rpb24gKGJsb2NrLCBu LCBpbm5lciwgZWxlbWVudCwKKwkJICAgICAgZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9u IChibG9jaywgb3AsIG4sIGlubmVyLCBlbGVtZW50LAogCQkJCQkJICAga2luZCwgbm9kZSwg bm9kZTIsIG5vZGUzLAogCQkJCQkJICAgbm9kZTQpOwogCQkgICAgfQpAQCAtMzYxMSw2ICsz NzYzLDggQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdm Y19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJb21wX2NsYXVzZXMgPSBnZmNfdHJhbnNfYWRk X2NsYXVzZSAobm9kZTMsIG9tcF9jbGF1c2VzKTsKIAkgICAgICBpZiAobm9kZTQpCiAJCW9t cF9jbGF1c2VzID0gZ2ZjX3RyYW5zX2FkZF9jbGF1c2UgKG5vZGU0LCBvbXBfY2xhdXNlcyk7 CisJICAgICAgaWYgKG5vZGU1KQorCQlvbXBfY2xhdXNlcyA9IGdmY190cmFuc19hZGRfY2xh dXNlIChub2RlNSwgb21wX2NsYXVzZXMpOwogCSAgICB9CiAJICBicmVhazsKIAljYXNlIE9N UF9MSVNUX1RPOgpAQCAtNzQ3NSw3ICs3NjI5LDcgQEAgZ2ZjX3RyYW5zX29tcF90YXJnZXRf ZXhpdF9kYXRhIChnZmNfY29kZSAqY29kZSkKIAogICBnZmNfc3RhcnRfYmxvY2sgKCZibG9j ayk7CiAgIG9tcF9jbGF1c2VzID0gZ2ZjX3RyYW5zX29tcF9jbGF1c2VzICgmYmxvY2ssIGNv ZGUtPmV4dC5vbXBfY2xhdXNlcywKLQkJCQkgICAgICAgY29kZS0+bG9jKTsKKwkJCQkgICAg ICAgY29kZS0+bG9jLCBmYWxzZSwgZmFsc2UsIGNvZGUtPm9wKTsKICAgc3RtdCA9IGJ1aWxk MV9sb2MgKGlucHV0X2xvY2F0aW9uLCBPTVBfVEFSR0VUX0VYSVRfREFUQSwgdm9pZF90eXBl X25vZGUsCiAJCSAgICAgb21wX2NsYXVzZXMpOwogICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sg KCZibG9jaywgc3RtdCk7CmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxpZnkuY2MgYi9nY2MvZ2lt cGxpZnkuY2MKaW5kZXggYWRlNmUzMzVkYTcuLjk0ZDVkZDM1MTVlIDEwMDY0NAotLS0gYS9n Y2MvZ2ltcGxpZnkuY2MKKysrIGIvZ2NjL2dpbXBsaWZ5LmNjCkBAIC0xMDcyMiw3ICsxMDcy Miw3IEBAIGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwgZ2ltcGxl X3NlcSAqcHJlX3AsCiB7CiAgIHN0cnVjdCBnaW1wbGlmeV9vbXBfY3R4ICpjdHgsICpvdXRl cl9jdHg7CiAgIHRyZWUgYzsKLSAgdHJlZSAqcHJldl9saXN0X3AgPSBOVUxMLCAqb3JpZ19s aXN0X3AgPSBsaXN0X3A7CisgIHRyZWUgKm9yaWdfbGlzdF9wID0gbGlzdF9wOwogICBpbnQg aGFuZGxlZF9kZXBlbmRfaXRlcmF0b3JzID0gLTE7CiAgIGludCBub3dhaXQgPSAtMTsKIApA QCAtMTExNDksMzEgKzExMTQ5LDYgQEAgZ2ltcGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAodHJl ZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIAkgICAgZGVmYXVsdDoKIAkgICAgICBi cmVhazsKIAkgICAgfQotCSAgLyogRm9yIEZvcnRyYW4sIG5vdCBvbmx5IHRoZSBwb2ludGVy IHRvIHRoZSBkYXRhIGlzIG1hcHBlZCBidXQgYWxzbwotCSAgICAgdGhlIGFkZHJlc3Mgb2Yg dGhlIHBvaW50ZXIsIHRoZSBhcnJheSBkZXNjcmlwdG9yIGV0Yy47IGZvcgotCSAgICAgJ2V4 aXQgZGF0YScgLSBhbmQgaW4gcGFydGljdWxhciBmb3IgJ2RlbGV0ZTonIC0gaGF2aW5nIGFu ICdhbGxvYzonCi0JICAgICBkb2VzIG5vdCBtYWtlIHNlbnNlLiAgTGlrZXdpc2UsIGZvciAn dXBkYXRlJyBvbmx5IHRyYW5zZmVycmluZyB0aGUKLQkgICAgIGRhdGEgaXRzZWxmIGlzIG5l ZWRlZCBhcyB0aGUgcmVzdCBoYXMgYmVlbiBoYW5kbGVkIGluIHByZXZpb3VzCi0JICAgICBk aXJlY3RpdmVzLiAgSG93ZXZlciwgZm9yICdleGl0IGRhdGEnLCB0aGUgYXJyYXkgZGVzY3Jp cHRvciBuZWVkcwotCSAgICAgdG8gYmUgZGVsZXRlOyBoZW5jZSwgd2UgdHVybiB0aGUgTUFQ X1RPX1BTRVQgaW50byBhIE1BUF9ERUxFVEUuCi0KLQkgICAgIE5PVEU6IEdlbmVyYWxseSwg aXQgaXMgbm90IHNhZmUgdG8gcGVyZm9ybSAiZW50ZXIgZGF0YSIgb3BlcmF0aW9ucwotCSAg ICAgb24gYXJyYXlzIHdoZXJlIHRoZSBkYXRhICpvciB0aGUgZGVzY3JpcHRvciogbWF5IGdv IG91dCBvZiBzY29wZQotCSAgICAgYmVmb3JlIGEgY29ycmVzcG9uZGluZyAiZXhpdCBkYXRh IiBvcGVyYXRpb24gLS0gYW5kIHN1Y2ggYQotCSAgICAgZGVzY3JpcHRvciBtYXkgYmUgc3lu dGhlc2l6ZWQgdGVtcG9yYXJpbHksIGUuZy4gdG8gcGFzcyBhbgotCSAgICAgZXhwbGljaXQt c2hhcGUgYXJyYXkgdG8gYSBmdW5jdGlvbiBleHBlY3RpbmcgYW4gYXNzdW1lZC1zaGFwZQot CSAgICAgYXJndW1lbnQuICBQZXJmb3JtaW5nICJlbnRlciBkYXRhIiBpbnNpZGUgdGhlIGNh bGxlZCBmdW5jdGlvbgotCSAgICAgd291bGQgdGh1cyBiZSBwcm9ibGVtYXRpYy4gICovCi0J ICBpZiAoY29kZSA9PSBPTVBfVEFSR0VUX0VYSVRfREFUQQotCSAgICAgICYmIE9NUF9DTEFV U0VfTUFQX0tJTkQgKGMpID09IEdPTVBfTUFQX1RPX1BTRVQpCi0JICAgIE9NUF9DTEFVU0Vf U0VUX01BUF9LSU5EIChjLCBPTVBfQ0xBVVNFX01BUF9LSU5EICgqcHJldl9saXN0X3ApCi0J CQkJCT09IEdPTVBfTUFQX0RFTEVURQotCQkJCQk/IEdPTVBfTUFQX0RFTEVURSA6IEdPTVBf TUFQX1JFTEVBU0UpOwotCSAgZWxzZSBpZiAoKGNvZGUgPT0gT01QX1RBUkdFVF9FWElUX0RB VEEgfHwgY29kZSA9PSBPTVBfVEFSR0VUX1VQREFURSkKLQkJICAgJiYgKE9NUF9DTEFVU0Vf TUFQX0tJTkQgKGMpID09IEdPTVBfTUFQX1BPSU5URVIKLQkJICAgICAgIHx8IE9NUF9DTEFV U0VfTUFQX0tJTkQgKGMpID09IEdPTVBfTUFQX1RPX1BTRVQpKQotCSAgICByZW1vdmUgPSB0 cnVlOwotCiAJICBpZiAocmVtb3ZlKQogCSAgICBicmVhazsKIAkgIGlmIChERUNMX1AgKGRl Y2wpICYmIG91dGVyX2N0eCAmJiAocmVnaW9uX3R5cGUgJiBPUlRfQUNDKSkKQEAgLTExNDMz LDIxICsxMTQwOCw2IEBAIGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUgKmxpc3Rf cCwgZ2ltcGxlX3NlcSAqcHJlX3AsCiAJCSAgcmVtb3ZlID0gdHJ1ZTsKIAkJICBicmVhazsK IAkJfQotCi0JICAgICAgaWYgKCFyZW1vdmUKLQkJICAmJiBPTVBfQ0xBVVNFX01BUF9LSU5E IChjKSAhPSBHT01QX01BUF9BTFdBWVNfUE9JTlRFUgotCQkgICYmIE9NUF9DTEFVU0VfTUFQ X0tJTkQgKGMpICE9IEdPTVBfTUFQX0FUVEFDSF9ERVRBQ0gKLQkJICAmJiBPTVBfQ0xBVVNF X01BUF9LSU5EIChjKSAhPSBHT01QX01BUF9UT19QU0VUCi0JCSAgJiYgT01QX0NMQVVTRV9D SEFJTiAoYykKLQkJICAmJiBPTVBfQ0xBVVNFX0NPREUgKE9NUF9DTEFVU0VfQ0hBSU4gKGMp KSA9PSBPTVBfQ0xBVVNFX01BUAotCQkgICYmICgoT01QX0NMQVVTRV9NQVBfS0lORCAoT01Q X0NMQVVTRV9DSEFJTiAoYykpCi0JCSAgICAgICA9PSBHT01QX01BUF9BTFdBWVNfUE9JTlRF UikKLQkJICAgICAgfHwgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKE9NUF9DTEFVU0VfQ0hBSU4g KGMpKQotCQkJICA9PSBHT01QX01BUF9BVFRBQ0hfREVUQUNIKQotCQkgICAgICB8fCAoT01Q X0NMQVVTRV9NQVBfS0lORCAoT01QX0NMQVVTRV9DSEFJTiAoYykpCi0JCQkgID09IEdPTVBf TUFQX1RPX1BTRVQpKSkKLQkJcHJldl9saXN0X3AgPSBsaXN0X3A7Ci0KIAkgICAgICBicmVh azsKIAkgICAgfQogCSAgZmxhZ3MgPSBHT1ZEX01BUCB8IEdPVkRfRVhQTElDSVQ7CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL2ZpbmFsaXplLTEuZiBi L2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvZmluYWxpemUtMS5mCmluZGV4IDFl NWJmMGJhMWU2Li4yM2YwZmZjNjI3ZSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy9nb2FjYy9maW5hbGl6ZS0xLmYKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9nb2FjYy9maW5hbGl6ZS0xLmYKQEAgLTIwLDggKzIwLDggQEAKICEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBvbXAgdGFyZ2V0IG9hY2Nf ZXhpdF9kYXRhIG1hcFxcKGRlbGV0ZTpkZWxfZiBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkg ZmluYWxpemUkIiAxICJnaW1wbGUiIH0gfQogCiAhJEFDQyBFWElUIERBVEEgRklOQUxJWkUg REVMRVRFIChkZWxfZl9wKDI6NSkpCi0hIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10 aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGV4aXQgZGF0YSBtYXBcXChyZWxlYXNlOlxcKlxcKGlu dGVnZXJcXChraW5kPS5cXClcXFxbMDpcXFxdIFxcKlxcKSBwYXJtXFwuMFxcLmRhdGEgXFxc W2xlbjogXFteXFxcXVxdK1xcXF1cXCkgbWFwXFwodG86ZGVsX2ZfcCBcXFxbcG9pbnRlciBz ZXQsIGxlbjogXFswLTlcXStcXFxdXFwpIG1hcFxcKGFsbG9jOlxcKGludGVnZXJcXChraW5k PTFcXClcXFxbMDpcXFxdIFxcKiByZXN0cmljdFxcKSBkZWxfZl9wXFwuZGF0YSBcXFxbcG9p bnRlciBhc3NpZ24sIGJpYXM6IFxcKC4qaW50LipcXCkgcGFybVxcLjBcXC5kYXRhIC0gXFwo LippbnQuKlxcKSBkZWxfZl9wXFwuZGF0YVxcXF1cXCkgZmluYWxpemU7JCIgMSAib3JpZ2lu YWwiIH0gfQotISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJh Z21hIG9tcCB0YXJnZXQgb2FjY19leGl0X2RhdGEgbWFwXFwoZGVsZXRlOk1FTSA8XFtePlxd Kz4gXFxcW1xcKGludGVnZXJcXChraW5kPS5cXClcXFxbMDpcXFxdIFxcKlxcKV9cWzAtOVxd K1xcXF0gXFxcW2xlbjogXFteXFxcXVxdK1xcXF1cXCkgbWFwXFwodG86ZGVsX2ZfcCBcXFxb cG9pbnRlciBzZXQsIGxlbjogXFswLTlcXStcXFxdXFwpIG1hcFxcKGFsbG9jOmRlbF9mX3Bc XC5kYXRhIFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogXFteXFxcXVxdK1xcXF1cXCkgZmlu YWxpemUkIiAxICJnaW1wbGUiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgIig/bikjcHJhZ21hIGFjYyBleGl0IGRhdGEgbWFwXFwocmVsZWFzZTpcXCpcXChp bnRlZ2VyXFwoa2luZD0uXFwpXFxcWzA6XFxcXSBcXCpcXCkgcGFybVxcLjBcXC5kYXRhIFxc XFtsZW46IFxbXlxcXF1cXStcXFxdXFwpIG1hcFxcKHJlbGVhc2U6ZGVsX2ZfcCBcXFxbbGVu OiBcWzAtOVxdK1xcXF1cXCkgbWFwXFwoYWxsb2M6XFwoaW50ZWdlclxcKGtpbmQ9MVxcKVxc XFswOlxcXF0gXFwqIHJlc3RyaWN0XFwpIGRlbF9mX3BcXC5kYXRhIFxcXFtwb2ludGVyIGFz c2lnbiwgYmlhczogXFwoLippbnQuKlxcKSBwYXJtXFwuMFxcLmRhdGEgLSBcXCguKmludC4q XFwpIGRlbF9mX3BcXC5kYXRhXFxcXVxcKSBmaW5hbGl6ZTskIiAxICJvcmlnaW5hbCIgfSB9 CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgb21w IHRhcmdldCBvYWNjX2V4aXRfZGF0YSBtYXBcXChkZWxldGU6TUVNIDxcW14+XF0rPiBcXFxb XFwoaW50ZWdlclxcKGtpbmQ9LlxcKVxcXFswOlxcXF0gXFwqXFwpX1xbMC05XF0rXFxcXSBc XFxbbGVuOiBcW15cXFxdXF0rXFxcXVxcKSBtYXBcXChkZWxldGU6ZGVsX2ZfcCBcXFxbbGVu OiBcWzAtOVxdK1xcXF1cXCkgbWFwXFwoYWxsb2M6ZGVsX2ZfcFxcLmRhdGEgXFxcW3BvaW50 ZXIgYXNzaWduLCBiaWFzOiBcW15cXFxdXF0rXFxcXVxcKSBmaW5hbGl6ZSQiIDEgImdpbXBs ZSIgfSB9CiAKICEkQUNDIEVYSVQgREFUQSBDT1BZT1VUIChjcG9fcikKICEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgZXhpdCBkYXRhIG1h cFxcKGZyb206Y3BvX3JcXCk7JCIgMSAib3JpZ2luYWwiIH0gfQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL21hcC0xMC5mOTAgYi9nY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL2dvbXAvbWFwLTEwLmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uYzEyYmYyNWFkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvbWFwLTEwLmY5MApAQCAtMCwwICsxLDY5IEBACish IHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmR1bXAtdHJlZS1vbXBsb3dlciIgfQorCish IElmIGVudGVyIGRhdGEgYWRkcyBhIChHT01QX01BUF8pUE9JTlRFUiBhdHRhY2htZW50LCBl eGl0IGRhdGEgbmVlZHMgdG8gcmVtb3ZlCishIGl0IGFnYWluLiBJZiBub3QgdGhlcmUgY2Fu IGJlIGFsbCBraW5kIG9mIGlzc3VlcywgaW4gcGFydGljdWxhciB3aGVuCishIHN0YWNrIG1l bW9yeSB3YXMgbWFwcGVkLCByZXVzZWQgbGF0ZXIgYW5kIG1hcHBlZCBhZ2Fpbi4KKworc3Vi cm91dGluZSB0ZXN0X2FhIChhYTIsIGFhMykKKyAgaW50ZWdlcihraW5kPTQpLCBhbGxvY2F0 YWJsZSA6OiBhYTEsIGFhMiwgYWEzCisgIG9wdGlvbmFsIDo6IGFhMworICAhJG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXAoYWExKQorICAhJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChh YTEpCisgICEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhYTIpCisgICEkb21wIHRhcmdl dCBleGl0IGRhdGEgbWFwKGFhMikKKyAgISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFh MykKKyAgISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoYWEzKQorZW5kCisKK3N1YnJvdXRp bmUgdGVzdF9wcCAocHAyLCBwcDMpCisgIGludGVnZXIoa2luZD00KSwgYWxsb2NhdGFibGUg OjogcHAxLCBwcDIsIHBwMworICBvcHRpb25hbCA6OiBwcDMKKyAgISRvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwKHBwMSkKKyAgISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAocHAxKQor ICAhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAocHAyKQorICAhJG9tcCB0YXJnZXQgZXhp dCBkYXRhIG1hcChwcDIpCisgICEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChwcDMpCisg ICEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKHBwMykKK2VuZAorCitzdWJyb3V0aW5lIHRl c3RfcHByZWxlYXNlIChycDIsIHJwMykKKyAgaW50ZWdlcihraW5kPTQpLCBhbGxvY2F0YWJs ZSA6OiBycDEsIHJwMiwgcnAzCisgIG9wdGlvbmFsIDo6IHJwMworICAhJG9tcCB0YXJnZXQg ZW50ZXIgZGF0YSBtYXAocnAxKQorICAhJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChyZWxl YXNlOnJwMSkKKyAgISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHJwMikKKyAgISRvbXAg dGFyZ2V0IGV4aXQgZGF0YSBtYXAocmVsZWFzZTpycDIpCisgICEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcChycDMpCisgICEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKHJlbGVhc2U6 cnAzKQorZW5kCisKK3N1YnJvdXRpbmUgdGVzdF9wcGRlbGV0ZSAoZHAyLCBkcDMpCisgIGlu dGVnZXIoa2luZD00KSwgYWxsb2NhdGFibGUgOjogZHAxLCBkcDIsIGRwMworICBvcHRpb25h bCA6OiBkcDMKKyAgISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGRwMSkKKyAgISRvbXAg dGFyZ2V0IGV4aXQgZGF0YSBtYXAoZGVsZXRlOmRwMSkKKyAgISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKGRwMikKKyAgISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZGVsZXRlOmRw MikKKyAgISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGRwMykKKyAgISRvbXAgdGFyZ2V0 IGV4aXQgZGF0YSBtYXAoZGVsZXRlOmRwMykKK2VuZAorCisKKyEgeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wICIjcHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXBcXCh0bzpc XCphYTEuXFswLTlcXStfXFswLTlcXSsgXFxcW2xlbjogNFxcXF1cXCkgbWFwXFwoYWxsb2M6 YWExIFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCkiICJvbXBsb3dlciIgfSB9 CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiI3ByYWdtYSBvbXAgdGFyZ2V0IGV4 aXQgZGF0YSBtYXBcXChmcm9tOlxcKmFhMS5cWzAtOVxdK19cWzAtOVxdKyBcXFxbbGVuOiA0 XFxcXVxcKSBtYXBcXChyZWxlYXNlOmFhMSBcXFxbbGVuOiAuXFxcXVxcKSIgIm9tcGxvd2Vy IiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICIjcHJhZ21hIG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXBcXCh0bzpcXCpfXFswLTlcXSsgXFxcW2xlbjogNFxcXF1cXCkg bWFwXFwoYWxsb2M6XFwqYWEyLlxbMC05XF0rX1xbMC05XF0rIFxcXFtwb2ludGVyIGFzc2ln biwgYmlhczogMFxcXF1cXCkgbWFwXFwoYWxsb2M6YWEyIFxcXFtwb2ludGVyIGFzc2lnbiwg YmlhczogMFxcXF1cXCkiICJvbXBsb3dlciIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcCAiI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXBcXChmcm9tOlxcKl9c WzAtOVxdKyBcXFxbbGVuOiA0XFxcXVxcKSBtYXBcXChyZWxlYXNlOmFhMiBcXFxbbGVuOiAu XFxcXVxcKSBtYXBcXChyZWxlYXNlOlxcKmFhMi5cWzAtOVxdK19cWzAtOVxdKyBcXFxbbGVu OiAuXFxcXVxcKSIgIm9tcGxvd2VyIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wICIjcHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXBcXCh0bzpcXCpELlxbMC05 XF0rIFxcXFtsZW46IDRcXFxdXFwpIG1hcFxcKGFsbG9jOlxcKmFhMy5cWzAtOVxdK19cWzAt OVxdKyBcXFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXFxdXFwpIG1hcFxcKGFsbG9jOmFh MyBcXFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXFxdXFwpIiAib21wbG93ZXIiIH0gfQor ISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIiNwcmFnbWEgb21wIHRhcmdldCBleGl0 IGRhdGEgbWFwXFwoZnJvbTpcXCpELlxbMC05XF0rIFxcXFtsZW46IDRcXFxdXFwpIG1hcFxc KHJlbGVhc2U6YWEzIFxcXFtsZW46IC5cXFxdXFwpIG1hcFxcKHJlbGVhc2U6XFwqYWEzLlxb MC05XF0rX1xbMC05XF0rIFxcXFtsZW46IC5cXFxdXFwpIiAib21wbG93ZXIiIH0gfQorISB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIiNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBk YXRhIG1hcFxcKHRvOlxcKnBwMS5cWzAtOVxdK19cWzAtOVxdKyBcXFxbbGVuOiA0XFxcXVxc KSBtYXBcXChhbGxvYzpwcDEgXFxcW3BvaW50ZXIgYXNzaWduLCBiaWFzOiAwXFxcXVxcKSIg Im9tcGxvd2VyIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICIjcHJhZ21h IG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcFxcKGZyb206XFwqcHAxLlxbMC05XF0rX1xbMC05 XF0rIFxcXFtsZW46IDRcXFxdXFwpIG1hcFxcKHJlbGVhc2U6cHAxIFxcXFtsZW46IC5cXFxd XFwpIiAib21wbG93ZXIiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIiNw cmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcFxcKHRvOlxcKl9cWzAtOVxdKyBcXFxb bGVuOiA0XFxcXVxcKSBtYXBcXChhbGxvYzpcXCpwcDIuXFswLTlcXStfXFswLTlcXSsgXFxc W3BvaW50ZXIgYXNzaWduLCBiaWFzOiAwXFxcXVxcKSBtYXBcXChhbGxvYzpwcDIgXFxcW3Bv aW50ZXIgYXNzaWduLCBiaWFzOiAwXFxcXVxcKSIgIm9tcGxvd2VyIiB9IH0KKyEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wICIjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1h cFxcKGZyb206XFwqX1xbMC05XF0rIFxcXFtsZW46IDRcXFxdXFwpIG1hcFxcKHJlbGVhc2U6 cHAyIFxcXFtsZW46IC5cXFxdXFwpIG1hcFxcKHJlbGVhc2U6XFwqcHAyLlxbMC05XF0rX1xb MC05XF0rIFxcXFtsZW46IC5cXFxdXFwpIiAib21wbG93ZXIiIH0gfQorISB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAgIiNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcFxc KHRvOlxcKkQuXFswLTlcXSsgXFxcW2xlbjogNFxcXF1cXCkgbWFwXFwoYWxsb2M6XFwqcHAz LlxbMC05XF0rX1xbMC05XF0rIFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCkg bWFwXFwoYWxsb2M6cHAzIFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCkiICJv bXBsb3dlciIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiI3ByYWdtYSBv bXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXBcXChmcm9tOlxcKkQuXFswLTlcXSsgXFxcW2xlbjog NFxcXF1cXCkgbWFwXFwocmVsZWFzZTpwcDMgXFxcW2xlbjogLlxcXF1cXCkgbWFwXFwocmVs ZWFzZTpcXCpwcDMuXFswLTlcXStfXFswLTlcXSsgXFxcW2xlbjogLlxcXF1cXCkiICJvbXBs b3dlciIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiI3ByYWdtYSBvbXAg dGFyZ2V0IGV4aXQgZGF0YSBtYXBcXChyZWxlYXNlOnJwMSBcXFxbbGVuOiAuXFxcXVxcKSBt YXBcXChyZWxlYXNlOlxcKnJwMS5cWzAtOVxdK19cWzAtOVxdKyBcXFxbbGVuOiA0XFxcXVxc KSIgIm9tcGxvd2VyIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICIjcHJh Z21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcFxcKHJlbGVhc2U6cnAyIFxcXFtsZW46IC5c XFxdXFwpIG1hcFxcKHJlbGVhc2U6XFwqcnAyLlxbMC05XF0rX1xbMC05XF0rIFxcXFtsZW46 IC5cXFxdXFwpIG1hcFxcKHJlbGVhc2U6XFwqX1xbMC05XF0rIFxcXFtsZW46IDRcXFxdXFwp IiAib21wbG93ZXIiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIiNwcmFn bWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwXFwocmVsZWFzZTpcXCpELlxbMC05XF0rIFxc XFtsZW46IDRcXFxdXFwpIG1hcFxcKHJlbGVhc2U6cnAzIFxcXFtsZW46IC5cXFxdXFwpIG1h cFxcKHJlbGVhc2U6XFwqcnAzLlxbMC05XF0rX1xbMC05XF0rIFxcXFtsZW46IC5cXFxdXFwp IiAib21wbG93ZXIiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIiNwcmFn bWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwXFwoZGVsZXRlOmRwMSBcXFxbbGVuOiAuXFxc XVxcKSBtYXBcXChkZWxldGU6XFwqZHAxLlxbMC05XF0rX1xbMC05XF0rIFxcXFtsZW46IDRc XFxdXFwpIiAib21wbG93ZXIiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAg IiNwcmFnbWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwXFwoZGVsZXRlOmRwMiBcXFxbbGVu OiAuXFxcXVxcKSBtYXBcXChkZWxldGU6XFwqZHAyLlxbMC05XF0rX1xbMC05XF0rIFxcXFts ZW46IC5cXFxdXFwpIG1hcFxcKGRlbGV0ZTpcXCpfXFswLTlcXSsgXFxcW2xlbjogNFxcXF1c XCkiICJvbXBsb3dlciIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiI3By YWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXBcXChkZWxldGU6XFwqRC5cWzAtOVxdKyBc XFxbbGVuOiA0XFxcXVxcKSBtYXBcXChkZWxldGU6ZHAzIFxcXFtsZW46IC5cXFxdXFwpIG1h cFxcKGRlbGV0ZTpcXCpkcDMuXFswLTlcXStfXFswLTlcXSsgXFxcW2xlbjogLlxcXF1cXCki ICJvbXBsb3dlciIgfSB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRn L2dvbXAvbWFwLTkuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL21hcC05 LmY5MAppbmRleCA5ZTdiODExYzhhZi4uYjc3MGI5MzFiZWUgMTAwNjQ0Ci0tLSBhL2djYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9tYXAtOS5mOTAKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nZm9ydHJhbi5kZy9nb21wL21hcC05LmY5MApAQCAtMiw3ICsyLDcgQEAKIAogISBQUiBm b3J0cmFuLzEwODU0NQogCi0hIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiI3ByYWdt YSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwXFwoc3RydWN0OnggXFxcW2xlbjogMVxcXF1c XCkgbWFwXFwodG86eC5hIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSBtYXBcXCh0bzpNRU0g PGludGVnZXJcXChraW5kPTRcXClcXFxbMDpcXFxdPiBcXFxbXFwoaW50ZWdlclxcKGtpbmQ9 NFxcKVxcXFswOlxcXF0gXFwqXFwpX1xbMC05XF0rXSBcXFxbbGVuOiBfXFswLTlcXStcXFxd XFwpIG1hcFxcKGFsd2F5c19wb2ludGVyOnguYS5kYXRhIFxcXFtwb2ludGVyIGFzc2lnbiwg YmlhczogMFxcXF1cXCkiICJvbXBsb3dlciIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcCAiI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwXFwoc3RydWN0Ongg XFxcW2xlbjogMVxcXF1cXCkgbWFwXFwoYWx3YXlzLHRvOnguYSBcXFxbbGVuOiBcWzAtOVxd K1xcXF1cXCkgbWFwXFwodG86TUVNIDxpbnRlZ2VyXFwoa2luZD00XFwpXFxcWzA6XFxcXT4g XFxcW1xcKGludGVnZXJcXChraW5kPTRcXClcXFxbMDpcXFxdIFxcKlxcKV9cWzAtOVxdK10g XFxcW2xlbjogX1xbMC05XF0rXFxcXVxcKSBtYXBcXChhbHdheXNfcG9pbnRlcjp4LmEuZGF0 YSBcXFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXFxdXFwpIiAib21wbG93ZXIiIH0gfQog CiBwcm9ncmFtIHAKICAgIHR5cGUgdApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy9nb21wL3ByNzgyNjAtMi5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRn L2dvbXAvcHI3ODI2MC0yLmY5MAppbmRleCBmNWQ4ODg1OTJiOS4uY2Q3NzFiMzNhMjUgMTAw NjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9wcjc4MjYwLTIuZjkw CisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9wcjc4MjYwLTIuZjkwCkBA IC00OCw5ICs0OCwxMSBAQCBjb250YWlucwogICBlbmQgc3Vicm91dGluZSBzdWIKIGVuZCBt b2R1bGUgbQogCi0hIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiI3ByYWdt YSBvbXAgdGFyZ2V0IGRhdGEgbWFwXFwodG9mcm9tOlxcKlxcKGludGVnZXJcXChraW5kPTRc XClcXFxbMDpcXFxdIFxcKiByZXN0cmljdFxcKSBhcnIuZGF0YSBcXFxbbGVuOiBELlxbMC05 XF0rIFxcKiA0XFxcXVxcKSBtYXBcXCh0bzphcnIgXFxcW3BvaW50ZXIgc2V0LCBsZW46IC4u XFxcXVxcKSBtYXBcXChhbGxvYzpcXChpbnRlZ2VyXFwoa2luZD00XFwpXFxcWzA6XFxcXSBc XCogcmVzdHJpY3RcXCkgYXJyLmRhdGEgXFxcW3BvaW50ZXIgYXNzaWduLCBiaWFzOiAwXFxc XVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISBDaGVjayBmb3IgbXVsdGlwbGljYXRpb246IGxl biA9IGFycmF5c19zaXplICogNDxieXRlcz46CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiRFxcLlxbMC05XF0rID0gRFxcLlxbMC05XF0rIFxcKiA0OyIgMiAib3Jp Z2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIiNwcmFn bWEgb21wIHRhcmdldCBkYXRhIG1hcFxcKHRvZnJvbTpcXCpcXChpbnRlZ2VyXFwoa2luZD00 XFwpXFxcWzA6XFxcXSBcXCogcmVzdHJpY3RcXCkgYXJyLmRhdGEgXFxcW2xlbjogRC5cWzAt OVxdK1xcXF1cXCkgbWFwXFwodG86YXJyIFxcXFtwb2ludGVyIHNldCwgbGVuOiAuLlxcXF1c XCkgbWFwXFwoYWxsb2M6XFwoaW50ZWdlclxcKGtpbmQ9NFxcKVxcXFswOlxcXF0gXFwqIHJl c3RyaWN0XFwpIGFyci5kYXRhIFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCki IDEgIm9yaWdpbmFsIiB9IH0KICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICIjcHJhZ21hIG9tcCB0YXJnZXQgdXBkYXRlIHRvXFwoXFwqXFwoaW50ZWdlclxcKGtpbmQ9 NFxcKVxcXFswOlxcXF0gXFwqIHJlc3RyaWN0XFwpIGFyci5kYXRhIFxcXFtsZW46IEQuXFsw LTlcXSsgXFwqIDRcXFxdXFwpIiAxICJvcmlnaW5hbCIgfSB9Ci0hIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiI3ByYWdtYSBvbXAgdGFyZ2V0IGRhdGEgbWFwXFwodG9m cm9tOlxcKlxcKGludGVnZXJcXChraW5kPTRcXClcXFxbMDpcXFxdIFxcKiByZXN0cmljdFxc KSBfX3Jlc3VsdC0+ZGF0YSBcXFxbbGVuOiBELlxbMC05XF0rIFxcKiA0XFxcXVxcKSBtYXBc XCh0bzpcXCpfX3Jlc3VsdCBcXFxbcG9pbnRlciBzZXQsIGxlbjogLi5cXFxdXFwpIG1hcFxc KGFsbG9jOlxcKGludGVnZXJcXChraW5kPTRcXClcXFxbMDpcXFxdIFxcKiByZXN0cmljdFxc KSBfX3Jlc3VsdC0+ZGF0YSBcXFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXFxdXFwpIG1h cFxcKGFsbG9jOl9fcmVzdWx0IFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCki IDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICIjcHJhZ21hIG9tcCB0YXJnZXQgZGF0YSBtYXBcXCh0b2Zyb206XFwqXFwoaW50ZWdlclxc KGtpbmQ9NFxcKVxcXFswOlxcXF0gXFwqIHJlc3RyaWN0XFwpIF9fcmVzdWx0LT5kYXRhIFxc XFtsZW46IEQuXFswLTlcXStcXFxdXFwpIG1hcFxcKHRvOlxcKl9fcmVzdWx0IFxcXFtwb2lu dGVyIHNldCwgbGVuOiAuLlxcXF1cXCkgbWFwXFwoYWxsb2M6XFwoaW50ZWdlclxcKGtpbmQ9 NFxcKVxcXFswOlxcXF0gXFwqIHJlc3RyaWN0XFwpIF9fcmVzdWx0LT5kYXRhIFxcXFtwb2lu dGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCkgbWFwXFwoYWxsb2M6X19yZXN1bHQgXFxcW3Bv aW50ZXIgYXNzaWduLCBiaWFzOiAwXFxcXVxcKSIgMSAib3JpZ2luYWwiIH0gfQogISB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIiNwcmFnbWEgb21wIHRhcmdldCB1cGRh dGUgdG9cXChcXCpcXChpbnRlZ2VyXFwoa2luZD00XFwpXFxcWzA6XFxcXSBcXCogcmVzdHJp Y3RcXCkgX19yZXN1bHQtPmRhdGEgXFxcW2xlbjogRC5cWzAtOVxdKyBcXCogNFxcXF1cXCki IDEgIm9yaWdpbmFsIiB9IH0KICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICIjcHJhZ21hIG9tcCB0YXJnZXQgZGF0YSBtYXBcXCh0b2Zyb206XFwqX19yZXN1bHQuMFxc KSBtYXBcXChhbGxvYzpfX3Jlc3VsdC4wIFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxc XF1cXCkiIDIgIm9yaWdpbmFsIiB9IH0KICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICIjcHJhZ21hIG9tcCB0YXJnZXQgdXBkYXRlIHRvXFwoXFwqX19yZXN1bHQuMFxc KSIgMiAib3JpZ2luYWwiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9nb21wL3RhcmdldC1leGl0LWRhdGEuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9nb21wL3RhcmdldC1leGl0LWRhdGEuZjkwCmluZGV4IGVkNTdkMDA3MmQ3Li4yMTlk YzQ2N2M0NiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3Rh cmdldC1leGl0LWRhdGEuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29t cC90YXJnZXQtZXhpdC1kYXRhLmY5MApAQCAtMTUsNiArMTUsNiBAQCBpbnRlZ2VyLCBhbGxv Y2F0YWJsZSA6OiBvbmUoOiksIHR3byg6KSwgdGhyZWUoOikKICEkb21wIHRhcmdldCBleGl0 IGRhdGEgbWFwKGZyb206dGhyZWUpCiBlbmQKIAotISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAgIm9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcFxcKGRlbGV0ZTouKlxcKSBtYXBcXChk ZWxldGU6b25lIFxcXFtsZW46IC4qXFxcXVxcKSIgIm9tcGxvd2VyIiB9IH0KLSEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wICJvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXBcXChyZWxl YXNlOi4qXFwpIG1hcFxcKHJlbGVhc2U6dHdvIFxcXFtsZW46IC4qXFxcXVxcKSIgIm9tcGxv d2VyIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICIjcHJhZ21hIG9tcCB0 YXJnZXQgZXhpdCBkYXRhIG1hcFxcKGRlbGV0ZTpvbmUgXFxcW2xlbjogXFswLTlcXStcXFxd XFwpIG1hcFxcKGRlbGV0ZTpNRU0gIiAib21wbG93ZXIiIH0gfQorISB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAgIiNwcmFnbWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwXFwocmVs ZWFzZTp0d28gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIG1hcFxcKHJlbGVhc2U6TUVNICIg Im9tcGxvd2VyIiB9IH0KICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJvbXAgdGFy Z2V0IGV4aXQgZGF0YSBtYXBcXChmcm9tOi4qXFwpIG1hcFxcKHJlbGVhc2U6dGhyZWUgXFxc W2xlbjogLipcXFxdXFwpIiAib21wbG93ZXIiIH0gfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkwIGIvbGli Z29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkw CmluZGV4IDVkOTc1NjZjNjZjLi4xYjNjZGY5ZTc2YSAxMDA2NDQKLS0tIGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkwCisrKyBi L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS0z LmY5MApAQCAtMTcsNiArMTcsNiBAQCB2YXIlcDIgPSBbNDYsNjc5LDU0XQogICBpZiAoYW55 ICh2YXIlcDEgLz0gWzIyLDUzLDI4LDYsNF0pKSBzdG9wIDMKICAgaWYgKGFueSAodmFyJXAy IC89IFs0Niw2NzksNTRdKSkgc3RvcCA0CiAhJG9tcCBlbmQgdGFyZ2V0Ci0hISRvbXAgdGFy Z2V0IGV4aXQgZGF0YSBtYXAoZnJvbTp2YXIlcDEsIHZhciVwMikKKyEkb21wIHRhcmdldCBl eGl0IGRhdGEgbWFwKGZyb206dmFyJXAxLCB2YXIlcDIpCiBlbmQKIApkaWZmIC0tZ2l0IGEv bGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTQu ZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1k YXRhLTQuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MTky YmYyOWQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Zm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS00LmY5MApAQCAtMCwwICsxLDU0MCBAQAorISBD aGVjayB0aGF0ICdtYXAoYWxsb2M6JyBwcm9wZXJseSB3b3JrcyB3aXRoCishIC0gZGVmZXJy ZWQtbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmdzCishIC0gYXJyYXlzIHdpdGggYXJyYXkgZGVz Y3JpcHRvcnMKKyEgRm9yIHRob3NlLCB0aGUgYXJyYXkgZGVzY3JpcHRvciAvIHN0cmluZyBs ZW5ndGggbXVzdCBiZSBtYXBwZWQgd2l0aCAndG86JworCitwcm9ncmFtIG1haW4KK2ltcGxp Y2l0IG5vbmUKKwordHlwZSB0CisgIGludGVnZXIgOjogaWMoMjo1KSwgaWMyCisgIGNoYXJh Y3RlcihsZW49MTEpIDo6IGNjc3RyKDM6NCksIGNjc3RyMgorICBjaGFyYWN0ZXIobGVuPTEx LGtpbmQ9NCkgOjogY2M0c3RyKDM6NyksIGNjNHN0cjIKKyAgaW50ZWdlciwgcG9pbnRlciA6 OiBwYyg6KSwgcGMyCisgIGNoYXJhY3RlcihsZW49OiksIHBvaW50ZXIgOjogcGNzdHIoOiks IHBjc3RyMgorICBjaGFyYWN0ZXIobGVuPTosa2luZD00KSwgcG9pbnRlciA6OiBwYzRzdHIo OiksIHBjNHN0cjIKK2VuZCB0eXBlIHQKKwordHlwZSh0KSA6OiBkdAorCitpbnRlZ2VyIDo6 IGlpKDUpLCBpaTIKK2NoYXJhY3RlcihsZW49MTEpIDo6IGNsc3RyKC0xOjEpLCBjbHN0cjIK K2NoYXJhY3RlcihsZW49MTEsa2luZD00KSA6OiBjbDRzdHIoMDozKSwgY2w0c3RyMgoraW50 ZWdlciwgcG9pbnRlciA6OiBpcCg6KSwgaXAyCitpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBp YSg6KSwgaWEyCitjaGFyYWN0ZXIobGVuPTopLCBwb2ludGVyIDo6IHBzdHIoOiksIHBzdHIy CitjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6OiBhc3RyKDopLCBhc3RyMgorY2hh cmFjdGVyKGxlbj06LGtpbmQ9NCksIHBvaW50ZXIgOjogcDRzdHIoOiksIHA0c3RyMgorY2hh cmFjdGVyKGxlbj06LGtpbmQ9NCksIGFsbG9jYXRhYmxlIDo6IGE0c3RyKDopLCBhNHN0cjIK KworYWxsb2NhdGUoZHQlcGMoNSksIGR0JXBjMikKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49 MikgOjogZHQlcGNzdHIoMikpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQpIDo6IGR0JXBj c3RyMikKKworYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0zLGtpbmQ9NCkgOjogZHQlcGM0c3Ry KDI6MykpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUsa2luZD00KSA6OiBkdCVwYzRzdHIy KQorCithbGxvY2F0ZShpcCg1KSwgaXAyLCBpYSg4KSwgaWEyKQorYWxsb2NhdGUoY2hhcmFj dGVyKGxlbj0yKSA6OiBwc3RyKC0yOjApKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj00KSA6 OiBwc3RyMikKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NikgOjogYXN0cigzOjUpKQorYWxs b2NhdGUoY2hhcmFjdGVyKGxlbj04KSA6OiBhc3RyMikKKworYWxsb2NhdGUoY2hhcmFjdGVy KGxlbj0zLGtpbmQ9NCkgOjogcDRzdHIoMjo0KSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49 NSxraW5kPTQpIDo6IHA0c3RyMikKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NyxraW5kPTQp IDo6IGE0c3RyKC0yOjMpKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj05LGtpbmQ9NCkgOjog YTRzdHIyKQorCisKKyEgaW50ZWdlciA6OiBpYygyOjUpLCBpYzIKKworISRvbXAgdGFyZ2V0 IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVpYykKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6 IGR0JWljKQorICBpZiAoc2l6ZShkdCVpYykgLz0gNCkgZXJyb3Igc3RvcAorICBpZiAobGJv dW5kKGR0JWljLCAxKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlaWMsIDEp IC89IDUpIGVycm9yIHN0b3AKKyAgZHQlaWMgPSBbMjIsIDMzLCA0NCwgNTVdCishJG9tcCBl bmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVpYykKK2lm IChzaXplKGR0JWljKSAvPSA0KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0JWljLCAxKSAv PSAyKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JWljLCAxKSAvPSA1KSBlcnJvciBzdG9w CitpZiAoYW55IChkdCVpYyAvPSBbMjIsIDMzLCA0NCwgNTVdKSkgZXJyb3Igc3RvcAorCish JG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JWljMikKKyEkb21wIHRhcmdl dCBtYXAoYWxsb2M6IGR0JWljMikKKyAgZHQlaWMyID0gNDIKKyEkb21wIGVuZCB0YXJnZXQK KyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWljMikKK2lmIChkdCVpYzIg Lz0gNDIpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49MTEpIDo6IGNjc3RyKDM6 NCksIGNjc3RyMgorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JWNj c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlY2NzdHIpCisgIGlmIChsZW4oZHQl Y2NzdHIpIC89IDExKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JWNjc3RyKSAvPSAyKSBl cnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlY2NzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AK KyAgaWYgKHVib3VuZChkdCVjY3N0ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAorICBkdCVjY3N0 ciA9IFsiMTIzNDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsiXQorISRvbXAgZW5kIHRhcmdldAor ISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlY2NzdHIpCitpZiAobGVuKGR0 JWNjc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlY2NzdHIpIC89IDIpIGVy cm9yIHN0b3AKK2lmIChsYm91bmQoZHQlY2NzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lm ICh1Ym91bmQoZHQlY2NzdHIsIDEpIC89IDQpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JWNj c3RyIC89IFsiMTIzNDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsiXSkpIGVycm9yIHN0b3AKKwor ISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVjY3N0cjIpCishJG9tcCB0 YXJnZXQgbWFwKGFsbG9jOiBkdCVjY3N0cjIpCisgIGlmIChsZW4oZHQlY2NzdHIyKSAvPSAx MSkgZXJyb3Igc3RvcAorICBkdCVjY3N0cjIgPSAiQUJDREVGR0hJSksiCishJG9tcCBlbmQg dGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVjY3N0cjIpCitp ZiAobGVuKGR0JWNjc3RyMikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChkdCVjY3N0cjIgLz0g IkFCQ0RFRkdISUpLIikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj0xMSxraW5k PTQpIDo6IGNjNHN0cigzOjcpLCBjYzRzdHIyCisKKyEgVmFsdWUgY2hlY2sgZmFpbHMKKyEk b21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQlY2M0c3RyKQorISRvbXAgdGFy Z2V0IG1hcChhbGxvYzogZHQlY2M0c3RyKQorICBpZiAobGVuKGR0JWNjNHN0cikgLz0gMTEp IGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlY2M0c3RyKSAvPSA1KSBlcnJvciBzdG9wCisg IGlmIChsYm91bmQoZHQlY2M0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmICh1Ym91 bmQoZHQlY2M0c3RyLCAxKSAvPSA3KSBlcnJvciBzdG9wCisgIGR0JWNjNHN0ciA9IFs0XyIx MjM0NTY3ODkwMSIsIDRfImFiY2RlZmdoaWprIiwgJgorICAgICAgICAgICAgICAgNF8icWVy ZnRjZWE2ZHMiLCA0XyJhMWY5ZzM3Z2E0LiIsICYKKyAgICAgICAgICAgICAgIDRfIjQ1bmd3 ajU2c2oyIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFw KGZyb206IGR0JWNjNHN0cikKK2lmIChsZW4oZHQlY2M0c3RyKSAvPSAxMSkgZXJyb3Igc3Rv cAoraWYgKHNpemUoZHQlY2M0c3RyKSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0 JWNjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKHVib3VuZChkdCVjYzRzdHIsIDEp IC89IDcpIGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoMykgLz0gNF8iMTIzNDU2Nzg5MDEi KSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyKDQpIC89IDRfImFiY2RlZmdoaWprIikgZXJy b3Igc3RvcAoraWYgKGR0JWNjNHN0cig1KSAvPSA0XyJxZXJmdGNlYTZkcyIpIGVycm9yIHN0 b3AKK2lmIChkdCVjYzRzdHIoNikgLz0gNF8iYTFmOWczN2dhNC4iKSBlcnJvciBzdG9wCitp ZiAoZHQlY2M0c3RyKDcpIC89IDRfIjQ1bmd3ajU2c2oyIikgZXJyb3Igc3RvcAorCishJG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JWNjNHN0cjIpCishJG9tcCB0YXJn ZXQgbWFwKGFsbG9jOiBkdCVjYzRzdHIyKQorICBpZiAobGVuKGR0JWNjNHN0cjIpIC89IDEx KSBlcnJvciBzdG9wCisgIGR0JWNjNHN0cjIgPSA0XyJBQkNERUZHSElKSyIKKyEkb21wIGVu ZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWNjNHN0cjIp CitpZiAobGVuKGR0JWNjNHN0cjIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3Ry MiAvPSA0XyJBQkNERUZHSElKSyIpIGVycm9yIHN0b3AKKworCishIGludGVnZXIsIHBvaW50 ZXIgOjogcGMoOiksIHBjMgorISBhbGxvY2F0ZShkdCVwYyg1KSwgZHQlcGMyKQorCishIGxp YmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAw CisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQlcGMpCishJG9tcCB0 YXJnZXQgbWFwKGFsbG9jOiBkdCVwYykKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGMp KSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JXBjKSAvPSA1KSBlcnJvciBzdG9wCisgIGlm IChsYm91bmQoZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChkdCVw YywgMSkgLz0gNSkgZXJyb3Igc3RvcAorICBkdCVwYyA9IFsxMSwgMjIsIDMzLCA0NCwgNTVd CishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBk dCVwYykKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjKSkgZXJyb3Igc3RvcAoraWYgKHNp emUoZHQlcGMpIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlcGMsIDEpIC89IDEp IGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlcGMsIDEpIC89IDUpIGVycm9yIHN0b3AKK2lm IChhbnkgKGR0JXBjIC89IFsxMSwgMjIsIDMzLCA0NCwgNTVdKSkgZXJyb3Igc3RvcAorCish JG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBjMikKKyEkb21wIHRhcmdl dCBtYXAoYWxsb2M6IGR0JXBjMikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGMyKSkg ZXJyb3Igc3RvcAorICBkdCVwYzIgPSA5OQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFy Z2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGMyKQoraWYgKGR0JXBjMiAvPSA5OSkgZXJy b3Igc3RvcAoraWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGMyKSkgZXJyb3Igc3RvcAorCisK KyEgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBwY3N0cig6KSwgcGNzdHIyCishIGFs bG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogZHQlcGNzdHIoMikpCishIGFsbG9jYXRlKGNo YXJhY3RlcihsZW49NCkgOjogZHQlcGNzdHIyKQorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0 X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAwCisKKyEkb21wIHRhcmdldCBl bnRlciBkYXRhIG1hcChhbGxvYzogZHQlcGNzdHIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9j OiBkdCVwY3N0cikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGNzdHIpKSBlcnJvciBz dG9wCisgIGlmIChsZW4oZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUo ZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVwY3N0ciwgMSkg Lz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JXBjc3RyLCAxKSAvPSAyKSBlcnJv ciBzdG9wCisgIGR0JXBjc3RyID0gWyIwMSIsICJqayJdCishJG9tcCBlbmQgdGFyZ2V0Cish JG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwY3N0cikKK2lmICgubm90LiBh c3NvY2lhdGVkKGR0JXBjc3RyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihkdCVwY3N0cikgLz0g MikgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lm IChsYm91bmQoZHQlcGNzdHIsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQl cGNzdHIsIDEpIC89IDIpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JXBjc3RyIC89IFsiMDEi LCAiamsiXSkpIGVycm9yIHN0b3AKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9l eGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgwMQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0 YSBtYXAoYWxsb2M6IGR0JXBjc3RyMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JXBj c3RyMikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGNzdHIyKSkgZXJyb3Igc3RvcAor ICBpZiAobGVuKGR0JXBjc3RyMikgLz0gNCkgZXJyb3Igc3RvcAorICBkdCVwY3N0cjIgPSAi SElKSyIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZy b206IGR0JXBjc3RyMikKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjc3RyMikpIGVycm9y IHN0b3AKK2lmIChsZW4oZHQlcGNzdHIyKSAvPSA0KSBlcnJvciBzdG9wCitpZiAoZHQlcGNz dHIyIC89ICJISUpLIikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06LGtpbmQ9 NCksIHBvaW50ZXIgOjogcGM0c3RyKDopLCBwYzRzdHIyCishIGFsbG9jYXRlKGNoYXJhY3Rl cihsZW49MyxraW5kPTQpIDo6IGR0JXBjNHN0cigyOjMpKQorISBhbGxvY2F0ZShjaGFyYWN0 ZXIobGVuPTUsa2luZD00KSA6OiBkdCVwYzRzdHIyKQorCishIGxpYmdvbXA6IEdPTVBfdGFy Z2V0X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAwCishIHN0cnVjdHVyZSBl bGVtZW50IHdoZW4gb3RoZXIgbWFwcGVkIGVsZW1lbnRzIGZyb20gdGhlIHNhbWUgc3RydWN0 dXJlIHdlcmVuJ3QgbWFwcGVkIHRvZ2V0aGVyIHdpdGggaXQKKyEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcChhbGxvYzogZHQlcGM0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzog ZHQlcGM0c3RyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYzRzdHIpKSBlcnJvciBz dG9wCisgIGlmIChsZW4oZHQlcGM0c3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChzaXpl KGR0JXBjNHN0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JXBjNHN0ciwg MSkgLz0gMikgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMykg ZXJyb3Igc3RvcAorICBkdCVwYzRzdHIgPSBbNF8iNDU2IiwgNF8idHp1Il0KKyEkb21wIGVu ZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBjNHN0cikK K2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cikpIGVycm9yIHN0b3AKK2lmIChsZW4o ZHQlcGM0c3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVwYzRzdHIpIC89IDIp IGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlcGM0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9w CitpZiAodWJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKGR0JXBj NHN0cigyKSAvPSA0XyI0NTYiKSBlcnJvciBzdG9wCitpZiAoZHQlcGM0c3RyKDMpIC89IDRf InR6dSIpIGVycm9yIHN0b3AKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0 X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgwMQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBt YXAoYWxsb2M6IGR0JXBjNHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwYzRz dHIyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYzRzdHIyKSkgZXJyb3Igc3RvcAor ICBpZiAobGVuKGR0JXBjNHN0cjIpIC89IDUpIGVycm9yIHN0b3AKKyAgZHQlcGM0c3RyMiA9 IDRfIjk4NzY1IgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBt YXAoZnJvbTogZHQlcGM0c3RyMikKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cjIp KSBlcnJvciBzdG9wCitpZiAobGVuKGR0JXBjNHN0cjIpIC89IDUpIGVycm9yIHN0b3AKK2lm IChkdCVwYzRzdHIyIC89IDRfIjk4NzY1IikgZXJyb3Igc3RvcAorCisKKyEgaW50ZWdlciA6 OiBpaSg1KSwgaWkyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogaWkp CishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpaSkKKyAgaWYgKHNpemUoaWkpIC89IDUpIGVy cm9yIHN0b3AKKyAgaWYgKGxib3VuZChpaSwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAo dWJvdW5kKGlpLCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGlpID0gWy0xLCAtMiwgLTMsIC00 LCAtNV0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZy b206IGlpKQoraWYgKHNpemUoaWkpIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoaWks IDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoaWksIDEpIC89IDUpIGVycm9yIHN0 b3AKK2lmIChhbnkgKGlpIC89IFstMSwgLTIsIC0zLCAtNCwgLTVdKSkgZXJyb3Igc3RvcAor CishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGlpMikKKyEkb21wIHRhcmdl dCBtYXAoYWxsb2M6IGlpMikKKyAgaWkyID0gLTQxMAorISRvbXAgZW5kIHRhcmdldAorISRv bXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaWkyKQoraWYgKGlpMiAvPSAtNDEwKSBl cnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTExKSA6OiBjbHN0cigtMToxKSwgY2xz dHIyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogY2xzdHIpCishJG9t cCB0YXJnZXQgbWFwKGFsbG9jOiBjbHN0cikKKyAgaWYgKGxlbihjbHN0cikgLz0gMTEpIGVy cm9yIHN0b3AKKyAgaWYgKHNpemUoY2xzdHIpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKGxi b3VuZChjbHN0ciwgMSkgLz0gLTEpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChjbHN0ciwg MSkgLz0gMSkgZXJyb3Igc3RvcAorICBjbHN0ciA9IFsiMTIzNDU2Nzg5MDEiLCAiYWJjZGVm Z2hpamsiLCAiQUJDREVGR0hJSksiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0 IGV4aXQgZGF0YSBtYXAoZnJvbTogY2xzdHIpCitpZiAobGVuKGNsc3RyKSAvPSAxMSkgZXJy b3Igc3RvcAoraWYgKHNpemUoY2xzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChsYm91bmQo Y2xzdHIsIDEpIC89IC0xKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGNsc3RyLCAxKSAvPSAx KSBlcnJvciBzdG9wCitpZiAoYW55IChjbHN0ciAvPSBbIjEyMzQ1Njc4OTAxIiwgImFiY2Rl ZmdoaWprIiwgIkFCQ0RFRkdISUpLIl0pKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBl bnRlciBkYXRhIG1hcChhbGxvYzogY2xzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzog Y2xzdHIyKQorICBpZiAobGVuKGNsc3RyMikgLz0gMTEpIGVycm9yIHN0b3AKKyAgY2xzdHIy ID0gIkFCQ0RFRmdoaWprIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQg ZGF0YSBtYXAoZnJvbTogY2xzdHIyKQoraWYgKGxlbihjbHN0cjIpIC89IDExKSBlcnJvciBz dG9wCitpZiAoY2xzdHIyIC89ICJBQkNERUZnaGlqayIpIGVycm9yIHN0b3AKKworCishIGNo YXJhY3RlcihsZW49MTEsa2luZD00KSA6OiBjbDRzdHIoMDozKSwgY2w0c3RyMgorCishJG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGNsNHN0cikKKyEkb21wIHRhcmdldCBt YXAoYWxsb2M6IGNsNHN0cikKKyAgaWYgKGxlbihjbDRzdHIpIC89IDExKSBlcnJvciBzdG9w CisgIGlmIChzaXplKGNsNHN0cikgLz0gNCkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGNs NHN0ciwgMSkgLz0gMCkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGNsNHN0ciwgMSkgLz0g MykgZXJyb3Igc3RvcAorICBjbDRzdHIgPSBbNF8iMTIzNDU2Nzg5MDEiLCA0XyJhYmNkZWZn aGlqayIsICYKKyAgICAgICAgICAgIDRfInFlcmZ0Y2VhNmRzIiwgNF8iYTFmOWczN2dhNC4i XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTog Y2w0c3RyKQoraWYgKGxlbihjbDRzdHIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoc2l6ZShj bDRzdHIpIC89IDQpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoY2w0c3RyLCAxKSAvPSAwKSBl cnJvciBzdG9wCitpZiAodWJvdW5kKGNsNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYg KGNsNHN0cigwKSAvPSA0XyIxMjM0NTY3ODkwMSIpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIo MSkgLz0gNF8iYWJjZGVmZ2hpamsiKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDIpIC89IDRf InFlcmZ0Y2VhNmRzIikgZXJyb3Igc3RvcAoraWYgKGNsNHN0cigzKSAvPSA0XyJhMWY5ZzM3 Z2E0LiIpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9j OiBjbDRzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogY2w0c3RyMikKKyAgaWYgKGxl bihjbDRzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBjbDRzdHIyID0gNF8iQUJDREVGR0hJ SksiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9t OiBjbDRzdHIyKQoraWYgKGxlbihjbDRzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKGNs NHN0cjIgLz0gNF8iQUJDREVGR0hJSksiKSBlcnJvciBzdG9wCisKKworISBhbGxvY2F0ZShp cCg1KSwgaXAyLCBpYSg4KSwgaWEyKQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAo YWxsb2M6IGlwKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogaXApCisgIGlmICgubm90LiBh c3NvY2lhdGVkKGlwKSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShpcCkgLz0gNSkgZXJyb3Ig c3RvcAorICBpZiAobGJvdW5kKGlwLCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGlmICh1Ym91 bmQoaXAsIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgaXAgPSBbMTEsIDIyLCAzMywgNDQsIDU1 XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTog aXApCitpZiAoLm5vdC4gYXNzb2NpYXRlZChpcCkpIGVycm9yIHN0b3AKK2lmIChzaXplKGlw KSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGlwLCAxKSAvPSAxKSBlcnJvciBzdG9w CitpZiAodWJvdW5kKGlwLCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChpcCAvPSBb MTEsIDIyLCAzMywgNDQsIDU1XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKGFsbG9jOiBpcDIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpcDIpCisg IGlmICgubm90LiBhc3NvY2lhdGVkKGlwMikpIGVycm9yIHN0b3AKKyAgaXAyID0gOTkKKyEk b21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlwMikK K2lmIChpcDIgLz0gOTkpIGVycm9yIHN0b3AKK2lmICgubm90LiBhc3NvY2lhdGVkKGlwMikp IGVycm9yIHN0b3AKKworCishIGFsbG9jYXRlKGlwKDUpLCBpcDIsIGlhKDgpLCBpYTIpCisK KyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogaWEpCishJG9tcCB0YXJnZXQg bWFwKGFsbG9jOiBpYSkKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChpYSkpIGVycm9yIHN0b3AK KyAgaWYgKHNpemUoaWEpIC89IDgpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChpYSwgMSkg Lz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlhLCAxKSAvPSA4KSBlcnJvciBzdG9w CisgIGlhID0gWzEsMiwzLDQsNSw2LDcsOF0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRh cmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlhKQoraWYgKC5ub3QuIGFsbG9jYXRlZChpYSkp IGVycm9yIHN0b3AKK2lmIChzaXplKGlhKSAvPSA4KSBlcnJvciBzdG9wCitpZiAobGJvdW5k KGlhLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGlhLCAxKSAvPSA4KSBlcnJv ciBzdG9wCitpZiAoYW55IChpYSAvPSBbMSwyLDMsNCw1LDYsNyw4XSkpIGVycm9yIHN0b3AK KworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBpYTIpCishJG9tcCB0YXJn ZXQgbWFwKGFsbG9jOiBpYTIpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoaWEyKSkgZXJyb3Ig c3RvcAorICBpYTIgPSAxMDIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0 IGRhdGEgbWFwKGZyb206IGlhMikKK2lmIChpYTIgLz0gMTAyKSBlcnJvciBzdG9wCitpZiAo Lm5vdC4gYWxsb2NhdGVkKGlhMikpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49 OiksIHBvaW50ZXIgOjogcHN0cig6KSwgcHN0cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxl bj0yKSA6OiBwc3RyKC0yOjApKQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQpIDo6IHBz dHIyKQorCishIGxpYmdvbXA6IG52cHR4X2FsbG9jIGVycm9yOiBvdXQgb2YgbWVtb3J5CisK KyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogcHN0cikKKyEkb21wIHRhcmdl dCBtYXAoYWxsb2M6IHBzdHIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKHBzdHIpKSBlcnJv ciBzdG9wCisgIGlmIChsZW4ocHN0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShw c3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQocHN0ciwgMSkgLz0gLTIpIGVy cm9yIHN0b3AKKyAgaWYgKHVib3VuZChwc3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCisgIHBz dHIgPSBbIjAxIiwgImprIiwgImFxIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdl dCBleGl0IGRhdGEgbWFwKGZyb206IHBzdHIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChwc3Ry KSkgZXJyb3Igc3RvcAoraWYgKGxlbihwc3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAoc2l6 ZShwc3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAobGJvdW5kKHBzdHIsIDEpIC89IC0yKSBl cnJvciBzdG9wCitpZiAodWJvdW5kKHBzdHIsIDEpIC89IDApIGVycm9yIHN0b3AKK2lmIChh bnkgKHBzdHIgLz0gWyIwMSIsICJqayIsICJhcSJdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0 YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IHBzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChh bGxvYzogcHN0cjIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKHBzdHIyKSkgZXJyb3Igc3Rv cAorICBpZiAobGVuKHBzdHIyKSAvPSA0KSBlcnJvciBzdG9wCisgIHBzdHIyID0gIkhJSksi CishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBw c3RyMikKK2lmICgubm90LiBhc3NvY2lhdGVkKHBzdHIyKSkgZXJyb3Igc3RvcAoraWYgKGxl bihwc3RyMikgLz0gNCkgZXJyb3Igc3RvcAoraWYgKHBzdHIyIC89ICJISUpLIikgZXJyb3Ig c3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjogYXN0cig6KSwg YXN0cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj02KSA6OiBhc3RyKDM6NSkpCishIGFs bG9jYXRlKGNoYXJhY3RlcihsZW49OCkgOjogYXN0cjIpCisKKyEgbGliZ29tcDogbnZwdHhf YWxsb2MgZXJyb3I6IG91dCBvZiBtZW1vcnkKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEg bWFwKGFsbG9jOiBhc3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYXN0cikKKyAgaWYg KC5ub3QuIGFsbG9jYXRlZChhc3RyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGFzdHIpIC89 IDYpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoYXN0cikgLz0gMykgZXJyb3Igc3RvcAorICBp ZiAobGJvdW5kKGFzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChhc3Ry LCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGFzdHIgPSBbIjAxZGI0NSIsICJqayREJVMiLCAi enV0ZzQ3Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFw KGZyb206IGFzdHIpCitpZiAoLm5vdC4gYWxsb2NhdGVkKGFzdHIpKSBlcnJvciBzdG9wCitp ZiAobGVuKGFzdHIpIC89IDYpIGVycm9yIHN0b3AKK2lmIChzaXplKGFzdHIpIC89IDMpIGVy cm9yIHN0b3AKK2lmIChsYm91bmQoYXN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKHVi b3VuZChhc3RyLCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChhc3RyIC89IFsiMDFk YjQ1IiwgImprJEQlUyIsICJ6dXRnNDciXSkpIGVycm9yIHN0b3AKKworISBsaWJnb21wOiBu dnB0eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCishJG9tcCB0YXJnZXQgZW50ZXIg ZGF0YSBtYXAoYWxsb2M6IGFzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYXN0cjIp CisgIGlmICgubm90LiBhbGxvY2F0ZWQoYXN0cjIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4o YXN0cjIpIC89IDgpIGVycm9yIHN0b3AKKyAgYXN0cjIgPSAiSElKS2hpamsiCishJG9tcCBl bmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBhc3RyMikKK2lm ICgubm90LiBhbGxvY2F0ZWQoYXN0cjIpKSBlcnJvciBzdG9wCitpZiAobGVuKGFzdHIyKSAv PSA4KSBlcnJvciBzdG9wCitpZiAoYXN0cjIgLz0gIkhJSktoaWprIikgZXJyb3Igc3RvcAor CisKKyEgY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIHBvaW50ZXIgOjogcDRzdHIoOiksIHA0 c3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTMsa2luZD00KSA6OiBwNHN0cigyOjQp KQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUsa2luZD00KSA6OiBwNHN0cjIpCisKKyEg RkFJTFMgd2l0aCB2YWx1ZSBjaGVjaworCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAo YWxsb2M6IHA0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogcDRzdHIpCisgIGlmICgu bm90LiBhc3NvY2lhdGVkKHA0c3RyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKHA0c3RyKSAv PSAzKSBlcnJvciBzdG9wCisgIGlmIChzaXplKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCisg IGlmIChsYm91bmQocDRzdHIsIDEpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChw NHN0ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAorICBwNHN0cig6KSA9IFs0XyJmODUiLCA0XyI4 YWYiLCA0XyJBJUYiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0 YSBtYXAoZnJvbTogcDRzdHIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChwNHN0cikpIGVycm9y IHN0b3AKK2lmIChsZW4ocDRzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChzaXplKHA0c3Ry KSAvPSAzKSBlcnJvciBzdG9wCitpZiAobGJvdW5kKHA0c3RyLCAxKSAvPSAyKSBlcnJvciBz dG9wCitpZiAodWJvdW5kKHA0c3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCitpZiAocDRzdHIo MikgIC89IDRfImY4NSIpIGVycm9yIHN0b3AKK2lmIChwNHN0cigzKSAgLz0gNF8iOGFmIikg ZXJyb3Igc3RvcAoraWYgKHA0c3RyKDQpICAvPSA0XyJBJUYiKSBlcnJvciBzdG9wCisKKyEk b21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogcDRzdHIyKQorISRvbXAgdGFyZ2V0 IG1hcChhbGxvYzogcDRzdHIyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChwNHN0cjIpKSBl cnJvciBzdG9wCisgIGlmIChsZW4ocDRzdHIyKSAvPSA1KSBlcnJvciBzdG9wCisgIHA0c3Ry MiA9IDRfIjk4NzVhIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0 YSBtYXAoZnJvbTogcDRzdHIyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQocDRzdHIyKSkgZXJy b3Igc3RvcAoraWYgKGxlbihwNHN0cjIpIC89IDUpIGVycm9yIHN0b3AKK2lmIChwNHN0cjIg Lz0gNF8iOTg3NWEiKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00 KSwgYWxsb2NhdGFibGUgOjogYTRzdHIoOiksIGE0c3RyMgorISBhbGxvY2F0ZShjaGFyYWN0 ZXIobGVuPTcsa2luZD00KSA6OiBhNHN0cigtMjozKSkKKyEgYWxsb2NhdGUoY2hhcmFjdGVy KGxlbj05LGtpbmQ9NCkgOjogYTRzdHIyKQorCishIGxpYmdvbXA6IFRyeWluZyB0byBtYXAg aW50byBkZXZpY2UgWzB4MTAyN2JhMC4uMHgyNTEwNTBiYjljOWViYmEwKSBvYmplY3Qgd2hl biBbMHg3ZmZkMDI2ZTY3MDguLjB4N2ZmZDAyNmU2NzEwKSBpcyBhbHJlYWR5IG1hcHBlZAor CishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGE0c3RyKQorISRvbXAgdGFy Z2V0IG1hcChhbGxvYzogYTRzdHIpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIpKSBl cnJvciBzdG9wCisgIGlmIChsZW4oYTRzdHIpIC89IDcpIGVycm9yIHN0b3AKKyAgaWYgKHNp emUoYTRzdHIpIC89IDYpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChhNHN0ciwgMSkgLz0g LTIpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChhNHN0ciwgMSkgLz0gMykgZXJyb3Igc3Rv cAorICAhIFNlZSBQUiBmb3J0cmFuLzEwNzUwOCB3aHkgJyg6KScgaXMgcmVxdWlyZWQKKyAg YTRzdHIoOikgPSBbNF8ic2Y0NTZhcSIsIDRfIjNkdHp1MjQiLCA0XyJfNGZoN3NtIiwgNF8i PWZmODVzNyIsIDRfImo9OGFmNGQiLCA0XyIuLEElRnN6Il0KKyEkb21wIGVuZCB0YXJnZXQK KyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGE0c3RyKQoraWYgKC5ub3QuIGFs bG9jYXRlZChhNHN0cikpIGVycm9yIHN0b3AKK2lmIChsZW4oYTRzdHIpIC89IDcpIGVycm9y IHN0b3AKK2lmIChzaXplKGE0c3RyKSAvPSA2KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGE0 c3RyLCAxKSAvPSAtMikgZXJyb3Igc3RvcAoraWYgKHVib3VuZChhNHN0ciwgMSkgLz0gMykg ZXJyb3Igc3RvcAoraWYgKGE0c3RyKC0yKSAvPSA0XyJzZjQ1NmFxIikgZXJyb3Igc3RvcAor aWYgKGE0c3RyKC0xKSAvPSA0XyIzZHR6dTI0IikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDAp ICAvPSA0XyJfNGZoN3NtIikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDEpICAvPSA0XyI9ZmY4 NXM3IikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDIpICAvPSA0XyJqPThhZjRkIikgZXJyb3Ig c3RvcAoraWYgKGE0c3RyKDMpICAvPSA0XyIuLEElRnN6IikgZXJyb3Igc3RvcAorCishJG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGE0c3RyMikKKyEkb21wIHRhcmdldCBt YXAoYWxsb2M6IGE0c3RyMikKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChhNHN0cjIpKSBlcnJv ciBzdG9wCisgIGlmIChsZW4oYTRzdHIyKSAvPSA5KSBlcnJvciBzdG9wCisgIGE0c3RyMiA9 IDRfIjk4NzY1YTIzZCIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRh dGEgbWFwKGZyb206IGE0c3RyMikKK2lmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIyKSkgZXJy b3Igc3RvcAoraWYgKGxlbihhNHN0cjIpIC89IDkpIGVycm9yIHN0b3AKK2lmIChhNHN0cjIg Lz0gNF8iOTg3NjVhMjNkIikgZXJyb3Igc3RvcAorCisKK2RlYWxsb2NhdGUoZHQlcGMsIGR0 JXBjMikKK2RlYWxsb2NhdGUoZHQlcGNzdHIpCitkZWFsbG9jYXRlKGR0JXBjc3RyMikKKwor ZGVhbGxvY2F0ZShkdCVwYzRzdHIpCitkZWFsbG9jYXRlKGR0JXBjNHN0cjIpCisKK2RlYWxs b2NhdGUoaXAsIGlwMiwgaWEsIGlhMikKK2RlYWxsb2NhdGUocHN0cikKK2RlYWxsb2NhdGUo cHN0cjIpCitkZWFsbG9jYXRlKGFzdHIpCitkZWFsbG9jYXRlKGFzdHIyKQorCitkZWFsbG9j YXRlKHA0c3RyKQorZGVhbGxvY2F0ZShwNHN0cjIpCitkZWFsbG9jYXRlKGE0c3RyKQorZGVh bGxvY2F0ZShhNHN0cjIpCitlbmQKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS01LmY5MCBiL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS01LmY5MApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2Y3NTkzNDZhODQKLS0tIC9kZXYvbnVs bAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVy LWRhdGEtNS5mOTAKQEAgLTAsMCArMSw1NDAgQEAKKyEgQ2hlY2sgdGhhdCAnbWFwKCh0bylm cm9tOicgcHJvcGVybHkgd29ya3Mgd2l0aAorISAtIGRlZmVycmVkLWxlbmd0aCBjaGFyYWN0 ZXIgc3RyaW5ncworISAtIGFycmF5cyB3aXRoIGFycmF5IGRlc2NyaXB0b3JzCishIEZvciB0 aG9zZSwgdGhlIGFycmF5IGRlc2NyaXB0b3IgLyBzdHJpbmcgbGVuZ3RoIG11c3QgYmUgbWFw cGVkIHdpdGggJ3RvOicKKworcHJvZ3JhbSBtYWluCitpbXBsaWNpdCBub25lCisKK3R5cGUg dAorICBpbnRlZ2VyIDo6IGljKDI6NSksIGljMgorICBjaGFyYWN0ZXIobGVuPTExKSA6OiBj Y3N0cigzOjQpLCBjY3N0cjIKKyAgY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNjNHN0 cigzOjcpLCBjYzRzdHIyCisgIGludGVnZXIsIHBvaW50ZXIgOjogcGMoOiksIHBjMgorICBj aGFyYWN0ZXIobGVuPTopLCBwb2ludGVyIDo6IHBjc3RyKDopLCBwY3N0cjIKKyAgY2hhcmFj dGVyKGxlbj06LGtpbmQ9NCksIHBvaW50ZXIgOjogcGM0c3RyKDopLCBwYzRzdHIyCitlbmQg dHlwZSB0CisKK3R5cGUodCkgOjogZHQKKworaW50ZWdlciA6OiBpaSg1KSwgaWkyCitjaGFy YWN0ZXIobGVuPTExKSA6OiBjbHN0cigtMToxKSwgY2xzdHIyCitjaGFyYWN0ZXIobGVuPTEx LGtpbmQ9NCkgOjogY2w0c3RyKDA6MyksIGNsNHN0cjIKK2ludGVnZXIsIHBvaW50ZXIgOjog aXAoOiksIGlwMgoraW50ZWdlciwgYWxsb2NhdGFibGUgOjogaWEoOiksIGlhMgorY2hhcmFj dGVyKGxlbj06KSwgcG9pbnRlciA6OiBwc3RyKDopLCBwc3RyMgorY2hhcmFjdGVyKGxlbj06 KSwgYWxsb2NhdGFibGUgOjogYXN0cig6KSwgYXN0cjIKK2NoYXJhY3RlcihsZW49OixraW5k PTQpLCBwb2ludGVyIDo6IHA0c3RyKDopLCBwNHN0cjIKK2NoYXJhY3RlcihsZW49OixraW5k PTQpLCBhbGxvY2F0YWJsZSA6OiBhNHN0cig6KSwgYTRzdHIyCisKK2FsbG9jYXRlKGR0JXBj KDUpLCBkdCVwYzIpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTIpIDo6IGR0JXBjc3RyKDIp KQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj00KSA6OiBkdCVwY3N0cjIpCisKK2FsbG9jYXRl KGNoYXJhY3RlcihsZW49MyxraW5kPTQpIDo6IGR0JXBjNHN0cigyOjMpKQorYWxsb2NhdGUo Y2hhcmFjdGVyKGxlbj01LGtpbmQ9NCkgOjogZHQlcGM0c3RyMikKKworYWxsb2NhdGUoaXAo NSksIGlwMiwgaWEoOCksIGlhMikKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogcHN0 cigtMjowKSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NCkgOjogcHN0cjIpCithbGxvY2F0 ZShjaGFyYWN0ZXIobGVuPTYpIDo6IGFzdHIoMzo1KSkKK2FsbG9jYXRlKGNoYXJhY3Rlcihs ZW49OCkgOjogYXN0cjIpCisKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MyxraW5kPTQpIDo6 IHA0c3RyKDI6NCkpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUsa2luZD00KSA6OiBwNHN0 cjIpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTcsa2luZD00KSA6OiBhNHN0cigtMjozKSkK K2FsbG9jYXRlKGNoYXJhY3RlcihsZW49OSxraW5kPTQpIDo6IGE0c3RyMikKKworCishIGlu dGVnZXIgOjogaWMoMjo1KSwgaWMyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0 b2Zyb206IGR0JWljKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVpYykKKyAgaWYgKHNp emUoZHQlaWMpIC89IDQpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVpYywgMSkgLz0g MikgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JWljLCAxKSAvPSA1KSBlcnJvciBzdG9w CisgIGR0JWljID0gWzIyLCAzMywgNDQsIDU1XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAg dGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlaWMpCitpZiAoc2l6ZShkdCVpYykgLz0g NCkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVpYywgMSkgLz0gMikgZXJyb3Igc3RvcAor aWYgKHVib3VuZChkdCVpYywgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoZHQlaWMg Lz0gWzIyLCAzMywgNDQsIDU1XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKHRvZnJvbTogZHQlaWMyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVp YzIpCisgIGR0JWljMiA9IDQyCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhp dCBkYXRhIG1hcChmcm9tOiBkdCVpYzIpCitpZiAoZHQlaWMyIC89IDQyKSBlcnJvciBzdG9w CisKKworISBjaGFyYWN0ZXIobGVuPTExKSA6OiBjY3N0cigzOjQpLCBjY3N0cjIKKworISRv bXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlY2NzdHIpCishJG9tcCB0YXJn ZXQgbWFwKGZyb206IGR0JWNjc3RyKQorICBpZiAobGVuKGR0JWNjc3RyKSAvPSAxMSkgZXJy b3Igc3RvcAorICBpZiAoc2l6ZShkdCVjY3N0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAo bGJvdW5kKGR0JWNjc3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQl Y2NzdHIsIDEpIC89IDQpIGVycm9yIHN0b3AKKyAgZHQlY2NzdHIgPSBbIjEyMzQ1Njc4OTAx IiwgImFiY2RlZmdoaWprIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0 IGRhdGEgbWFwKGZyb206IGR0JWNjc3RyKQoraWYgKGxlbihkdCVjY3N0cikgLz0gMTEpIGVy cm9yIHN0b3AKK2lmIChzaXplKGR0JWNjc3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAobGJv dW5kKGR0JWNjc3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JWNjc3Ry LCAxKSAvPSA0KSBlcnJvciBzdG9wCitpZiAoYW55IChkdCVjY3N0ciAvPSBbIjEyMzQ1Njc4 OTAxIiwgImFiY2RlZmdoaWprIl0pKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcCh0b2Zyb206IGR0JWNjc3RyMikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTog ZHQlY2NzdHIyKQorICBpZiAobGVuKGR0JWNjc3RyMikgLz0gMTEpIGVycm9yIHN0b3AKKyAg ZHQlY2NzdHIyID0gIkFCQ0RFRkdISUpLIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFy Z2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlY2NzdHIyKQoraWYgKGxlbihkdCVjY3N0cjIp IC89IDExKSBlcnJvciBzdG9wCitpZiAoZHQlY2NzdHIyIC89ICJBQkNERUZHSElKSyIpIGVy cm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49MTEsa2luZD00KSA6OiBjYzRzdHIoMzo3 KSwgY2M0c3RyMgorCishIFZhbHVlIGNoZWNrIGZhaWxzCishJG9tcCB0YXJnZXQgZW50ZXIg ZGF0YSBtYXAodG9mcm9tOiBkdCVjYzRzdHIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGR0 JWNjNHN0cikKKyAgaWYgKGxlbihkdCVjYzRzdHIpIC89IDExKSBlcnJvciBzdG9wCisgIGlm IChzaXplKGR0JWNjNHN0cikgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JWNj NHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JWNjNHN0ciwgMSkg Lz0gNykgZXJyb3Igc3RvcAorICBkdCVjYzRzdHIgPSBbNF8iMTIzNDU2Nzg5MDEiLCA0XyJh YmNkZWZnaGlqayIsICYKKyAgICAgICAgICAgICAgIDRfInFlcmZ0Y2VhNmRzIiwgNF8iYTFm OWczN2dhNC4iLCAmCisgICAgICAgICAgICAgICA0XyI0NW5nd2o1NnNqMiJdCishJG9tcCBl bmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVjYzRzdHIp CitpZiAobGVuKGR0JWNjNHN0cikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChzaXplKGR0JWNj NHN0cikgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVjYzRzdHIsIDEpIC89IDMp IGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlY2M0c3RyLCAxKSAvPSA3KSBlcnJvciBzdG9w CitpZiAoZHQlY2M0c3RyKDMpIC89IDRfIjEyMzQ1Njc4OTAxIikgZXJyb3Igc3RvcAoraWYg KGR0JWNjNHN0cig0KSAvPSA0XyJhYmNkZWZnaGlqayIpIGVycm9yIHN0b3AKK2lmIChkdCVj YzRzdHIoNSkgLz0gNF8icWVyZnRjZWE2ZHMiKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3Ry KDYpIC89IDRfImExZjlnMzdnYTQuIikgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cig3KSAv PSA0XyI0NW5nd2o1NnNqMiIpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRh dGEgbWFwKHRvZnJvbTogZHQlY2M0c3RyMikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogZHQl Y2M0c3RyMikKKyAgaWYgKGxlbihkdCVjYzRzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBk dCVjYzRzdHIyID0gNF8iQUJDREVGR0hJSksiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0 YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVjYzRzdHIyKQoraWYgKGxlbihkdCVjYzRz dHIyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cjIgLz0gNF8iQUJDREVGR0hJ SksiKSBlcnJvciBzdG9wCisKKworISBpbnRlZ2VyLCBwb2ludGVyIDo6IHBjKDopLCBwYzIK KyEgYWxsb2NhdGUoZHQlcGMoNSksIGR0JXBjMikKKworISBsaWJnb21wOiBHT01QX3Rhcmdl dF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgwMAorCishJG9tcCB0YXJnZXQg ZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBkdCVwYykKKyEkb21wIHRhcmdldCBtYXAoZnJvbTog ZHQlcGMpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjKSkgZXJyb3Igc3RvcAorICBp ZiAoc2l6ZShkdCVwYykgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JXBjLCAx KSAvPSAxKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlcGMsIDEpIC89IDUpIGVycm9y IHN0b3AKKyAgZHQlcGMgPSBbMTEsIDIyLCAzMywgNDQsIDU1XQorISRvbXAgZW5kIHRhcmdl dAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGMpCitpZiAoLm5vdC4g YXNzb2NpYXRlZChkdCVwYykpIGVycm9yIHN0b3AKK2lmIChzaXplKGR0JXBjKSAvPSA1KSBl cnJvciBzdG9wCitpZiAobGJvdW5kKGR0JXBjLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAo dWJvdW5kKGR0JXBjLCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChkdCVwYyAvPSBb MTEsIDIyLCAzMywgNDQsIDU1XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKHRvZnJvbTogZHQlcGMyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVw YzIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjMikpIGVycm9yIHN0b3AKKyAgZHQl cGMyID0gOTkKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFw KGZyb206IGR0JXBjMikKK2lmIChkdCVwYzIgLz0gOTkpIGVycm9yIHN0b3AKK2lmICgubm90 LiBhc3NvY2lhdGVkKGR0JXBjMikpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49 OiksIHBvaW50ZXIgOjogcGNzdHIoOiksIHBjc3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIo bGVuPTIpIDo6IGR0JXBjc3RyKDIpKQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQpIDo6 IGR0JXBjc3RyMikKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEg dW5oYW5kbGVkIGtpbmQgMHgwMAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9m cm9tOiBkdCVwY3N0cikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogZHQlcGNzdHIpCisgIGlm ICgubm90LiBhc3NvY2lhdGVkKGR0JXBjc3RyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGR0 JXBjc3RyKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JXBjc3RyKSAvPSAyKSBl cnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlcGNzdHIsIDEpIC89IDEpIGVycm9yIHN0b3AK KyAgaWYgKHVib3VuZChkdCVwY3N0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAorICBkdCVwY3N0 ciA9IFsiMDEiLCAiamsiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQg ZGF0YSBtYXAoZnJvbTogZHQlcGNzdHIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0 cikpIGVycm9yIHN0b3AKK2lmIChsZW4oZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lm IChzaXplKGR0JXBjc3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0JXBjc3Ry LCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JXBjc3RyLCAxKSAvPSAyKSBl cnJvciBzdG9wCitpZiAoYW55IChkdCVwY3N0ciAvPSBbIjAxIiwgImprIl0pKSBlcnJvciBz dG9wCisKKyEgbGliZ29tcDogR09NUF90YXJnZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxl ZCBraW5kIDB4MDEKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQl cGNzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVwY3N0cjIpCisgIGlmICgubm90 LiBhc3NvY2lhdGVkKGR0JXBjc3RyMikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihkdCVwY3N0 cjIpIC89IDQpIGVycm9yIHN0b3AKKyAgZHQlcGNzdHIyID0gIkhJSksiCishJG9tcCBlbmQg dGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwY3N0cjIpCitp ZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0cjIpKSBlcnJvciBzdG9wCitpZiAobGVuKGR0 JXBjc3RyMikgLz0gNCkgZXJyb3Igc3RvcAoraWYgKGR0JXBjc3RyMiAvPSAiSElKSyIpIGVy cm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHBj NHN0cig6KSwgcGM0c3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTMsa2luZD00KSA6 OiBkdCVwYzRzdHIoMjozKSkKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj01LGtpbmQ9NCkg OjogZHQlcGM0c3RyMikKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2Rh dGEgdW5oYW5kbGVkIGtpbmQgMHgwMAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAo dG9mcm9tOiBkdCVwYzRzdHIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGR0JXBjNHN0cikK KyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGM0c3RyKSkgZXJyb3Igc3RvcAorICBpZiAo bGVuKGR0JXBjNHN0cikgLz0gMykgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShkdCVwYzRzdHIp IC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVwYzRzdHIsIDEpIC89IDIpIGVy cm9yIHN0b3AKKyAgaWYgKHVib3VuZChkdCVwYzRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AK KyAgZHQlcGM0c3RyID0gWzRfIjQ1NiIsIDRfInR6dSJdCishJG9tcCBlbmQgdGFyZ2V0Cish JG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYzRzdHIpCitpZiAoLm5vdC4g YXNzb2NpYXRlZChkdCVwYzRzdHIpKSBlcnJvciBzdG9wCitpZiAobGVuKGR0JXBjNHN0cikg Lz0gMykgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlcGM0c3RyKSAvPSAyKSBlcnJvciBzdG9w CitpZiAobGJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAoraWYgKHVib3Vu ZChkdCVwYzRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmIChkdCVwYzRzdHIoMikgLz0g NF8iNDU2IikgZXJyb3Igc3RvcAoraWYgKGR0JXBjNHN0cigzKSAvPSA0XyJ0enUiKSBlcnJv ciBzdG9wCisKKyEgbGliZ29tcDogR09NUF90YXJnZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFu ZGxlZCBraW5kIDB4MDEKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTog ZHQlcGM0c3RyMikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogZHQlcGM0c3RyMikKKyAgaWYg KC5ub3QuIGFzc29jaWF0ZWQoZHQlcGM0c3RyMikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihk dCVwYzRzdHIyKSAvPSA1KSBlcnJvciBzdG9wCisgIGR0JXBjNHN0cjIgPSA0XyI5ODc2NSIK KyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0 JXBjNHN0cjIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYzRzdHIyKSkgZXJyb3Igc3Rv cAoraWYgKGxlbihkdCVwYzRzdHIyKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoZHQlcGM0c3Ry MiAvPSA0XyI5ODc2NSIpIGVycm9yIHN0b3AKKworCishIGludGVnZXIgOjogaWkoNSksIGlp MgorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBpaSkKKyEkb21wIHRh cmdldCBtYXAoZnJvbTogaWkpCisgIGlmIChzaXplKGlpKSAvPSA1KSBlcnJvciBzdG9wCisg IGlmIChsYm91bmQoaWksIDEpIC89IDEpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChpaSwg MSkgLz0gNSkgZXJyb3Igc3RvcAorICBpaSA9IFstMSwgLTIsIC0zLCAtNCwgLTVdCishJG9t cCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpaSkKK2lm IChzaXplKGlpKSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGlpLCAxKSAvPSAxKSBl cnJvciBzdG9wCitpZiAodWJvdW5kKGlpLCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55 IChpaSAvPSBbLTEsIC0yLCAtMywgLTQsIC01XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFy Z2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogaWkyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9t OiBpaTIpCisgIGlpMiA9IC00MTAKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBl eGl0IGRhdGEgbWFwKGZyb206IGlpMikKK2lmIChpaTIgLz0gLTQxMCkgZXJyb3Igc3RvcAor CisKKyEgY2hhcmFjdGVyKGxlbj0xMSkgOjogY2xzdHIoLTE6MSksIGNsc3RyMgorCishJG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBjbHN0cikKKyEkb21wIHRhcmdldCBt YXAoZnJvbTogY2xzdHIpCisgIGlmIChsZW4oY2xzdHIpIC89IDExKSBlcnJvciBzdG9wCisg IGlmIChzaXplKGNsc3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoY2xzdHIs IDEpIC89IC0xKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoY2xzdHIsIDEpIC89IDEpIGVy cm9yIHN0b3AKKyAgY2xzdHIgPSBbIjEyMzQ1Njc4OTAxIiwgImFiY2RlZmdoaWprIiwgIkFC Q0RFRkdISUpLIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwKGZyb206IGNsc3RyKQoraWYgKGxlbihjbHN0cikgLz0gMTEpIGVycm9yIHN0b3AKK2lm IChzaXplKGNsc3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGNsc3RyLCAxKSAv PSAtMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChjbHN0ciwgMSkgLz0gMSkgZXJyb3Igc3Rv cAoraWYgKGFueSAoY2xzdHIgLz0gWyIxMjM0NTY3ODkwMSIsICJhYmNkZWZnaGlqayIsICJB QkNERUZHSElKSyJdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBt YXAodG9mcm9tOiBjbHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGNsc3RyMikKKyAg aWYgKGxlbihjbHN0cjIpIC89IDExKSBlcnJvciBzdG9wCisgIGNsc3RyMiA9ICJBQkNERUZn aGlqayIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZy b206IGNsc3RyMikKK2lmIChsZW4oY2xzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKGNs c3RyMiAvPSAiQUJDREVGZ2hpamsiKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVu PTExLGtpbmQ9NCkgOjogY2w0c3RyKDA6MyksIGNsNHN0cjIKKworISRvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwKHRvZnJvbTogY2w0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBj bDRzdHIpCisgIGlmIChsZW4oY2w0c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBpZiAoc2l6 ZShjbDRzdHIpIC89IDQpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChjbDRzdHIsIDEpIC89 IDApIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChjbDRzdHIsIDEpIC89IDMpIGVycm9yIHN0 b3AKKyAgY2w0c3RyID0gWzRfIjEyMzQ1Njc4OTAxIiwgNF8iYWJjZGVmZ2hpamsiLCAmCisg ICAgICAgICAgICA0XyJxZXJmdGNlYTZkcyIsIDRfImExZjlnMzdnYTQuIl0KKyEkb21wIGVu ZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGNsNHN0cikKK2lm IChsZW4oY2w0c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoY2w0c3RyKSAvPSA0 KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGNsNHN0ciwgMSkgLz0gMCkgZXJyb3Igc3RvcAor aWYgKHVib3VuZChjbDRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIoMCkg Lz0gNF8iMTIzNDU2Nzg5MDEiKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDEpIC89IDRfImFi Y2RlZmdoaWprIikgZXJyb3Igc3RvcAoraWYgKGNsNHN0cigyKSAvPSA0XyJxZXJmdGNlYTZk cyIpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIoMykgLz0gNF8iYTFmOWczN2dhNC4iKSBlcnJv ciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGNsNHN0cjIp CishJG9tcCB0YXJnZXQgbWFwKGZyb206IGNsNHN0cjIpCisgIGlmIChsZW4oY2w0c3RyMikg Lz0gMTEpIGVycm9yIHN0b3AKKyAgY2w0c3RyMiA9IDRfIkFCQ0RFRkdISUpLIgorISRvbXAg ZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogY2w0c3RyMikK K2lmIChsZW4oY2w0c3RyMikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIyIC89IDRf IkFCQ0RFRkdISUpLIikgZXJyb3Igc3RvcAorCisKKyEgYWxsb2NhdGUoaXAoNSksIGlwMiwg aWEoOCksIGlhMikKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogaXAp CishJG9tcCB0YXJnZXQgbWFwKGZyb206IGlwKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChp cCkpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoaXApIC89IDUpIGVycm9yIHN0b3AKKyAgaWYg KGxib3VuZChpcCwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlwLCAxKSAv PSA1KSBlcnJvciBzdG9wCisgIGlwID0gWzExLCAyMiwgMzMsIDQ0LCA1NV0KKyEkb21wIGVu ZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlwKQoraWYgKC5u b3QuIGFzc29jaWF0ZWQoaXApKSBlcnJvciBzdG9wCitpZiAoc2l6ZShpcCkgLz0gNSkgZXJy b3Igc3RvcAoraWYgKGxib3VuZChpcCwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVib3Vu ZChpcCwgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoaXAgLz0gWzExLCAyMiwgMzMs IDQ0LCA1NV0pKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0 b2Zyb206IGlwMikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogaXAyKQorICBpZiAoLm5vdC4g YXNzb2NpYXRlZChpcDIpKSBlcnJvciBzdG9wCisgIGlwMiA9IDk5CishJG9tcCBlbmQgdGFy Z2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpcDIpCitpZiAoaXAyIC89 IDk5KSBlcnJvciBzdG9wCitpZiAoLm5vdC4gYXNzb2NpYXRlZChpcDIpKSBlcnJvciBzdG9w CisKKworISBhbGxvY2F0ZShpcCg1KSwgaXAyLCBpYSg4KSwgaWEyKQorCishJG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBpYSkKKyEkb21wIHRhcmdldCBtYXAoZnJvbTog aWEpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoaWEpKSBlcnJvciBzdG9wCisgIGlmIChzaXpl KGlhKSAvPSA4KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoaWEsIDEpIC89IDEpIGVycm9y IHN0b3AKKyAgaWYgKHVib3VuZChpYSwgMSkgLz0gOCkgZXJyb3Igc3RvcAorICBpYSA9IFsx LDIsMyw0LDUsNiw3LDhdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBk YXRhIG1hcChmcm9tOiBpYSkKK2lmICgubm90LiBhbGxvY2F0ZWQoaWEpKSBlcnJvciBzdG9w CitpZiAoc2l6ZShpYSkgLz0gOCkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChpYSwgMSkgLz0g MSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChpYSwgMSkgLz0gOCkgZXJyb3Igc3RvcAoraWYg KGFueSAoaWEgLz0gWzEsMiwzLDQsNSw2LDcsOF0pKSBlcnJvciBzdG9wCisKKyEkb21wIHRh cmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGlhMikKKyEkb21wIHRhcmdldCBtYXAoZnJv bTogaWEyKQorICBpZiAoLm5vdC4gYWxsb2NhdGVkKGlhMikpIGVycm9yIHN0b3AKKyAgaWEy ID0gMTAyCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChm cm9tOiBpYTIpCitpZiAoaWEyIC89IDEwMikgZXJyb3Igc3RvcAoraWYgKC5ub3QuIGFsbG9j YXRlZChpYTIpKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTopLCBwb2ludGVy IDo6IHBzdHIoOiksIHBzdHIyCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogcHN0 cigtMjowKSkKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj00KSA6OiBwc3RyMikKKworISBs aWJnb21wOiBudnB0eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCishJG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBwc3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9t OiBwc3RyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChwc3RyKSkgZXJyb3Igc3RvcAorICBp ZiAobGVuKHBzdHIpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUocHN0cikgLz0gMykg ZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKHBzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCisg IGlmICh1Ym91bmQocHN0ciwgMSkgLz0gMCkgZXJyb3Igc3RvcAorICBwc3RyID0gWyIwMSIs ICJqayIsICJhcSJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRh IG1hcChmcm9tOiBwc3RyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0cikpIGVycm9yIHN0 b3AKK2lmIChsZW4ocHN0cikgLz0gMikgZXJyb3Igc3RvcAoraWYgKHNpemUocHN0cikgLz0g MykgZXJyb3Igc3RvcAoraWYgKGxib3VuZChwc3RyLCAxKSAvPSAtMikgZXJyb3Igc3RvcAor aWYgKHVib3VuZChwc3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCitpZiAoYW55IChwc3RyIC89 IFsiMDEiLCAiamsiLCAiYXEiXSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKHRvZnJvbTogcHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IHBzdHIy KQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChwc3RyMikpIGVycm9yIHN0b3AKKyAgaWYgKGxl bihwc3RyMikgLz0gNCkgZXJyb3Igc3RvcAorICBwc3RyMiA9ICJISUpLIgorISRvbXAgZW5k IHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcHN0cjIpCitpZiAo Lm5vdC4gYXNzb2NpYXRlZChwc3RyMikpIGVycm9yIHN0b3AKK2lmIChsZW4ocHN0cjIpIC89 IDQpIGVycm9yIHN0b3AKK2lmIChwc3RyMiAvPSAiSElKSyIpIGVycm9yIHN0b3AKKworCish IGNoYXJhY3RlcihsZW49OiksIGFsbG9jYXRhYmxlIDo6IGFzdHIoOiksIGFzdHIyCishIGFs bG9jYXRlKGNoYXJhY3RlcihsZW49NikgOjogYXN0cigzOjUpKQorISBhbGxvY2F0ZShjaGFy YWN0ZXIobGVuPTgpIDo6IGFzdHIyKQorCishIGxpYmdvbXA6IG52cHR4X2FsbG9jIGVycm9y OiBvdXQgb2YgbWVtb3J5CisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206 IGFzdHIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGFzdHIpCisgIGlmICgubm90LiBhbGxv Y2F0ZWQoYXN0cikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihhc3RyKSAvPSA2KSBlcnJvciBz dG9wCisgIGlmIChzaXplKGFzdHIpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChh c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoYXN0ciwgMSkgLz0gNSkg ZXJyb3Igc3RvcAorICBhc3RyID0gWyIwMWRiNDUiLCAiamskRCVTIiwgInp1dGc0NyJdCish JG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBhc3Ry KQoraWYgKC5ub3QuIGFsbG9jYXRlZChhc3RyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihhc3Ry KSAvPSA2KSBlcnJvciBzdG9wCitpZiAoc2l6ZShhc3RyKSAvPSAzKSBlcnJvciBzdG9wCitp ZiAobGJvdW5kKGFzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoYXN0ciwg MSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoYXN0ciAvPSBbIjAxZGI0NSIsICJqayRE JVMiLCAienV0ZzQ3Il0pKSBlcnJvciBzdG9wCisKKyEgbGliZ29tcDogbnZwdHhfYWxsb2Mg ZXJyb3I6IG91dCBvZiBtZW1vcnkKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRv ZnJvbTogYXN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGFzdHIyKQorICBpZiAoLm5v dC4gYWxsb2NhdGVkKGFzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGFzdHIyKSAvPSA4 KSBlcnJvciBzdG9wCisgIGFzdHIyID0gIkhJSktoaWprIgorISRvbXAgZW5kIHRhcmdldAor ISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogYXN0cjIpCitpZiAoLm5vdC4gYWxs b2NhdGVkKGFzdHIyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihhc3RyMikgLz0gOCkgZXJyb3Ig c3RvcAoraWYgKGFzdHIyIC89ICJISUpLaGlqayIpIGVycm9yIHN0b3AKKworCishIGNoYXJh Y3RlcihsZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHA0c3RyKDopLCBwNHN0cjIKKyEgYWxs b2NhdGUoY2hhcmFjdGVyKGxlbj0zLGtpbmQ9NCkgOjogcDRzdHIoMjo0KSkKKyEgYWxsb2Nh dGUoY2hhcmFjdGVyKGxlbj01LGtpbmQ9NCkgOjogcDRzdHIyKQorCishIEZBSUxTIHdpdGgg dmFsdWUgY2hlY2sKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogcDRz dHIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IHA0c3RyKQorICBpZiAoLm5vdC4gYXNzb2Np YXRlZChwNHN0cikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihwNHN0cikgLz0gMykgZXJyb3Ig c3RvcAorICBpZiAoc2l6ZShwNHN0cikgLz0gMykgZXJyb3Igc3RvcAorICBpZiAobGJvdW5k KHA0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQocDRzdHIsIDEpIC89 IDQpIGVycm9yIHN0b3AKKyAgcDRzdHIoOikgPSBbNF8iZjg1IiwgNF8iOGFmIiwgNF8iQSVG Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206 IHA0c3RyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQocDRzdHIpKSBlcnJvciBzdG9wCitpZiAo bGVuKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAoc2l6ZShwNHN0cikgLz0gMykgZXJy b3Igc3RvcAoraWYgKGxib3VuZChwNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAoraWYgKHVi b3VuZChwNHN0ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAoraWYgKHA0c3RyKDIpICAvPSA0XyJm ODUiKSBlcnJvciBzdG9wCitpZiAocDRzdHIoMykgIC89IDRfIjhhZiIpIGVycm9yIHN0b3AK K2lmIChwNHN0cig0KSAgLz0gNF8iQSVGIikgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQg ZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBwNHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206 IHA0c3RyMikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQocDRzdHIyKSkgZXJyb3Igc3RvcAor ICBpZiAobGVuKHA0c3RyMikgLz0gNSkgZXJyb3Igc3RvcAorICBwNHN0cjIgPSA0XyI5ODc1 YSIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206 IHA0c3RyMikKK2lmICgubm90LiBhc3NvY2lhdGVkKHA0c3RyMikpIGVycm9yIHN0b3AKK2lm IChsZW4ocDRzdHIyKSAvPSA1KSBlcnJvciBzdG9wCitpZiAocDRzdHIyIC89IDRfIjk4NzVh IikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIGFsbG9jYXRh YmxlIDo6IGE0c3RyKDopLCBhNHN0cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj03LGtp bmQ9NCkgOjogYTRzdHIoLTI6MykpCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49OSxraW5k PTQpIDo6IGE0c3RyMikKKworISBsaWJnb21wOiBUcnlpbmcgdG8gbWFwIGludG8gZGV2aWNl IFsweDEwMjdiYTAuLjB4MjUxMDUwYmI5YzllYmJhMCkgb2JqZWN0IHdoZW4gWzB4N2ZmZDAy NmU2NzA4Li4weDdmZmQwMjZlNjcxMCkgaXMgYWxyZWFkeSBtYXBwZWQKKworISRvbXAgdGFy Z2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogYTRzdHIpCishJG9tcCB0YXJnZXQgbWFwKGZy b206IGE0c3RyKQorICBpZiAoLm5vdC4gYWxsb2NhdGVkKGE0c3RyKSkgZXJyb3Igc3RvcAor ICBpZiAobGVuKGE0c3RyKSAvPSA3KSBlcnJvciBzdG9wCisgIGlmIChzaXplKGE0c3RyKSAv PSA2KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoYTRzdHIsIDEpIC89IC0yKSBlcnJvciBz dG9wCisgIGlmICh1Ym91bmQoYTRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAgISBTZWUg UFIgZm9ydHJhbi8xMDc1MDggd2h5ICcoOiknIGlzIHJlcXVpcmVkCisgIGE0c3RyKDopID0g WzRfInNmNDU2YXEiLCA0XyIzZHR6dTI0IiwgNF8iXzRmaDdzbSIsIDRfIj1mZjg1czciLCA0 XyJqPThhZjRkIiwgNF8iLixBJUZzeiJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJn ZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBhNHN0cikKK2lmICgubm90LiBhbGxvY2F0ZWQoYTRz dHIpKSBlcnJvciBzdG9wCitpZiAobGVuKGE0c3RyKSAvPSA3KSBlcnJvciBzdG9wCitpZiAo c2l6ZShhNHN0cikgLz0gNikgZXJyb3Igc3RvcAoraWYgKGxib3VuZChhNHN0ciwgMSkgLz0g LTIpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoYTRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AK K2lmIChhNHN0cigtMikgLz0gNF8ic2Y0NTZhcSIpIGVycm9yIHN0b3AKK2lmIChhNHN0cigt MSkgLz0gNF8iM2R0enUyNCIpIGVycm9yIHN0b3AKK2lmIChhNHN0cigwKSAgLz0gNF8iXzRm aDdzbSIpIGVycm9yIHN0b3AKK2lmIChhNHN0cigxKSAgLz0gNF8iPWZmODVzNyIpIGVycm9y IHN0b3AKK2lmIChhNHN0cigyKSAgLz0gNF8iaj04YWY0ZCIpIGVycm9yIHN0b3AKK2lmIChh NHN0cigzKSAgLz0gNF8iLixBJUZzeiIpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwKHRvZnJvbTogYTRzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBh NHN0cjIpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIyKSkgZXJyb3Igc3RvcAorICBp ZiAobGVuKGE0c3RyMikgLz0gOSkgZXJyb3Igc3RvcAorICBhNHN0cjIgPSA0XyI5ODc2NWEy M2QiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9t OiBhNHN0cjIpCitpZiAoLm5vdC4gYWxsb2NhdGVkKGE0c3RyMikpIGVycm9yIHN0b3AKK2lm IChsZW4oYTRzdHIyKSAvPSA5KSBlcnJvciBzdG9wCitpZiAoYTRzdHIyIC89IDRfIjk4NzY1 YTIzZCIpIGVycm9yIHN0b3AKKworCitkZWFsbG9jYXRlKGR0JXBjLCBkdCVwYzIpCitkZWFs bG9jYXRlKGR0JXBjc3RyKQorZGVhbGxvY2F0ZShkdCVwY3N0cjIpCisKK2RlYWxsb2NhdGUo ZHQlcGM0c3RyKQorZGVhbGxvY2F0ZShkdCVwYzRzdHIyKQorCitkZWFsbG9jYXRlKGlwLCBp cDIsIGlhLCBpYTIpCitkZWFsbG9jYXRlKHBzdHIpCitkZWFsbG9jYXRlKHBzdHIyKQorZGVh bGxvY2F0ZShhc3RyKQorZGVhbGxvY2F0ZShhc3RyMikKKworZGVhbGxvY2F0ZShwNHN0cikK K2RlYWxsb2NhdGUocDRzdHIyKQorZGVhbGxvY2F0ZShhNHN0cikKK2RlYWxsb2NhdGUoYTRz dHIyKQorZW5kCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRy YW4vdGFyZ2V0LWVudGVyLWRhdGEtNi5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21w LmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNi5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjgwZDMwZWRiZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGli Z29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTYuZjkw CkBAIC0wLDAgKzEsMzkyIEBACishIENoZWNrIHRoYXQgJ21hcChhbGxvYzonIHByb3Blcmx5 IHdvcmtzIHdpdGgKKyEgLSBkZWZlcnJlZC1sZW5ndGggY2hhcmFjdGVyIHN0cmluZ3MKKyEg LSBhcnJheXMgd2l0aCBhcnJheSBkZXNjcmlwdG9ycworISBGb3IgdGhvc2UsIHRoZSBhcnJh eSBkZXNjcmlwdG9yIC8gc3RyaW5nIGxlbmd0aCBtdXN0IGJlIG1hcHBlZCB3aXRoICd0bzon CisKK3Byb2dyYW0gbWFpbgoraW1wbGljaXQgbm9uZQorCit0eXBlIHQKKyAgaW50ZWdlciA6 OiBpYygyOjUpCisgIGNoYXJhY3RlcihsZW49MTEpIDo6IGNjc3RyKDM6NCkKKyAgY2hhcmFj dGVyKGxlbj0xMSxraW5kPTQpIDo6IGNjNHN0cigzOjcpCisgIGludGVnZXIsIHBvaW50ZXIg OjogcGMoOikKKyAgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBwY3N0cig6KQorICBj aGFyYWN0ZXIobGVuPTosa2luZD00KSwgcG9pbnRlciA6OiBwYzRzdHIoOikKK2VuZCB0eXBl IHQKKwordHlwZSh0KSA6OiBkdAorCitpbnRlZ2VyIDo6IGlpKDUpCitjaGFyYWN0ZXIobGVu PTExKSA6OiBjbHN0cigtMToxKQorY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNsNHN0 cigwOjMpCitpbnRlZ2VyLCBwb2ludGVyIDo6IGlwKDopCitpbnRlZ2VyLCBhbGxvY2F0YWJs ZSA6OiBpYSg6KQorY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBwc3RyKDopCitjaGFy YWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6OiBhc3RyKDopCitjaGFyYWN0ZXIobGVuPTos a2luZD00KSwgcG9pbnRlciA6OiBwNHN0cig6KQorY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCks IGFsbG9jYXRhYmxlIDo6IGE0c3RyKDopCisKK2FsbG9jYXRlKGR0JXBjKDUpKQorYWxsb2Nh dGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBkdCVwY3N0cigyKSkKKworYWxsb2NhdGUoY2hhcmFj dGVyKGxlbj0zLGtpbmQ9NCkgOjogZHQlcGM0c3RyKDI6MykpCisKK2FsbG9jYXRlKGlwKDUp LCBpYSg4KSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogcHN0cigtMjowKSkKK2Fs bG9jYXRlKGNoYXJhY3RlcihsZW49NikgOjogYXN0cigzOjUpKQorCithbGxvY2F0ZShjaGFy YWN0ZXIobGVuPTMsa2luZD00KSA6OiBwNHN0cigyOjQpKQorYWxsb2NhdGUoY2hhcmFjdGVy KGxlbj03LGtpbmQ9NCkgOjogYTRzdHIoLTI6MykpCisKKworISBpbnRlZ2VyIDo6IGljKDI6 NSkKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVpYygzOjUpKQor ZHQlaWMoMikgPSAyMgorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlaWMoMzo1KSkKKyAg aWYgKHNpemUoZHQlaWMpIC89IDQpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVpYywg MSkgLz0gMikgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JWljLCAxKSAvPSA1KSBlcnJv ciBzdG9wCisgIGR0JWljKDM6NSkgPSBbMzMsIDQ0LCA1NV0KKyEkb21wIGVuZCB0YXJnZXQK KyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWljKDM6NSkpCitpZiAoc2l6 ZShkdCVpYykgLz0gNCkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVpYywgMSkgLz0gMikg ZXJyb3Igc3RvcAoraWYgKHVib3VuZChkdCVpYywgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYg KGFueSAoZHQlaWMgLz0gWzIyLCAzMywgNDQsIDU1XSkpIGVycm9yIHN0b3AKKworISBjaGFy YWN0ZXIobGVuPTExKSA6OiBjY3N0cigzOjQpCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRh IG1hcChhbGxvYzogZHQlY2NzdHIoNDo0KSkKK2R0JWNjc3RyKDMpID0gIjEyMzQ1Njc4OTAx IgorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlY2NzdHIoNDo0KSkKKyAgaWYgKGxlbihk dCVjY3N0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlY2NzdHIpIC89IDIp IGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVjY3N0ciwgMSkgLz0gMykgZXJyb3Igc3Rv cAorICBpZiAodWJvdW5kKGR0JWNjc3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCisgIGR0JWNj c3RyKDQ6NCkgPSBbImFiY2RlZmdoaWprIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRh cmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWNjc3RyKDQ6NCkpCitpZiAobGVuKGR0JWNj c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlY2NzdHIpIC89IDIpIGVycm9y IHN0b3AKK2lmIChsYm91bmQoZHQlY2NzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmICh1 Ym91bmQoZHQlY2NzdHIsIDEpIC89IDQpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JWNjc3Ry IC89IFsiMTIzNDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsiXSkpIGVycm9yIHN0b3AKKworCish IGNoYXJhY3RlcihsZW49MTEsa2luZD00KSA6OiBjYzRzdHIoMzo3KQorCishIFZhbHVlIGNo ZWNrIGZhaWxzCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JWNjNHN0 cig0OjcpKQorZHQlY2M0c3RyKDMpID0gNF8iMTIzNDU2Nzg5MDEiCishJG9tcCB0YXJnZXQg bWFwKGFsbG9jOiBkdCVjYzRzdHIoNDo3KSkKKyAgaWYgKGxlbihkdCVjYzRzdHIpIC89IDEx KSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JWNjNHN0cikgLz0gNSkgZXJyb3Igc3RvcAor ICBpZiAobGJvdW5kKGR0JWNjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBpZiAodWJv dW5kKGR0JWNjNHN0ciwgMSkgLz0gNykgZXJyb3Igc3RvcAorICBkdCVjYzRzdHIoNDo3KSA9 IFs0XyJhYmNkZWZnaGlqayIsICYKKyAgICAgICAgICAgICAgIDRfInFlcmZ0Y2VhNmRzIiwg NF8iYTFmOWczN2dhNC4iLCAmCisgICAgICAgICAgICAgICA0XyI0NW5nd2o1NnNqMiJdCish JG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVj YzRzdHIoNDo3KSkKK2lmIChsZW4oZHQlY2M0c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYg KHNpemUoZHQlY2M0c3RyKSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0JWNjNHN0 ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKHVib3VuZChkdCVjYzRzdHIsIDEpIC89IDcp IGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoMykgLz0gNF8iMTIzNDU2Nzg5MDEiKSBlcnJv ciBzdG9wCitpZiAoZHQlY2M0c3RyKDQpIC89IDRfImFiY2RlZmdoaWprIikgZXJyb3Igc3Rv cAoraWYgKGR0JWNjNHN0cig1KSAvPSA0XyJxZXJmdGNlYTZkcyIpIGVycm9yIHN0b3AKK2lm IChkdCVjYzRzdHIoNikgLz0gNF8iYTFmOWczN2dhNC4iKSBlcnJvciBzdG9wCitpZiAoZHQl Y2M0c3RyKDcpIC89IDRfIjQ1bmd3ajU2c2oyIikgZXJyb3Igc3RvcAorCishIGludGVnZXIs IHBvaW50ZXIgOjogcGMoOikKKyEgYWxsb2NhdGUoZHQlcGMoNSkpCisKKyEgbGliZ29tcDog R09NUF90YXJnZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5kIDB4MDAKKworISRv bXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVwYygyOjUpKQorZHQlcGMoMSkg PSAxMQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlcGMoMjo1KSkKKyAgaWYgKC5ub3Qu IGFzc29jaWF0ZWQoZHQlcGMpKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JXBjKSAvPSA1 KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0b3AK KyAgaWYgKHVib3VuZChkdCVwYywgMSkgLz0gNSkgZXJyb3Igc3RvcAorICBkdCVwYygyOjUp ID0gWzIyLCAzMywgNDQsIDU1XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4 aXQgZGF0YSBtYXAoZnJvbTogZHQlcGMoMjo1KSkKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0 JXBjKSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlcGMpIC89IDUpIGVycm9yIHN0b3AKK2lm IChsYm91bmQoZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlcGMs IDEpIC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JXBjIC89IFsxMSwgMjIsIDMzLCA0 NCwgNTVdKSkgZXJyb3Igc3RvcAorCishIGNoYXJhY3RlcihsZW49OiksIHBvaW50ZXIgOjog cGNzdHIoOikKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBkdCVwY3N0cigyKSkK KworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtp bmQgMHgwMAorCishIEZJWE1FOiBEaXNhYmxlZCBiZWZhdXNlIG9mIFBSMTA4ODM3CishCish ISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVwY3N0cigyOjIpKQorIWR0 JXBjc3RyKDEpID0gIjAxIgorISEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JXBjc3RyKDI6 MikpCishICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0cikpIGVycm9yIHN0b3AKKyEg IGlmIChsZW4oZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKKyEgIGlmIChzaXplKGR0JXBj c3RyKSAvPSAyKSBlcnJvciBzdG9wCishICBpZiAobGJvdW5kKGR0JXBjc3RyLCAxKSAvPSAx KSBlcnJvciBzdG9wCishICBpZiAodWJvdW5kKGR0JXBjc3RyLCAxKSAvPSAyKSBlcnJvciBz dG9wCishICBkdCVwY3N0cigyOjIpID0gWyJqayJdCishISRvbXAgZW5kIHRhcmdldAorISEk b21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBjc3RyKDI6MikpCishaWYgKC5u b3QuIGFzc29jaWF0ZWQoZHQlcGNzdHIpKSBlcnJvciBzdG9wCishaWYgKGxlbihkdCVwY3N0 cikgLz0gMikgZXJyb3Igc3RvcAorIWlmIChzaXplKGR0JXBjc3RyKSAvPSAyKSBlcnJvciBz dG9wCishaWYgKGxib3VuZChkdCVwY3N0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAorIWlmICh1 Ym91bmQoZHQlcGNzdHIsIDEpIC89IDIpIGVycm9yIHN0b3AKKyFpZiAoYW55IChkdCVwY3N0 ciAvPSBbIjAxIiwgImprIl0pKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTos a2luZD00KSwgcG9pbnRlciA6OiBwYzRzdHIoOikKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxl bj0zLGtpbmQ9NCkgOjogZHQlcGM0c3RyKDI6MykpCisKKyEgbGliZ29tcDogR09NUF90YXJn ZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5kIDB4MDAKKyEgc3RydWN0dXJlIGVs ZW1lbnQgd2hlbiBvdGhlciBtYXBwZWQgZWxlbWVudHMgZnJvbSB0aGUgc2FtZSBzdHJ1Y3R1 cmUgd2VyZW4ndCBtYXBwZWQgdG9nZXRoZXIgd2l0aCBpdAorCishIEZJWE1FOiBEaXNhYmxl ZCBiZWZhdXNlIG9mIFBSMTA4ODM3CishCishISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFw KGFsbG9jOiBkdCVwYzRzdHIoMzozKSkKKyFkdCVwYzRzdHIoMikgPSA0XyI0NTYiCishISRv bXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlcGM0c3RyKDM6MykpCishICBpZiAoLm5vdC4gYXNz b2NpYXRlZChkdCVwYzRzdHIpKSBlcnJvciBzdG9wCishICBpZiAobGVuKGR0JXBjNHN0cikg Lz0gMykgZXJyb3Igc3RvcAorISAgaWYgKHNpemUoZHQlcGM0c3RyKSAvPSAyKSBlcnJvciBz dG9wCishICBpZiAobGJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAorISAg aWYgKHVib3VuZChkdCVwYzRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyEgIGR0JXBjNHN0 cigzOjMpID0gWzRfInR6dSJdCishISRvbXAgZW5kIHRhcmdldAorISEkb21wIHRhcmdldCBl eGl0IGRhdGEgbWFwKGZyb206IGR0JXBjNHN0cigzOjMpKQorIWlmICgubm90LiBhc3NvY2lh dGVkKGR0JXBjNHN0cikpIGVycm9yIHN0b3AKKyFpZiAobGVuKGR0JXBjNHN0cikgLz0gMykg ZXJyb3Igc3RvcAorIWlmIChzaXplKGR0JXBjNHN0cikgLz0gMikgZXJyb3Igc3RvcAorIWlm IChsYm91bmQoZHQlcGM0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCishaWYgKHVib3VuZChk dCVwYzRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyFpZiAoZHQlcGM0c3RyKDIpIC89IDRf IjQ1NiIpIGVycm9yIHN0b3AKKyFpZiAoZHQlcGM0c3RyKDMpIC89IDRfInR6dSIpIGVycm9y IHN0b3AKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5k bGVkIGtpbmQgMHgwMQorCishIGludGVnZXIgOjogaWkoNSkKKworISRvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwKGFsbG9jOiBpaSgyOjUpKQoraWkoMSkgPSAtMQorISRvbXAgdGFyZ2V0 IG1hcChhbGxvYzogaWkoMjo1KSkKKyAgaWYgKHNpemUoaWkpIC89IDUpIGVycm9yIHN0b3AK KyAgaWYgKGxib3VuZChpaSwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlp LCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGlpKDI6NSkgPSBbLTIsIC0zLCAtNCwgLTVdCish JG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpaSgy OjUpKQoraWYgKHNpemUoaWkpIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoaWksIDEp IC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoaWksIDEpIC89IDUpIGVycm9yIHN0b3AK K2lmIChhbnkgKGlpIC89IFstMSwgLTIsIC0zLCAtNCwgLTVdKSkgZXJyb3Igc3RvcAorCisK KyEgY2hhcmFjdGVyKGxlbj0xMSkgOjogY2xzdHIoLTE6MSkKKworISRvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwKGFsbG9jOiBjbHN0cigwOjEpKQorY2xzdHIoLTEpID0gIjEyMzQ1Njc4 OTAxIgorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogY2xzdHIoMDoxKSkKKyAgaWYgKGxlbihj bHN0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoY2xzdHIpIC89IDMpIGVycm9y IHN0b3AKKyAgaWYgKGxib3VuZChjbHN0ciwgMSkgLz0gLTEpIGVycm9yIHN0b3AKKyAgaWYg KHVib3VuZChjbHN0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBjbHN0cigwOjEpID0gWyJh YmNkZWZnaGlqayIsICJBQkNERUZHSElKSyJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0 YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbHN0cigwOjEpKQoraWYgKGxlbihjbHN0cikg Lz0gMTEpIGVycm9yIHN0b3AKK2lmIChzaXplKGNsc3RyKSAvPSAzKSBlcnJvciBzdG9wCitp ZiAobGJvdW5kKGNsc3RyLCAxKSAvPSAtMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChjbHN0 ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKGFueSAoY2xzdHIgLz0gWyIxMjM0NTY3ODkw MSIsICJhYmNkZWZnaGlqayIsICJBQkNERUZHSElKSyJdKSkgZXJyb3Igc3RvcAorCishIGNo YXJhY3RlcihsZW49MTEsa2luZD00KSA6OiBjbDRzdHIoMDozKQorCishJG9tcCB0YXJnZXQg ZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGNsNHN0cigxOjMpKQorY2w0c3RyKDApID0gNF8iMTIz NDU2Nzg5MDEiCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBjbDRzdHIoMTozKSkKKyAgaWYg KGxlbihjbDRzdHIpIC89IDExKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGNsNHN0cikgLz0g NCkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGNsNHN0ciwgMSkgLz0gMCkgZXJyb3Igc3Rv cAorICBpZiAodWJvdW5kKGNsNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBjbDRzdHIo MTozKSA9IFs0XyJhYmNkZWZnaGlqayIsICYKKyAgICAgICAgICAgIDRfInFlcmZ0Y2VhNmRz IiwgNF8iYTFmOWczN2dhNC4iXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4 aXQgZGF0YSBtYXAoZnJvbTogY2w0c3RyKDE6MykpCitpZiAobGVuKGNsNHN0cikgLz0gMTEp IGVycm9yIHN0b3AKK2lmIChzaXplKGNsNHN0cikgLz0gNCkgZXJyb3Igc3RvcAoraWYgKGxi b3VuZChjbDRzdHIsIDEpIC89IDApIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoY2w0c3RyLCAx KSAvPSAzKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDApIC89IDRfIjEyMzQ1Njc4OTAxIikg ZXJyb3Igc3RvcAoraWYgKGNsNHN0cigxKSAvPSA0XyJhYmNkZWZnaGlqayIpIGVycm9yIHN0 b3AKK2lmIChjbDRzdHIoMikgLz0gNF8icWVyZnRjZWE2ZHMiKSBlcnJvciBzdG9wCitpZiAo Y2w0c3RyKDMpIC89IDRfImExZjlnMzdnYTQuIikgZXJyb3Igc3RvcAorCisKKyEgYWxsb2Nh dGUoaXAoNSksIGlhKDgpKQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6 IGlwKDI6NSkpCitpcCgxKSA9IDExCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpcCgyOjUp KQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChpcCkpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUo aXApIC89IDUpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChpcCwgMSkgLz0gMSkgZXJyb3Ig c3RvcAorICBpZiAodWJvdW5kKGlwLCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGlwKDI6NSkg PSBbMjIsIDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhp dCBkYXRhIG1hcChmcm9tOiBpcCgyOjUpKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQoaXApKSBl cnJvciBzdG9wCitpZiAoc2l6ZShpcCkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChp cCwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChpcCwgMSkgLz0gNSkgZXJyb3Ig c3RvcAoraWYgKGFueSAoaXAgLz0gWzExLCAyMiwgMzMsIDQ0LCA1NV0pKSBlcnJvciBzdG9w CisKKyEgYWxsb2NhdGUoaXAoNSksIGlhKDgpKQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0 YSBtYXAoYWxsb2M6IGlhKDI6OCkpCitpYSgxKSA9IDEKKyEkb21wIHRhcmdldCBtYXAoYWxs b2M6IGlhKDI6OCkpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoaWEpKSBlcnJvciBzdG9wCisg IGlmIChzaXplKGlhKSAvPSA4KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoaWEsIDEpIC89 IDEpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChpYSwgMSkgLz0gOCkgZXJyb3Igc3RvcAor ICBpYSgyOjgpID0gWzIsMyw0LDUsNiw3LDhdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0 YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpYSgyOjgpKQoraWYgKC5ub3QuIGFsbG9jYXRl ZChpYSkpIGVycm9yIHN0b3AKK2lmIChzaXplKGlhKSAvPSA4KSBlcnJvciBzdG9wCitpZiAo bGJvdW5kKGlhLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGlhLCAxKSAvPSA4 KSBlcnJvciBzdG9wCitpZiAoYW55IChpYSAvPSBbMSwyLDMsNCw1LDYsNyw4XSkpIGVycm9y IHN0b3AKKworCishIGNoYXJhY3RlcihsZW49OiksIHBvaW50ZXIgOjogcHN0cig6KQorISBh bGxvY2F0ZShjaGFyYWN0ZXIobGVuPTIpIDo6IHBzdHIoLTI6MCkpCisKKyEgbGliZ29tcDog bnZwdHhfYWxsb2MgZXJyb3I6IG91dCBvZiBtZW1vcnkKKworISBGSVhNRTogYXJyYXkgb2Zm c2V0IHdyb25nbHkgY2FsY3VsYXRlZCBhcyBpdCB1c2VzIFRZUEVfU0laRV9VTklULCB3aGlj aCBpcyBhIFNBVkVfRVhQUgorIQorISEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxv YzogcHN0cigtMTowKSkKKyFwc3RyKC0yKSA9ICIwMSIKKyEhJG9tcCB0YXJnZXQgbWFwKGFs bG9jOiBwc3RyKC0xOjApKQorISAgaWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0cikpIGVycm9y IHN0b3AKKyEgIGlmIChsZW4ocHN0cikgLz0gMikgZXJyb3Igc3RvcAorISAgaWYgKHNpemUo cHN0cikgLz0gMykgZXJyb3Igc3RvcAorISAgaWYgKGxib3VuZChwc3RyLCAxKSAvPSAtMikg ZXJyb3Igc3RvcAorISAgaWYgKHVib3VuZChwc3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCish ICBwc3RyKC0xOjApID0gWyJqayIsICJhcSJdCishISRvbXAgZW5kIHRhcmdldAorISEkb21w IHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IHBzdHIoLTE6MCkpCishaWYgKC5ub3QuIGFz c29jaWF0ZWQocHN0cikpIGVycm9yIHN0b3AKKyFpZiAobGVuKHBzdHIpIC89IDIpIGVycm9y IHN0b3AKKyFpZiAoc2l6ZShwc3RyKSAvPSAzKSBlcnJvciBzdG9wCishaWYgKGxib3VuZChw c3RyLCAxKSAvPSAtMikgZXJyb3Igc3RvcAorIWlmICh1Ym91bmQocHN0ciwgMSkgLz0gMCkg ZXJyb3Igc3RvcAorIWlmIChhbnkgKHBzdHIgLz0gWyIwMSIsICJqayIsICJhcSJdKSkgZXJy b3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjogYXN0cig6 KQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTYpIDo6IGFzdHIoMzo1KSkKKworISBsaWJn b21wOiBudnB0eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCishIEZJWE1FCishISRv bXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBhc3RyKDQ6NSkpCishYXN0cigzKSA9 ICIwMWRiNDUiCishISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYXN0cig0OjUpKQorISAgaWYg KC5ub3QuIGFsbG9jYXRlZChhc3RyKSkgZXJyb3Igc3RvcAorISAgaWYgKGxlbihhc3RyKSAv PSA2KSBlcnJvciBzdG9wCishICBpZiAoc2l6ZShhc3RyKSAvPSAzKSBlcnJvciBzdG9wCish ICBpZiAobGJvdW5kKGFzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyEgIGlmICh1Ym91bmQo YXN0ciwgMSkgLz0gNSkgZXJyb3Igc3RvcAorISEhICBhc3RyKDQ6NSkgPSBbImprJEQlUyIs ICJ6dXRnNDciXQorISEkb21wIGVuZCB0YXJnZXQKKyEhISRvbXAgdGFyZ2V0IGV4aXQgZGF0 YSBtYXAoZnJvbTogYXN0cig0OjUpKQorISFpZiAoLm5vdC4gYWxsb2NhdGVkKGFzdHIpKSBl cnJvciBzdG9wCishISFpZiAobGVuKGFzdHIpIC89IDYpIGVycm9yIHN0b3AKKyFpZiAoc2l6 ZShhc3RyKSAvPSAzKSBlcnJvciBzdG9wCishaWYgKGxib3VuZChhc3RyLCAxKSAvPSAzKSBl cnJvciBzdG9wCishaWYgKHVib3VuZChhc3RyLCAxKSAvPSA1KSBlcnJvciBzdG9wCishaWYg KGFueSAoYXN0ciAvPSBbIjAxZGI0NSIsICJqayREJVMiLCAienV0ZzQ3Il0pKSBlcnJvciBz dG9wCishCisKKyEgY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIHBvaW50ZXIgOjogcDRzdHIo OikKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0zLGtpbmQ9NCkgOjogcDRzdHIoMjo0KSkK KworISBGQUlMUyB3aXRoIHZhbHVlIGNoZWNrCisKKyEgRklYTUU6IGFycmF5IG9mZnNldCB3 cm9uZ2x5IGNhbGN1bGF0ZWQgYXMgaXQgdXNlcyBUWVBFX1NJWkVfVU5JVCwgd2hpY2ggaXMg YSBTQVZFX0VYUFIKKyEKKyEhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IHA0 c3RyKDM6NCkpCishcDRzdHIoMikgPSA0XyJmODUiCishISRvbXAgdGFyZ2V0IG1hcChhbGxv YzogcDRzdHIoMzo0KSkKKyEgIGlmICgubm90LiBhc3NvY2lhdGVkKHA0c3RyKSkgZXJyb3Ig c3RvcAorISAgaWYgKGxlbihwNHN0cikgLz0gMykgZXJyb3Igc3RvcAorISAgaWYgKHNpemUo cDRzdHIpIC89IDMpIGVycm9yIHN0b3AKKyEgIGlmIChsYm91bmQocDRzdHIsIDEpIC89IDIp IGVycm9yIHN0b3AKKyEgIGlmICh1Ym91bmQocDRzdHIsIDEpIC89IDQpIGVycm9yIHN0b3AK KyEgIHA0c3RyKDM6NCkgPSBbNF8iOGFmIiwgNF8iQSVGIl0KKyEhJG9tcCBlbmQgdGFyZ2V0 CishISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcDRzdHIoMzo0KSkKKyFpZiAo Lm5vdC4gYXNzb2NpYXRlZChwNHN0cikpIGVycm9yIHN0b3AKKyFpZiAobGVuKHA0c3RyKSAv PSAzKSBlcnJvciBzdG9wCishaWYgKHNpemUocDRzdHIpIC89IDMpIGVycm9yIHN0b3AKKyFp ZiAobGJvdW5kKHA0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCishaWYgKHVib3VuZChwNHN0 ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAorIWlmIChwNHN0cigyKSAgLz0gNF8iZjg1IikgZXJy b3Igc3RvcAorIWlmIChwNHN0cigzKSAgLz0gNF8iOGFmIikgZXJyb3Igc3RvcAorIWlmIChw NHN0cig0KSAgLz0gNF8iQSVGIikgZXJyb3Igc3RvcAorCishIGNoYXJhY3RlcihsZW49Oixr aW5kPTQpLCBhbGxvY2F0YWJsZSA6OiBhNHN0cig6KQorISBhbGxvY2F0ZShjaGFyYWN0ZXIo bGVuPTcsa2luZD00KSA6OiBhNHN0cigtMjozKSkKKworISBsaWJnb21wOiBUcnlpbmcgdG8g bWFwIGludG8gZGV2aWNlIFsweDEwMjdiYTAuLjB4MjUxMDUwYmI5YzllYmJhMCkgb2JqZWN0 IHdoZW4gWzB4N2ZmZDAyNmU2NzA4Li4weDdmZmQwMjZlNjcxMCkgaXMgYWxyZWFkeSBtYXBw ZWQKKworISBGSVhNRTogRGlzYWJsZWQgYmVmYXVzZSBvZiBQUjEwODgzOAorISEkb21wIHRh cmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogYTRzdHIoLTE6MykpCishIWE0c3RyKC0yKSA9 IDRfInNmNDU2YXEiCishISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYTRzdHIoLTE6MykpCish ICBpZiAoLm5vdC4gYWxsb2NhdGVkKGE0c3RyKSkgZXJyb3Igc3RvcAorISAgaWYgKGxlbihh NHN0cikgLz0gNykgZXJyb3Igc3RvcAorISAgaWYgKHNpemUoYTRzdHIpIC89IDYpIGVycm9y IHN0b3AKKyEgIGlmIChsYm91bmQoYTRzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCishICBp ZiAodWJvdW5kKGE0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCishICBhNHN0cigtMTozKSA9 IFs0XyIzZHR6dTI0IiwgNF8iXzRmaDdzbSIsIDRfIj1mZjg1czciLCA0XyJqPThhZjRkIiwg NF8iLixBJUZzeiJdCishISRvbXAgZW5kIHRhcmdldAorISEkb21wIHRhcmdldCBleGl0IGRh dGEgbWFwKGZyb206IGE0c3RyKC0xOjMpKQorIWlmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIp KSBlcnJvciBzdG9wCishaWYgKGxlbihhNHN0cikgLz0gNykgZXJyb3Igc3RvcAorIWlmIChz aXplKGE0c3RyKSAvPSA2KSBlcnJvciBzdG9wCishaWYgKGxib3VuZChhNHN0ciwgMSkgLz0g LTIpIGVycm9yIHN0b3AKKyFpZiAodWJvdW5kKGE0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9w CishaWYgKGE0c3RyKC0yKSAvPSA0XyJzZjQ1NmFxIikgZXJyb3Igc3RvcAorIWlmIChhNHN0 cigtMSkgLz0gNF8iM2R0enUyNCIpIGVycm9yIHN0b3AKKyFpZiAoYTRzdHIoMCkgIC89IDRf Il80Zmg3c20iKSBlcnJvciBzdG9wCishaWYgKGE0c3RyKDEpICAvPSA0XyI9ZmY4NXM3Iikg ZXJyb3Igc3RvcAorIWlmIChhNHN0cigyKSAgLz0gNF8iaj04YWY0ZCIpIGVycm9yIHN0b3AK KyFpZiAoYTRzdHIoMykgIC89IDRfIi4sQSVGc3oiKSBlcnJvciBzdG9wCisKK2RlYWxsb2Nh dGUoZHQlcGMpCitkZWFsbG9jYXRlKGR0JXBjc3RyKQorCitkZWFsbG9jYXRlKGR0JXBjNHN0 cikKKworZGVhbGxvY2F0ZShpcCwgaWEpCitkZWFsbG9jYXRlKHBzdHIpCitkZWFsbG9jYXRl KGFzdHIpCisKK2RlYWxsb2NhdGUocDRzdHIpCitkZWFsbG9jYXRlKGE0c3RyKQorZW5kCmRp ZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVu dGVyLWRhdGEtNy5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFy Z2V0LWVudGVyLWRhdGEtNy5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmYxMjlmNTU5MzM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTcuZjkwCkBAIC0wLDAgKzEs NzggQEAKK21vZHVsZSBtCisgIGltcGxpY2l0IG5vbmUKKyAgY2hhcmFjdGVyKGxlbj06KSwg YWxsb2NhdGFibGUgOjogc3RyQSg6KSwgc3RyQTIKKyAgY2hhcmFjdGVyKGxlbj06KSwgcG9p bnRlciA6OiBzdHJQKDopLCBzdHJQMgorICAhJG9tcCBkZWNsYXJlIHRhcmdldCBlbnRlcihz dHJBLHN0ckEyLHN0clAsc3RyUDIpCitjb250YWlucworICBzdWJyb3V0aW5lIG9wdF9tYXAo c3RyMSwgc3RyMiwgc3RyMykKKyAgICBjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6 OiBzdHIxLCBzdHIyLCBzdHIzLCBzdHI0CisgICAgb3B0aW9uYWwgOjogc3RyMiwgc3RyMyAK KworICAgIGlmICgubm90LnByZXNlbnQoc3RyMikpIGVycm9yIHN0b3AKKyAgICBpZiAocHJl c2VudChzdHIzKSkgIGVycm9yIHN0b3AKKworICAgICEkb21wIHRhcmdldCBtYXAoc3RyMSxz dHIyLHN0cjMsc3RyNCkKKyAgICAgIGlmIChhbGxvY2F0ZWQoc3RyMSkpIGVycm9yIHN0b3AK KyAgICAgIGlmIChhbGxvY2F0ZWQoc3RyMikpIGVycm9yIHN0b3AKKyAgICAgIGlmIChwcmVz ZW50KHN0cjMpKSBlcnJvciBzdG9wCisgICAgICBpZiAoYWxsb2NhdGVkKHN0cjQpKSBlcnJv ciBzdG9wCisgICAgISRvbXAgZW5kIHRhcmdldAorICBlbmQKKyAgc3Vicm91dGluZSBjYWxs X29wdCgpCisgICAgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjogc3RyMSwgc3Ry MgorICAgIGNhbGwgb3B0X21hcChzdHIxLCBzdHIyKQorICBlbmQKKyAgc3Vicm91dGluZSB0 ZXN0CisgICAhJG9tcCBkZWNsYXJlIHRhcmdldAorICAgaWYgKC5ub3QuIGFsbG9jYXRlZChz dHJBKSkgZXJyb3Igc3RvcAorICAgIWlmICgubm90LiBhbGxvY2F0ZWQoc3RyQTIpKSBlcnJv ciBzdG9wCisgICBpZiAoLm5vdC4gYXNzb2NpYXRlZChzdHJQKSkgZXJyb3Igc3RvcAorICAg IWlmICgubm90LiBhc3NvY2lhdGVkKHN0clAyKSkgZXJyb3Igc3RvcAorCisgICAgISBlbnN1 cmUgbGVuZ3RoIHdhcyB1cGRhdGVkIGFzIHdlbGwKKyAgICBpZiAobGVuKHN0ckEpIC89IDMp IGVycm9yIHN0b3AKKyAgICBpZiAobGVuKHN0ckEyKSAvPSA1KSBlcnJvciBzdG9wCisgICAg aWYgKGxlbihzdHJQKSAvPSA0KSBlcnJvciBzdG9wCisgICAgaWYgKGxlbihzdHJQMikgLz0g OCkgZXJyb3Igc3RvcAorISAgICBpZiAoYW55IChzdHJBIC89IFsnSGF2JywgJ2UgZicsICd1 biEnXSkpIGVycm9yIHN0b3AKKyEgICAgaWYgKHN0ckEyIC89ICdIZWxsbycpIGVycm9yIHN0 b3AKKyEgICAgaWYgKGFueSAoc3RyUCAvPSBbJ2FiY2QnLCAnZWZnaCcsICdpamtsJ10pKSBl cnJvciBzdG9wCishICAgIGlmIChzdHJQMiAvPSAnVGVzdENhc2UnKSBlcnJvciBzdG9wCish CishICAgIHN0ckEgPSBbJzEyMycsICc0NTYnLCAnNzg5J10KKyEgICAgc3RyQTIgPSAnV29y bGQnCishICAgIHN0clAgPSBbJ0FCQ0QnLCAnRUZHSCcsICdJSktMJ10KKyEgICAgc3RyUDIg PSAnUGFzc2VkISEnCisgIGVuZAorZW5kCisKK3Byb2dyYW0gbWFpbgorICB1c2UgbQorICBp bXBsaWNpdCBub25lCisgIGNhbGwgY2FsbF9vcHQKKworICBzdHJBID0gWydIYXYnLCAnZSBm JywgJ3VuISddCisgIHN0ckEyID0gJ0hlbGxvJworICBhbGxvY2F0ZShjaGFyYWN0ZXIobGVu PTQpIDo6IHN0clAoMykpCisgIHN0clAgPSBbJ2FiY2QnLCAnZWZnaCcsICdpamtsJ10KKyAg YWxsb2NhdGUoY2hhcmFjdGVyKGxlbj04KSA6OiBzdHJQMikKKyAgc3RyUDIgPSAnVGVzdENh c2UnCisKKyAgISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsd2F5cywgdG86IHN0ckEs IHN0ckEyKQorICAhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG86IHN0clAsIHN0clAy KQorICAhJG9tcCB0YXJnZXQKKyAgICBjYWxsIHRlc3QoKQorICAhJG9tcCBlbmQgdGFyZ2V0 CisgICEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGFsd2F5cywgZnJvbTogc3RyQSwgc3Ry QTIsIHN0clAsIHN0clAyKQorCisgIGlmIChsZW4oc3RyQSkgLz0gMykgZXJyb3Igc3RvcAor ICBpZiAobGVuKHN0ckEyKSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsZW4oc3RyUCkgLz0g NCkgZXJyb3Igc3RvcAorICBpZiAobGVuKHN0clAyKSAvPSA4KSBlcnJvciBzdG9wCishICBp ZiAoYW55IChzdHJBIC89IFsnMTIzJywgJzQ1NicsICc3ODknXSkpIGVycm9yIHN0b3AKKyEg IGlmIChzdHJBMiAvPSAnV29ybGQnKSBlcnJvciBzdG9wCishICBpZiAoYW55KHN0clAgLz0g WydBQkNEJywgJ0VGR0gnLCAnSUpLTCddKSkgZXJyb3Igc3RvcAorISAgaWYgKHN0clAyIC89 ICdQYXNzZWQhIScpIGVycm9yIHN0b3AKKworISAgZGVhbGxvY2F0ZShzdHJQLCBzdHJQMiwg c3RyQSwgc3RyQTIpCitlbmQK --------------TZHETduP2BtfzIzqt7K2LIoB--