From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:c151::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id GINJORC3N2B7cAAA0tVLHw (envelope-from ) for ; Thu, 25 Feb 2021 14:41:20 +0000 Received: from aspmx2.migadu.com ([2001:41d0:2:c151::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id 8DMVNRC3N2BMUQAA1q6Kng (envelope-from ) for ; Thu, 25 Feb 2021 14:41:20 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx2.migadu.com (Postfix) with ESMTPS id A5F0615ED3 for ; Thu, 25 Feb 2021 15:41:19 +0100 (CET) Received: from localhost ([::1]:32986 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lFHpO-00068B-KG for larch@yhetil.org; Thu, 25 Feb 2021 09:41:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36898) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lFHp9-000668-Ki for guix-patches@gnu.org; Thu, 25 Feb 2021 09:41:03 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:53821) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lFHp8-0000PV-9s for guix-patches@gnu.org; Thu, 25 Feb 2021 09:41:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lFHp8-000369-7m for guix-patches@gnu.org; Thu, 25 Feb 2021 09:41:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#46771] [PATCH] gnu: Python 3.9: Update to 3.9.2. Resent-From: Greg Hogan Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 25 Feb 2021 14:41:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 46771 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 46771@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.161426403411853 (code B ref -1); Thu, 25 Feb 2021 14:41:02 +0000 Received: (at submit) by debbugs.gnu.org; 25 Feb 2021 14:40:34 +0000 Received: from localhost ([127.0.0.1]:37134 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lFHoZ-00034v-Ng for submit@debbugs.gnu.org; Thu, 25 Feb 2021 09:40:34 -0500 Received: from lists.gnu.org ([209.51.188.17]:60754) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lFHoX-00034n-It for submit@debbugs.gnu.org; Thu, 25 Feb 2021 09:40:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36718) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lFHoX-00059m-AV for guix-patches@gnu.org; Thu, 25 Feb 2021 09:40:25 -0500 Received: from mail-io1-xd2f.google.com ([2607:f8b0:4864:20::d2f]:45800) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lFHoU-0008Ty-40 for guix-patches@gnu.org; Thu, 25 Feb 2021 09:40:25 -0500 Received: by mail-io1-xd2f.google.com with SMTP id a7so6046046iok.12 for ; Thu, 25 Feb 2021 06:40:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=greghogan-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=f7djETXqVSm7OaE4HH6bj6IMxpR1BVT6crkJsS94olI=; b=AsOQY2imq8aSQwnLzqpt+ZpEj1pFQlb17vu6bYhz38xKUMLlWD/QnO3LZvMjlEHipj Ma7s5KL73bVWpJbWCwBYaXPVDOrY+eJI92Q674vrs9xJVAUIepVLzV1vLNaMh+mOyAyb +3zKgLpfdwbE1Ld4zHfR2fHngQiZ3IZS/QgJW2Y9KqvZXFiMqfhEmuIVqwH83nN9kMz8 4Vz1tUU2/5Xy3PYpAQtKomev3oHr6cfqyxbWnKb6vRhvgX8PfADcluKHCUu0cjKWH+8F mryyVyBFCRA97yzsBIkF32MMjfN6Kp4hzlZ9BufRHeL961ldKLlaSu8Wc6XRCgyw5MVn nf6g== 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=f7djETXqVSm7OaE4HH6bj6IMxpR1BVT6crkJsS94olI=; b=r6NVp1IJEhvD0S0Yf1tPXFXXEqpNc19JxAvDmRYHttGz54mjoFTN4cY1xvx7Q9nZY+ PUNvxa02Kl68lgqXLmxNs+XhgvEioQVwEqaG7G7KaH5tisl+77MThoXfQHQFGeusSFp0 CntucXEzvBKD5cy6FlE36WRsuplAYLX7F9162XCjtGJDm//VlWU23bqpZZlT4E96XhaX 4VqBYOlLRBYj6NDifA18jifvndYrpMuG3JDh68sH06WNn2scdjNu94ByFye+VbcfNYUI X+9KBG/mxgxqNTk3F0jMzoK6stwMUovrmQyVm+Hj4pI6UZG+JNm8kPLbzQ3EVZ2q2pPW n9lQ== X-Gm-Message-State: AOAM531d61F799YPeJO9rrkjytdzB4it1vu3dCW46vFRDOeW0gq+zVHF cKe24yAmwvE/U75GqcTvWVpiWlJZ72p31xZYdraLKDdPX1dWp97e X-Google-Smtp-Source: ABdhPJwTS9vaKby25v8hgDiCCGeAMuTEa+ju0aGy5E8OFOyXaahkgMeZweSfZVCNxCwwbaNSmgytHW5FVsMY9bFuqss= X-Received: by 2002:a05:6638:22cd:: with SMTP id j13mr3473614jat.52.1614264020666; Thu, 25 Feb 2021 06:40:20 -0800 (PST) MIME-Version: 1.0 From: Greg Hogan Date: Thu, 25 Feb 2021 09:40:09 -0500 Message-ID: Content-Type: multipart/mixed; boundary="00000000000086ed2605bc2a2116" Received-SPF: none client-ip=2607:f8b0:4864:20::d2f; envelope-from=code@greghogan.com; helo=mail-io1-xd2f.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN X-Migadu-Spam-Score: -1.37 Authentication-Results: aspmx2.migadu.com; dkim=fail ("body hash did not verify") header.d=greghogan-com.20150623.gappssmtp.com header.s=20150623 header.b=AsOQY2im; dmarc=none; spf=pass (aspmx2.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Queue-Id: A5F0615ED3 X-Spam-Score: -1.37 X-Migadu-Scanner: scn0.migadu.com X-TUID: tu/UaWd5h1Zb --00000000000086ed2605bc2a2116 Content-Type: multipart/alternative; boundary="00000000000086ed2305bc2a2114" --00000000000086ed2305bc2a2114 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable >From 7388fdcc629074e80ad88714a22f5eb5e8e5fd35 Mon Sep 17 00:00:00 2001 From: Greg Hogan Date: Wed, 24 Feb 2021 14:12:28 +0000 Subject: [PATCH] gnu: Python 3.9: Update to 3.9.2. * gnu/packages/python.scm (python-3.9): Update to 3.9.2. * gnu/packages/patches/python-3.9-CVE-2021-3177.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - .../patches/python-3.9-CVE-2021-3177.patch | 194 ------------------ gnu/packages/python.scm | 6 +- 3 files changed, 3 insertions(+), 198 deletions(-) delete mode 100644 gnu/packages/patches/python-3.9-CVE-2021-3177.patch diff --git a/gnu/local.mk b/gnu/local.mk index 8d46cda639..8d1465158a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1526,7 +1526,6 @@ dist_patch_DATA =3D \ %D%/packages/patches/python-3.8-fix-tests.patch \ %D%/packages/patches/python-3.8-CVE-2021-3177.patch \ %D%/packages/patches/python-3.9-fix-tests.patch \ - %D%/packages/patches/python-3.9-CVE-2021-3177.patch \ %D%/packages/patches/python-CVE-2018-14647.patch \ %D%/packages/patches/python-CVE-2020-26116.patch \ %D%/packages/patches/python-aionotify-0.2.0-py3.8.patch \ diff --git a/gnu/packages/patches/python-3.9-CVE-2021-3177.patch b/gnu/packages/patches/python-3.9-CVE-2021-3177.patch deleted file mode 100644 index 155f17deca..0000000000 --- a/gnu/packages/patches/python-3.9-CVE-2021-3177.patch +++ /dev/null @@ -1,194 +0,0 @@ -Fix CVE-2021-3177 for Python 3.9: - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=3DCVE-2021-3177 - -Patch copied from upstream source repository: - - https://github.com/python/cpython/commit/c347cbe694743cee120457aa6626712f77= 99a932 - -From c347cbe694743cee120457aa6626712f7799a932 Mon Sep 17 00:00:00 2001 -From: "Miss Islington (bot)" - <31488909+miss-islington@users.noreply.github.com> -Date: Mon, 18 Jan 2021 13:29:31 -0800 -Subject: [PATCH] closes bpo-42938: Replace snprintf with Python unicode - formatting in ctypes param reprs. (GH-24247) - -(cherry picked from commit 916610ef90a0d0761f08747f7b0905541f0977c7) - -Co-authored-by: Benjamin Peterson - -Co-authored-by: Benjamin Peterson ---- - Lib/ctypes/test/test_parameters.py | 43 ++++++++++++++++ - .../2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst | 2 + - Modules/_ctypes/callproc.c | 51 +++++++------------ - 3 files changed, 64 insertions(+), 32 deletions(-) - create mode 100644 Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst - -diff --git a/Lib/ctypes/test/test_parameters.py b/Lib/ctypes/test/test_parameters.py -index e4c25fd880cef..531894fdec838 100644 ---- a/Lib/ctypes/test/test_parameters.py -+++ b/Lib/ctypes/test/test_parameters.py -@@ -201,6 +201,49 @@ def __dict__(self): - with self.assertRaises(ZeroDivisionError): - WorseStruct().__setstate__({}, b'foo') - -+ def test_parameter_repr(self): -+ from ctypes import ( -+ c_bool, -+ c_char, -+ c_wchar, -+ c_byte, -+ c_ubyte, -+ c_short, -+ c_ushort, -+ c_int, -+ c_uint, -+ c_long, -+ c_ulong, -+ c_longlong, -+ c_ulonglong, -+ c_float, -+ c_double, -+ c_longdouble, -+ c_char_p, -+ c_wchar_p, -+ c_void_p, -+ ) -+ self.assertRegex(repr(c_bool.from_param(True)), r"^$") -+ self.assertEqual(repr(c_char.from_param(97)), "") -+ self.assertRegex(repr(c_wchar.from_param('a')), r"^$") -+ self.assertEqual(repr(c_byte.from_param(98)), ""= ) -+ self.assertEqual(repr(c_ubyte.from_param(98)), "") -+ self.assertEqual(repr(c_short.from_param(511)), "") -+ self.assertEqual(repr(c_ushort.from_param(511)), "") -+ self.assertRegex(repr(c_int.from_param(20000)), r"^$") -+ self.assertRegex(repr(c_uint.from_param(20000)), r"^$") -+ self.assertRegex(repr(c_long.from_param(20000)), r"^$") -+ self.assertRegex(repr(c_ulong.from_param(20000)), r"^$") -+ self.assertRegex(repr(c_longlong.from_param(20000)), r"^$") -+ self.assertRegex(repr(c_ulonglong.from_param(20000)), r"^$") -+ self.assertEqual(repr(c_float.from_param(1.5)), "") -+ self.assertEqual(repr(c_double.from_param(1.5)), "") -+ self.assertEqual(repr(c_double.from_param(1e300)), "") -+ self.assertRegex(repr(c_longdouble.from_param(1.5)), r"^$") -+ self.assertRegex(repr(c_char_p.from_param(b'hihi')), "^$") -+ self.assertRegex(repr(c_wchar_p.from_param('hihi')), "^$") -+ self.assertRegex(repr(c_void_p.from_param(0x12)), r"^$") -+ - ################################################################ - - if __name__ =3D=3D '__main__': -diff --git a/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst -new file mode 100644 -index 0000000000000..7df65a156feab ---- /dev/null -+++ b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst -@@ -0,0 +1,2 @@ -+Avoid static buffers when computing the repr of :class:`ctypes.c_double` and -+:class:`ctypes.c_longdouble` values. -diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c -index b0a36a30248f7..f2506de54498e 100644 ---- a/Modules/_ctypes/callproc.c -+++ b/Modules/_ctypes/callproc.c -@@ -489,58 +489,47 @@ is_literal_char(unsigned char c) - static PyObject * - PyCArg_repr(PyCArgObject *self) - { -- char buffer[256]; - switch(self->tag) { - case 'b': - case 'B': -- sprintf(buffer, "", -+ return PyUnicode_FromFormat("", - self->tag, self->value.b); -- break; - case 'h': - case 'H': -- sprintf(buffer, "", -+ return PyUnicode_FromFormat("", - self->tag, self->value.h); -- break; - case 'i': - case 'I': -- sprintf(buffer, "", -+ return PyUnicode_FromFormat("", - self->tag, self->value.i); -- break; - case 'l': - case 'L': -- sprintf(buffer, "", -+ return PyUnicode_FromFormat("", - self->tag, self->value.l); -- break; - - case 'q': - case 'Q': -- sprintf(buffer, --#ifdef MS_WIN32 -- "", --#else -- "", --#endif -+ return PyUnicode_FromFormat("", - self->tag, self->value.q); -- break; - case 'd': -- sprintf(buffer, "", -- self->tag, self->value.d); -- break; -- case 'f': -- sprintf(buffer, "", -- self->tag, self->value.f); -- break; -- -+ case 'f': { -+ PyObject *f =3D PyFloat_FromDouble((self->tag =3D=3D 'f') ? self->value.f : self->value.d); -+ if (f =3D=3D NULL) { -+ return NULL; -+ } -+ PyObject *result =3D PyUnicode_FromFormat("", self->tag, f); -+ Py_DECREF(f); -+ return result; -+ } - case 'c': - if (is_literal_char((unsigned char)self->value.c)) { -- sprintf(buffer, "", -+ return PyUnicode_FromFormat("", - self->tag, self->value.c); - } - else { -- sprintf(buffer, "", -+ return PyUnicode_FromFormat("", - self->tag, (unsigned char)self->value.c); - } -- break; - - /* Hm, are these 'z' and 'Z' codes useful at all? - Shouldn't they be replaced by the functionality of c_string -@@ -549,22 +538,20 @@ PyCArg_repr(PyCArgObject *self) - case 'z': - case 'Z': - case 'P': -- sprintf(buffer, "", -+ return PyUnicode_FromFormat("", - self->tag, self->value.p); - break; - - default: - if (is_literal_char((unsigned char)self->tag)) { -- sprintf(buffer, "", -+ return PyUnicode_FromFormat("", - (unsigned char)self->tag, (void *)self); - } - else { -- sprintf(buffer, "", -+ return PyUnicode_FromFormat("", - (unsigned char)self->tag, (void *)self); - } -- break; - } -- return PyUnicode_FromString(buffer); - } - - static PyMemberDef PyCArgType_members[] =3D { diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 5c5be0d78c..9d97050c66 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -59,6 +59,7 @@ ;;; Copyright =C2=A9 2018 Vagrant Cascadian ;;; Copyright =C2=A9 2019 Tanguy Le Carrour ;;; Copyright =C2=A9 2020 Jan (janneke) Nieuwenhuizen +;;; Copyright =C2=A9 2021 Greg Hogan ;;; ;;; This file is part of GNU Guix. ;;; @@ -533,19 +534,18 @@ data types.") (define-public python-3.9 (package (inherit python-3.8) (name "python-next") - (version "3.9.1") + (version "3.9.2") (source (origin (method url-fetch) (uri (string-append "https://www.python.org/ftp/python/" version "/Python-" version ".tar.xz")) (patches (search-patches "python-3.9-fix-tests.patch" - "python-3.9-CVE-2021-3177.patch" "python-3-deterministic-build-info.patch" "python-3-search-paths.patch")) (sha256 (base32 - "1zq3k4ymify5ig739zyvx9s2ainvchxb1zpy139z74krr653y74r")) + "0z94vv5qhlwvcgc4sy9sdiqs0220s84wx3b62vslh5419z2k881w")) (modules '((guix build utils))) (snippet '(begin --=20 2.30.1 --00000000000086ed2305bc2a2114 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
From 7388fdcc629074e80ad88714a22f5eb= 5e8e5fd35 Mon Sep 17 00:00:00 2001
From: Greg Hogan <code@greghogan.com>
Date: W= ed, 24 Feb 2021 14:12:28 +0000
Subject: [PATCH] gnu: Python 3.9: = Update to 3.9.2.

* gnu/packages/python.scm (python= -3.9): Update to 3.9.2.
* gnu/packages/patches/python-3.9-CVE-202= 1-3177.patch: Delete file.
* gnu/loca= l.mk (dist_patch_DATA): Remove it.
---
=C2=A0gnu/local.mk =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0| =C2=A0 1 -
=C2=A0.../patches/python-3.9-CVE-2021-3177= .patch =C2=A0 =C2=A0| 194 ------------------
=C2=A0gnu/packages/p= ython.scm =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 | =C2=A0 6 +-
=C2=A03 files changed, 3 insertions(+= ), 198 deletions(-)
=C2=A0delete mode 100644 gnu/packages/patches= /python-3.9-CVE-2021-3177.patch

diff --git a/gnu/<= a href=3D"http://local.mk">local.mk b/gnu/l= ocal.mk
index 8d46cda639..8d1465158a 100644
--- a/g= nu/local.mk
+++ b/gnu/local.mk
@@ -1526,7 +1526,6 @@ dist_patch_DA= TA =3D = \
=C2=A0 =C2=A0%D%/packages/patches/python-3.8-fix-tests.p= atch \
=C2=A0 =C2=A0%D%/packages/patches/python-3.8-CVE-2021-3177.pat= ch \=
=C2=A0 =C2=A0%D%/packages/patches/python-3.9-fix-tests.patch \
=
- =C2=A0%D%/packages/patches/python-3.9-CVE-2021-3177.patch \
= =C2=A0 =C2=A0%D%/packages/patches/python-CVE-2018-14647.patch \
=C2= =A0 =C2=A0%D%/packages/patches/python-CVE-2020-26116.patch \
=C2=A0 = =C2=A0%D%/packages/patches/python-aionotify-0.2.0-py3.8.patch \
diff -= -git a/gnu/packages/patches/python-3.9-CVE-2021-3177.patch b/gnu/packages/p= atches/python-3.9-CVE-2021-3177.patch
deleted file mode 100644
index 155f17deca..0000000000
--- a/gnu/packages/patches/p= ython-3.9-CVE-2021-3177.patch
+++ /dev/null
@@ -1,194 += 0,0 @@
-Fix CVE-2021-3177 for Python 3.9:
-
-
-Patch copied from upstream source repository:
-
-
-From c347cbe6= 94743cee120457aa6626712f7799a932 Mon Sep 17 00:00:00 2001
-From: = "Miss Islington (bot)"
-Date: Mon, 18 Jan 2021 13:29:31 -0800<= /div>
-Subject: [PATCH] closes bpo-42938: Replace snprintf with Python = unicode
- formatting in ctypes param reprs. (GH-24247)
= -
-(cherry picked from commit 916610ef90a0d0761f08747f7b0905541f0= 977c7)
-
-Co-authored-by: Benjamin Peterson <benjamin@python.org>
-
-Co-authored-by: Benjamin Peterson <benjamin@python.org>
----
- Lib/ctypes= /test/test_parameters.py =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 43 ++++= ++++++++++++
- .../2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst =C2= =A0| =C2=A02 +
- Modules/_ctypes/callproc.c =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 51 +++++++------------
- 3 files changed, 64 insertions(+), 32 deletions(-)
- cr= eate mode 100644 Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Z= n4Mp.rst
-
-diff --git a/Lib/ctypes/test/test_parameter= s.py b/Lib/ctypes/test/test_parameters.py
-index e4c25fd880cef..5= 31894fdec838 100644
---- a/Lib/ctypes/test/test_parameters.py
-+++ b/Lib/ctypes/test/test_parameters.py
-@@ -201,6 +201,= 49 @@ def __dict__(self):
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 with self= .assertRaises(ZeroDivisionError):
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 WorseStruct().__setstate__({}, b'foo')
-=C2= =A0
-+ =C2=A0 =C2=A0def test_parameter_repr(self):
-+ = =C2=A0 =C2=A0 =C2=A0 =C2=A0from ctypes import (
-+ =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0c_bool,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0c_char,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0c_wchar,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c_byte,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c_ubyte,
-+ = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c_short,
-+ =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c_ushort,
-+ =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0c_int,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0c_uint,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c_long,=
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c_ulong,
-= + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c_longlong,
-+ =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c_ulonglong,
-+ =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0c_float,
-+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0c_double,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0c_longdouble,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c= _char_p,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c_wchar_p,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0c_void_p,
-+= =C2=A0 =C2=A0 =C2=A0 =C2=A0)
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.= assertRegex(repr(c_bool.from_param(True)), r"^<cparam '\?' = at 0x[A-Fa-f0-9]+>$")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.= assertEqual(repr(c_char.from_param(97)), "<cparam 'c' ('= ;a')>")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertRege= x(repr(c_wchar.from_param('a')), r"^<cparam 'u' at = 0x[A-Fa-f0-9]+>$")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.ass= ertEqual(repr(c_byte.from_param(98)), "<cparam 'b' (98)>= ")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertEqual(repr(c_uby= te.from_param(98)), "<cparam 'B' (98)>")
= -+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertEqual(repr(c_short.from_param(511)= ), "<cparam 'h' (511)>")
-+ =C2=A0 =C2=A0= =C2=A0 =C2=A0self.assertEqual(repr(c_ushort.from_param(511)), "<cp= aram 'H' (511)>")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0s= elf.assertRegex(repr(c_int.from_param(20000)), r"^<cparam '[li]= ' \(20000\)>$")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.as= sertRegex(repr(c_uint.from_param(20000)), r"^<cparam '[LI]'= \(20000\)>$")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertR= egex(repr(c_long.from_param(20000)), r"^<cparam '[li]' \(20= 000\)>$")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertRegex(= repr(c_ulong.from_param(20000)), r"^<cparam '[LI]' \(20000\= )>$")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertRegex(repr= (c_longlong.from_param(20000)), r"^<cparam '[liq]' \(20000\= )>$")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertRegex(repr= (c_ulonglong.from_param(20000)), r"^<cparam '[LIQ]' \(20000= \)>$")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertEqual(rep= r(c_float.from_param(1.5)), "<cparam 'f' (1.5)>")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertEqual(repr(c_double.from_= param(1.5)), "<cparam 'd' (1.5)>")
-+ =C2= =A0 =C2=A0 =C2=A0 =C2=A0self.assertEqual(repr(c_double.from_param(1e300)), = "<cparam 'd' (1e+300)>")
-+ =C2=A0 =C2=A0= =C2=A0 =C2=A0self.assertRegex(repr(c_longdouble.from_param(1.5)), r"^= <cparam ('d' \(1.5\)|'g' at 0x[A-Fa-f0-9]+)>$")<= /div>
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertRegex(repr(c_char_p.from= _param(b'hihi')), "^<cparam 'z' \(0x[A-Fa-f0-9]+\)&= gt;$")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assertRegex(repr(c= _wchar_p.from_param('hihi')), "^<cparam 'Z' \(0x[A-= Fa-f0-9]+\)>$")
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0self.assert= Regex(repr(c_void_p.from_param(0x12)), r"^<cparam 'P' \(0x0= *12\)>$")
-+
- ################################= ################################
-=C2=A0
- if __name__ = =3D=3D '__main__':
-diff --git a/Misc/NEWS.d/next/Securit= y/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst b/Misc/NEWS.d/next/Security/2021= -01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-new file mode 100644
<= div>-index 0000000000000..7df65a156feab
---- /dev/null
= -+++ b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-@@ -0,0 +1,2 @@
-+Avoid static buffers when computing t= he repr of :class:`ctypes.c_double` and
-+:class:`ctypes.c_longdo= uble` values.
-diff --git a/Modules/_ctypes/callproc.c b/Modules/= _ctypes/callproc.c
-index b0a36a30248f7..f2506de54498e 100644
---- a/Modules/_ctypes/callproc.c
-+++ b/Modules/_ctypes/c= allproc.c
-@@ -489,58 +489,47 @@ is_literal_char(unsigned char c)=
- static PyObject *
- PyCArg_repr(PyCArgObject *self)<= /div>
- {
-- =C2=A0 =C2=A0char buffer[256];
- =C2= =A0 =C2=A0 switch(self->tag) {
- =C2=A0 =C2=A0 case 'b'= ;:
- =C2=A0 =C2=A0 case 'B':
-- =C2=A0 =C2=A0 = =C2=A0 =C2=A0sprintf(buffer, "<cparam '%c' (%d)>",<= /div>
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0return PyUnicode_FromFormat("&= lt;cparam '%c' (%d)>",
- =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 self->tag, self->value.b);
-- =C2=A0 =C2= =A0 =C2=A0 =C2=A0break;
- =C2=A0 =C2=A0 case 'h':
- =C2=A0 =C2=A0 case 'H':
-- =C2=A0 =C2=A0 =C2=A0 =C2= =A0sprintf(buffer, "<cparam '%c' (%d)>",
= -+ =C2=A0 =C2=A0 =C2=A0 =C2=A0return PyUnicode_FromFormat("<cparam = '%c' (%d)>",
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 self->tag, self->value.h);
-- =C2=A0 =C2=A0 =C2=A0 = =C2=A0break;
- =C2=A0 =C2=A0 case 'i':
- =C2=A0= =C2=A0 case 'I':
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0sprintf(b= uffer, "<cparam '%c' (%d)>",
-+ =C2=A0 = =C2=A0 =C2=A0 =C2=A0return PyUnicode_FromFormat("<cparam '%c= 9; (%d)>",
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 se= lf->tag, self->value.i);
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0brea= k;
- =C2=A0 =C2=A0 case 'l':
- =C2=A0 =C2=A0 ca= se 'L':
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0sprintf(buffer, &qu= ot;<cparam '%c' (%ld)>",
-+ =C2=A0 =C2=A0 =C2= =A0 =C2=A0return PyUnicode_FromFormat("<cparam '%c' (%ld)&g= t;",
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 self->ta= g, self->value.l);
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
<= div>-=C2=A0
- =C2=A0 =C2=A0 case 'q':
- =C2=A0 = =C2=A0 case 'Q':
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0sprintf(bu= ffer,
--#ifdef MS_WIN32
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0"<cparam '%c' (%I64d)>",
--#= else
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"<cparam= '%c' (%lld)>",
--#endif
-+ =C2=A0 =C2= =A0 =C2=A0 =C2=A0return PyUnicode_FromFormat("<cparam '%c' = (%lld)>",
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sel= f->tag, self->value.q);
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0break= ;
- =C2=A0 =C2=A0 case 'd':
-- =C2=A0 =C2=A0 = =C2=A0 =C2=A0sprintf(buffer, "<cparam '%c' (%f)>",<= /div>
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self->tag, self-&g= t;value.d);
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
-- =C2= =A0 =C2=A0case 'f':
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0sprintf= (buffer, "<cparam '%c' (%f)>",
-- =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self->tag, self->value.f);
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
--
-+ =C2=A0 =C2= =A0case 'f': {
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0PyObject *f = =3D PyFloat_FromDouble((self->tag =3D=3D 'f') ? self->value.f= : self->value.d);
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0if (f =3D=3D = NULL) {
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return NULL;<= /div>
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0}
-+ =C2=A0 =C2=A0 =C2=A0= =C2=A0PyObject *result =3D PyUnicode_FromFormat("<cparam '%c&#= 39; (%R)>", self->tag, f);
-+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0Py_DECREF(f);
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0return result;
-+ =C2=A0 =C2=A0}
- =C2=A0 =C2=A0 case 'c':
<= div>- =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (is_literal_char((unsigned char)self-&= gt;value.c)) {
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0sprint= f(buffer, "<cparam '%c' ('%c')>",
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return PyUnicode_FromFormat(&q= uot;<cparam '%c' ('%c')>",
- =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 self->tag, self->val= ue.c);
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
- =C2=A0 =C2=A0 = =C2=A0 =C2=A0 else {
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= sprintf(buffer, "<cparam '%c' ('\\x%02x')>"= ,
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return PyUnicode_Fr= omFormat("<cparam '%c' ('\\x%02x')>",
=
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 self->tag= , (unsigned char)self->value.c);
- =C2=A0 =C2=A0 =C2=A0 =C2=A0= }
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
-=C2=A0
- /* Hm, are these 'z' and 'Z' codes useful at all?
- =C2=A0 =C2=A0Shouldn't they be replaced by the functionality of= c_string
-@@ -549,22 +538,20 @@ PyCArg_repr(PyCArgObject *self)<= /div>
- =C2=A0 =C2=A0 case 'z':
- =C2=A0 =C2=A0 case = 'Z':
- =C2=A0 =C2=A0 case 'P':
-- =C2= =A0 =C2=A0 =C2=A0 =C2=A0sprintf(buffer, "<cparam '%c' (%p)&= gt;",
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0return PyUnicode_FromFor= mat("<cparam '%c' (%p)>",
- =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 self->tag, self->value.p);
- = =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
-=C2=A0
- =C2=A0 =C2= =A0 default:
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (is_literal_char((u= nsigned char)self->tag)) {
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0sprintf(buffer, "<cparam '%c' at %p>",
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return PyUnicode_FromFo= rmat("<cparam '%c' at %p>",
- =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unsigned char)self->tag, = (void *)self);
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
- =C2=A0= =C2=A0 =C2=A0 =C2=A0 else {
-- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0sprintf(buffer, "<cparam 0x%02x at %p>",
-+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return PyUnicode_FromFormat(&= quot;<cparam 0x%02x at %p>",
- =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unsigned char)self->tag, (void *)sel= f);
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
-- =C2=A0 =C2=A0 = =C2=A0 =C2=A0break;
- =C2=A0 =C2=A0 }
-- =C2=A0 =C2=A0r= eturn PyUnicode_FromString(buffer);
- }
-=C2=A0
- static PyMemberDef PyCArgType_members[] =3D {
diff --git a/g= nu/packages/python.scm b/gnu/packages/python.scm
index 5c5be0d78c= ..9d97050c66 100644
--- a/gnu/packages/python.scm
+++ b= /gnu/packages/python.scm
@@ -59,6 +59,7 @@
=C2=A0;;; Co= pyright =C2=A9 2018 Vagrant Cascadian <vagrant@debian.org>
=C2=A0;;; Copyright =C2=A9 2019 T= anguy Le Carrour <tanguy@bionela= nd.org>
=C2=A0;;; Copyright =C2=A9 2020 Jan (janneke) Nieu= wenhuizen <janneke@gnu.org>
+;;; Copyright =C2=A9 2021 Greg Hogan <code@greghogan.com>
=C2=A0;;;
=C2= =A0;;; This file is part of GNU Guix.
=C2=A0;;;
@@ -533= ,19 +534,18 @@ data types.")
=C2=A0(define-public python-3.9=
=C2=A0 =C2=A0(package (inherit python-3.8)
=C2=A0 =C2= =A0 =C2=A0(name "python-next")
- =C2=A0 =C2=A0(version = "3.9.1")
+ =C2=A0 =C2=A0(version "3.9.2")
=C2=A0 =C2=A0 =C2=A0(source (origin
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(method url-fetch)
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(uri (string-append "https://www.python.org/ftp/pytho= n/"
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ve= rsion "/Python-" version ".tar.xz"))
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(patches (search-patches
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0"python-3.9-fix-tests.patch"
- = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0"python-3.9-CVE-2021-3177.patch"
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0"python-3-deterministic-build-info.patch"
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0"python-3-search-paths.patch"))
=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(sha256
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (base32
- =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"1zq3k4ymify5ig739zyvx9s2ain= vchxb1zpy139z74krr653y74r"))
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0"0z94vv5qhlwvcgc4sy9sdiqs0220s84wx3b62vslh5= 419z2k881w"))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(modules '((guix build utils)))
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(snippet
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 '(begin
--=C2=A0
=
2.30.1
--00000000000086ed2305bc2a2114-- --00000000000086ed2605bc2a2116 Content-Type: application/octet-stream; name="0001-gnu-Python-3.9-Update-to-3.9.2.patch" Content-Disposition: attachment; filename="0001-gnu-Python-3.9-Update-to-3.9.2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_klkz2mj40 RnJvbSA3Mzg4ZmRjYzYyOTA3NGU4MGFkODg3MTRhMjJmNWViNWU4ZTVmZDM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEhvZ2FuIDxjb2RlQGdyZWdob2dhbi5jb20+CkRhdGU6 IFdlZCwgMjQgRmViIDIwMjEgMTQ6MTI6MjggKzAwMDAKU3ViamVjdDogW1BBVENIXSBnbnU6IFB5 dGhvbiAzLjk6IFVwZGF0ZSB0byAzLjkuMi4KCiogZ251L3BhY2thZ2VzL3B5dGhvbi5zY20gKHB5 dGhvbi0zLjkpOiBVcGRhdGUgdG8gMy45LjIuCiogZ251L3BhY2thZ2VzL3BhdGNoZXMvcHl0aG9u LTMuOS1DVkUtMjAyMS0zMTc3LnBhdGNoOiBEZWxldGUgZmlsZS4KKiBnbnUvbG9jYWwubWsgKGRp c3RfcGF0Y2hfREFUQSk6IFJlbW92ZSBpdC4KLS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDEgLQogLi4uL3BhdGNoZXMvcHl0aG9uLTMuOS1DVkUt MjAyMS0zMTc3LnBhdGNoICAgIHwgMTk0IC0tLS0tLS0tLS0tLS0tLS0tLQogZ251L3BhY2thZ2Vz L3B5dGhvbi5zY20gICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICstCiAzIGZpbGVzIGNoYW5n ZWQsIDMgaW5zZXJ0aW9ucygrKSwgMTk4IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0 IGdudS9wYWNrYWdlcy9wYXRjaGVzL3B5dGhvbi0zLjktQ1ZFLTIwMjEtMzE3Ny5wYXRjaAoKZGlm ZiAtLWdpdCBhL2dudS9sb2NhbC5tayBiL2dudS9sb2NhbC5tawppbmRleCA4ZDQ2Y2RhNjM5Li44 ZDE0NjUxNThhIDEwMDY0NAotLS0gYS9nbnUvbG9jYWwubWsKKysrIGIvZ251L2xvY2FsLm1rCkBA IC0xNTI2LDcgKzE1MjYsNiBAQCBkaXN0X3BhdGNoX0RBVEEgPQkJCQkJCVwKICAgJUQlL3BhY2th Z2VzL3BhdGNoZXMvcHl0aG9uLTMuOC1maXgtdGVzdHMucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2Vz L3BhdGNoZXMvcHl0aG9uLTMuOC1DVkUtMjAyMS0zMTc3LnBhdGNoCQlcCiAgICVEJS9wYWNrYWdl cy9wYXRjaGVzL3B5dGhvbi0zLjktZml4LXRlc3RzLnBhdGNoCQlcCi0gICVEJS9wYWNrYWdlcy9w YXRjaGVzL3B5dGhvbi0zLjktQ1ZFLTIwMjEtMzE3Ny5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMv cGF0Y2hlcy9weXRob24tQ1ZFLTIwMTgtMTQ2NDcucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3Bh dGNoZXMvcHl0aG9uLUNWRS0yMDIwLTI2MTE2LnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRj aGVzL3B5dGhvbi1haW9ub3RpZnktMC4yLjAtcHkzLjgucGF0Y2gJXApkaWZmIC0tZ2l0IGEvZ251 L3BhY2thZ2VzL3BhdGNoZXMvcHl0aG9uLTMuOS1DVkUtMjAyMS0zMTc3LnBhdGNoIGIvZ251L3Bh Y2thZ2VzL3BhdGNoZXMvcHl0aG9uLTMuOS1DVkUtMjAyMS0zMTc3LnBhdGNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAxNTVmMTdkZWNhLi4wMDAwMDAwMDAwCi0tLSBhL2dudS9wYWNr YWdlcy9wYXRjaGVzL3B5dGhvbi0zLjktQ1ZFLTIwMjEtMzE3Ny5wYXRjaAorKysgL2Rldi9udWxs CkBAIC0xLDE5NCArMCwwIEBACi1GaXggQ1ZFLTIwMjEtMzE3NyBmb3IgUHl0aG9uIDMuOToKLQot aHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3ZlbmFtZS5jZ2k/bmFtZT1DVkUtMjAyMS0z MTc3Ci0KLVBhdGNoIGNvcGllZCBmcm9tIHVwc3RyZWFtIHNvdXJjZSByZXBvc2l0b3J5OgotCi1o dHRwczovL2dpdGh1Yi5jb20vcHl0aG9uL2NweXRob24vY29tbWl0L2MzNDdjYmU2OTQ3NDNjZWUx MjA0NTdhYTY2MjY3MTJmNzc5OWE5MzIKLQotRnJvbSBjMzQ3Y2JlNjk0NzQzY2VlMTIwNDU3YWE2 NjI2NzEyZjc3OTlhOTMyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogIk1pc3MgSXNs aW5ndG9uIChib3QpIgotIDwzMTQ4ODkwOSttaXNzLWlzbGluZ3RvbkB1c2Vycy5ub3JlcGx5Lmdp dGh1Yi5jb20+Ci1EYXRlOiBNb24sIDE4IEphbiAyMDIxIDEzOjI5OjMxIC0wODAwCi1TdWJqZWN0 OiBbUEFUQ0hdIGNsb3NlcyBicG8tNDI5Mzg6IFJlcGxhY2Ugc25wcmludGYgd2l0aCBQeXRob24g dW5pY29kZQotIGZvcm1hdHRpbmcgaW4gY3R5cGVzIHBhcmFtIHJlcHJzLiAoR0gtMjQyNDcpCi0K LShjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDkxNjYxMGVmOTBhMGQwNzYxZjA4NzQ3ZjdiMDkw NTU0MWYwOTc3YzcpCi0KLUNvLWF1dGhvcmVkLWJ5OiBCZW5qYW1pbiBQZXRlcnNvbiA8YmVuamFt aW5AcHl0aG9uLm9yZz4KLQotQ28tYXV0aG9yZWQtYnk6IEJlbmphbWluIFBldGVyc29uIDxiZW5q YW1pbkBweXRob24ub3JnPgotLS0tCi0gTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGFyYW1ldGVycy5w eSAgICAgICAgICAgIHwgNDMgKysrKysrKysrKysrKysrKwotIC4uLi8yMDIxLTAxLTE4LTA5LTI3 LTMxLmJwby00MjkzOC40Wm40TXAucnN0ICB8ICAyICsKLSBNb2R1bGVzL19jdHlwZXMvY2FsbHBy b2MuYyAgICAgICAgICAgICAgICAgICAgfCA1MSArKysrKysrLS0tLS0tLS0tLS0tCi0gMyBmaWxl cyBjaGFuZ2VkLCA2NCBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKLSBjcmVhdGUgbW9k ZSAxMDA2NDQgTWlzYy9ORVdTLmQvbmV4dC9TZWN1cml0eS8yMDIxLTAxLTE4LTA5LTI3LTMxLmJw by00MjkzOC40Wm40TXAucnN0Ci0KLWRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9w YXJhbWV0ZXJzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGFyYW1ldGVycy5weQotaW5kZXgg ZTRjMjVmZDg4MGNlZi4uNTMxODk0ZmRlYzgzOCAxMDA2NDQKLS0tLSBhL0xpYi9jdHlwZXMvdGVz dC90ZXN0X3BhcmFtZXRlcnMucHkKLSsrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRl cnMucHkKLUBAIC0yMDEsNiArMjAxLDQ5IEBAIGRlZiBfX2RpY3RfXyhzZWxmKToKLSAgICAgICAg IHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgotICAgICAgICAgICAg IFdvcnNlU3RydWN0KCkuX19zZXRzdGF0ZV9fKHt9LCBiJ2ZvbycpCi0gCi0rICAgIGRlZiB0ZXN0 X3BhcmFtZXRlcl9yZXByKHNlbGYpOgotKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0ICgKLSsg ICAgICAgICAgICBjX2Jvb2wsCi0rICAgICAgICAgICAgY19jaGFyLAotKyAgICAgICAgICAgIGNf d2NoYXIsCi0rICAgICAgICAgICAgY19ieXRlLAotKyAgICAgICAgICAgIGNfdWJ5dGUsCi0rICAg ICAgICAgICAgY19zaG9ydCwKLSsgICAgICAgICAgICBjX3VzaG9ydCwKLSsgICAgICAgICAgICBj X2ludCwKLSsgICAgICAgICAgICBjX3VpbnQsCi0rICAgICAgICAgICAgY19sb25nLAotKyAgICAg ICAgICAgIGNfdWxvbmcsCi0rICAgICAgICAgICAgY19sb25nbG9uZywKLSsgICAgICAgICAgICBj X3Vsb25nbG9uZywKLSsgICAgICAgICAgICBjX2Zsb2F0LAotKyAgICAgICAgICAgIGNfZG91Ymxl LAotKyAgICAgICAgICAgIGNfbG9uZ2RvdWJsZSwKLSsgICAgICAgICAgICBjX2NoYXJfcCwKLSsg ICAgICAgICAgICBjX3djaGFyX3AsCi0rICAgICAgICAgICAgY192b2lkX3AsCi0rICAgICAgICAp Ci0rICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoY19ib29sLmZyb21fcGFyYW0oVHJ1ZSkp LCByIl48Y3BhcmFtICdcPycgYXQgMHhbQS1GYS1mMC05XSs+JCIpCi0rICAgICAgICBzZWxmLmFz c2VydEVxdWFsKHJlcHIoY19jaGFyLmZyb21fcGFyYW0oOTcpKSwgIjxjcGFyYW0gJ2MnICgnYScp PiIpCi0rICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoY193Y2hhci5mcm9tX3BhcmFtKCdh JykpLCByIl48Y3BhcmFtICd1JyBhdCAweFtBLUZhLWYwLTldKz4kIikKLSsgICAgICAgIHNlbGYu YXNzZXJ0RXF1YWwocmVwcihjX2J5dGUuZnJvbV9wYXJhbSg5OCkpLCAiPGNwYXJhbSAnYicgKDk4 KT4iKQotKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNfdWJ5dGUuZnJvbV9wYXJhbSg5 OCkpLCAiPGNwYXJhbSAnQicgKDk4KT4iKQotKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXBy KGNfc2hvcnQuZnJvbV9wYXJhbSg1MTEpKSwgIjxjcGFyYW0gJ2gnICg1MTEpPiIpCi0rICAgICAg ICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY191c2hvcnQuZnJvbV9wYXJhbSg1MTEpKSwgIjxjcGFy YW0gJ0gnICg1MTEpPiIpCi0rICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoY19pbnQuZnJv bV9wYXJhbSgyMDAwMCkpLCByIl48Y3BhcmFtICdbbGldJyBcKDIwMDAwXCk+JCIpCi0rICAgICAg ICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoY191aW50LmZyb21fcGFyYW0oMjAwMDApKSwgciJePGNw YXJhbSAnW0xJXScgXCgyMDAwMFwpPiQiKQotKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXBy KGNfbG9uZy5mcm9tX3BhcmFtKDIwMDAwKSksIHIiXjxjcGFyYW0gJ1tsaV0nIFwoMjAwMDBcKT4k IikKLSsgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihjX3Vsb25nLmZyb21fcGFyYW0oMjAw MDApKSwgciJePGNwYXJhbSAnW0xJXScgXCgyMDAwMFwpPiQiKQotKyAgICAgICAgc2VsZi5hc3Nl cnRSZWdleChyZXByKGNfbG9uZ2xvbmcuZnJvbV9wYXJhbSgyMDAwMCkpLCByIl48Y3BhcmFtICdb bGlxXScgXCgyMDAwMFwpPiQiKQotKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGNfdWxv bmdsb25nLmZyb21fcGFyYW0oMjAwMDApKSwgciJePGNwYXJhbSAnW0xJUV0nIFwoMjAwMDBcKT4k IikKLSsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjX2Zsb2F0LmZyb21fcGFyYW0oMS41 KSksICI8Y3BhcmFtICdmJyAoMS41KT4iKQotKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXBy KGNfZG91YmxlLmZyb21fcGFyYW0oMS41KSksICI8Y3BhcmFtICdkJyAoMS41KT4iKQotKyAgICAg ICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNfZG91YmxlLmZyb21fcGFyYW0oMWUzMDApKSwgIjxj cGFyYW0gJ2QnICgxZSszMDApPiIpCi0rICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoY19s b25nZG91YmxlLmZyb21fcGFyYW0oMS41KSksIHIiXjxjcGFyYW0gKCdkJyBcKDEuNVwpfCdnJyBh dCAweFtBLUZhLWYwLTldKyk+JCIpCi0rICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoY19j aGFyX3AuZnJvbV9wYXJhbShiJ2hpaGknKSksICJePGNwYXJhbSAneicgXCgweFtBLUZhLWYwLTld K1wpPiQiKQotKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGNfd2NoYXJfcC5mcm9tX3Bh cmFtKCdoaWhpJykpLCAiXjxjcGFyYW0gJ1onIFwoMHhbQS1GYS1mMC05XStcKT4kIikKLSsgICAg ICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihjX3ZvaWRfcC5mcm9tX3BhcmFtKDB4MTIpKSwgciJe PGNwYXJhbSAnUCcgXCgweDAqMTJcKT4kIikKLSsKLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gCi0gaWYgX19uYW1lX18g PT0gJ19fbWFpbl9fJzoKLWRpZmYgLS1naXQgYS9NaXNjL05FV1MuZC9uZXh0L1NlY3VyaXR5LzIw MjEtMDEtMTgtMDktMjctMzEuYnBvLTQyOTM4LjRabjRNcC5yc3QgYi9NaXNjL05FV1MuZC9uZXh0 L1NlY3VyaXR5LzIwMjEtMDEtMTgtMDktMjctMzEuYnBvLTQyOTM4LjRabjRNcC5yc3QKLW5ldyBm aWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGY2NWExNTZmZWFiCi0tLS0g L2Rldi9udWxsCi0rKysgYi9NaXNjL05FV1MuZC9uZXh0L1NlY3VyaXR5LzIwMjEtMDEtMTgtMDkt MjctMzEuYnBvLTQyOTM4LjRabjRNcC5yc3QKLUBAIC0wLDAgKzEsMiBAQAotK0F2b2lkIHN0YXRp YyBidWZmZXJzIHdoZW4gY29tcHV0aW5nIHRoZSByZXByIG9mIDpjbGFzczpgY3R5cGVzLmNfZG91 YmxlYCBhbmQKLSs6Y2xhc3M6YGN0eXBlcy5jX2xvbmdkb3VibGVgIHZhbHVlcy4KLWRpZmYgLS1n aXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJv Yy5jCi1pbmRleCBiMGEzNmEzMDI0OGY3Li5mMjUwNmRlNTQ0OThlIDEwMDY0NAotLS0tIGEvTW9k dWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKLSsrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5j Ci1AQCAtNDg5LDU4ICs0ODksNDcgQEAgaXNfbGl0ZXJhbF9jaGFyKHVuc2lnbmVkIGNoYXIgYykK LSBzdGF0aWMgUHlPYmplY3QgKgotIFB5Q0FyZ19yZXByKFB5Q0FyZ09iamVjdCAqc2VsZikKLSB7 Ci0tICAgIGNoYXIgYnVmZmVyWzI1Nl07Ci0gICAgIHN3aXRjaChzZWxmLT50YWcpIHsKLSAgICAg Y2FzZSAnYic6Ci0gICAgIGNhc2UgJ0InOgotLSAgICAgICAgc3ByaW50ZihidWZmZXIsICI8Y3Bh cmFtICclYycgKCVkKT4iLAotKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8 Y3BhcmFtICclYycgKCVkKT4iLAotICAgICAgICAgICAgIHNlbGYtPnRhZywgc2VsZi0+dmFsdWUu Yik7Ci0tICAgICAgICBicmVhazsKLSAgICAgY2FzZSAnaCc6Ci0gICAgIGNhc2UgJ0gnOgotLSAg ICAgICAgc3ByaW50ZihidWZmZXIsICI8Y3BhcmFtICclYycgKCVkKT4iLAotKyAgICAgICAgcmV0 dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8Y3BhcmFtICclYycgKCVkKT4iLAotICAgICAgICAg ICAgIHNlbGYtPnRhZywgc2VsZi0+dmFsdWUuaCk7Ci0tICAgICAgICBicmVhazsKLSAgICAgY2Fz ZSAnaSc6Ci0gICAgIGNhc2UgJ0knOgotLSAgICAgICAgc3ByaW50ZihidWZmZXIsICI8Y3BhcmFt ICclYycgKCVkKT4iLAotKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8Y3Bh cmFtICclYycgKCVkKT4iLAotICAgICAgICAgICAgIHNlbGYtPnRhZywgc2VsZi0+dmFsdWUuaSk7 Ci0tICAgICAgICBicmVhazsKLSAgICAgY2FzZSAnbCc6Ci0gICAgIGNhc2UgJ0wnOgotLSAgICAg ICAgc3ByaW50ZihidWZmZXIsICI8Y3BhcmFtICclYycgKCVsZCk+IiwKLSsgICAgICAgIHJldHVy biBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPGNwYXJhbSAnJWMnICglbGQpPiIsCi0gICAgICAgICAg ICAgc2VsZi0+dGFnLCBzZWxmLT52YWx1ZS5sKTsKLS0gICAgICAgIGJyZWFrOwotIAotICAgICBj YXNlICdxJzoKLSAgICAgY2FzZSAnUSc6Ci0tICAgICAgICBzcHJpbnRmKGJ1ZmZlciwKLS0jaWZk ZWYgTVNfV0lOMzIKLS0gICAgICAgICAgICAiPGNwYXJhbSAnJWMnICglSTY0ZCk+IiwKLS0jZWxz ZQotLSAgICAgICAgICAgICI8Y3BhcmFtICclYycgKCVsbGQpPiIsCi0tI2VuZGlmCi0rICAgICAg ICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxjcGFyYW0gJyVjJyAoJWxsZCk+IiwKLSAg ICAgICAgICAgICBzZWxmLT50YWcsIHNlbGYtPnZhbHVlLnEpOwotLSAgICAgICAgYnJlYWs7Ci0g ICAgIGNhc2UgJ2QnOgotLSAgICAgICAgc3ByaW50ZihidWZmZXIsICI8Y3BhcmFtICclYycgKCVm KT4iLAotLSAgICAgICAgICAgIHNlbGYtPnRhZywgc2VsZi0+dmFsdWUuZCk7Ci0tICAgICAgICBi cmVhazsKLS0gICAgY2FzZSAnZic6Ci0tICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIjxjcGFyYW0g JyVjJyAoJWYpPiIsCi0tICAgICAgICAgICAgc2VsZi0+dGFnLCBzZWxmLT52YWx1ZS5mKTsKLS0g ICAgICAgIGJyZWFrOwotLQotKyAgICBjYXNlICdmJzogewotKyAgICAgICAgUHlPYmplY3QgKmYg PSBQeUZsb2F0X0Zyb21Eb3VibGUoKHNlbGYtPnRhZyA9PSAnZicpID8gc2VsZi0+dmFsdWUuZiA6 IHNlbGYtPnZhbHVlLmQpOwotKyAgICAgICAgaWYgKGYgPT0gTlVMTCkgewotKyAgICAgICAgICAg IHJldHVybiBOVUxMOwotKyAgICAgICAgfQotKyAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5 VW5pY29kZV9Gcm9tRm9ybWF0KCI8Y3BhcmFtICclYycgKCVSKT4iLCBzZWxmLT50YWcsIGYpOwot KyAgICAgICAgUHlfREVDUkVGKGYpOwotKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSsgICAgfQot ICAgICBjYXNlICdjJzoKLSAgICAgICAgIGlmIChpc19saXRlcmFsX2NoYXIoKHVuc2lnbmVkIGNo YXIpc2VsZi0+dmFsdWUuYykpIHsKLS0gICAgICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIjxjcGFy YW0gJyVjJyAoJyVjJyk+IiwKLSsgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3Jt YXQoIjxjcGFyYW0gJyVjJyAoJyVjJyk+IiwKLSAgICAgICAgICAgICAgICAgc2VsZi0+dGFnLCBz ZWxmLT52YWx1ZS5jKTsKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UgewotLSAgICAgICAgICAg IHNwcmludGYoYnVmZmVyLCAiPGNwYXJhbSAnJWMnICgnXFx4JTAyeCcpPiIsCi0rICAgICAgICAg ICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8Y3BhcmFtICclYycgKCdcXHglMDJ4Jyk+ IiwKLSAgICAgICAgICAgICAgICAgc2VsZi0+dGFnLCAodW5zaWduZWQgY2hhcilzZWxmLT52YWx1 ZS5jKTsKLSAgICAgICAgIH0KLS0gICAgICAgIGJyZWFrOwotIAotIC8qIEhtLCBhcmUgdGhlc2Ug J3onIGFuZCAnWicgY29kZXMgdXNlZnVsIGF0IGFsbD8KLSAgICBTaG91bGRuJ3QgdGhleSBiZSBy ZXBsYWNlZCBieSB0aGUgZnVuY3Rpb25hbGl0eSBvZiBjX3N0cmluZwotQEAgLTU0OSwyMiArNTM4 LDIwIEBAIFB5Q0FyZ19yZXByKFB5Q0FyZ09iamVjdCAqc2VsZikKLSAgICAgY2FzZSAneic6Ci0g ICAgIGNhc2UgJ1onOgotICAgICBjYXNlICdQJzoKLS0gICAgICAgIHNwcmludGYoYnVmZmVyLCAi PGNwYXJhbSAnJWMnICglcCk+IiwKLSsgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1h dCgiPGNwYXJhbSAnJWMnICglcCk+IiwKLSAgICAgICAgICAgICBzZWxmLT50YWcsIHNlbGYtPnZh bHVlLnApOwotICAgICAgICAgYnJlYWs7Ci0gCi0gICAgIGRlZmF1bHQ6Ci0gICAgICAgICBpZiAo aXNfbGl0ZXJhbF9jaGFyKCh1bnNpZ25lZCBjaGFyKXNlbGYtPnRhZykpIHsKLS0gICAgICAgICAg ICBzcHJpbnRmKGJ1ZmZlciwgIjxjcGFyYW0gJyVjJyBhdCAlcD4iLAotKyAgICAgICAgICAgIHJl dHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPGNwYXJhbSAnJWMnIGF0ICVwPiIsCi0gICAgICAg ICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNlbGYtPnRhZywgKHZvaWQgKilzZWxmKTsKLSAgICAg ICAgIH0KLSAgICAgICAgIGVsc2UgewotLSAgICAgICAgICAgIHNwcmludGYoYnVmZmVyLCAiPGNw YXJhbSAweCUwMnggYXQgJXA+IiwKLSsgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21G b3JtYXQoIjxjcGFyYW0gMHglMDJ4IGF0ICVwPiIsCi0gICAgICAgICAgICAgICAgICh1bnNpZ25l ZCBjaGFyKXNlbGYtPnRhZywgKHZvaWQgKilzZWxmKTsKLSAgICAgICAgIH0KLS0gICAgICAgIGJy ZWFrOwotICAgICB9Ci0tICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhidWZmZXIpOwot IH0KLSAKLSBzdGF0aWMgUHlNZW1iZXJEZWYgUHlDQXJnVHlwZV9tZW1iZXJzW10gPSB7CmRpZmYg LS1naXQgYS9nbnUvcGFja2FnZXMvcHl0aG9uLnNjbSBiL2dudS9wYWNrYWdlcy9weXRob24uc2Nt CmluZGV4IDVjNWJlMGQ3OGMuLjlkOTcwNTBjNjYgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9w eXRob24uc2NtCisrKyBiL2dudS9wYWNrYWdlcy9weXRob24uc2NtCkBAIC01OSw2ICs1OSw3IEBA CiA7OzsgQ29weXJpZ2h0IMKpIDIwMTggVmFncmFudCBDYXNjYWRpYW4gPHZhZ3JhbnRAZGViaWFu Lm9yZz4KIDs7OyBDb3B5cmlnaHQgwqkgMjAxOSBUYW5ndXkgTGUgQ2Fycm91ciA8dGFuZ3V5QGJp b25lbGFuZC5vcmc+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMjAgSmFuIChqYW5uZWtlKSBOaWV1d2Vu aHVpemVuIDxqYW5uZWtlQGdudS5vcmc+Cis7OzsgQ29weXJpZ2h0IMKpIDIwMjEgR3JlZyBIb2dh biA8Y29kZUBncmVnaG9nYW4uY29tPgogOzs7CiA7OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05V IEd1aXguCiA7OzsKQEAgLTUzMywxOSArNTM0LDE4IEBAIGRhdGEgdHlwZXMuIikKIChkZWZpbmUt cHVibGljIHB5dGhvbi0zLjkKICAgKHBhY2thZ2UgKGluaGVyaXQgcHl0aG9uLTMuOCkKICAgICAo bmFtZSAicHl0aG9uLW5leHQiKQotICAgICh2ZXJzaW9uICIzLjkuMSIpCisgICAgKHZlcnNpb24g IjMuOS4yIikKICAgICAoc291cmNlIChvcmlnaW4KICAgICAgICAgICAgICAgKG1ldGhvZCB1cmwt ZmV0Y2gpCiAgICAgICAgICAgICAgICh1cmkgKHN0cmluZy1hcHBlbmQgImh0dHBzOi8vd3d3LnB5 dGhvbi5vcmcvZnRwL3B5dGhvbi8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmVyc2lvbiAiL1B5dGhvbi0iIHZlcnNpb24gIi50YXIueHoiKSkKICAgICAgICAgICAgICAgKHBh dGNoZXMgKHNlYXJjaC1wYXRjaGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uLTMu OS1maXgtdGVzdHMucGF0Y2giCi0gICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uLTMuOS1D VkUtMjAyMS0zMTc3LnBhdGNoIgogICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbi0zLWRl dGVybWluaXN0aWMtYnVpbGQtaW5mby5wYXRjaCIKICAgICAgICAgICAgICAgICAgICAgICAgICJw eXRob24tMy1zZWFyY2gtcGF0aHMucGF0Y2giKSkKICAgICAgICAgICAgICAgKHNoYTI1NgogICAg ICAgICAgICAgICAgKGJhc2UzMgotICAgICAgICAgICAgICAgICIxenEzazR5bWlmeTVpZzczOXp5 dng5czJhaW52Y2h4YjF6cHkxMzl6NzRrcnI2NTN5NzRyIikpCisgICAgICAgICAgICAgICAgIjB6 OTR2djVxaGx3dmNnYzRzeTlzZGlxczAyMjBzODR3eDNiNjJ2c2xoNTQxOXoyazg4MXciKSkKICAg ICAgICAgICAgICAgKG1vZHVsZXMgJygoZ3VpeCBidWlsZCB1dGlscykpKQogICAgICAgICAgICAg ICAoc25pcHBldAogICAgICAgICAgICAgICAgJyhiZWdpbgotLSAKMi4zMC4xCgo= --00000000000086ed2605bc2a2116--