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 1rs4Dn-004bWR-Jg for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Apr 2024 17:16:24 +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 1rs4Dm-005HzI-9l for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Apr 2024 17:16:22 +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 1rs4Dl-005Hy3-IM for pgsql-hackers@lists.postgresql.org; Wed, 03 Apr 2024 17:16:21 +0000 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rs4Di-000OJh-3Z for pgsql-hackers@postgresql.org; Wed, 03 Apr 2024 17:16:20 +0000 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-2a2c028b8a6so16496a91.1 for ; Wed, 03 Apr 2024 10:16:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgguru-net.20230601.gappssmtp.com; s=20230601; t=1712164577; x=1712769377; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=2LOaO1B/Sj6xQzzAuFzThJPp0Qb3eQhUi0NyXUPTit8=; b=xZBFF3AjQAoYJkyua4sqghcD6RyfhBf1T93rneIHZqVbofBVO28sU8DBLDbt7FQaIo IqvTGdLZQubQ+zqasUHerZSnW112Qg5NIR9xZjJEdkLtwQTbRMcPxP7JiQBb7JqSNW3k ANwW5WtMuZ2oP5LVXukej5U6qtC2FuCtE/pHSGp+AhAQ3U3Bk38shEvFnq/jhRCOd0Ju u2cbgsFs1laMl/Ups/1IhHNMD2r7ycbGYpjrgmmxqd8np+bbtrlmmjyzr6hND03cgeZ9 X/FAUG6YcmKW3QiIhu9mwCS7kYlpEt09bA0omQce38yJBhoWlA8OAB0oy2QZEUfO600I ZXjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712164577; x=1712769377; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=2LOaO1B/Sj6xQzzAuFzThJPp0Qb3eQhUi0NyXUPTit8=; b=ZKQ6tkoDYj8XmPR4t4dSzicV022CI8KRG+yetRyNnLVHPhmtgm7yx/0rSHKBrhrtbt slPNeAiS46ZunTwr/CMusRydEIgOZ1YEXax8JSNfhfVleis+MGgDCggWA4ihm3LQL3Su d4OD4NgggYsWnMiljk6lIUdGfLaWbvdTt4Q9KE4Kkk/Yc/qFt/twyJwKkFz0XlGJGONm GdMZvtsEKRwnF7Cy+Gi0VZFonof/IYla/N0rgN5d8gfDo9iLNSH8HkE1ODC6QtpsjqgQ 7mZhieGLCxrfLuk2vtGs6qhpTfy2NrPoowfzaWuppI7XWpXTg4/Kk02UQYuwwCTuZLAt Sg5A== X-Forwarded-Encrypted: i=1; AJvYcCVeOV1bWJTiIT0ogsBYcB9VZ53Rw+MmI8/IA1KYNTptpBJ1VL7/YMyXDiIcLqmIQYvDvjCOn+n9rrb0YI6Eoz7yh/xz7e4dpMkU/xOx X-Gm-Message-State: AOJu0YwN4cqcDrLi5C06gUUMIkAamkyaws0Ofq/8KJWOF6lbTx+OR0qP R2CsuzXL34zH166tl9J8xHTpkk7TwB0lz8H75z2KIkKWBXB2/zyg4sWIx6I7XDDPeFDlBx6ZLXi eslQDwUABKKWmvGeWEFhOVoA5w5HZP4Ac9YYA8w== X-Google-Smtp-Source: AGHT+IGMtEPT3IR2L3rv636j+fD7d0bgefeJ1NXQNlxQLQ0SRDFykG68PGQvGIexAoaXWcelcNgGplCdnb0bMnmyHuQ= X-Received: by 2002:a17:90b:1945:b0:2a2:235e:3e6c with SMTP id nk5-20020a17090b194500b002a2235e3e6cmr146250pjb.25.1712164576980; Wed, 03 Apr 2024 10:16:16 -0700 (PDT) MIME-Version: 1.0 References: <8c9b9b7d-0868-46d4-963c-8b1906bd7a1b@eisentraut.org> In-Reply-To: From: David Christensen Date: Wed, 3 Apr 2024 12:16:05 -0500 Message-ID: Subject: Re: Adding comments to help understand psql hidden queries To: Greg Sabino Mullane Cc: Peter Eisentraut , Jim Jones , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000689e7506153461fc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000689e7506153461fc Content-Type: text/plain; charset="UTF-8" I got Greg's blessing on squashing the commits down, and now including a v4 with additional improvements on the output formatting front. Main changes: - all generated comments are the same width - width has been bumped to 80 - removed _() functions for consumers of the new output functions This patch adds two new helper functions, OutputComment() and OutputCommentStars() to output and wrap the comments to the appropriate widths. Everything should continue to work just fine if we want to adjust the width by just adjusting the MAX_COMMENT_WIDTH symbol. I removed _() in the output of the query/stars since there'd be no sensible existing translations for the constructed string, which included the query string itself. If we need it for the "QUERY" string, this could be added fairly easily, but the existing piece would have been nonsensical and never used in practice. Thanks, David --000000000000689e7506153461fc Content-Type: application/octet-stream; name="v4-0001-Improve-SQL-comments-on-echo-hidden-output.patch" Content-Disposition: attachment; filename="v4-0001-Improve-SQL-comments-on-echo-hidden-output.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_luk2k9230 RnJvbSBlOTI4OTYyMDI2NjFmOWY0ZDc3MDdiYmMzM2I5MzRkNGYyZTI1MjlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBDaHJpc3RlbnNlbiA8ZGF2aWQuY2hyaXN0ZW5zZW5A Y3J1bmNoeWRhdGEuY29tPgpEYXRlOiBXZWQsIDMgQXByIDIwMjQgMTM6MDY6NTYgLTA0MDAKU3Vi amVjdDogW1BBVENIIHY0XSBJbXByb3ZlIFNRTCBjb21tZW50cyBvbiAtLWVjaG8taGlkZGVuIG91 dHB1dAoKVGhlIHVzZSBvZiB0aGUgLS1lY2hvLWhpZGRlbiBmbGFnIGluIHBzcWwgaXMgdXNlZCB0 byBzaG93IHBlb3BsZSB0aGUgd2F5IHBzcWwKcGVyZm9ybXMgaXRzIG1hZ2ljIGZvciBpdHMgYmFj a3NsYXNoIGNvbW1hbmRzLiBOb25lIG9mIHRoZW0gaGFzIG1vcmUgbWFnaWMgdGhhbgoiXGQgcmVs YXRpb24iLCBidXQgaXQgc3VmZmVycyBmcm9tIG5lZWRpbmcgYSBsb3Qgb2Ygc2VwYXJhdGUgcXVl cmllcyB0byBnYXRoZXIKYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBpdCBuZWVkcy4gVW5mb3J0dW5h dGVseSwgdGhvc2UgcXVlcmllcyBjYW4gZ2V0Cm92ZXJ3aGVsbWluZyBhbmQgaGFyZCB0byBmaWd1 cmUgb3V0IHdoaWNoIG9uZSBkb2VzIHdoYXQsIGVzcGVjaWFsbHkgZm9yIHRob3NlCm5vdCBhbHJl YWR5IHZlcnkgZmFtaWxpYXIgd2l0aCB0aGUgc3lzdGVtIGNhdGFsb2dzLiBBdHRhY2hlZCBpcyBh IHBhdGNoIHRvIGFkZCBhCnNtYWxsIFNRTCBjb21tZW50IHRvIHRoZSB0b3Agb2YgZWFjaCBTRUxF Q1QgcXVlcnkgaW5zaWRlCmRlc2NyaWJlT25lVGFibGVEZXRhaWwuIEFsbCBvdGhlciBmdW5jdGlv bnMgdXNlIGEgc2luZ2xlIHF1ZXJ5LCBhbmQgdGh1cyBuZWVkIG5vCmFkZGl0aW9uYWwgY29udGV4 dC4gQnV0ICJcZCBteXRhYmxlIiBoYXMgdGhlIHBvdGVudGlhbCB0byBydW4gb3ZlciBhIGRvemVu IFNRTApxdWVyaWVzIQoKRm9yIF9hbGxfIHF1ZXJ5IG91dHB1dCB0eXBlcyAobm90IGp1c3QgXGQp LCB3ZSBpbmNsdWRlIHRoZSBiYWNrc2xhc2ggY29tbWFuZAp0aGF0IHdhcyB1c2VkIHRvIGdlbmVy YXRlIHRoZSBnaXZlbiBxdWVyeS4KClRoZSBuZXcgZm9ybWF0IGxvb2tzIGxpa2UgdGhpczoKCi8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUVVFUlkgKFxkKSAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwovKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgY2hpbGQgdGFi bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KU0VMRUNUIGMu b2lkOjpwZ19jYXRhbG9nLnJlZ2NsYXNzLCBjLnJlbGtpbmQsIGluaGRldGFjaHBlbmRpbmcsCnBn X2NhdGFsb2cucGdfZ2V0X2V4cHIoYy5yZWxwYXJ0Ym91bmQsIGMub2lkKQpGUk9NIHBnX2NhdGFs b2cucGdfY2xhc3MgYywgcGdfY2F0YWxvZy5wZ19pbmhlcml0cyBpCldIRVJFIGMub2lkID0gaS5p bmhyZWxpZCBBTkQgaS5pbmhwYXJlbnQgPSAnNzY5OTInCk9SREVSIEJZIHBnX2NhdGFsb2cucGdf Z2V0X2V4cHIoYy5yZWxwYXJ0Ym91bmQsIGMub2lkKSA9ICdERUZBVUxUJywKYy5vaWQ6OnBnX2Nh dGFsb2cucmVnY2xhc3M6OnBnX2NhdGFsb2cudGV4dDsKLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CgpUaGlzIGluY2x1ZGVzIHNvbWUgbGV2ZWwgb2YgcmVmYWN0b3JpbmcgdGhlIG91dHB1dCByb3V0 aW5lcyBpbiBQU1FMZXhlYygpLAphZGRpbmcgT3V0cHV0Q29tbWVudCgpIGFuZCBPdXRwdXRDb21t ZW50U3RhcnMoKSB0byBzaGFyZSBhIHNpbmdsZSBvdXRwdXQKd2lkdGguICAoVGhpcyBjb3VsZCBw cmVzdW1hYmx5IGJlIGhvaXN0ZWQgaW50byBzb21ldGhpbmcgYmVzaWRlcyBgcHNxbGAsIGJ1dApz aW5jZSB0aGlzIGlzIHRoZSBvbmx5IGNvbnN1bWVyIGhlcmUsIGxlYXZpbmcgdGhpcyBmb3Igbm93 LikKClNpbmNlIHdlIGFyZSBsaW5pbmcgdXAgYWxsIG9mIHRoZSBjb21tZW50cyB0aGF0IGFyZSBi ZWluZyBvdXRwdXQsIHdlIGV4cGFuZCB0aGUKY29tbWVudCB3aWR0aCB0byA4MCBjaGFycy4KCkNv LWF1dGhvcmVkLWJ5OiAgICAgR3JlZyBTYWJpbm8gTXVsbGFuZSA8aHRhbWZpZHNAZ21haWwuY29t PgpDby1hdXRob3JlZC1ieTogICAgIERhdmlkIENocmlzdGVuc2VuIDxkYXZpZC5jaHJpc3RlbnNl bkBjcnVuY2h5ZGF0YS5jb20+Ci0tLQogc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYyAgfCAgIDUgKysK IHNyYy9iaW4vcHNxbC9jb21tb24uYyAgIHwgMTI1ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0KIHNyYy9iaW4vcHNxbC9jb21tb24uaCAgIHwgICA1ICsrCiBzcmMvYmlu L3BzcWwvZGVzY3JpYmUuYyB8ICA4MSArKysrKysrKysrKysrKysrLS0tLS0tLS0tLQogNCBmaWxl cyBjaGFuZ2VkLCAxNzkgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYyBiL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMKaW5kZXgg OWIwZmEwNDFmNy4uNGNmYjkxZTEzNCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2NvbW1hbmQu YworKysgYi9zcmMvYmluL3BzcWwvY29tbWFuZC5jCkBAIC01Niw2ICs1Niw4IEBAIHR5cGVkZWYg ZW51bSBFZGl0YWJsZU9iamVjdFR5cGUKIAlFZGl0YWJsZVZpZXcsCiB9IEVkaXRhYmxlT2JqZWN0 VHlwZTsKIAorY2hhciAqY3VyY21kID0gTlVMTDsKKwogLyogbG9jYWwgZnVuY3Rpb24gZGVjbGFy YXRpb25zICovCiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZChjb25zdCBjaGFy ICpjbWQsCiAJCQkJCQkJCQlQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsCkBAIC0zMDcsNiArMzA5 LDcgQEAgZXhlY19jb21tYW5kKGNvbnN0IGNoYXIgKmNtZCwKIAkJCQkJICAgY21kKTsKIAl9CiAK KwljdXJjbWQgPSAoY2hhciAqKWNtZDsKIAlpZiAoc3RyY21wKGNtZCwgImEiKSA9PSAwKQogCQlz dGF0dXMgPSBleGVjX2NvbW1hbmRfYShzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAllbHNl IGlmIChzdHJjbXAoY21kLCAiYmluZCIpID09IDApCkBAIC00MjMsNiArNDI2LDggQEAgZXhlY19j b21tYW5kKGNvbnN0IGNoYXIgKmNtZCwKIAllbHNlCiAJCXN0YXR1cyA9IFBTUUxfQ01EX1VOS05P V047CiAKKwljdXJjbWQgPSBOVUxMOworCiAJLyoKIAkgKiBBbGwgdGhlIGNvbW1hbmRzIHRoYXQg cmV0dXJuIFBTUUxfQ01EX1NFTkQgd2FudCB0byBleGVjdXRlIHByZXZpb3VzX2J1ZgogCSAqIGlm IHF1ZXJ5X2J1ZiBpcyBlbXB0eS4gIEZvciBjb252ZW5pZW5jZSB3ZSBpbXBsZW1lbnQgdGhhdCBo ZXJlLCBub3QgaW4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tb24uYyBiL3NyYy9iaW4v cHNxbC9jb21tb24uYwppbmRleCA3NmUwMWIwMmEzLi4zZTk0YmQ1ZDEyIDEwMDY0NAotLS0gYS9z cmMvYmluL3BzcWwvY29tbW9uLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCkBAIC00Miw2 ICs0Miw3IEBAIHN0YXRpYyBpbnQJRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hh ciAqcXVlcnksCiBzdGF0aWMgYm9vbCBjb21tYW5kX25vX2JlZ2luKGNvbnN0IGNoYXIgKnF1ZXJ5 KTsKIHN0YXRpYyBib29sIGlzX3NlbGVjdF9jb21tYW5kKGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIAor ZXh0ZXJuIGNoYXIgKmN1cmNtZDsKIAogLyoKICAqIG9wZW5RdWVyeU91dHB1dEZpbGUgLS0tIGF0 dGVtcHQgdG8gb3BlbiBhIHF1ZXJ5IG91dHB1dCBmaWxlCkBAIC01ODEsNiArNTgyLDggQEAgUEdy ZXN1bHQgKgogUFNRTGV4ZWMoY29uc3QgY2hhciAqcXVlcnkpCiB7CiAJUEdyZXN1bHQgICAqcmVz OworCWNoYXIgKmxhYmVsID0gIlFVRVJZIjsKKwogCiAJaWYgKCFwc2V0LmRiKQogCXsKQEAgLTU4 OCwyMSArNTkxLDMyIEBAIFBTUUxleGVjKGNvbnN0IGNoYXIgKnF1ZXJ5KQogCQlyZXR1cm4gTlVM TDsKIAl9CiAKKwlpZiAoY3VyY21kKQorCQlsYWJlbCA9IHBzcHJpbnRmKCJRVUVSWSAoXFwlcyki LCBjdXJjbWQpOworCiAJaWYgKHBzZXQuZWNob19oaWRkZW4gIT0gUFNRTF9FQ0hPX0hJRERFTl9P RkYpCiAJewotCQlwcmludGYoXygiLyoqKioqKioqIFFVRVJZICoqKioqKioqKi9cbiIKLQkJCQkg IiVzXG4iCi0JCQkJICIvKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4iKSwgcXVlcnkpOwor CQlQUUV4cEJ1ZmZlckRhdGEgYnVmOworCQlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CisKKwkJT3V0 cHV0Q29tbWVudFN0YXJzKCZidWYsIGxhYmVsKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1 ZiwgcXVlcnkpOworCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoJmJ1ZiwgJ1xuJyk7CisJCU91dHB1 dENvbW1lbnRTdGFycygmYnVmLCBOVUxMKTsKKworCQlwcmludGYoIiVzIiwgYnVmLmRhdGEpOwog CQlmZmx1c2goc3Rkb3V0KTsKIAkJaWYgKHBzZXQubG9nZmlsZSkKIAkJewotCQkJZnByaW50Zihw c2V0LmxvZ2ZpbGUsCi0JCQkJCV8oIi8qKioqKioqKiBRVUVSWSAqKioqKioqKiovXG4iCi0JCQkJ CSAgIiVzXG4iCi0JCQkJCSAgIi8qKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiIpLCBxdWVy eSk7CisJCQlmcHJpbnRmKHBzZXQubG9nZmlsZSwgIiVzIiwgYnVmLmRhdGEpOwogCQkJZmZsdXNo KHBzZXQubG9nZmlsZSk7CiAJCX0KIAorCQlwZnJlZShidWYuZGF0YSk7CisKKwkJaWYgKGN1cmNt ZCkKKwkJCXBmcmVlKGxhYmVsKTsKKwogCQlpZiAocHNldC5lY2hvX2hpZGRlbiA9PSBQU1FMX0VD SE9fSElEREVOX05PRVhFQykKIAkJCXJldHVybiBOVUxMOwogCX0KQEAgLTI0MzQsMyArMjQ0OCwx MDAgQEAgcmVjb2duaXplZF9jb25uZWN0aW9uX3N0cmluZyhjb25zdCBjaGFyICpjb25uc3RyKQog ewogCXJldHVybiB1cmlfcHJlZml4X2xlbmd0aChjb25uc3RyKSAhPSAwIHx8IHN0cmNocihjb25u c3RyLCAnPScpICE9IE5VTEw7CiB9CisKKy8qCisgKiBPdXRwdXRDb21tZW50KCkgb3V0cHV0cyB0 aGUgZ2l2ZW4gc3RyaW5nIHRvIGEgYnVmZmVyIGFzIGEKKyAqIGZpeGVkIHdpZHRoIGNvbW1lbnQs IHdyYXBwaW5nIHRoZSB0ZXh0IGdpdmVuIHRvIHRoZSBwcm9wZXIgc2l6ZSBhbmQKKyAqIGJyZWFr aW5nIGF0IGEgc3BhY2UuICBXZSBhc3N1bWUgdGhlcmUgYXJlIG5vIGlubmVyIGNvbW1lbnRzIHRo YXQgbmVlZCB0byBiZQorICogZXNjYXBlZC4KKyAqLwordm9pZAorT3V0cHV0Q29tbWVudChQUUV4 cEJ1ZmZlckRhdGEgKmJ1ZiwgY29uc3QgY2hhciAqc3RyaW5nKQoreworICAgIGludCBsZW4gPSBz dHJsZW4oc3RyaW5nKTsKKwlpbnQgbGluZVN0YXJ0ID0gMDsKKyAgICBpbnQgbGluZUVuZCA9IE1B WF9DT01NRU5UX1dJRFRIIC0gNjsgLy8gQWNjb3VudGluZyBmb3IgIiAqICIgYXQgdGhlIHN0YXJ0 IGFuZCAiICoiIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lCisgICAgc3RhdGljIGNoYXIgc3BhY2Vz W01BWF9DT01NRU5UX1dJRFRIXSA9IHswfTsKKworICAgIGlmIChzcGFjZXNbMF0gIT0gJyAnKQor ICAgICAgICBtZW1zZXQoc3BhY2VzLCAnICcsIE1BWF9DT01NRU5UX1dJRFRIKTsKKworICAgIHdo aWxlIChsaW5lU3RhcnQgPCBsZW4pIHsKKyAgICAgICAgLy8gQWRqdXN0IGxpbmVFbmQgaWYgaXQn cyBiZXlvbmQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nCisgICAgICAgIGlmIChsaW5lRW5kID49 IGxlbikgeworICAgICAgICAgICAgbGluZUVuZCA9IGxlbiAtIDE7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAvLyBFbnN1cmUgd2UgYnJlYWsgdGhlIGxpbmUgYXQgYSBzcGFjZSAoaWYg cG9zc2libGUpIHRvIGF2b2lkIGJyZWFraW5nIHdvcmRzCisgICAgICAgICAgICB3aGlsZSAobGlu ZUVuZCA+IGxpbmVTdGFydCAmJiBzdHJpbmdbbGluZUVuZF0gIT0gJyAnKSB7CisgICAgICAgICAg ICAgICAgbGluZUVuZC0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxpbmVFbmQg PT0gbGluZVN0YXJ0KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCBh IHNwYWNlLCBmb3JjZSBhIGJyZWFrIGF0IHRoZSBtYXhpbXVtIGxpbmUgd2lkdGgKKyAgICAgICAg ICAgICAgICBsaW5lRW5kID0gbGluZVN0YXJ0ICsgTUFYX0NPTU1FTlRfV0lEVEggLSA2OworICAg ICAgICAgICAgfQorICAgICAgICB9CisKKwkJLy8gb3V0cHV0IG91ciBkYXRhIGZvciB0aGUgd2lk dGggd2UgaGF2ZSwgaW5jbHVkaW5nIHRoZSBwaWVjZSBvZiB0aGUgY29tbWVudAorCQlwcmludGZQ UUV4cEJ1ZmZlcihidWYsCisJCQkJCQkgICIvKiAlLipzJS4qcyAqL1xuIiwKKwkJCQkJCSAgbGlu ZUVuZCAtIGxpbmVTdGFydCArIDEsIC8qIG51bWJlciBvZiBjaGFycyB0byBvdXRwdXQgKi8KKwkJ CQkJCSAgc3RyaW5nICsgbGluZVN0YXJ0LCAgLyogb2Zmc2V0IG9mIGNoYXJzIHRvIGNvcHkgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIHBhZGRpbmcgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgTUFYX0NPTU1FTlRfV0lEVEggLSA2IC0gKGxpbmVFbmQgLSBs aW5lU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZXMKKwkJCSk7CisKKyAg ICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBsaW5lCisgICAgICAgIGxpbmVTdGFydCA9IGxpbmVF bmQgKyAxOworICAgICAgICBsaW5lRW5kID0gbGluZVN0YXJ0ICsgTUFYX0NPTU1FTlRfV0lEVEgg LSA2OworICAgIH0KK30KKworCisvKgorICogT3V0cHV0Q29tbWVudFN0YXJzKCkgb3V0cHV0cyB0 aGUgZ2l2ZW4gc2luZ2xlLWxpbmUgc3RyaW5nIHdyYXBwZWQgaW4gc3RhcnMKKyAqIHRvIHRoZSBn aXZlbiB3aWR0aC4KKyAqLwordm9pZAorT3V0cHV0Q29tbWVudFN0YXJzKFBRRXhwQnVmZmVyRGF0 YSAqYnVmLCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgaW50IGxlbiA9IHN0cmluZyA/IHN0 cmxlbihzdHJpbmcpIDogMDsKKwljaGFyIHN0YXJzW01BWF9DT01NRU5UX1dJRFRIICsgM107CisJ aW50IHN0YXJ0T3V0cHV0T2Zmc2V0OworCisJLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJhc2Vk IG9uIGN1cnJlbnQgY2FsbGVycywgYnV0IHdlJ2xsIHRydW5jYXRlIHRvIGEKKwkgKiBzYWZlIHNp emUgaWYgbmVlZCBiZS4gKi8KKworCWlmIChsZW4gPiBNQVhfQ09NTUVOVF9XSURUSCkgLyogc3Bh Y2UgZm9yIG9wZW5pbmcgY29tbWVudCwgY2xvc2luZyBjb21tZW50LCBhbmQgc3BhY2VzICovCisJ CWxlbiA9IE1BWF9DT01NRU5UX1dJRFRIOworCisJLyogSWYgd2UgaGF2ZSBhIHplcm8td2lkdGgg c3RyaW5nIHRoZW4gdGhpcyBpcyBhIHNwZWNpYWwtY2FzZSB3aGVyZSB3ZQorCSAqIGp1c3Qgd2Fu dCBhIGxpbmUgb2Ygc3RhcnMuIFRvIG1pbmltaXplIGNvZGUgZGlzcnVwdGlvbiBpbiB0aGlzIGNh c2UsCisJICogd2UnbGwganVzdCBzZXQgc3RhcnRPdXRwdXRPZmZzZXQgdG8gYSB2YWx1ZSBsYXJn ZXIgdGhhbgorCSAqIE1BWF9DT01NRU5UX1dJRFRILiAqLworCisJaWYgKGxlbiA+IDApCisJCXN0 YXJ0T3V0cHV0T2Zmc2V0ID0gKCgoTUFYX0NPTU1FTlRfV0lEVEggLSBsZW4gLSAyKSAvIDIpKTsg LyogZXh0cmEgZm9yIHNwYWNlICovCisJZWxzZQorCQlzdGFydE91dHB1dE9mZnNldCA9IE1BWF9D T01NRU5UX1dJRFRIICogMjsKKworCXN0YXJzWzBdID0gJy8nOworCXN0YXJzW01BWF9DT01NRU5U X1dJRFRIXSA9ICcvJzsKKwlzdGFyc1tNQVhfQ09NTUVOVF9XSURUSCsxXSA9ICdcbic7CisJc3Rh cnNbTUFYX0NPTU1FTlRfV0lEVEgrMl0gPSAnXDAnOworCisJZm9yIChpbnQgaSA9IDE7IGkgPCBN QVhfQ09NTUVOVF9XSURUSDsgaSsrKQorCXsKKwkJaWYgKGkgPj0gc3RhcnRPdXRwdXRPZmZzZXQg JiYgaSA8PSBzdGFydE91dHB1dE9mZnNldCArIGxlbiArIDEpCisJCXsKKwkJCWlmIChpID09IHN0 YXJ0T3V0cHV0T2Zmc2V0IHx8IGkgPT0gc3RhcnRPdXRwdXRPZmZzZXQgKyBsZW4gKyAxKQorCQkJ CXN0YXJzW2ldID0gJyAnOworCQkJZWxzZQorCQkJCXN0YXJzW2ldID0gc3RyaW5nW2kgLSBzdGFy dE91dHB1dE9mZnNldCAtIDFdOworCQl9CisJCWVsc2UKKwkJCXN0YXJzW2ldID0gJyonOworCX0K KworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGJ1Ziwgc3RhcnMpOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wc3FsL2NvbW1vbi5oIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5oCmluZGV4IDZlZmUxMjI3 NGYuLmMxNmNiYzZlNmYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9jb21tb24uaAorKysgYi9z cmMvYmluL3BzcWwvY29tbW9uLmgKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlICJmZV91dGls cy9wc3Fsc2Nhbi5oIgogI2luY2x1ZGUgImxpYnBxLWZlLmgiCiAKKyNkZWZpbmUgTUFYX0NPTU1F TlRfV0lEVEggODAKKwogZXh0ZXJuIGJvb2wgb3BlblF1ZXJ5T3V0cHV0RmlsZShjb25zdCBjaGFy ICpmbmFtZSwgRklMRSAqKmZvdXQsIGJvb2wgKmlzX3BpcGUpOwogZXh0ZXJuIGJvb2wgc2V0UUZv dXQoY29uc3QgY2hhciAqZm5hbWUpOwogCkBAIC00NCw0ICs0Niw3IEBAIGV4dGVybiB2b2lkIGV4 cGFuZF90aWxkZShjaGFyICoqZmlsZW5hbWUpOwogCiBleHRlcm4gYm9vbCByZWNvZ25pemVkX2Nv bm5lY3Rpb25fc3RyaW5nKGNvbnN0IGNoYXIgKmNvbm5zdHIpOwogCitleHRlcm4gdm9pZCBPdXRw dXRDb21tZW50KFBRRXhwQnVmZmVyRGF0YSAqYnVmLCBjb25zdCBjaGFyICpzdHJpbmcpOworZXh0 ZXJuIHZvaWQgT3V0cHV0Q29tbWVudFN0YXJzKFBRRXhwQnVmZmVyRGF0YSAqYnVmLCBjb25zdCBj aGFyICpzdHJpbmcpOworCiAjZW5kaWYJCQkJCQkJLyogQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXgg NjhiMmVhODg3Mi4uNTNiOGZkZDQ2OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJl LmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTE1ODYsOSArMTU4NiwxMCBAQCBk ZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCWluaXRQUUV4 cEJ1ZmZlcigmdG1wYnVmKTsKIAogCS8qIEdldCBnZW5lcmFsIHRhYmxlIGluZm8gKi8KKwlPdXRw dXRDb21tZW50KCZidWYsIF8oIkdldCBnZW5lcmFsIHRhYmxlIGluZm9ybWF0aW9uIikpOwogCWlm IChwc2V0LnN2ZXJzaW9uID49IDEyMDAwMCkKIAl7Ci0JCXByaW50ZlBRRXhwQnVmZmVyKCZidWYs CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkgICJTRUxFQ1QgYy5yZWxjaGVja3Ms IGMucmVsa2luZCwgYy5yZWxoYXNpbmRleCwgYy5yZWxoYXNydWxlcywgIgogCQkJCQkJICAiYy5y ZWxoYXN0cmlnZ2VycywgYy5yZWxyb3dzZWN1cml0eSwgYy5yZWxmb3JjZXJvd3NlY3VyaXR5LCAi CiAJCQkJCQkgICJmYWxzZSBBUyByZWxoYXNvaWRzLCBjLnJlbGlzcGFydGl0aW9uLCAlcywgYy5y ZWx0YWJsZXNwYWNlLCAiCkBAIC0xNjA2LDcgKzE2MDcsNyBAQCBkZXNjcmliZU9uZVRhYmxlRGV0 YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCX0KIAllbHNlIGlmIChwc2V0LnN2ZXJzaW9u ID49IDEwMDAwMCkKIAl7Ci0JCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCWFwcGVuZFBRRXhw QnVmZmVyKCZidWYsCiAJCQkJCQkgICJTRUxFQ1QgYy5yZWxjaGVja3MsIGMucmVsa2luZCwgYy5y ZWxoYXNpbmRleCwgYy5yZWxoYXNydWxlcywgIgogCQkJCQkJICAiYy5yZWxoYXN0cmlnZ2Vycywg Yy5yZWxyb3dzZWN1cml0eSwgYy5yZWxmb3JjZXJvd3NlY3VyaXR5LCAiCiAJCQkJCQkgICJjLnJl bGhhc29pZHMsIGMucmVsaXNwYXJ0aXRpb24sICVzLCBjLnJlbHRhYmxlc3BhY2UsICIKQEAgLTE2 MjMsNyArMTYyNCw3IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVt YW5hbWUsCiAJfQogCWVsc2UgaWYgKHBzZXQuc3ZlcnNpb24gPj0gOTA1MDApCiAJewotCQlwcmlu dGZQUUV4cEJ1ZmZlcigmYnVmLAorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAi U0VMRUNUIGMucmVsY2hlY2tzLCBjLnJlbGtpbmQsIGMucmVsaGFzaW5kZXgsIGMucmVsaGFzcnVs ZXMsICIKIAkJCQkJCSAgImMucmVsaGFzdHJpZ2dlcnMsIGMucmVscm93c2VjdXJpdHksIGMucmVs Zm9yY2Vyb3dzZWN1cml0eSwgIgogCQkJCQkJICAiYy5yZWxoYXNvaWRzLCBmYWxzZSBhcyByZWxp c3BhcnRpdGlvbiwgJXMsIGMucmVsdGFibGVzcGFjZSwgIgpAQCAtMTY0MCw3ICsxNjQxLDcgQEAg ZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAl9CiAJZWxz ZSBpZiAocHNldC5zdmVyc2lvbiA+PSA5MDQwMCkKIAl7Ci0JCXByaW50ZlBRRXhwQnVmZmVyKCZi dWYsCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkgICJTRUxFQ1QgYy5yZWxjaGVj a3MsIGMucmVsa2luZCwgYy5yZWxoYXNpbmRleCwgYy5yZWxoYXNydWxlcywgIgogCQkJCQkJICAi Yy5yZWxoYXN0cmlnZ2VycywgZmFsc2UsIGZhbHNlLCBjLnJlbGhhc29pZHMsICIKIAkJCQkJCSAg ImZhbHNlIGFzIHJlbGlzcGFydGl0aW9uLCAlcywgYy5yZWx0YWJsZXNwYWNlLCAiCkBAIC0xNjU3 LDcgKzE2NTgsNyBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFu YW1lLAogCX0KIAllbHNlCiAJewotCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQlhcHBlbmRQ UUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiU0VMRUNUIGMucmVsY2hlY2tzLCBjLnJlbGtpbmQs IGMucmVsaGFzaW5kZXgsIGMucmVsaGFzcnVsZXMsICIKIAkJCQkJCSAgImMucmVsaGFzdHJpZ2dl cnMsIGZhbHNlLCBmYWxzZSwgYy5yZWxoYXNvaWRzLCAiCiAJCQkJCQkgICJmYWxzZSBhcyByZWxp c3BhcnRpdGlvbiwgJXMsIGMucmVsdGFibGVzcGFjZSwgIgpAQCAtMTcxOCw5ICsxNzE5LDEwIEBA IGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCXByaW50 UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7CiAJCWNoYXIJICAgKmZvb3RlcnNbMl0gPSB7TlVM TCwgTlVMTH07CiAKKwkJT3V0cHV0Q29tbWVudCgmYnVmLCBfKCJHZXQgZ2VuZXJhbCBzZXF1ZW5j ZSBpbmZvcm1hdGlvbiAqIikpOwogCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxMDAwMDApCiAJCXsK LQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAog CQkJCQkJCSAgIlNFTEVDVCBwZ19jYXRhbG9nLmZvcm1hdF90eXBlKHNlcXR5cGlkLCBOVUxMKSBB UyBcIiVzXCIsXG4iCiAJCQkJCQkJICAiICAgICAgIHNlcXN0YXJ0IEFTIFwiJXNcIixcbiIKIAkJ CQkJCQkgICIgICAgICAgc2VxbWluIEFTIFwiJXNcIixcbiIKQEAgLTE3NDQsNyArMTc0Niw3IEBA IGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCX0KIAkJ ZWxzZQogCQl7Ci0JCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJYXBwZW5kUFFFeHBCdWZm ZXIoJmJ1ZiwKIAkJCQkJCQkgICJTRUxFQ1QgJ2JpZ2ludCcgQVMgXCIlc1wiLFxuIgogCQkJCQkJ CSAgIiAgICAgICBzdGFydF92YWx1ZSBBUyBcIiVzXCIsXG4iCiAJCQkJCQkJICAiICAgICAgIG1p bl92YWx1ZSBBUyBcIiVzXCIsXG4iCkBAIC0xNzcxLDcgKzE3NzMsOCBAQCBkZXNjcmliZU9uZVRh YmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJZ290byBlcnJvcl9yZXR1cm47 CiAKIAkJLyogR2V0IHRoZSBjb2x1bW4gdGhhdCBvd25zIHRoaXMgc2VxdWVuY2UgKi8KLQkJcHJp bnRmUFFFeHBCdWZmZXIoJmJ1ZiwgIlNFTEVDVCBwZ19jYXRhbG9nLnF1b3RlX2lkZW50KG5zcG5h bWUpIHx8ICcuJyB8fCIKKwkJT3V0cHV0Q29tbWVudCgmYnVmLCBfKCJHZXQgdGhlIGNvbHVtbiB0 aGF0IG93bnMgdGhpcyBzZXF1ZW5jZSIpKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIlNF TEVDVCBwZ19jYXRhbG9nLnF1b3RlX2lkZW50KG5zcG5hbWUpIHx8ICcuJyB8fCIKIAkJCQkJCSAg IlxuICAgcGdfY2F0YWxvZy5xdW90ZV9pZGVudChyZWxuYW1lKSB8fCAnLicgfHwiCiAJCQkJCQkg ICJcbiAgIHBnX2NhdGFsb2cucXVvdGVfaWRlbnQoYXR0bmFtZSksIgogCQkJCQkJICAiXG4gICBk LmRlcHR5cGUiCkBAIC0xODUwLDcgKzE4NTMsOCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhj b25zdCBjaGFyICpzY2hlbWFuYW1lLAogCSAqIGR1cGxpY2F0aXZlIHRlc3QgbG9naWMgYmVsb3cu CiAJICovCiAJY29scyA9IDA7Ci0JcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwgIlNFTEVDVCBhLmF0 dG5hbWUiKTsKKwlPdXRwdXRDb21tZW50KCZidWYsIF8oIkdldCBpbmZvcm1hdGlvbiBhYm91dCBl YWNoIGNvbHVtblxuIikpOworCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICJTRUxFQ1QgYS5hdHRu YW1lIik7CiAJYXR0bmFtZV9jb2wgPSBjb2xzKys7CiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1 ZiwgIixcbiAgcGdfY2F0YWxvZy5mb3JtYXRfdHlwZShhLmF0dHR5cGlkLCBhLmF0dHR5cG1vZCki KTsKIAlhdHR0eXBlX2NvbCA9IGNvbHMrKzsKQEAgLTIxNTAsNyArMjE1NCw4IEBAIGRlc2NyaWJl T25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCS8qIEZvb3RlciBpbmZv cm1hdGlvbiBmb3IgYSBwYXJ0aXRpb24gY2hpbGQgdGFibGUgKi8KIAkJUEdyZXN1bHQgICAqcmVz dWx0OwogCi0JCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCU91dHB1dENvbW1lbnQoJmJ1Ziwg XygiR2V0IHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhpcyB0YWJsZSIpKTsKKwkJYXBwZW5k UFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCSAgIlNFTEVDVCBpbmhwYXJlbnQ6OnBnX2NhdGFsb2cu cmVnY2xhc3MsXG4iCiAJCQkJCQkgICIgIHBnX2NhdGFsb2cucGdfZ2V0X2V4cHIoYy5yZWxwYXJ0 Ym91bmQsIGMub2lkKSxcbiAgIik7CiAKQEAgLTIyMDUsNyArMjIxMCw4IEBAIGRlc2NyaWJlT25l VGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCS8qIEZvb3RlciBpbmZvcm1h dGlvbiBmb3IgYSBwYXJ0aXRpb25lZCB0YWJsZSAocGFydGl0aW9uaW5nIHBhcmVudCkgKi8KIAkJ UEdyZXN1bHQgICAqcmVzdWx0OwogCi0JCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCU91dHB1 dENvbW1lbnQoJmJ1ZiwgXygiR2V0IHRoZSBwYXJ0aXRpb24ga2V5IGZvciB0aGlzIHRhYmxlIikp OworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiU0VMRUNUIHBnX2NhdGFsb2cu cGdfZ2V0X3BhcnRrZXlkZWYoJyVzJzo6cGdfY2F0YWxvZy5vaWQpOyIsCiAJCQkJCQkgIG9pZCk7 CiAJCXJlc3VsdCA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKQEAgLTIyMjcsNyArMjIzMyw4IEBAIGRl c2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCS8qIEZvciBh IFRPQVNUIHRhYmxlLCBwcmludCBuYW1lIG9mIG93bmluZyB0YWJsZSAqLwogCQlQR3Jlc3VsdCAg ICpyZXN1bHQ7CiAKLQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJT3V0cHV0Q29tbWVudCgm YnVmLCBfKCJGaW5kIHdoaWNoIHRhYmxlIG93bnMgdGhpcyBUT0FTVCB0YWJsZSIpKTsKKwkJYXBw ZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCSAgIlNFTEVDVCBuLm5zcG5hbWUsIGMucmVsbmFt ZVxuIgogCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGMiCiAJCQkJCQkgICIgSk9J TiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIgpAQCAtMjI1NSw3ICsyMjYyLDggQEAgZGVzY3Jp YmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJLyogRm9vdGVyIGlu Zm9ybWF0aW9uIGFib3V0IGFuIGluZGV4ICovCiAJCVBHcmVzdWx0ICAgKnJlc3VsdDsKIAotCQlw cmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQlPdXRwdXRDb21tZW50KCZidWYsIF8oIkdldCBpbmZv cm1hdGlvbiBhYm91dCB0aGlzIGluZGV4IikpOworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAog CQkJCQkJICAiU0VMRUNUIGkuaW5kaXN1bmlxdWUsIGkuaW5kaXNwcmltYXJ5LCBpLmluZGlzY2x1 c3RlcmVkLCAiCiAJCQkJCQkgICJpLmluZGlzdmFsaWQsXG4iCiAJCQkJCQkgICIgIChOT1QgaS5p bmRpbW1lZGlhdGUpIEFORCAiCkBAIC0yMzcyLDcgKzIzODAsOCBAQCBkZXNjcmliZU9uZVRhYmxl RGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkvKiBwcmludCBpbmRleGVzICovCiAJ CWlmICh0YWJsZWluZm8uaGFzaW5kZXgpCiAJCXsKLQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYs CisJCQlPdXRwdXRDb21tZW50KCZidWYsIF8oIkdldCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGlu ZGV4IikpOworCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkgICJTRUxFQ1QgYzIu cmVsbmFtZSwgaS5pbmRpc3ByaW1hcnksIGkuaW5kaXN1bmlxdWUsICIKIAkJCQkJCQkgICJpLmlu ZGlzY2x1c3RlcmVkLCBpLmluZGlzdmFsaWQsICIKIAkJCQkJCQkgICJwZ19jYXRhbG9nLnBnX2dl dF9pbmRleGRlZihpLmluZGV4cmVsaWQsIDAsIHRydWUpLFxuICAiCkBAIC0yNTEwLDYgKzI1MTks OCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQlp ZiAodGFibGVpbmZvLmhhc3RyaWdnZXJzIHx8CiAJCQl0YWJsZWluZm8ucmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKQogCQl7CisJCQlPdXRwdXRDb21tZW50KCZidWYsIF8oIkdl dCBpbmZvcm1hdGlvbiBhYm91dCBmb3JlaWduIGtleSBjb25zdHJhaW50cyIpKTsKKwogCQkJaWYg KHBzZXQuc3ZlcnNpb24gPj0gMTIwMDAwICYmCiAJCQkJKHRhYmxlaW5mby5pc3BhcnRpdGlvbiB8 fCB0YWJsZWluZm8ucmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKSkKIAkJCXsK QEAgLTI1MTcsNyArMjUyOCw3IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIg KnNjaGVtYW5hbWUsCiAJCQkJICogUHV0IHRoZSBjb25zdHJhaW50cyBkZWZpbmVkIGluIHRoaXMg dGFibGUgZmlyc3QsIGZvbGxvd2VkCiAJCQkJICogYnkgdGhlIGNvbnN0cmFpbnRzIGRlZmluZWQg aW4gYW5jZXN0b3IgcGFydGl0aW9uZWQgdGFibGVzLgogCQkJCSAqLwotCQkJCXByaW50ZlBRRXhw QnVmZmVyKCZidWYsCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkJICAiU0VM RUNUIGNvbnJlbGlkID0gJyVzJzo6cGdfY2F0YWxvZy5yZWdjbGFzcyBBUyBzYW1ldGFibGUsXG4i CiAJCQkJCQkJCSAgIiAgICAgICBjb25uYW1lLFxuIgogCQkJCQkJCQkgICIgICAgICAgcGdfY2F0 YWxvZy5wZ19nZXRfY29uc3RyYWludGRlZihvaWQsIHRydWUpIEFTIGNvbmRlZixcbiIKQEAgLTI1 MzAsNyArMjU0MSw3IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVt YW5hbWUsCiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwK KwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJCQkgICJTRUxFQ1QgdHJ1ZSBhcyBz YW1ldGFibGUsIGNvbm5hbWUsXG4iCiAJCQkJCQkJCSAgIiAgcGdfY2F0YWxvZy5wZ19nZXRfY29u c3RyYWludGRlZihyLm9pZCwgdHJ1ZSkgYXMgY29uZGVmLFxuIgogCQkJCQkJCQkgICIgIGNvbnJl bGlkOjpwZ19jYXRhbG9nLnJlZ2NsYXNzIEFTIG9udGFibGVcbiIKQEAgLTI1ODQsOSArMjU5NSwx MCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQlp ZiAodGFibGVpbmZvLmhhc3RyaWdnZXJzIHx8CiAJCQl0YWJsZWluZm8ucmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKQogCQl7CisJCQlPdXRwdXRDb21tZW50KCZidWYsIF8oIkdl dCBpbmZvcm1hdGlvbiBhYm91dCBpbmNvbWluZyBmb3JlaWduIGtleSByZWZlcmVuY2VzIikpOwog CQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTIwMDAwKQogCQkJewotCQkJCXByaW50ZlBRRXhwQnVm ZmVyKCZidWYsCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkJICAiU0VMRUNU IGNvbm5hbWUsIGNvbnJlbGlkOjpwZ19jYXRhbG9nLnJlZ2NsYXNzIEFTIG9udGFibGUsXG4iCiAJ CQkJCQkJCSAgIiAgICAgICBwZ19jYXRhbG9nLnBnX2dldF9jb25zdHJhaW50ZGVmKG9pZCwgdHJ1 ZSkgQVMgY29uZGVmXG4iCiAJCQkJCQkJCSAgIiAgRlJPTSBwZ19jYXRhbG9nLnBnX2NvbnN0cmFp bnQgY1xuIgpAQCAtMjU5OCw3ICsyNjEwLDcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29u c3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlwcmludGZQUUV4 cEJ1ZmZlcigmYnVmLAorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJCSAgIlNF TEVDVCBjb25uYW1lLCBjb25yZWxpZDo6cGdfY2F0YWxvZy5yZWdjbGFzcyBBUyBvbnRhYmxlLFxu IgogCQkJCQkJCQkgICIgICAgICAgcGdfY2F0YWxvZy5wZ19nZXRfY29uc3RyYWludGRlZihvaWQs IHRydWUpIEFTIGNvbmRlZlxuIgogCQkJCQkJCQkgICIgIEZST00gcGdfY2F0YWxvZy5wZ19jb25z dHJhaW50XG4iCkBAIC0yNjM2LDcgKzI2NDgsOCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhj b25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkvKiBwcmludCBhbnkgcm93LWxldmVsIHBvbGljaWVz ICovCiAJCWlmIChwc2V0LnN2ZXJzaW9uID49IDkwNTAwKQogCQl7Ci0JCQlwcmludGZQUUV4cEJ1 ZmZlcigmYnVmLCAiU0VMRUNUIHBvbC5wb2xuYW1lLCIpOworCQkJT3V0cHV0Q29tbWVudCgmYnVm LCBfKCJHZXQgaW5mb3JtYXRpb24gYWJvdXQgcm93LWxldmVsIHBvbGljaWVzIikpOworCQkJYXBw ZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIlNFTEVDVCBwb2wucG9sbmFtZSwiKTsKIAkJCWlmIChwc2V0 LnN2ZXJzaW9uID49IDEwMDAwMCkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJ CQkJCQkJICIgcG9sLnBvbHBlcm1pc3NpdmUsXG4iKTsKQEAgLTI3MTYsOSArMjcyOSwxMCBAQCBk ZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQl9CiAKIAkJ LyogcHJpbnQgYW55IGV4dGVuZGVkIHN0YXRpc3RpY3MgKi8KKwkJT3V0cHV0Q29tbWVudCgmYnVm LCBfKCJHZXQgaW5mb3JtYXRpb24gYWJvdXQgZXh0ZW5kZWQgc3RhdGlzdGljcyIpKTsKIAkJaWYg KHBzZXQuc3ZlcnNpb24gPj0gMTQwMDAwKQogCQl7Ci0JCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVm LAorCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkgICJTRUxFQ1Qgb2lkLCAiCiAJ CQkJCQkJICAic3R4cmVsaWQ6OnBnX2NhdGFsb2cucmVnY2xhc3MsICIKIAkJCQkJCQkgICJzdHhu YW1lc3BhY2U6OnBnX2NhdGFsb2cucmVnbmFtZXNwYWNlOjpwZ19jYXRhbG9nLnRleHQgQVMgbnNw LCAiCkBAIC0yODE1LDcgKzI4MjksNyBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBj aGFyICpzY2hlbWFuYW1lLAogCQl9CiAJCWVsc2UgaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTAwMDAw KQogCQl7Ci0JCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJYXBwZW5kUFFFeHBCdWZmZXIo JmJ1ZiwKIAkJCQkJCQkgICJTRUxFQ1Qgb2lkLCAiCiAJCQkJCQkJICAic3R4cmVsaWQ6OnBnX2Nh dGFsb2cucmVnY2xhc3MsICIKIAkJCQkJCQkgICJzdHhuYW1lc3BhY2U6OnBnX2NhdGFsb2cucmVn bmFtZXNwYWNlIEFTIG5zcCwgIgpAQCAtMjg5NCw3ICsyOTA4LDggQEAgZGVzY3JpYmVPbmVUYWJs ZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJLyogcHJpbnQgcnVsZXMgKi8KIAkJ aWYgKHRhYmxlaW5mby5oYXNydWxlcyAmJiB0YWJsZWluZm8ucmVsa2luZCAhPSBSRUxLSU5EX01B VFZJRVcpCiAJCXsKLQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQlPdXRwdXRDb21tZW50 KCZidWYsIF8oIkdldCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHJ1bGUgZm9yIHRoaXMgdGFibGUi KSk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJCSAgIlNFTEVDVCByLnJ1bGVu YW1lLCB0cmltKHRyYWlsaW5nICc7JyBmcm9tIHBnX2NhdGFsb2cucGdfZ2V0X3J1bGVkZWYoci5v aWQsIHRydWUpKSwgIgogCQkJCQkJCSAgImV2X2VuYWJsZWRcbiIKIAkJCQkJCQkgICJGUk9NIHBn X2NhdGFsb2cucGdfcmV3cml0ZSByXG4iCkBAIC0yOTc3LDkgKzI5OTIsMTAgQEAgZGVzY3JpYmVP bmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJLyogcHJpbnQgYW55IHB1 YmxpY2F0aW9ucyAqLwogCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxMDAwMDApCiAJCXsKKwkJCU91 dHB1dENvbW1lbnQoJmJ1ZiwgXygiR2V0IGluZm9ybWF0aW9uIGFib3V0IGVhY2ggcHVibGljYXRp b24gdXNpbmcgdGhpcyB0YWJsZSIpKTsKIAkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE1MDAwMCkK IAkJCXsKLQkJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCWFwcGVuZFBRRXhwQnVmZmVy KCZidWYsCiAJCQkJCQkJCSAgIlNFTEVDVCBwdWJuYW1lXG4iCiAJCQkJCQkJCSAgIiAgICAgLCBO VUxMXG4iCiAJCQkJCQkJCSAgIiAgICAgLCBOVUxMXG4iCkBAIC0zMDExLDcgKzMwMjcsNyBAQCBk ZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJfQogCQkJ ZWxzZQogCQkJewotCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJYXBwZW5kUFFFeHBC dWZmZXIoJmJ1ZiwKIAkJCQkJCQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKIAkJCQkJCQkJICAiICAg ICAsIE5VTExcbiIKIAkJCQkJCQkJICAiICAgICAsIE5VTExcbiIKQEAgLTMwNjEsNyArMzA3Nyw4 IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCS8q IElmIHZlcmJvc2UsIHByaW50IE5PVCBOVUxMIGNvbnN0cmFpbnRzICovCiAJCWlmICh2ZXJib3Nl KQogCQl7Ci0JCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJT3V0cHV0Q29tbWVudCgmYnVm LCBfKCJHZXQgaW5mb3JtYXRpb24gYWJvdXQgTk9UIE5VTEwgY29uc3RyYWludHMiKSk7CisJCQlh cHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJCSAgIlNFTEVDVCBjby5jb25uYW1lLCBhdC5h dHRuYW1lLCBjby5jb25ub2luaGVyaXQsIGNvLmNvbmlzbG9jYWwsXG4iCiAJCQkJCQkJICAiY28u Y29uaW5oY291bnQgPD4gMFxuIgogCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19jb25zdHJh aW50IGNvIEpPSU5cbiIKQEAgLTMxMzMsNyArMzE1MCw4IEBAIGRlc2NyaWJlT25lVGFibGVEZXRh aWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCS8qIHByaW50IHJ1bGVzICovCiAJCWlmICh0 YWJsZWluZm8uaGFzcnVsZXMpCiAJCXsKLQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQlP dXRwdXRDb21tZW50KCZidWYsIF8oIkdldCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHJ1bGUgZm9y IHRoaXMgdmlldyIpKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJICAiU0VM RUNUIHIucnVsZW5hbWUsIHRyaW0odHJhaWxpbmcgJzsnIGZyb20gcGdfY2F0YWxvZy5wZ19nZXRf cnVsZWRlZihyLm9pZCwgdHJ1ZSkpXG4iCiAJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3Jl d3JpdGUgclxuIgogCQkJCQkJCSAgIldIRVJFIHIuZXZfY2xhc3MgPSAnJXMnIEFORCByLnJ1bGVu YW1lICE9ICdfUkVUVVJOJyBPUkRFUiBCWSAxOyIsCkBAIC0zMTcwLDcgKzMxODgsOCBAQCBkZXNj cmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQlQR3Jlc3VsdCAg ICpyZXN1bHQ7CiAJCWludAkJCXR1cGxlczsKIAotCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAor CQlPdXRwdXRDb21tZW50KCZidWYsIF8oIkdldCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHRyaWdn ZXIgb24gdGhpcyB0YWJsZSIpKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCSAg IlNFTEVDVCB0LnRnbmFtZSwgIgogCQkJCQkJICAicGdfY2F0YWxvZy5wZ19nZXRfdHJpZ2dlcmRl Zih0Lm9pZCwgdHJ1ZSksICIKIAkJCQkJCSAgInQudGdlbmFibGVkLCB0LnRnaXNpbnRlcm5hbCxc biIpOwpAQCAtMzM4OCw2ICszNDA3LDcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3Qg Y2hhciAqc2NoZW1hbmFtZSwKIAkJfQogCiAJCS8qIHByaW50IHRhYmxlcyBpbmhlcml0ZWQgZnJv bSAoZXhjbHVkZSBwYXJ0aXRpb25lZCBwYXJlbnRzKSAqLworCQlPdXRwdXRDb21tZW50KCZidWYs IF8oIkZpbmQgdGFibGVzIGluaGVyaXRlZCBmcm9tIikpOwogCQlwcmludGZQUUV4cEJ1ZmZlcigm YnVmLAogCQkJCQkJICAiU0VMRUNUIGMub2lkOjpwZ19jYXRhbG9nLnJlZ2NsYXNzXG4iCiAJCQkJ CQkgICJGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgYywgcGdfY2F0YWxvZy5wZ19pbmhlcml0cyBp XG4iCkBAIC0zNDI1LDggKzM0NDUsOSBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBj aGFyICpzY2hlbWFuYW1lLAogCQl9CiAKIAkJLyogcHJpbnQgY2hpbGQgdGFibGVzICh3aXRoIGFk ZGl0aW9uYWwgaW5mbyBpZiBwYXJ0aXRpb25zKSAqLworCQlPdXRwdXRDb21tZW50KCZidWYsIF8o IkdldCBpbmZvcm1hdGlvbiBhYm91dCBjaGlsZCB0YWJsZXMiKSk7CiAJCWlmIChwc2V0LnN2ZXJz aW9uID49IDE0MDAwMCkKLQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQlhcHBlbmRQUUV4 cEJ1ZmZlcigmYnVmLAogCQkJCQkJCSAgIlNFTEVDVCBjLm9pZDo6cGdfY2F0YWxvZy5yZWdjbGFz cywgYy5yZWxraW5kLCIKIAkJCQkJCQkgICIgaW5oZGV0YWNocGVuZGluZywiCiAJCQkJCQkJICAi IHBnX2NhdGFsb2cucGdfZ2V0X2V4cHIoYy5yZWxwYXJ0Ym91bmQsIGMub2lkKVxuIgpAQCAtMzQz Niw3ICszNDU3LDcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1h bmFtZSwKIAkJCQkJCQkgICIgYy5vaWQ6OnBnX2NhdGFsb2cucmVnY2xhc3M6OnBnX2NhdGFsb2cu dGV4dDsiLAogCQkJCQkJCSAgb2lkKTsKIAkJZWxzZSBpZiAocHNldC5zdmVyc2lvbiA+PSAxMDAw MDApCi0JCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1 ZiwKIAkJCQkJCQkgICJTRUxFQ1QgYy5vaWQ6OnBnX2NhdGFsb2cucmVnY2xhc3MsIGMucmVsa2lu ZCwiCiAJCQkJCQkJICAiIGZhbHNlIEFTIGluaGRldGFjaHBlbmRpbmcsIgogCQkJCQkJCSAgIiBw Z19jYXRhbG9nLnBnX2dldF9leHByKGMucmVscGFydGJvdW5kLCBjLm9pZClcbiIKQEAgLTM0NDYs NyArMzQ2Nyw3IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5h bWUsCiAJCQkJCQkJICAiIGMub2lkOjpwZ19jYXRhbG9nLnJlZ2NsYXNzOjpwZ19jYXRhbG9nLnRl eHQ7IiwKIAkJCQkJCQkgIG9pZCk7CiAJCWVsc2UKLQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYs CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJCSAgIlNFTEVDVCBjLm9pZDo6cGdf Y2F0YWxvZy5yZWdjbGFzcywgYy5yZWxraW5kLCIKIAkJCQkJCQkgICIgZmFsc2UgQVMgaW5oZGV0 YWNocGVuZGluZywgTlVMTFxuIgogCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBj LCBwZ19jYXRhbG9nLnBnX2luaGVyaXRzIGlcbiIKLS0gCjIuNDAuMQoK --000000000000689e7506153461fc--