Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hc2UV-000633-Qv for pgadmin-hackers@arkaria.postgresql.org; Sat, 15 Jun 2019 06:48:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hc2UU-0007kk-EX for pgadmin-hackers@arkaria.postgresql.org; Sat, 15 Jun 2019 06:48:42 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hc2UT-0007kY-MH for pgadmin-hackers@lists.postgresql.org; Sat, 15 Jun 2019 06:48:42 +0000 Received: from mail-qk1-x743.google.com ([2607:f8b0:4864:20::743]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hc2UL-0006Om-5v for pgadmin-hackers@postgresql.org; Sat, 15 Jun 2019 06:48:40 +0000 Received: by mail-qk1-x743.google.com with SMTP id l128so3165945qke.2 for ; Fri, 14 Jun 2019 23:48:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=fA16mZhp0oBelmC4UYzQf7QKgDKO98+bCN29ZphNkEs=; b=XpU1ctsMDB47hv8IVvOlJKsimKLE4AjgC+qnQk1RDmQUMNkU+RIH7+wkv9WAIYkcxG fndRi04iXKeQrkN8OAao9RKEDvKnJv6S9wbb/YTzqC7t5U0+n1vJRtQh5wdL0o/NR3iv iR72GShYRTqvO93EgYQpSYiTcLG5yZdfVx86ikho8aBccBeptRZ/xJdM9Uvy7lwgHwlk oWbsnjEJYg+WhtqeUza4wwHBAA9h5grOOQfgkW/JD1U/X/Pc2qqFJTLA3tTI8pgcPILg zz2MoFwbcyYFoz2yiPfa9J1xVbs/8Nhs0J/pyCXjy/rtSrYn5kVD1sx7gEIS+FZjvxnD T3XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=fA16mZhp0oBelmC4UYzQf7QKgDKO98+bCN29ZphNkEs=; b=a8zbgCFdjhCkmXLdujKK7utxAB/QfisBEJ+qCIhqafR5WMRGRUGB7c5naGoEfKgYpc DWZ8Ltvbi/lleG6ekZwjVXqLcCJ1Fuv34aAtcuSjORbn8QFkKX5Jry1F5PCM4KmvtQ/a 4LyS8vcDVbQRyIAFK3xBpTLEIajiys9Tzt2V/5ysdPIfe+D1Z6tnznXzHrO2q6WXEiRL obxtkhv/Kt67OYxI2YmMbc50RwSG3Afw4+g9gobc3MUa6jnjs3Z/b6d2WdHcuqzXgOFo sE3fpfffp+EW237MdhKr10QREpM4j8wr4bLg2db3wYDWFP0W497c1BIunAepd5CqlAJV 6Oaw== X-Gm-Message-State: APjAAAWNeMERYjGflamgBox5tkHrN1XYT/p7LpOoQOaaHWrEIa1eH5kk JdqO8WpDtaj8mr53GUEGHXlF/oKv159QljMvPPz5idNQ X-Google-Smtp-Source: APXvYqwopTR79cJpM7at1iDWVmEQ8lXfgB6cc383X4/5bOcVa2Xr4HdrrdhVfdcsIpLBiTa054KIuJwXVVCSIsqJEoA= X-Received: by 2002:a37:47d1:: with SMTP id u200mr45502996qka.21.1560581311803; Fri, 14 Jun 2019 23:48:31 -0700 (PDT) MIME-Version: 1.0 From: Yosry Muhammad Date: Sat, 15 Jun 2019 08:48:20 +0200 Message-ID: Subject: [GSoC][Patch] Automatic Mode Detection V1 To: pgadmin-hackers@postgresql.org Cc: Dave Page Content-Type: multipart/mixed; boundary="000000000000bbdcaa058b572668" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --000000000000bbdcaa058b572668 Content-Type: multipart/alternative; boundary="000000000000bbdca7058b572666" --000000000000bbdca7058b572666 Content-Type: text/plain; charset="UTF-8" Dear all, This is my first patch of my GSoC project, query tool automatic mode detection. In this patch, the initial (basic) version of the project is implemented. In this version, query resultsets are updatable if and only if: - All the columns belong to a single table - No duplicate columns are available - All the primary keys of the table are available Inserts, updates and deletes work automatically when the resultset is updatable. The 'save' button in the query tool works automatically to save the changes in the resultset if the query is the updatable, and saves the query to a file otherwise. The 'save as' button stays as is. I will work on improving and adding features to this version throughout my work during the summer according to what has the highest priorities (supporting duplicate columns or columns produced by functions or aggregations as read-only columns in the results seems like a good next move). Please give me your feedback of the changes I made, and any hints or comments that will improve my code in any aspect. I also have a couple of questions, - Should the save button in the query tool work the way I am using it now? or should there be a new dedicated button for saving the query to a file? - What documentations or unit tests should I write? any guidelines here would be appreciated. Thanks a lot! -- *Yosry Muhammad Yosry* Computer Engineering student, The Faculty of Engineering, Cairo University (2021). Class representative of CMP 2021. https://www.linkedin.com/in/yosrym93/ --000000000000bbdca7058b572666 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Dear all,

This is my first p= atch of my GSoC project, query tool automatic mode detection.
In this patch, the initial (basic) version of the project is im= plemented. In this version, query resultsets are updatable if and only if:<= /div>
- All the columns belong to a single table
- No duplica= te columns are available
- All the primary keys of the table are = available

Inserts, updates and deletes work automa= tically when the resultset is updatable.

The &= #39;save' button in the query tool works automatically to save the chan= ges in the resultset if the query is the updatable, and saves the query to = a file otherwise. The 'save as' button stays as is.
<= br>
I will work on improving and adding features to this version = throughout my work during the summer according to what has the highest prio= rities (supporting duplicate columns or columns produced by functions or ag= gregations as read-only columns in the results seems like a good next move)= .

Please give me your feedback of the changes I ma= de, and any hints or comments that will improve my code in any aspect.

I also have a couple of questions,
- Should = the save button in the query tool work the way I am using it now? or should= there be a new dedicated button for saving the query to a file?
=
- What documentations or unit tests should I write? any guid= elines here would be appreciated.

Thanks a lot!


--
Yosry Muhammad Yosry

Computer Engine= ering student,
The Faculty of Engineer= ing,
Cairo University (2021).
Class representative of CMP 2021.
--000000000000bbdca7058b572666-- --000000000000bbdcaa058b572668 Content-Type: text/x-patch; charset="US-ASCII"; name="query_tool_automatic_mode_switch_v1.patch" Content-Disposition: attachment; filename="query_tool_automatic_mode_switch_v1.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jwx5pm170 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5weSBiL3dl Yi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5weQppbmRleCAxNmY3MTMzZi4uMjIw NTA0NTEgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5w eQorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvX19pbml0X18ucHkKQEAgLTM4NCw2 ICszODQsOCBAQCBkZWYgcG9sbCh0cmFuc19pZCk6CiAgICAgcnNldCA9IE5vbmUKICAgICBoYXNf b2lkcyA9IEZhbHNlCiAgICAgb2lkcyA9IE5vbmUKKyAgICBhZGRpdGlvbmFsX21lc3NhZ2VzID0g Tm9uZQorICAgIG5vdGlmaWVzID0gTm9uZQogCiAgICAgIyBDaGVjayB0aGUgdHJhbnNhY3Rpb24g YW5kIGNvbm5lY3Rpb24gc3RhdHVzCiAgICAgc3RhdHVzLCBlcnJvcl9tc2csIGNvbm4sIHRyYW5z X29iaiwgc2Vzc2lvbl9vYmogPSBcCkBAIC00MjIsNiArNDI0LDIyIEBAIGRlZiBwb2xsKHRyYW5z X2lkKToKIAogICAgICAgICAgICAgc3QsIHJlc3VsdCA9IGNvbm4uYXN5bmNfZmV0Y2htYW55XzJk YXJyYXkoT05fREVNQU5EX1JFQ09SRF9DT1VOVCkKIAorICAgICAgICAgICAgIyBUaGVyZSBtYXkg YmUgYWRkaXRpb25hbCBtZXNzYWdlcyBldmVuIGlmIHJlc3VsdCBpcyBwcmVzZW50CisgICAgICAg ICAgICAjIGVnOiBGdW5jdGlvbiBjYW4gcHJvdmlkZSByZXN1bHQgYXMgd2VsbCBhcyBSQUlTRSBt ZXNzYWdlcworICAgICAgICAgICAgbWVzc2FnZXMgPSBjb25uLm1lc3NhZ2VzKCkKKyAgICAgICAg ICAgIGlmIG1lc3NhZ2VzOgorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbWVzc2FnZXMgPSAn Jy5qb2luKG1lc3NhZ2VzKQorICAgICAgICAgICAgbm90aWZpZXMgPSBjb25uLmdldF9ub3RpZmll cygpCisKKyAgICAgICAgICAgICMgUHJvY2VkdXJlL0Z1bmN0aW9uIG91dHB1dCBtYXkgY29tZXMg aW4gdGhlIGZvcm0gb2YgTm90aWNlcworICAgICAgICAgICAgIyBmcm9tIHRoZSBkYXRhYmFzZSBz ZXJ2ZXIsIHNvIHdlIG5lZWQgdG8gYXBwZW5kIHRob3NlIG91dHB1dHMKKyAgICAgICAgICAgICMg d2l0aCB0aGUgb3JpZ2luYWwgcmVzdWx0LgorICAgICAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6 CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29ubi5zdGF0dXNfbWVzc2FnZSgpCisgICAgICAg ICAgICAgICAgaWYgKHJlc3VsdCAhPSAnU0VMRUNUIDEnIG9yIHJlc3VsdCAhPSAnU0VMRUNUIDAn KSBhbmQgXAorICAgICAgICAgICAgICAgICAgICByZXN1bHQgaXMgbm90IE5vbmUgYW5kIGFkZGl0 aW9uYWxfbWVzc2FnZXM6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFkZGl0aW9uYWxf bWVzc2FnZXMgKyByZXN1bHQKKwogICAgICAgICAgICAgaWYgc3Q6CiAgICAgICAgICAgICAgICAg aWYgJ3ByaW1hcnlfa2V5cycgaW4gc2Vzc2lvbl9vYmo6CiAgICAgICAgICAgICAgICAgICAgIHBy aW1hcnlfa2V5cyA9IHNlc3Npb25fb2JqWydwcmltYXJ5X2tleXMnXQpAQCAtNDM4LDEwICs0NTYs MjIgQEAgZGVmIHBvbGwodHJhbnNfaWQpOgogICAgICAgICAgICAgICAgICkKICAgICAgICAgICAg ICAgICBzZXNzaW9uX29ialsnY2xpZW50X3ByaW1hcnlfa2V5J10gPSBjbGllbnRfcHJpbWFyeV9r ZXkKIAotICAgICAgICAgICAgICAgIGlmIGNvbHVtbnNfaW5mbyBpcyBub3QgTm9uZToKKyAgICAg ICAgICAgICAgICAjIElmIHRyYW5zX29iaiBpcyBhIFF1ZXJ5VG9vbENvbW1hbmQgdGhlbiBjaGVj ayBmb3IgdXBkYXRhYmxlCisgICAgICAgICAgICAgICAgIyByZXN1bHRzZXRzIGFuZCBwcmltYXJ5 IGtleXMKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRyYW5zX29iaiwgUXVlcnlUb29s Q29tbWFuZCk6CisgICAgICAgICAgICAgICAgICAgIHRyYW5zX29iai5jaGVja19mb3JfdXBkYXRh YmxlX3Jlc3VsdHNldF9hbmRfcHJpbWFyeV9rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgcGtf bmFtZXMsIHByaW1hcnlfa2V5cyA9IHRyYW5zX29iai5nZXRfcHJpbWFyeV9rZXlzKCkKKyAgICAg ICAgICAgICAgICAgICAgIyBJZiBwcmltYXJ5X2tleXMgZXhpc3QsIGFkZCB0aGVtIHRvIHRoZSBz ZXNzaW9uX29iaiB0bworICAgICAgICAgICAgICAgICAgICAjIGFsbG93IGZvciBzYXZpbmcgYW55 IGNoYW5nZXMgdG8gdGhlIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJpbWFyeV9rZXlz IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9vYmpbJ3ByaW1h cnlfa2V5cyddID0gcHJpbWFyeV9rZXlzCiAKLSAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9v YmogPSBwaWNrbGUubG9hZHMoc2Vzc2lvbl9vYmpbJ2NvbW1hbmRfb2JqJ10pCi0gICAgICAgICAg ICAgICAgICAgIGlmIGhhc2F0dHIoY29tbWFuZF9vYmosICdvYmpfaWQnKToKKyAgICAgICAgICAg ICAgICBpZiBjb2x1bW5zX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMg SWYgaXQgaXMgYSBRdWVyeVRvb2xDb21tYW5kIHRoYXQgaGFzIG9ial9pZCBhdHRyaWJ1dGUKKyAg ICAgICAgICAgICAgICAgICAgIyB0aGVuIGl0IHNob3VsZCBhbHNvIGJlIGVkaXRhYmxlCisgICAg ICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIodHJhbnNfb2JqLCAnb2JqX2lkJykgYW5kIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgIChub3QgaXNpbnN0YW5jZSh0cmFuc19vYmosIFF1ZXJ5VG9v bENvbW1hbmQpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNfb2JqLmNhbl9lZGl0 KCkpOgogICAgICAgICAgICAgICAgICAgICAgICAgIyBHZXQgdGhlIHRlbXBsYXRlIHBhdGggZm9y IHRoZSBjb2x1bW4KICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX3BhdGggPSAnY29s dW1ucy9zcWwvI3swfSMnLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25u Lm1hbmFnZXIudmVyc2lvbgpAQCAtNDQ5LDcgKzQ3OSw3IEBAIGRlZiBwb2xsKHRyYW5zX2lkKToK IAogICAgICAgICAgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFt0ZW1wbGF0ZV9wYXRoLCAnbm9kZXMuc3Fs J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD1jb21tYW5kX29iai5vYmpfaWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRyYW5zX29iai5vYmpfaWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaGFzX29pZHM9VHJ1ZQogICAgICAgICAgICAgICAgICAg ICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgIyByb3dzIHdpdGggYXR0cmlidXRlIG5v dF9udWxsCkBAIC01MjAsMjYgKzU1MCw4IEBAIGRlZiBwb2xsKHRyYW5zX2lkKToKICAgICAgICAg c3RhdHVzID0gJ05vdENvbm5lY3RlZCcKICAgICAgICAgcmVzdWx0ID0gZXJyb3JfbXNnCiAKLSAg ICAjIFRoZXJlIG1heSBiZSBhZGRpdGlvbmFsIG1lc3NhZ2VzIGV2ZW4gaWYgcmVzdWx0IGlzIHBy ZXNlbnQKLSAgICAjIGVnOiBGdW5jdGlvbiBjYW4gcHJvdmlkZSByZXN1bHQgYXMgd2VsbCBhcyBS QUlTRSBtZXNzYWdlcwotICAgIGFkZGl0aW9uYWxfbWVzc2FnZXMgPSBOb25lCi0gICAgbm90aWZp ZXMgPSBOb25lCi0gICAgaWYgc3RhdHVzID09ICdTdWNjZXNzJzoKLSAgICAgICAgbWVzc2FnZXMg PSBjb25uLm1lc3NhZ2VzKCkKLSAgICAgICAgaWYgbWVzc2FnZXM6Ci0gICAgICAgICAgICBhZGRp dGlvbmFsX21lc3NhZ2VzID0gJycuam9pbihtZXNzYWdlcykKLSAgICAgICAgbm90aWZpZXMgPSBj b25uLmdldF9ub3RpZmllcygpCi0KLSAgICAjIFByb2NlZHVyZS9GdW5jdGlvbiBvdXRwdXQgbWF5 IGNvbWVzIGluIHRoZSBmb3JtIG9mIE5vdGljZXMgZnJvbSB0aGUKLSAgICAjIGRhdGFiYXNlIHNl cnZlciwgc28gd2UgbmVlZCB0byBhcHBlbmQgdGhvc2Ugb3V0cHV0cyB3aXRoIHRoZQotICAgICMg b3JpZ2luYWwgcmVzdWx0LgotICAgIGlmIHN0YXR1cyA9PSAnU3VjY2VzcycgYW5kIHJlc3VsdCBp cyBOb25lOgotICAgICAgICByZXN1bHQgPSBjb25uLnN0YXR1c19tZXNzYWdlKCkKLSAgICAgICAg aWYgKHJlc3VsdCAhPSAnU0VMRUNUIDEnIG9yIHJlc3VsdCAhPSAnU0VMRUNUIDAnKSBhbmQgXAot ICAgICAgICAgICByZXN1bHQgaXMgbm90IE5vbmUgYW5kIGFkZGl0aW9uYWxfbWVzc2FnZXM6Ci0g ICAgICAgICAgICByZXN1bHQgPSBhZGRpdGlvbmFsX21lc3NhZ2VzICsgcmVzdWx0Ci0KICAgICB0 cmFuc2FjdGlvbl9zdGF0dXMgPSBjb25uLnRyYW5zYWN0aW9uX3N0YXR1cygpCisKICAgICByZXR1 cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAogICAgICAgICBkYXRhPXsKICAgICAgICAgICAgICdzdGF0 dXMnOiBzdGF0dXMsICdyZXN1bHQnOiByZXN1bHQsCkBAIC03NTAsNyArNzYyLDYgQEAgZGVmIHNh dmUodHJhbnNfaWQpOgogICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2Uo CiAgICAgICAgICAgICAgICAgICAgIGRhdGE9eydzdGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiB1 Int9Ii5mb3JtYXQobXNnKX0KICAgICAgICAgICAgICAgICApCi0KICAgICAgICAgc3RhdHVzLCBy ZXMsIHF1ZXJ5X3JlcywgX3Jvd2lkID0gdHJhbnNfb2JqLnNhdmUoCiAgICAgICAgICAgICBjaGFu Z2VkX2RhdGEsCiAgICAgICAgICAgICBzZXNzaW9uX29ialsnY29sdW1uc19pbmZvJ10sCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvY29tbWFuZC5weSBiL3dlYi9wZ2Fk bWluL3Rvb2xzL3NxbGVkaXRvci9jb21tYW5kLnB5CmluZGV4IGQ0YjA3MDBmLi5iY2NiNmIzOCAx MDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL2NvbW1hbmQucHkKKysrIGIv d2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL2NvbW1hbmQucHkKQEAgLTE5LDYgKzE5LDEwIEBA IGZyb20gZmxhc2sgaW1wb3J0IHJlbmRlcl90ZW1wbGF0ZQogZnJvbSBmbGFza19iYWJlbGV4IGlt cG9ydCBnZXR0ZXh0CiBmcm9tIHBnYWRtaW4udXRpbHMuYWpheCBpbXBvcnQgZm9yYmlkZGVuCiBm cm9tIHBnYWRtaW4udXRpbHMuZHJpdmVyIGltcG9ydCBnZXRfZHJpdmVyCitmcm9tIHBnYWRtaW4u dG9vbHMuc3FsZWRpdG9yLnV0aWxzLmNvbnN0YW50X2RlZmluaXRpb24gaW1wb3J0IEFTWU5DX09L Citmcm9tIHBnYWRtaW4udG9vbHMuc3FsZWRpdG9yLnV0aWxzLmlzX3F1ZXJ5X3Jlc3VsdHNldF91 cGRhdGFibGUgXAorICAgIGltcG9ydCBpc19xdWVyeV9yZXN1bHRzZXRfdXBkYXRhYmxlCitmcm9t IHBnYWRtaW4udG9vbHMuc3FsZWRpdG9yLnV0aWxzLnNhdmVfY2hhbmdlZF9kYXRhIGltcG9ydCBz YXZlX2NoYW5nZWRfZGF0YQogCiBmcm9tIGNvbmZpZyBpbXBvcnQgUEdfREVGQVVMVF9EUklWRVIK IApAQCAtNjY4LDI0NCArNjcyLDExIEBAIGNsYXNzIFRhYmxlQ29tbWFuZChHcmlkQ29tbWFuZCk6 CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb25uID0gZGVmYXVsdF9jb25uCiAKLSAgICAg ICAgc3RhdHVzID0gRmFsc2UKLSAgICAgICAgcmVzID0gTm9uZQotICAgICAgICBxdWVyeV9yZXMg PSBkaWN0KCkKLSAgICAgICAgY291bnQgPSAwCi0gICAgICAgIGxpc3Rfb2Zfcm93aWQgPSBbXQot ICAgICAgICBvcGVyYXRpb25zID0gKCdhZGRlZCcsICd1cGRhdGVkJywgJ2RlbGV0ZWQnKQotICAg ICAgICBsaXN0X29mX3NxbCA9IHt9Ci0gICAgICAgIF9yb3dpZCA9IE5vbmUKLQotICAgICAgICBp ZiBjb25uLmNvbm5lY3RlZCgpOgotCi0gICAgICAgICAgICAjIFN0YXJ0IHRoZSB0cmFuc2FjdGlv bgotICAgICAgICAgICAgY29ubi5leGVjdXRlX3ZvaWQoJ0JFR0lOOycpCi0KLSAgICAgICAgICAg ICMgSXRlcmF0ZSB0b3RhbCBudW1iZXIgb2YgcmVjb3JkcyB0byBiZSB1cGRhdGVkL2luc2VydGVk Ci0gICAgICAgICAgICBmb3Igb2ZfdHlwZSBpbiBjaGFuZ2VkX2RhdGE6Ci0gICAgICAgICAgICAg ICAgIyBObyBuZWVkIHRvIGdvIGZ1cnRoZXIgaWYgaXRzIG5vdCBhZGQvdXBkYXRlL2RlbGV0ZSBv cGVyYXRpb24KLSAgICAgICAgICAgICAgICBpZiBvZl90eXBlIG5vdCBpbiBvcGVyYXRpb25zOgot ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICMgaWYgbm8gZGF0 YSB0byBiZSBzYXZlIHRoZW4gY29udGludWUKLSAgICAgICAgICAgICAgICBpZiBsZW4oY2hhbmdl ZF9kYXRhW29mX3R5cGVdKSA8IDE6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAg ICAgICAgICAgICAgICBjb2x1bW5fdHlwZSA9IHt9Ci0gICAgICAgICAgICAgICAgY29sdW1uX2Rh dGEgPSB7fQotICAgICAgICAgICAgICAgIGZvciBlYWNoX2NvbCBpbiBjb2x1bW5zX2luZm86Ci0g ICAgICAgICAgICAgICAgICAgIGlmICgKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNf aW5mb1tlYWNoX2NvbF1bJ25vdF9udWxsJ10gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBu b3QgY29sdW1uc19pbmZvW2VhY2hfY29sXVsnaGFzX2RlZmF1bHRfdmFsJ10KLSAgICAgICAgICAg ICAgICAgICAgKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRhW2VhY2hfY29s XSA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl90eXBlW2VhY2hfY29sXSA9 XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfaW5mb1tlYWNoX2NvbF1bJ3R5 cGVfbmFtZSddCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg ICAgICBjb2x1bW5fdHlwZVtlYWNoX2NvbF0gPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29sdW1uc19pbmZvW2VhY2hfY29sXVsndHlwZV9uYW1lJ10KLQotICAgICAgICAgICAgICAg ICMgRm9yIG5ld2x5IGFkZGVkIHJvd3MKLSAgICAgICAgICAgICAgICBpZiBvZl90eXBlID09ICdh ZGRlZCc6Ci0gICAgICAgICAgICAgICAgICAgICMgUHl0aG9uIGRpY3QgZG9lcyBub3QgaG9ub3Vy IHRoZSBpbnNlcnRlZCBpdGVtIG9yZGVyCi0gICAgICAgICAgICAgICAgICAgICMgU28gdG8gaW5z ZXJ0IGRhdGEgaW4gdGhlIG9yZGVyLCB3ZSBuZWVkIHRvIG1ha2Ugb3JkZXJlZAotICAgICAgICAg ICAgICAgICAgICAjIGxpc3Qgb2YgYWRkZWQgaW5kZXggV2UgZG9uJ3QgbmVlZCB0aGlzIG1lY2hh bmlzbSBpbgotICAgICAgICAgICAgICAgICAgICAjIHVwZGF0ZWQvZGVsZXRlZCByb3dzIGFzIGl0 IGRvZXMgbm90IG1hdHRlciBpbgotICAgICAgICAgICAgICAgICAgICAjIHRob3NlIG9wZXJhdGlv bnMKLSAgICAgICAgICAgICAgICAgICAgYWRkZWRfaW5kZXggPSBPcmRlcmVkRGljdCgKLSAgICAg ICAgICAgICAgICAgICAgICAgIHNvcnRlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFuZ2VkX2RhdGFbJ2FkZGVkX2luZGV4J10uaXRlbXMoKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBrZXk9bGFtYmRhIHg6IGludCh4WzBdKQotICAgICAgICAgICAgICAgICAgICAgICAg KQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3Fs W29mX3R5cGVdID0gW10KLQotICAgICAgICAgICAgICAgICAgICAjIFdoZW4gbmV3IHJvd3MgYXJl IGFkZGVkLCBvbmx5IGNoYW5nZWQgY29sdW1ucyBkYXRhIGlzCi0gICAgICAgICAgICAgICAgICAg ICMgc2VudCBmcm9tIGNsaWVudCBzaWRlLiBCdXQgaWYgY29sdW1uIGlzIG5vdF9udWxsIGFuZCBo YXMKLSAgICAgICAgICAgICAgICAgICAgIyBub19kZWZhdWx0X3ZhbHVlLCBzZXQgY29sdW1uIHRv IGJsYW5rLCBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgICMgb2Ygbm90IG51bGwgd2hpY2gg aXMgc2V0IGJ5IGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRhID0ge30K LSAgICAgICAgICAgICAgICAgICAgcGtfbmFtZXMsIHByaW1hcnlfa2V5cyA9IHNlbGYuZ2V0X3By aW1hcnlfa2V5cygpCi0gICAgICAgICAgICAgICAgICAgIGhhc19vaWRzID0gJ29pZCcgaW4gY29s dW1uX3R5cGUKLQotICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaF9yb3cgaW4gYWRkZWRfaW5k ZXg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIEdldCB0aGUgcm93IGluZGV4IHRvIG1hdGNo IHdpdGggdGhlIGFkZGVkIHJvd3MKLSAgICAgICAgICAgICAgICAgICAgICAgICMgZGljdCBrZXkK LSAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9yb3dfaW5kZXggPSBhZGRlZF9pbmRleFtlYWNo X3Jvd10KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjaGFuZ2VkX2RhdGFbb2ZfdHlw ZV1bdG1wX3Jvd19pbmRleF1bJ2RhdGEnXQotICAgICAgICAgICAgICAgICAgICAgICAgIyBSZW1v dmUgb3VyIHVuaXF1ZSB0cmFja2luZyBrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu cG9wKGNsaWVudF9wcmltYXJ5X2tleSwgTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRh dGEucG9wKCdpc19yb3dfY29waWVkJywgTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxp c3Rfb2Zfcm93aWQuYXBwZW5kKGRhdGEuZ2V0KGNsaWVudF9wcmltYXJ5X2tleSkpCi0KLSAgICAg ICAgICAgICAgICAgICAgICAgICMgVXBkYXRlIGNvbHVtbnMgdmFsdWUgd2l0aCBjb2x1bW5zIGhh dmluZwotICAgICAgICAgICAgICAgICAgICAgICAgIyBub3RfbnVsbD1GYWxzZSBhbmQgaGFzIG5v IGRlZmF1bHQgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRhLnVwZGF0 ZShkYXRhKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUo Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYuc3FsX3BhdGgsICdp bnNlcnQuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdG9fYmVfc2F2 ZWQ9Y29sdW1uX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlz PU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X25hbWU9c2VsZi5vYmpl Y3RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3BfbmFtZT1zZWxmLm5zcF9u YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZT1jb2x1bW5fdHlwZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa19uYW1lcz1wa19uYW1lcywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoYXNfb2lkcz1oYXNfb2lkcwotICAgICAgICAgICAgICAgICAg ICAgICAgKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rfc3FsID0gcmVuZGVyX3Rl bXBsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnNxbF9w YXRoLCAnc2VsZWN0LnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Rf bmFtZT1zZWxmLm9iamVjdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcF9u YW1lPXNlbGYubnNwX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9r ZXlzPXByaW1hcnlfa2V5cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfb2lkcz1o YXNfb2lkcwotICAgICAgICAgICAgICAgICAgICAgICAgKQotCi0gICAgICAgICAgICAgICAgICAg ICAgICBsaXN0X29mX3NxbFtvZl90eXBlXS5hcHBlbmQoewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdzcWwnOiBzcWwsICdkYXRhJzogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnY2xpZW50X3Jvdyc6IHRtcF9yb3dfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ3NlbGVjdF9zcWwnOiBzZWxlY3Rfc3FsCi0gICAgICAgICAgICAgICAgICAgICAgICB9 KQotICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXNldCBjb2x1bW4gZGF0YQotICAgICAgICAg ICAgICAgICAgICAgICAgY29sdW1uX2RhdGEgPSB7fQotCi0gICAgICAgICAgICAgICAgIyBGb3Ig dXBkYXRlZCByb3dzCi0gICAgICAgICAgICAgICAgZWxpZiBvZl90eXBlID09ICd1cGRhdGVkJzoK LSAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2ZfdHlwZV0gPSBbXQotICAgICAgICAg ICAgICAgICAgICBmb3IgZWFjaF9yb3cgaW4gY2hhbmdlZF9kYXRhW29mX3R5cGVdOgotICAgICAg ICAgICAgICAgICAgICAgICAgZGF0YSA9IGNoYW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jvd11b J2RhdGEnXQotICAgICAgICAgICAgICAgICAgICAgICAgcGsgPSBjaGFuZ2VkX2RhdGFbb2ZfdHlw ZV1bZWFjaF9yb3ddWydwcmltYXJ5X2tleXMnXQotICAgICAgICAgICAgICAgICAgICAgICAgc3Fs ID0gcmVuZGVyX3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2lu KFtzZWxmLnNxbF9wYXRoLCAndXBkYXRlLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkYXRhX3RvX2JlX3NhdmVkPWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJpbWFyeV9rZXlzPXBrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9uYW1l PXNlbGYub2JqZWN0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNwX25hbWU9 c2VsZi5uc3BfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGU9Y29s dW1uX3R5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAg ICAgIGxpc3Rfb2Zfc3FsW29mX3R5cGVdLmFwcGVuZCh7J3NxbCc6IHNxbCwgJ2RhdGEnOiBkYXRh fSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfcm93aWQuYXBwZW5kKGRhdGEuZ2V0 KGNsaWVudF9wcmltYXJ5X2tleSkpCi0KLSAgICAgICAgICAgICAgICAjIEZvciBkZWxldGVkIHJv d3MKLSAgICAgICAgICAgICAgICBlbGlmIG9mX3R5cGUgPT0gJ2RlbGV0ZWQnOgotICAgICAgICAg ICAgICAgICAgICBsaXN0X29mX3NxbFtvZl90eXBlXSA9IFtdCi0gICAgICAgICAgICAgICAgICAg IGlzX2ZpcnN0ID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICByb3dzX3RvX2RlbGV0ZSA9IFtd Ci0gICAgICAgICAgICAgICAgICAgIGtleXMgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIG5v X29mX2tleXMgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIGZvciBlYWNoX3JvdyBpbiBjaGFu Z2VkX2RhdGFbb2ZfdHlwZV06Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3dzX3RvX2RlbGV0 ZS5hcHBlbmQoY2hhbmdlZF9kYXRhW29mX3R5cGVdW2VhY2hfcm93XSkKLSAgICAgICAgICAgICAg ICAgICAgICAgICMgRmV0Y2ggdGhlIGtleXMgZm9yIFNRTCBnZW5lcmF0aW9uCi0gICAgICAgICAg ICAgICAgICAgICAgICBpZiBpc19maXJzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IFdlIG5lZWQgdG8gY292ZXJ0IGRpY3Rfa2V5cyB0byBub3JtYWwgbGlzdCBpbgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgUHl0aG9uMwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgSW4gUHl0aG9uMiwgaXQncyBhbHJlYWR5IGEgbGlzdCAmIFdlIHdpbGwgYWxzbwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgZmV0Y2ggY29sdW1uIG5hbWVzIHVzaW5nIGluZGV4Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cyA9IGxpc3QoCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jvd10ua2V5cygpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5vX29mX2tleXMgPSBsZW4oa2V5cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19m aXJzdCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgICMgTWFwIGluZGV4IHdpdGggY29sdW1u IG5hbWUgZm9yIGVhY2ggcm93Ci0gICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4gcm93c190 b19kZWxldGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiByb3cuaXRlbXMo KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNldCBwcmltYXJ5IGtleSB3aXRoIGxh YmVsICYgZGVsZXRlIGluZGV4IGJhc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBt YXBwZWQga2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByb3dbY2hhbmdlZF9kYXRhWydjb2x1bW5zJ10KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnQoayldWyduYW1lJ11dID0gdgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl bCByb3dba10KLQotICAgICAgICAgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoCi0g ICAgICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5zcWxfcGF0aCwgJ2RlbGV0ZS5z cWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXJvd3NfdG9fZGVsZXRlLAotICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlfbGFiZWxzPWtleXMsCi0gICAgICAgICAg ICAgICAgICAgICAgICBub19vZl9rZXlzPW5vX29mX2tleXMsCi0gICAgICAgICAgICAgICAgICAg ICAgICBvYmplY3RfbmFtZT1zZWxmLm9iamVjdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAg ICAgbnNwX25hbWU9c2VsZi5uc3BfbmFtZQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAg ICAgICAgICAgICAgIGxpc3Rfb2Zfc3FsW29mX3R5cGVdLmFwcGVuZCh7J3NxbCc6IHNxbCwgJ2Rh dGEnOiB7fX0pCi0KLSAgICAgICAgICAgIGZvciBvcHIsIHNxbHMgaW4gbGlzdF9vZl9zcWwuaXRl bXMoKToKLSAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBzcWxzOgotICAgICAgICAgICAgICAg ICAgICBpZiBpdGVtWydzcWwnXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvd19hZGRlZCA9 IE5vbmUKLQotICAgICAgICAgICAgICAgICAgICAgICAgIyBGZXRjaCBvaWRzL3ByaW1hcnkga2V5 cwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ3NlbGVjdF9zcWwnIGluIGl0ZW0gYW5kIGl0 ZW1bJ3NlbGVjdF9zcWwnXToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJl cyA9IGNvbm4uZXhlY3V0ZV9kaWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp dGVtWydzcWwnXSwgaXRlbVsnZGF0YSddKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV92 b2lkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtWydzcWwnXSwgaXRlbVsn ZGF0YSddKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbm4uZXhlY3V0ZV92b2lkKCdST0xMQkFDSzsnKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2Ugcm9sbCBiYWNrZWQgZXZlcnkgdGhpbmcg dGhlbiB1cGRhdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtZXNzYWdlIGZv ciBlYWNoIHNxbCBxdWVyeS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdmFsIGlu IHF1ZXJ5X3JlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcXVlcnlfcmVz W3ZhbF1bJ3N0YXR1cyddOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVl cnlfcmVzW3ZhbF1bJ3Jlc3VsdCddID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdUcmFuc2FjdGlvbiBST0xMQkFDSycKLQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgSWYgbGlzdCBpcyBlbXB0eSBzZXQgcm93aWQgdG8gMQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGlz dF9vZl9yb3dpZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yb3dpZCA9 IGxpc3Rfb2Zfcm93aWRbY291bnRdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs c2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcm93aWQgPSAxCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX3Jvd2lkID0gMAotCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHN0YXR1cywgcmVzLCBxdWVyeV9yZXMsIF9yb3dpZAotCi0gICAgICAgICAgICAg ICAgICAgICAgICAjIFNlbGVjdCBhZGRlZCByb3cgZnJvbSB0aGUgdGFibGUKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmICdzZWxlY3Rfc3FsJyBpbiBpdGVtOgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXR1cywgc2VsX3JlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0KAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpdGVtWydzZWxlY3Rfc3FsJ10sIHJlc1sncm93cyddWzBd KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5leGVjdXRlX3ZvaWQoJ1JPTExCQUNLOycpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2Ugcm9sbCBiYWNrZWQgZXZlcnkg dGhpbmcgdGhlbiB1cGRhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUg bWVzc2FnZSBmb3IgZWFjaCBzcWwgcXVlcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvciB2YWwgaW4gcXVlcnlfcmVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgcXVlcnlfcmVzW3ZhbF1bJ3N0YXR1cyddOgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3Jlc1t2YWxdWydyZXN1bHQnXSA9IFwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RyYW5zYWN0aW9uIFJPTExCQUNL JwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgbGlzdCBpcyBlbXB0eSBz ZXQgcm93aWQgdG8gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaXN0X29mX3Jvd2lkOgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yb3dpZCA9IGxpc3Rfb2Zfcm93aWRb Y291bnRdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yb3dpZCA9IDEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9yb3dpZCA9IDAKLQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gc3RhdHVzLCBzZWxfcmVzLCBxdWVyeV9yZXMsIF9yb3dpZAotCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ3Jvd3MnIGluIHNlbF9yZXMgYW5kIGxlbihzZWxf cmVzWydyb3dzJ10pID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93X2Fk ZGVkID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVsnY2xpZW50 X3JvdyddOiBzZWxfcmVzWydyb3dzJ11bMF19Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJv d3NfYWZmZWN0ZWQgPSBjb25uLnJvd3NfYWZmZWN0ZWQoKQotCi0gICAgICAgICAgICAgICAgICAg ICAgICAjIHN0b3JlIHRoZSByZXN1bHQgb2YgZWFjaCBxdWVyeSBpbiBkaWN0aW9uYXJ5Ci0gICAg ICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXNbY291bnRdID0gewotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdzdGF0dXMnOiBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ3Jlc3VsdCc6IE5vbmUgaWYgcm93X2FkZGVkIGVsc2UgcmVzLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdzcWwnOiBzcWwsICdyb3dzX2FmZmVjdGVkJzogcm93c19hZmZlY3RlZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm93X2FkZGVkJzogcm93X2FkZGVkCi0gICAg ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9 IDEKLQotICAgICAgICAgICAgIyBDb21taXQgdGhlIHRyYW5zYWN0aW9uIGlmIHRoZXJlIGlzIG5v IGVycm9yIGZvdW5kCi0gICAgICAgICAgICBjb25uLmV4ZWN1dGVfdm9pZCgnQ09NTUlUOycpCi0K LSAgICAgICAgcmV0dXJuIHN0YXR1cywgcmVzLCBxdWVyeV9yZXMsIF9yb3dpZAorICAgICAgICBy ZXR1cm4gc2F2ZV9jaGFuZ2VkX2RhdGEoY2hhbmdlZF9kYXRhPWNoYW5nZWRfZGF0YSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfaW5mbz1jb2x1bW5zX2luZm8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kX29iaj1zZWxmLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X3ByaW1hcnlfa2V5PWNsaWVudF9wcmlt YXJ5X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm49Y29ubikKIAog CiBjbGFzcyBWaWV3Q29tbWFuZChHcmlkQ29tbWFuZCk6CkBAIC0xMDg5LDE4ICs4NjAsODcgQEAg Y2xhc3MgUXVlcnlUb29sQ29tbWFuZChCYXNlQ29tbWFuZCwgRmV0Y2hlZFJvd1RyYWNrZXIpOgog ICAgICAgICBzZWxmLmF1dG9fcm9sbGJhY2sgPSBGYWxzZQogICAgICAgICBzZWxmLmF1dG9fY29t bWl0ID0gVHJ1ZQogCisgICAgICAgICMgQXR0cmlidXRlcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBl ZGl0IHVwZGF0YWJsZSByZXN1bHRzZWx0cworICAgICAgICBzZWxmLmlzX3VwZGF0YWJsZV9yZXN1 bHRzZXQgPSBGYWxzZQorICAgICAgICBzZWxmLnByaW1hcnlfa2V5cyA9IE5vbmUKKyAgICAgICAg c2VsZi5wa19uYW1lcyA9IE5vbmUKKwogICAgIGRlZiBnZXRfc3FsKHNlbGYsIGRlZmF1bHRfY29u bj1Ob25lKToKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBnZXRfYWxsX2NvbHVtbnNf d2l0aF9vcmRlcihzZWxmLCBkZWZhdWx0X2Nvbm49Tm9uZSk6CiAgICAgICAgIHJldHVybiBOb25l CiAKKyAgICBkZWYgZ2V0X3ByaW1hcnlfa2V5cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu cGtfbmFtZXMsIHNlbGYucHJpbWFyeV9rZXlzCisKICAgICBkZWYgY2FuX2VkaXQoc2VsZik6Ci0g ICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc2VsZi5pc191cGRhdGFibGVfcmVz dWx0c2V0CiAKICAgICBkZWYgY2FuX2ZpbHRlcihzZWxmKToKICAgICAgICAgcmV0dXJuIEZhbHNl CiAKKyAgICBkZWYgY2hlY2tfZm9yX3VwZGF0YWJsZV9yZXN1bHRzZXRfYW5kX3ByaW1hcnlfa2V5 cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQg dG8gY2hlY2sgd2hldGhlciB0aGUgbGFzdCBzdWNjZXNzZnVsIHF1ZXJ5CisgICAgICAgICAgICBw cm9kdWNlZCB1cGRhdGFibGUgcmVzdWx0cyBhbmQgc2V0cyB0aGUgbmVjZXNzYXJ5IGZsYWdzIGFu ZAorICAgICAgICAgICAgYXR0cmlidXRlcyBhY2NvcmRpbmdseQorICAgICAgICAiIiIKKyAgICAg ICAgIyBGZXRjaCB0aGUgY29ubmVjdGlvbiBvYmplY3QKKyAgICAgICAgZHJpdmVyID0gZ2V0X2Ry aXZlcihQR19ERUZBVUxUX0RSSVZFUikKKyAgICAgICAgbWFuYWdlciA9IGRyaXZlci5jb25uZWN0 aW9uX21hbmFnZXIoc2VsZi5zaWQpCisgICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24o ZGlkPXNlbGYuZGlkLCBjb25uX2lkPXNlbGYuY29ubl9pZCkKKworICAgICAgICAjIENoZWNrIHRo YXQgdGhlIHF1ZXJ5IHJlc3VsdHMgYXJlIHJlYWR5IGZpcnN0CisgICAgICAgIHN0YXR1cywgcmVz dWx0ID0gY29ubi5wb2xsKAorICAgICAgICAgICAgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2c9VHJ1 ZSwgbm9fcmVzdWx0PVRydWUpCisgICAgICAgIGlmIHN0YXR1cyAhPSBBU1lOQ19PSzoKKyAgICAg ICAgICAgIHJldHVybgorCisgICAgICAgICMgR2V0IHRoZSBwYXRoIHRvIHRoZSBzcWwgdGVtcGxh dGVzCisgICAgICAgIHNxbF9wYXRoID0gJ3NxbGVkaXRvci9zcWwvI3swfSMnLmZvcm1hdChtYW5h Z2VyLnZlcnNpb24pCisKKyAgICAgICAgc2VsZi5pc191cGRhdGFibGVfcmVzdWx0c2V0LCBzZWxm LnByaW1hcnlfa2V5cywgcGtfbmFtZXMsIHRhYmxlX29pZCA9IFwKKyAgICAgICAgICAgIGlzX3F1 ZXJ5X3Jlc3VsdHNldF91cGRhdGFibGUoY29ubiwgc3FsX3BhdGgpCisKKyAgICAgICAgIyBDcmVh dGUgcGtfbmFtZXMgYXR0cmlidXRlIGluIHRoZSByZXF1aXJlZCBmb3JtYXQKKyAgICAgICAgaWYg cGtfbmFtZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnBrX25hbWVzID0gJycKKwor ICAgICAgICAgICAgZm9yIHBrX25hbWUgaW4gcGtfbmFtZXM6CisgICAgICAgICAgICAgICAgc2Vs Zi5wa19uYW1lcyArPSBkcml2ZXIucXRJZGVudChjb25uLCBwa19uYW1lKSArICcsJworCisgICAg ICAgICAgICBpZiBzZWxmLnBrX25hbWVzICE9ICcnOgorICAgICAgICAgICAgICAgICMgUmVtb3Zl IGxhc3QgY2hhcmFjdGVyIGZyb20gdGhlIHN0cmluZworICAgICAgICAgICAgICAgIHNlbGYucGtf bmFtZXMgPSBzZWxmLnBrX25hbWVzWzotMV0KKworICAgICAgICAjIEFkZCBhdHRyaWJ1dGVzIHJl cXVpcmVkIHRvIGJlIGFibGUgdG8gdXBkYXRlIHRhYmxlIGRhdGEKKyAgICAgICAgaWYgc2VsZi5p c191cGRhdGFibGVfcmVzdWx0c2V0OgorICAgICAgICAgICAgc2VsZi5fX3NldF91cGRhdGFibGVf cmVzdWx0c2V0X2F0dHJpYnV0ZXMoc3FsX3BhdGg9c3FsX3BhdGgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9vaWQ9dGFibGVfb2lk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29ubj1jb25uKQorCisgICAgZGVmIHNhdmUoc2VsZiwKKyAgICAgICAgICAgICBjaGFuZ2VkX2Rh dGEsCisgICAgICAgICAgICAgY29sdW1uc19pbmZvLAorICAgICAgICAgICAgIGNsaWVudF9wcmlt YXJ5X2tleT0nX190ZW1wX1BLJywKKyAgICAgICAgICAgICBkZWZhdWx0X2Nvbm49Tm9uZSk6Cisg ICAgICAgIGlmIG5vdCBzZWxmLmlzX3VwZGF0YWJsZV9yZXN1bHRzZXQ6CisgICAgICAgICAgICBy ZXR1cm4gRmFsc2UsIGdldHRleHQoJ1RoZSByZXN1bHRzZXQgaXMgbm90IHVwZGF0YWJsZS4nKSwg Tm9uZSwgTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZHJpdmVyID0gZ2V0X2RyaXZl cihQR19ERUZBVUxUX0RSSVZFUikKKyAgICAgICAgICAgIGlmIGRlZmF1bHRfY29ubiBpcyBOb25l OgorICAgICAgICAgICAgICAgIG1hbmFnZXIgPSBkcml2ZXIuY29ubmVjdGlvbl9tYW5hZ2VyKHNl bGYuc2lkKQorICAgICAgICAgICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPXNl bGYuZGlkLCBjb25uX2lkPXNlbGYuY29ubl9pZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg ICAgICAgICAgY29ubiA9IGRlZmF1bHRfY29ubgorCisgICAgICAgICAgICByZXR1cm4gc2F2ZV9j aGFuZ2VkX2RhdGEoY2hhbmdlZF9kYXRhPWNoYW5nZWRfZGF0YSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb2x1bW5zX2luZm89Y29sdW1uc19pbmZvLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm49Y29ubiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb21tYW5kX29iaj1zZWxmLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNsaWVudF9wcmltYXJ5X2tleT1jbGllbnRfcHJpbWFyeV9rZXkp CisKICAgICBkZWYgc2V0X2Nvbm5lY3Rpb25faWQoc2VsZiwgY29ubl9pZCk6CiAgICAgICAgIHNl bGYuY29ubl9pZCA9IGNvbm5faWQKIApAQCAtMTEwOSwzICs5NDksMjkgQEAgY2xhc3MgUXVlcnlU b29sQ29tbWFuZChCYXNlQ29tbWFuZCwgRmV0Y2hlZFJvd1RyYWNrZXIpOgogCiAgICAgZGVmIHNl dF9hdXRvX2NvbW1pdChzZWxmLCBhdXRvX2NvbW1pdCk6CiAgICAgICAgIHNlbGYuYXV0b19jb21t aXQgPSBhdXRvX2NvbW1pdAorCisgICAgZGVmIF9fc2V0X3VwZGF0YWJsZV9yZXN1bHRzZXRfYXR0 cmlidXRlcyhzZWxmLCBzcWxfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRhYmxlX29pZCwgY29ubik6CisgICAgICAgICMgU2V0IHRlbXBsYXRlIHBh dGggZm9yIHNxbCBzY3JpcHRzIGFuZCB0aGUgdGFibGUgb2JqZWN0IGlkCisgICAgICAgIHNlbGYu c3FsX3BhdGggPSBzcWxfcGF0aAorICAgICAgICBzZWxmLm9ial9pZCA9IHRhYmxlX29pZAorCisg ICAgICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6CisgICAgICAgICAgICAjIEZldGNoIHRoZSBOYW1l c3BhY2UgTmFtZSBhbmQgb2JqZWN0IE5hbWUKKyAgICAgICAgICAgIHF1ZXJ5ID0gcmVuZGVyX3Rl bXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnNxbF9wYXRoLCAnb2JqZWN0 bmFtZS5zcWwnXSksCisgICAgICAgICAgICAgICAgb2JqX2lkPXNlbGYub2JqX2lkCisgICAgICAg ICAgICApCisKKyAgICAgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gY29ubi5leGVjdXRlX2RpY3Qo cXVlcnkpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJhaXNl IEV4Y2VwdGlvbihyZXN1bHQpCisKKyAgICAgICAgICAgIHNlbGYubnNwX25hbWUgPSByZXN1bHRb J3Jvd3MnXVswXVsnbnNwbmFtZSddCisgICAgICAgICAgICBzZWxmLm9iamVjdF9uYW1lID0gcmVz dWx0Wydyb3dzJ11bMF1bJ3JlbG5hbWUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFp c2UgRXhjZXB0aW9uKGdldHRleHQoCisgICAgICAgICAgICAgICAgJ05vdCBjb25uZWN0ZWQgdG8g c2VydmVyIG9yIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyICcKKyAgICAgICAgICAgICAgICAn aGFzIGJlZW4gY2xvc2VkLicpCisgICAgICAgICAgICApCisKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3Rvb2xzL3NxbGVkaXRvci9zdGF0aWMvanMvc3FsZWRpdG9yLmpzIGIvd2ViL3BnYWRtaW4v dG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9qcy9zcWxlZGl0b3IuanMKaW5kZXggNmFmMDk4YjQuLjNi Y2NkNDQ3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2pz L3NxbGVkaXRvci5qcworKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2pz L3NxbGVkaXRvci5qcwpAQCAtMjM3Niw2ICsyMzc2LDE4IEBAIGRlZmluZSgndG9vbHMucXVlcnl0 b29sJywgWwogICAgICAgICBlbHNlCiAgICAgICAgICAgc2VsZi5jYW5fZWRpdCA9IHRydWU7CiAK KyAgICAgICAgLyogSWYgdGhlIHF1ZXJ5IHJlc3VsdHMgYXJlIHVwZGF0YWJsZSB0aGVuIGtlZXAg dHJhY2sgb2YgbmV3bHkgYWRkZWQKKyAgICAgICAgICogcm93cworICAgICAgICAgKi8KKyAgICAg ICAgaWYgKHNlbGYuaXNfcXVlcnlfdG9vbCAmJiBzZWxmLmNhbl9lZGl0KSB7CisgICAgICAgICAg Ly8ga2VlcCB0cmFjayBvZiBuZXdseSBhZGRlZCByb3dzCisgICAgICAgICAgc2VsZi5yb3dzX3Rv X2Rpc2FibGUgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAvLyBUZW1wb3JhcmlseSBob2xkIG5l dyByb3dzIGFkZGVkCisgICAgICAgICAgc2VsZi50ZW1wX25ld19yb3dzID0gbmV3IEFycmF5KCk7 CisgICAgICAgICAgc2VsZi5oYXNfbW9yZV9yb3dzID0gZmFsc2U7CisgICAgICAgICAgc2VsZi5m ZXRjaGluZ19yb3dzID0gZmFsc2U7CisgICAgICAgIH0KKwogICAgICAgICAvKiBJZiB1c2VyIGNh biBmaWx0ZXIgdGhlIGRhdGEgdGhlbiB3ZSBzaG91bGQgZW5hYmxlZAogICAgICAgICAgKiBGaWx0 ZXIgYW5kIExpbWl0IGJ1dHRvbnMuCiAgICAgICAgICAqLwpAQCAtMjgxOCwxMiArMjgzMCwxNSBA QCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAqIHRoZSBhamF4IGNhbGwgdG8g c2F2ZSB0aGUgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSBzZXJ2ZXIuCiAgICAgICAgKiBhbmQgd2ls bCBvcGVuIHNhdmUgZmlsZSBkaWFsb2cgY29uZGl0aW9uYWxseS4KICAgICAgICAqLwotICAgICAg X3NhdmU6IGZ1bmN0aW9uKHZpZXcsIGNvbnRyb2xsZXIsIHNhdmVfYXMpIHsKKyAgICAgIF9zYXZl OiBmdW5jdGlvbih2aWV3LCBjb250cm9sbGVyLCBzYXZlX2FzPWZhbHNlKSB7CiAgICAgICAgIHZh ciBzZWxmID0gdGhpcywKICAgICAgICAgICBzYXZlX2RhdGEgPSB0cnVlOwogCi0gICAgICAgIC8v IE9wZW4gc2F2ZSBmaWxlIGRpYWxvZyBpZiBxdWVyeSB0b29sCi0gICAgICAgIGlmIChzZWxmLmlz X3F1ZXJ5X3Rvb2wpIHsKKyAgICAgICAgLy8gT3BlbiBzYXZlIGZpbGUgZGlhbG9nIGlmIHF1ZXJ5 IHRvb2wgYW5kOgorICAgICAgICAvLyAtIHJlc3VsdHMgYXJlIG5vdCBlZGl0YWJsZQorICAgICAg ICAvLyBvcgorICAgICAgICAvLyAtICdzYXZlIGFzJyBpcyBwcmVzc2VkIGluc3RlYWQgb2YgJ3Nh dmUnCisgICAgICAgIGlmIChzZWxmLmlzX3F1ZXJ5X3Rvb2wgJiYgKCFzZWxmLmNhbl9lZGl0IHx8 IHNhdmVfYXMpKSB7CiAgICAgICAgICAgdmFyIGN1cnJlbnRfZmlsZSA9IHNlbGYuZ3JpZFZpZXcu Y3VycmVudF9maWxlOwogICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChjdXJyZW50X2ZpbGUp ICYmICFzYXZlX2FzKSB7CiAgICAgICAgICAgICBzZWxmLl9zYXZlX2ZpbGVfaGFuZGxlcihjdXJy ZW50X2ZpbGUpOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBs YXRlcy9zcWxlZGl0b3Ivc3FsL2RlZmF1bHQvcHJpbWFyeV9rZXlzLnNxbCBiL3dlYi9wZ2FkbWlu L3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9yL3NxbC9kZWZhdWx0L3ByaW1hcnlf a2V5cy5zcWwKaW5kZXggNjBkMGU1NmYuLmE5NmM5MjhmIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1p bi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9zcWwvZGVmYXVsdC9wcmltYXJ5 X2tleXMuc3FsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3Fs ZWRpdG9yL3NxbC9kZWZhdWx0L3ByaW1hcnlfa2V5cy5zcWwKQEAgLTEsOCArMSw4IEBACiB7IyA9 PT09PT09PT09PT09IEZldGNoIHRoZSBwcmltYXJ5IGtleXMgZm9yIGdpdmVuIG9iamVjdCBpZCA9 PT09PT09PT09PT09ICN9CiB7JSBpZiBvYmpfaWQgJX0KLVNFTEVDVCBhdC5hdHRuYW1lLCB0eS50 eXBuYW1lCitTRUxFQ1QgYXQuYXR0bmFtZSwgYXQuYXR0bnVtLCB0eS50eXBuYW1lCiBGUk9NIHBn X2F0dHJpYnV0ZSBhdCBMRUZUIEpPSU4gcGdfdHlwZSB0eSBPTiAodHkub2lkID0gYXQuYXR0dHlw aWQpCiBXSEVSRSBhdHRyZWxpZD17e29ial9pZH19OjpvaWQgQU5EIGF0dG51bSA9IEFOWSAoCiAg ICAgKFNFTEVDVCBjb24uY29ua2V5IEZST00gcGdfY2xhc3MgcmVsIExFRlQgT1VURVIgSk9JTiBw Z19jb25zdHJhaW50IGNvbiBPTiBjb24uY29ucmVsaWQ9cmVsLm9pZAogICAgIEFORCBjb24uY29u dHlwZT0ncCcgV0hFUkUgcmVsLnJlbGtpbmQgSU4gKCdyJywncycsJ3QnKSBBTkQgcmVsLm9pZCA9 IHt7b2JqX2lkfX06Om9pZCk6Om9pZFtdKQoteyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3Fs ZWRpdG9yL3V0aWxzL2lzX3F1ZXJ5X3Jlc3VsdHNldF91cGRhdGFibGUucHkgYi93ZWIvcGdhZG1p bi90b29scy9zcWxlZGl0b3IvdXRpbHMvaXNfcXVlcnlfcmVzdWx0c2V0X3VwZGF0YWJsZS5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZWQ2MGYxZTkKLS0tIC9kZXYvbnVs bAorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdXRpbHMvaXNfcXVlcnlfcmVzdWx0 c2V0X3VwZGF0YWJsZS5weQpAQCAtMCwwICsxLDc5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwor IyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAt IDIwMTksIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyBy ZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworCisiIiIKKyAgICBDaGVjayBpZiB0aGUgcmVzdWx0LXNldCBvZiBhIHF1ZXJ5IGlzIHVwZGF0 YWJsZSwgQSByZXN1bHRzZXQgaXMKKyAgICB1cGRhdGFibGUgKGFzIG9mIHRoaXMgdmVyc2lvbikg aWY6CisgICAgICAgIC0gQWxsIGNvbHVtbnMgYmVsb25nIHRvIHRoZSBzYW1lIHRhYmxlLgorICAg ICAgICAtIEFsbCB0aGUgcHJpbWFyeSBrZXkgY29sdW1ucyBvZiB0aGUgdGFibGUgYXJlIHByZXNl bnQgaW4gdGhlIHJlc3VsdHNldAorICAgICAgICAtIE5vIGR1cGxpY2F0ZSBjb2x1bW5zCisiIiIK K2Zyb20gZmxhc2sgaW1wb3J0IHJlbmRlcl90ZW1wbGF0ZQordHJ5OgorICAgIGZyb20gY29sbGVj dGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBv cmRlcmVkZGljdCBpbXBvcnQgT3JkZXJlZERpY3QKKworCitkZWYgaXNfcXVlcnlfcmVzdWx0c2V0 X3VwZGF0YWJsZShjb25uLCBzcWxfcGF0aCk6CisgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rp b24gaXMgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgcXVlcnkKKyAg ICAgICAgcHJvZHVjZWQgdXBkYXRhYmxlIHJlc3VsdHMuCisKKyAgICAgICAgQXJnczoKKyAgICAg ICAgICAgIGNvbm46IENvbm5lY3Rpb24gb2JqZWN0LgorICAgICAgICAgICAgc3FsX3BhdGg6IHRo ZSBwYXRoIHRvIHRoZSBzcWwgdGVtcGxhdGVzLgorICAgICIiIgorICAgIGNvbHVtbnNfaW5mbyA9 IGNvbm4uZ2V0X2NvbHVtbl9pbmZvKCkKKyAgICAjIEZldGNoIHRoZSBjb2x1bW4gaW5mbworICAg IGlmIGxlbihjb2x1bW5zX2luZm8pIDwgMToKKyAgICAgICAgcmV0dXJuIEZhbHNlLCBOb25lLCBO b25lLCBOb25lCisKKyAgICAjIEZpcnN0IGNoZWNrIHRoYXQgYWxsIHRoZSBjb2x1bW5zIGJlbG9u ZyB0byBhIHNpbmdsZSB0YWJsZQorICAgIHRhYmxlX29pZCA9IGNvbHVtbnNfaW5mb1swXVsndGFi bGVfb2lkJ10KKyAgICBjb2x1bW5fbnVtYmVycyA9IFtdCisgICAgZm9yIGNvbHVtbiBpbiBjb2x1 bW5zX2luZm86CisgICAgICAgIGlmIGNvbHVtblsndGFibGVfb2lkJ10gIT0gdGFibGVfb2lkOgor ICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBOb25lLCBOb25lLCBOb25lCisgICAgICAgIGVsc2U6 CisgICAgICAgICAgICBjb2x1bW5fbnVtYmVycy5hcHBlbmQoY29sdW1uWyd0YWJsZV9jb2x1bW4n XSkKKworICAgICMgQ2hlY2sgZm9yIGR1cGxpY2F0ZSBjb2x1bW5zCisgICAgaXNfZHVwbGljYXRl X2NvbHVtbnMgPSBsZW4oY29sdW1uX251bWJlcnMpICE9IGxlbihzZXQoY29sdW1uX251bWJlcnMp KQorICAgIGlmIGlzX2R1cGxpY2F0ZV9jb2x1bW5zOgorICAgICAgICByZXR1cm4gRmFsc2UsIE5v bmUsIE5vbmUsIE5vbmUKKworICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6CisgICAgICAgICMgVGhl biBjaGVjayB0aGF0IGFsbCB0aGUgcHJpbWFyeSBrZXlzIG9mIHRoZSB0YWJsZSBhcmUgcHJlc2Vu dAorICAgICAgICBxdWVyeSA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2lu KFtzcWxfcGF0aCwgJ3ByaW1hcnlfa2V5cy5zcWwnXSksCisgICAgICAgICAgICBvYmpfaWQ9dGFi bGVfb2lkCisgICAgICAgICkKKyAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLmV4ZWN1dGVf ZGljdChxdWVyeSkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBG YWxzZSwgTm9uZSwgTm9uZSwgTm9uZQorCisgICAgICAgIHByaW1hcnlfa2V5c19jb2x1bW5fbnVt YmVycyA9IFtdCisgICAgICAgIHByaW1hcnlfa2V5cyA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAg cGtfbmFtZXMgPSBbXQorCisgICAgICAgIGZvciByb3cgaW4gcmVzdWx0Wydyb3dzJ106CisgICAg ICAgICAgICBwcmltYXJ5X2tleXNbcm93WydhdHRuYW1lJ11dID0gcm93Wyd0eXBuYW1lJ10KKyAg ICAgICAgICAgIHByaW1hcnlfa2V5c19jb2x1bW5fbnVtYmVycy5hcHBlbmQocm93WydhdHRudW0n XSkKKyAgICAgICAgICAgIHBrX25hbWVzLmFwcGVuZChyb3dbJ2F0dG5hbWUnXSkKKworICAgICAg ICBhbGxfcHJpbWFyeV9rZXlzX2V4aXN0ID0gYWxsKGVsZW0gaW4gY29sdW1uX251bWJlcnMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZWxlbSBpbiBwcmltYXJ5X2tl eXNfY29sdW1uX251bWJlcnMpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZhbHNlLCBOb25l LCBOb25lLCBOb25lCisKKyAgICBpZiBhbGxfcHJpbWFyeV9rZXlzX2V4aXN0OgorICAgICAgICBy ZXR1cm4gVHJ1ZSwgcHJpbWFyeV9rZXlzLCBwa19uYW1lcywgdGFibGVfb2lkCisgICAgZWxzZToK KyAgICAgICAgcmV0dXJuIEZhbHNlLCBOb25lLCBOb25lLCBOb25lCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi90b29scy9zcWxlZGl0b3IvdXRpbHMvc2F2ZV9jaGFuZ2VkX2RhdGEucHkgYi93ZWIv cGdhZG1pbi90b29scy9zcWxlZGl0b3IvdXRpbHMvc2F2ZV9jaGFuZ2VkX2RhdGEucHkKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmYyMmM1ZGEzCi0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3V0aWxzL3NhdmVfY2hhbmdlZF9kYXRhLnB5 CkBAIC0wLDAgKzEsMjY4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQ b3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTksIFRoZSBwZ0Fk bWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0 aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmcm9tIGZsYXNr IGltcG9ydCByZW5kZXJfdGVtcGxhdGUKK3RyeToKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9y dCBPcmRlcmVkRGljdAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gb3JkZXJlZGRpY3Qg aW1wb3J0IE9yZGVyZWREaWN0CisKKworZGVmIHNhdmVfY2hhbmdlZF9kYXRhKGNoYW5nZWRfZGF0 YSwgY29sdW1uc19pbmZvLCBjb25uLCBjb21tYW5kX29iaiwKKyAgICAgICAgICAgICAgICAgICAg ICBjbGllbnRfcHJpbWFyeV9rZXkpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNl ZCB0byBzYXZlIHRoZSBkYXRhIGludG8gdGhlIGRhdGFiYXNlLgorICAgIERlcGVuZGluZyBvbiBj b25kaXRpb24gaXQgd2lsbCBlaXRoZXIgdXBkYXRlIG9yIGluc2VydCB0aGUKKyAgICBuZXcgcm93 IGludG8gdGhlIGRhdGFiYXNlLgorCisgICAgQXJnczoKKyAgICAgICAgY2hhbmdlZF9kYXRhOiBD b250YWlucyBkYXRhIHRvIGJlIHNhdmVkCisgICAgICAgIGNvbW1hbmRfb2JqOiBUaGUgdHJhbnNh Y3Rpb24gb2JqZWN0IChjb21tYW5kX29iaiBvciB0cmFuc19vYmopCisgICAgICAgIGNvbm46IFRo ZSBjb25uZWN0aW9uIG9iamVjdAorICAgICAgICBjb2x1bW5zX2luZm86CisgICAgICAgIGNsaWVu dF9wcmltYXJ5X2tleToKKyAgICAiIiIKKyAgICBzdGF0dXMgPSBGYWxzZQorICAgIHJlcyA9IE5v bmUKKyAgICBxdWVyeV9yZXMgPSBkaWN0KCkKKyAgICBjb3VudCA9IDAKKyAgICBsaXN0X29mX3Jv d2lkID0gW10KKyAgICBvcGVyYXRpb25zID0gKCdhZGRlZCcsICd1cGRhdGVkJywgJ2RlbGV0ZWQn KQorICAgIGxpc3Rfb2Zfc3FsID0ge30KKyAgICBfcm93aWQgPSBOb25lCisKKyAgICBpZiBjb25u LmNvbm5lY3RlZCgpOgorCisgICAgICAgICMgU3RhcnQgdGhlIHRyYW5zYWN0aW9uCisgICAgICAg IGNvbm4uZXhlY3V0ZV92b2lkKCdCRUdJTjsnKQorCisgICAgICAgICMgSXRlcmF0ZSB0b3RhbCBu dW1iZXIgb2YgcmVjb3JkcyB0byBiZSB1cGRhdGVkL2luc2VydGVkCisgICAgICAgIGZvciBvZl90 eXBlIGluIGNoYW5nZWRfZGF0YToKKyAgICAgICAgICAgICMgTm8gbmVlZCB0byBnbyBmdXJ0aGVy IGlmIGl0cyBub3QgYWRkL3VwZGF0ZS9kZWxldGUgb3BlcmF0aW9uCisgICAgICAgICAgICBpZiBv Zl90eXBlIG5vdCBpbiBvcGVyYXRpb25zOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg ICAgICAgICAjIGlmIG5vIGRhdGEgdG8gYmUgc2F2ZSB0aGVuIGNvbnRpbnVlCisgICAgICAgICAg ICBpZiBsZW4oY2hhbmdlZF9kYXRhW29mX3R5cGVdKSA8IDE6CisgICAgICAgICAgICAgICAgY29u dGludWUKKworICAgICAgICAgICAgY29sdW1uX3R5cGUgPSB7fQorICAgICAgICAgICAgY29sdW1u X2RhdGEgPSB7fQorICAgICAgICAgICAgZm9yIGVhY2hfY29sIGluIGNvbHVtbnNfaW5mbzoKKyAg ICAgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfaW5mb1tlYWNo X2NvbF1bJ25vdF9udWxsJ10gYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBjb2x1bW5zX2lu Zm9bZWFjaF9jb2xdWydoYXNfZGVmYXVsdF92YWwnXQorICAgICAgICAgICAgICAgICk6CisgICAg ICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRhW2VhY2hfY29sXSA9IE5vbmUKKyAgICAgICAgICAg ICAgICAgICAgY29sdW1uX3R5cGVbZWFjaF9jb2xdID0gXAorICAgICAgICAgICAgICAgICAgICAg ICAgY29sdW1uc19pbmZvW2VhY2hfY29sXVsndHlwZV9uYW1lJ10KKyAgICAgICAgICAgICAgICBl bHNlOgorICAgICAgICAgICAgICAgICAgICBjb2x1bW5fdHlwZVtlYWNoX2NvbF0gPSBcCisgICAg ICAgICAgICAgICAgICAgICAgICBjb2x1bW5zX2luZm9bZWFjaF9jb2xdWyd0eXBlX25hbWUnXQor CisgICAgICAgICAgICAjIEZvciBuZXdseSBhZGRlZCByb3dzCisgICAgICAgICAgICBpZiBvZl90 eXBlID09ICdhZGRlZCc6CisgICAgICAgICAgICAgICAgIyBQeXRob24gZGljdCBkb2VzIG5vdCBo b25vdXIgdGhlIGluc2VydGVkIGl0ZW0gb3JkZXIKKyAgICAgICAgICAgICAgICAjIFNvIHRvIGlu c2VydCBkYXRhIGluIHRoZSBvcmRlciwgd2UgbmVlZCB0byBtYWtlIG9yZGVyZWQKKyAgICAgICAg ICAgICAgICAjIGxpc3Qgb2YgYWRkZWQgaW5kZXggV2UgZG9uJ3QgbmVlZCB0aGlzIG1lY2hhbmlz bSBpbgorICAgICAgICAgICAgICAgICMgdXBkYXRlZC9kZWxldGVkIHJvd3MgYXMgaXQgZG9lcyBu b3QgbWF0dGVyIGluCisgICAgICAgICAgICAgICAgIyB0aG9zZSBvcGVyYXRpb25zCisgICAgICAg ICAgICAgICAgYWRkZWRfaW5kZXggPSBPcmRlcmVkRGljdCgKKyAgICAgICAgICAgICAgICAgICAg c29ydGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZF9kYXRhWydhZGRlZF9pbmRl eCddLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICBrZXk9bGFtYmRhIHg6IGludCh4 WzBdKQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKQorICAgICAgICAg ICAgICAgIGxpc3Rfb2Zfc3FsW29mX3R5cGVdID0gW10KKworICAgICAgICAgICAgICAgICMgV2hl biBuZXcgcm93cyBhcmUgYWRkZWQsIG9ubHkgY2hhbmdlZCBjb2x1bW5zIGRhdGEgaXMKKyAgICAg ICAgICAgICAgICAjIHNlbnQgZnJvbSBjbGllbnQgc2lkZS4gQnV0IGlmIGNvbHVtbiBpcyBub3Rf bnVsbCBhbmQgaGFzCisgICAgICAgICAgICAgICAgIyBub19kZWZhdWx0X3ZhbHVlLCBzZXQgY29s dW1uIHRvIGJsYW5rLCBpbnN0ZWFkCisgICAgICAgICAgICAgICAgIyBvZiBub3QgbnVsbCB3aGlj aCBpcyBzZXQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBjb2x1bW5fZGF0YSA9IHt9Cisg ICAgICAgICAgICAgICAgcGtfbmFtZXMsIHByaW1hcnlfa2V5cyA9IGNvbW1hbmRfb2JqLmdldF9w cmltYXJ5X2tleXMoKQorICAgICAgICAgICAgICAgIGhhc19vaWRzID0gJ29pZCcgaW4gY29sdW1u X3R5cGUKKworICAgICAgICAgICAgICAgIGZvciBlYWNoX3JvdyBpbiBhZGRlZF9pbmRleDoKKyAg ICAgICAgICAgICAgICAgICAgIyBHZXQgdGhlIHJvdyBpbmRleCB0byBtYXRjaCB3aXRoIHRoZSBh ZGRlZCByb3dzCisgICAgICAgICAgICAgICAgICAgICMgZGljdCBrZXkKKyAgICAgICAgICAgICAg ICAgICAgdG1wX3Jvd19pbmRleCA9IGFkZGVkX2luZGV4W2VhY2hfcm93XQorICAgICAgICAgICAg ICAgICAgICBkYXRhID0gY2hhbmdlZF9kYXRhW29mX3R5cGVdW3RtcF9yb3dfaW5kZXhdWydkYXRh J10KKyAgICAgICAgICAgICAgICAgICAgIyBSZW1vdmUgb3VyIHVuaXF1ZSB0cmFja2luZyBrZXkK KyAgICAgICAgICAgICAgICAgICAgZGF0YS5wb3AoY2xpZW50X3ByaW1hcnlfa2V5LCBOb25lKQor ICAgICAgICAgICAgICAgICAgICBkYXRhLnBvcCgnaXNfcm93X2NvcGllZCcsIE5vbmUpCisgICAg ICAgICAgICAgICAgICAgIGxpc3Rfb2Zfcm93aWQuYXBwZW5kKGRhdGEuZ2V0KGNsaWVudF9wcmlt YXJ5X2tleSkpCisKKyAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUgY29sdW1ucyB2YWx1ZSB3 aXRoIGNvbHVtbnMgaGF2aW5nCisgICAgICAgICAgICAgICAgICAgICMgbm90X251bGw9RmFsc2Ug YW5kIGhhcyBubyBkZWZhdWx0IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRh LnVwZGF0ZShkYXRhKQorCisgICAgICAgICAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0 ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtjb21tYW5kX29iai5zcWxfcGF0 aCwgJ2luc2VydC5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2JlX3Nh dmVkPWNvbHVtbl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlzPU5v bmUsCisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfbmFtZT1jb21tYW5kX29iai5vYmpl Y3RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zcF9uYW1lPWNvbW1hbmRfb2JqLm5z cF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90eXBlPWNvbHVtbl90eXBlLAor ICAgICAgICAgICAgICAgICAgICAgICAgcGtfbmFtZXM9cGtfbmFtZXMsCisgICAgICAgICAgICAg ICAgICAgICAgICBoYXNfb2lkcz1oYXNfb2lkcworICAgICAgICAgICAgICAgICAgICApCisKKyAg ICAgICAgICAgICAgICAgICAgc2VsZWN0X3NxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAg ICAgICAgICAgICAgICAgICIvIi5qb2luKFtjb21tYW5kX29iai5zcWxfcGF0aCwgJ3NlbGVjdC5z cWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfbmFtZT1jb21tYW5kX29iai5v YmplY3RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zcF9uYW1lPWNvbW1hbmRfb2Jq Lm5zcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlzPXByaW1hcnlf a2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19vaWRzPWhhc19vaWRzCisgICAgICAg ICAgICAgICAgICAgICkKKworICAgICAgICAgICAgICAgICAgICBsaXN0X29mX3NxbFtvZl90eXBl XS5hcHBlbmQoeworICAgICAgICAgICAgICAgICAgICAgICAgJ3NxbCc6IHNxbCwgJ2RhdGEnOiBk YXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2NsaWVudF9yb3cnOiB0bXBfcm93X2luZGV4 LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbGVjdF9zcWwnOiBzZWxlY3Rfc3FsCisgICAg ICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgICAgICMgUmVzZXQgY29sdW1uIGRh dGEKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uX2RhdGEgPSB7fQorCisgICAgICAgICAgICAj IEZvciB1cGRhdGVkIHJvd3MKKyAgICAgICAgICAgIGVsaWYgb2ZfdHlwZSA9PSAndXBkYXRlZCc6 CisgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2ZfdHlwZV0gPSBbXQorICAgICAgICAgICAg ICAgIGZvciBlYWNoX3JvdyBpbiBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV06CisgICAgICAgICAgICAg ICAgICAgIGRhdGEgPSBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3ddWydkYXRhJ10KKyAg ICAgICAgICAgICAgICAgICAgcGsgPSBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3ddWydw cmltYXJ5X2tleXMnXQorICAgICAgICAgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUo CisgICAgICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbY29tbWFuZF9vYmouc3FsX3BhdGgs ICd1cGRhdGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90b19iZV9zYXZl ZD1kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlzPXBrLAorICAgICAg ICAgICAgICAgICAgICAgICAgb2JqZWN0X25hbWU9Y29tbWFuZF9vYmoub2JqZWN0X25hbWUsCisg ICAgICAgICAgICAgICAgICAgICAgICBuc3BfbmFtZT1jb21tYW5kX29iai5uc3BfbmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZT1jb2x1bW5fdHlwZQorICAgICAgICAgICAg ICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3FsW29mX3R5cGVdLmFwcGVu ZCh7J3NxbCc6IHNxbCwgJ2RhdGEnOiBkYXRhfSkKKyAgICAgICAgICAgICAgICAgICAgbGlzdF9v Zl9yb3dpZC5hcHBlbmQoZGF0YS5nZXQoY2xpZW50X3ByaW1hcnlfa2V5KSkKKworICAgICAgICAg ICAgIyBGb3IgZGVsZXRlZCByb3dzCisgICAgICAgICAgICBlbGlmIG9mX3R5cGUgPT0gJ2RlbGV0 ZWQnOgorICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3FsW29mX3R5cGVdID0gW10KKyAgICAgICAg ICAgICAgICBpc19maXJzdCA9IFRydWUKKyAgICAgICAgICAgICAgICByb3dzX3RvX2RlbGV0ZSA9 IFtdCisgICAgICAgICAgICAgICAga2V5cyA9IE5vbmUKKyAgICAgICAgICAgICAgICBub19vZl9r ZXlzID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBlYWNoX3JvdyBpbiBjaGFuZ2VkX2RhdGFb b2ZfdHlwZV06CisgICAgICAgICAgICAgICAgICAgIHJvd3NfdG9fZGVsZXRlLmFwcGVuZChjaGFu Z2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3ddKQorICAgICAgICAgICAgICAgICAgICAjIEZldGNo IHRoZSBrZXlzIGZvciBTUUwgZ2VuZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiBpc19m aXJzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBjb3ZlcnQgZGljdF9r ZXlzIHRvIG5vcm1hbCBsaXN0IGluCisgICAgICAgICAgICAgICAgICAgICAgICAjIFB5dGhvbjMK KyAgICAgICAgICAgICAgICAgICAgICAgICMgSW4gUHl0aG9uMiwgaXQncyBhbHJlYWR5IGEgbGlz dCAmIFdlIHdpbGwgYWxzbworICAgICAgICAgICAgICAgICAgICAgICAgIyBmZXRjaCBjb2x1bW4g bmFtZXMgdXNpbmcgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSBsaXN0KAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jv d10ua2V5cygpCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAg ICAgICBub19vZl9rZXlzID0gbGVuKGtleXMpCisgICAgICAgICAgICAgICAgICAgICAgICBpc19m aXJzdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgIyBNYXAgaW5kZXggd2l0aCBjb2x1bW4gbmFt ZSBmb3IgZWFjaCByb3cKKyAgICAgICAgICAgICAgICBmb3Igcm93IGluIHJvd3NfdG9fZGVsZXRl OgorICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiByb3cuaXRlbXMoKToKKyAgICAgICAg ICAgICAgICAgICAgICAgICMgU2V0IHByaW1hcnkga2V5IHdpdGggbGFiZWwgJiBkZWxldGUgaW5k ZXggYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbWFwcGVkIGtleQorICAgICAgICAg ICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjaGFu Z2VkX2RhdGFbJ2NvbHVtbnMnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBbaW50KGspXVsnbmFtZSddXSA9IHYKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4 Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisg ICAgICAgICAgICAgICAgICAgICAgICBkZWwgcm93W2tdCisKKyAgICAgICAgICAgICAgICBzcWwg PSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtjb21tYW5k X29iai5zcWxfcGF0aCwgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgIGRhdGE9 cm93c190b19kZWxldGUsCisgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5X2xhYmVscz1r ZXlzLAorICAgICAgICAgICAgICAgICAgICBub19vZl9rZXlzPW5vX29mX2tleXMsCisgICAgICAg ICAgICAgICAgICAgIG9iamVjdF9uYW1lPWNvbW1hbmRfb2JqLm9iamVjdF9uYW1lLAorICAgICAg ICAgICAgICAgICAgICBuc3BfbmFtZT1jb21tYW5kX29iai5uc3BfbmFtZQorICAgICAgICAgICAg ICAgICkKKyAgICAgICAgICAgICAgICBsaXN0X29mX3NxbFtvZl90eXBlXS5hcHBlbmQoeydzcWwn OiBzcWwsICdkYXRhJzoge319KQorCisgICAgICAgIGZvciBvcHIsIHNxbHMgaW4gbGlzdF9vZl9z cWwuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHNxbHM6CisgICAgICAgICAgICAg ICAgaWYgaXRlbVsnc3FsJ106CisgICAgICAgICAgICAgICAgICAgIHJvd19hZGRlZCA9IE5vbmUK KworICAgICAgICAgICAgICAgICAgICAjIEZldGNoIG9pZHMvcHJpbWFyeSBrZXlzCisgICAgICAg ICAgICAgICAgICAgIGlmICdzZWxlY3Rfc3FsJyBpbiBpdGVtIGFuZCBpdGVtWydzZWxlY3Rfc3Fs J106CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV9k aWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bJ3NxbCddLCBpdGVtWydkYXRh J10pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBz dGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV92b2lkKAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGl0ZW1bJ3NxbCddLCBpdGVtWydkYXRhJ10pCisKKyAgICAgICAgICAgICAgICAgICAgaWYg bm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4uZXhlY3V0ZV92b2lkKCdS T0xMQkFDSzsnKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSByb2xsIGJhY2tlZCBl dmVyeSB0aGluZyB0aGVuIHVwZGF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbWVz c2FnZSBmb3IgZWFjaCBzcWwgcXVlcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdmFs IGluIHF1ZXJ5X3JlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBxdWVyeV9yZXNb dmFsXVsnc3RhdHVzJ106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3Jl c1t2YWxdWydyZXN1bHQnXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdUcmFuc2FjdGlvbiBST0xMQkFDSycKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBs aXN0IGlzIGVtcHR5IHNldCByb3dpZCB0byAxCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGlzdF9vZl9yb3dpZDoKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX3Jvd2lkID0gbGlzdF9vZl9yb3dpZFtjb3VudF0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfcm93aWQgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0 aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yb3dpZCA9IDAKKworICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywgcmVzLCBxdWVyeV9yZXMsIF9yb3dpZAorCisg ICAgICAgICAgICAgICAgICAgICMgU2VsZWN0IGFkZGVkIHJvdyBmcm9tIHRoZSB0YWJsZQorICAg ICAgICAgICAgICAgICAgICBpZiAnc2VsZWN0X3NxbCcgaW4gaXRlbToKKyAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXR1cywgc2VsX3JlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0KAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGl0ZW1bJ3NlbGVjdF9zcWwnXSwgcmVzWydyb3dzJ11bMF0pCisK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29ubi5leGVjdXRlX3ZvaWQoJ1JPTExCQUNLOycpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBJZiB3ZSByb2xsIGJhY2tlZCBldmVyeSB0aGluZyB0aGVuIHVwZGF0 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIG1lc3NhZ2UgZm9yIGVhY2ggc3Fs IHF1ZXJ5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2YWwgaW4gcXVlcnlfcmVz OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBxdWVyeV9yZXNbdmFsXVsnc3Rh dHVzJ106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXNbdmFs XVsncmVzdWx0J10gPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J1RyYW5zYWN0aW9uIFJPTExCQUNLJworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJ ZiBsaXN0IGlzIGVtcHR5IHNldCByb3dpZCB0byAxCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaXN0X29mX3Jvd2lk OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jvd2lkID0gbGlzdF9vZl9y b3dpZFtjb3VudF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yb3dpZCA9IDEKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfcm93aWQgPSAwCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g c3RhdHVzLCBzZWxfcmVzLCBxdWVyeV9yZXMsIF9yb3dpZAorCisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAncm93cycgaW4gc2VsX3JlcyBhbmQgbGVuKHNlbF9yZXNbJ3Jvd3MnXSkgPiAwOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd19hZGRlZCA9IHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaXRlbVsnY2xpZW50X3JvdyddOiBzZWxfcmVzWydyb3dzJ11bMF19 CisKKyAgICAgICAgICAgICAgICAgICAgcm93c19hZmZlY3RlZCA9IGNvbm4ucm93c19hZmZlY3Rl ZCgpCisKKyAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgcmVzdWx0IG9mIGVhY2ggcXVl cnkgaW4gZGljdGlvbmFyeQorICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXNbY291bnRdID0g eworICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1cywKKyAgICAgICAgICAg ICAgICAgICAgICAgICdyZXN1bHQnOiBOb25lIGlmIHJvd19hZGRlZCBlbHNlIHJlcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICdzcWwnOiBzcWwsICdyb3dzX2FmZmVjdGVkJzogcm93c19hZmZl Y3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdyb3dfYWRkZWQnOiByb3dfYWRkZWQKKyAg ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKwor ICAgICAgICAjIENvbW1pdCB0aGUgdHJhbnNhY3Rpb24gaWYgdGhlcmUgaXMgbm8gZXJyb3IgZm91 bmQKKyAgICAgICAgY29ubi5leGVjdXRlX3ZvaWQoJ0NPTU1JVDsnKQorCisgICAgcmV0dXJuIHN0 YXR1cywgcmVzLCBxdWVyeV9yZXMsIF9yb3dpZApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9v bHMvc3FsZWRpdG9yL3V0aWxzL3N0YXJ0X3J1bm5pbmdfcXVlcnkucHkgYi93ZWIvcGdhZG1pbi90 b29scy9zcWxlZGl0b3IvdXRpbHMvc3RhcnRfcnVubmluZ19xdWVyeS5weQppbmRleCBhNTM5OTc3 NC4uZWNlMTFmOWMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci91dGls cy9zdGFydF9ydW5uaW5nX3F1ZXJ5LnB5CisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRv ci91dGlscy9zdGFydF9ydW5uaW5nX3F1ZXJ5LnB5CkBAIC00NSw2ICs0NSw5IEBAIGNsYXNzIFN0 YXJ0UnVubmluZ1F1ZXJ5OgogICAgICAgICBpZiB0eXBlKHNlc3Npb25fb2JqKSBpcyBSZXNwb25z ZToKICAgICAgICAgICAgIHJldHVybiBzZXNzaW9uX29iagogCisgICAgICAgICMgUmVtb3ZlIGFu eSBleGlzdGluZyBwcmltYXJ5IGtleXMgaW4gc2Vzc2lvbl9vYmoKKyAgICAgICAgc2Vzc2lvbl9v YmoucG9wKCdwcmltYXJ5X2tleXMnLCBOb25lKQorCiAgICAgICAgIHRyYW5zYWN0aW9uX29iamVj dCA9IHBpY2tsZS5sb2FkcyhzZXNzaW9uX29ialsnY29tbWFuZF9vYmonXSkKICAgICAgICAgY2Fu X2VkaXQgPSBGYWxzZQogICAgICAgICBjYW5fZmlsdGVyID0gRmFsc2UK --000000000000bbdcaa058b572668--