Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kregl-0008Gq-1d for pgadmin-hackers@arkaria.postgresql.org; Tue, 22 Dec 2020 10:14:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kregk-00081R-0L for pgadmin-hackers@arkaria.postgresql.org; Tue, 22 Dec 2020 10:14:42 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kregj-00081K-MZ for pgadmin-hackers@lists.postgresql.org; Tue, 22 Dec 2020 10:14:41 +0000 Received: from mail-lf1-x131.google.com ([2a00:1450:4864:20::131]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1kregc-00042u-Dx for pgadmin-hackers@postgresql.org; Tue, 22 Dec 2020 10:14:41 +0000 Received: by mail-lf1-x131.google.com with SMTP id o19so30760931lfo.1 for ; Tue, 22 Dec 2020 02:14:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=kY4+wiMq6ZHyhuJiTPsfQ5fCvZWslIgaVgr6M+abDS0=; b=qPexhdgrExC6hh6fDU3WBPxJmtMN8da3mX+XuXXK4DGVpW5IVdVZOLirxoQs9fPwDK q8MyMbYUAYag7fyoMhk3Q9jnZRDfhH+pz46YPq0gwA9kYWfjYj/RjABtGDxVeAqhQyfw rwgP9tux31y7gYqtlP4fhag/AkZ8oYGW+0UADQw7w8AGjmZRE2c7DrAg/dCLPoTWBb2v RH65bejEmv9iue/+mfR9PNCfc7RVOcZuN2AIoK2EwsDGjQDaFWhAv9PbrmbOzoqVGL6t C2w2RTamGltrWZwQI69CJFHijD21+pvIeo+6g7KHuOzJFgKQvTrgx/Yz9V843PtRR+Gu LdfA== 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; bh=kY4+wiMq6ZHyhuJiTPsfQ5fCvZWslIgaVgr6M+abDS0=; b=FK9mz2gNJMwtAnFMwNfvdjEZ1NYogMP2po/e+RIN2H8sM4DLLlzSWdMMUmCi/dnBGw d5xenEHDSKMKtdGXRhW4Zxgwj9drKGiwTD10MwhfCZdo8ugzKutcyp+oBow0jKZjK5kB m5wLhWiibKMsDNEA+JxO9Ywy5C3aXHCb0RxTCsy2ESHRDaT9LNFKV+x2Of2p+32cam+l FYpOZ8/5l/3pJzxzQHOc3dg1q3YfnN3y4e2DjvLah1YpJK1pnTtAz63bJ4coTvo7HENi yqoswnKPXb3Kuduk6bZjiUfWo1t3AbKOsmKuB7xB28aL1fVz4aeuTgL6FdQ405TRt091 3oZQ== X-Gm-Message-State: AOAM532TPKpUWnDzCw7Lxszk0/IDIK7+kQkneRIBcU8xifj+RJTUB3ir otJUZKbdEUoD2j0pMpnJQJIZ2foQEAYDR5BxBb+DdiAzZHxfAfmJQxbnHZUoV/LuVxAbpIOLyV2 SxcqXCs2a8FiYQ+UGyXzP6vPhEELf0FmkhL71NMqKouCAyOVT+dYYmwH87wsKYlaiQiHuR0Cs5H mNaPceGg+3UzBHlhpb0NsDrclmykvKJ2t5inZcxp22+UI9ms60UPYdvFumeRqR7bo= X-Google-Smtp-Source: ABdhPJxJ+MMacFVsmptg1jsu4jrdM687iTRHG88a+C+d6A4VDD3T3mbr1EvlPmdIw9ab8FJi5AIdnwKjuC+92eu0bnw= X-Received: by 2002:a05:651c:1254:: with SMTP id h20mr9545220ljh.211.1608632072706; Tue, 22 Dec 2020 02:14:32 -0800 (PST) MIME-Version: 1.0 From: Khushboo Vashi Date: Tue, 22 Dec 2020 15:44:29 +0530 Message-ID: Subject: [pgAdmin4][Patch] - RM 5457 - Kerberos Authentication - Phase 1 To: pgadmin-hackers Content-Type: multipart/mixed; boundary="00000000000045254a05b70ad7be" X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --00000000000045254a05b70ad7be Content-Type: multipart/alternative; boundary="00000000000045254305b70ad7bc" --00000000000045254305b70ad7bc Content-Type: text/plain; charset="UTF-8" Hi, Please find the attached patch to support Kerberos Authentication in pgAdmin RM 5457. The patch introduces a new pluggable option for Kerberos authentication, using SPNEGO to forward kerberos tickets through a browser which will bypass the login page entirely if the Kerberos Authentication succeeds. The complete setup of the Kerberos Server + pgAdmin Server + Client is documented in a separate file and attached. This patch also includes the small fix related to logging #5829 Thanks, Khushboo --00000000000045254305b70ad7bc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Please find the attached patch to s= upport Kerberos Authentication in pgAdmin RM 5457.

The patch introduces a new pluggable option for Kerberos authentication, u= sing=C2=A0SPNEGO=C2=A0to forward kerberos tickets through a browser which w= ill bypass the login page entirely if the Kerberos Authentication succeeds.=

The complete setup of the Kerberos Server=C2=A0+ = pgAdmin Server=C2=A0+ Client is documented in a separate file and attached.=

This patch also includes the small fix related to= logging #5829

Thanks,
Khushboo
--00000000000045254305b70ad7bc-- --00000000000045254a05b70ad7be Content-Type: application/octet-stream; name="RM_5457.patch" Content-Disposition: attachment; filename="RM_5457.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kizty3cr0 ZGlmZiAtLWdpdCBhL3JlcXVpcmVtZW50cy50eHQgYi9yZXF1aXJlbWVudHMudHh0CmluZGV4IDBm ZTljODhiZC4uNDY3NWEwYjk0IDEwMDY0NAotLS0gYS9yZXF1aXJlbWVudHMudHh0CisrKyBiL3Jl cXVpcmVtZW50cy50eHQKQEAgLTQyLDMgKzQyLDQgQEAgYmNyeXB0PD0zLjEuNzsKIGNyeXB0b2dy YXBoeTw9My4wOwogc3NodHVubmVsPj0wLjEuNQogbGRhcDM+PTIuNS4xCitnc3NhcGk+PTEuNi4x MQpkaWZmIC0tZ2l0IGEvd2ViL2NvbmZpZy5weSBiL3dlYi9jb25maWcucHkKaW5kZXggMDg2MDgz YTUyLi5iOGIzNzE0YWIgMTAwNjQ0Ci0tLSBhL3dlYi9jb25maWcucHkKKysrIGIvd2ViL2NvbmZp Zy5weQpAQCAtNTM1LDcgKzUzNSw3IEBAIEVOSEFOQ0VEX0NPT0tJRV9QUk9URUNUSU9OID0gVHJ1 ZQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogIyBEZWZhdWx0IHNldHRpbmcgaXMgaW50ZXJuYWwKLSMg RXh0ZXJuYWwgU3VwcG9ydGVkIFNvdXJjZXM6IGxkYXAKKyMgRXh0ZXJuYWwgU3VwcG9ydGVkIFNv dXJjZXM6IGxkYXAsIGtlcmJlcm9zCiAjIE11bHRpcGxlIGF1dGhlbnRpY2F0aW9uIGNhbiBiZSBh Y2hpZXZlZCBieSBzZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvCiAjIFsnbGRhcCcsICdpbnRlcm5h bCddLiBwZ0FkbWluIHdpbGwgYXV0aGVudGljYXRlIHRoZSB1c2VyIHdpdGggbGRhcCBmaXJzdCwK ICMgaW4gY2FzZSBvZiBmYWlsdXJlIGludGVybmFsIGF1dGhlbnRpY2F0aW9uIHdpbGwgYmUgZG9u ZS4KQEAgLTYxOCw2ICs2MTgsMjYgQEAgTERBUF9DQV9DRVJUX0ZJTEUgPSAnJwogTERBUF9DRVJU X0ZJTEUgPSAnJwogTERBUF9LRVlfRklMRSA9ICcnCiAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg S2VyYmVyb3MgQ29uZmlndXJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworS1JCX0FQUF9IT1NU X05BTUUgPSBERUZBVUxUX1NFUlZFUgorCisjIElmIHRoZSBkZWZhdWx0X2tleXRhYl9uYW1lIGlz IG5vdCBzZXQgaW4ga3JiNS5jb25mIG9yCisjIHRoZSBLUkJfS1ROQU1FIGVudmlyb25tZW50IHZh cmlhYmxlIGlzIG5vdCBzZXQgdGhlbiwgZXhwbGljaXRseSBzZXQKKyMgdGhlIEtleXRhYiBmaWxl CisKK0tSQl9LVE5BTUUgPSAnPEtSQjVfS0VZVEFCX0ZJTEU+JworCisjIEFmdGVyIGtlcmJlcm9z IGF1dGhlbnRpY2F0aW9uLCB1c2VyIHdpbGwgYmUgYWRkZWQgaW50byB0aGUgU1FMaXRlIGRhdGFi YXNlCisjIGF1dG9tYXRpY2FsbHksIGlmIHNldCB0byBUcnVlLgorIyBTZXQgaXQgdG8gRmFsc2Us IGlmIHVzZXIgc2hvdWxkIG5vdCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LAorIyBpbiB0aGlzIGNh c2UgQWRtaW4gaGFzIHRvIGFkZCB0aGUgdXNlciBtYW51YWxseSBpbiB0aGUgU1FMaXRlIGRhdGFi YXNlLgorCitLUkJfQVVUT19DUkVBVEVfVVNFUiA9IFRydWUKKwogIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK ICMgTG9jYWwgY29uZmlnIHNldHRpbmdzCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEv d2ViL3BnQWRtaW40LnB5IGIvd2ViL3BnQWRtaW40LnB5CmluZGV4IDhlMGViOTlkMy4uNTU4Njg3 NWRmIDEwMDY0NAotLS0gYS93ZWIvcGdBZG1pbjQucHkKKysrIGIvd2ViL3BnQWRtaW40LnB5CkBA IC05NywxNSArOTcsMTkgQEAgaWYgY29uZmlnLlNFUlZFUl9NT0RFOgogCiAjIEF1dGhlbnRpY2F0 aW9uIHNvdXJjZXMKIGFwcC5QR0FETUlOX0RFRkFVTFRfQVVUSF9TT1VSQ0UgPSAnaW50ZXJuYWwn Ci1hcHAuUEdBRE1JTl9TVVBQT1JURURfQVVUSF9TT1VSQ0UgPSBbJ2ludGVybmFsJywgJ2xkYXAn XQorYXBwLlBHQURNSU5fTERBUF9BVVRIX1NPVVJDRSA9ICdsZGFwJworYXBwLlBHQURNSU5fS0VS QkVST1NfQVVUSF9TT1VSQ0UgPSAna2VyYmVyb3MnCisKK2FwcC5QR0FETUlOX1NVUFBPUlRFRF9B VVRIX1NPVVJDRSA9IFthcHAuUEdBRE1JTl9ERUZBVUxUX0FVVEhfU09VUkNFLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5QR0FETUlOX0xEQVBfQVVUSF9TT1VSQ0Us CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwLlBHQURNSU5fS0VSQkVS T1NfQVVUSF9TT1VSQ0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisK IGlmIGxlbihjb25maWcuQVVUSEVOVElDQVRJT05fU09VUkNFUykgPiAwOgogICAgIGFwcC5QR0FE TUlOX0VYVEVSTkFMX0FVVEhfU09VUkNFID0gY29uZmlnLkFVVEhFTlRJQ0FUSU9OX1NPVVJDRVNb MF0KIGVsc2U6CiAgICAgYXBwLlBHQURNSU5fRVhURVJOQUxfQVVUSF9TT1VSQ0UgPSBhcHAuUEdB RE1JTl9ERUZBVUxUX0FVVEhfU09VUkNFCiAKLWFwcC5sb2dnZXIuZGVidWcoCi0gICAgIkF1dGhl bnRpY2F0aW9uIFNvdXJjZTogJXMiICUgYXBwLlBHQURNSU5fREVGQVVMVF9BVVRIX1NPVVJDRSkK LQogIyBTdGFydCB0aGUgd2ViIHNlcnZlci4gVGhlIHBvcnQgbnVtYmVyIHNob3VsZCBoYXZlIGFs cmVhZHkgYmVlbiBzZXQgYnkgdGhlCiAjIHJ1bnRpbWUgaWYgd2UncmUgcnVubmluZyBpbiBkZXNr dG9wIG1vZGUsIG90aGVyd2lzZSB3ZSdsbCBqdXN0IHVzZSB0aGUKICMgRmxhc2sgZGVmYXVsdC4K ZGlmZiAtLWdpdCBhL3dlYi9wZ0FkbWluNC53c2dpIGIvd2ViL3BnQWRtaW40LndzZ2kKaW5kZXgg NGVkMmQ3ODYwLi42OTNmNjg4YWUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ0FkbWluNC53c2dpCisrKyBi L3dlYi9wZ0FkbWluNC53c2dpCkBAIC0yNCw2ICsyNCwxMCBAQCBidWlsdGlucy5TRVJWRVJfTU9E RSA9IFRydWUKIAogaW1wb3J0IGNvbmZpZwogCisKK2NvbmZpZy5BVVRIRU5USUNBVElPTl9TT1VS Q0VTID0gWydrZXJiZXJvcyddCitjb25maWcuS0VSQkVST1NfQVVUT19DUkVBVEVfVVNFUiA9IFRy dWUKKwogIyBXaGVuIHJ1bm5pbmcgaXQgYXMgYSBXU0dJIGFwcGxpY2F0aW9uLCBkaXJlY3Rvcnkg Zm9yIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKICMgbXVzdCBwcmVzZW50LgogaWYgbm90IG9zLnBh dGguZXhpc3RzKG9zLnBhdGguZGlybmFtZShjb25maWcuU1FMSVRFX1BBVEgpKToKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vX19pbml0X18ucHkKaW5k ZXggMjIzYzIwNTNhLi41ZGM1YTFlNjAgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL19faW5pdF9f LnB5CisrKyBiL3dlYi9wZ2FkbWluL19faW5pdF9fLnB5CkBAIC02NzQsNiArNjc0LDcgQEAgZGVm IGNyZWF0ZV9hcHAoYXBwX25hbWU9Tm9uZSk6CiAKICAgICAgICAgIyBDaGVjayB0aGUgYXV0aCBr ZXkgaXMgdmFsaWQsIGlmIGl0J3Mgc2V0LCBhbmQgd2UncmUgbm90IGluIHNlcnZlcgogICAgICAg ICAjIG1vZGUsIGFuZCBpdCdzIG5vdCBhIGhlbHAgZmlsZSByZXF1ZXN0LgorCiAgICAgICAgIGlm IG5vdCBjb25maWcuU0VSVkVSX01PREUgYW5kIGFwcC5QR0FETUlOX0lOVF9LRVkgIT0gJycgYW5k ICgoCiAgICAgICAgICAgICAna2V5JyBub3QgaW4gcmVxdWVzdC5hcmdzIG9yCiAgICAgICAgICAg ICByZXF1ZXN0LmFyZ3NbJ2tleSddICE9IGFwcC5QR0FETUlOX0lOVF9LRVkpIGFuZApAQCAtNjk1 LDExICs2OTYsMTkgQEAgZGVmIGNyZWF0ZV9hcHAoYXBwX25hbWU9Tm9uZSk6CiAgICAgICAgICAg ICAgICAgKQogICAgICAgICAgICAgICAgIGFib3J0KDQwMSkKICAgICAgICAgICAgIGxvZ2luX3Vz ZXIodXNlcikKKyAgICAgICAgZWxpZiBjb25maWcuU0VSVkVSX01PREUgYW5kXAorICAgICAgICAg ICAgICAgIGFwcC5QR0FETUlOX0VYVEVSTkFMX0FVVEhfU09VUkNFID09XAorICAgICAgICAgICAg ICAgIGFwcC5QR0FETUlOX0tFUkJFUk9TX0FVVEhfU09VUkNFIGFuZCBcCisgICAgICAgICAgICAg ICAgbm90IGN1cnJlbnRfdXNlci5pc19hdXRoZW50aWNhdGVkIGFuZCBcCisgICAgICAgICAgICAg ICAgcmVxdWVzdC5lbmRwb2ludCBpbiAoJ3JlZGlyZWN0cy5pbmRleCcsICdzZWN1cml0eS5sb2dp bicpOgorICAgICAgICAgICAgcmV0dXJuIGF1dGhlbnRpY2F0ZS5sb2dpbigpCiAKICAgICAgICAg IyBpZiB0aGUgc2VydmVyIGlzIHJlc3RhcnRlZCB0aGUgaW4gbWVtb3J5IGtleSB3aWxsIGJlIGxv c3QKICAgICAgICAgIyBidXQgdGhlIHVzZXIgc2Vzc2lvbiBtYXkgc3RpbGwgYmUgYWN0aXZlLiBM b2dvdXQgdGhlIHVzZXIKICAgICAgICAgIyB0byBnZXQgdGhlIGtleSBhZ2FpbiB3aGVuIGxvZ2lu CiAgICAgICAgIGlmIGNvbmZpZy5TRVJWRVJfTU9ERSBhbmQgY3VycmVudF91c2VyLmlzX2F1dGhl bnRpY2F0ZWQgYW5kIFwKKyAgICAgICAgICAgICAgICBhcHAuUEdBRE1JTl9FWFRFUk5BTF9BVVRI X1NPVVJDRSAhPSBcCisgICAgICAgICAgICAgICAgYXBwLlBHQURNSU5fS0VSQkVST1NfQVVUSF9T T1VSQ0UgYW5kIFwKICAgICAgICAgICAgICAgICBjdXJyZW50X2FwcC5rZXlNYW5hZ2VyLmdldCgp IGlzIE5vbmUgYW5kIFwKICAgICAgICAgICAgICAgICByZXF1ZXN0LmVuZHBvaW50IG5vdCBpbiAo J3NlY3VyaXR5LmxvZ2luJywgJ3NlY3VyaXR5LmxvZ291dCcpOgogICAgICAgICAgICAgbG9nb3V0 X3VzZXIoKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL19faW5pdF9fLnB5 IGIvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL19faW5pdF9fLnB5CmluZGV4IDUyODRlMGM1Mi4u ODk4ZGFmMGIxIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvX19pbml0X18u cHkKKysrIGIvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL19faW5pdF9fLnB5CkBAIC0xMSw3ICsx MSw3IEBACiAKIGltcG9ydCBmbGFzawogaW1wb3J0IHBpY2tsZQotZnJvbSBmbGFzayBpbXBvcnQg Y3VycmVudF9hcHAsIGZsYXNoCitmcm9tIGZsYXNrIGltcG9ydCBjdXJyZW50X2FwcCwgZmxhc2gs IFJlc3BvbnNlLCByZXF1ZXN0LCB1cmxfZm9yCiBmcm9tIGZsYXNrX2JhYmVsZXggaW1wb3J0IGdl dHRleHQKIGZyb20gZmxhc2tfc2VjdXJpdHkgaW1wb3J0IGN1cnJlbnRfdXNlcgogZnJvbSBmbGFz a19zZWN1cml0eS52aWV3cyBpbXBvcnQgX3NlY3VyaXR5LCBfY3R4CkBAIC01NiwxNSArNTYsMjQg QEAgZGVmIGxvZ2luKCk6CiAgICAgaWYgc3RhdHVzOgogICAgICAgICAjIExvZ2luIHRoZSB1c2Vy CiAgICAgICAgIHN0YXR1cywgbXNnID0gYXV0aF9vYmoubG9naW4oKQorICAgICAgICBjdXJyZW50 X2F1dGhfb2JqID0gYXV0aF9vYmouYXNfZGljdCgpCiAgICAgICAgIGlmIG5vdCBzdGF0dXM6Cisg ICAgICAgICAgICBpZiBjdXJyZW50X2F1dGhfb2JqWydjdXJyZW50X3NvdXJjZSddID09XAorICAg ICAgICAgICAgICAgICAgICBjdXJyZW50X2FwcC5QR0FETUlOX0tFUkJFUk9TX0FVVEhfU09VUkNF OgorICAgICAgICAgICAgICAgIHJldHVybiBmbGFzay5yZWRpcmVjdCgnezB9P25leHQ9ezF9Jy5m b3JtYXQodXJsX2ZvcigKKyAgICAgICAgICAgICAgICAgICAgJ2Jyb3dzZXIua2VyYmVyb3NfbG9n aW4nKSwgdXJsX2ZvcignYnJvd3Nlci5pbmRleCcpKSkKKwogICAgICAgICAgICAgZmxhc2goZ2V0 dGV4dChtc2cpLCAnZGFuZ2VyJykKICAgICAgICAgICAgIHJldHVybiBmbGFzay5yZWRpcmVjdChn ZXRfcG9zdF9sb2dvdXRfcmVkaXJlY3QoKSkKIAotICAgICAgICBzZXNzaW9uWydfYXV0aF9zb3Vy Y2VfbWFuYWdlcl9vYmonXSA9IGF1dGhfb2JqLmFzX2RpY3QoKQorICAgICAgICBzZXNzaW9uWydf YXV0aF9zb3VyY2VfbWFuYWdlcl9vYmonXSA9IGN1cnJlbnRfYXV0aF9vYmoKICAgICAgICAgcmV0 dXJuIGZsYXNrLnJlZGlyZWN0KGdldF9wb3N0X2xvZ2luX3JlZGlyZWN0KCkpCiAKKyAgICBlbGlm IGlzaW5zdGFuY2UobXNnLCBSZXNwb25zZSk6CisgICAgICAgIHJldHVybiBtc2cKICAgICBmbGFz aChnZXR0ZXh0KG1zZyksICdkYW5nZXInKQotICAgIHJldHVybiBmbGFzay5yZWRpcmVjdChnZXRf cG9zdF9sb2dvdXRfcmVkaXJlY3QoKSkKKyAgICByZXNwb25zZSA9IGZsYXNrLnJlZGlyZWN0KGdl dF9wb3N0X2xvZ291dF9yZWRpcmVjdCgpKQorICAgIHJldHVybiByZXNwb25zZQogCiAKIGNsYXNz IEF1dGhTb3VyY2VNYW5hZ2VyKCk6CkBAIC03NSw2ICs4NCw3IEBAIGNsYXNzIEF1dGhTb3VyY2VN YW5hZ2VyKCk6CiAgICAgICAgIHNlbGYuYXV0aF9zb3VyY2VzID0gc291cmNlcwogICAgICAgICBz ZWxmLnNvdXJjZSA9IE5vbmUKICAgICAgICAgc2VsZi5zb3VyY2VfZnJpZW5kbHlfbmFtZSA9IE5v bmUKKyAgICAgICAgc2VsZi5jdXJyZW50X3NvdXJjZSA9IE5vbmUKIAogICAgIGRlZiBhc19kaWN0 KHNlbGYpOgogICAgICAgICAiIiIKQEAgLTg0LDkgKzk0LDE3IEBAIGNsYXNzIEF1dGhTb3VyY2VN YW5hZ2VyKCk6CiAgICAgICAgIHJlcyA9IGRpY3QoKQogICAgICAgICByZXNbJ3NvdXJjZV9mcmll bmRseV9uYW1lJ10gPSBzZWxmLnNvdXJjZV9mcmllbmRseV9uYW1lCiAgICAgICAgIHJlc1snYXV0 aF9zb3VyY2VzJ10gPSBzZWxmLmF1dGhfc291cmNlcworICAgICAgICByZXNbJ2N1cnJlbnRfc291 cmNlJ10gPSBzZWxmLmN1cnJlbnRfc291cmNlCiAKICAgICAgICAgcmV0dXJuIHJlcwogCisgICAg ZGVmIHNldF9jdXJyZW50X3NvdXJjZShzZWxmLCBzb3VyY2UpOgorICAgICAgICBzZWxmLmN1cnJl bnRfc291cmNlID0gc291cmNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZ2V0X2N1cnJlbnRf c291cmNlKHNlbGYsIHNvdXJjZSk6CisgICAgICAgIHJldHVybiBzZWxmLmN1cnJlbnRfc291cmNl CisKICAgICBkZWYgc2V0X3NvdXJjZShzZWxmLCBzb3VyY2UpOgogICAgICAgICBzZWxmLnNvdXJj ZSA9IHNvdXJjZQogCkBAIC0xMTUsOSArMTMzLDM0IEBAIGNsYXNzIEF1dGhTb3VyY2VNYW5hZ2Vy KCk6CiAgICAgICAgIG1zZyA9IE5vbmUKICAgICAgICAgZm9yIHNyYyBpbiBzZWxmLmF1dGhfc291 cmNlczoKICAgICAgICAgICAgIHNvdXJjZSA9IGdldF9hdXRoX3NvdXJjZXMoc3JjKQorICAgICAg ICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgICAgICJBdXRoZW50 aWNhdGlvbiBpbml0aWF0ZWQgdmlhIHNvdXJjZTogJXMiICUKKyAgICAgICAgICAgICAgICBzb3Vy Y2UuZ2V0X3NvdXJjZV9uYW1lKCkpCisKKyAgICAgICAgICAgICMgaWYgc2VsZi5mb3JtLmRhdGFb J2VtYWlsJ10gYW5kIHNlbGYuZm9ybS5kYXRhWydwYXNzd29yZCddIGFuZCBcCisgICAgICAgICAg ICAjICAgICAgICAgc291cmNlLmdldF9zb3VyY2VfbmFtZSgpID09XAorICAgICAgICAgICAgIyAg ICAgICAgIGN1cnJlbnRfYXBwLlBHQURNSU5fS0VSQkVST1NfQVVUSF9TT1VSQ0U6CisgICAgICAg ICAgICAjICAgICBjb250aW51ZQorCiAgICAgICAgICAgICBzdGF0dXMsIG1zZyA9IHNvdXJjZS5h dXRoZW50aWNhdGUoc2VsZi5mb3JtKQorCisgICAgICAgICAgICAjIFdoZW4gc2VydmVyIHNlbmRz IFVuYXV0aG9yaXplZCBoZWFkZXIgdG8gZ2V0IHRoZSB0aWNrZXQgb3ZlciBIVFRQCisgICAgICAg ICAgICAjIE9SIFdoZW4ga2VyYmVyb3MgYXV0aGVudGljYXRpb24gZmFpbGVkIHdoaWxlIGFjY2Vz c2luZyBwZ2FkbWluLAorICAgICAgICAgICAgIyB3ZSBuZWVkIHRvIGJyZWFrIHRoZSBsb29wIGFz IG5vIG5lZWQgdG8gYXV0aGVudGljYXRlIGZ1cnRoZXIKKyAgICAgICAgICAgICMgZXZlbiBpZiB0 aGUgYXV0aGVudGljYXRpb24gc291cmNlcyBzZXQgdG8gbXVsdGlwbGUKKyAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgaWYgKGhhc2F0dHIobXNnLCAnc3RhdHVzJykg YW5kCisgICAgICAgICAgICAgICAgICAgIG1zZy5zdGF0dXMgPT0gJzQwMSBVTkFVVEhPUklaRUQn KSBvclwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UuZ2V0X3NvdXJjZV9uYW1lKCkg PT0KKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2FwcC5QR0FETUlOX0tFUkJFUk9T X0FVVEhfU09VUkNFIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QubWV0aG9k ID09ICdHRVQnKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKwogICAgICAgICAgICAgaWYg c3RhdHVzOgogICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NvdXJjZShzb3VyY2UpCisgICAgICAg ICAgICAgICAgc2VsZi5zZXRfY3VycmVudF9zb3VyY2Uoc291cmNlLmdldF9zb3VyY2VfbmFtZSgp KQorICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBub3QgTm9uZSBhbmQgJ3VzZXJuYW1lJyBpbiBt c2c6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9ybS5fZmllbGRzWydlbWFpbCddLmRhdGEg PSBtc2dbJ3VzZXJuYW1lJ10KICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzLCBtc2cKICAg ICAgICAgcmV0dXJuIHN0YXR1cywgbXNnCiAKQEAgLTEyNSw2ICsxNjgsOSBAQCBjbGFzcyBBdXRo U291cmNlTWFuYWdlcigpOgogICAgICAgICBzdGF0dXMsIG1zZyA9IHNlbGYuc291cmNlLmxvZ2lu KHNlbGYuZm9ybSkKICAgICAgICAgaWYgc3RhdHVzOgogICAgICAgICAgICAgc2VsZi5zZXRfc291 cmNlX2ZyaWVuZGx5X25hbWUoc2VsZi5zb3VyY2UuZ2V0X2ZyaWVuZGx5X25hbWUoKSkKKyAgICAg ICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAiQXV0aGVu dGljYXRpb24gYW5kIExvZ2luIHN1Y2Nlc3NmdWxseSBkb25lIHZpYSBzb3VyY2UgOiAlcyIgJQor ICAgICAgICAgICAgICAgIHNlbGYuc291cmNlLmdldF9zb3VyY2VfbmFtZSgpKQogICAgICAgICBy ZXR1cm4gc3RhdHVzLCBtc2cKIAogCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9hdXRoZW50aWNh dGUvaW50ZXJuYWwucHkgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvaW50ZXJuYWwucHkKaW5k ZXggMTA1ZTc4YzRlLi4zNDM2MWQ2ZmQgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2F1dGhlbnRp Y2F0ZS9pbnRlcm5hbC5weQorKysgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvaW50ZXJuYWwu cHkKQEAgLTMxLDcgKzMxLDExIEBAIGNsYXNzIEJhc2VBdXRoZW50aWNhdGlvbihvYmplY3QpOgog ICAgICAgICAnSU5WQUxJRF9FTUFJTCc6IGdldHRleHQoJ0VtYWlsL1VzZXJuYW1lIGlzIG5vdCB2 YWxpZCcpCiAgICAgfQogCi0gICAgQGFic3RyYWN0cHJvcGVydHkKKyAgICBAYWJzdHJhY3RtZXRo b2QKKyAgICBkZWYgZ2V0X3NvdXJjZV9uYW1lKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBA YWJzdHJhY3RtZXRob2QKICAgICBkZWYgZ2V0X2ZyaWVuZGx5X25hbWUoc2VsZik6CiAgICAgICAg IHBhc3MKIApAQCAtODIsNiArODYsOSBAQCBjbGFzcyBCYXNlQXV0aGVudGljYXRpb24ob2JqZWN0 KToKIAogY2xhc3MgSW50ZXJuYWxBdXRoZW50aWNhdGlvbihCYXNlQXV0aGVudGljYXRpb24pOgog CisgICAgZGVmIGdldF9zb3VyY2VfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRf YXBwLlBHQURNSU5fREVGQVVMVF9BVVRIX1NPVVJDRQorCiAgICAgZGVmIGdldF9mcmllbmRseV9u YW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gZ2V0dGV4dCgiaW50ZXJuYWwiKQogCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUva2VyYmVyb3MucHkgYi93ZWIvcGdhZG1pbi9h dXRoZW50aWNhdGUva2VyYmVyb3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwLi45YmU1ZTA4MjUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNh dGUva2VyYmVyb3MucHkKQEAgLTAsMCArMSwxMzcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisj IHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0g MjAyMCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJl bGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisKKyIiIkEgYmx1ZXByaW50IG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIFNwbmVnby9LZXJiZXJv cyBhdXRoZW50aWNhdGlvbi4iIiIKKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGdzc2FwaQorZnJv bSBvcyBpbXBvcnQgZW52aXJvbgorCitmcm9tIHdlcmt6ZXVnLmRhdGFzdHJ1Y3R1cmVzIGltcG9y dCBIZWFkZXJzCitmcm9tIGZsYXNrX2JhYmVsZXggaW1wb3J0IGdldHRleHQKK2Zyb20gZmxhc2sg aW1wb3J0IEZsYXNrLCByZXF1ZXN0LCBSZXNwb25zZSwgc2Vzc2lvbixcCisgICAgY3VycmVudF9h cHAsIHJlbmRlcl90ZW1wbGF0ZSwgZmxhc2gKKworaW1wb3J0IGNvbmZpZworZnJvbSBwZ2FkbWlu Lm1vZGVsIGltcG9ydCBVc2VyLCBTZXJ2ZXJHcm91cCwgZGIsIFJvbGUKK2Zyb20gcGdhZG1pbi50 b29scy51c2VyX21hbmFnZW1lbnQgaW1wb3J0IGNyZWF0ZV91c2VyCisKK2Zyb20gZmxhc2tfc2Vj dXJpdHkudmlld3MgaW1wb3J0IF9zZWN1cml0eSwgX2NvbW1pdCwgX2N0eAorZnJvbSB3ZXJremV1 Zy5kYXRhc3RydWN0dXJlcyBpbXBvcnQgTXVsdGlEaWN0CisKK2Zyb20gLmludGVybmFsIGltcG9y dCBCYXNlQXV0aGVudGljYXRpb24KKworCisjIFNldCB0aGUgS2VyYmVyb3MgY29uZmlnIGZpbGUK K2lmIGNvbmZpZy5LUkJfS1ROQU1FIGFuZCBjb25maWcuS1JCX0tUTkFNRSAhPSAnPEtSQjVfS0VZ VEFCX0ZJTEU+JzoKKyAgICBlbnZpcm9uWydLUkI1X0tUTkFNRSddID0gY29uZmlnLktSQl9LVE5B TUUKKworCitjbGFzcyBLRVJCRVJPU0F1dGhlbnRpY2F0aW9uKEJhc2VBdXRoZW50aWNhdGlvbik6 CisKKyAgICBkZWYgZ2V0X3NvdXJjZV9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gY3VycmVu dF9hcHAuUEdBRE1JTl9LRVJCRVJPU19BVVRIX1NPVVJDRQorCisgICAgZGVmIGdldF9mcmllbmRs eV9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gZ2V0dGV4dCgia2VyYmVyb3MiKQorCisgICAg ZGVmIHZhbGlkYXRlKHNlbGYsIGZvcm0pOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVm IGF1dGhlbnRpY2F0ZShzZWxmLCBmcm0pOgorICAgICAgICByZXR2YWwgPSBbVHJ1ZSwgTm9uZV0K KyAgICAgICAgbmVnb3RpYXRlID0gRmFsc2UKKyAgICAgICAgaGVhZGVycyA9IEhlYWRlcnMoKQor ICAgICAgICBhdXRob3JpemF0aW9uID0gcmVxdWVzdC5oZWFkZXJzLmdldCgiQXV0aG9yaXphdGlv biIsIE5vbmUpCisgICAgICAgIGZvcm1fY2xhc3MgPSBfc2VjdXJpdHkubG9naW5fZm9ybQorCisg ICAgICAgIGlmIHJlcXVlc3QuanNvbjoKKyAgICAgICAgICAgIGZvcm0gPSBmb3JtX2NsYXNzKE11 bHRpRGljdChyZXF1ZXN0Lmpzb24pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9ybSA9 IGZvcm1fY2xhc3MoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGF1dGhvcml6YXRp b24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYXV0aF9oZWFkZXIgPSBhdXRob3JpemF0 aW9uLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBhdXRoX2hlYWRlclswXSA9PSAnTmVnb3Rp YXRlJzoKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBuZWdvdGlhdGUgPSBzZWxmLm5lZ290 aWF0ZV9zdGFydChhdXRoX2hlYWRlclsxXSkKKworICAgICAgICAgICAgICAgICAgICBpZiBzdGF0 dXM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFNhdmluZyB0aGUgZmlyc3QgMTUgY2hhcmFj dGVycyBvZiB0aGUga2VyYmVyb3Mga2V5CisgICAgICAgICAgICAgICAgICAgICAgICAjIHRvIGVu Y3J5cHQvZGVjcnlwdCBkYXRhYmFzZSBwYXNzd29yZAorICAgICAgICAgICAgICAgICAgICAgICAg c2Vzc2lvblsna2VyYmVyb3Nfa2V5J10gPSBhdXRoX2hlYWRlclsxXVswOjE1XQorICAgICAgICAg ICAgICAgICAgICAgICAgIyBDcmVhdGUgdXNlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dmFsID0gc2VsZi5fX2F1dG9fY3JlYXRlX3VzZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RyKG5lZ290aWF0ZS5pbml0aWF0b3JfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGVs aWYgaXNpbnN0YW5jZShuZWdvdGlhdGUsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgICAg ICAgICBmbGFzaChnZXR0ZXh0KG5lZ290aWF0ZSksICdkYW5nZXInKQorICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dmFsID0gW3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZXNwb25zZShyZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJzZWN1cml0eS9sb2dpbl91c2VyLmh0bWwiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb2dpbl91c2VyX2Zvcm09Zm9ybSkpXQorICAgICAgICAg ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycy5hZGQoJ1dX Vy1BdXRoZW50aWNhdGUnLCAnTmVnb3RpYXRlICcgKworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RyKGJhc2U2NC5iNjRlbmNvZGUobmVnb3RpYXRlKSwgJ3V0Zi04JykpCisg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UsIFJlc3BvbnNlKCJTdWNjZXNzIiwg MjAwLCBoZWFkZXJzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmbGFzaChn ZXR0ZXh0KCJLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBmYWlsZWQuIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiBDb3VsZG4ndCBmaW5kIGtlcmJlcm9zIHRpY2tldC4iKSwgJ2Rhbmdl cicpCisgICAgICAgICAgICAgICAgaGVhZGVycy5hZGQoJ1dXVy1BdXRoZW50aWNhdGUnLCAnTmVn b3RpYXRlJykKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBbRmFsc2UsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlc3BvbnNlKHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJzZWN1cml0eS9sb2dpbl91c2VyLmh0bWwiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbG9naW5fdXNlcl9mb3JtPWZvcm0pLCA0MDEsIGhlYWRlcnMpXQorICAg ICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbmVnb3RpYXRlIGlzIG5vdCBGYWxzZToKKyAg ICAgICAgICAgICAgICBzZWxmLm5lZ290aWF0ZV9lbmQobmVnb3RpYXRlKQorICAgICAgICByZXR1 cm4gcmV0dmFsCisKKyAgICBkZWYgbmVnb3RpYXRlX3N0YXJ0KHNlbGYsIGluX3Rva2VuKToKKyAg ICAgICAgc3ZjX3ByaW5jID0gZ3NzYXBpLk5hbWUoJ0hUVFBAJXMnICUgY29uZmlnLktSQl9BUFBf SE9TVF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3R5cGU9Z3Nz YXBpLk5hbWVUeXBlLmhvc3RiYXNlZF9zZXJ2aWNlKQorICAgICAgICBjbmFtZSA9IHN2Y19wcmlu Yy5jYW5vbmljYWxpemUoZ3NzYXBpLk1lY2hUeXBlLmtlcmJlcm9zKQorCisgICAgICAgIHRyeToK KyAgICAgICAgICAgIHNlcnZlcl9jcmVkcyA9IGdzc2FwaS5DcmVkZW50aWFscyh1c2FnZT0nYWNj ZXB0JywgbmFtZT1jbmFtZSkKKyAgICAgICAgICAgIGNvbnRleHQgPSBnc3NhcGkuU2VjdXJpdHlD b250ZXh0KGNyZWRzPXNlcnZlcl9jcmVkcykKKyAgICAgICAgICAgIG91dF90b2tlbiA9IGNvbnRl eHQuc3RlcChiYXNlNjQuYjY0ZGVjb2RlKGluX3Rva2VuKSkKKyAgICAgICAgZXhjZXB0IEV4Y2Vw dGlvbiBhcyBlOgorICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihlKQor ICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBlCisKKyAgICAgICAgaWYgb3V0X3Rva2VuIGFuZCBu b3QgY29udGV4dC5jb21wbGV0ZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgb3V0X3Rva2Vu CisgICAgICAgIGlmIGNvbnRleHQuY29tcGxldGU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwg Y29udGV4dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBOb25lCisK KyAgICBkZWYgbmVnb3RpYXRlX2VuZChzZWxmLCBjb250ZXh0KToKKyAgICAgICAgIyBGcmVlIGdz c19jcmVkX2lkX3QKKyAgICAgICAgZGVsX2NyZWRzID0gZ2V0YXR0cihjb250ZXh0LCAnZGVsZWdh dGVkX2NyZWRzJywgTm9uZSkKKyAgICAgICAgaWYgZGVsX2NyZWRzOgorICAgICAgICAgICAgZGVs ZWdfY3JlZHMgPSBjb250ZXh0LmRlbGVnYXRlZF9jcmVkcworICAgICAgICAgICAgZGVsKGRlbGVn X2NyZWRzKQorCisgICAgZGVmIF9fYXV0b19jcmVhdGVfdXNlcihzZWxmLCB1c2VybmFtZSk6Cisg ICAgICAgICIiIkFkZCB0aGUgbGRhcCB1c2VyIHRvIHRoZSBpbnRlcm5hbCBTUUxpdGUgZGF0YWJh c2UuIiIiCisgICAgICAgIHVzZXJuYW1lID0gc3RyKHVzZXJuYW1lKQorICAgICAgICBpZiBjb25m aWcuS1JCX0FVVE9fQ1JFQVRFX1VTRVI6CisgICAgICAgICAgICB1c2VyID0gVXNlci5xdWVyeS5m aWx0ZXJfYnkoCisgICAgICAgICAgICAgICAgdXNlcm5hbWU9dXNlcm5hbWUpLmZpcnN0KCkKKyAg ICAgICAgICAgIGlmIHVzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl X3VzZXIoeworICAgICAgICAgICAgICAgICAgICAndXNlcm5hbWUnOiB1c2VybmFtZSwKKyAgICAg ICAgICAgICAgICAgICAgJ2VtYWlsJzogdXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICdy b2xlJzogMiwKKyAgICAgICAgICAgICAgICAgICAgJ2FjdGl2ZSc6IFRydWUsCisgICAgICAgICAg ICAgICAgICAgICdhdXRoX3NvdXJjZSc6ICdrZXJiZXJvcycKKyAgICAgICAgICAgICAgICB9KQor CisgICAgICAgIHJldHVybiBUcnVlLCB7J3VzZXJuYW1lJzogdXNlcm5hbWV9CmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvbGRhcC5weSBiL3dlYi9wZ2FkbWluL2F1dGhlbnRp Y2F0ZS9sZGFwLnB5CmluZGV4IDJjZGNhODYwNS4uN2MxMDE0M2MwIDEwMDY0NAotLS0gYS93ZWIv cGdhZG1pbi9hdXRoZW50aWNhdGUvbGRhcC5weQorKysgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNh dGUvbGRhcC5weQpAQCAtMzEsNiArMzEsOSBAQCBFUlJPUl9TRUFSQ0hJTkdfTERBUF9ESVJFQ1RP UlkgPSAiRXJyb3Igc2VhcmNoaW5nIHRoZSBMREFQIGRpcmVjdG9yeToge30iCiBjbGFzcyBMREFQ QXV0aGVudGljYXRpb24oQmFzZUF1dGhlbnRpY2F0aW9uKToKICAgICAiIiJMZGFwIEF1dGhlbnRp Y2F0aW9uIENsYXNzIiIiCiAKKyAgICBkZWYgZ2V0X3NvdXJjZV9uYW1lKHNlbGYpOgorICAgICAg ICByZXR1cm4gY3VycmVudF9hcHAuUEdBRE1JTl9MREFQX0FVVEhfU09VUkNFCisKICAgICBkZWYg Z2V0X2ZyaWVuZGx5X25hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBnZXR0ZXh0KCJsZGFwIikK IApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9fX2luaXRfXy5weSBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvX19pbml0X18ucHkKaW5kZXggNzcxMjBjZDU5Li5kZDQ4MDdiNTEgMTAwNjQ0 Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvX19pbml0X18ucHkKKysrIGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9fX2luaXRfXy5weQpAQCAtMjksNyArMjksNyBAQCBmcm9tIGZsYXNrX3NlY3VyaXR5 LnJlY292ZXJhYmxlIGltcG9ydCByZXNldF9wYXNzd29yZF90b2tlbl9zdGF0dXMsIFwKICAgICBn ZW5lcmF0ZV9yZXNldF9wYXNzd29yZF90b2tlbiwgdXBkYXRlX3Bhc3N3b3JkCiBmcm9tIGZsYXNr X3NlY3VyaXR5LnNpZ25hbHMgaW1wb3J0IHJlc2V0X3Bhc3N3b3JkX2luc3RydWN0aW9uc19zZW50 CiBmcm9tIGZsYXNrX3NlY3VyaXR5LnV0aWxzIGltcG9ydCBjb25maWdfdmFsdWUsIGRvX2ZsYXNo LCBnZXRfdXJsLCBcCi0gICAgZ2V0X21lc3NhZ2UsIHNsYXNoX3VybF9zdWZmaXgsIGxvZ2luX3Vz ZXIsIHNlbmRfbWFpbAorICAgIGdldF9tZXNzYWdlLCBzbGFzaF91cmxfc3VmZml4LCBsb2dpbl91 c2VyLCBzZW5kX21haWwsIGxvZ291dF91c2VyCiBmcm9tIGZsYXNrX3NlY3VyaXR5LnZpZXdzIGlt cG9ydCBfc2VjdXJpdHksIF9jb21taXQsIF9jdHgKIGZyb20gd2Vya3pldWcuZGF0YXN0cnVjdHVy ZXMgaW1wb3J0IE11bHRpRGljdAogCkBAIC0yODAsNyArMjgwLDEwIEBAIGNsYXNzIEJyb3dzZXJN b2R1bGUoUGdBZG1pbk1vZHVsZSk6CiAgICAgICAgICAgICAgICAgJ2Jyb3dzZXIuY2hlY2tfbWFz dGVyX3Bhc3N3b3JkJywKICAgICAgICAgICAgICAgICAnYnJvd3Nlci5zZXRfbWFzdGVyX3Bhc3N3 b3JkJywKICAgICAgICAgICAgICAgICAnYnJvd3Nlci5yZXNldF9tYXN0ZXJfcGFzc3dvcmQnLAot ICAgICAgICAgICAgICAgICdicm93c2VyLmxvY2tfbGF5b3V0J10KKyAgICAgICAgICAgICAgICAn YnJvd3Nlci5sb2NrX2xheW91dCcsCisgICAgICAgICAgICAgICAgJ2Jyb3dzZXIua2VyYmVyb3Nf bG9nb3V0JywKKyAgICAgICAgICAgICAgICAnYnJvd3Nlci5rZXJiZXJvc19sb2dpbicsCisgICAg ICAgICAgICAgICAgXQogCiAKIGJsdWVwcmludCA9IEJyb3dzZXJNb2R1bGUoTU9EVUxFX05BTUUs IF9fbmFtZV9fKQpAQCAtNTM5LDYgKzU0MiwxMSBAQCBjbGFzcyBCcm93c2VyUGx1Z2luTW9kdWxl KFBnQWRtaW5Nb2R1bGUpOgogCiAKIGRlZiBfZ2V0X2xvZ291dF91cmwoKToKKyAgICBpZiBzZXNz aW9uWydfYXV0aF9zb3VyY2VfbWFuYWdlcl9vYmonXVsnY3VycmVudF9zb3VyY2UnXSA9PSBcCisg ICAgICAgICAgICBjdXJyZW50X2FwcC5QR0FETUlOX0tFUkJFUk9TX0FVVEhfU09VUkNFOgorICAg ICAgICByZXR1cm4gJ3swfT9uZXh0PXsxfScuZm9ybWF0KHVybF9mb3IoCisgICAgICAgICAgICAn YnJvd3Nlci5rZXJiZXJvc19sb2dvdXQnKSwgdXJsX2ZvcihCUk9XU0VSX0lOREVYKSkKKwogICAg IHJldHVybiAnezB9P25leHQ9ezF9Jy5mb3JtYXQoCiAgICAgICAgIHVybF9mb3IoJ3NlY3VyaXR5 LmxvZ291dCcpLCB1cmxfZm9yKEJST1dTRVJfSU5ERVgpKQogCkBAIC02MjMsNiArNjMxLDI4IEBA IGRlZiBjaGVja19icm93c2VyX3VwZ3JhZGUoKToKICAgICAgICAgZmxhc2gobXNnLCAnd2Fybmlu ZycpCiAKIAorQGJsdWVwcmludC5yb3V0ZSgiL2tlcmJlcm9zX2xvZ2luIiwKKyAgICAgICAgICAg ICAgICAgZW5kcG9pbnQ9ImtlcmJlcm9zX2xvZ2luIiwgbWV0aG9kcz1bIkdFVCJdKQorQHBnQ1NS RlByb3RlY3QuZXhlbXB0CitkZWYga2VyYmVyb3NfbG9naW4oKToKKyAgICBsb2dvdXRfdXNlcigp CisgICAgcmV0dXJuIFJlc3BvbnNlKHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgTU9EVUxFX05B TUUgKyAiL2tlcmJlcm9zX2xvZ2luLmh0bWwiLAorICAgICAgICBsb2dpbl91cmw9dXJsX2Zvcign c2VjdXJpdHkubG9naW4nKSwKKyAgICApKQorCisKK0BibHVlcHJpbnQucm91dGUoIi9rZXJiZXJv c19sb2dvdXQiLAorICAgICAgICAgICAgICAgICBlbmRwb2ludD0ia2VyYmVyb3NfbG9nb3V0Iiwg bWV0aG9kcz1bIkdFVCJdKQorQHBnQ1NSRlByb3RlY3QuZXhlbXB0CitkZWYga2VyYmVyb3NfbG9n b3V0KCk6CisgICAgbG9nb3V0X3VzZXIoKQorICAgIHJldHVybiBSZXNwb25zZShyZW5kZXJfdGVt cGxhdGUoCisgICAgICAgIE1PRFVMRV9OQU1FICsgIi9rZXJiZXJvc19sb2dvdXQuaHRtbCIsCisg ICAgICAgIGxvZ2luX3VybD11cmxfZm9yKCdzZWN1cml0eS5sb2dpbicpLAorICAgICkpCisKKwog QGJsdWVwcmludC5yb3V0ZSgiLyIpCiBAcGdDU1JGUHJvdGVjdC5leGVtcHQKIEBsb2dpbl9yZXF1 aXJlZApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9r ZXJiZXJvc19sb2dpbi5odG1sIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nl ci9rZXJiZXJvc19sb2dpbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MC4uYzExMmUzMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1w bGF0ZXMvYnJvd3Nlci9rZXJiZXJvc19sb2dpbi5odG1sCkBAIC0wLDAgKzEsMTYgQEAKK3slIGV4 dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGJsb2NrIGJvZHkgJX0KKzxkaXYgY2xhc3M9ImNvbnRh aW5lci1mbHVpZCBjaGFuZ2VfcGFzcyI+CisgICAgPGRpdiBjbGFzcz0icm93IGFsaWduLWl0ZW1z LWNlbnRlciBoLTEwMCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC01Ij48L2Rpdj4KKyAg ICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTUiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFu ZWwtaGVhZGVyIGg0Ij48aSBjbGFzcz0iYXBwLWljb24gcGctaWNvbi1ibHVlIiBhcmlhLWhpZGRl bj0idHJ1ZSI+PC9pPiB7eyBfKCclKGFwcG5hbWUpcycsIGFwcG5hbWU9Y29uZmlnLkFQUF9OQU1F KSB9fTwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYm9keSI+CisgICAgICAg ICAgICAgICAgPGRpdiBjbGFzcz0iZC1ibG9jayB0ZXh0LWNvbG9yIHBiLTMgaDUiPnt7IF8oJ0xv Z2luIEZhaWxlZC4nKSB9fTwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+PGEgaHJlZj0ie3sg bG9naW5fdXJsIH19Ij5DbGljayBoZXJlPC9hPiB0byBMb2dpbiBhZ2Fpbi48L2Rpdj4KKyAgICAg ICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1k LTQiPjwvZGl2PgorICAgIDwvZGl2PgorPC9kaXY+Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9rZXJiZXJvc19sb2dvdXQu aHRtbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVtcGxhdGVzL2Jyb3dzZXIva2VyYmVyb3NfbG9n b3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi40MzBkYzZmMjUK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3RlbXBsYXRlcy9icm93c2Vy L2tlcmJlcm9zX2xvZ291dC5odG1sCkBAIC0wLDAgKzEsMTYgQEAKK3slIGV4dGVuZHMgImJhc2Uu aHRtbCIgJX0KK3slIGJsb2NrIGJvZHkgJX0KKzxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCBj aGFuZ2VfcGFzcyI+CisgICAgPGRpdiBjbGFzcz0icm93IGFsaWduLWl0ZW1zLWNlbnRlciBoLTEw MCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC01Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBj bGFzcz0iY29sLW1kLTUiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGVyIGg0 Ij48aSBjbGFzcz0iYXBwLWljb24gcGctaWNvbi1ibHVlIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9p PiB7eyBfKCclKGFwcG5hbWUpcycsIGFwcG5hbWU9Y29uZmlnLkFQUF9OQU1FKSB9fTwvZGl2Pgor ICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYm9keSI+CisgICAgICAgICAgICAgICAgPGRp diBjbGFzcz0iZC1ibG9jayB0ZXh0LWNvbG9yIHBiLTMgaDUiPnt7IF8oJ0xvZ2dlZCBvdXQgc3Vj Y2Vzc2Z1bGx5LicpIH19PC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdj48YSBocmVmPSJ7eyBs b2dpbl91cmwgfX0iPkNsaWNrIGhlcmU8L2E+IHRvIExvZ2luIGFnYWluLjwvZGl2PgorICAgICAg ICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQt NCI+PC9kaXY+CisgICAgPC9kaXY+Cis8L2Rpdj4KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9icm93c2VyL3Rlc3RzL3Rlc3Rfa2VyYmVyb3Nfd2l0aF9tb2NraW5nLnB5 IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZXN0cy90ZXN0X2tlcmJlcm9zX3dpdGhfbW9ja2luZy5w eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjUwY2FhNzFlOQotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVzdHMvdGVzdF9rZXJiZXJvc193aXRo X21vY2tpbmcucHkKQEAgLTAsMCArMSwxMDYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBn QWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAy MCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVh c2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisK K2ltcG9ydCBjb25maWcgYXMgYXBwX2NvbmZpZworZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRlIGlt cG9ydCBCYXNlVGVzdEdlbmVyYXRvcgorZnJvbSByZWdyZXNzaW9uLnB5dGhvbl90ZXN0X3V0aWxz IGltcG9ydCB0ZXN0X3V0aWxzIGFzIHV0aWxzCitmcm9tIHBnYWRtaW4uYXV0aGVudGljYXRlLnJl Z2lzdHJ5IGltcG9ydCBBdXRoU291cmNlUmVnaXN0cnkKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBv cnQgcGF0Y2gsIE1hZ2ljTW9jaworCisKK2NsYXNzIEtlcmJlcm9zTG9naW5Nb2NrVGVzdENhc2Uo QmFzZVRlc3RHZW5lcmF0b3IpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgY2hlY2tzIFNwbmVn by9LZXJiZXJvcyBsb2dpbiBmdW5jdGlvbmFsaXR5IGJ5IG1vY2tpbmcKKyAgICBIVFRQIG5lZ290 aWF0ZSBhdXRoZW50aWNhdGlvbi4KKyAgICAiIiIKKworICAgIHNjZW5hcmlvcyA9IFsKKyAgICAg ICAgKCdTcG5lZ28vS2VyYmVyb3MgQXV0aGVudGljYXRpb246IFRlc3QgVW5hdXRob3JpemVkJywg ZGljdCgKKyAgICAgICAgICAgIGF1dGhfc291cmNlPVsna2VyYmVyb3MnXSwKKyAgICAgICAgICAg IGF1dG9fY3JlYXRlX3VzZXI9VHJ1ZSwKKyAgICAgICAgICAgIHVzZXJuYW1lPSd1c2VyQFBHQURN SU4uT1JHJywKKyAgICAgICAgICAgIHBhc3N3b3JkPSdQQVNTV09SRCcsCisgICAgICAgICAgICBm bGFnPTEKKyAgICAgICAgKSksCisgICAgICAgICgnU3BuZWdvL0tlcmJlcm9zIEF1dGhlbnRpY2F0 aW9uOiBUZXN0IEF1dGhvcml6ZWQnLCBkaWN0KAorICAgICAgICAgICAgYXV0aF9zb3VyY2U9Wydr ZXJiZXJvcyddLAorICAgICAgICAgICAgYXV0b19jcmVhdGVfdXNlcj1UcnVlLAorICAgICAgICAg ICAgdXNlcm5hbWU9J3VzZXJAUEdBRE1JTi5PUkcnLAorICAgICAgICAgICAgcGFzc3dvcmQ9J1BB U1NXT1JEJywKKyAgICAgICAgICAgIGZsYWc9MgorICAgICAgICApKQorICAgIF0KKworICAgIEBj bGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICIiIgorICAgICAg ICBXZSBuZWVkIHRvIGxvZ291dCB0aGUgdGVzdCBjbGllbnQgYXMgd2UgYXJlIHRlc3RpbmcKKyAg ICAgICAgc3BuZWdvL2tlcmJlcm9zIGxvZ2luIHNjZW5hcmlvcy4KKyAgICAgICAgIiIiCisgICAg ICAgIGNscy50ZXN0ZXIubG9nb3V0KCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAg YXBwX2NvbmZpZy5BVVRIRU5USUNBVElPTl9TT1VSQ0VTID0gc2VsZi5hdXRoX3NvdXJjZQorCisg ICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgICIiIlRoaXMgZnVuY3Rpb24gY2hlY2tzIHNw bmVnby9rZXJiZXJvcyBsb2dpbiBmdW5jdGlvbmFsaXR5LiIiIgorICAgICAgICBpZiBzZWxmLmZs YWcgPT0gMToKKyAgICAgICAgICAgIHNlbGYudGVzdF91bmF1dGhvcml6ZWQoKQorICAgICAgICBl bGlmIHNlbGYuZmxhZyA9PSAyOgorICAgICAgICAgICAgaWYgYXBwX2NvbmZpZy5TRVJWRVJfTU9E RSBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KAorICAgICAgICAgICAg ICAgICAgICAiQ2FuIG5vdCBydW4gS2VyYmVyb3MgQXV0aGVudGljYXRpb24gaW4gdGhlIERlc2t0 b3AgbW9kZS4iCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICBzZWxmLnRlc3RfYXV0 aG9yaXplZCgpCisKKyAgICBkZWYgdGVzdF91bmF1dGhvcml6ZWQoc2VsZik6CisgICAgICAgICIi IgorICAgICAgICBFbnN1cmUgdGhhdCB3aGVuIGNsaWVudCBzZW5kcyB0aGUgZmlyc3QgcmVxdWVz dCwKKyAgICAgICAgdGhlIE5lZ290aWF0ZSByZXF1ZXN0IGlzIHNlbnQuCisgICAgICAgICIiIgor ICAgICAgICByZXMgPSBzZWxmLnRlc3Rlci5sb2dpbihzZWxmLnVzZXJuYW1lLCBzZWxmLnBhc3N3 b3JkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXNfY29kZSwgNDAx KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5oZWFkZXJzLmdldCgnd3d3LWF1dGhlbnRp Y2F0ZScpLCAnTmVnb3RpYXRlJykKKworICAgIGRlZiB0ZXN0X2F1dGhvcml6ZWQoc2VsZik6Cisg ICAgICAgICIiIgorICAgICAgICBFbnN1cmUgdGhhdCB3aGVuIHRoZSBjbGllbnQgc2VuZHMgYW4g Y29ycmVjdCBhdXRob3JpemF0aW9uIHRva2VuLAorICAgICAgICB0aGV5IHJlY2VpdmUgYSAyMDAg T0sgcmVzcG9uc2UgYW5kIHRoZSB1c2VyIHByaW5jaXBhbCBpcyBleHRyYWN0ZWQgYW5kCisgICAg ICAgIHBhc3NlZCBvbiB0byB0aGUgcm91dGVkIG1ldGhvZC4KKyAgICAgICAgIiIiCisKKyAgICAg ICAgY2xhc3MgZGVsQ3JhZHM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAg ICAgICAgICAgICAgc2VsZi5pbml0aWF0b3JfbmFtZSA9ICd1c2VyQFBHQURNSU4uT1JHJworICAg ICAgICBkZWxfY3JhZHMgPSBkZWxDcmFkcygpCisKKyAgICAgICAgQXV0aFNvdXJjZVJlZ2lzdHJ5 LnJlZ2lzdHJ5WydrZXJiZXJvcyddLm5lZ290aWF0ZV9zdGFydCA9IE1hZ2ljTW9jaygKKyAgICAg ICAgICAgIHJldHVybl92YWx1ZT1bVHJ1ZSwgZGVsX2NyYWRzXSkKKyAgICAgICAgcmVzID0gc2Vs Zi50ZXN0ZXIubG9naW4oc2VsZi51c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5wYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1 ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17J0F1dGhvcml6YXRp b24nOiAnTmVnb3RpYXRlIENUT0tFTid9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzX2NvZGUsIDIwMCkKKyAgICAg ICAgcmVzcGRhdGEgPSAnR3JhdmF0YXIgaW1hZ2UgZm9yICVzJyAlIHNlbGYudXNlcm5hbWUKKyAg ICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BkYXRhIGluIHJlcy5kYXRhLmRlY29kZSgndXRmOCcp KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3Rlci5sb2dvdXQo KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAg ICAgIiIiCisgICAgICAgIFdlIG5lZWQgdG8gYWdhaW4gbG9naW4gdGhlIHRlc3QgY2xpZW50IGFz IHNvb24gYXMgdGVzdCBzY2VuYXJpb3MKKyAgICAgICAgZmluaXNoZXMuCisgICAgICAgICIiIgor ICAgICAgICBjbHMudGVzdGVyLmxvZ291dCgpCisgICAgICAgIGFwcF9jb25maWcuQVVUSEVOVElD QVRJT05fU09VUkNFUyA9IFsnaW50ZXJuYWwnXQorICAgICAgICB1dGlscy5sb2dpbl90ZXN0ZXJf YWNjb3VudChjbHMudGVzdGVyKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvbWFzdGVy X3Bhc3N3b3JkLnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvbWFzdGVyX3Bhc3N3b3JkLnB5CmluZGV4 IDc1OWJmMzZlMC4uYmU2NTViZWYyIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi91dGlscy9tYXN0 ZXJfcGFzc3dvcmQucHkKKysrIGIvd2ViL3BnYWRtaW4vdXRpbHMvbWFzdGVyX3Bhc3N3b3JkLnB5 CkBAIC0xLDUgKzEsNSBAQAogaW1wb3J0IGNvbmZpZwotZnJvbSBmbGFzayBpbXBvcnQgY3VycmVu dF9hcHAKK2Zyb20gZmxhc2sgaW1wb3J0IGN1cnJlbnRfYXBwLCBzZXNzaW9uCiBmcm9tIGZsYXNr X2xvZ2luIGltcG9ydCBjdXJyZW50X3VzZXIKIGZyb20gcGdhZG1pbi5tb2RlbCBpbXBvcnQgZGIs IFVzZXIsIFNlcnZlcgogZnJvbSBwZ2FkbWluLnV0aWxzLmNyeXB0byBpbXBvcnQgZW5jcnlwdCwg ZGVjcnlwdApAQCAtMzIsNiArMzIsMTEgQEAgZGVmIGdldF9jcnlwdF9rZXkoKToKICAgICBlbGlm IGNvbmZpZy5NQVNURVJfUEFTU1dPUkRfUkVRVUlSRUQgXAogICAgICAgICAgICAgYW5kIG5vdCBj b25maWcuU0VSVkVSX01PREUgYW5kIGVuY19rZXkgaXMgTm9uZToKICAgICAgICAgcmV0dXJuIEZh bHNlLCBOb25lCisgICAgZWxpZiBjb25maWcuU0VSVkVSX01PREUgYW5kIFwKKyAgICAgICAgICAg IHNlc3Npb25bJ19hdXRoX3NvdXJjZV9tYW5hZ2VyX29iaiddWydzb3VyY2VfZnJpZW5kbHlfbmFt ZSddXAorICAgICAgICAgICAgPT0gY3VycmVudF9hcHAuUEdBRE1JTl9LRVJCRVJPU19BVVRIX1NP VVJDRToKKyAgICAgICAgcmV0dXJuIFRydWUsIHNlc3Npb25bJ2tlcmJlcm9zX2tleSddIGlmICdr ZXJiZXJvc19rZXknIGluIHNlc3Npb24gXAorICAgICAgICAgICAgZWxzZSBOb25lCiAgICAgZWxz ZToKICAgICAgICAgcmV0dXJuIFRydWUsIGVuY19rZXkKIApkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jl c3Npb24vcHl0aG9uX3Rlc3RfdXRpbHMvY3NyZl90ZXN0X2NsaWVudC5weSBiL3dlYi9yZWdyZXNz aW9uL3B5dGhvbl90ZXN0X3V0aWxzL2NzcmZfdGVzdF9jbGllbnQucHkKaW5kZXggYWQzMzk2Nzkw Li5kMWFkZmRjNTQgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL3B5dGhvbl90ZXN0X3V0aWxz L2NzcmZfdGVzdF9jbGllbnQucHkKKysrIGIvd2ViL3JlZ3Jlc3Npb24vcHl0aG9uX3Rlc3RfdXRp bHMvY3NyZl90ZXN0X2NsaWVudC5weQpAQCAtMTAxLDcgKzEwMSw4IEBAIGNsYXNzIFRlc3RDbGll bnQodGVzdGluZy5GbGFza0NsaWVudCk6CiAKICAgICAgICAgICAgIHJldHVybiBjc3JmX3Rva2Vu CiAKLSAgICBkZWYgbG9naW4oc2VsZiwgZW1haWwsIHBhc3N3b3JkLCBfZm9sbG93X3JlZGlyZWN0 cz1GYWxzZSk6CisgICAgZGVmIGxvZ2luKHNlbGYsIGVtYWlsLCBwYXNzd29yZCwgX2ZvbGxvd19y ZWRpcmVjdHM9RmFsc2UsCisgICAgICAgICAgICAgIGhlYWRlcnM9Tm9uZSk6CiAgICAgICAgIGlm IGNvbmZpZy5TRVJWRVJfTU9ERSBpcyBUcnVlOgogICAgICAgICAgICAgcmVzID0gc2VsZi5nZXQo Jy9sb2dpbicsIGZvbGxvd19yZWRpcmVjdHM9VHJ1ZSkKICAgICAgICAgICAgIGNzcmZfdG9rZW4g PSBzZWxmLmZldGNoX2NzcmYocmVzKQpAQCAtMTEzLDcgKzExNCw4IEBAIGNsYXNzIFRlc3RDbGll bnQodGVzdGluZy5GbGFza0NsaWVudCk6CiAgICAgICAgICAgICAgICAgZW1haWw9ZW1haWwsIHBh c3N3b3JkPXBhc3N3b3JkLAogICAgICAgICAgICAgICAgIGNzcmZfdG9rZW49Y3NyZl90b2tlbiwK ICAgICAgICAgICAgICksCi0gICAgICAgICAgICBmb2xsb3dfcmVkaXJlY3RzPV9mb2xsb3dfcmVk aXJlY3RzCisgICAgICAgICAgICBmb2xsb3dfcmVkaXJlY3RzPV9mb2xsb3dfcmVkaXJlY3RzLAor ICAgICAgICAgICAgaGVhZGVycz1oZWFkZXJzCiAgICAgICAgICkKICAgICAgICAgc2VsZi5jc3Jm X3Rva2VuID0gY3NyZl90b2tlbgogCmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9ydW50ZXN0 cy5weSBiL3dlYi9yZWdyZXNzaW9uL3J1bnRlc3RzLnB5CmluZGV4IGE2MjM1OGZhYy4uYTY3ODJm MzZlIDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi9ydW50ZXN0cy5weQorKysgYi93ZWIvcmVn cmVzc2lvbi9ydW50ZXN0cy5weQpAQCAtMTE5LDYgKzExOSw4IEBAIGFwcC5jb25maWdbJ1dURl9D U1JGX0VOQUJMRUQnXSA9IFRydWUKICMgQXV0aGVudGljYXRpb24gc291cmNlcwogYXBwLlBHQURN SU5fREVGQVVMVF9BVVRIX1NPVVJDRSA9ICdpbnRlcm5hbCcKIGFwcC5QR0FETUlOX0VYVEVSTkFM X0FVVEhfU09VUkNFID0gJ2xkYXAnCithcHAuUEdBRE1JTl9LRVJCRVJPU19BVVRIX1NPVVJDRSA9 ICdrZXJiZXJvcycKK2FwcC5QR0FETUlOX0xEQVBfQVVUSF9TT1VSQ0UgPSAnbGRhcCcKIAogYXBw LnRlc3RfY2xpZW50X2NsYXNzID0gVGVzdENsaWVudAogdGVzdF9jbGllbnQgPSBhcHAudGVzdF9j bGllbnQoKQpkaWZmIC0tZ2l0IGEveWFybi5sb2NrIGIveWFybi5sb2NrCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZmI1N2NjZDEzCi0tLSAvZGV2L251bGwKKysrIGIveWFy bi5sb2NrCkBAIC0wLDAgKzEsNCBAQAorIyBUSElTIElTIEFOIEFVVE9HRU5FUkFURUQgRklMRS4g RE8gTk9UIEVESVQgVEhJUyBGSUxFIERJUkVDVExZLgorIyB5YXJuIGxvY2tmaWxlIHYxCisKKwo= --00000000000045254a05b70ad7be Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document; name="GSSAPI Authentication - pgAdmin.docx" Content-Disposition: attachment; filename="GSSAPI Authentication - pgAdmin.docx" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kiztyttp1 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 AgAANyYAAAAA --00000000000045254a05b70ad7be--