Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vBzoz-007iv2-3x for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Oct 2025 18:13:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vBzoy-00AnHa-1l for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Oct 2025 18:13:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vBzox-00AnHS-Mm for pgsql-hackers@lists.postgresql.org; Thu, 23 Oct 2025 18:13:54 +0000 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vBzou-003qxR-1e for pgsql-hackers@postgresql.org; Thu, 23 Oct 2025 18:13:54 +0000 Received: by mail-pg1-x532.google.com with SMTP id 41be03b00d2f7-b6cdba2663dso833304a12.2 for ; Thu, 23 Oct 2025 11:13:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761243230; x=1761848030; darn=postgresql.org; h=in-reply-to:references:cc:to:from:subject:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=vkM3qmMM6ZI296+HY17basF5I64IOAcuZUeIxb2Rjk0=; b=IDImHrgNdtSFOthmAPm0d5DmMP6rMLsk1PvpaTTc36HuGJs984RIh7YvK4w2WZZci+ Wx4iUOyJTa2m0G/qpLsrLPv+8cQcVQ091SEEPsSF7c9eBpLWfNQ0ShsLiHgAjYYos7PA 37KR11zP3qtlIN7pyWOyfKBqYzOM/0QZ2yHfb74izVcUlNurAEnrFGLDBFta3b+Rphv7 s79/ZHP+c6THbqobdm4Rhv1jXhiSkhlSZ8FRNnenLAB1fkYG2MCTML8pF+RV/MO7dC5k mZmXsB87BMYh9rWuiZ5Q8pud5S4+rsfLrx6YQkNN9XZENMqJYgIkBzg12AsGGTRS2JA7 wLKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761243230; x=1761848030; h=in-reply-to:references:cc:to:from:subject:message-id:date :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=vkM3qmMM6ZI296+HY17basF5I64IOAcuZUeIxb2Rjk0=; b=FBoax8/Z5XyoWrve/fd4yu2DmXFusCHozQkkIKlwws3Sghw8yrxmKD0Gh+tLzyuRNI PtLRyft46uLyy7iwH5XffzEltLEJEM9i05Fp05WWNP6KvuhkgRl7duESbVyJih9JLtDa TTXiApugK61Zk3ZVFcrPmquyiyngbg7+kbyPBtNYEwMWV4IVhWYHlbyBqA3gGMPpjaMe FFiU9Y2CKQEbmWdKfMNfxqri3j65LxkbWMyP0Mc9K9GT2zg8B9Z1NqnhuNB8vHOdmPmE 2xfdUhRoRziW0yOivUtz0ITkTm1WFnAYmDAD8q+NajwAhtbF4Jbv08vCIcCSoL2FYU/F UsMw== X-Gm-Message-State: AOJu0Yz1LZ4zGuaEEuiohWcfHvfYIzFFRJV2ElGUUlsNiZHRkTIAPuPh ZVnpF7OQ9pGTkvgaN4du0upVUCXLd66M1G+z2xcdS/n/jZGtaix/+zl2 X-Gm-Gg: ASbGnctOTPNNXrM31P59idB5tov6JWgdbbpaQltVkLy/TZmva0KOfEFv3PWc465fILB LdTWA9BVwu7kleOKrQnEIxyAJthnjsznCOYJDNeHXukoFEhia9cm9bfun3lZ15If3EVCdxX1EzJ 04L+ljqsvco3yeLV0SrMKt7zgxMsvUbuiGrqJSSkk+CYgPKcSAzdTSVxAB6RbI0Ws4azUJHnSeT nfhqvaiX7i3R7cC0d8sV4+s7ihp4hZ1LJfuV1RAYlVowGU3ayctxuTSfQjy3ah37xw3Ogj/tAzC tCXCP0ggjD8mCCiQfKv1fTt6k5+vBkzTxiR/ocDPRh1u3AyY40XtpDr5RrkAbG1utgzDluFZSic sN85tJ9C/lnqFvRWyL8hwGTCsK61B1iwhKSdYayCR8EjvojRPC0xA+xAI4UB1BmyaQW7ERpWkRd BjqIIFqBxuQlMUv0cqEVat5A== X-Google-Smtp-Source: AGHT+IF51MfFCmc82CmpAxwv4lEYaA31ZwCVFcjw/Bfvh8eOlR2YvYgEMywBhXlJOkd/kyzyT6nW9A== X-Received: by 2002:a17:902:e5cf:b0:290:a32b:9095 with SMTP id d9443c01a7336-290cb7567fdmr358087855ad.54.1761243229853; Thu, 23 Oct 2025 11:13:49 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:216b:5cab:1c36:6d5]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2946dda79c0sm30327015ad.10.2025.10.23.11.13.47 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 23 Oct 2025 11:13:49 -0700 (PDT) Content-Type: multipart/mixed; boundary=dcd665abdc5e7df53e1e337d9d4d9bbd2b0635fdc930d681eb96dc825895 Mime-Version: 1.0 Date: Thu, 23 Oct 2025 15:13:46 -0300 Message-Id: Subject: Re: Include extension path on pg_available_extensions From: "Matheus Alcantara" To: "Chao Li" , "Matheus Alcantara" Cc: "Pg Hackers" X-Mailer: aerc 0.21.0 References: <0DDF33A5-4F8C-4725-A124-B301147FA1FA@gmail.com> In-Reply-To: <0DDF33A5-4F8C-4725-A124-B301147FA1FA@gmail.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --dcd665abdc5e7df53e1e337d9d4d9bbd2b0635fdc930d681eb96dc825895 Content-Type: multipart/alternative; boundary=326be9528f751a35babc4fe9c680f6d8f56c61569fca258301dcf8cd06ca --326be9528f751a35babc4fe9c680f6d8f56c61569fca258301dcf8cd06ca Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 Thanks for reviewing this! On Wed Oct 22, 2025 at 10:28 PM -03, Chao Li wrote: >> > > Got a few comments: > > 1 - extension.c > ``` > +/* > + * A location configured on extension_control_path GUC. > + * > + * The macro is the macro plaeholder that the extension_control_path sup= port > + * and which is replaced by a system value that is stored on loc. For cu= stom > + * paths that don't have a macro the macro field is NULL. > + */ > ``` > > Some problems in the comment: > > * typo: plaebholder -> placeholder > * "the extension_control_path support=E2=80=9D where =E2=80=9Csupport=E2= =80=9D should be =E2=80=9Csupports=E2=80=9D > * =E2=80=9Cstored on loc=E2=80=9D should be =E2=80=9Cstored in loc=E2=80= =9D > Fixed > Also, =E2=80=9CThe macro is the macro placeholder =E2=80=A6=E2=80=9D soun= ds redundant, suggested revision: =E2=80=9CThe macro field stores the name = of a macro (for example =E2=80=9C$system=E2=80=9D) that extension_control_= path supports, which is replaced by =E2=80=A6" > > 2 - extension.c > ``` > + Location *location =3D palloc0_object(Location); > + > + location->macro =3D NULL; > + location->loc =3D system_dir; > + paths =3D lappend(paths, location); > ``` > Fixed > As you immediately assign values to all fields, palloc0_object() is not n= eeded, palloc_object() is good enough. > > 3 - extension.c > ``` > @@ -366,6 +384,7 @@ get_extension_control_directories(void) > int len; > char *mangled; > char *piece =3D first_path_var_separator(ecp); > + Location *location =3D palloc0_object(Location); > ``` > > In all execution paths, location will be initiated, thus palloc_object() = is good enough. > Fixed > 4 - extension.c > ``` > + /* location */ > + if (location->macro =3D=3D NULL) > + values[3] =3D CStringGetTextDatum(location->loc); > + else > + values[3] =3D CStringGetTextDatum(location->macro); > ``` > > There are multiple places of this =E2=80=9Cif-else=E2=80=9D. So, =E2=80= =9Cmacro=E2=80=9D basically is for display, and loc is the real location. I= am thinking, maybe we can change the definition of Location to: > > ``` > structure Location { > Char *display; > Char *real; > ``` > > When it is not a macro, just assign real to display, so that we can avoid= all these =E2=80=9Cif-else=E2=80=9D. > These struct fields sounds a bit unclear by just looking it without reading the usages to me TBH. What do you think by creating a static function that do the if-else and just use it? Perhaps make into a macro? Attached v2 with all the fixes. -- Matheus Alcantara --326be9528f751a35babc4fe9c680f6d8f56c61569fca258301dcf8cd06ca-- --dcd665abdc5e7df53e1e337d9d4d9bbd2b0635fdc930d681eb96dc825895 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0001-Add-path-of-extension-on-pg_available_extensions.patch Content-Type: text/plain; charset=utf-8; name=v2-0001-Add-path-of-extension-on-pg_available_extensions.patch RnJvbSAwNWMyNzFhMzhkMGE2M2M5YWFmNDljMjFjNzRjMDdmYTg3NjdhNzI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IE1vbiwgMTUgU2VwIDIwMjUgMTU6NDY6MjQgLTAzMDAKU3ViamVjdDogW1BBVENIIHYyXSBB ZGQgcGF0aCBvZiBleHRlbnNpb24gb24gcGdfYXZhaWxhYmxlX2V4dGVuc2lvbnMKCi0tLQogc3Jj L2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgICAgICAgIHwgIDQgKy0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jICAgICAgICAgICAgICB8IDg1ICsrKysrKysrKysr KysrLS0tLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8 IDEwICstLQogLi4uL3QvMDAxX2V4dGVuc2lvbl9jb250cm9sX3BhdGgucGwgICAgICAgICAgIHwg MTMgKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAgICAgICAgICAgfCAx MCArKy0KIDUgZmlsZXMgY2hhbmdlZCwgODggaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IDgyMzc3NmMxNDk4Li43NmVl YTExZDQ4YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtNDEyLDE0ICs0 MTIsMTQgQEAgQ1JFQVRFIFZJRVcgcGdfY3Vyc29ycyBBUwogCiBDUkVBVEUgVklFVyBwZ19hdmFp bGFibGVfZXh0ZW5zaW9ucyBBUwogICAgIFNFTEVDVCBFLm5hbWUsIEUuZGVmYXVsdF92ZXJzaW9u LCBYLmV4dHZlcnNpb24gQVMgaW5zdGFsbGVkX3ZlcnNpb24sCi0gICAgICAgICAgIEUuY29tbWVu dAorICAgICAgICAgICBFLmNvbW1lbnQsIEUubG9jYXRpb24KICAgICAgIEZST00gcGdfYXZhaWxh YmxlX2V4dGVuc2lvbnMoKSBBUyBFCiAgICAgICAgICAgIExFRlQgSk9JTiBwZ19leHRlbnNpb24g QVMgWCBPTiBFLm5hbWUgPSBYLmV4dG5hbWU7CiAKIENSRUFURSBWSUVXIHBnX2F2YWlsYWJsZV9l eHRlbnNpb25fdmVyc2lvbnMgQVMKICAgICBTRUxFQ1QgRS5uYW1lLCBFLnZlcnNpb24sIChYLmV4 dG5hbWUgSVMgTk9UIE5VTEwpIEFTIGluc3RhbGxlZCwKICAgICAgICAgICAgRS5zdXBlcnVzZXIs IEUudHJ1c3RlZCwgRS5yZWxvY2F0YWJsZSwKLSAgICAgICAgICAgRS5zY2hlbWEsIEUucmVxdWly ZXMsIEUuY29tbWVudAorICAgICAgICAgICBFLnNjaGVtYSwgRS5yZXF1aXJlcywgRS5jb21tZW50 LCBFLmxvY2F0aW9uCiAgICAgICBGUk9NIHBnX2F2YWlsYWJsZV9leHRlbnNpb25fdmVyc2lvbnMo KSBBUyBFCiAgICAgICAgICAgIExFRlQgSk9JTiBwZ19leHRlbnNpb24gQVMgWAogICAgICAgICAg ICAgIE9OIEUubmFtZSA9IFguZXh0bmFtZSBBTkQgRS52ZXJzaW9uID0gWC5leHR2ZXJzaW9uOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHRlbnNpb24uYwppbmRleCA5M2VmMWFkMTA2Zi4uMmU1NDg5YjQ5NDYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCkBAIC0xMjYsNiArMTI2LDIwIEBAIHR5cGVkZWYgc3Ry dWN0CiAJUGFyc2VMb2MJc3RtdF9sZW47CQkvKiBsZW5ndGggaW4gYnl0ZXM7IDAgbWVhbnMgInJl c3Qgb2Ygc3RyaW5nIiAqLwogfSBzY3JpcHRfZXJyb3JfY2FsbGJhY2tfYXJnOwogCisvKgorICog QSBsb2NhdGlvbiBjb25maWd1cmVkIG9uIGV4dGVuc2lvbl9jb250cm9sX3BhdGggR1VDLgorICoK KyAqIFRoZSBtYWNybyBmaWVsZCBzdG9yZXMgdGhlIG5hbWUgb2YgYSBtYWNybyAoZm9yIGV4YW1w bGUg4oCcJHN5c3RlbeKAnSkgdGhhdAorICogZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aCBzdXBwb3J0 cywgd2hpY2ggaXMgcmVwbGFjZWQgYnkgYSBzeXN0ZW0gdmFsdWUgdGhhdCBpcworICogc3RvcmVk IGluIGxvYy4gRm9yIGN1c3RvbSBwYXRocyB0aGF0IGRvbid0IGhhdmUgYSBtYWNybyB0aGUgbWFj cm8gZmllbGQgaXMKKyAqIE5VTEwuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY2hhcgkgICAq bWFjcm87CisJY2hhcgkgICAqbG9jOworfSBMb2NhdGlvbjsKKwogLyogTG9jYWwgZnVuY3Rpb25z ICovCiBzdGF0aWMgTGlzdCAqZmluZF91cGRhdGVfcGF0aChMaXN0ICpldmlfbGlzdCwKIAkJCQkJ CQkgIEV4dGVuc2lvblZlcnNpb25JbmZvICpldmlfc3RhcnQsCkBAIC0xNDAsNyArMTU0LDggQEAg c3RhdGljIE9pZAlnZXRfcmVxdWlyZWRfZXh0ZW5zaW9uKGNoYXIgKnJlcUV4dGVuc2lvbk5hbWUs CiAJCQkJCQkJCSAgIGJvb2wgaXNfY3JlYXRlKTsKIHN0YXRpYyB2b2lkIGdldF9hdmFpbGFibGVf dmVyc2lvbnNfZm9yX2V4dGVuc2lvbihFeHRlbnNpb25Db250cm9sRmlsZSAqcGNvbnRyb2wsCiAJ CQkJCQkJCQkJCQkgVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKLQkJCQkJCQkJCQkJCSBUdXBs ZURlc2MgdHVwZGVzYyk7CisJCQkJCQkJCQkJCQkgVHVwbGVEZXNjIHR1cGRlc2MsCisJCQkJCQkJ CQkJCQkgTG9jYXRpb24gKmxvY2F0aW9uKTsKIHN0YXRpYyBEYXR1bSBjb252ZXJ0X3JlcXVpcmVz X3RvX2RhdHVtKExpc3QgKnJlcXVpcmVzKTsKIHN0YXRpYyB2b2lkIEFwcGx5RXh0ZW5zaW9uVXBk YXRlcyhPaWQgZXh0ZW5zaW9uT2lkLAogCQkJCQkJCQkgIEV4dGVuc2lvbkNvbnRyb2xGaWxlICpw Y29udHJvbCwKQEAgLTE1Nyw2ICsxNzIsMTYgQEAgc3RhdGljIEV4dGVuc2lvbkNvbnRyb2xGaWxl ICpuZXdfRXh0ZW5zaW9uQ29udHJvbEZpbGUoY29uc3QgY2hhciAqZXh0bmFtZSk7CiAKIGNoYXIJ ICAgKmZpbmRfaW5fcGF0aHMoY29uc3QgY2hhciAqYmFzZW5hbWUsIExpc3QgKnBhdGhzKTsKIAor LyogIFJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSB0byBkaXNwbGF5IHRoZSBMb2NhdGlvbiAqLwor c3RhdGljIGNoYXIgKgorbG9jYXRpb25fZm9yX2Rpc3BsYXkoTG9jYXRpb24gKmxvYykKK3sKKwlp ZiAobG9jLT5tYWNybyA9PSBOVUxMKQorCQlyZXR1cm4gbG9jLT5sb2M7CisJZWxzZQorCQlyZXR1 cm4gbG9jLT5tYWNybzsKK30KKwogLyoKICAqIGdldF9leHRlbnNpb25fb2lkIC0gZ2l2ZW4gYW4g ZXh0ZW5zaW9uIG5hbWUsIGxvb2sgdXAgdGhlIE9JRAogICoKQEAgLTM1NCw3ICszNzksMTEgQEAg Z2V0X2V4dGVuc2lvbl9jb250cm9sX2RpcmVjdG9yaWVzKHZvaWQpCiAKIAlpZiAoc3RybGVuKEV4 dGVuc2lvbl9jb250cm9sX3BhdGgpID09IDApCiAJewotCQlwYXRocyA9IGxhcHBlbmQocGF0aHMs IHN5c3RlbV9kaXIpOworCQlMb2NhdGlvbiAgICpsb2NhdGlvbiA9IHBhbGxvY19vYmplY3QoTG9j YXRpb24pOworCisJCWxvY2F0aW9uLT5tYWNybyA9IE5VTEw7CisJCWxvY2F0aW9uLT5sb2MgPSBz eXN0ZW1fZGlyOworCQlwYXRocyA9IGxhcHBlbmQocGF0aHMsIGxvY2F0aW9uKTsKIAl9CiAJZWxz ZQogCXsKQEAgLTM2Niw2ICszOTUsNyBAQCBnZXRfZXh0ZW5zaW9uX2NvbnRyb2xfZGlyZWN0b3Jp ZXModm9pZCkKIAkJCWludAkJCWxlbjsKIAkJCWNoYXIJICAgKm1hbmdsZWQ7CiAJCQljaGFyCSAg ICpwaWVjZSA9IGZpcnN0X3BhdGhfdmFyX3NlcGFyYXRvcihlY3ApOworCQkJTG9jYXRpb24gICAq bG9jYXRpb24gPSBwYWxsb2Nfb2JqZWN0KExvY2F0aW9uKTsKIAogCQkJLyogR2V0IHRoZSBsZW5n dGggb2YgdGhlIG5leHQgcGF0aCBvbiBlY3AgKi8KIAkJCWlmIChwaWVjZSA9PSBOVUxMKQpAQCAt MzgyLDE1ICs0MTIsMjEgQEAgZ2V0X2V4dGVuc2lvbl9jb250cm9sX2RpcmVjdG9yaWVzKHZvaWQp CiAJCQkgKiBzdWZmaXggaWYgaXQgaXMgYSBjdXN0b20gZXh0ZW5zaW9uIGNvbnRyb2wgcGF0aC4K IAkJCSAqLwogCQkJaWYgKHN0cmNtcChwaWVjZSwgIiRzeXN0ZW0iKSA9PSAwKQorCQkJeworCQkJ CWxvY2F0aW9uLT5tYWNybyA9IHBzdHJkdXAocGllY2UpOwogCQkJCW1hbmdsZWQgPSBzdWJzdGl0 dXRlX3BhdGhfbWFjcm8ocGllY2UsICIkc3lzdGVtIiwgc3lzdGVtX2Rpcik7CisJCQl9CiAJCQll bHNlCisJCQl7CisJCQkJbG9jYXRpb24tPm1hY3JvID0gTlVMTDsKIAkJCQltYW5nbGVkID0gcHNw cmludGYoIiVzL2V4dGVuc2lvbiIsIHBpZWNlKTsKLQorCQkJfQogCQkJcGZyZWUocGllY2UpOwog CiAJCQkvKiBDYW5vbmljYWxpemUgdGhlIHBhdGggYmFzZWQgb24gdGhlIE9TIGFuZCBhZGQgdG8g dGhlIGxpc3QgKi8KIAkJCWNhbm9uaWNhbGl6ZV9wYXRoKG1hbmdsZWQpOwotCQkJcGF0aHMgPSBs YXBwZW5kKHBhdGhzLCBtYW5nbGVkKTsKKwkJCWxvY2F0aW9uLT5sb2MgPSBtYW5nbGVkOworCQkJ cGF0aHMgPSBsYXBwZW5kKHBhdGhzLCBsb2NhdGlvbik7CiAKIAkJCS8qIEJyZWFrIGlmIGVjcCBp cyBlbXB0eSBvciBtb3ZlIHRvIHRoZSBuZXh0IHBhdGggb24gZWNwICovCiAJCQlpZiAoZWNwW2xl bl0gPT0gJ1wwJykKQEAgLTIyMTUsOSArMjI1MSw5IEBAIHBnX2F2YWlsYWJsZV9leHRlbnNpb25z KFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlsb2NhdGlvbnMgPSBnZXRfZXh0ZW5zaW9uX2NvbnRyb2xf ZGlyZWN0b3JpZXMoKTsKIAotCWZvcmVhY2hfcHRyKGNoYXIsIGxvY2F0aW9uLCBsb2NhdGlvbnMp CisJZm9yZWFjaF9wdHIoTG9jYXRpb24sIGxvY2F0aW9uLCBsb2NhdGlvbnMpCiAJewotCQlkaXIg PSBBbGxvY2F0ZURpcihsb2NhdGlvbik7CisJCWRpciA9IEFsbG9jYXRlRGlyKGxvY2F0aW9uLT5s b2MpOwogCiAJCS8qCiAJCSAqIElmIHRoZSBjb250cm9sIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0 LCB3ZSB3YW50IHRvIHNpbGVudGx5IHJldHVybgpAQCAtMjIyOSwxMyArMjI2NSwxMyBAQCBwZ19h dmFpbGFibGVfZXh0ZW5zaW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQl9CiAJCWVsc2UKIAkJewot CQkJd2hpbGUgKChkZSA9IFJlYWREaXIoZGlyLCBsb2NhdGlvbikpICE9IE5VTEwpCisJCQl3aGls ZSAoKGRlID0gUmVhZERpcihkaXIsIGxvY2F0aW9uLT5sb2MpKSAhPSBOVUxMKQogCQkJewogCQkJ CUV4dGVuc2lvbkNvbnRyb2xGaWxlICpjb250cm9sOwogCQkJCWNoYXIJICAgKmV4dG5hbWU7CiAJ CQkJU3RyaW5nCSAgICpleHRuYW1lX3N0cjsKLQkJCQlEYXR1bQkJdmFsdWVzWzNdOwotCQkJCWJv b2wJCW51bGxzWzNdOworCQkJCURhdHVtCQl2YWx1ZXNbNF07CisJCQkJYm9vbAkJbnVsbHNbNF07 CiAKIAkJCQlpZiAoIWlzX2V4dGVuc2lvbl9jb250cm9sX2ZpbGVuYW1lKGRlLT5kX25hbWUpKQog CQkJCQljb250aW51ZTsKQEAgLTIyNTksNyArMjI5NSw3IEBAIHBnX2F2YWlsYWJsZV9leHRlbnNp b25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCWZvdW5kX2V4dCA9IGxhcHBlbmQoZm91bmRfZXh0 LCBleHRuYW1lX3N0cik7CiAKIAkJCQljb250cm9sID0gbmV3X0V4dGVuc2lvbkNvbnRyb2xGaWxl KGV4dG5hbWUpOwotCQkJCWNvbnRyb2wtPmNvbnRyb2xfZGlyID0gcHN0cmR1cChsb2NhdGlvbik7 CisJCQkJY29udHJvbC0+Y29udHJvbF9kaXIgPSBwc3RyZHVwKGxvY2F0aW9uLT5sb2MpOwogCQkJ CXBhcnNlX2V4dGVuc2lvbl9jb250cm9sX2ZpbGUoY29udHJvbCwgTlVMTCk7CiAKIAkJCQltZW1z ZXQodmFsdWVzLCAwLCBzaXplb2YodmFsdWVzKSk7CkBAIC0yMjc5LDYgKzIzMTUsOSBAQCBwZ19h dmFpbGFibGVfZXh0ZW5zaW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJCWVsc2UKIAkJCQkJdmFs dWVzWzJdID0gQ1N0cmluZ0dldFRleHREYXR1bShjb250cm9sLT5jb21tZW50KTsKIAorCQkJCS8q IGxvY2F0aW9uICovCisJCQkJdmFsdWVzWzNdID0gQ1N0cmluZ0dldFRleHREYXR1bShsb2NhdGlv bl9mb3JfZGlzcGxheShsb2NhdGlvbikpOworCiAJCQkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNp bmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKIAkJCQkJCQkJCSB2YWx1ZXMsIG51bGxz KTsKIAkJCX0KQEAgLTIzMTMsOSArMjM1Miw5IEBAIHBnX2F2YWlsYWJsZV9leHRlbnNpb25fdmVy c2lvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAogCWxvY2F0aW9ucyA9IGdldF9leHRlbnNpb25fY29u dHJvbF9kaXJlY3RvcmllcygpOwogCi0JZm9yZWFjaF9wdHIoY2hhciwgbG9jYXRpb24sIGxvY2F0 aW9ucykKKwlmb3JlYWNoX3B0cihMb2NhdGlvbiwgbG9jYXRpb24sIGxvY2F0aW9ucykKIAl7Ci0J CWRpciA9IEFsbG9jYXRlRGlyKGxvY2F0aW9uKTsKKwkJZGlyID0gQWxsb2NhdGVEaXIobG9jYXRp b24tPmxvYyk7CiAKIAkJLyoKIAkJICogSWYgdGhlIGNvbnRyb2wgZGlyZWN0b3J5IGRvZXNuJ3Qg ZXhpc3QsIHdlIHdhbnQgdG8gc2lsZW50bHkgcmV0dXJuCkBAIC0yMzI3LDcgKzIzNjYsNyBAQCBw Z19hdmFpbGFibGVfZXh0ZW5zaW9uX3ZlcnNpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCX0KIAkJ ZWxzZQogCQl7Ci0JCQl3aGlsZSAoKGRlID0gUmVhZERpcihkaXIsIGxvY2F0aW9uKSkgIT0gTlVM TCkKKwkJCXdoaWxlICgoZGUgPSBSZWFkRGlyKGRpciwgbG9jYXRpb24tPmxvYykpICE9IE5VTEwp CiAJCQl7CiAJCQkJRXh0ZW5zaW9uQ29udHJvbEZpbGUgKmNvbnRyb2w7CiAJCQkJY2hhcgkgICAq ZXh0bmFtZTsKQEAgLTIzNTYsMTIgKzIzOTUsMTMgQEAgcGdfYXZhaWxhYmxlX2V4dGVuc2lvbl92 ZXJzaW9ucyhQR19GVU5DVElPTl9BUkdTKQogCiAJCQkJLyogcmVhZCB0aGUgY29udHJvbCBmaWxl ICovCiAJCQkJY29udHJvbCA9IG5ld19FeHRlbnNpb25Db250cm9sRmlsZShleHRuYW1lKTsKLQkJ CQljb250cm9sLT5jb250cm9sX2RpciA9IHBzdHJkdXAobG9jYXRpb24pOworCQkJCWNvbnRyb2wt PmNvbnRyb2xfZGlyID0gcHN0cmR1cChsb2NhdGlvbi0+bG9jKTsKIAkJCQlwYXJzZV9leHRlbnNp b25fY29udHJvbF9maWxlKGNvbnRyb2wsIE5VTEwpOwogCiAJCQkJLyogc2NhbiBleHRlbnNpb24n cyBzY3JpcHQgZGlyZWN0b3J5IGZvciBpbnN0YWxsIHNjcmlwdHMgKi8KIAkJCQlnZXRfYXZhaWxh YmxlX3ZlcnNpb25zX2Zvcl9leHRlbnNpb24oY29udHJvbCwgcnNpbmZvLT5zZXRSZXN1bHQsCi0J CQkJCQkJCQkJCQkJIHJzaW5mby0+c2V0RGVzYyk7CisJCQkJCQkJCQkJCQkJIHJzaW5mby0+c2V0 RGVzYywKKwkJCQkJCQkJCQkJCQkgbG9jYXRpb24pOwogCQkJfQogCiAJCQlGcmVlRGlyKGRpcik7 CkBAIC0yMzc4LDcgKzI0MTgsOCBAQCBwZ19hdmFpbGFibGVfZXh0ZW5zaW9uX3ZlcnNpb25zKFBH X0ZVTkNUSU9OX0FSR1MpCiBzdGF0aWMgdm9pZAogZ2V0X2F2YWlsYWJsZV92ZXJzaW9uc19mb3Jf ZXh0ZW5zaW9uKEV4dGVuc2lvbkNvbnRyb2xGaWxlICpwY29udHJvbCwKIAkJCQkJCQkJCSBUdXBs ZXN0b3Jlc3RhdGUgKnR1cHN0b3JlLAotCQkJCQkJCQkJIFR1cGxlRGVzYyB0dXBkZXNjKQorCQkJ CQkJCQkJIFR1cGxlRGVzYyB0dXBkZXNjLAorCQkJCQkJCQkJIExvY2F0aW9uICpsb2NhdGlvbikK IHsKIAlMaXN0CSAgICpldmlfbGlzdDsKIAlMaXN0Q2VsbCAgICpsYzsKQEAgLTIzOTEsOCArMjQz Miw4IEBAIGdldF9hdmFpbGFibGVfdmVyc2lvbnNfZm9yX2V4dGVuc2lvbihFeHRlbnNpb25Db250 cm9sRmlsZSAqcGNvbnRyb2wsCiAJewogCQlFeHRlbnNpb25WZXJzaW9uSW5mbyAqZXZpID0gKEV4 dGVuc2lvblZlcnNpb25JbmZvICopIGxmaXJzdChsYyk7CiAJCUV4dGVuc2lvbkNvbnRyb2xGaWxl ICpjb250cm9sOwotCQlEYXR1bQkJdmFsdWVzWzhdOwotCQlib29sCQludWxsc1s4XTsKKwkJRGF0 dW0JCXZhbHVlc1s5XTsKKwkJYm9vbAkJbnVsbHNbOV07CiAJCUxpc3RDZWxsICAgKmxjMjsKIAog CQlpZiAoIWV2aS0+aW5zdGFsbGFibGUpCkBAIC0yNDM0LDYgKzI0NzUsOSBAQCBnZXRfYXZhaWxh YmxlX3ZlcnNpb25zX2Zvcl9leHRlbnNpb24oRXh0ZW5zaW9uQ29udHJvbEZpbGUgKnBjb250cm9s LAogCQllbHNlCiAJCQl2YWx1ZXNbN10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGNvbnRyb2wtPmNv bW1lbnQpOwogCisJCS8qIGxvY2F0aW9uICovCisJCXZhbHVlc1s4XSA9IENTdHJpbmdHZXRUZXh0 RGF0dW0obG9jYXRpb25fZm9yX2Rpc3BsYXkobG9jYXRpb24pKTsKKwogCQl0dXBsZXN0b3JlX3B1 dHZhbHVlcyh0dXBzdG9yZSwgdHVwZGVzYywgdmFsdWVzLCBudWxscyk7CiAKIAkJLyoKQEAgLTI0 NzUsNiArMjUxOSw4IEBAIGdldF9hdmFpbGFibGVfdmVyc2lvbnNfZm9yX2V4dGVuc2lvbihFeHRl bnNpb25Db250cm9sRmlsZSAqcGNvbnRyb2wsCiAJCQkJfQogCQkJCS8qIGNvbW1lbnQgc3RheXMg dGhlIHNhbWUgKi8KIAorCQkJCS8qIGxvY2F0aW9uIHN0YXlzIHRoZSBzYW1lICovCisKIAkJCQl0 dXBsZXN0b3JlX3B1dHZhbHVlcyh0dXBzdG9yZSwgdHVwZGVzYywgdmFsdWVzLCBudWxscyk7CiAJ CQl9CiAJCX0KQEAgLTM5MDMsNyArMzk0OSw4IEBAIGZpbmRfaW5fcGF0aHMoY29uc3QgY2hhciAq YmFzZW5hbWUsIExpc3QgKnBhdGhzKQogCiAJZm9yZWFjaChjZWxsLCBwYXRocykKIAl7Ci0JCWNo YXIJICAgKnBhdGggPSBsZmlyc3QoY2VsbCk7CisJCUxvY2F0aW9uICAgKmxvY2F0aW9uID0gbGZp cnN0KGNlbGwpOworCQljaGFyCSAgICpwYXRoID0gbG9jYXRpb24tPmxvYzsKIAkJY2hhcgkgICAq ZnVsbDsKIAogCQlBc3NlcnQocGF0aCAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cmlu ZGV4IGVlY2I0M2VjNmYwLi5hYjVlYzg2Y2E5ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBA IC0xMDc0MywxNiArMTA3NDMsMTYgQEAKIHsgb2lkID0+ICczMDgyJywgZGVzY3IgPT4gJ2xpc3Qg YXZhaWxhYmxlIGV4dGVuc2lvbnMnLAogICBwcm9uYW1lID0+ICdwZ19hdmFpbGFibGVfZXh0ZW5z aW9ucycsIHByb2Nvc3QgPT4gJzEwJywgcHJvcm93cyA9PiAnMTAwJywKICAgcHJvcmV0c2V0ID0+ ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdyZWNvcmQnLAotICBwcm9h cmd0eXBlcyA9PiAnJywgcHJvYWxsYXJndHlwZXMgPT4gJ3tuYW1lLHRleHQsdGV4dH0nLAotICBw cm9hcmdtb2RlcyA9PiAne28sbyxvfScsIHByb2FyZ25hbWVzID0+ICd7bmFtZSxkZWZhdWx0X3Zl cnNpb24sY29tbWVudH0nLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvYWxsYXJndHlwZXMgPT4g J3tuYW1lLHRleHQsdGV4dCx0ZXh0fScsCisgIHByb2FyZ21vZGVzID0+ICd7byxvLG8sb30nLCBw cm9hcmduYW1lcyA9PiAne25hbWUsZGVmYXVsdF92ZXJzaW9uLGNvbW1lbnQsbG9jYXRpb259JywK ICAgcHJvc3JjID0+ICdwZ19hdmFpbGFibGVfZXh0ZW5zaW9ucycgfSwKIHsgb2lkID0+ICczMDgz JywgZGVzY3IgPT4gJ2xpc3QgYXZhaWxhYmxlIGV4dGVuc2lvbiB2ZXJzaW9ucycsCiAgIHByb25h bWUgPT4gJ3BnX2F2YWlsYWJsZV9leHRlbnNpb25fdmVyc2lvbnMnLCBwcm9jb3N0ID0+ICcxMCcs CiAgIHByb3Jvd3MgPT4gJzEwMCcsIHByb3JldHNldCA9PiAndCcsIHByb3ZvbGF0aWxlID0+ICdz JywKICAgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywgcHJvYXJndHlwZXMgPT4gJycsCi0gIHByb2Fs bGFyZ3R5cGVzID0+ICd7bmFtZSx0ZXh0LGJvb2wsYm9vbCxib29sLG5hbWUsX25hbWUsdGV4dH0n LAotICBwcm9hcmdtb2RlcyA9PiAne28sbyxvLG8sbyxvLG8sb30nLAotICBwcm9hcmduYW1lcyA9 PiAne25hbWUsdmVyc2lvbixzdXBlcnVzZXIsdHJ1c3RlZCxyZWxvY2F0YWJsZSxzY2hlbWEscmVx dWlyZXMsY29tbWVudH0nLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne25hbWUsdGV4dCxib29sLGJv b2wsYm9vbCxuYW1lLF9uYW1lLHRleHQsdGV4dH0nLAorICBwcm9hcmdtb2RlcyA9PiAne28sbyxv LG8sbyxvLG8sbyxvfScsCisgIHByb2FyZ25hbWVzID0+ICd7bmFtZSx2ZXJzaW9uLHN1cGVydXNl cix0cnVzdGVkLHJlbG9jYXRhYmxlLHNjaGVtYSxyZXF1aXJlcyxjb21tZW50LGxvY2F0aW9ufScs CiAgIHByb3NyYyA9PiAncGdfYXZhaWxhYmxlX2V4dGVuc2lvbl92ZXJzaW9ucycgfSwKIHsgb2lk ID0+ICczMDg0JywgZGVzY3IgPT4gJ2xpc3QgYW4gZXh0ZW5zaW9uXCdzIHZlcnNpb24gdXBkYXRl IHBhdGhzJywKICAgcHJvbmFtZSA9PiAncGdfZXh0ZW5zaW9uX3VwZGF0ZV9wYXRocycsIHByb2Nv c3QgPT4gJzEwJywgcHJvcm93cyA9PiAnMTAwJywKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9leHRlbnNpb25zL3QvMDAxX2V4dGVuc2lvbl9jb250cm9sX3BhdGgucGwgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy90LzAwMV9leHRlbnNpb25fY29udHJvbF9wYXRo LnBsCmluZGV4IDdmYmU1YmRlMzMyLi4zMzJjNzRkNzJiYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvdC8wMDFfZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aC5wbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy90LzAwMV9leHRlbnNpb25fY29u dHJvbF9wYXRoLnBsCkBAIC0yNSw2ICsyNSwxMCBAQCBteSAkZXh0X25hbWUyID0gInRlc3RfY3Vz dG9tX2V4dF9wYXRoc191c2luZ19kaXJlY3RvcnkiOwogbWtwYXRoKCIkZXh0X2Rpci8kZXh0X25h bWUyIik7CiBjcmVhdGVfZXh0ZW5zaW9uKCRleHRfbmFtZTIsICRleHRfZGlyLCAkZXh0X25hbWUy KTsKIAorIyBNYWtlIHdpbmRvd3MgcGF0aCB1c2UgVW5peCBzbGFzaGVzIGFzIGNhbm9uaWNhbGl6 ZV9wYXRoKCkgaXMgY2FsbGVkIHdoZW4KKyMgY29sbGVjdGluZyBleHRlbnNpb24gY29udHJvbCBw YXRocy4gU2VlIGdldF9leHRlbnNpb25fY29udHJvbF9kaXJlY3RvcmllcygpLgorbXkgJGV4dF9k aXJfY2Fub25pY2FsaXplZCA9ICR3aW5kb3dzX29zID8gKCRleHRfZGlyID1+IHMvXFwvXC8vZ3Ip IDogJGV4dF9kaXI7CisKICMgVXNlIHRoZSBjb3JyZWN0IHNlcGFyYXRvciBhbmQgZXNjYXBlIFwg d2hlbiBydW5uaW5nIG9uIFdpbmRvd3MuCiBteSAkc2VwID0gJHdpbmRvd3Nfb3MgPyAiOyIgOiAi OiI7CiAkbm9kZS0+YXBwZW5kX2NvbmYoCkBAIC00MywyOSArNDcsMzAgQEAgaXMoJGVjcCwgIlwk c3lzdGVtJHNlcCRleHRfZGlyJHNlcCRleHRfZGlyMiIsCiAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgRVhURU5TSU9OICRleHRfbmFtZSIpOwogJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQ1JFQVRFIEVYVEVOU0lPTiAkZXh0X25hbWUyIik7CiAKKwogbXkgJHJldCA9 ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkic2VsZWN0ICogZnJvbSBwZ19hdmFpbGFi bGVfZXh0ZW5zaW9ucyB3aGVyZSBuYW1lID0gJyRleHRfbmFtZSciKTsKIGlzKCAkcmV0LAotCSJ0 ZXN0X2N1c3RvbV9leHRfcGF0aHN8MS4wfDEuMHxUZXN0IGV4dGVuc2lvbl9jb250cm9sX3BhdGgi LAorCSJ0ZXN0X2N1c3RvbV9leHRfcGF0aHN8MS4wfDEuMHxUZXN0IGV4dGVuc2lvbl9jb250cm9s X3BhdGh8JGV4dF9kaXJfY2Fub25pY2FsaXplZC9leHRlbnNpb24iLAogCSJleHRlbnNpb24gaXMg aW5zdGFsbGVkIGNvcnJlY3RseSBvbiBwZ19hdmFpbGFibGVfZXh0ZW5zaW9ucyIpOwogCiAkcmV0 ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJzZWxlY3QgKiBmcm9tIHBnX2F2YWls YWJsZV9leHRlbnNpb25fdmVyc2lvbnMgd2hlcmUgbmFtZSA9ICckZXh0X25hbWUnIik7CiBpcygg JHJldCwKLQkidGVzdF9jdXN0b21fZXh0X3BhdGhzfDEuMHx0fHR8Znx0fHx8VGVzdCBleHRlbnNp b25fY29udHJvbF9wYXRoIiwKKwkidGVzdF9jdXN0b21fZXh0X3BhdGhzfDEuMHx0fHR8Znx0fHx8 VGVzdCBleHRlbnNpb25fY29udHJvbF9wYXRofCRleHRfZGlyX2Nhbm9uaWNhbGl6ZWQvZXh0ZW5z aW9uIiwKIAkiZXh0ZW5zaW9uIGlzIGluc3RhbGxlZCBjb3JyZWN0bHkgb24gcGdfYXZhaWxhYmxl X2V4dGVuc2lvbl92ZXJzaW9ucyIpOwogCiAkcmV0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAogCSJzZWxlY3QgKiBmcm9tIHBnX2F2YWlsYWJsZV9leHRlbnNpb25zIHdoZXJlIG5hbWUg PSAnJGV4dF9uYW1lMiciKTsKIGlzKCAkcmV0LAotCSJ0ZXN0X2N1c3RvbV9leHRfcGF0aHNfdXNp bmdfZGlyZWN0b3J5fDEuMHwxLjB8VGVzdCBleHRlbnNpb25fY29udHJvbF9wYXRoIiwKKwkidGVz dF9jdXN0b21fZXh0X3BhdGhzX3VzaW5nX2RpcmVjdG9yeXwxLjB8MS4wfFRlc3QgZXh0ZW5zaW9u X2NvbnRyb2xfcGF0aHwkZXh0X2Rpcl9jYW5vbmljYWxpemVkL2V4dGVuc2lvbiIsCiAJImV4dGVu c2lvbiBpcyBpbnN0YWxsZWQgY29ycmVjdGx5IG9uIHBnX2F2YWlsYWJsZV9leHRlbnNpb25zIik7 CiAKICRyZXQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJInNlbGVjdCAqIGZyb20g cGdfYXZhaWxhYmxlX2V4dGVuc2lvbl92ZXJzaW9ucyB3aGVyZSBuYW1lID0gJyRleHRfbmFtZTIn IgogKTsKIGlzKCAkcmV0LAotCSJ0ZXN0X2N1c3RvbV9leHRfcGF0aHNfdXNpbmdfZGlyZWN0b3J5 fDEuMHx0fHR8Znx0fHx8VGVzdCBleHRlbnNpb25fY29udHJvbF9wYXRoIiwKKwkidGVzdF9jdXN0 b21fZXh0X3BhdGhzX3VzaW5nX2RpcmVjdG9yeXwxLjB8dHx0fGZ8dHx8fFRlc3QgZXh0ZW5zaW9u X2NvbnRyb2xfcGF0aHwkZXh0X2Rpcl9jYW5vbmljYWxpemVkL2V4dGVuc2lvbiIsCiAJImV4dGVu c2lvbiBpcyBpbnN0YWxsZWQgY29ycmVjdGx5IG9uIHBnX2F2YWlsYWJsZV9leHRlbnNpb25fdmVy c2lvbnMiKTsKIAogIyBFbnN1cmUgdGhhdCBleHRlbnNpb25zIGluc3RhbGxlZCBvbiAkc3lzdGVt IGlzIHN0aWxsIHZpc2libGUgd2hlbiB1c2luZyB3aXRoCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0CmluZGV4IDE2NzUzYjJlNGMwLi44NWRhNjU1Yjg5MyAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9ydWxlcy5vdXQKQEAgLTEzMTAsMTQgKzEzMTAsMTYgQEAgcGdfYXZhaWxhYmxlX2V4dGVu c2lvbl92ZXJzaW9uc3wgU0VMRUNUIGUubmFtZSwKICAgICBlLnJlbG9jYXRhYmxlLAogICAgIGUu c2NoZW1hLAogICAgIGUucmVxdWlyZXMsCi0gICAgZS5jb21tZW50Ci0gICBGUk9NIChwZ19hdmFp bGFibGVfZXh0ZW5zaW9uX3ZlcnNpb25zKCkgZShuYW1lLCB2ZXJzaW9uLCBzdXBlcnVzZXIsIHRy dXN0ZWQsIHJlbG9jYXRhYmxlLCBzY2hlbWEsIHJlcXVpcmVzLCBjb21tZW50KQorICAgIGUuY29t bWVudCwKKyAgICBlLmxvY2F0aW9uCisgICBGUk9NIChwZ19hdmFpbGFibGVfZXh0ZW5zaW9uX3Zl cnNpb25zKCkgZShuYW1lLCB2ZXJzaW9uLCBzdXBlcnVzZXIsIHRydXN0ZWQsIHJlbG9jYXRhYmxl LCBzY2hlbWEsIHJlcXVpcmVzLCBjb21tZW50LCBsb2NhdGlvbikKICAgICAgTEVGVCBKT0lOIHBn X2V4dGVuc2lvbiB4IE9OICgoKGUubmFtZSA9IHguZXh0bmFtZSkgQU5EIChlLnZlcnNpb24gPSB4 LmV4dHZlcnNpb24pKSkpOwogcGdfYXZhaWxhYmxlX2V4dGVuc2lvbnN8IFNFTEVDVCBlLm5hbWUs CiAgICAgZS5kZWZhdWx0X3ZlcnNpb24sCiAgICAgeC5leHR2ZXJzaW9uIEFTIGluc3RhbGxlZF92 ZXJzaW9uLAotICAgIGUuY29tbWVudAotICAgRlJPTSAocGdfYXZhaWxhYmxlX2V4dGVuc2lvbnMo KSBlKG5hbWUsIGRlZmF1bHRfdmVyc2lvbiwgY29tbWVudCkKKyAgICBlLmNvbW1lbnQsCisgICAg ZS5sb2NhdGlvbgorICAgRlJPTSAocGdfYXZhaWxhYmxlX2V4dGVuc2lvbnMoKSBlKG5hbWUsIGRl ZmF1bHRfdmVyc2lvbiwgY29tbWVudCwgbG9jYXRpb24pCiAgICAgIExFRlQgSk9JTiBwZ19leHRl bnNpb24geCBPTiAoKGUubmFtZSA9IHguZXh0bmFtZSkpKTsKIHBnX2JhY2tlbmRfbWVtb3J5X2Nv bnRleHRzfCBTRUxFQ1QgbmFtZSwKICAgICBpZGVudCwKLS0gCjIuNTEuMAoK --dcd665abdc5e7df53e1e337d9d4d9bbd2b0635fdc930d681eb96dc825895--