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 1uyJPz-006NkQ-Hh for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Sep 2025 00:19:35 +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 1uyJOy-00ETTm-VS for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Sep 2025 00:18:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uyJOy-00ETTd-DM for pgsql-hackers@lists.postgresql.org; Tue, 16 Sep 2025 00:18:33 +0000 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uyJOw-000d9p-0a for pgsql-hackers@postgresql.org; Tue, 16 Sep 2025 00:18:32 +0000 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-777ea9fa8fdso1336435b3a.0 for ; Mon, 15 Sep 2025 17:18:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757981909; x=1758586709; darn=postgresql.org; h=mime-version:to:from:subject:message-id:date:from:to:cc:subject :date:message-id:reply-to; bh=7lHPYYR1rYitiHrHHwyOGvOcvZz+U/4ODRw4mAnYK0s=; b=dfee8SjC2+ua/THegi4AUeK/tJ4AjYR3gCrasgSvxabZnZFEXbZPq5FqsrKVfd+wjp LMuzIqftNWp+mlRGbRtfjEhWZPTVG2e3oKlKYCafNrfd1NCUkz276I/1pzVm8T53xb81 68i0rAg/w466Tn5bkB/1Y/rl5ttlNhRVX4vcAoiBuMXDtKRAzOx6UoLN3RVVJb5RTtMo kldgl5JQLXNi5sxceESxA5SMz5IZNpchMzi7a2QxPFq5veVy/KI1ZrQORl520+ZgaZfZ VTS5RXsGFv/wWljPKfOf/WpG0RdKkzyb+ipLsu+TRRgi3ojipe7UFOao5hONejTg0rEM 9Zog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757981909; x=1758586709; h=mime-version:to:from:subject:message-id:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=7lHPYYR1rYitiHrHHwyOGvOcvZz+U/4ODRw4mAnYK0s=; b=ZTAqkRcRzgmLqHaX9ADhVL8aX21SgfLeThyujPV45rfVe3/00sAyBKvgN6mLAtdjz+ LnyLyXQpf49Deecir5aQzimT5T3eKWB1ed92v4tR0LYom/SKXOdjXxr5s+6NCjF9p+IL BBhk1qi1uMPUv1ahPNvhAq5aJq9JcXibJ1ZsWqixkfFvvQD+FLB+gPffl43k57sU/rUy T/7xRWpXJr9Y7XvImhhXeU8ZRiX+f8cG+VkDQnsCd7jRzaQ9j6u6w38AY0bSqf59kwmW F77x8G4je5Zo3xjkVBFXg0vsizOK6xl9ABi2o+p8RSyJmk1gnB00AbAUAJUT98GRtDzg mX/A== X-Gm-Message-State: AOJu0Yz2F6ffnh91hNpWjZFqq5B0190/n5xAaKyFrZvUYYwDwnJHe4ie 3S/OXI2kPVqC600ZbqI12ez3JGYLIAVtaqxXy7kNqfHwpYNuicvvnnQs/z5M7Q== X-Gm-Gg: ASbGncueWsdaCY4LLgP/qArrY+t7212lJ9GY/NgQy0X1mxUgQHOr0ZjXJFQdD8JU4dD VNyV5ndH9Lt9t03evulxXxfQE9pbZhPS985A/IMB7sqeSxgFTOVoGr9dzg1R/JlTHSrU1wy5rDO ObUZcwnCf6rYan3b9NSbYasMbCYPCtcr11ZqBVokQH29oX/9EtlAYocgYfdHDQR7bRiWwbv23nI FrJqdhSj8FKRjAe5jZb3JJDRLhvxQ0N5YvEa4QqXiPjVGDT4PQZ+d7tmid9rZbZ9AzD+R7DaIYk kUrdPQgicIqVqdh+Pn2xrDpahKojJjFSWS+75WBznYE9/sdCSWr0J7fYPyPFLLhs3QMgD9w5gTB eo3vZ2n6uN8lppvGiJD09EAA81qpUUXaz6Q0/EKSpQ6AC0Ho5KgaqF/I= X-Google-Smtp-Source: AGHT+IFLuWh39swqAFBYAnmg2nxDmzjtAWe8yVYZoP+ogF/dnvNdvgUkCRprGNhBzoHll4suidPEvw== X-Received: by 2002:a05:6a00:859c:b0:772:408a:9a6c with SMTP id d2e1a72fcca58-77a8403cd95mr407823b3a.1.1757981908893; Mon, 15 Sep 2025 17:18:28 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:524:d937:8ac7:9f11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77607c45b2csm14405225b3a.89.2025.09.15.17.18.27 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Sep 2025 17:18:28 -0700 (PDT) Content-Type: multipart/mixed; boundary=cc0da78198892d0bc894847e0e4b1c69005fcf81a8f0ee1d61ef49afb0f9 Date: Mon, 15 Sep 2025 21:18:25 -0300 Message-Id: Subject: Include extension path on pg_available_extensions From: "Matheus Alcantara" To: "Pg Hackers" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --cc0da78198892d0bc894847e0e4b1c69005fcf81a8f0ee1d61ef49afb0f9 Content-Type: multipart/alternative; boundary=6b25205a2292fc7d1197dfa0481eaca63136a0a1309e50dcc1ec950a61ef --6b25205a2292fc7d1197dfa0481eaca63136a0a1309e50dcc1ec950a61ef Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 Hi all, On [1] it was mentioned that it could be a good idea to include the extension location when listening the available extensions on pg_available_extensions to make it clear to the user the location of an extension that Postgres is seeing based on the extension_control_path GUC. The attached patch implements this idea. Extensions installed on $system path will not show the actual value of the $system macro and it will show the macro itself, for example: postgres=3D# show extension_control_path; extension_control_path --------------------------------------------------- /usr/local/my/extensions/share/postgresql:$system (1 row) postgres=3D# select * from pg_available_extensions; name | default_version | installed_version | commen= t | location ---------+-----------------+-------------------+---------------------------= -----------------------+--------------------------------------------------- envvar | 1.0.0 | | Get the value of a server = environment variable | /usr/local/my/extensions/share/postgresql/extensio= n amcheck | 1.5 | | functions for verifying re= lation integrity | $system bloom | 1.0 | | bloom access method - sign= ature file based index | $system I'm not sure if this should be included on 18 release since this is not a bug fix but an improvement on the extension system by itself. Any opinions on this? [1] https://www.postgresql.org/message-id/CAKFQuwbR1Fzr8yRuMW%3DN1UMA1cTpFc= qZe9bW_-ZF8%3DBa2Ud2%3Dw%40mail.gmail.com -- Matheus Alcantara --6b25205a2292fc7d1197dfa0481eaca63136a0a1309e50dcc1ec950a61ef-- --cc0da78198892d0bc894847e0e4b1c69005fcf81a8f0ee1d61ef49afb0f9 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0001-Add-path-of-extension-on-pg_available_extensions.patch Content-Type: text/plain; charset=utf-8; name=v1-0001-Add-path-of-extension-on-pg_available_extensions.patch RnJvbSA3YTFjOTNmMzQ0YzYxYzIxZjU2NjkyZmU4ZWZmNzdlNTA5MjkyOWMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IE1vbiwgMTUgU2VwIDIwMjUgMTU6NDY6MjQgLTAzMDAKU3ViamVjdDogW1BBVENIIHYxXSBB ZGQgcGF0aCBvZiBleHRlbnNpb24gb24gcGdfYXZhaWxhYmxlX2V4dGVuc2lvbnMKCi0tLQogc3Jj L2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgICAgICAgIHwgIDQgKy0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jICAgICAgICAgICAgICB8IDgwICsrKysrKysrKysr KysrLS0tLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8 IDEwICstLQogLi4uL3QvMDAxX2V4dGVuc2lvbl9jb250cm9sX3BhdGgucGwgICAgICAgICAgIHwg MTMgKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAgICAgICAgICAgfCAx MCArKy0KIDUgZmlsZXMgY2hhbmdlZCwgODMgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IGM3N2ZhMDIzNGJiLi44ZTNi YzYxZmU0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtNDAyLDE0ICs0 MDIsMTQgQEAgQ1JFQVRFIFZJRVcgcGdfY3Vyc29ycyBBUwogCiBDUkVBVEUgVklFVyBwZ19hdmFp bGFibGVfZXh0ZW5zaW9ucyBBUwogICAgIFNFTEVDVCBFLm5hbWUsIEUuZGVmYXVsdF92ZXJzaW9u LCBYLmV4dHZlcnNpb24gQVMgaW5zdGFsbGVkX3ZlcnNpb24sCi0gICAgICAgICAgIEUuY29tbWVu dAorICAgICAgICAgICBFLmNvbW1lbnQsIEUubG9jYXRpb24KICAgICAgIEZST00gcGdfYXZhaWxh YmxlX2V4dGVuc2lvbnMoKSBBUyBFCiAgICAgICAgICAgIExFRlQgSk9JTiBwZ19leHRlbnNpb24g QVMgWCBPTiBFLm5hbWUgPSBYLmV4dG5hbWU7CiAKIENSRUFURSBWSUVXIHBnX2F2YWlsYWJsZV9l eHRlbnNpb25fdmVyc2lvbnMgQVMKICAgICBTRUxFQ1QgRS5uYW1lLCBFLnZlcnNpb24sIChYLmV4 dG5hbWUgSVMgTk9UIE5VTEwpIEFTIGluc3RhbGxlZCwKICAgICAgICAgICAgRS5zdXBlcnVzZXIs IEUudHJ1c3RlZCwgRS5yZWxvY2F0YWJsZSwKLSAgICAgICAgICAgRS5zY2hlbWEsIEUucmVxdWly ZXMsIEUuY29tbWVudAorICAgICAgICAgICBFLnNjaGVtYSwgRS5yZXF1aXJlcywgRS5jb21tZW50 LCBFLmxvY2F0aW9uCiAgICAgICBGUk9NIHBnX2F2YWlsYWJsZV9leHRlbnNpb25fdmVyc2lvbnMo KSBBUyBFCiAgICAgICAgICAgIExFRlQgSk9JTiBwZ19leHRlbnNpb24gQVMgWAogICAgICAgICAg ICAgIE9OIEUubmFtZSA9IFguZXh0bmFtZSBBTkQgRS52ZXJzaW9uID0gWC5leHR2ZXJzaW9uOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHRlbnNpb24uYwppbmRleCA5M2VmMWFkMTA2Zi4uM2Y4ZTc0ZjEyMTEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCkBAIC0xMjYsNiArMTI2LDE5IEBAIHR5cGVkZWYgc3Ry dWN0CiAJUGFyc2VMb2MJc3RtdF9sZW47CQkvKiBsZW5ndGggaW4gYnl0ZXM7IDAgbWVhbnMgInJl c3Qgb2Ygc3RyaW5nIiAqLwogfSBzY3JpcHRfZXJyb3JfY2FsbGJhY2tfYXJnOwogCisvKgorICog QSBsb2NhdGlvbiBjb25maWd1cmVkIG9uIGV4dGVuc2lvbl9jb250cm9sX3BhdGggR1VDLgorICoK KyAqIFRoZSBtYWNybyBpcyB0aGUgbWFjcm8gcGxhZWhvbGRlciB0aGF0IHRoZSBleHRlbnNpb25f Y29udHJvbF9wYXRoIHN1cHBvcnQKKyAqIGFuZCB3aGljaCBpcyByZXBsYWNlZCBieSBhIHN5c3Rl bSB2YWx1ZSB0aGF0IGlzIHN0b3JlZCBvbiBsb2MuIEZvciBjdXN0b20KKyAqIHBhdGhzIHRoYXQg ZG9uJ3QgaGF2ZSBhIG1hY3JvIHRoZSBtYWNybyBmaWVsZCBpcyBOVUxMLgorICovCit0eXBlZGVm IHN0cnVjdAoreworCWNoYXIJICAgKm1hY3JvOworCWNoYXIJICAgKmxvYzsKK30gTG9jYXRpb247 CisKIC8qIExvY2FsIGZ1bmN0aW9ucyAqLwogc3RhdGljIExpc3QgKmZpbmRfdXBkYXRlX3BhdGgo TGlzdCAqZXZpX2xpc3QsCiAJCQkJCQkJICBFeHRlbnNpb25WZXJzaW9uSW5mbyAqZXZpX3N0YXJ0 LApAQCAtMTQwLDcgKzE1Myw4IEBAIHN0YXRpYyBPaWQJZ2V0X3JlcXVpcmVkX2V4dGVuc2lvbihj aGFyICpyZXFFeHRlbnNpb25OYW1lLAogCQkJCQkJCQkgICBib29sIGlzX2NyZWF0ZSk7CiBzdGF0 aWMgdm9pZCBnZXRfYXZhaWxhYmxlX3ZlcnNpb25zX2Zvcl9leHRlbnNpb24oRXh0ZW5zaW9uQ29u dHJvbEZpbGUgKnBjb250cm9sLAogCQkJCQkJCQkJCQkJIFR1cGxlc3RvcmVzdGF0ZSAqdHVwc3Rv cmUsCi0JCQkJCQkJCQkJCQkgVHVwbGVEZXNjIHR1cGRlc2MpOworCQkJCQkJCQkJCQkJIFR1cGxl RGVzYyB0dXBkZXNjLAorCQkJCQkJCQkJCQkJIExvY2F0aW9uICpsb2NhdGlvbik7CiBzdGF0aWMg RGF0dW0gY29udmVydF9yZXF1aXJlc190b19kYXR1bShMaXN0ICpyZXF1aXJlcyk7CiBzdGF0aWMg dm9pZCBBcHBseUV4dGVuc2lvblVwZGF0ZXMoT2lkIGV4dGVuc2lvbk9pZCwKIAkJCQkJCQkJICBF eHRlbnNpb25Db250cm9sRmlsZSAqcGNvbnRyb2wsCkBAIC0zNTQsNyArMzY4LDExIEBAIGdldF9l eHRlbnNpb25fY29udHJvbF9kaXJlY3Rvcmllcyh2b2lkKQogCiAJaWYgKHN0cmxlbihFeHRlbnNp b25fY29udHJvbF9wYXRoKSA9PSAwKQogCXsKLQkJcGF0aHMgPSBsYXBwZW5kKHBhdGhzLCBzeXN0 ZW1fZGlyKTsKKwkJTG9jYXRpb24gICAqbG9jYXRpb24gPSBwYWxsb2MwX29iamVjdChMb2NhdGlv bik7CisKKwkJbG9jYXRpb24tPm1hY3JvID0gTlVMTDsKKwkJbG9jYXRpb24tPmxvYyA9IHN5c3Rl bV9kaXI7CisJCXBhdGhzID0gbGFwcGVuZChwYXRocywgbG9jYXRpb24pOwogCX0KIAllbHNlCiAJ ewpAQCAtMzY2LDYgKzM4NCw3IEBAIGdldF9leHRlbnNpb25fY29udHJvbF9kaXJlY3Rvcmllcyh2 b2lkKQogCQkJaW50CQkJbGVuOwogCQkJY2hhcgkgICAqbWFuZ2xlZDsKIAkJCWNoYXIJICAgKnBp ZWNlID0gZmlyc3RfcGF0aF92YXJfc2VwYXJhdG9yKGVjcCk7CisJCQlMb2NhdGlvbiAgICpsb2Nh dGlvbiA9IHBhbGxvYzBfb2JqZWN0KExvY2F0aW9uKTsKIAogCQkJLyogR2V0IHRoZSBsZW5ndGgg b2YgdGhlIG5leHQgcGF0aCBvbiBlY3AgKi8KIAkJCWlmIChwaWVjZSA9PSBOVUxMKQpAQCAtMzgy LDE1ICs0MDEsMjEgQEAgZ2V0X2V4dGVuc2lvbl9jb250cm9sX2RpcmVjdG9yaWVzKHZvaWQpCiAJ CQkgKiBzdWZmaXggaWYgaXQgaXMgYSBjdXN0b20gZXh0ZW5zaW9uIGNvbnRyb2wgcGF0aC4KIAkJ CSAqLwogCQkJaWYgKHN0cmNtcChwaWVjZSwgIiRzeXN0ZW0iKSA9PSAwKQorCQkJeworCQkJCWxv Y2F0aW9uLT5tYWNybyA9IHBzdHJkdXAocGllY2UpOwogCQkJCW1hbmdsZWQgPSBzdWJzdGl0dXRl X3BhdGhfbWFjcm8ocGllY2UsICIkc3lzdGVtIiwgc3lzdGVtX2Rpcik7CisJCQl9CiAJCQllbHNl CisJCQl7CisJCQkJbG9jYXRpb24tPm1hY3JvID0gTlVMTDsKIAkJCQltYW5nbGVkID0gcHNwcmlu dGYoIiVzL2V4dGVuc2lvbiIsIHBpZWNlKTsKLQorCQkJfQogCQkJcGZyZWUocGllY2UpOwogCiAJ CQkvKiBDYW5vbmljYWxpemUgdGhlIHBhdGggYmFzZWQgb24gdGhlIE9TIGFuZCBhZGQgdG8gdGhl IGxpc3QgKi8KIAkJCWNhbm9uaWNhbGl6ZV9wYXRoKG1hbmdsZWQpOwotCQkJcGF0aHMgPSBsYXBw ZW5kKHBhdGhzLCBtYW5nbGVkKTsKKwkJCWxvY2F0aW9uLT5sb2MgPSBtYW5nbGVkOworCQkJcGF0 aHMgPSBsYXBwZW5kKHBhdGhzLCBsb2NhdGlvbik7CiAKIAkJCS8qIEJyZWFrIGlmIGVjcCBpcyBl bXB0eSBvciBtb3ZlIHRvIHRoZSBuZXh0IHBhdGggb24gZWNwICovCiAJCQlpZiAoZWNwW2xlbl0g PT0gJ1wwJykKQEAgLTIyMTUsOSArMjI0MCw5IEBAIHBnX2F2YWlsYWJsZV9leHRlbnNpb25zKFBH X0ZVTkNUSU9OX0FSR1MpCiAKIAlsb2NhdGlvbnMgPSBnZXRfZXh0ZW5zaW9uX2NvbnRyb2xfZGly ZWN0b3JpZXMoKTsKIAotCWZvcmVhY2hfcHRyKGNoYXIsIGxvY2F0aW9uLCBsb2NhdGlvbnMpCisJ Zm9yZWFjaF9wdHIoTG9jYXRpb24sIGxvY2F0aW9uLCBsb2NhdGlvbnMpCiAJewotCQlkaXIgPSBB bGxvY2F0ZURpcihsb2NhdGlvbik7CisJCWRpciA9IEFsbG9jYXRlRGlyKGxvY2F0aW9uLT5sb2Mp OwogCiAJCS8qCiAJCSAqIElmIHRoZSBjb250cm9sIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCB3 ZSB3YW50IHRvIHNpbGVudGx5IHJldHVybgpAQCAtMjIyOSwxMyArMjI1NCwxMyBAQCBwZ19hdmFp bGFibGVfZXh0ZW5zaW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQl9CiAJCWVsc2UKIAkJewotCQkJ d2hpbGUgKChkZSA9IFJlYWREaXIoZGlyLCBsb2NhdGlvbikpICE9IE5VTEwpCisJCQl3aGlsZSAo KGRlID0gUmVhZERpcihkaXIsIGxvY2F0aW9uLT5sb2MpKSAhPSBOVUxMKQogCQkJewogCQkJCUV4 dGVuc2lvbkNvbnRyb2xGaWxlICpjb250cm9sOwogCQkJCWNoYXIJICAgKmV4dG5hbWU7CiAJCQkJ U3RyaW5nCSAgICpleHRuYW1lX3N0cjsKLQkJCQlEYXR1bQkJdmFsdWVzWzNdOwotCQkJCWJvb2wJ CW51bGxzWzNdOworCQkJCURhdHVtCQl2YWx1ZXNbNF07CisJCQkJYm9vbAkJbnVsbHNbNF07CiAK IAkJCQlpZiAoIWlzX2V4dGVuc2lvbl9jb250cm9sX2ZpbGVuYW1lKGRlLT5kX25hbWUpKQogCQkJ CQljb250aW51ZTsKQEAgLTIyNTksNyArMjI4NCw3IEBAIHBnX2F2YWlsYWJsZV9leHRlbnNpb25z KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCWZvdW5kX2V4dCA9IGxhcHBlbmQoZm91bmRfZXh0LCBl eHRuYW1lX3N0cik7CiAKIAkJCQljb250cm9sID0gbmV3X0V4dGVuc2lvbkNvbnRyb2xGaWxlKGV4 dG5hbWUpOwotCQkJCWNvbnRyb2wtPmNvbnRyb2xfZGlyID0gcHN0cmR1cChsb2NhdGlvbik7CisJ CQkJY29udHJvbC0+Y29udHJvbF9kaXIgPSBwc3RyZHVwKGxvY2F0aW9uLT5sb2MpOwogCQkJCXBh cnNlX2V4dGVuc2lvbl9jb250cm9sX2ZpbGUoY29udHJvbCwgTlVMTCk7CiAKIAkJCQltZW1zZXQo dmFsdWVzLCAwLCBzaXplb2YodmFsdWVzKSk7CkBAIC0yMjc5LDYgKzIzMDQsMTIgQEAgcGdfYXZh aWxhYmxlX2V4dGVuc2lvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQllbHNlCiAJCQkJCXZhbHVl c1syXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oY29udHJvbC0+Y29tbWVudCk7CiAKKwkJCQkvKiBs b2NhdGlvbiAqLworCQkJCWlmIChsb2NhdGlvbi0+bWFjcm8gPT0gTlVMTCkKKwkJCQkJdmFsdWVz WzNdID0gQ1N0cmluZ0dldFRleHREYXR1bShsb2NhdGlvbi0+bG9jKTsKKwkJCQllbHNlCisJCQkJ CXZhbHVlc1szXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0obG9jYXRpb24tPm1hY3JvKTsKKwogCQkJ CXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2Ms CiAJCQkJCQkJCQkgdmFsdWVzLCBudWxscyk7CiAJCQl9CkBAIC0yMzEzLDkgKzIzNDQsOSBAQCBw Z19hdmFpbGFibGVfZXh0ZW5zaW9uX3ZlcnNpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlsb2Nh dGlvbnMgPSBnZXRfZXh0ZW5zaW9uX2NvbnRyb2xfZGlyZWN0b3JpZXMoKTsKIAotCWZvcmVhY2hf cHRyKGNoYXIsIGxvY2F0aW9uLCBsb2NhdGlvbnMpCisJZm9yZWFjaF9wdHIoTG9jYXRpb24sIGxv Y2F0aW9uLCBsb2NhdGlvbnMpCiAJewotCQlkaXIgPSBBbGxvY2F0ZURpcihsb2NhdGlvbik7CisJ CWRpciA9IEFsbG9jYXRlRGlyKGxvY2F0aW9uLT5sb2MpOwogCiAJCS8qCiAJCSAqIElmIHRoZSBj b250cm9sIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCB3ZSB3YW50IHRvIHNpbGVudGx5IHJldHVy bgpAQCAtMjMyNyw3ICsyMzU4LDcgQEAgcGdfYXZhaWxhYmxlX2V4dGVuc2lvbl92ZXJzaW9ucyhQ R19GVU5DVElPTl9BUkdTKQogCQl9CiAJCWVsc2UKIAkJewotCQkJd2hpbGUgKChkZSA9IFJlYWRE aXIoZGlyLCBsb2NhdGlvbikpICE9IE5VTEwpCisJCQl3aGlsZSAoKGRlID0gUmVhZERpcihkaXIs IGxvY2F0aW9uLT5sb2MpKSAhPSBOVUxMKQogCQkJewogCQkJCUV4dGVuc2lvbkNvbnRyb2xGaWxl ICpjb250cm9sOwogCQkJCWNoYXIJICAgKmV4dG5hbWU7CkBAIC0yMzU2LDEyICsyMzg3LDEzIEBA IHBnX2F2YWlsYWJsZV9leHRlbnNpb25fdmVyc2lvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAogCQkJ CS8qIHJlYWQgdGhlIGNvbnRyb2wgZmlsZSAqLwogCQkJCWNvbnRyb2wgPSBuZXdfRXh0ZW5zaW9u Q29udHJvbEZpbGUoZXh0bmFtZSk7Ci0JCQkJY29udHJvbC0+Y29udHJvbF9kaXIgPSBwc3RyZHVw KGxvY2F0aW9uKTsKKwkJCQljb250cm9sLT5jb250cm9sX2RpciA9IHBzdHJkdXAobG9jYXRpb24t PmxvYyk7CiAJCQkJcGFyc2VfZXh0ZW5zaW9uX2NvbnRyb2xfZmlsZShjb250cm9sLCBOVUxMKTsK IAogCQkJCS8qIHNjYW4gZXh0ZW5zaW9uJ3Mgc2NyaXB0IGRpcmVjdG9yeSBmb3IgaW5zdGFsbCBz Y3JpcHRzICovCiAJCQkJZ2V0X2F2YWlsYWJsZV92ZXJzaW9uc19mb3JfZXh0ZW5zaW9uKGNvbnRy b2wsIHJzaW5mby0+c2V0UmVzdWx0LAotCQkJCQkJCQkJCQkJCSByc2luZm8tPnNldERlc2MpOwor CQkJCQkJCQkJCQkJCSByc2luZm8tPnNldERlc2MsCisJCQkJCQkJCQkJCQkJIGxvY2F0aW9uKTsK IAkJCX0KIAogCQkJRnJlZURpcihkaXIpOwpAQCAtMjM3OCw3ICsyNDEwLDggQEAgcGdfYXZhaWxh YmxlX2V4dGVuc2lvbl92ZXJzaW9ucyhQR19GVU5DVElPTl9BUkdTKQogc3RhdGljIHZvaWQKIGdl dF9hdmFpbGFibGVfdmVyc2lvbnNfZm9yX2V4dGVuc2lvbihFeHRlbnNpb25Db250cm9sRmlsZSAq cGNvbnRyb2wsCiAJCQkJCQkJCQkgVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKLQkJCQkJCQkJ CSBUdXBsZURlc2MgdHVwZGVzYykKKwkJCQkJCQkJCSBUdXBsZURlc2MgdHVwZGVzYywKKwkJCQkJ CQkJCSBMb2NhdGlvbiAqbG9jYXRpb24pCiB7CiAJTGlzdAkgICAqZXZpX2xpc3Q7CiAJTGlzdENl bGwgICAqbGM7CkBAIC0yMzkxLDggKzI0MjQsOCBAQCBnZXRfYXZhaWxhYmxlX3ZlcnNpb25zX2Zv cl9leHRlbnNpb24oRXh0ZW5zaW9uQ29udHJvbEZpbGUgKnBjb250cm9sLAogCXsKIAkJRXh0ZW5z aW9uVmVyc2lvbkluZm8gKmV2aSA9IChFeHRlbnNpb25WZXJzaW9uSW5mbyAqKSBsZmlyc3QobGMp OwogCQlFeHRlbnNpb25Db250cm9sRmlsZSAqY29udHJvbDsKLQkJRGF0dW0JCXZhbHVlc1s4XTsK LQkJYm9vbAkJbnVsbHNbOF07CisJCURhdHVtCQl2YWx1ZXNbOV07CisJCWJvb2wJCW51bGxzWzld OwogCQlMaXN0Q2VsbCAgICpsYzI7CiAKIAkJaWYgKCFldmktPmluc3RhbGxhYmxlKQpAQCAtMjQz NCw2ICsyNDY3LDEyIEBAIGdldF9hdmFpbGFibGVfdmVyc2lvbnNfZm9yX2V4dGVuc2lvbihFeHRl bnNpb25Db250cm9sRmlsZSAqcGNvbnRyb2wsCiAJCWVsc2UKIAkJCXZhbHVlc1s3XSA9IENTdHJp bmdHZXRUZXh0RGF0dW0oY29udHJvbC0+Y29tbWVudCk7CiAKKwkJLyogbG9jYXRpb24gKi8KKwkJ aWYgKGxvY2F0aW9uLT5tYWNybyA9PSBOVUxMKQorCQkJdmFsdWVzWzhdID0gQ1N0cmluZ0dldFRl eHREYXR1bShsb2NhdGlvbi0+bG9jKTsKKwkJZWxzZQorCQkJdmFsdWVzWzhdID0gQ1N0cmluZ0dl dFRleHREYXR1bShsb2NhdGlvbi0+bWFjcm8pOworCiAJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHR1 cHN0b3JlLCB0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAogCQkvKgpAQCAtMjQ3NSw2ICsyNTE0 LDggQEAgZ2V0X2F2YWlsYWJsZV92ZXJzaW9uc19mb3JfZXh0ZW5zaW9uKEV4dGVuc2lvbkNvbnRy b2xGaWxlICpwY29udHJvbCwKIAkJCQl9CiAJCQkJLyogY29tbWVudCBzdGF5cyB0aGUgc2FtZSAq LwogCisJCQkJLyogbG9jYXRpb24gc3RheXMgdGhlIHNhbWUgKi8KKwogCQkJCXR1cGxlc3RvcmVf cHV0dmFsdWVzKHR1cHN0b3JlLCB0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAkJCX0KIAkJfQpA QCAtMzkwMyw3ICszOTQ0LDggQEAgZmluZF9pbl9wYXRocyhjb25zdCBjaGFyICpiYXNlbmFtZSwg TGlzdCAqcGF0aHMpCiAKIAlmb3JlYWNoKGNlbGwsIHBhdGhzKQogCXsKLQkJY2hhcgkgICAqcGF0 aCA9IGxmaXJzdChjZWxsKTsKKwkJTG9jYXRpb24gICAqbG9jYXRpb24gPSBsZmlyc3QoY2VsbCk7 CisJCWNoYXIJICAgKnBhdGggPSBsb2NhdGlvbi0+bG9jOwogCQljaGFyCSAgICpmdWxsOwogCiAJ CUFzc2VydChwYXRoICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggMDNlODJk MjhjODcuLjRjMmQxNmE0ZjZjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEwNzM1LDE2 ICsxMDczNSwxNiBAQAogeyBvaWQgPT4gJzMwODInLCBkZXNjciA9PiAnbGlzdCBhdmFpbGFibGUg ZXh0ZW5zaW9ucycsCiAgIHByb25hbWUgPT4gJ3BnX2F2YWlsYWJsZV9leHRlbnNpb25zJywgcHJv Y29zdCA9PiAnMTAnLCBwcm9yb3dzID0+ICcxMDAnLAogICBwcm9yZXRzZXQgPT4gJ3QnLCBwcm92 b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsCi0gIHByb2FyZ3R5cGVzID0+ ICcnLCBwcm9hbGxhcmd0eXBlcyA9PiAne25hbWUsdGV4dCx0ZXh0fScsCi0gIHByb2FyZ21vZGVz ID0+ICd7byxvLG99JywgcHJvYXJnbmFtZXMgPT4gJ3tuYW1lLGRlZmF1bHRfdmVyc2lvbixjb21t ZW50fScsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9hbGxhcmd0eXBlcyA9PiAne25hbWUsdGV4 dCx0ZXh0LHRleHR9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tvLG8sbyxvfScsIHByb2FyZ25hbWVz ID0+ICd7bmFtZSxkZWZhdWx0X3ZlcnNpb24sY29tbWVudCxsb2NhdGlvbn0nLAogICBwcm9zcmMg PT4gJ3BnX2F2YWlsYWJsZV9leHRlbnNpb25zJyB9LAogeyBvaWQgPT4gJzMwODMnLCBkZXNjciA9 PiAnbGlzdCBhdmFpbGFibGUgZXh0ZW5zaW9uIHZlcnNpb25zJywKICAgcHJvbmFtZSA9PiAncGdf YXZhaWxhYmxlX2V4dGVuc2lvbl92ZXJzaW9ucycsIHByb2Nvc3QgPT4gJzEwJywKICAgcHJvcm93 cyA9PiAnMTAwJywgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAogICBwcm9y ZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnJywKLSAgcHJvYWxsYXJndHlwZXMg PT4gJ3tuYW1lLHRleHQsYm9vbCxib29sLGJvb2wsbmFtZSxfbmFtZSx0ZXh0fScsCi0gIHByb2Fy Z21vZGVzID0+ICd7byxvLG8sbyxvLG8sbyxvfScsCi0gIHByb2FyZ25hbWVzID0+ICd7bmFtZSx2 ZXJzaW9uLHN1cGVydXNlcix0cnVzdGVkLHJlbG9jYXRhYmxlLHNjaGVtYSxyZXF1aXJlcyxjb21t ZW50fScsCisgIHByb2FsbGFyZ3R5cGVzID0+ICd7bmFtZSx0ZXh0LGJvb2wsYm9vbCxib29sLG5h bWUsX25hbWUsdGV4dCx0ZXh0fScsCisgIHByb2FyZ21vZGVzID0+ICd7byxvLG8sbyxvLG8sbyxv LG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tuYW1lLHZlcnNpb24sc3VwZXJ1c2VyLHRydXN0ZWQs cmVsb2NhdGFibGUsc2NoZW1hLHJlcXVpcmVzLGNvbW1lbnQsbG9jYXRpb259JywKICAgcHJvc3Jj ID0+ICdwZ19hdmFpbGFibGVfZXh0ZW5zaW9uX3ZlcnNpb25zJyB9LAogeyBvaWQgPT4gJzMwODQn LCBkZXNjciA9PiAnbGlzdCBhbiBleHRlbnNpb25cJ3MgdmVyc2lvbiB1cGRhdGUgcGF0aHMnLAog ICBwcm9uYW1lID0+ICdwZ19leHRlbnNpb25fdXBkYXRlX3BhdGhzJywgcHJvY29zdCA9PiAnMTAn LCBwcm9yb3dzID0+ICcxMDAnLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4 dGVuc2lvbnMvdC8wMDFfZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aC5wbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9leHRlbnNpb25zL3QvMDAxX2V4dGVuc2lvbl9jb250cm9sX3BhdGgucGwKaW5kZXgg N2ZiZTViZGUzMzIuLjMzMmM3NGQ3MmJjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZXh0ZW5zaW9ucy90LzAwMV9leHRlbnNpb25fY29udHJvbF9wYXRoLnBsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL3QvMDAxX2V4dGVuc2lvbl9jb250cm9sX3BhdGgu cGwKQEAgLTI1LDYgKzI1LDEwIEBAIG15ICRleHRfbmFtZTIgPSAidGVzdF9jdXN0b21fZXh0X3Bh dGhzX3VzaW5nX2RpcmVjdG9yeSI7CiBta3BhdGgoIiRleHRfZGlyLyRleHRfbmFtZTIiKTsKIGNy ZWF0ZV9leHRlbnNpb24oJGV4dF9uYW1lMiwgJGV4dF9kaXIsICRleHRfbmFtZTIpOwogCisjIE1h a2Ugd2luZG93cyBwYXRoIHVzZSBVbml4IHNsYXNoZXMgYXMgY2Fub25pY2FsaXplX3BhdGgoKSBp cyBjYWxsZWQgd2hlbgorIyBjb2xsZWN0aW5nIGV4dGVuc2lvbiBjb250cm9sIHBhdGhzLiBTZWUg Z2V0X2V4dGVuc2lvbl9jb250cm9sX2RpcmVjdG9yaWVzKCkuCitteSAkZXh0X2Rpcl9jYW5vbmlj YWxpemVkID0gJHdpbmRvd3Nfb3MgPyAoJGV4dF9kaXIgPX4gcy9cXC9cLy9ncikgOiAkZXh0X2Rp cjsKKwogIyBVc2UgdGhlIGNvcnJlY3Qgc2VwYXJhdG9yIGFuZCBlc2NhcGUgXCB3aGVuIHJ1bm5p bmcgb24gV2luZG93cy4KIG15ICRzZXAgPSAkd2luZG93c19vcyA/ICI7IiA6ICI6IjsKICRub2Rl LT5hcHBlbmRfY29uZigKQEAgLTQzLDI5ICs0NywzMCBAQCBpcygkZWNwLCAiXCRzeXN0ZW0kc2Vw JGV4dF9kaXIkc2VwJGV4dF9kaXIyIiwKICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBFWFRFTlNJT04gJGV4dF9uYW1lIik7CiAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDUkVBVEUgRVhURU5TSU9OICRleHRfbmFtZTIiKTsKIAorCiBteSAkcmV0ID0gJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAogCSJzZWxlY3QgKiBmcm9tIHBnX2F2YWlsYWJsZV9leHRlbnNp b25zIHdoZXJlIG5hbWUgPSAnJGV4dF9uYW1lJyIpOwogaXMoICRyZXQsCi0JInRlc3RfY3VzdG9t X2V4dF9wYXRoc3wxLjB8MS4wfFRlc3QgZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aCIsCisJInRlc3Rf Y3VzdG9tX2V4dF9wYXRoc3wxLjB8MS4wfFRlc3QgZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aHwkZXh0 X2Rpcl9jYW5vbmljYWxpemVkL2V4dGVuc2lvbiIsCiAJImV4dGVuc2lvbiBpcyBpbnN0YWxsZWQg Y29ycmVjdGx5IG9uIHBnX2F2YWlsYWJsZV9leHRlbnNpb25zIik7CiAKICRyZXQgPSAkbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJInNlbGVjdCAqIGZyb20gcGdfYXZhaWxhYmxlX2V4dGVu c2lvbl92ZXJzaW9ucyB3aGVyZSBuYW1lID0gJyRleHRfbmFtZSciKTsKIGlzKCAkcmV0LAotCSJ0 ZXN0X2N1c3RvbV9leHRfcGF0aHN8MS4wfHR8dHxmfHR8fHxUZXN0IGV4dGVuc2lvbl9jb250cm9s X3BhdGgiLAorCSJ0ZXN0X2N1c3RvbV9leHRfcGF0aHN8MS4wfHR8dHxmfHR8fHxUZXN0IGV4dGVu c2lvbl9jb250cm9sX3BhdGh8JGV4dF9kaXJfY2Fub25pY2FsaXplZC9leHRlbnNpb24iLAogCSJl eHRlbnNpb24gaXMgaW5zdGFsbGVkIGNvcnJlY3RseSBvbiBwZ19hdmFpbGFibGVfZXh0ZW5zaW9u X3ZlcnNpb25zIik7CiAKICRyZXQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJInNl bGVjdCAqIGZyb20gcGdfYXZhaWxhYmxlX2V4dGVuc2lvbnMgd2hlcmUgbmFtZSA9ICckZXh0X25h bWUyJyIpOwogaXMoICRyZXQsCi0JInRlc3RfY3VzdG9tX2V4dF9wYXRoc191c2luZ19kaXJlY3Rv cnl8MS4wfDEuMHxUZXN0IGV4dGVuc2lvbl9jb250cm9sX3BhdGgiLAorCSJ0ZXN0X2N1c3RvbV9l eHRfcGF0aHNfdXNpbmdfZGlyZWN0b3J5fDEuMHwxLjB8VGVzdCBleHRlbnNpb25fY29udHJvbF9w YXRofCRleHRfZGlyX2Nhbm9uaWNhbGl6ZWQvZXh0ZW5zaW9uIiwKIAkiZXh0ZW5zaW9uIGlzIGlu c3RhbGxlZCBjb3JyZWN0bHkgb24gcGdfYXZhaWxhYmxlX2V4dGVuc2lvbnMiKTsKIAogJHJldCA9 ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkic2VsZWN0ICogZnJvbSBwZ19hdmFpbGFi bGVfZXh0ZW5zaW9uX3ZlcnNpb25zIHdoZXJlIG5hbWUgPSAnJGV4dF9uYW1lMiciCiApOwogaXMo ICRyZXQsCi0JInRlc3RfY3VzdG9tX2V4dF9wYXRoc191c2luZ19kaXJlY3Rvcnl8MS4wfHR8dHxm fHR8fHxUZXN0IGV4dGVuc2lvbl9jb250cm9sX3BhdGgiLAorCSJ0ZXN0X2N1c3RvbV9leHRfcGF0 aHNfdXNpbmdfZGlyZWN0b3J5fDEuMHx0fHR8Znx0fHx8VGVzdCBleHRlbnNpb25fY29udHJvbF9w YXRofCRleHRfZGlyX2Nhbm9uaWNhbGl6ZWQvZXh0ZW5zaW9uIiwKIAkiZXh0ZW5zaW9uIGlzIGlu c3RhbGxlZCBjb3JyZWN0bHkgb24gcGdfYXZhaWxhYmxlX2V4dGVuc2lvbl92ZXJzaW9ucyIpOwog CiAjIEVuc3VyZSB0aGF0IGV4dGVuc2lvbnMgaW5zdGFsbGVkIG9uICRzeXN0ZW0gaXMgc3RpbGwg dmlzaWJsZSB3aGVuIHVzaW5nIHdpdGgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5k ZXggMzVlOGFhZDc3MDEuLmM4NzZkMmFmMGI4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVz Lm91dApAQCAtMTMxMCwxNCArMTMxMCwxNiBAQCBwZ19hdmFpbGFibGVfZXh0ZW5zaW9uX3ZlcnNp b25zfCBTRUxFQ1QgZS5uYW1lLAogICAgIGUucmVsb2NhdGFibGUsCiAgICAgZS5zY2hlbWEsCiAg ICAgZS5yZXF1aXJlcywKLSAgICBlLmNvbW1lbnQKLSAgIEZST00gKHBnX2F2YWlsYWJsZV9leHRl bnNpb25fdmVyc2lvbnMoKSBlKG5hbWUsIHZlcnNpb24sIHN1cGVydXNlciwgdHJ1c3RlZCwgcmVs b2NhdGFibGUsIHNjaGVtYSwgcmVxdWlyZXMsIGNvbW1lbnQpCisgICAgZS5jb21tZW50LAorICAg IGUubG9jYXRpb24KKyAgIEZST00gKHBnX2F2YWlsYWJsZV9leHRlbnNpb25fdmVyc2lvbnMoKSBl KG5hbWUsIHZlcnNpb24sIHN1cGVydXNlciwgdHJ1c3RlZCwgcmVsb2NhdGFibGUsIHNjaGVtYSwg cmVxdWlyZXMsIGNvbW1lbnQsIGxvY2F0aW9uKQogICAgICBMRUZUIEpPSU4gcGdfZXh0ZW5zaW9u IHggT04gKCgoZS5uYW1lID0geC5leHRuYW1lKSBBTkQgKGUudmVyc2lvbiA9IHguZXh0dmVyc2lv bikpKSk7CiBwZ19hdmFpbGFibGVfZXh0ZW5zaW9uc3wgU0VMRUNUIGUubmFtZSwKICAgICBlLmRl ZmF1bHRfdmVyc2lvbiwKICAgICB4LmV4dHZlcnNpb24gQVMgaW5zdGFsbGVkX3ZlcnNpb24sCi0g ICAgZS5jb21tZW50Ci0gICBGUk9NIChwZ19hdmFpbGFibGVfZXh0ZW5zaW9ucygpIGUobmFtZSwg ZGVmYXVsdF92ZXJzaW9uLCBjb21tZW50KQorICAgIGUuY29tbWVudCwKKyAgICBlLmxvY2F0aW9u CisgICBGUk9NIChwZ19hdmFpbGFibGVfZXh0ZW5zaW9ucygpIGUobmFtZSwgZGVmYXVsdF92ZXJz aW9uLCBjb21tZW50LCBsb2NhdGlvbikKICAgICAgTEVGVCBKT0lOIHBnX2V4dGVuc2lvbiB4IE9O ICgoZS5uYW1lID0geC5leHRuYW1lKSkpOwogcGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHN8IFNF TEVDVCBuYW1lLAogICAgIGlkZW50LAotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --cc0da78198892d0bc894847e0e4b1c69005fcf81a8f0ee1d61ef49afb0f9--