From debbugs-submit-bounces@debbugs.gnu.org Thu Oct 13 19:32:24 2011 Received: (at submit) by debbugs.gnu.org; 13 Oct 2011 23:32:24 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1REUlD-0005pN-Vg for submit@debbugs.gnu.org; Thu, 13 Oct 2011 19:32:24 -0400 Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1REUhb-0005jM-5U for submit@debbugs.gnu.org; Thu, 13 Oct 2011 19:28:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1REUgz-0000pI-W9 for submit@debbugs.gnu.org; Thu, 13 Oct 2011 19:28:03 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, T_DKIM_INVALID, T_TO_NO_BRKTS_FREEMAIL autolearn=unavailable version=3.3.1 Received: from lists.gnu.org ([140.186.70.17]:46678) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REUgz-0000p0-NT for submit@debbugs.gnu.org; Thu, 13 Oct 2011 19:28:01 -0400 Received: from eggs.gnu.org ([140.186.70.92]:43218) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REUgy-0007Ev-FO for bug-gnu-emacs@gnu.org; Thu, 13 Oct 2011 19:28:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1REUgt-0000dg-HI for bug-gnu-emacs@gnu.org; Thu, 13 Oct 2011 19:28:00 -0400 Received: from mail-vw0-f41.google.com ([209.85.212.41]:63418) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REUgt-0000dS-3Q for bug-gnu-emacs@gnu.org; Thu, 13 Oct 2011 19:27:55 -0400 Received: by vws16 with SMTP id 16so158837vws.0 for ; Thu, 13 Oct 2011 16:27:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:reply-to:date:message-id:subject:from:to:content-type; bh=3uo8xS/zUj02N9iRLf0wBiDu5Vrf3XDdT/G+ANvxqCU=; b=f72fJZoymiikLIBVAznAlTBbFNVCwQQOTUD7DUvskoxqiysVt5eAUQubPcwUM1VUtJ IGH188mV6DxVqDHDKRxKH+nYqEaVV9czu/1IcdhfxWmumkO73ucC45m/2AsCt8hVw3kE 7ZaAvCNkl+tK+SavuyTVoPMPQt1Zfskaq+vFM= MIME-Version: 1.0 Received: by 10.52.112.135 with SMTP id iq7mr6439259vdb.51.1318548474504; Thu, 13 Oct 2011 16:27:54 -0700 (PDT) Received: by 10.220.163.9 with HTTP; Thu, 13 Oct 2011 16:27:54 -0700 (PDT) Date: Thu, 13 Oct 2011 19:27:54 -0400 Message-ID: Subject: C-x h TAB and M-x untabify From: Jeffrey Walton To: bug-gnu-emacs@gnu.org Content-Type: multipart/mixed; boundary=bcaec5485cf871279404af367d27 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.17 X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Thu, 13 Oct 2011 19:32:23 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Reply-To: noloader@gmail.com List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org --bcaec5485cf871279404af367d27 Content-Type: text/plain; charset=ISO-8859-1 I often use C-x h TAB and M-x untabify to format C, C++, and Java code. If a document has an errant UTF-8 byte order mark (a UTF-8 BOM is EF BB BF), Emacs cannot always format the source file. For example, the attached Java file (JavaEncryptor.java-backup) has 1845 BOMs sprinkled throughout. I'm not sure what editor put them in, but Emacs does not properly handle some operations with them present. If I strip the errant BOMs with the attached program (efbbbf-strip.cpp), Emacs will properly format the file. --bcaec5485cf871279404af367d27 Content-Type: application/octet-stream; name="JavaEncryptor.java-backup" Content-Disposition: attachment; filename="JavaEncryptor.java-backup" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gtqdmsaw0 LyoqCiAqIE9XQVNQIEVudGVycHJpc2UgU2VjdXJpdHkgQVBJIChFU0FQSSkKICoKICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgdGhlIE9wZW4gV2ViIEFwcGxpY2F0aW9uIFNlY3VyaXR5IFByb2plY3Qg KE9XQVNQKQogKiBFbnRlcnByaXNlIFNlY3VyaXR5IEFQSSAoRVNBUEkpIHByb2plY3QuIEZvciBk ZXRhaWxzLCBwbGVhc2Ugc2VlCiAqIDxhIGhyZWY9Imh0dHA6Ly93d3cub3dhc3Aub3JnL2luZGV4 LnBocC9FU0FQSSI+aHR0cDovL3d3dy5vd2FzcC5vcmcvaW5kZXgucGhwL0VTQVBJPC9hPi4KICoK ICogQ29weXJpZ2h0IChjKSAyMDA3IC0gVGhlIE9XQVNQIEZvdW5kYXRpb24KICoKICogVGhlIEVT QVBJIGlzIHB1Ymxpc2hlZCBieSBPV0FTUCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UuIFlvdSBzaG91 bGQgcmVhZCBhbmQgYWNjZXB0IHRoZQogKiBMSUNFTlNFIGJlZm9yZSB5b3UgdXNlLCBtb2RpZnks IGFuZC9vciByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZS4KICoKICogQGF1dGhvciBKZWZmIFdp bGxpYW1zIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXNwZWN0c2VjdXJpdHkuY29tIj5Bc3BlY3QgU2Vj dXJpdHk8L2E+CiAqIEBhdXRob3Iga2V2aW4udy53YWxsQGdtYWlsLmNvbQogKiBAY3JlYXRlZCAy MDA3CiAqLwpwYWNrYWdlIG9yZy5vd2FzcC5lc2FwaS5yZWZlcmVuY2UuY3J5cHRvOwoKaW1wb3J0 IGphdmEuaW8uSU9FeGNlcHRpb247CmltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdF eGNlcHRpb247CmltcG9ydCBqYXZhLnNlY3VyaXR5LkludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJF eGNlcHRpb247CmltcG9ydCBqYXZhLnNlY3VyaXR5LkludmFsaWRLZXlFeGNlcHRpb247CmltcG9y dCBqYXZhLnNlY3VyaXR5LktleVBhaXI7CmltcG9ydCBqYXZhLnNlY3VyaXR5LktleVBhaXJHZW5l cmF0b3I7CmltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7CmltcG9ydCBqYXZhLnNl Y3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9T dWNoUHJvdmlkZXJFeGNlcHRpb247CmltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZhdGVLZXk7Cmlt cG9ydCBqYXZhLnNlY3VyaXR5LlByb3ZpZGVyOwppbXBvcnQgamF2YS5zZWN1cml0eS5QdWJsaWNL ZXk7CmltcG9ydCBqYXZhLnNlY3VyaXR5LlNlY3VyZVJhbmRvbTsKaW1wb3J0IGphdmEuc2VjdXJp dHkuU2VjdXJpdHk7CmltcG9ydCBqYXZhLnNlY3VyaXR5LlNpZ25hdHVyZTsKaW1wb3J0IGphdmEu dXRpbC5EYXRlOwppbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwppbXBvcnQgamF2YS51dGlsLk1h cDsKaW1wb3J0IGphdmEudXRpbC5TZXQ7CmltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKaW1wb3J0 IGphdmEudXRpbC5NYXAuRW50cnk7CgppbXBvcnQgamF2YXguY3J5cHRvLkJhZFBhZGRpbmdFeGNl cHRpb247CmltcG9ydCBqYXZheC5jcnlwdG8uQ2lwaGVyOwppbXBvcnQgamF2YXguY3J5cHRvLkls bGVnYWxCbG9ja1NpemVFeGNlcHRpb247Ci8vIGltcG9ydCBqYXZheC5jcnlwdG8uTWFjO++7vyAg 77u/ICDvu78gIC8vIFVuY29tbWVudCBpZiBjb21wdXRlSE1BQygpIGlzIGluY2x1ZGVkLgppbXBv cnQgamF2YXguY3J5cHRvLk5vU3VjaFBhZGRpbmdFeGNlcHRpb247CmltcG9ydCBqYXZheC5jcnlw dG8uU2VjcmV0S2V5OwppbXBvcnQgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYzsKaW1w b3J0IGphdmF4LmNyeXB0by5zcGVjLkl2UGFyYW1ldGVyU3BlYzsKCmltcG9ydCBvcmcub3dhc3Au ZXNhcGkuRVNBUEk7CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuRW5jb2RlckNvbnN0YW50czsKaW1w b3J0IG9yZy5vd2FzcC5lc2FwaS5FbmNyeXB0b3I7CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuTG9n Z2VyOwppbXBvcnQgb3JnLm93YXNwLmVzYXBpLmNvZGVjcy5IZXg7CmltcG9ydCBvcmcub3dhc3Au ZXNhcGkuY3J5cHRvLkNpcGhlclNwZWM7CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuY3J5cHRvLkNp cGhlclRleHQ7CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuY3J5cHRvLkNyeXB0b0hlbHBlcjsKaW1w b3J0IG9yZy5vd2FzcC5lc2FwaS5jcnlwdG8uS2V5RGVyaXZhdGlvbkZ1bmN0aW9uOwppbXBvcnQg b3JnLm93YXNwLmVzYXBpLmNyeXB0by5QbGFpblRleHQ7CmltcG9ydCBvcmcub3dhc3AuZXNhcGku Y3J5cHRvLlNlY3VyaXR5UHJvdmlkZXJMb2FkZXI7CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuZXJy b3JzLkNvbmZpZ3VyYXRpb25FeGNlcHRpb247CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuZXJyb3Jz LkVuY3J5cHRpb25FeGNlcHRpb247CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuZXJyb3JzLkludGVn cml0eUV4Y2VwdGlvbjsKaW1wb3J0IG9yZy5vd2FzcC5lc2FwaS5yZWZlcmVuY2UuRGVmYXVsdFNl Y3VyaXR5Q29uZmlndXJhdGlvbjsKCi8qKgogKiBSZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2Yg dGhlIHtAY29kZSBFbmNyeXB0b3J9IGludGVyZmFjZS4gVGhpcyBpbXBsZW1lbnRhdGlvbgogKiBs YXllcnMgb24gdGhlIEpDRSBwcm92aWRlZCBjcnlwdG9ncmFwaGljIHBhY2thZ2UuIEFsZ29yaXRo bXMgdXNlZCBhcmUKICogY29uZmlndXJhYmxlIGluIHRoZSB7QGNvZGUgRVNBUEkucHJvcGVydGll c30gZmlsZS4gVGhlIG1haW4gcHJvcGVydHkKICogY29udHJvbGxpbmcgdGhlIHNlbGVjdGlvbiBv ZiB0aGlzIGNsYXNzIGlzIHtAY29kZSBFU0FQSS5FbmNyeXB0b3J9LiBNb3N0IG9mCiAqIHRoZSBv dGhlciBlbmNyeXB0aW9uIHJlbGF0ZWQgcHJvcGVydGllcyBoYXZlIHByb3BlcnR5IG5hbWVzIHRo YXQgc3RhcnQgd2l0aAogKiB0aGUgc3RyaW5nICJFbmNyeXB0b3IuIi4KICoKICogQGF1dGhvciBK ZWZmIFdpbGxpYW1zIChqZWZmLndpbGxpYW1zIC5hdC4gYXNwZWN0c2VjdXJpdHkuY29tKSA8YQog KiAgICAgICAgIGhyZWY9Imh0dHA6Ly93d3cuYXNwZWN0c2VjdXJpdHkuY29tIj5Bc3BlY3QgU2Vj dXJpdHk8L2E+CiAqIEBhdXRob3Iga2V2aW4udy53YWxsQGdtYWlsLmNvbQogKiBAYXV0aG9yIENo cmlzIFNjaG1pZHQgKGNocmlzaXNiZWVmIC5hdC4gZ21haWwuY29tKQogKiBAc2luY2UgSnVuZSAx LCAyMDA3OyBzb21lIG1ldGhvZHMgc2luY2UgRVNBUEkgSmF2YSAyLjAKICogQHNlZSBvcmcub3dh c3AuZXNhcGkuRW5jcnlwdG9yCiAqLwpwdWJsaWMgZmluYWwgY2xhc3MgSmF2YUVuY3J5cHRvciBp bXBsZW1lbnRzIEVuY3J5cHRvciB7CiAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBFbmNyeXB0 b3Igc2luZ2xldG9uSW5zdGFuY2U7CgogICAgLy8gTm90ZTogVGhpcyBkb3VibGUtY2hlY2sgcGF0 dGVybiBvbmx5IHdvcmtzIGJlY2F1c2Ugc2luZ2xldG9uSW5zdGFuY2UKICAgIC8vICAgICAgIGlz IGRlY2xhcmVkIHRvIGJlIHZvbGF0aWxlLiAgVXN1YWxseSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQK ICAgIC8vICAgICAgIHZpYSBFU0FQSS5lbmNyeXB0b3IoKSByYXRoZXIgdGhhbiBkaXJlY3RseS4K ICAgIHB1YmxpYyBzdGF0aWMgRW5jcnlwdG9yIGdldEluc3RhbmNlKCkgdGhyb3dzIEVuY3J5cHRp b25FeGNlcHRpb24gewoJaWYgKCBzaW5nbGV0b25JbnN0YW5jZSA9PSBudWxsICkgewoJICAgIHN5 bmNocm9uaXplZCAoIEphdmFFbmNyeXB0b3IuY2xhc3MgKSB7CgkJaWYgKCBzaW5nbGV0b25JbnN0 YW5jZSA9PSBudWxsICkgewoJCSAgICBzaW5nbGV0b25JbnN0YW5jZSA9IG5ldyBKYXZhRW5jcnlw dG9yKCk7CgkJfQoJICAgIH0KCX0KCXJldHVybiBzaW5nbGV0b25JbnN0YW5jZTsKICAgIH0KCiAg ICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGluaXRpYWxpemVkID0gZmFsc2U7CgogICAgLy8gZW5j cnlwdGlvbgogICAgcHJpdmF0ZSBzdGF0aWMgU2VjcmV0S2V5U3BlYyBzZWNyZXRLZXlTcGVjID0g bnVsbDsgLy8gRElTQ1VTUzogV2h5IHN0YXRpYz8gSW1wbGllcyBvbmUga2V5PyE/CiAgICBwcml2 YXRlIHN0YXRpYyBTdHJpbmcgZW5jcnlwdEFsZ29yaXRobSA9ICJBRVMiOwogICAgcHJpdmF0ZSBz dGF0aWMgU3RyaW5nIGVuY29kaW5nID0gIlVURi04IjsKICAgIHByaXZhdGUgc3RhdGljIGludCBl bmNyeXB0aW9uS2V5TGVuZ3RoID0gMTI4OwoKICAgIC8vIGRpZ2l0YWwgc2lnbmF0dXJlcwogICAg cHJpdmF0ZSBzdGF0aWMgUHJpdmF0ZUtleSBwcml2YXRlS2V5ID0gbnVsbDsKICAgIO+7vyAgICBw cml2YXRlIHN0YXRpYyBQdWJsaWNLZXkgcHVibGljS2V5ID0gbnVsbDsKICAgIO+7vyAgICBwcml2 YXRlIHN0YXRpYyBTdHJpbmcgc2lnbmF0dXJlQWxnb3JpdGhtID0gIlNIQTF3aXRoRFNBIjsKICAg IHByaXZhdGUgc3RhdGljIFN0cmluZyByYW5kb21BbGdvcml0aG0gPSAiU0hBMVBSTkciOwogICAg 77u/ICAgIHByaXZhdGUgc3RhdGljIGludCBzaWduYXR1cmVLZXlMZW5ndGggPSAxMDI0OwogICAg 77u/ICAKCe+7vyAgICAvLyBoYXNoaW5nCgnvu78gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGhh c2hBbGdvcml0aG0gPSAiU0hBLTUxMiI7CiAgICDvu78gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGhh c2hJdGVyYXRpb25zID0gMTAyNDsKICAgIO+7vyAgCgnvu78gICAgLy8gTG9nZ2luZyAtIERJU0NV U1M6IFRoaXMgInN0aWNrcyIgdXMgd2l0aCBhIHNwZWNpZmljIGxvZ2dlciB0byB3aGF0ZXZlciBp dCB3YXMgd2hlbgoJ77u/ICAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAgdGhpcyBjbGFz cyBpcyBmaXJzdCBsb2FkZWQuIElzIHRoaXMgYSBiaWcgbGltaXRhdGlvbj8gU2luY2UgdGhlcmUK Ce+7vyAgICAvLyAgICAgICAgICAgICAgICAgICAgaXMgbm8gbWV0aG9kIHRvIHJlc2V0IGl0LCB3 ZSBtYXkgaGFzIHdlbGwgbWFrZSBpdCAnZmluYWwnIGFsc28uCgnvu78gICAgcHJpdmF0ZSBzdGF0 aWMgTG9nZ2VyIGxvZ2dlciA9IEVTQVBJLmdldExvZ2dlcigiSmF2YUVuY3J5cHRvciIpOwogICAg 77u/ICAgIC8vIFVzZWQgdG8gcHJpbnQgb3V0IHdhcm5pbmdzIGFib3V0IGRlcHJlY2F0ZWQgbWV0 aG9kcy4KCe+7vyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZW5jcnlwdENvdW50ZXIgPSAwOwogICAg 77u/77u/ICAgIHByaXZhdGUgc3RhdGljIGludCBkZWNyeXB0Q291bnRlciA9IDA7CiAgICDvu78g ICAgLy8gRElTQ1VTUzogT0sgdG8gbm90IGhhdmUgYSBwcm9wZXJ0eSBmb3IgdGhpcyB0byBzZXQg dGhlIGZyZXF1ZW5jeT8KCe+7vyAgICAvLyAgICAgICAgICBUaGUgZGVzaXJlIGlzIHRvIHBlcnN1 YWRlIHBlb3BsZSB0byBtb3ZlIGF3YXkgZnJvbSB0aGVzZQoJ77u/ICAgIC8vICAgICAgICAgIHR3 byBkZXByZWNhdGVkIGVuY3J5cHQoU3RyaW5nKSAvIGRlY3J5cHQoU3RyaW5nKSBtZXRob2RzLAoJ 77u/ICAgIC8vICAgICAgICAgIHNvIHBlcmhhcHMgdGhlIGFubm95YW5jZSBmYWN0b3Igb2Ygbm90 IGJlaW5nIGFibGUgdG8KCe+7vyAgICAvLyAgICAgICAgICBjaGFuZ2UgaXQgd2lsbCBoZWxwLiBG b3Igbm93LCBpdCBpcyBqdXN0IGhhcmQtY29kZWQgaGVyZS4KCe+7vyAgICAvLyAgICAgICAgICBX ZSBjb3VsZCBiZSBtZWFuIGFuZCBqdXN0IHByaW50IGEgd2FybmluZyAqZXZlcnkqIHRpbWUuCgnv u78gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGxvZ0V2ZXJ5TnRoVXNlID0gMjU7CiAgICDv u78gIAoJ77u/ICAgIC8vICpPbmx5KiB1c2UgdGhpcyBzdHJpbmcgZm9yIHVzZXIgbWVzc2FnZXMg Zm9yIEVuY3J5cHRpb25FeGNlcHRpb24gd2hlbgogICAgLy8gZGVjcnlwdGlvbiBmYWlscy4gVGhp cyBpcyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWthZ2UgdGhhdCBtYXkgYmUKICAgIC8vIHZh bHVhYmxlIGluIHZhcmlvdXMgZm9ybXMgb2YgY2lwaGVydGV4dCBhdHRhY2tzLCBzdWNoIGFzIHRo ZQoJ77u/ICAgIC8vIFBhZGRlZCBPcmFjbGUgYXR0YWNrIGRlc2NyaWJlZCBieSBSaXp6byBhbmQg RHVvbmcuCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVDUllQVElPTl9GQUlMRUQgPQoJ IkRlY3J5cHRpb24gZmFpbGVkOyBzZWUgbG9ncyBmb3IgZGV0YWlscy4iOwoKICAgIC8vICMgb2Yg c2Vjb25kcyB0aGF0IGFsbCBmYWlsZWQgZGVjcnlwdGlvbiBhdHRlbXB0cyB3aWxsIHRha2UuIFVz ZWQgdG8KICAgIC8vIGhlbHAgcHJldmVudCBzaWRlLWNoYW5uZWwgdGltaW5nIGF0dGFja3MuCiAg ICBwcml2YXRlIHN0YXRpYyBpbnQgTl9TRUNTID0gMjsKCiAgICDvu78gICAgLy8gTG9hZCB0aGUg cHJlZmVycmVkIEpDRSBwcm92aWRlciBpZiBvbmUgaGFzIGJlZW4gc3BlY2lmaWVkLgoJ77u/ICAg IHN0YXRpYyB7Cgnvu78gICAgICB0cnkgewoJICAgIFNlY3VyaXR5UHJvdmlkZXJMb2FkZXIubG9h ZEVTQVBJUHJlZmVycmVkSkNFUHJvdmlkZXIoKTsKCX0gY2F0Y2ggKE5vU3VjaFByb3ZpZGVyRXhj ZXB0aW9uIGV4KSB7CgkgICAg77u/ICAvLyBOb3RlIHRoYXQgYXVkaXQgbG9nZ2luZyBpcyBkb25l IGVsc2V3aGVyZSBpbiBjYWxsZWQgbWV0aG9kLgoJCWxvZ2dlci5mYXRhbChMb2dnZXIuU0VDVVJJ VFlfRkFJTFVSRSwKCQkJICAgICAiSmF2YUVuY3J5cHRvciBmYWlsZWQgdG8gbG9hZCBwcmVmZXJy ZWQgSkNFIHByb3ZpZGVyLiIsIGV4KTsKCSAgICB0aHJvdyBuZXcgRXhjZXB0aW9uSW5Jbml0aWFs aXplckVycm9yKGV4KTsKCX0KCXNldHVwQWxnb3JpdGhtcygpOwoJ77u/ICAgIH0KICAgIO+7vyAg CiAgICAvKioKICAgICAqIEdlbmVyYXRlcyBhIG5ldyBzdHJvbmdseSByYW5kb20gc2VjcmV0IGtl eSBhbmQgc2FsdCB0aGF0IGNhbiBiZQogICAgICogY29weSBhbmQgcGFzdGVkIGluIHRoZSA8Yj5F U0FQSS5wcm9wZXJ0aWVzPC9iPiBmaWxlLgogICAgICoKICAgICAqIEBwYXJhbSBhcmdzIFNldCBm aXJzdCBhcmd1bWVudCB0byAiLXByaW50IiB0byBkaXNwbGF5IGF2YWlsYWJsZSBhbGdvcml0aG1z IG9uIHN0YW5kYXJkIG91dHB1dC4KICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbu+7 vyAgVG8gY292ZXIgYSBtdWx0aXR1ZGUgb2Ygc2lucywgbW9zdGx5IGluIGNvbmZpZ3VyaW5nIEVT QVBJLnByb3BlcnRpZXMuCiAgICAgKi8KCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdb XSBhcmdzICkgdGhyb3dzIEV4Y2VwdGlvbiB7Cgnvu78gIO+7vyAgU3lzdGVtLm91dC5wcmludGxu KCAiR2VuZXJhdGluZyBhIG5ldyBzZWNyZXQgbWFzdGVyIGtleSIgKTsKCe+7vyAg77u/ICAKCSAg ICDvu78gIO+7vyAgLy8gcHJpbnQgb3V0IGF2YWlsYWJsZSBjaXBoZXJzCgkgICAg77u/ICDvu78g IGlmICggYXJncy5sZW5ndGggPT0gMSAmJiBhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoIi1wcmlu dCIgKSApIHsKCSAgICDvu78gIO+7vyAg77u/ICBTeXN0ZW0ub3V0LnByaW50bG4oICJBVkFJTEFC TEUgQUxHT1JJVEhNUyIgKTsKCgkgICAg77u/ICDvu78gIO+7vyAgUHJvdmlkZXJbXSBwcm92aWRl cnMgPSBTZWN1cml0eS5nZXRQcm92aWRlcnMoKTsKCSAgICDvu78gIO+7vyAg77u/ICBUcmVlTWFw PFN0cmluZywgU3RyaW5nPiB0bSA9IG5ldyBUcmVlTWFwPFN0cmluZywgU3RyaW5nPigpOwoJICAg IO+7vyAg77u/ICDvu78gIC8vIERJU0NVU1M6IE5vdGU6IFdlIGdvIHRocm91Z2ggbXVsdGlwbGUg cHJvdmlkZXJzLCB5ZXQgbm93aGVyZSBkbyBJCgkJ77u/ICDvu78gIO+7vyAgLy/vu78gIO+7vyAg 77u/ICBzZWUgd2hlcmUgd2UgcHJpbnQgb3V0IHRoZSBQUk9WSURFUiBOQU1FLiBOb3QgYWxsIHBy b3ZpZGVycwoJCe+7vyAg77u/ICDvu78gIC8v77u/ICDvu78gIO+7vyAgd2lsbCBpbXBsZW1lbnQg dGhlIHNhbWUgYWxnb3JpdGhtcyBhbmQgc29tZSAicGFydG5lciIgd2l0aAoJCe+7vyAg77u/ICDv u78gIC8v77u/ICDvu78gIO+7vyAgd2hvbSB3ZSBhcmUgZXhjaGFuZ2luZyBkaWZmZXJlbnQgY3J5 cHRvZ3JhcGhpYyBtZXNzYWdlcyBtYXkKCQnvu78gIO+7vyAg77u/ICAvL++7vyAg77u/ICDvu78g IGhhdmUgX2RpZmZlcmVudF8gcHJvdmlkZXJzIGluIHRoZWlyIGphdmEuc2VjdXJpdHkgZmlsZS4g U28KCQnvu78gIO+7vyAg77u/ICAvL++7vyAg77u/ICDvu78gIGl0IHdvdWxkIGJlIHVzZWZ1bCB0 byBrbm93IHRoZSBwcm92aWRlciBuYW1lIHdoZXJlIGVhY2gKCQnvu78gIO+7vyAg77u/ICAvL++7 vyAg77u/ICDvu78gIGFsZ29yaXRobSBpcyBpbXBsZW1lbnRlZC4gTWlnaHQgYmUgZ29vZCB0byBw cmVwZW5kIHRoZSBwcm92aWRlcgoJCe+7vyAg77u/ICDvu78gIC8v77u/ICDvu78gIO+7vyAgbmFt ZSB0byB0aGUgJ2tleScgd2l0aCBzb21ldGhpbmcgbGlrZSAicHJvdmlkZXJOYW1lOiAiLiBUaG91 Z2h0cz8KCQnvu78gIO+7vyAg77u/ICBmb3IgKGludCBpID0gMDsgaSAhPSBwcm92aWRlcnMubGVu Z3RoOyBpKyspIHsKCQnvu78gICAgICAgIC8vIERJU0NVU1M6IFByaW50IHNlY3VyaXR5IHByb3Zp ZGVyIG5hbWUgaGVyZT8/PwoJCSAgICDvu78gICAgICAgIC8vIE5vdGU6IEZvciBzb21lIG9kZCBy ZWFzb24sIFByb3ZpZGVyLmtleVNldCgpIHJldHVybnMKCQkgICAg77u/ICAgICAgICAvL++7vyAg 77u/ICAgU2V0PE9iamVjdD4gb2YgdGhlIHByb3BlcnR5IGtleXMgKHdoaWNoIGFyZSBTdHJpbmdz KQoJCSAgICDvu78gICAgICAgIC8v77u/ICDvu78gICBjb250YWluZWQgaW4gdGhpcyBwcm92aWRl ciwgYnV0IFNldDxTdHJpbmc+IHNlZW1zCgkJICAgIO+7vyAgICAgICAgLy/vu78gIO+7vyAgIG1v cmUgYXBwcm9wcmlhdGUuIEJ1dCB0aGF0J3Mgd2h5IHdlIG5lZWQgdGhlIGNhc3QgYmVsb3cuCgkJ ICAgIO+7vyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PSBQcm92aWRlciAiICsgaSAr ICI6IiArIHByb3ZpZGVyc1tpXS5nZXROYW1lKCkgKyAiID09PT09PSIpOwoJCe+7vyAgICAgICAg SXRlcmF0b3I8T2JqZWN0PiBpdCA9IHByb3ZpZGVyc1tpXS5rZXlTZXQoKS5pdGVyYXRvcigpOwoJ Ce+7vyAg77u/ICDvu78gIO+7vyAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewoJCSAgICDvu78gICAg ICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpaXQubmV4dCgpOwoJCSAgICDvu78gICAgICAgICAg U3RyaW5nIHZhbHVlID0gcHJvdmlkZXJzW2ldLmdldFByb3BlcnR5KCBrZXkgKTsKCQkgICAg77u/ ICAgICAgICAgIHRtLnB1dChrZXksIHZhbHVlKTsKCQkgICAg77u/ICAgICAgICAgIFN5c3RlbS5v dXQucHJpbnRsbigiXHRcdCAgICIgKyBrZXkgKyAiIC0+ICIrIHZhbHVlICk7CgkJICAgIO+7vyAg 77u/ICDvu78gIO+7vyAgfQoJCe+7vyAg77u/ICDvu78gIH0KCgkgICAg77u/ICDvu78gIO+7vyAg U2V0PCBFbnRyeTxTdHJpbmcsU3RyaW5nPiA+IGtleVZhbHVlU2V0ID0gdG0uZW50cnlTZXQoKTsK CSAgICDvu78gIO+7vyAg77u/ICBJdGVyYXRvcjxFbnRyeTxTdHJpbmcsIFN0cmluZz4+IGl0ID0g a2V5VmFsdWVTZXQuaXRlcmF0b3IoKTsKCSAgICDvu78gIO+7vyAg77u/ICB3aGlsZSggaXQuaGFz TmV4dCgpICkgewoJCe+7vyAg77u/ICDvu78gIO+7vyAgTWFwLkVudHJ5PFN0cmluZyxTdHJpbmc+ IGVudHJ5ID0gaXQubmV4dCgpOwoJCe+7vyAg77u/ICDvu78gIO+7vyAgU3RyaW5nIGtleSA9IGVu dHJ5LmdldEtleSgpOwoJCe+7vyAg77u/ICDvu78gIO+7vyAgU3RyaW5nIHZhbHVlID0gZW50cnku Z2V0VmFsdWUoKTsKCQnvu78gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICIgKyBrZXkg KyAiIC0+ICIrIHZhbHVlICk7CgkJ77u/ICDvu78gIO+7vyAgfQoJICAgIO+7vyAg77u/ICB9IGVs c2UgewoJICAgIO+7vyAg77u/ICDvu78gIO+7vyAgLy8gVXNlZCB0byBwcmludCBhIHNpbWlsYXIg bGluZSB0byB1c2UgJy1wcmludCcgZXZlbiB3aGVuIGl0IHdhcyBzcGVjaWZpZWQuCgkJ77u/ICDv u78gIO+7vyAgU3lzdGVtLm91dC5wcmludGxuKCAiXHR1c2UgJy1wcmludCcgdG8gYWxzbyBzaG93 IGF2YWlsYWJsZSBjcnlwdG8gYWxnb3JpdGhtcyBmcm9tIGFsbCB0aGUgc2VjdXJpdHkgcHJvdmlk ZXJzIiApOwoJICAgIO+7vyAg77u/ICB9Cgnvu78gIO+7vyAgCgkgICAg77u/ICDvu78gIC8vIHNl dHVwIGFsZ29yaXRobXMgLS0gRWFjaCBvZiB0aGVzZSBoYXZlIGRlZmF1bHRzIGlmIG5vdCBzZXQs IGFsdGhvdWdoCgkgICAg77u/ICDvu78gIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAgIHNv bWVvbmUgY291bGQgc2V0IHRoZW0gdG8gc29tZXRoaW5nIGludmFsaWQuIElmCgkgICAg77u/ICDv u78gIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAgIHNvIGEgc3VpdGFibGUgZXhjZXB0aW9u IHdpbGwgYmUgdGhyb3duIGFuZCBkaXNwbGF5ZWQuCgkgICAg77u/ICDvu78gIGVuY3J5cHRBbGdv cml0aG0gPSBFU0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRFbmNyeXB0aW9uQWxnb3Jp dGhtKCk7Cgnvu78gIO+7vyAgZW5jcnlwdGlvbktleUxlbmd0aCA9IEVTQVBJLnNlY3VyaXR5Q29u ZmlndXJhdGlvbigpLmdldEVuY3J5cHRpb25LZXlMZW5ndGgoKTsKCe+7vyAg77u/ICByYW5kb21B bGdvcml0aG0gPSBFU0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRSYW5kb21BbGdvcml0 aG0oKTsKCgnvu78gIO+7vyAgU2VjdXJlUmFuZG9tIHJhbmRvbSA9IFNlY3VyZVJhbmRvbS5nZXRJ bnN0YW5jZShyYW5kb21BbGdvcml0aG0pOwoJ77u/ICDvu78gIFNlY3JldEtleSBzZWNyZXRLZXkg PSBDcnlwdG9IZWxwZXIuZ2VuZXJhdGVTZWNyZXRLZXkoZW5jcnlwdEFsZ29yaXRobSwgZW5jcnlw dGlvbktleUxlbmd0aCk7Cgnvu78gIO+7vyAgYnl0ZVtdIHJhdyA9IHNlY3JldEtleS5nZXRFbmNv ZGVkKCk7Cgnvu78gIO+7vyAgYnl0ZVtdIHNhbHQgPSBuZXcgYnl0ZVsyMF0777u/ICAvLyBPciAx NjAtYml0czsgYmlnIGVub3VnaCBmb3IgU0hBMSwgYnV0IG5vdCBTSEEtMjU2IG9yIFNIQS01MTIu CgkJCQkJICAg77u/ICDvu78gIHJhbmRvbS5uZXh0Qnl0ZXMoIHNhbHQgKTsKCe+7vyAg77u/ICBT dHJpbmcgZW9sID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIsICJcbiIpOyAv LyBTbyBpdCB3b3JrcyBvbiBXaW5kb3dzIHRvby4KCe+7vyAg77u/ICBTeXN0ZW0ub3V0LnByaW50 bG4oIGVvbCArICJDb3B5IGFuZCBwYXN0ZSB0aGVzZSBsaW5lcyBpbnRvIHlvdXIgRVNBUEkucHJv cGVydGllcyIgKyBlb2wpOwoJ77u/ICDvu78gIFN5c3RlbS5vdXQucHJpbnRsbiggIiM9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIp OwoJ77u/ICDvu78gIFN5c3RlbS5vdXQucHJpbnRsbiggIkVuY3J5cHRvci5NYXN0ZXJLZXk9IiAr IEVTQVBJLmVuY29kZXIoKS5lbmNvZGVGb3JCYXNlNjQocmF3LCBmYWxzZSkgKTsKCe+7vyAg77u/ ICBTeXN0ZW0ub3V0LnByaW50bG4oICJFbmNyeXB0b3IuTWFzdGVyU2FsdD0iICsgRVNBUEkuZW5j b2RlcigpLmVuY29kZUZvckJhc2U2NChzYWx0LCBmYWxzZSkgKTsKCe+7vyAg77u/ICBTeXN0ZW0u b3V0LnByaW50bG4oICIjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0iICsgZW9sKTsKICAgIH0KICAgIO+7vyAgCgogICAgLyoqCiAg ICAgKiBQcml2YXRlIENUT1IgZm9yIHtAY29kZSBKYXZhRW5jcnlwdG9yfSwgY2FsbGVkIGJ5IHtA Y29kZSBnZXRJbnN0YW5jZSgpfS4KICAgICAqIEB0aHJvd3MgRW5jcnlwdGlvbkV4Y2VwdGlvbiBp ZiBjYW4ndCBjb25zdHJ1Y3QgdGhpcyBvYmplY3QgZm9yIHNvbWUgcmVhc29uLgogICAgICog77u/ ICDvu78gIO+7vyAg77u/ICDvu78gIE9yaWdpbmFsIGV4Y2VwdGlvbiB3aWxsIGJlIGF0dGFjaGVk IGFzIHRoZSAnY2F1c2UnLgogICAgICovCglwcml2YXRlIEphdmFFbmNyeXB0b3IoKSB0aHJvd3Mg RW5jcnlwdGlvbkV4Y2VwdGlvbiB7CglieXRlW10gc2FsdCA9IEVTQVBJLnNlY3VyaXR5Q29uZmln dXJhdGlvbigpLmdldE1hc3RlclNhbHQoKTsKCWJ5dGVbXSBza2V5ID0gRVNBUEkuc2VjdXJpdHlD b25maWd1cmF0aW9uKCkuZ2V0TWFzdGVyS2V5KCk7CgoJYXNzZXJ0IHNhbHQgIT0gbnVsbCA6ICJD YW4ndCBvYnRhaW4gbWFzdGVyIHNhbHQsIEVuY3J5cHRvci5NYXN0ZXJTYWx0IjsKCWFzc2VydCBz YWx0Lmxlbmd0aCA+PSAxNiA6ICJFbmNyeXB0b3IuTWFzdGVyU2FsdCBtdXN0IGJlIGF0IGxlYXN0 IDE2IGJ5dGVzLiAiICsKCSAgICAiTGVuZ3RoIGlzOiAiICsgc2FsdC5sZW5ndGggKyAiIGJ5dGVz LiI7Cglhc3NlcnQgc2tleSAhPSBudWxsIDogIkNhbid0IG9idGFpbiBtYXN0ZXIga2V5LCBFbmNy eXB0b3IuTWFzdGVyS2V5IjsKCWFzc2VydCBza2V5Lmxlbmd0aCA+PSA3IDogIkVuY3J5cHRvci5N YXN0ZXJLZXkgbXVzdCBiZSBhdCBsZWFzdCA3IGJ5dGVzLiAiICsKCSAgICAiTGVuZ3RoIGlzOiAi ICsgc2tleS5sZW5ndGggKyAiIGJ5dGVzLiI7CgoJLy8gU2V0IHVwIHNlY3JldEtleVNwZWMgZm9y IHVzZSBmb3Igc3ltbWV0cmljIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24sCgkvLyBhbmQgc2V0 IHVwIHRoZSBwdWJsaWMvcHJpdmF0ZSBrZXlzIGZvciBhc3ltbWV0cmljIGVuY3J5cHRpb24gLwoJ Ly8gZGVjcnlwdGlvbi4KCS8vIFRPRE86IE5vdGU6IElmIHdlIGR1bXAgRVNBUEkgMS40IGNyeXB0 byBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LAoJLy8gICAgICAgdGhlbiB3ZSBwcm9iYWJseSB3aWxs IGRpdGNoIHRoZSBFbmNyeXB0b3IuRW5jcnlwdGlvbkFsZ29yaXRobQoJLy8gICAgICAgcHJvcGVy dHkuIElmIHNvLCBlbmNyeXB0QWxnb3JpdGhtIHNob3VsZCBwcm9iYWJseSB1c2UKCS8vICAgICAg IEVuY3J5cHRvci5DaXBoZXJUcmFuc2Zvcm1hdGlvbiBhbmQganVzdCBwdWxsIG9mZiB0aGUgY2lw aGVyCgkvLyAgICAgICBhbGdvcml0aG0gbmFtZSBzbyB3ZSBjYW4gdXNlIGl0IGhlcmUuCglzeW5j aHJvbml6ZWQoSmF2YUVuY3J5cHRvci5jbGFzcykgewoJICAgIGlmICggISBpbml0aWFsaXplZCAp IHsKCQkvLwoJCS8vIEZvciBzeW1tZXRyaWMgZW5jcnlwdGlvbgoJCS8vCgkJLy8gICAgICBOT1RF OiBGaW5kQnVncyBjb21wbGFpbnMgYWJvdXQgdGhpcwoJCS8vICAgICAgICAgICAgKFNUX1dSSVRF X1RPX1NUQVRJQ19GUk9NX0lOU1RBTkNFX01FVEhPRCkgYnV0CgkJLy8gICAgICAgICAgICBpdCBz aG91bGQgYmUgT0sgc2luY2UgaXQgaXMgc3luY2hyb25pemVkIGFuZCBvbmx5CgkJLy8gICAgICAg ICAgICBkb25lIG9uY2UuIFdoaWxlIHdlIGNvdWxkIHNlcGFyYXRlIHRoaXMgb3V0IGFuZAoJCS8v ICAgICAgICAgICAgaGFuZGxlIGluIGEgc3RhdGljIGluaXRpYWxpemVyLCBpdCBqdXN0IHNlZW1z IHRvCgkJLy8gICAgICAgICAgICBmaXQgYmV0dGVyIGhlcmUuCgkJc2VjcmV0S2V5U3BlYyA9IG5l dyBTZWNyZXRLZXlTcGVjKHNrZXksIGVuY3J5cHRBbGdvcml0aG0gKTsKCgkJLy8KCQkvLyBGb3Ig YXN5bW1ldHJpYyBlbmNyeXB0aW9uIChpLmUuLCBwdWJsaWMvcHJpdmF0ZSBrZXkpCgkJLy8KCQl0 cnkgewoJCSAgICBTZWN1cmVSYW5kb20gcHJuZyA9IFNlY3VyZVJhbmRvbS5nZXRJbnN0YW5jZShy YW5kb21BbGdvcml0aG0pOwoKCQkgICAgLy8gQmVjYXVzZSBoYXNoKCkgaXMgbm90IHN0YXRpYyAo YnV0IGl0IGNvdWxkIGJlIHdlcmUgaW4gbm90CgkJICAgIC8vIGZvciB0aGUgaW50ZXJmYWNlIG1l dGhvZCBzcGVjaWZpY2F0aW9uIGluIEVuY3J5cHRvciksIHdlCgkJICAgIC8vIGNhbm5vdCBkbyB0 aGlzIGluaXRpYWxpemF0aW9uIGluIGEgc3RhdGljIG1ldGhvZCBvciBzdGF0aWMKCQkgICAgLy8g aW5pdGlhbGl6ZXIuCgkJICAgIGJ5dGVbXSBzZWVkID0gaGFzaChuZXcgU3RyaW5nKHNrZXksIGVu Y29kaW5nKSxuZXcgU3RyaW5nKHNhbHQsIGVuY29kaW5nKSkuZ2V0Qnl0ZXMoZW5jb2RpbmcpOwoJ CSAgICBwcm5nLnNldFNlZWQoc2VlZCk7CgkJICAgIGluaXRLZXlQYWlyKHBybmcpOwoJCX0gY2F0 Y2ggKEV4Y2VwdGlvbiBlKSB7CgkJICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKCJF bmNyeXB0aW9uIGZhaWx1cmUiLCAiRXJyb3IgY3JlYXRpbmcgRW5jcnlwdG9yIiwgZSk7CgkJfSAg ICAgICAgICAgICAKCgkJLy8gTWFyayBldmVyeXRoaW5nIGFzIGluaXRpYWxpemVkLgoJCWluaXRp YWxpemVkID0gdHJ1ZTsKCSAgICB9Cgl9CiAgICB9CgoKCiAgICDvu78gIC8qKgogICAgICAgKiB7 QGluaGVyaXREb2N9CiAgICAgICAqCiAgICAgICDvu78gICAqIEhhc2hlcyB0aGUgZGF0YSB3aXRo IHRoZSBzdXBwbGllZCBzYWx0IGFuZCB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgc3BlY2lmaWVk IGluCiAgICAgICDvu78gICAqIHRoZSBFU0FQSSBTZWN1cml0eUNvbmZpZ3VyYXRpb24uCiAgICAg ICDvu78gICAqLwoJ77u/ICBwdWJsaWMgU3RyaW5nIGhhc2goU3RyaW5nIHBsYWludGV4dCwgU3Ry aW5nIHNhbHQpIHRocm93cyBFbmNyeXB0aW9uRXhjZXB0aW9uIHsKCe+7vyAg77u/ICByZXR1cm4g aGFzaCggcGxhaW50ZXh0LCBzYWx0LCBoYXNoSXRlcmF0aW9ucyApOwoJ77u/ICB9CiAgICDvu78g IAoJ77u/ICAvKioKCSAgICoge0Bpbmhlcml0RG9jfQoJICAgKgoJICAg77u/ICAgKiBIYXNoZXMg dGhlIGRhdGEgdXNpbmcgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0gYW5kIHRoZSBKYXZhIE1lc3Nh Z2VEaWdlc3QgY2xhc3MuIFRoaXMgbWV0aG9kCgkgICDvu78gICAqIGZpcnN0IGFkZHMgdGhlIHNh bHQsIGEgc2VwYXJhdG9yICgiOiIpLCBhbmQgdGhlIGRhdGEsIGFuZCB0aGVuIHJlaGFzaGVzIHRo ZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKCSAgIO+7vyAgICogaW4gb3JkZXIgdG8g aGVscCBzdHJlbmd0aGVuIHdlYWsgcGFzc3dvcmRzLgoJICAg77u/ICAgKi8KCe+7vyAgcHVibGlj IFN0cmluZyBoYXNoKFN0cmluZyBwbGFpbnRleHQsIFN0cmluZyBzYWx0LCBpbnQgaXRlcmF0aW9u cykgdGhyb3dzIEVuY3J5cHRpb25FeGNlcHRpb24gewoJ77u/ICDvu78gIGJ5dGVbXSBieXRlcyA9 IG51bGw7Cgnvu78gIO+7vyAgdHJ5IHsKCSAgICDvu78gIO+7vyAg77u/ICBNZXNzYWdlRGlnZXN0 IGRpZ2VzdCA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoaGFzaEFsZ29yaXRobSk7CgkgICAg 77u/ICDvu78gIO+7vyAgZGlnZXN0LnJlc2V0KCk7CgkgICAg77u/ICDvu78gIO+7vyAgZGlnZXN0 LnVwZGF0ZShFU0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRNYXN0ZXJTYWx0KCkpOwoJ ICAgIO+7vyAg77u/ICDvu78gIGRpZ2VzdC51cGRhdGUoc2FsdC5nZXRCeXRlcyhlbmNvZGluZykp OwoJICAgIO+7vyAg77u/ICDvu78gIGRpZ2VzdC51cGRhdGUocGxhaW50ZXh0LmdldEJ5dGVzKGVu Y29kaW5nKSk7CgoJICAgIO+7vyAg77u/ICDvu78gIC8vIHJlaGFzaCBhIG51bWJlciBvZiB0aW1l cyB0byBoZWxwIHN0cmVuZ3RoZW4gd2VhayBwYXNzd29yZHMKCQnvu78gIO+7vyAg77u/ICBieXRl cyA9IGRpZ2VzdC5kaWdlc3QoKTsKCSAgICDvu78gIO+7vyAg77u/ICBmb3IgKGludCBpID0gMDsg aSA8IGl0ZXJhdGlvbnM7IGkrKykgewoJCe+7vyAg77u/ICDvu78gIO+7vyAgZGlnZXN0LnJlc2V0 KCk7CgkJ77u/ICDvu78gIO+7vyAg77u/ICBieXRlcyA9IGRpZ2VzdC5kaWdlc3QoYnl0ZXMpOwoJ Ce+7vyAg77u/ICDvu78gIH0KCSAgICDvu78gIO+7vyAg77u/ICBTdHJpbmcgZW5jb2RlZCA9IEVT QVBJLmVuY29kZXIoKS5lbmNvZGVGb3JCYXNlNjQoYnl0ZXMsZmFsc2UpOwoJICAgIO+7vyAg77u/ ICDvu78gIHJldHVybiBlbmNvZGVkOwoJICAgIO+7vyAg77u/ICB9IGNhdGNoIChOb1N1Y2hBbGdv cml0aG1FeGNlcHRpb24gZSkgewoJICAgIO+7vyAg77u/ICDvu78gIHRocm93IG5ldyBFbmNyeXB0 aW9uRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvciIsICJDYW4ndCBmaW5kIGhhc2ggYWxnb3JpdGht ICIgKyBoYXNoQWxnb3JpdGhtLCBlKTsKCSAgICDvu78gIO+7vyAgfSBjYXRjaCAoVW5zdXBwb3J0 ZWRFbmNvZGluZ0V4Y2VwdGlvbiBleCkgewoJICAgIO+7vyAg77u/ICDvu78gIHRocm93IG5ldyBF bmNyeXB0aW9uRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvciIsICJDYW4ndCBmaW5kIGVuY29kaW5n IGZvciAiICsgZW5jb2RpbmcsIGV4KTsKCSAgICDvu78gIO+7vyAgfQoJ77u/ICB9CiAgICDvu78g IAoJ77u/ICAvKioKCSAgICAg77u/ICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdGhhdCBlbmNyeXB0 cyBwbGFpbnRleHQgc3RyaW5ncyB0aGUgbmV3IHdheSAoZGVmYXVsdAoJICAgICDvu78gICAqIGlz IENCQyBtb2RlIGFuZCBQS0NTNSBwYWRkaW5nKS4gVGhpcyBlbmNyeXB0aW9uIG1ldGhvZCB1c2Vz IHRoZSBtYXN0ZXIKCSAgICAg77u/ICAgKiBlbmNyeXB0aW9uIGtleSBzcGVjaWZpZWQgYnkgdGhl IHtAY29kZSBFbmNyeXB0b3IuTWFzdGVyS2V5fSBwcm9wZXJ0eQoJICAgICDvu78gICAqIGluIHtA Y29kZSBFU0FQSS5wcm9wZXJ0aWVzfS4KCSAgICAg77u/ICAgKgoJICAgICDvu78gICAqIEBwYXJh bSBwbGFpbnRleHTvu78gIEEgU3RyaW5nIHRvIGJlIGVuY3J5cHRlZAoJICAgICDvu78gICAqIEBy ZXR1cm7vu78gIEEgYmFzZTY0LWVuY29kZWQgY29tYmluYXRpb24gb2YgSVYgKyByYXcgY2lwaGVy dGV4dAoJICAgICDvu78gICAqIEB0aHJvd3MgRW5jcnlwdGlvbkV4Y2VwdGlvbu+7vyAgVGhyb3du IHdoZW4gc29tZXRoaW5nIGdvZXMgd3Jvbmcgd2l0aCB0aGUKCSAgICAg77u/ICAgKiDvu78gIO+7 vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgZW5jcnlwdGlvbi4KCSAgICAg77u/ICAg KgoJICAgICDvu78gICAqIEBzZWUgb3JnLm93YXNwLmVzYXBpLkVuY3J5cHRvciNlbmNyeXB0KFBs YWluVGV4dCkKCSAgICAg77u/ICAgKi8KCe+7vyAgQERlcHJlY2F0ZWQgcHVibGljIFN0cmluZyBl bmNyeXB0KFN0cmluZyBwbGFpbnRleHQpIHRocm93cyBFbmNyeXB0aW9uRXhjZXB0aW9uCgkJCQkJ CQkJICAgICDvu78gIHsKCWxvZ1dhcm5pbmcoImVuY3J5cHQiLCAiQ2FsbGluZyBkZXByZWNhdGVk IGVuY3J5cHQoKSBtZXRob2QuIik7Cgnvu78gIO+7vyAgQ2lwaGVyVGV4dCBjdCA9IG51bGw7Cgnv u78gIO+7vyAgY3QgPSBlbmNyeXB0KG5ldyBQbGFpblRleHQocGxhaW50ZXh0KSApOwoJ77u/ICDv u78gIHJldHVybiBjdC5nZXRFbmNvZGVkSVZDaXBoZXJUZXh0KCk7Cgnvu78gIH0KCgogICAg77u/ ICAvKioKCSDvu78gICoge0Bpbmhlcml0RG9jfQoJIO+7vyAgKi8KCe+7vyAgIHB1YmxpYyBDaXBo ZXJUZXh0IGVuY3J5cHQoUGxhaW5UZXh0IHBsYWludGV4dCkgdGhyb3dzIEVuY3J5cHRpb25FeGNl cHRpb24gewoJ77u/ICDvu78gICAvLyBOb3cgbW9yZSBvZiBhIGNvbnZlbmllbmNlIGZ1bmN0aW9u IGZvciB1c2luZyB0aGUgbWFzdGVyIGtleS4KCSAgICDvu78gIO+7vyAgIHJldHVybiBlbmNyeXB0 KHNlY3JldEtleVNwZWMsIHBsYWludGV4dCk7Cgnvu78gICB9CiAgICDvu78gICAKCe+7vyAgIC8q KgoJICAgICAg77u/ICAgICoge0Bpbmhlcml0RG9jfQoJICAgICAg77u/ICAgICovCgnvu78gICBw dWJsaWMgQ2lwaGVyVGV4dCBlbmNyeXB0KFNlY3JldEtleSBrZXksIFBsYWluVGV4dCBwbGFpbikK Ce+7vyAgIO+7vyAg77u/ICDvu78gIHRocm93cyBFbmNyeXB0aW9uRXhjZXB0aW9uCgkJCe+7vyAg IHsKCe+7vyAg77u/ICAgYnl0ZVtdIHBsYWludGV4dCA9IHBsYWluLmFzQnl0ZXMoKTsKCe+7vyAg 77u/ICAgYm9vbGVhbiBvdmVyd3JpdGVQbGFpbnRleHQgPSBFU0FQSS5zZWN1cml0eUNvbmZpZ3Vy YXRpb24oKS5vdmVyd3JpdGVQbGFpblRleHQoKTsKCe+7vyAg77u/ICAgYXNzZXJ0IGtleSAhPSBu dWxsIDogIihNYXN0ZXIpIGVuY3J5cHRpb24ga2V5IG1heSBub3QgYmUgbnVsbCI7Cgnvu78gIO+7 vyAgIAoJICAgIO+7vyAg77u/ICAgYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U777u/ICAvLyBVc2Vk IGluICdmaW5hbGx5JyBjbGF1c2UuCgkJCQkJICAgICDvu78gIO+7vyAgIFN0cmluZyB4Zm9ybSA9 IG51bGw7Cgnvu78gIO+7vyAgIGludCBrZXlTaXplID0ga2V5LmdldEVuY29kZWQoKS5sZW5ndGgg KiA4O++7vyAgLy8gQ29udmVydCB0byAjIGJpdHMKCgkJCQkJCQkgICB0cnkgewoJCQkJCQkJICAg ICAgIHhmb3JtID0gRVNBUEkuc2VjdXJpdHlDb25maWd1cmF0aW9uKCkuZ2V0Q2lwaGVyVHJhbnNm b3JtYXRpb24oKTsKCQkJCQkJCSAgICAgICBTdHJpbmdbXSBwYXJ0cyA9IHhmb3JtLnNwbGl0KCIv Iik7CgkJCQkJCQkgICAgICAgYXNzZXJ0IHBhcnRzLmxlbmd0aCA9PSAzIDogIk1hbGZvcm1lZCBj aXBoZXIgdHJhbnNmb3JtYXRpb246ICIgKyB4Zm9ybTsKCQkJCQkJCSAgICAgICBTdHJpbmcgY2lw aGVyTW9kZSA9IHBhcnRzWzFdOwoKCQkJCQkJCSAgICAgICAvLyBUaGlzIHdheSB3ZSBjYW4gcHJl dmVudCBtb2RlcyBsaWtlIE9GQiBhbmQgQ0ZCIHdoZXJlIHRoZSBJViBzaG91bGQgbmV2ZXIKCQkJ CQkJCSAgICAgICAvLyBiZSByZXBlYXRlZCB3aXRoIHRoZSBzYW1lIGVuY3J5cHRpb24ga2V5IChh dCBsZWFzdCB1bnRpbCB3ZSBzdXBwb3J0CgkJCQkJCQkgICAgICAgLy8gRW5jcnlwdG9yLkNob29z ZUlWTWV0aG9kPXNwZWNpZmllZCBhbmQgYWxsb3cgdXMgdG8gc3BlY2lmeSBzb21lIG1lY2hhbmlz bQoJCQkJCQkJICAgICAgIC8vIHRvIGVuc3VyZSB0aGUgSVYgd2lsbCBuZXZlciBiZSByZXBlYXRl ZCAoc3VjaCBhcyBhIHRpbWUgc3RhbXAgb3Igb3RoZXIKCQkJCQkJCSAgICAgICAvLyBtb25vdG9u aWNhbGx5IGluY3JlYXNpbmcgZnVuY3Rpb24pLgoJCQkJCQkJICAgICAgIC8vIERJU0NVU1M6IFNo b3VsZCB3ZSBpbmNsdWRlIHRoZSBwZXJtaXR0ZWQgY2lwaGVyIG1vZGVzIGluIHRoZSBleGNlcHRp b24gbXNnPwoJCQkJCQkJICAgICAgIGlmICggISBDcnlwdG9IZWxwZXIuaXNBbGxvd2VkQ2lwaGVy TW9kZShjaXBoZXJNb2RlKSApIHsKCQkJCQkJCQkgICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2Vw dGlvbigiRW5jcnlwdGlvbiBmYWlsdXJlOiBpbnZhbGlkIGNpcGhlciBtb2RlICggIiArIGNpcGhl ck1vZGUgKyAiKSBmb3IgZW5jcnlwdGlvbiIsCgkJCQkJCQkJCQkJCSAiRW5jcnlwdGlvbiBmYWls dXJlOiBDaXBoZXIgdHJhbnNmb3JtYXRpb24gIiArIHhmb3JtICsgIiBzcGVjaWZpZXMgaW52YWxp ZCAiICsKCQkJCQkJCQkJCQkJICJjaXBoZXIgbW9kZSAiICsgY2lwaGVyTW9kZSk7CgkJCQkJCQkg ICAgICAgfQoKCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICAgLy8gTm90ZSAtIENpcGhlciBp cyBub3QgdGhyZWFkLXNhZmUgc28gd2UgY3JlYXRlIG9uZSBsb2NhbGx5CgkJCQkJCQkJICAg77u/ ICDvu78gIO+7vyAgIC8vICAgICAgICBBbHNvLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGlzIGV2ZW50 dWFsbHkgc28gb3RoZXIgYWxnb3JpdGhtcyBjYW4KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAg Ly8gICAgICAgIGJlIHN1cHBvcnRlZC4gRXZlbnR1YWxseSwgdGhlcmUgd2lsbCBiZSBhbiBlbmNy eXB0KCkgbWV0aG9kIHRoYXQKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy8gICAgICAgIHRh a2VzIGEgKG5ldyBjbGFzcykgQ3J5cHRvQ29udHJvbHMsIGFzIHNvbWV0aGluZyBsaWtlIHRoaXM6 CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8vICAgICAgICAgIHB1YmxpYyBDaXBoZXJUZXh0 IGVuY3J5cHQoQ3J5cHRvQ29udHJvbHMgY3RybCwgU2VjcmV0S2V5IHNrZXksIFBsYWluVGV4dCBw bGFpbnRleHQpCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8vICAgICAgICBhbmQgdGhpcyBt ZXRob2Qgd2lsbCBqdXN0IGNhbGwgdGhhdCBvbmUuCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAg IENpcGhlciBlbmNyeXB0ZXIgPSBDaXBoZXIuZ2V0SW5zdGFuY2UoeGZvcm0pOwoJCQkJCQkJICAg ICAgIO+7vyAg77u/ICDvu78gICBTdHJpbmcgY2lwaGVyQWxnID0gZW5jcnlwdGVyLmdldEFsZ29y aXRobSgpOwoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICBpbnQga2V5TGVuID0gRVNBUEku c2VjdXJpdHlDb25maWd1cmF0aW9uKCkuZ2V0RW5jcnlwdGlvbktleUxlbmd0aCgpOwoKCQkJCQkJ CSAgICAgICDvu78gIO+7vyAg77u/ICAgLy8gRElTQ1VTUzogT0ssIHdoYXQgZG8gd2Ugd2FudCB0 byBkbyBoZXJlIGlmIGtleUxlbiAhPSBrZXlTaXplPyBJZiB1c2Uga2V5TGVuLCBlbmNyeXB0aW9u CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gICAgICAgY291bGQgZmFpbCB3 aXRoIGFuIGV4Y2VwdGlvbiwgYnV0IHBlcmhhcHMgdGhhdCdzIHdoYXQgd2Ugd2FudC4gT3Igd2Ug bWF5IGp1c3QgYmUKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICAg T0sgd2l0aCBzaWxlbnRseSB1c2luZyBrZXlTaXplIGFzIGxvbmcgYXMga2V5U2l6ZSA+PSBrZXlM ZW4sIHdoaWNoIHRoZW4gaW50ZXJwcmV0cwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7 vyAg77u/ICDvu78gICBFU0FQSS5FbmNyeXB0aW9uS2V5TGVuZ3RoIGFzIHRoZSAqbWluaW11bSog a2V5IHNpemUsIGJ1dCBhcyBsb25nIGFzIHdlIGhhdmUgc29tZXRoaW5nCgkJCQkJCQkJICAg77u/ ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAgIHN0cm9uZ2VyIGl0J3MgT0sgdG8gdXNlIGl0 LiBGb3Igbm93LCBJIGFtIGp1c3QgZ29pbmcgdG8gbG9nIHdhcm5pbmcgaWYgZGlmZmVyZW50LCBi dXQgdXNlCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAgIGtleVNp emUgdW5sZXNzIGtleVNpemUgaXMgU01BTExFUiB0aGFuIEVTQVBJLkVuY3J5cHRpb25LZXlMZW5n dGgsIGluIHdoaWNoIGNhc2UgSSdtIGdvaW5nCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v 77u/ICDvu78gIO+7vyAgIHRvIGxvZyBhbiBlcnJvci4KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ ICAgLy8KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICAgSU1QT1JU QU5UIE5PVEU677u/ICBXaGVuIHdlIGdlbmVyYXRlIGtleSBzaXplcyBmb3IgYm90aCBERVMgYW5k IERFU2VkZSB0aGUgcmVzdWx0IG9mCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDv u78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIFNlY3JldEtleS5nZXRFbmNvZGluZygp Lmxlbmd0aCBpbmNsdWRlcyB0aGUgVFJVRSBrZXkgc2l6ZSAoaS5lLiwKCQkJCQkJCQkgICDvu78g IO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgKndp dGgqIHRoZSBldmVuIHBhcml0eSBiaXRzKSByYXRoZXIgdGhhbiB0aGUgRUZGRUNUSVZFIGtleSBz aXplCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78g IO+7vyAg77u/ICDvu78gICh3aGljaCBpbmNpZGVudGFsbHkgaXMgd2hhdCBLZXlHZW5lcmF0b3Iu aW5pdCgpIGV4cGVjdHMgZm9yIERFUwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg 77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICBhbmQgREVTZWRlOyBkdWghIE5vdGhp bmcgbGlrZSBiZWluZyBjb25zaXN0ZW50KS4gVGhpcyBsZWFkcyB0bwoJCQkJCQkJCSAgIO+7vyAg 77u/ICDvu78gICAvL++7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICB0aGUg Zm9sbG93aW5nIGRpbGVtbWE6CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8vCgkJCQkJCQkJ ICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDv u78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICBFRkZFQ1RJVkUgS2V5IFNpemXvu78gIO+7vyAg VFJVRSBLZXkgU2l6ZQoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78g IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgKEtleUdl bmVyYXRvci5pbml0KCkp77u/ICAoU2VjcmV0S2V5LmdldEVuY29kaW5nKCkubGVuZ3RoKQoJCQkJ CQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7 vyAg77u/ICDvu78gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgRm9yIERFUzrvu78gICAg IDU2IGJpdHPvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgICAgICAgICAgIDY0IGJpdHMKCQkJCQkJ CQkgICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78g IO+7vyAg77u/ICBGb3IgREVTZWRlOu+7vyAxMTIgYml0cyAvIDE2OCBiaXRz77u/ICDvu78gIDE5 MiBiaXRzIChhbHdheXMpCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8vCgkJCQkJCQkJICAg 77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78g IFdlIGFyZSB0cnlpbmcgdG8gYXV0b21hdGljYWxseSBkZXRlcm1pbmUgdGhlIGtleSBzaXplIGZy b20gU2VjcmV0S2V5CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAg 77u/ICDvu78gIO+7vyAg77u/ICDvu78gIGJhc2VkIG9uIDggKiBTZWNyZXRLZXkuZ2V0RW5jb2Rp bmcoKS5sZW5ndGgsIGJ1dCBhcyB5b3UgY2FuIHNlZSwgdGhlCgkJCQkJCQkJICAg77u/ICDvu78g IO+7vyAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIDIga2V5IDNE RVMgYW5kIHRoZSAzIGtleSAzREVTIGJvdGggdXNlIHRoZSBzYW1lIGtleSBzaXplICgxOTIgYml0 cykKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICDvu78gIO+7vyAg 77u/ICDvu78gIO+7vyAgcmVnYXJkbGVzcyBvZiB3aGF0IGlzIHBhc3NlZCB0byBLZXlHZW5lcmF0 b3IuaW5pdCgpLiBUaGVyZSBhcmUgbm8gYWR2ZXJ0aXNlZAoJCQkJCQkJCSAgIO+7vyAg77u/ICDv u78gICAvL++7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICBtZXRob2RzIHRv IGdldCB0aGUga2V5IHNpemUgc3BlY2lmaWVkIGJ5IHRoZSBpbml0KCkgbWV0aG9kIHNvIEknbSBu b3Qgc3VyZSBob3cKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICDv u78gIO+7vyAg77u/ICDvu78gIO+7vyAgdGhpcyBpcyBhY3R1YWxseSB3b3JraW5nIGludGVybmFs bHkuIEhvd2V2ZXIsIGl0IGRvZXMgcHJlc2VudCBhIHByb2JsZW0gaWYgd2UKCQkJCQkJCQkgICDv u78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg d2lzaCB0byBjb21tdW5pY2F0ZSB0aGUgM0RFUyBrZXkgc2l6ZSB0byBhIHJlY2lwaWVudCBmb3Ig bGF0ZXIgZGVjcnlwdGlvbiBhcwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICB0aGV5IHdvdWxkIG5vdCBiZSBhYmxlIHRv IGRpc3Rpbmd1aXNoIDIga2V5IDNERVMgZnJvbSAzIGtleSAzREVTLgoJCQkJCQkJCSAgIO+7vyAg 77u/ICDvu78gICAvLwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78g IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICBUaGUgb25seSB3b3JrYXJvdW5kIEkga25vdyBpcyB0 byBwYXNzIHRoZSBleHBsaWNpdCBrZXkgc2l6ZSBkb3duLiBIb3dldmVyLCBpZgoJCQkJCQkJCSAg IO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ ICB3ZSBhcmUgZ29pbmcgdG8gZG8gdGhhdCwgSSdkIHByb3Bvc2UgcGFzc2luZyBpbiBhIENpcGhl clNwZWMgb2JqZWN0IHNvIHdlIGNvdWxkCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIHRlbGwgd2hhdCBjaXBoZXIgdHJh bnNmb3JtYXRpb24gdG8gdXNlIGFzIHdlbGwgaW5zdGVhZCBvZiBqdXN0IHRoZSBrZXkgc2l6ZS4g VGhlbgoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78gIO+7vyAg77u/ ICDvu78gIO+7vyAg77u/ICB3ZSB3b3VsZCBleHRyYWN0IGtleVNpemUgZnJvbSB0aGUgQ2lwaGVy U3BlYyBvYmplY3Qgb2YgZnJvbSB0aGUgU2VjcmV0S2V5IG9iamVjdC4KCQkJCQkJCQkgICDvu78g IO+7vyAg77u/ICAgLy8KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgaWYgKCBrZXlTaXplICE9 IGtleUxlbiApIHsKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICDvu78gICAvLyBESVNDVVNTOiBU ZWNobmljYWxseSB0aGlzIGlzIG5vdCBhIHNlY3VyaXR5ICJmYWlsdXJlIiBwZXIgc2UsIGJ1dCBu b3QgcmVhbGx5IGEgInN1Y2Nlc3MiIGVpdGhlci4KCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7 vyAg77u/ICAgbG9nZ2VyLndhcm5pbmcoTG9nZ2VyLlNFQ1VSSVRZX0ZBSUxVUkUsICJFbmNyeXB0 aW9uIGtleSBsZW5ndGggbWlzbWF0Y2guIEVTQVBJLkVuY3J5cHRpb25LZXlMZW5ndGggaXMgIiAr CgkJCQkJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICBrZXlMZW4g KyAiIGJpdHMsIGJ1dCBsZW5ndGggb2YgYWN0dWFsIGVuY3J5cHRpb24ga2V5IGlzICIgKyBrZXlT aXplICsKCQkJCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg77u/ICAg77u/ICDvu78gICIg Yml0cy4gIERpZCB5b3UgcmVtZW1iZXIgdG8gcmVnZW5lcmF0ZSB5b3VyIG1hc3RlciBrZXkgKGlm IHRoYXQgaXMgd2hhdCB5b3UgYXJlIHVzaW5nKT8/PyIpOwoJCQkJCQkJCSAgIO+7vyAg77u/ICDv u78gICB9CgkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAgIC8vIERJU0NVU1M6IFJlY29uc2lk ZXIgdGhlc2Ugd2FybmluZ3MuIElmIHRob3VzYW5kcyBvZiBlbmNyeXB0aW9ucyBhcmUgZG9uZSBp biB0aWdodCBsb29wLCBubyBvbmUgbmVlZHMKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy8g ICAgICAgICAgbW9yZSB0aGFuIDEgd2FybmluZy4gU2hvdWxkIHdlIGRvIHNvbWV0aGluZyBtb3Jl IGludGVsbGlnZW50IGhlcmU/CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIGlmICgga2V5U2l6 ZSA8IGtleUxlbiApIHsKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICDvu78gICAvLyBFU0FQSS5F bmNyeXB0aW9uS2V5TGVuZ3RoIGRlZmF1bHRzIHRvIDEyOCwgYnV0IHRoYXQgbWVhbnMgdGhhdCB3 ZSBjb3VsZCBub3QgdXNlIERFUyAoYXMgd2VhayBhcyBpdAoJCQkJCQkJCSAgICAgICDvu78gIO+7 vyAg77u/ICDvu78gICAvLyBpcyksIGV2ZW4gZm9yIGxlZ2FjeSBjb2RlLiBUaGVyZWZvcmUsIHRo aXMgaGFzIGJlZW4gY2hhbmdlZCB0byBzaW1wbGUgbG9nIGEgd2FybmluZyByYXRoZXIgdGhhbgoJ CQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78gICAvL++7vyAgdGhyb3cgdGhlIGZvbGxv d2luZyBleGNlcHRpb24uCgkJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gIO+7vyAgIC8v77u/ ICDvu78gIO+7vyAg77u/ICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FeGNlcHRpb24oIkFjdHVh bCBrZXkgc2l6ZSBvZiAiICsga2V5U2l6ZSArICIgYml0cyBzbWFsbGVyIHRoYW4gc3BlY2lmaWVk ICIgKwoJCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78g IO+7vyAg77u/ICDvu78gICAgImVuY3J5cHRpb24ga2V5IGxlbmd0aCAoRVNBUEkuRW5jcnlwdGlv bktleUxlbmd0aCkgb2YgIiArIGtleUxlbiArICIgYml0cy4iKTsKCQkJCQkJCQkgICAgICAg77u/ ICDvu78gIO+7vyAg77u/ICAgbG9nZ2VyLndhcm5pbmcoTG9nZ2VyLlNFQ1VSSVRZX0ZBSUxVUkUs ICJBY3R1YWwga2V5IHNpemUgb2YgIiArIGtleVNpemUgKyAiIGJpdHMgU01BTExFUiBUSEFOIHNw ZWNpZmllZCAiICsKCQkJCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7 vyAgICJlbmNyeXB0aW9uIGtleSBsZW5ndGggKEVTQVBJLkVuY3J5cHRpb25LZXlMZW5ndGgpIG9m ICIgKyBrZXlMZW4gKyAiIGJpdHMgd2l0aCBjaXBoZXIgYWxnb3JpdGhtICIgKyBjaXBoZXJBbGcp OwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICB9CgkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7 vyAgIGlmICgga2V5U2l6ZSA8IDExMiApIHvvu78gIO+7vyAgLy8gTklTVCBTcGVjaWFsIFB1YiA4 MDAtNTcgY29uc2lkZXJzIDExMi1iaXRzIHRvIGJlIHRoZSBtaW5pbWFsbHkgc2FmZSBrZXkgc2l6 ZSBmcm9tIDIwMTAtMjAzMC4KCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg77u/ICAgLy8g Tm90ZSB0aGF0IDExMiBiaXRzICdqdXN0IGhhcHBlbnMnIHRvIGJlIHNpemUgb2YgMi1rZXkgVHJp cGxlIERFUyEKCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg77u/ICAgbG9nZ2VyLndhcm5p bmcoTG9nZ2VyLlNFQ1VSSVRZX0ZBSUxVUkUsICJQb3RlbnRpYWxseSB1bnNlY3VyZSBlbmNyeXB0 aW9uLiBLZXkgc2l6ZSBvZiAiICsga2V5U2l6ZSArICJiaXRzICIgKwoJCQkJCQkJCQkJCSAgICAg ICAibm90IHN1ZmZpY2llbnRseSBsb25nIGZvciAiICsgY2lwaGVyQWxnICsgIi4gU2hvdWxkIHVz ZSBhcHByb3ByaWF0ZSBhbGdvcml0aG0gd2l0aCBrZXkgc2l6ZSAiICsKCQkJCQkJCQkJCQkgICAg ICAgIm9mICphdCBsZWFzdCogMTEyIGJpdHMgZXhjZXB0IHdoZW4gcmVxdWlyZWQgYnkgbGVnYWN5 IGFwcHMuIFNlZSBOSVNUIFNwZWNpYWwgUHViIDgwMC01Ny4iKTsKCQkJCQkJCQkgICDvu78gIO+7 vyAg77u/ICAgfQoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICAvLyBDaGVjayBpZiBhbGdv cml0aG0gbWVudGlvbmVkIGluIFNlY3JldEtleSBpcyBzYW1lIGFzIHRoYXQgYmVpbmcgdXNlZCBm b3IgQ2lwaGVyIG9iamVjdC4KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy8gVGhleSBzaG91 bGQgYmUgdGhlIHNhbWUuIElmIHRoZXkgYXJlIGRpZmZlcmVudCwgdGhpbmdzIGNvdWxkIGZhaWwu IChFLmcuLCBERVMgYW5kIERFU2VkZQoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvLyByZXF1 aXJlIGtleXMgd2l0aCBldmVuIHBhcml0eS4gRXZlbiBpZiBrZXkgd2FzIHN1ZmZpY2llbnQgc2l6 ZSwgaWYgaXQgZGlkbid0IGhhdmUgdGhlIGNvcnJlY3QKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ ICAgLy8gcGFyaXR5IGl0IGNvdWxkIGZhaWwuKQoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAv LwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICBTdHJpbmcgc2tleUFsZyA9IGtleS5nZXRBbGdv cml0aG0oKTsKCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICAgaWYgKCAhKCBjaXBoZXJBbGcu c3RhcnRzV2l0aCggc2tleUFsZyArICIvIiApIHx8IGNpcGhlckFsZy5lcXVhbHMoIHNrZXlBbGcg KSApICkgewoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gIO+7vyAgIC8vIERJU0NVU1M6IFNob3Vs ZCB3ZSB0aHJvd24gYSBDb25maWd1cmF0aW9uRXhjZXB0aW9uIGhlcmUgb3IganVzdCBsb2cgYSB3 YXJuaW5nPz8/IEknbSBnYW1lIGZvcgoJCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78g ICAvL++7vyAg77u/ICDvu78gICBlaXRoZXIsIGJ1dCBwZXJzb25hbGx5IEknZCBwcmVmZXIgdGhl IHNxdWVha3kgd2hlZWwgdG8gdGhlIGFubm95aW5nIHRocm93aW5nIG9mCgkJCQkJCQkJICAgICAg IO+7vyAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAgIGEgQ29uZmlndXJhdGlvbkV4 Y2VwdGlvbiAod2hpY2ggaXMgYSBSdW50aW1lRXhjZXB0aW9uKS4gTGVzcyBsaWtlbHkgdG8gdXBz ZXQKCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICAg dGhlIGRldmVsb3BtZW50IGNvbW11bml0eS4KCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg 77u/ICAgbG9nZ2VyLndhcm5pbmcoTG9nZ2VyLlNFQ1VSSVRZX0ZBSUxVUkUsICJFbmNyeXB0aW9u IG1pc21hdGNoIGJldHdlZW4gY2lwaGVyIGFsZ29yaXRobSAoIiArCgkJCQkJCQkJCQkJICAgICAg IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICBjaXBoZXJBbGcgKyAiKSBhbmQgU2VjcmV0 S2V5IGFsZ29yaXRobSAoIiArIHNrZXlBbGcgKyAiKS4gQ2lwaGVyIHdpbGwgdXNlIGFsZ29yaXRo bSAiICsgY2lwaGVyQWxnKTsKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgfQoKCQkJCQkJCSAg ICAgICDvu78gIO+7vyAg77u/ICAgYnl0ZVtdIGl2Qnl0ZXMgPSBudWxsOwoJCQkJCQkJICAgICAg IO+7vyAg77u/ICDvu78gICBDaXBoZXJTcGVjIGNpcGhlclNwZWMgPSBuZXcgQ2lwaGVyU3BlYyhl bmNyeXB0ZXIsIGtleVNpemUpO++7vyAgLy8gQ291bGQgcGFzcyB0aGUgQUNUVUFMIChpbnRlbmRl ZCkga2V5IHNpemUKCQkJCQkJCQkJCQkJCQkJCSAgICAg77u/ICDvu78gIO+7vyAgIAoJCQkJCQkJ CQkJCQkJCQkJICAgICAvLyBVc2luZyBjaXBoZXIgbW9kZSB0aGF0IHN1cHBvcnRzICpib3RoKiBj b25maWRlbnRpYWxpdHkgKmFuZCogYXV0aGVudGljaXR5PyBJZiBzbywgdGhlbgoJCQkJCQkJCQkJ CQkJCQkJICAgICAvLyB1c2UgdGhlIHNwZWNpZmllZCBTZWNyZXRLZXkgYXMtaXMgcmF0aGVyIHRo YW4gY29tcHV0aW5nIGEgZGVyaXZlZCBrZXkgZnJvbSBpdC4gV2UgYWxzbwoJCQkJCQkJCQkJCQkJ CQkJICAgICAvLyBkb24ndCBleHBlY3QgYSBzZXBhcmF0ZSBNQUMgaW4gdGhlIHNwZWNpZmllZCBD aXBoZXJUZXh0IG9iamVjdCBzbyB0aGVyZWZvcmUgZG9uJ3QgdHJ5CgkJCQkJCQkJCQkJCQkJCQkg ICAgIC8vIHRvIHZhbGlkYXRlIGl0LgoJCQkJCQkJCQkJCQkJCQkJICAgICBib29sZWFuIHByZWZl cnJlZENpcGhlck1vZGUgPSBDcnlwdG9IZWxwZXIuaXNDb21iaW5lZENpcGhlck1vZGUoIGNpcGhl ck1vZGUgKTsKCQkJCQkJCSAgICAgICBTZWNyZXRLZXkgZW5jS2V5ID0gbnVsbDsKCQkJCQkJCSAg ICAgICBpZiAoIHByZWZlcnJlZENpcGhlck1vZGUgKSB7CgkJCQkJCQkJICAgZW5jS2V5ID0ga2V5 OwoJCQkJCQkJICAgICAgIH0gZWxzZSB7CgkJCQkJCQkJICAgZW5jS2V5ID0gY29tcHV0ZURlcml2 ZWRLZXkoS2V5RGVyaXZhdGlvbkZ1bmN0aW9uLmtkZlZlcnNpb24sIGdldERlZmF1bHRQUkYoKSwK CQkJCQkJCQkJCQkgICAgICBrZXksIGtleVNpemUsICJlbmNyeXB0aW9uIik7CgkJCQkJCQkgICAg ICAgfQoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICAKCQkJCQkJCQkgICBpZiAoIGNpcGhl clNwZWMucmVxdWlyZXNJVigpICkgewoJCQkJCQkJCSAgICAgICBTdHJpbmcgaXZUeXBlID0gRVNB UEkuc2VjdXJpdHlDb25maWd1cmF0aW9uKCkuZ2V0SVZUeXBlKCk7CgkJCQkJCQkJICAgICAgIEl2 UGFyYW1ldGVyU3BlYyBpdlNwZWMgPSBudWxsOwoJCQkJCQkJCSAgICAgICBpZiAoIGl2VHlwZS5l cXVhbHNJZ25vcmVDYXNlKCJyYW5kb20iKSApIHsKCQkJCQkJCQkJICAgaXZCeXRlcyA9IEVTQVBJ LnJhbmRvbWl6ZXIoKS5nZXRSYW5kb21CeXRlcyhlbmNyeXB0ZXIuZ2V0QmxvY2tTaXplKCkpOwoJ CQkJCQkJCQkgICDvu78gICAgICAgICAgfSBlbHNlIGlmICggaXZUeXBlLmVxdWFsc0lnbm9yZUNh c2UoImZpeGVkIikgKSB7CgkJCQkJCQkJCSAgIFN0cmluZyBmaXhlZElWQXNIZXggPSBFU0FQSS5z ZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRGaXhlZElWKCk7CgkJCQkJCQkJCSAgIGl2Qnl0ZXMg PSBIZXguZGVjb2RlKGZpeGVkSVZBc0hleCk7CgkJCQkJCQkJCSAgIC8qIEZVVFVSRe+7vyAg77u/ ICAgfSBlbHNlIGlmICggaXZUeXBlLmVxdWFsc0lnbm9yZUNhc2UoInNwZWNpZmllZCIpKSB7CgkJ CQkJCQkJCSAgIC8vIEZVVFVSRSAtIFRPRE8gIC0gQ3JlYXRlIGluc3RhbmNlIG9mIHNwZWNpZmll ZCBjbGFzcyB0byB1c2UgZm9yIElWIGdlbmVyYXRpb24gYW5kCgkJCQkJCQkJCSAgIC8v77u/ICDv u78gIO+7vyAg77u/ICDvu78gICB1c2UgaXQgdG8gY3JlYXRlIHRoZSBpdkJ5dGVzLiAoVGhlIGlu dGVudCBpcyB0byBtYWtlIHN1cmUgdGhhdAoJCQkJCQkJCQkgICAvL++7vyAg77u/ICDvu78gIO+7 vyAgICAgICAxKSBJVnMgYXJlIG5ldmVyIHJlcGVhdGVkIGZvciBjaXBoZXIgbW9kZXMgbGlrZSBP RkIgYW5kIENGQiwgYW5kCgkJCQkJCQkJCSAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAy KSB0byBzY3JlZW4gZm9yIHdlYWsgSVZzIGZvciB0aGUgcGFydGljdWxhciBjaXBoZXIgYWxnb3Jp dGhtLgoJCQkJCQkJCQkgICAvL++7vyAg77u/ICBJbiBtZWFudGltZSwgdXNlICdyYW5kb20nIGZv ciBibG9jayBjaXBoZXIgaW4gZmVlZGJhY2sgbW9kZS4gVW5saWtlbHkgdGhleSB3aWxsCgkJCQkJ CQkJCSAgIC8v77u/ICDvu78gIGJlIHJlcGVhdGVkIHVubGVzcyB5b3UgYXJlIHNhbHRpbmcgU2Vj dXJlUmFuZG9tIHdpdGggc2FtZSB2YWx1ZSBlYWNoIHRpbWUuIEFueXRoaW5nCgkJCQkJCQkJCSAg IC8v77u/ICDvu78gIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBzaG91bGQgYmUgc3VpdGFibGUs IGxpa2UgYSBjb3VudGVyLCBidXQgbmVlZCB0byByZW1lbWJlcgoJCQkJCQkJCQkgICDvu78gIO+7 vyAg77u/ICDvu78gIO+7vyAgIO+7vyAg77u/ICAvL++7vyAg77u/ICBpdCBhY3Jvc3MgSlZNIHJl c3RhcnRzLiBXYXMgdGhpbmtpbmcgb2YgdXNpbmcgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCku IFdoaWxlCgkJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICAg77u/ICDvu78gIC8v 77u/ICDvu78gIGl0J3Mgbm90IHBlcmZlY3QgaXQgcHJvYmFibHkgaXMgZ29vZCBlbm91Z2guIENv dWxkIGV2ZW4gYWxsIChhZHZhbmNlZCkgZGV2ZWxvcGVycwoJCQkJCQkJCQkgICDvu78gIO+7vyAg 77u/ICDvu78gIO+7vyAgIO+7vyAg77u/ICAvLyAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gY2xh c3MgdG8gY3JlYXRlIGEgdW5pcXVlIElWIHRvIGFsbG93IHRoZW0gc29tZSBjaG9pY2UsIGJ1dAoJ CQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgIO+7vyAg77u/ICAvLyAgICAgIGRl ZmluaXRlbHkgbmVlZCB0byBwcm92aWRlIGEgc2FmZSwgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4K CQkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAgKi8KCQkJCQkJCQkJICAg77u/ ICDvu78gIO+7vyAg77u/ICAgfSBlbHNlIHsKCQkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAg77u/ ICDvu78gICAvLyBUT0RPOiBVcGRhdGUgdG8gYWRkICdzcGVjaWZpZWQnIG9uY2UgdGhhdCBpcyBz dXBwb3J0ZWQgYW5kIGFkZGVkIGFib3ZlLgoJCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg 77u/ICDvu78gICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigiUHJvcGVydHkgRW5j cnlwdG9yLkNob29zZUlWTWV0aG9kIG11c3QgYmUgc2V0IHRvICdyYW5kb20nIG9yICdmaXhlZCci KTsKCQkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAg77u/ICAgfQoJCQkJCQkJCSAgICAgICDvu78g IO+7vyAg77u/ICDvu78gICBpdlNwZWMgPSBuZXcgSXZQYXJhbWV0ZXJTcGVjKGl2Qnl0ZXMpOwoJ CQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78gICBjaXBoZXJTcGVjLnNldElWKGl2Qnl0 ZXMpOwoJCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78gICBlbmNyeXB0ZXIuaW5pdChD aXBoZXIuRU5DUllQVF9NT0RFLCBlbmNLZXksIGl2U3BlYyk7CgkJCQkJCQkJICAgICAgIO+7vyAg 77u/ICDvu78gICB9IGVsc2UgewoJCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78gICBl bmNyeXB0ZXIuaW5pdChDaXBoZXIuRU5DUllQVF9NT0RFLCBlbmNLZXkpOwoJCQkJCQkJCSAgICAg ICDvu78gIO+7vyAg77u/ICAgfQoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICBsb2dnZXIu ZGVidWcoTG9nZ2VyLkVWRU5UX1NVQ0NFU1MsICJFbmNyeXB0aW5nIHdpdGggIiArIGNpcGhlclNw ZWMpOwoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICBieXRlW10gcmF3ID0gZW5jcnlwdGVy LmRvRmluYWwocGxhaW50ZXh0KTsKCQkJCQkJCSAgICAgICAvLyBDb252ZXJ0IHRvIENpcGhlclRl eHQuCgkJCQkJCQkgICAgICAgQ2lwaGVyVGV4dCBjaXBoZXJ0ZXh0ID0gbmV3IENpcGhlclRleHQo Y2lwaGVyU3BlYywgcmF3KTsKCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICAgCgkJCQkJCQkJ ICAg77u/ICDvu78gIO+7vyAgIC8vIElmIHdlIGFyZSB1c2luZyBhICJwcmVmZXJyZWQiIGNpcGhl ciBtb2RlLS1pLmUuLCBvbmUgdGhhdCBzdXBwb3J0cyAqYm90aCogY29uZmlkZW50aWFsaXR5IGFu ZAoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvLyBhdXRoZW50aWNpdHksIHRoZXJlIGlzIG5v IHBvaW50IHRvIHN0b3JlIGEgc2VwYXJhdGUgTUFDIGluIHRoZSBDaXBoZXJUZXh0IG9iamVjdC4g VGh1cyB3ZSBvbmx5CgkJCQkJCQkJICAgLy8gZG8gdGhpcyB3aGVuIHdlIGFyZSBub3QgdXNpbmcg c3VjaCBhIGNpcGhlciBtb2RlLgoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICBpZiAoICFwcmVm ZXJyZWRDaXBoZXJNb2RlICkgewoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAgICAgLy8gQ29t cHV0ZSBkZXJpdmVkIGtleSwgYW5kIHRoZW4gdXNlIGl0IHRvIGNvbXB1dGUgYW5kIHN0b3JlIHNl cGFyYXRlIE1BQyBpbiBDaXBoZXJUZXh0IG9iamVjdC4KCQkJCQkJCQkgICAgICAg77u/ICDvu78g IO+7vyAgICAgICBTZWNyZXRLZXkgYXV0aEtleSA9IGNvbXB1dGVEZXJpdmVkS2V5KEtleURlcml2 YXRpb25GdW5jdGlvbi5rZGZWZXJzaW9uLCBnZXREZWZhdWx0UFJGKCksCgkJCQkJCQkJCQkJCQkJ Ce+7vyAg77u/ICDvu78gICAgICDvu78gIO+7vyAgIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDv u78gIO+7vyAgICAga2V5LCBrZXlTaXplLCAiYXV0aGVudGljaXR5Iik7CgkJCQkJCQkJICAg77u/ ICDvu78gIO+7vyAgICAgICBjaXBoZXJ0ZXh0LmNvbXB1dGVBbmRTdG9yZU1BQyggIGF1dGhLZXkg KTsKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgfQoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDv u78gICBsb2dnZXIuZGVidWcoTG9nZ2VyLkVWRU5UX1NVQ0NFU1MsICJKYXZhRW5jcnlwdG9yLmVu Y3J5cHQoU2VjcmV0S2V5LGJ5dGVbXSxib29sZWFuLGJvb2xlYW4pIC0tIHN1Y2Nlc3MhIik7CgkJ CQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAgIHN1Y2Nlc3MgPSB0cnVlO++7vyAgLy8gVzAwdCEh IQoJCQkJCQkJCQkJCSDvu78gIO+7vyAg77u/ICAgcmV0dXJuIGNpcGhlcnRleHQ7CgkJCQkJCQkg ICAgICAg77u/ICDvu78gIH0gY2F0Y2ggKEludmFsaWRLZXlFeGNlcHRpb24gaWtlKSB7CgkJCQkJ CQkgICAgICAg77u/ICDvu78gIO+7vyAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKCJF bmNyeXB0aW9uIGZhaWx1cmU6IEludmFsaWQga2V5IGV4Y2VwdGlvbi4iLAoJCQkJCQkJCQkJCQkg ICAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAiUmVxdWVzdGVkIGtleSBzaXplOiAiICsga2V5 U2l6ZSArICJiaXRzIGdyZWF0ZXIgdGhhbiAxMjggYml0cy4gTXVzdCBpbnN0YWxsIHVubGltaXRl ZCBzdHJlbmd0aCBjcnlwdG8gZXh0ZW5zaW9uIGZyb20gU3VuOiAiICsKCQkJCQkJCQkJCQkJICAg IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICAgaWtlLmdldE1lc3NhZ2UoKSwgaWtlKTsKCQkJCQkJ CSAgICAgICDvu78gIO+7vyAgIH0gY2F0Y2ggKENvbmZpZ3VyYXRpb25FeGNlcHRpb24gY2V4KSB7 CgkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0 aW9uKCJFbmNyeXB0aW9uIGZhaWx1cmU6IENvbmZpZ3VyYXRpb24gZXJyb3IuIERldGFpbHMgaW4g bG9nLiIsICJLZXkgc2l6ZSBtaXNtYXRjaCBvciB1bnN1cHBvcnRlZCBJViBtZXRob2QuICIgKwoJ CQkJCQkJCQkJCQkgICAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAiQ2hlY2sgZW5jcnlwdGlv biBrZXkgc2l6ZSB2cy4gRVNBUEkuRW5jcnlwdGlvbktleUxlbmd0aCBvciBFbmNyeXB0b3IuQ2hv b3NlSVZNZXRob2QgcHJvcGVydHkuIiwgY2V4KTsKCQkJCQkJCSAgICAgICDvu78gIO+7vyAgIH0g Y2F0Y2ggKEludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb24gZSkgewoJCQkJCQkJICAg ICAgIO+7vyAg77u/ICDvu78gICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbigiRW5jcnlw dGlvbiBmYWlsdXJlIChpbnZhbGlkIElWKSIsCgkJCQkJCQkJCQkJCSAgICDvu78gIO+7vyAg77u/ ICDvu78gIO+7vyAgICJFbmNyeXB0aW9uIHByb2JsZW06IEludmFsaWQgSVYgc3BlYzogIiArIGUu Z2V0TWVzc2FnZSgpLCBlKTsKCQkJCQkJCSAgICAgICDvu78gIO+7vyAgIH0gY2F0Y2ggKElsbGVn YWxCbG9ja1NpemVFeGNlcHRpb24gZSkgewoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICB0 aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbigiRW5jcnlwdGlvbiBmYWlsdXJlIChubyBwYWRk aW5nIHVzZWQ7IGludmFsaWQgaW5wdXQgc2l6ZSkiLAoJCQkJCQkJCQkJCQkgICAg77u/ICDvu78g IO+7vyAg77u/ICDvu78gICAiRW5jcnlwdGlvbiBwcm9ibGVtOiBJbnZhbGlkIGlucHV0IHNpemUg d2l0aG91dCBwYWRkaW5nICgiICsgeGZvcm0gKyAiKS4gIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsK CQkJCQkJCSAgICAgICDvu78gIO+7vyAgIH0gY2F0Y2ggKEJhZFBhZGRpbmdFeGNlcHRpb24gZSkg ewoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2Vw dGlvbigiRW5jcnlwdGlvbiBmYWlsdXJlIiwKCQkJCQkJCQkJCQkJICAgIO+7vyAg77u/ICDvu78g IO+7vyAg77u/ICAgIltOb3RlOiBTaG91bGQgTkVWRVIgaGFwcGVuIGluIGVuY3J5cHRpb24gbW9k ZS5dIEVuY3J5cHRpb24gcHJvYmxlbTogIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKCQkJCQkJCSAg ICAgICDvu78gIO+7vyAgIH0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlKSB7CgkJ CQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9u KCJFbmNyeXB0aW9uIGZhaWx1cmUgKHVuYXZhaWxhYmxlIGNpcGhlciByZXF1ZXN0ZWQpIiwKCQkJ CQkJCQkJCQkJICAgIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICAgIkVuY3J5cHRpb24gcHJvYmxl bTogc3BlY2lmaWVkIGFsZ29yaXRobSBpbiBjaXBoZXIgeGZvcm0gIiArIHhmb3JtICsgIiBub3Qg YXZhaWxhYmxlOiAiICsgZS5nZXRNZXNzYWdlKCksIGUpOwoJCQkJCQkJICAgICAgIO+7vyAg77u/ ICAgfSBjYXRjaCAoTm9TdWNoUGFkZGluZ0V4Y2VwdGlvbiBlKSB7CgkJCQkJCQkgICAgICAg77u/ ICDvu78gIO+7vyAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKCJFbmNyeXB0aW9uIGZh aWx1cmUgKHVuYXZhaWxhYmxlIHBhZGRpbmcgc2NoZW1lIHJlcXVlc3RlZCkiLAoJCQkJCQkJCQkJ CQkgICAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAiRW5jcnlwdGlvbiBwcm9ibGVtOiBzcGVj aWZpZWQgcGFkZGluZyBzY2hlbWUgaW4gY2lwaGVyIHhmb3JtICIgKyB4Zm9ybSArICIgbm90IGF2 YWlsYWJsZTogIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKCQkJCQkJCSAgICAgICDvu78gIO+7vyAg IH0gZmluYWxseSB7CgkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAgIC8vIERvbid0IG92ZXJ3 cml0ZSBhbnl0aGluZyBpbiB0aGUgY2FzZSBvZiBleGNlcHRpb25zIGJlY2F1c2UgdGhleSBtYXkg d2lzaCB0byByZXRyeS4KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgaWYgKCBzdWNjZXNzICYm IG92ZXJ3cml0ZVBsYWludGV4dCApIHsKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICDvu78gICBw bGFpbi5vdmVyd3JpdGUoKTvvu78gIO+7vyAgLy8gTm90ZTogU2FtZSBhcyBvdmVyd3JpdGluZyAn cGxhaW50ZXh0JyBieXRlIGFycmF5LgoJCQkJCQkJCQkJCQkgIO+7vyAg77u/ICB9CgkJCQkJCQkg ICAgICAg77u/ICB9Cgnvu78gICB9CgogICAg77u/ICAvKioKCSDvu78gICAgKiBDb252ZW5pZW5j ZSBtZXRob2QgdGhhdCBkZWNyeXB0cyBwcmV2aW91c2x5IGVuY3J5cHRlZCBwbGFpbnRleHQgc3Ry aW5ncwoJIO+7vyAgICAqIHRoYXQgd2VyZSBlbmNyeXB0ZWQgdXNpbmcgdGhlIG5ldyBlbmNyeXB0 aW9uIG1lY2hhbmlzbSAod2l0aCBDQkMgbW9kZSBhbmQKCSDvu78gICAgKiBQS0NTNSBwYWRkaW5n IGJ5IGRlZmF1bHQpLiAgVGhpcyBkZWNyeXB0aW9uIG1ldGhvZCB1c2VzIHRoZSBtYXN0ZXIKCSDv u78gICAgKiBlbmNyeXB0aW9uIGtleSBzcGVjaWZpZWQgYnkgdGhlIHtAY29kZSBFbmNyeXB0b3Iu TWFzdGVyS2V5fSBwcm9wZXJ0eQoJIO+7vyAgICAqIGluIHtAY29kZSBFU0FQSS5wcm9wZXJ0aWVz fS4KCSDvu78gICAgKgoJIO+7vyAgICAqIEBwYXJhbSBiNjRJVkNpcGhlcnRleHTvu78gIEEgYmFz ZTY0LWVuY29kZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlCgkg77u/ICAgICog77u/ICDvu78gIO+7 vyAg77u/ICDvu78gIO+7vyAg77u/ICBJViArIHJhdyBjaXBoZXJ0ZXh0IHN0cmluZyB0byBiZSBk ZWNyeXB0ZWQgd2l0aAoJIO+7vyAgICAqIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7 vyAgdGhlIGRlZmF1bHQgbWFzdGVyIGtleS4KCSDvu78gICAgKiBAcmV0dXJu77u/ICBUaGUgcGxh aW50ZXh0IHN0cmluZyBwcmlvciB0byBlbmNyeXB0aW9uLgoJIO+7vyAgICAqIEB0aHJvd3MgRW5j cnlwdGlvbkV4Y2VwdGlvbiBXaGVuIHNvbWV0aGluZyBmYWlscyB3aXRoIHRoZSBkZWNyeXB0aW9u LgoJIO+7vyAgICAqCgkg77u/ICAgICogQHNlZSBvcmcub3dhc3AuZXNhcGkuRW5jcnlwdG9yI2Rl Y3J5cHQoQ2lwaGVyVGV4dCkKCSDvu78gICAgKi8KCe+7vyAgIEBEZXByZWNhdGVkIHB1YmxpYyBT dHJpbmcgZGVjcnlwdChTdHJpbmcgYjY0SVZDaXBoZXJ0ZXh0KSB0aHJvd3MgRW5jcnlwdGlvbkV4 Y2VwdGlvbgoJCQkJCQkJCQkgICAg77u/ICAgewoJ77u/ICAgICAgIGxvZ1dhcm5pbmcoImRlY3J5 cHQiLCAiQ2FsbGluZyBkZXByZWNhdGVkIGRlY3J5cHQoKSBtZXRob2QuIik7Cgnvu78gIO+7vyAg IENpcGhlclRleHQgY3QgPSBudWxsOwoJ77u/ICDvu78gICB0cnkgewoJICAgIO+7vyAg77u/ICDv u78gICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgZGVmYXVsdCBjaXBoZXIgdHJhbnNmb3JtIHdhcyB1 c2VkIHRvIGVuY3J5cHQgdGhpcy4KCQnvu78gIO+7vyAg77u/ICAgY3QgPSBuZXcgQ2lwaGVyVGV4 dCgpOwoKCSAgICDvu78gIO+7vyAg77u/ICAgLy8gTmVlZCB0byBiYXNlNjQgZGVjb2RlIHRoZSBJ VitjaXBoZXJ0ZXh0IGFuZCBleHRyYWN0IHRoZSBJViB0byBzZXQgaXQgaW4gQ2lwaGVyVGV4dCBv YmplY3QuCgkJ77u/ICDvu78gIO+7vyAgIGJ5dGVbXSBpdlBsdXNSYXdDaXBoZXJUZXh0ID0gRVNB UEkuZW5jb2RlcigpLmRlY29kZUZyb21CYXNlNjQoYjY0SVZDaXBoZXJ0ZXh0KTsKCSAgICDvu78g IO+7vyAg77u/ICAgaW50IGJsb2NrU2l6ZSA9IGN0LmdldEJsb2NrU2l6ZSgpO++7vyAgLy8gU2l6 ZSBpbiBieXRlcy4KCQkJCQkJCSDvu78gIO+7vyAg77u/ICAgYnl0ZVtdIGl2ID0gbmV3IGJ5dGVb IGJsb2NrU2l6ZSBdOwoJICAgIO+7vyAg77u/ICDvu78gICBDcnlwdG9IZWxwZXIuY29weUJ5dGVB cnJheShpdlBsdXNSYXdDaXBoZXJUZXh0LCBpdiwgYmxvY2tTaXplKTvvu78gIC8vIENvcHkgdGhl IGZpcnN0IGJsb2NrU2l6ZSBieXRlcyBpbnRvIGl2IGFycmF5CgkJCQkJCQkJCQkgICAgICDvu78g IO+7vyAg77u/ICAgaW50IGNpcGhlclRleHRTaXplID0gaXZQbHVzUmF3Q2lwaGVyVGV4dC5sZW5n dGggLSBibG9ja1NpemU7CgkgICAg77u/ICDvu78gIO+7vyAgIGJ5dGVbXSByYXdDaXBoZXJUZXh0 ID0gbmV3IGJ5dGVbIGNpcGhlclRleHRTaXplIF07CgkgICAg77u/ICDvu78gIO+7vyAgIFN5c3Rl bS5hcnJheWNvcHkoaXZQbHVzUmF3Q2lwaGVyVGV4dCwgYmxvY2tTaXplLCByYXdDaXBoZXJUZXh0 LCAwLCBjaXBoZXJUZXh0U2l6ZSk7CgkgICAg77u/ICDvu78gIO+7vyAgIGN0LnNldElWYW5kQ2lw aGVydGV4dChpdiwgcmF3Q2lwaGVyVGV4dCk7CgoJICAgIO+7vyAg77u/ICDvu78gICAvLyBOb3cg dGhlIENpcGhlclRleHQgb2JqZWN0IHNob3VsZCBiZSBwcmVwYXJlZCB0byB1c2UgaXQgdG8gZGVj cnlwdC4KCQnvu78gIO+7vyAg77u/ICAgUGxhaW5UZXh0IHBsYWludGV4dCA9IGRlY3J5cHQoY3Qp OwoJICAgIO+7vyAg77u/ICDvu78gICByZXR1cm4gcGxhaW50ZXh0LnRvU3RyaW5nKCk777u/ICAv LyBDb252ZXJ0IGJhY2sgdG8gYSBKYXZhIFN0cmluZwoJCQkJCQkgICDvu78gIO+7vyAgIH0gY2F0 Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewoJICAgIO+7vyAg77u/ICDvu78g ICAvLyBTaG91bGQgbmV2ZXIgaGFwcGVuOyBVVEYtOCBzaG91bGQgYmUgaW4gcnQuamFyLgoJCe+7 vyAg77u/ICDvu78gICBsb2dnZXIuZXJyb3IoTG9nZ2VyLlNFQ1VSSVRZX0ZBSUxVUkUsICJVVEYt OCBlbmNvZGluZyBub3QgYXZhaWxhYmxlISBEZWNyeXB0aW9uIGZhaWxlZC4iLCBlKTsKCSAgICDv u78gIO+7vyAg77u/ICAgcmV0dXJuIG51bGw777u/ICAvLyBDSEVDS01FOiBPciByZS10aHJvdyBv ciB3aGF0PyBDb3VsZCBhbHNvIHVzZSBuYXRpdmUgZW5jb2RpbmcsIGJ1dCB0aGF0J3MKCQkJCSAg IO+7vyAg77u/ICDvu78gICAvLyBsaWtlbHkgdG8gY2F1c2UgdW5leHBlY3RlZCBhbmQgdW5kZXNp cmVkIGVmZmVjdHMgZmFyIGRvd25zdHJlYW0uCgkJCQkgICDvu78gIO+7vyAgIH0gY2F0Y2ggKElP RXhjZXB0aW9uIGUpIHsKCSAgICDvu78gIO+7vyAg77u/ICAgbG9nZ2VyLmVycm9yKExvZ2dlci5T RUNVUklUWV9GQUlMVVJFLCAiQmFzZTY0IGRlY29kaW5nIG9mIElWK2NpcGhlcnRleHQgZmFpbGVk LiBEZWNyeXB0aW9uIGZhaWxlZC4iLCBlKTsKCSAgICDvu78gIO+7vyAg77u/ICAgcmV0dXJuIG51 bGw7CgkgICAg77u/ICDvu78gICB9Cgnvu78gICB9CgogICAg77u/ICAvKioKCSDvu78gICoge0Bp bmhlcml0RG9jfQoJIO+7vyAgKi8KCe+7vyAgcHVibGljIFBsYWluVGV4dCBkZWNyeXB0KENpcGhl clRleHQgY2lwaGVydGV4dCkgdGhyb3dzIEVuY3J5cHRpb25FeGNlcHRpb24gewoJ77u/ICDvu78g ICAvLyBOb3cgbW9yZSBvZiBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB1c2luZyB0aGUgbWFz dGVyIGtleS4KCSAgICDvu78gIO+7vyAgIHJldHVybiBkZWNyeXB0KHNlY3JldEtleVNwZWMsIGNp cGhlcnRleHQpOwoJ77u/ICB9CgogICAg77u/ICAvKioKCSDvu78gICAqIHtAaW5oZXJpdERvY30K CSDvu78gICAqLwoJ77u/ICBwdWJsaWMgUGxhaW5UZXh0IGRlY3J5cHQoU2VjcmV0S2V5IGtleSwg Q2lwaGVyVGV4dCBjaXBoZXJ0ZXh0KQoJ77u/ICAgICAgdGhyb3dzIEVuY3J5cHRpb25FeGNlcHRp b24sIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgoJCSAgICAg77u/ICB7Cgnvu78gICAgICBsb25n IHN0YXJ0ID0gU3lzdGVtLm5hbm9UaW1lKCk7ICAvLyBDdXJyZW50IHRpbWUgaW4gbmFub3NlY3M7 IHVzZWQgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcwoJ77u/ICAgICAgaWYgKCBrZXkgPT0gbnVs bCApIHsKCSAgICDvu78gICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlv bigiU2VjcmV0S2V5IGFyZyBtYXkgbm90IGJlIG51bGwiKTsKCSAgICDvu78gICAgICB9Cgnvu78g ICAgICBpZiAoIGNpcGhlcnRleHQgPT0gbnVsbCApIHsKCSAgICDvu78gICAgICAgICAgdGhyb3cg bmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2lwaGVydGV4dCBtYXkgYXJnIG5vdCBiZSBu dWxsIik7CgkgICAg77u/ICAgICAgfQoKCe+7vyAgICAgIGlmICggISBDcnlwdG9IZWxwZXIuaXNB bGxvd2VkQ2lwaGVyTW9kZShjaXBoZXJ0ZXh0LmdldENpcGhlck1vZGUoKSkgKSB7CgkgICAg77u/ ICAgICAgICAgIC8vIFRoaXMgcmVhbGx5IHNob3VsZCBiZSBhbiBpbGxlZ2FsIGFyZ3VtZW50IGV4 Y2VwdGlvbiwgYnV0IGl0IGNvdWxkCgkJ77u/ICAgICAgICAgIC8vIG1lYW4gdGhhdCBhIHBhcnRu ZXIgZW5jcnlwdGVkIHNvbWV0aGluZyB1c2luZyBhIGNpcGhlciBtb2RlIHRoYXQKCQnvu78gICAg ICAgICAgLy8geW91IGRvIG5vdCBhY2NlcHQsIHNvIGl0J3MgYSBiaXQgbW9yZSBjb21wbGV4IHRo YW4gdGhhdC4gQWxzbwoJCe+7vyAgICAgICAgICAvLyB0aHJvd2luZyBhbiBJbGxlZ2FsQXJndW1l bnRFeGNlcHRpb24gZG9lc24ndCBhbGxvdyB1cyB0byBwcm92aWRlCgkJ77u/ICAgICAgICAgIC8v IHRoZSB0d28gc2VwYXJhdGUgZXJyb3IgbWVzc2FnZXMgb3IgYXV0b21hdGljYWxseSBsb2cgaXQu CgkJ77u/ICAgICAgICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKERFQ1JZUFRJT05f RkFJTEVELAoJCQkJCQkJ77u/ICAgICAgICAgICAgICAgICAgIkludmFsaWQgY2lwaGVyIG1vZGUg IiArIGNpcGhlcnRleHQuZ2V0Q2lwaGVyTW9kZSgpICsKCQkJCQkJCe+7vyAgICAgICAgICAiIG5v dCBwZXJtaXR0ZWQgZm9yIGRlY3J5cHRpb24gb3IgZW5jcnlwdGlvbiBvcGVyYXRpb25zLiIpOwoJ ICAgIO+7vyAgICAgIH0KCe+7vyAgICAgIGxvZ2dlci5kZWJ1ZyhMb2dnZXIuRVZFTlRfU1VDQ0VT UywKCQkJICAg77u/ICAgICAgICAgICAgICAiQXJncyB2YWxpZCBmb3IgSmF2YUVuY3J5cHRvci5k ZWNyeXB0KFNlY3JldEtleSxDaXBoZXJUZXh0KTogIiArCgkJCSAgIO+7vyAgICAgICAgICAgICAg Y2lwaGVydGV4dCk7CgoJ77u/ICAgICAgUGxhaW5UZXh0IHBsYWludGV4dCA9IG51bGw7Cgnvu78g ICAgICBib29sZWFuIGNhdWdodEV4Y2VwdGlvbiA9IGZhbHNlOwoJ77u/ICAgICAgaW50IHByb2dy ZXNzTWFyayA9IDA7Cgnvu78gICAgICB0cnkgewoJICAgIO+7vyAgICAgICAgICAvLyBGaXJzdCB3 ZSB2YWxpZGF0ZSB0aGUgTUFDLgoJCe+7vyAgICAgICAgICBib29sZWFuIHZhbGlkID0gQ3J5cHRv SGVscGVyLmlzQ2lwaGVyVGV4dE1BQ3ZhbGlkKGtleSwgY2lwaGVydGV4dCk7CgkgICAg77u/ICAg ICAgICAgIGlmICggIXZhbGlkICkgewoJCe+7vyAgICAgICAgICAgICAgdHJ5IHsKCQkgICAg77u/ ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBnb2luZyB0byBmYWlsLCBidXQgd2Ugd2FudCB0 aGUgc2FtZSBwcm9jZXNzaW5nCgkJCe+7vyAgICAgICAgICAgICAgICAgIC8vIHRvIG9jY3VyIGFz IG11Y2ggYXMgcG9zc2libGUgc28gYXMgdG8gcHJldmVudCB0aW1pbmcKCQkJ77u/ICAgICAgICAg ICAgICAgICAgLy8gYXR0YWNrcy4gV2UgX2NvdWxkXyBqdXN0IGJlIHNhdGlzZmllZCBieSB0aGUg YWRkaXRpb25hbAoJCQnvu78gICAgICAgICAgICAgICAgICAvLyBzbGVlcCBpbiB0aGUgJ2ZpbmFs bHknIGNsYXVzZSwgYnV0IGFuIGF0dGFja2VyIG9uIHRoZQoJCQnvu78gICAgICAgICAgICAgICAg ICAvLyBzYW1lIHNlcnZlciB3aG8gY2FuIHJ1biBzb21ldGhpbmcgbGlrZSAncHMnIGNhbiB0ZWxs CgkJCe+7vyAgICAgICAgICAgICAgICAgIC8vIENQVSB0aW1lIHZlcnN1cyB3aGVuIHRoZSBwcm9j ZXNzIGlzIHNsZWVwaW5nLiBIZW5jZSB3ZQoJCQnvu78gICAgICAgICAgICAgICAgICAvLyB0cnkg dG8gbWFrZSB0aGlzIGFzIGNsb3NlIGFzIHBvc3NpYmxlLiBTaW5jZSB3ZSBrbm93CgkJCe+7vyAg ICAgICAgICAgICAgICAgIC8vIGl0IGlzIGdvaW5nIHRvIGZhaWwsIHdlIGlnbm9yZSB0aGUgcmVz dWx0IGFuZCBpZ25vcmUKCQkJ77u/ICAgICAgICAgICAgICAgICAgLy8gdGhlIChleHBlY3RlZCkg ZXhjZXB0aW9uLgoJCQnvu78gICAgICAgICAgICAgICAgICBoYW5kbGVEZWNyeXB0aW9uKGtleSwg Y2lwaGVydGV4dCk7IC8vIElnbm9yZSByZXR1cm4gKHNob3VsZCBmYWlsKS4KCQkgICAg77u/ICAg ICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewoJCSAgICDvu78gICAgICAgICAgICAg ICAgICA7ICAgLy8gSWdub3JlCgkJICAgIO+7vyAgICAgICAgICAgICAgfQoJCe+7vyAgICAgICAg ICAgICAgdGhyb3cgbmV3IEVuY3J5cHRpb25FeGNlcHRpb24oREVDUllQVElPTl9GQUlMRUQsCgkJ CQkJCQkgICAg77u/ICAgICAgICAgICAgICAgICAgICAgICJEZWNyeXB0aW9uIGZhaWxlZCBiZWNh dXNlIE1BQyBpbnZhbGlkIGZvciAiICsKCQkJCQkJCSAgICDvu78gICAgICAgICAgICAgICAgICAg ICAgY2lwaGVydGV4dCk7CgkJ77u/ICAgICAgICAgIH0KCSAgICDvu78gICAgICAgICAgcHJvZ3Jl c3NNYXJrKys7CgkgICAg77u/ICAgICAgICAgIC8vIFRoZSBkZWNyeXB0aW9uIG9ubHkgY291bnRz IGlmIHRoZSBNQUMgd2FzIHZhbGlkLgoJCe+7vyAgICAgICAgICBwbGFpbnRleHQgPSBoYW5kbGVE ZWNyeXB0aW9uKGtleSwgY2lwaGVydGV4dCk7CgkgICAg77u/ICAgICAgICAgIHByb2dyZXNzTWFy aysrOwoJICAgIO+7vyAgICAgIH0gY2F0Y2goRW5jcnlwdGlvbkV4Y2VwdGlvbiBleCkgewoJICAg IO+7vyAgICAgICAgICBjYXVnaHRFeGNlcHRpb24gPSB0cnVlOwoJICAgIO+7vyAgICAgICAgICBT dHJpbmcgbG9nTXNnID0gbnVsbDsKCSAgICDvu78gICAgICAgICAgc3dpdGNoKCBwcm9ncmVzc01h cmsgKSB7CgkJ77u/ICAgICAgICAgIGNhc2UgMToKCQnvu78gICAgICAgICAgICAgIGxvZ01zZyA9 ICJEZWNyeXB0aW9uIGZhaWxlZCBiZWNhdXNlIE1BQyBpbnZhbGlkLiBTZWUgbG9nZ2VkIGV4Y2Vw dGlvbiBmb3IgZGV0YWlscy4iOwoJCe+7vyAgICAgICAgICAgICAgYnJlYWs7CgkJ77u/ICAgICAg ICAgIGNhc2UgMjoKCQnvu78gICAgICAgICAgICAgIGxvZ01zZyA9ICJEZWNyeXB0aW9uIGZhaWxl ZCBiZWNhdXNlIGhhbmRsZURlY3J5cHRpb24oKSBmYWlsZWQuIFNlZSBsb2dnZWQgZXhjZXB0aW9u IGZvciBkZXRhaWxzLiI7CgkJ77u/ICAgICAgICAgICAgICBicmVhazsKCQnvu78gICAgICAgICAg ZGVmYXVsdDoKCQnvu78gICAgICAgICAgICAgIGxvZ01zZyA9ICJQcm9ncmFtbWluZyBlcnJvcjog dW5leHBlY3RlZCBwcm9ncmVzcyBtYXJrID09ICIgKyBwcm9ncmVzc01hcms7CgkJ77u/ICAgICAg ICAgIGJyZWFrOwoJCe+7vyAgICAgICAgICB9CgkgICAg77u/ICAgICAgICAgIGxvZ2dlci5lcnJv cihMb2dnZXIuU0VDVVJJVFlfRkFJTFVSRSwgbG9nTXNnKTsKCSAgICDvu78gICAgICAgICAgdGhy b3cgZXg7ICAgICAgICAgICAvLyBSZS10aHJvdwoJICAgIO+7vyAgICAgIH0KCe+7vyAgICAgIGZp bmFsbHkgewoJICAgIO+7vyAgICAgICAgICBpZiAoIGNhdWdodEV4Y2VwdGlvbiApIHsKCQnvu78g ICAgICAgICAgICAgIC8vIFRoZSByZXN0IG9mIHRoaXMgY29kZSBpcyB0byB0cnkgdG8gYWNjb3Vu dCBmb3IgYW55IG1pbnV0ZSBkaWZmZXJlbmNlcwoJCSAgICDvu78gICAgICAgICAgICAgIC8vIGlu IHRoZSB0aW1lIGl0IG1pZ2h0IHRha2UgZm9yIHRoZSB2YXJpb3VzIHJlYXNvbnMgdGhhdCBkZWNy eXB0aW9uIGZhaWxzCgkJICAgIO+7vyAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gcHJldmVu dCBhbnkgb3RoZXIgcG9zc2libGUgdGltaW5nIGF0dGFja3MuIFBlcmhhcHMgaXQgaXMKCQkgICAg 77u/ICAgICAgICAgICAgICAvLyBnb2luZyBvdmVyYm9hcmQuIElmIG5vdGhpbmcgZWxzZSwgaWYg Tl9TRUNTIGlzIGxhcmdlIGVub3VnaCwgaXQgbWlnaHQKCQkgICAg77u/ICAgICAgICAgICAgICAv LyBkZXRlciBhdHRlbXB0ZWQgcmVwZWF0ZWQgYXR0YWNrcyBieSBtYWtpbmcgdGhlbSB0YWtlIG11 Y2ggbG9uZ2VyLgoJCSAgICDvu78gICAgICAgICAgICAgIGxvbmcgbm93ID0gU3lzdGVtLm5hbm9U aW1lKCk7CgkJ77u/ICAgICAgICAgICAgICBsb25nIGVsYXBzZWQgPSBub3cgLSBzdGFydDsKCQnv u78gICAgICAgICAgICAgIGZpbmFsIGxvbmcgTkFOT1NFQ1NfSU5fU0VDID0gMTAwMDAwMDAwMEw7 IC8vIG5hbm9zZWMgaXMgMTAqKi05IHNlYwoJCe+7vyAgICAgICAgICAgICAgbG9uZyBuU2VjcyA9 IE5fU0VDUyAqIE5BTk9TRUNTX0lOX1NFQzsgIC8vIE4gc2Vjb25kcyBpbiBuYW5vIHNlY29uZHMK CQnvu78gICAgICAgICAgICAgIGlmICggZWxhcHNlZCA8IG5TZWNzICkgewoJCSAgICDvu78gICAg ICAgICAgICAgICAgICAvLyBXYW50IHRvIHNsZWVwIHNvIHRvdGFsIHRpbWUgdGFrZW4gaXMgTiBz ZWNvbmRzLgoJCQnvu78gICAgICAgICAgICAgICAgICBsb25nIGV4dHJhU2xlZXAgPSBuU2VjcyAt IGVsYXBzZWQ7CgoJCSAgICDvu78gICAgICAgICAgICAgICAgICAvLyAnZXh0cmFTbGVlcCcgaXMg aW4gbmFub3NlY29uZHMuIE5lZWQgdG8gY29udmVydCB0byBhIG1pbGxpc2VjCgkJCe+7vyAgICAg ICAgICAgICAgICAgIC8vIHBhcnQgYW5kIG5hbm9zZWMgcGFydC4gTmFub3NlYyBpcyAxMCoqLTks IG1pbGxzZWMgaXMKCQkJ77u/ICAgICAgICAgICAgICAgICAgLy8gMTAqKi0zLCBzbyBkaXZpZGUg YnkgKDEwKiotOSAvIDEwKiotMyksIG9yIDEwKio2IHRvCgkJCe+7vyAgICAgICAgICAgICAgICAg IC8vIGNvbnZlcnQgdG8gZnJvbSBuYW5vc2Vjb25kcyB0byBtaWxsaXNlY29uZHMuCgkJCe+7vyAg ICAgICAgICAgICAgICAgIGxvbmcgbWlsbGlzID0gZXh0cmFTbGVlcCAvIDEwMDAwMDBMOwoJCSAg ICDvu78gICAgICAgICAgICAgICAgICBsb25nIG5hbm9zICA9IChleHRyYVNsZWVwIC0gKG1pbGxp cyAqIDEwMDAwMDBMKSk7CgkJICAgIO+7vyAgICAgICAgICAgICAgICAgIGFzc2VydCBuYW5vcyA+ PSAwICYmIG5hbm9zIDw9IEludGVnZXIuTUFYX1ZBTFVFIDoKCQkgICAgIk5hbm9zZWNzIG91dCBv ZiBib3VuZHM7IG5hbm9zID0gIiArIG5hbm9zOwoJCSAgICDvu78gICAgICAgICAgICAgICAgICB0 cnkgewoJCQnvu78gICAgICAgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKG1pbGxpcywgKGlu dCluYW5vcyk7CgkJCe+7vyAgICAgICAgICAgICAgICAgIH0gY2F0Y2goSW50ZXJydXB0ZWRFeGNl cHRpb24gZXgpIHsKCQkJ77u/ICAgICAgICAgICAgICAgICAgICAgIDsgICAvLyBJZ25vcmUKCQkJ 77u/ICAgICAgICAgICAgICAgICAgfQoJCSAgICDvu78gICAgICAgICAgICAgIH0gLy8gRWxzZSAu Li4gdGltZSBhbHJlYWR5IGV4Y2VlZHMgTl9TRUNTIHNlYywgc28gZG8gbm90IHNsZWVwLgoJCe+7 vyAgICAgICAgICB9CgkgICAg77u/ICAgICAgfQoJ77u/ICAgICAgcmV0dXJuIHBsYWludGV4dDsK Ce+7vyAgfQoKICAgIC8vIEhhbmRsZSB0aGUgYWN0dWFsIGRlY3J5cHRpb24gcG9ydGlvbi4gQXQg dGhpcyBwb2ludCBpdCBpcyBhc3N1bWVkIHRoYXQKICAgIC8vIGFueSBNQUMgaGFzIGFscmVhZHkg YmVlbiB2YWxpZGF0ZWQuIChCdXQgc2VlICJESVNDVVNTIiBpc3N1ZSwgYmVsb3cuKQogICAgcHJp dmF0ZSBQbGFpblRleHQgaGFuZGxlRGVjcnlwdGlvbihTZWNyZXRLZXkga2V5LCBDaXBoZXJUZXh0 IGNpcGhlcnRleHQpCgl0aHJvd3MgRW5jcnlwdGlvbkV4Y2VwdGlvbgogICAgewoJaW50IGtleVNp emUgPSAwOwoJdHJ5IHsKCSAgICBDaXBoZXIgZGVjcnlwdGVyID0gQ2lwaGVyLmdldEluc3RhbmNl KGNpcGhlcnRleHQuZ2V0Q2lwaGVyVHJhbnNmb3JtYXRpb24oKSk7CgkgICAga2V5U2l6ZSA9IGtl eS5nZXRFbmNvZGVkKCkubGVuZ3RoICogODsgIC8vIENvbnZlcnQgdG8gIyBiaXRzCgoJICAgIC8v IFVzaW5nIGNpcGhlciBtb2RlIHRoYXQgc3VwcG9ydHMgKmJvdGgqIGNvbmZpZGVudGlhbGl0eSAq YW5kKiBhdXRoZW50aWNpdHk/IElmIHNvLCB0aGVuCgkgICAgLy8gdXNlIHRoZSBzcGVjaWZpZWQg U2VjcmV0S2V5IGFzLWlzIHJhdGhlciB0aGFuIGNvbXB1dGluZyBhIGRlcml2ZWQga2V5IGZyb20g aXQuIFdlIGFsc28KCSAgICAvLyBkb24ndCBleHBlY3QgYSBzZXBhcmF0ZSBNQUMgaW4gdGhlIHNw ZWNpZmllZCBDaXBoZXJUZXh0IG9iamVjdCBzbyB0aGVyZWZvcmUgZG9uJ3QgdHJ5CgkgICAgLy8g dG8gdmFsaWRhdGUgaXQuCgkgICAgYm9vbGVhbiBwcmVmZXJyZWRDaXBoZXJNb2RlID0gQ3J5cHRv SGVscGVyLmlzQ29tYmluZWRDaXBoZXJNb2RlKCBjaXBoZXJ0ZXh0LmdldENpcGhlck1vZGUoKSAp OwoJICAgIFNlY3JldEtleSBlbmNLZXkgPSBudWxsOwoJICAgIGlmICggcHJlZmVycmVkQ2lwaGVy TW9kZSApIHsKCQllbmNLZXkgPSBrZXk7CgkgICAgfSBlbHNlIHsKCQkvLyBUT0RPOiBQRVJGT1JN QU5DRTogQ2FsY3VsYXRlIGF2ZyB0aW1lIHRoaXMgdGFrZXMgYW5kIGNvbnNpZGVyIGNhY2hpbmcg Zm9yIHZlcnkgc2hvcnQgaW50ZXJ2YWwKCQkvLyAgICAgICAoZS5nLiwgMiB0byA1IHNlYyB0b3Bz KS4gT3RoZXJ3aXNlIGRvaW5nIGxvdHMgb2YgZW5jcnlwdGlvbnMgaW4gYSBsb29wIGNvdWxkIHRh a2UgYSBMT1QgbG9uZ2VyLgoJCS8vICAgICAgIEJ1dCByZW1lbWJlciBKb24gQmVudGxleSdzICJS dWxlICMxIG9uIHBlcmZvcm1hbmNlOiBGaXJzdCBtYWtlIGl0IHJpZ2h0LCB0aGVuIG1ha2UgaXQg ZmFzdC4iCgkJ77u/ICAvL++7vyAg77u/ICAgVGhpcyB3b3VsZCBiZSBhIHNlY3VyaXR5IHRyYWRl LW9mZiBhcyBpdCB3b3VsZCBsZWF2ZSBrZXlzIGluIG1lbW9yeSBhIGJpdCBsb25nZXIsIHNvIGl0 CgkJICAgIO+7vyAgLy/vu78gIO+7vyAgIHNob3VsZCBwcm9iYWJseSBiZSBvZmYgYnkgZGVmYXVs dCBhbmQgY29udHJvbGxlZCB2aWEgYSBwcm9wZXJ0eS4KCQkgICAgZW5jS2V5ID0gY29tcHV0ZURl cml2ZWRLZXkoIGNpcGhlcnRleHQuZ2V0S0RGVmVyc2lvbigpLCBjaXBoZXJ0ZXh0LmdldEtERl9Q UkYoKSwKCQkJCQkJ77u/ICDvu78gICAgICAgICAgICAgICAgICAgICAga2V5LCBrZXlTaXplLCAi ZW5jcnlwdGlvbiIpOwoJICAgIH0KCSAgICBpZiAoIGNpcGhlcnRleHQucmVxdWlyZXNJVigpICkg ewoJCWRlY3J5cHRlci5pbml0KENpcGhlci5ERUNSWVBUX01PREUsIGVuY0tleSwgbmV3IEl2UGFy YW1ldGVyU3BlYyhjaXBoZXJ0ZXh0LmdldElWKCkpKTsKCSAgICB9IGVsc2UgewoJCWRlY3J5cHRl ci5pbml0KENpcGhlci5ERUNSWVBUX01PREUsIGVuY0tleSk7CgkgICAgfQoJICAgIGJ5dGVbXSBv dXRwdXQgPSBkZWNyeXB0ZXIuZG9GaW5hbChjaXBoZXJ0ZXh0LmdldFJhd0NpcGhlclRleHQoKSk7 CgkgICAgcmV0dXJuIG5ldyBQbGFpblRleHQob3V0cHV0KTsKCgl9IGNhdGNoIChJbnZhbGlkS2V5 RXhjZXB0aW9uIGlrZSkgewoJICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKERFQ1JZ UFRJT05fRkFJTEVELCAiTXVzdCBpbnN0YWxsIEpDRSBVbmxpbWl0ZWQgU3RyZW5ndGggSnVyaXNk aWN0aW9uIFBvbGljeSBGaWxlcyBmcm9tIFN1biIsIGlrZSk7Cgl9IGNhdGNoIChOb1N1Y2hBbGdv cml0aG1FeGNlcHRpb24gZSkgewoJICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKERF Q1JZUFRJT05fRkFJTEVELCAiSW52YWxpZCBhbGdvcml0aG0gZm9yIGF2YWlsYWJsZSBKQ0UgcHJv dmlkZXJzIC0gIiArCgkJCQkJICBjaXBoZXJ0ZXh0LmdldENpcGhlclRyYW5zZm9ybWF0aW9uKCkg KyAiOiAiICsgZS5nZXRNZXNzYWdlKCksIGUpOwoJfSBjYXRjaCAoTm9TdWNoUGFkZGluZ0V4Y2Vw dGlvbiBlKSB7CgkgICAgdGhyb3cgbmV3IEVuY3J5cHRpb25FeGNlcHRpb24oREVDUllQVElPTl9G QUlMRUQsICJJbnZhbGlkIHBhZGRpbmcgc2NoZW1lICgiICsKCQkJCQkgIGNpcGhlcnRleHQuZ2V0 UGFkZGluZ1NjaGVtZSgpICsgIikgZm9yIGNpcGhlciB0cmFuc2Zvcm1hdGlvbiAiICsgY2lwaGVy dGV4dC5nZXRDaXBoZXJUcmFuc2Zvcm1hdGlvbigpICsKCQkJCQkgICI6ICIgKyBlLmdldE1lc3Nh Z2UoKSwgZSk7Cgl9IGNhdGNoIChJbnZhbGlkQWxnb3JpdGhtUGFyYW1ldGVyRXhjZXB0aW9uIGUp IHsKCSAgICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbihERUNSWVBUSU9OX0ZBSUxFRCwg IkRlY3J5cHRpb24gcHJvYmxlbTogIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKCX0gY2F0Y2ggKEls bGVnYWxCbG9ja1NpemVFeGNlcHRpb24gZSkgewoJICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhj ZXB0aW9uKERFQ1JZUFRJT05fRkFJTEVELCAiRGVjcnlwdGlvbiBwcm9ibGVtOiAiICsgZS5nZXRN ZXNzYWdlKCksIGUpOwoJfSBjYXRjaCAoQmFkUGFkZGluZ0V4Y2VwdGlvbiBlKSB7CgkgICAgLy9E SVNDVVNTOiBUaGlzIG5lZWRzIGZpeGVkLiBBbHJlYWR5IHZhbGlkYXRlZCBNQUMgaW4gQ3J5cHRv SGVscGVyLmlzQ2lwaGVyVGV4dE1BQ3ZhbGlkKCkgYWJvdmUuCgkgICAgLy9TbyBvbmx5IHdheSB3 ZSBjb3VsZCBnZXQgYSBwYWRkaW5nIGV4Y2VwdGlvbiBpcyBpZiBpbnZhbGlkIHBhZGRpbmcgd2Vy ZSB1c2VkIG9yaWdpbmFsbHkgYnkKCSAgICAvL3RoZSBwYXJ0eSBkb2luZyB0aGUgZW5jcnlwdGlv bi4gKFRoaXMgbWlnaHQgaGFwcGVuIHdpdGggYSBidWdneSBwYWRkaW5nIHNjaGVtZSBmb3IgaW5z dGFuY2UuKQoJICAgIC8vSXQgKnNlZW1zKiBoYXJtbGVzcyB0aG91Z2gsIHNvIHdpbGwgbGVhdmUg aXQgZm9yIG5vdywgYW5kIHRlY2huaWNhbGx5LCB3ZSBuZWVkIHRvIGVpdGhlciBjYXRjaCBpdAoJ ICAgIC8vb3IgZGVjbGFyZSBpdCBpbiBhIHRocm93cyBjbGFzcy4gQ2xlYXJseSB3ZSBkb24ndCB3 YW50IHRvIGRvIHRoZSBsYXRlci4gVGhpcyBzaG91bGQgYmUgZGlzY3Vzc2VkCgkgICAgLy9kdXJp bmcgYSBjb2RlIGluc3BlY3Rpb24uCgkgICAgU2VjcmV0S2V5IGF1dGhLZXk7CgkgICAgdHJ5IHsK CQlhdXRoS2V5ID0gY29tcHV0ZURlcml2ZWRLZXkoIGNpcGhlcnRleHQuZ2V0S0RGVmVyc2lvbigp LCBjaXBoZXJ0ZXh0LmdldEtERl9QUkYoKSwKCQkJCQkgICAgIO+7vyAg77u/ICAgICAgICAgICAg ICAgICAgICAgICBrZXksIGtleVNpemUsICJhdXRoZW50aWNpdHkiKTsKCSAgICB9IGNhdGNoIChF eGNlcHRpb24gZTEpIHsKCQl0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbihERUNSWVBUSU9O X0ZBSUxFRCwKCQkJCQkgICAgICAiRGVjcnlwdGlvbiBwcm9ibGVtIC0tIGZhaWxlZCB0byBjb21w dXRlIGRlcml2ZWQga2V5IGZvciBhdXRoZW50aWNpdHk6ICIgKyBlMS5nZXRNZXNzYWdlKCksIGUx KTsKCSAgICB9CgkgICAgYm9vbGVhbiBzdWNjZXNzID0gY2lwaGVydGV4dC52YWxpZGF0ZU1BQygg YXV0aEtleSApOwoJICAgIGlmICggc3VjY2VzcyApIHsKCQl0aHJvdyBuZXcgRW5jcnlwdGlvbkV4 Y2VwdGlvbihERUNSWVBUSU9OX0ZBSUxFRCwgIkRlY3J5cHRpb24gcHJvYmxlbTogIiArIGUuZ2V0 TWVzc2FnZSgpLCBlKTsKCSAgICB9IGVsc2UgewoJCXRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0 aW9uKERFQ1JZUFRJT05fRkFJTEVELAoJCQkJCSAgICAgICJEZWNyeXB0aW9uIHByb2JsZW06IFdB Uk5JTkc6IEFkdmVyc2FyeSBtYXkgaGF2ZSB0YW1wZXJlZCB3aXRoICIgKwoJCQkJCSAgICAgICJD aXBoZXJUZXh0IG9iamVjdCBvckNpcGhlclRleHQgb2JqZWN0IG1hbmdsZWQgaW4gdHJhbnNpdDog IiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKCSAgICB9Cgl9CiAgICB9CiAgICDvu78gIAoJ77u/ICAv KioKCSAgICAg77u/ICAqIHtAaW5oZXJpdERvY30KCSAgICAg77u/ICAqLwoJ77u/ICBwdWJsaWMg U3RyaW5nIHNpZ24oU3RyaW5nIGRhdGEpIHRocm93cyBFbmNyeXB0aW9uRXhjZXB0aW9uIHsKCe+7 vyAg77u/ICB0cnkgewoJICAgIO+7vyAg77u/ICDvu78gIFNpZ25hdHVyZSBzaWduZXIgPSBTaWdu YXR1cmUuZ2V0SW5zdGFuY2Uoc2lnbmF0dXJlQWxnb3JpdGhtKTsKCSAgICDvu78gIO+7vyAg77u/ ICBzaWduZXIuaW5pdFNpZ24ocHJpdmF0ZUtleSk7CgkgICAg77u/ICDvu78gIO+7vyAgc2lnbmVy LnVwZGF0ZShkYXRhLmdldEJ5dGVzKGVuY29kaW5nKSk7CgkgICAg77u/ICDvu78gIO+7vyAgYnl0 ZVtdIGJ5dGVzID0gc2lnbmVyLnNpZ24oKTsKCSAgICDvu78gIO+7vyAg77u/ICByZXR1cm4gRVNB UEkuZW5jb2RlcigpLmVuY29kZUZvckJhc2U2NChieXRlcywgZmFsc2UpOwoJICAgIO+7vyAg77u/ ICB9IGNhdGNoIChJbnZhbGlkS2V5RXhjZXB0aW9uIGlrZSkgewoJICAgIO+7vyAg77u/ICDvu78g IHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKCJFbmNyeXB0aW9uIGZhaWx1cmUiLCAiTXVz dCBpbnN0YWxsIHVubGltaXRlZCBzdHJlbmd0aCBjcnlwdG8gZXh0ZW5zaW9uIGZyb20gU3VuIiwg aWtlKTsKCSAgICDvu78gIO+7vyAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCSAgICDvu78gIO+7 vyAg77u/ICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbigiU2lnbmF0dXJlIGZhaWx1cmUi LCAiQ2FuJ3QgZmluZCBzaWduYXR1cmUgYWxnb3JpdGhtICIgKyBzaWduYXR1cmVBbGdvcml0aG0s IGUpOwoJICAgIO+7vyAg77u/ICB9Cgnvu78gIH0KICAgIO+7vyAg77u/ICAKCe+7vyAgLyoqCgkg ICAgIO+7vyAgKiB7QGluaGVyaXREb2N9CgkgICAgIO+7vyAgKi8KCe+7vyAgcHVibGljIGJvb2xl YW4gdmVyaWZ5U2lnbmF0dXJlKFN0cmluZyBzaWduYXR1cmUsIFN0cmluZyBkYXRhKSB7Cgnvu78g IO+7vyAgdHJ5IHsKCSAgICDvu78gIO+7vyAg77u/ICBieXRlW10gYnl0ZXMgPSBFU0FQSS5lbmNv ZGVyKCkuZGVjb2RlRnJvbUJhc2U2NChzaWduYXR1cmUpOwoJICAgIO+7vyAg77u/ICDvu78gIFNp Z25hdHVyZSBzaWduZXIgPSBTaWduYXR1cmUuZ2V0SW5zdGFuY2Uoc2lnbmF0dXJlQWxnb3JpdGht KTsKCSAgICDvu78gIO+7vyAg77u/ICBzaWduZXIuaW5pdFZlcmlmeShwdWJsaWNLZXkpOwoJICAg IO+7vyAg77u/ICDvu78gIHNpZ25lci51cGRhdGUoZGF0YS5nZXRCeXRlcyhlbmNvZGluZykpOwoJ ICAgIO+7vyAg77u/ICDvu78gIHJldHVybiBzaWduZXIudmVyaWZ5KGJ5dGVzKTsKCSAgICDvu78g IO+7vyAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCSAgICDvu78gIO+7vyAgICAgIC8vIE5PVEU6 IEVuY3J5cHRpb25FeGNlcHRpb24gY29uc3RydWN0ZWQgKm9ubHkqIGZvciBzaWRlLWVmZmVjdCBv ZiBjYXVzaW5nIGxvZ2dpbmcuCgkJ77u/ICDvu78gICAgICAvLyBGaW5kQnVncyBjb21wbGFpbnMg YWJvdXQgdGhpcyBhbmQgc2luY2UgaXQgZXhhbWluZXMgYnl0ZS1jb2RlLCB0aGVyZSdzIG5vIHdh eSB0bwoJCe+7vyAg77u/ICAgICAgLy8gc2h1dCBpdCB1cC4KCQnvu78gIO+7vyAg77u/ICBuZXcg RW5jcnlwdGlvbkV4Y2VwdGlvbigiSW52YWxpZCBzaWduYXR1cmUiLCAiUHJvYmxlbSB2ZXJpZnlp bmcgc2lnbmF0dXJlOiAiICsgZS5nZXRNZXNzYWdlKCksIGUpOwoJICAgIO+7vyAg77u/ICDvu78g IHJldHVybiBmYWxzZTsKCSAgICDvu78gIO+7vyAgfQoJ77u/ICB9CgogICAg77u/ICAvKioKCSDv u78gICoge0Bpbmhlcml0RG9jfQoJICoKCSAqIEBwYXJhbSBleHBpcmF0aW9uCgkgKiBAdGhyb3dz IEludGVncml0eUV4Y2VwdGlvbgoJICovCgnvu78gIHB1YmxpYyBTdHJpbmcgc2VhbChTdHJpbmcg ZGF0YSwgbG9uZyBleHBpcmF0aW9uKSB0aHJvd3MgSW50ZWdyaXR5RXhjZXB0aW9uIHsKCe+7vyAg ICAgIGlmICggZGF0YSA9PSBudWxsICkgewoJICAgIO+7vyAgICAgICAgICB0aHJvdyBuZXcgSWxs ZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJEYXRhIHRvIGJlIHNlYWxlZCBtYXkgbm90IGJlIG51bGwu Iik7CgkgICAg77u/ICAgICAgfQoJ77u/ICAgICAgCgkgICAg77u/ICDvu78gIHRyeSB7CgkgICAg 77u/ICDvu78gICAgICBTdHJpbmcgYjY0ZGF0YSA9IG51bGw7CgkgICAgdHJ5IHsKCQliNjRkYXRh ID0gRVNBUEkuZW5jb2RlcigpLmVuY29kZUZvckJhc2U2NChkYXRhLmdldEJ5dGVzKCJVVEYtOCIp LCBmYWxzZSk7CgkgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7 CgkJOyAvLyBJZ25vcmU7IHNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgVVRGLTggYnVpbHQgaW50 byBydC5qYXIKCSAgICB9CgkgICAg77u/ICDvu78gIO+7vyAgLy8gbWl4IGluIHNvbWUgcmFuZG9t IGRhdGEgc28gZXZlbiBpZGVudGljYWwgZGF0YSBhbmQgdGltZXN0YW1wIHByb2R1Y2VzIGRpZmZl cmVudCBzZWFscwoJCe+7vyAg77u/ICDvu78gIFN0cmluZyBub25jZSA9IEVTQVBJLnJhbmRvbWl6 ZXIoKS5nZXRSYW5kb21TdHJpbmcoMTAsIEVuY29kZXJDb25zdGFudHMuQ0hBUl9BTFBIQU5VTUVS SUNTKTsKCSAgICDvu78gIO+7vyAg77u/ICBTdHJpbmcgcGxhaW50ZXh0ID0gZXhwaXJhdGlvbiAr ICI6IiArIG5vbmNlICsgIjoiICsgYjY0ZGF0YTsKCSAgICDvu78gIO+7vyAg77u/ICAvLyBhZGQg aW50ZWdyaXR5IGNoZWNrOyBzaWduYXR1cmUgaXMgYWxyZWFkeSBiYXNlNjQgZW5jb2RlZC4KCQnv u78gIO+7vyAg77u/ICBTdHJpbmcgc2lnID0gdGhpcy5zaWduKCBwbGFpbnRleHQgKTsKCSAgICDv u78gIO+7vyAg77u/ICBDaXBoZXJUZXh0IGNpcGhlcnRleHQgPSB0aGlzLmVuY3J5cHQoIG5ldyBQ bGFpblRleHQocGxhaW50ZXh0ICsgIjoiICsgc2lnKSApOwoJICAgIO+7vyAg77u/ICDvu78gIFN0 cmluZyBzZWFsZWREYXRhID0gRVNBUEkuZW5jb2RlcigpLmVuY29kZUZvckJhc2U2NChjaXBoZXJ0 ZXh0LmFzUG9ydGFibGVTZXJpYWxpemVkQnl0ZUFycmF5KCksIGZhbHNlKTsKCSAgICDvu78gIO+7 vyAg77u/ICByZXR1cm4gc2VhbGVkRGF0YTsKCSAgICDvu78gIO+7vyAgfSBjYXRjaCggRW5jcnlw dGlvbkV4Y2VwdGlvbiBlICkgewoJICAgIO+7vyAg77u/ICDvu78gIHRocm93IG5ldyBJbnRlZ3Jp dHlFeGNlcHRpb24oIGUuZ2V0VXNlck1lc3NhZ2UoKSwgZS5nZXRMb2dNZXNzYWdlKCksIGUgKTsK CSAgICDvu78gIO+7vyAgfQoJ77u/ICB9CgogICAg77u/ICAvKioKCSDvu78gICoge0Bpbmhlcml0 RG9jfQoJIO+7vyAgKi8KCe+7vyAgcHVibGljIFN0cmluZyB1bnNlYWwoU3RyaW5nIHNlYWwpIHRo cm93cyBFbmNyeXB0aW9uRXhjZXB0aW9uIHsKCe+7vyAg77u/ICBQbGFpblRleHQgcGxhaW50ZXh0 ID0gbnVsbDsKCe+7vyAg77u/ICB0cnkgewoJICAgIO+7vyAg77u/ICAgICAgYnl0ZVtdIGVuY3J5 cHRlZEJ5dGVzID0gRVNBUEkuZW5jb2RlcigpLmRlY29kZUZyb21CYXNlNjQoc2VhbCk7CgkgICAg 77u/ICDvu78gICAgICBDaXBoZXJUZXh0IGNpcGhlclRleHQgPSBudWxsOwoJICAgIO+7vyAg77u/ ICAgICAgdHJ5IHsKCQnvu78gIO+7vyAgICAgICAgICBjaXBoZXJUZXh0ID0gQ2lwaGVyVGV4dC5m cm9tUG9ydGFibGVTZXJpYWxpemVkQnl0ZXMoZW5jcnlwdGVkQnl0ZXMpOwoJCe+7vyAg77u/ICAg ICAgfSBjYXRjaCggQXNzZXJ0aW9uRXJyb3IgZSkgewoJCe+7vyAgICAgICAgICAgICAgLy8gU29t ZSBvZiB0aGUgdGVzdHMgaW4gRW5jcnlwdG9yVGVzdC50ZXN0VmVyaWZ5U2VhbCgpIGFyZSBleGFt cGxlcyBvZgoJCSAgICDvu78gIO+7vyAgICAgICAgICAvLyB0aGlzIGlmIGFzc2VydGlvbnMgYXJl IGVuYWJsZWQuCgkJICAgIO+7vyAg77u/ICAgICAgICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhj ZXB0aW9uKCJJbnZhbGlkIHNlYWwiLAoJCQkJCQkJICAgICAg77u/ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VhbCBwYXNzZWQgZ2FyYmFyZ2UgZGF0YSByZXN1 bHRpbmcgaW4gQXNzZXJ0aW9uRXJyb3I6ICIgKyBlKTsKCQnvu78gICAgICAgICAgfQoJICAgIO+7 vyAg77u/ICDvu78gIHBsYWludGV4dCA9IHRoaXMuZGVjcnlwdChjaXBoZXJUZXh0KTsKCgkgICAg 77u/ICDvu78gIO+7vyAgU3RyaW5nW10gcGFydHMgPSBwbGFpbnRleHQudG9TdHJpbmcoKS5zcGxp dCgiOiIpOwoJICAgIO+7vyAg77u/ICDvu78gIGlmIChwYXJ0cy5sZW5ndGggIT0gNCkgewoJCe+7 vyAg77u/ICDvu78gIO+7vyAgdGhyb3cgbmV3IEVuY3J5cHRpb25FeGNlcHRpb24oIkludmFsaWQg c2VhbCIsICJTZWFsIHdhcyBub3QgZm9ybWF0dGVkIHByb3Blcmx5LiIpOwoJCe+7vyAg77u/ICDv u78gIH0KCSAgICDvu78gIAoJCe+7vyAg77u/ICDvu78gIFN0cmluZyB0aW1lc3RyaW5nID0gcGFy dHNbMF07CgkgICAg77u/ICDvu78gIO+7vyAgbG9uZyBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUo KTsKCSAgICDvu78gIO+7vyAg77u/ICBsb25nIGV4cGlyYXRpb24gPSBMb25nLnBhcnNlTG9uZyh0 aW1lc3RyaW5nKTsKCSAgICDvu78gIO+7vyAg77u/ICBpZiAobm93ID4gZXhwaXJhdGlvbikgewoJ Ce+7vyAg77u/ICDvu78gIO+7vyAgdGhyb3cgbmV3IEVuY3J5cHRpb25FeGNlcHRpb24oIkludmFs aWQgc2VhbCIsICJTZWFsIGV4cGlyYXRpb24gZGF0ZSBvZiAiICsgbmV3IERhdGUoZXhwaXJhdGlv bikgKyAiIGhhcyBwYXN0LiIpOwoJCe+7vyAg77u/ICDvu78gIH0KCSAgICDvu78gIO+7vyAg77u/ ICBTdHJpbmcgbm9uY2UgPSBwYXJ0c1sxXTsKCSAgICDvu78gIO+7vyAg77u/ICBTdHJpbmcgYjY0 ZGF0YSA9IHBhcnRzWzJdOwoJICAgIO+7vyAg77u/ICDvu78gIFN0cmluZyBzaWcgPSBwYXJ0c1sz XTsKCSAgICDvu78gIO+7vyAg77u/ICBpZiAoIXRoaXMudmVyaWZ5U2lnbmF0dXJlKHNpZywgdGlt ZXN0cmluZyArICI6IiArIG5vbmNlICsgIjoiICsgYjY0ZGF0YSApICkgewoJCe+7vyAg77u/ICDv u78gIO+7vyAgdGhyb3cgbmV3IEVuY3J5cHRpb25FeGNlcHRpb24oIkludmFsaWQgc2VhbCIsICJT ZWFsIGludGVncml0eSBjaGVjayBmYWlsZWQiKTsKCQnvu78gIO+7vyAg77u/ICB977u/ICAKCQkJ ICAg77u/ICDvu78gIO+7vyAgcmV0dXJuIG5ldyBTdHJpbmcoRVNBUEkuZW5jb2RlcigpLmRlY29k ZUZyb21CYXNlNjQoYjY0ZGF0YSksICJVVEYtOCIpOwoJICAgIO+7vyAg77u/ICB9IGNhdGNoIChF bmNyeXB0aW9uRXhjZXB0aW9uIGUpIHsKCSAgICDvu78gIO+7vyAg77u/ICB0aHJvdyBlOwoJICAg IO+7vyAg77u/ICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewoJICAgIO+7vyAg77u/ICDvu78gIHRo cm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKCJJbnZhbGlkIHNlYWwiLCAiSW52YWxpZCBzZWFs OiIgKyBlLmdldE1lc3NhZ2UoKSwgZSk7CgkgICAg77u/ICDvu78gIH0KCe+7vyAgfQoKICAgIO+7 vyAgCgnvu78gIC8qKgoJICAgICDvu78gICoge0Bpbmhlcml0RG9jfQoJICAgICDvu78gICovCgnv u78gIHB1YmxpYyBib29sZWFuIHZlcmlmeVNlYWwoIFN0cmluZyBzZWFsICkgewoJ77u/ICDvu78g IHRyeSB7CgkgICAg77u/ICDvu78gIO+7vyAgdW5zZWFsKCBzZWFsICk7CgkgICAg77u/ICDvu78g IO+7vyAgcmV0dXJuIHRydWU7CgkgICAg77u/ICDvu78gIH0gY2F0Y2goIEVuY3J5cHRpb25FeGNl cHRpb24gZSApIHsKCSAgICDvu78gIO+7vyAg77u/ICByZXR1cm4gZmFsc2U7CgkgICAg77u/ICDv u78gIH0KCe+7vyAgfQogICAg77u/ICAKCe+7vyAgLyoqCgkgICAgIO+7vyAgKiB7QGluaGVyaXRE b2N9CgkgICAgIO+7vyAgKi8KCe+7vyAgcHVibGljIGxvbmcgZ2V0VGltZVN0YW1wKCkgewoJ77u/ ICDvu78gIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCe+7vyAgfQoKICAgIO+7vyAgLyoq Cgkg77u/ICAqIHtAaW5oZXJpdERvY30KCSDvu78gICovCgnvu78gIHB1YmxpYyBsb25nIGdldFJl bGF0aXZlVGltZVN0YW1wKCBsb25nIG9mZnNldCApIHsKCe+7vyAg77u/ICByZXR1cm4gbmV3IERh dGUoKS5nZXRUaW1lKCkgKyBvZmZzZXQ7Cgnvu78gIH0KCiAgICDvu78gIC8vIERJU0NVU1M6IFdo eSBleHBlcmltZW50YWw/IFdvdWxkIGhhdmUgdG8gYmUgYWRkZWQgdG8gRW5jcnlwdG9yIGludGVy ZmFjZQoJ77u/ICAvL++7vyAg77u/ICDvu78gIGJ1dCBvbmx5IDMgdGhpbmdzIEkgc2F3IHdyb25n IHdpdGggdGhpcyB3YXMgMSkgaXQgdXNlZCBITWFjTUQ1IGluc3RlYWQKCe+7vyAgLy/vu78gIO+7 vyAg77u/ICBvZiBITWFjU0hBMSAoc2VlIGRpc2N1c3Npb24gYmVsb3cpLCAyKSB0aGF0IHRoZSBI TWFjIGtleSBpcyB0aGUKCe+7vyAgLy/vu78gIO+7vyAg77u/ICBzYW1lIG9uZSB1c2VkIGZvciBl bmNyeXB0aW9uIChhbHNvIHNlZSBjb21tZW50cyksIGFuZCAzKSBpdCBjYXVnaHQKCe+7vyAgLy/v u78gIO+7vyAg77u/ICBvdmVybHkgYnJvYWQgZXhjZXB0aW9ucy4gSGVyZSBpdCBpcyB3aXRoIHRo ZXNlIHNwZWNpZmljIGFyZWFzCgnvu78gIC8v77u/ICDvu78gIO+7vyAgYWRkcmVzc2VkLCBidXQg bm8gdW5pdCB0ZXN0aW5nIGhhcyBiZWVuIGRvbmUgYXQgdGhpcyBwb2ludC4gLWt3dwogICAgLyoq CiAgICAgKiBDb21wdXRlIGFuIEhNQUMgZm9yIGEgU3RyaW5nLiAgRXhwZXJpbWVudGFsLgogICAg ICogQHBhcmFtIGlucHV077u/ICBUaGUgaW5wdXQgZm9yIHdoaWNoIHRvIGNvbXB1dGUgdGhlIEhN YWMuCiAgICAgKi8KICAgIC8qKioqKioqKioqKioqKioqKioqKgog77u/ICBwdWJsaWMgU3RyaW5n IGNvbXB1dGVITUFDKCBTdHJpbmcgaW5wdXQgKSB0aHJvd3MgRW5jcnlwdGlvbkV4Y2VwdGlvbiB7 CiDvu78gIO+7vyAgdHJ5IHsKIO+7vyAg77u/ICDvu78gIE1hYyBobWFjID0gTWFjLmdldEluc3Rh bmNlKCJITWFjU0hBMSIpOyAvLyBESVNDVVNTOiBDaGFuZ2VkIHRvIEhNYWNTSEExLiBNRDUgKmJh ZGx5KiBicm9rZW4KIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78g IO+7vyAg77u/ICDvu78gICAgIC8vICAgICAgICAgIFNIQTEgc2hvdWxkIHJlYWxseSBiZSBhdm9p ZGVkLCBidXQgdXNpbmcKIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDv u78gIO+7vyAg77u/ICDvu78gICAgIC8v77u/ICDvu78gICAgIGZvciBITUFDLVNIQTEgaXMgYWNj ZXB0YWJsZSBmb3Igbm93LiBQbGFuCiDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78g IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICAgICAvL++7vyAg77u/ICAgICB0byBtaWdyYXRlIHRv IFNIQS0yNTYgb3IgTklTVCByZXBsYWNlbWVudCBmb3IKIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAgIC8v77u/ICDvu78gICAgIFNI QTEgaW4gbm90IHRvbyBkaXN0YW50IGZ1dHVyZS4KIO+7vyAg77u/ICDvu78gIC8vIERJU0NVU1M6 IEFsc28gbm90IHJlY29tbWVuZGVkIHRoYXQgdGhlIEhNYWMga2V5IGlzIHRoZSBzYW1lIGFzIHRo ZSBvbmUKIO+7vyAg77u/ICDvu78gIC8v77u/ICDvu78gIO+7vyAgdXNlZCBmb3IgZW5jcnlwdGlv biAobmFtZWx5LCBFbmNyeXB0b3IuTWFzdGVyS2V5KS4gSWYgYW55dGhpbmcgaXQKIO+7vyAg77u/ ICDvu78gIC8v77u/ICDvu78gIO+7vyAgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBFbmNyeXB0b3Iu TWFzdGVyU2FsdCBmb3IgdGhlIEhNYWMga2V5LCBvcgog77u/ICDvu78gIO+7vyAgLy/vu78gIO+7 vyAg77u/ICBwZXJoYXBzIGEgZGVyaXZlZCBrZXkgYmFzZWQgb24gdGhlIG1hc3RlciBzYWx0LiAo T25lIGNvdWxkIHVzZQog77u/ICDvu78gIO+7vyAgLy/vu78gIO+7vyAg77u/ICBLZXlEZXJpdmF0 aW9uRnVuY3Rpb24uY29tcHV0ZURlcml2ZWRLZXkoKS4pCiDvu78gIO+7vyAg77u/ICAvLwog77u/ ICDvu78gIO+7vyAgYnl0ZVtdIHNhbHQgPSBFU0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5n ZXRNYXN0ZXJTYWx0KCk7CiDvu78gIO+7vyAg77u/ICBobWFjLmluaXQoIG5ldyBTZWNyZXRLZXlT cGVjKHNhbHQsICJITWFjU0hBMSIpICk777u/ICAvLyBXYXM677u/ICBobWFjLmluaXQoc2VjcmV0 S2V5U3BlYynvu78gIAog77u/ICDvu78gIO+7vyAgYnl0ZVtdIGluQnl0ZXM7CiDvu78gIO+7vyAg 77u/ICB0cnkgewog77u/ICDvu78gIO+7vyAg77u/ICBpbkJ5dGVzID0gaW5wdXQuZ2V0Qnl0ZXMo IlVURi04Iik7CiDvu78gIO+7vyAg77u/ICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhj ZXB0aW9uIGUpIHsKIO+7vyAg77u/ICDvu78gIO+7vyAgbG9nZ2VyLndhcm5pbmcoTG9nZ2VyLlNF Q1VSSVRZX0ZBSUxVUkUsICJjb21wdXRlSE1BQygpOiBDYW4ndCBmaW5kIFVURi04IGVuY29kaW5n OyB1c2luZyBkZWZhdWx0IGVuY29kaW5nIiwgZSk7CiDvu78gIO+7vyAg77u/ICDvu78gIGluQnl0 ZXMgPSBpbnB1dC5nZXRCeXRlcygpOwog77u/ICDvu78gIO+7vyAgfQog77u/ICDvu78gIO+7vyAg Ynl0ZVtdIGJ5dGVzID0gaG1hYy5kb0ZpbmFsKCBpbkJ5dGVzICk7CiDvu78gIO+7vyAg77u/ICBy ZXR1cm4gRVNBUEkuZW5jb2RlcigpLmVuY29kZUZvckJhc2U2NChieXRlcywgZmFsc2UpOwog77u/ ICDvu78gIH0gY2F0Y2ggKEludmFsaWRLZXlFeGNlcHRpb24gaWtlKSB7CiDvu78gIO+7vyAg77u/ ICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbigiRW5jcnlwdGlvbiBmYWlsdXJlIiwgIk11 c3QgaW5zdGFsbCB1bmxpbWl0ZWQgc3RyZW5ndGggY3J5cHRvIGV4dGVuc2lvbiBmcm9tIFN1biIs IGlrZSk7CiDvu78gICAgICB9IGNhdGNoIChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gZSkgewog 77u/ICAgICAg77u/ICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbigiQ291bGQgbm90IGNv bXB1dGUgSE1BQyIsICJDYW4ndCBmaW5kIEhNYWNTSEExIGFsZ29yaXRobS4gIiArCiDvu78gICAg ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg 77u/ICDvu78gIO+7vyAg77u/ICAiUHJvYmxlbSBjb21wdXRpbmcgSE1BQyBmb3IgIiArIGlucHV0 LCBlICk7CiDvu78gICAgICB9CiDvu78gIH0KICAgICoqKioqKioqKioqKioqKioqKioqLwoKICAg IC8qKgogICAgICogTG9nIGEgc2VjdXJpdHkgd2FybmluZyBldmVyeSBOdGggdGltZSBvbmUgb2Yg dGhlIGRlcHJlY2F0ZWQgZW5jcnlwdCBvcgogICAgICogZGVjcnlwdCBtZXRob2RzIGFyZSBjYWxs ZWQuICgnTicgaXMgaGFyZC1jb2RlZCB0byBiZSAyNSBieSBkZWZhdWx0LCBidXQKICAgICAqIG1h eSBiZSBjaGFuZ2VkIHZpYSB0aGUgc3lzdGVtIHByb3BlcnR5CiAgICAgKiB7QGNvZGUgRVNBUEku RW5jcnlwdG9yLndhcm5FdmVyeU50aFVzZX0uKSBJbiBvdGhlciB3b3Jkcywgd2UgbmFnCiAgICAg KiB0aGVtIHVudGlsIHRoZSBnaXZlIGluIGFuZCBjaGFuZ2UgaXQuIDstKQogICAgICoKICAgICAq IEBwYXJhbSB3aGVyZSBUaGUgc3RyaW5nICJlbmNyeXB0IiBvciAiZGVjcnlwdCIsIGNvcnJlc3Bv bmRpbmcgdG8gdGhlCiAgICAgKiAgICAgICAgICAgICAgbWV0aG9kIHRoYXQgaXMgYmVpbmcgbG9n Z2VkLgogICAgICogQHBhcmFtIG1zZyAgIFRoZSBtZXNzYWdlIHRvIGxvZy4KICAgICAqLwoJcHJp dmF0ZSB2b2lkIGxvZ1dhcm5pbmcoU3RyaW5nIHdoZXJlLCBTdHJpbmcgbXNnKSB7CglpbnQgY291 bnRlciA9IDA7CglpZiAoIHdoZXJlLmVxdWFscygiZW5jcnlwdCIpICkgewoJICAgIGNvdW50ZXIg PSBlbmNyeXB0Q291bnRlcisrOwoJICAgIHdoZXJlID0gIkphdmFFbmNyeXB0b3IuZW5jcnlwdCgp OiBbY291bnQ9IiArIGNvdW50ZXIgKyJdIjsKCX0gZWxzZSBpZiAoIHdoZXJlLmVxdWFscygiZGVj cnlwdCIpICkgewoJICAgIGNvdW50ZXIgPSBkZWNyeXB0Q291bnRlcisrOwoJICAgIHdoZXJlID0g IkphdmFFbmNyeXB0b3IuZGVjcnlwdCgpOiBbY291bnQ9IiArIGNvdW50ZXIgKyJdIjsKCX0gZWxz ZSB7CgkgICAgd2hlcmUgPSAiSmF2YUVuY3J5cHRvcjogVW5rbm93biBtZXRob2Q6ICI7Cgl9Cgkv LyBXZSBsb2cgdGhlIHZlcnkgZmlyc3QgdGltZSAobm90ZSB0aGUgdXNlIG9mIHBvc3QtaW5jcmVt ZW50IG9uIHRoZQoJLy8gY291bnRlcnMpIGFuZCB0aGVuIGV2ZXJ5IE50aCB0aW1lIHRoZXJlYWZ0 ZXIuIExvZ2dpbmcgZXZlcnkgc2luZ2xlCgkvLyB0aW1lIGlzIGxpa2VseSB0byBiZSB3YXkgdG9v IG11Y2ggbG9nZ2luZy4KCWlmICggKGNvdW50ZXIgJSBsb2dFdmVyeU50aFVzZSkgPT0gMCApIHsK CSAgICBsb2dnZXIud2FybmluZyhMb2dnZXIuU0VDVVJJVFlfRkFJTFVSRSwgd2hlcmUgKyBtc2cp OwoJfQogICAgfQoKICAgIHByaXZhdGUgS2V5RGVyaXZhdGlvbkZ1bmN0aW9uLlBSRl9BTEdPUklU SE1TIGdldFBSRihTdHJpbmcgbmFtZSkgeyAgICDvu78gIAoJICAgIO+7vyAg77u/ICBTdHJpbmcg cHJmTmFtZSA9IG51bGw7Cgnvu78gIO+7vyAgaWYgKCBuYW1lID09IG51bGwgKSB7CgkgICAg77u/ ICDvu78gIO+7vyAgcHJmTmFtZSA9IEVTQVBJLnNlY3VyaXR5Q29uZmlndXJhdGlvbigpLmdldEtE RlBzZXVkb1JhbmRvbUZ1bmN0aW9uKCk7CgkgICAg77u/ICDvu78gIH0gZWxzZSB7CgkgICAg77u/ ICDvu78gIO+7vyAgcHJmTmFtZSA9IG5hbWU7CgkgICAg77u/ICDvu78gIH0KCe+7vyAg77u/ICBL ZXlEZXJpdmF0aW9uRnVuY3Rpb24uUFJGX0FMR09SSVRITVMgcHJmID0gS2V5RGVyaXZhdGlvbkZ1 bmN0aW9uLmNvbnZlcnROYW1lVG9QUkYocHJmTmFtZSk7Cgnvu78gIO+7vyAgcmV0dXJuIHByZjsK ICAgIH0KCiAgICBwcml2YXRlIEtleURlcml2YXRpb25GdW5jdGlvbi5QUkZfQUxHT1JJVEhNUyBn ZXREZWZhdWx0UFJGKCkgewoJ77u/ICDvu78gIFN0cmluZyBwcmZOYW1lID0gRVNBUEkuc2VjdXJp dHlDb25maWd1cmF0aW9uKCkuZ2V0S0RGUHNldWRvUmFuZG9tRnVuY3Rpb24oKTsKCe+7vyAg77u/ ICByZXR1cm4gZ2V0UFJGKHByZk5hbWUpOwogICAgfQoKICAgIC8vIFByaXZhdGUgaW50ZXJmYWNl IHRvIGNhbGwgRVNBUEkncyBLREYgdG8gZ2V0IGtleSBmb3IgZW5jcnlwdGlvbiBvciBhdXRoZW50 aWNpdHkuCiAgICBwcml2YXRlIFNlY3JldEtleSBjb21wdXRlRGVyaXZlZEtleShpbnQga2RmVmVy c2lvbiwgS2V5RGVyaXZhdGlvbkZ1bmN0aW9uLlBSRl9BTEdPUklUSE1TIHByZiwKCQkJCQnvu78g IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICBTZWNyZXRLZXkga2RrLCBp bnQga2V5U2l6ZSwgU3RyaW5nIHB1cnBvc2UpCgnvu78gIHRocm93cyBOb1N1Y2hBbGdvcml0aG1F eGNlcHRpb24sIEludmFsaWRLZXlFeGNlcHRpb24sIEVuY3J5cHRpb25FeGNlcHRpb24KICAgIHsK Ce+7vyAgLy8gVGhlc2UgcmVhbGx5IHNob3VsZCBiZSB0dXJuZWQgaW50byBhY3R1YWwgcnVudGlt ZSBjaGVja3MgYW5kIGFuCgkgICAg77u/ICAvLyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gc2hv dWxkIGJlIHRocm93biBpZiB0aGV5IGFyZSB2aW9sYXRlZC4KCSAgICDvu78gIC8vIEJ1dCB0aGlz IHNob3VsZCBiZSBPSyBzaW5jZSB0aGlzIGlzIGEgcHJpdmF0ZSBtZXRob2QuIEFsc28sIHRoaXMg bWV0aG9kIHdpbGwKCSAgICDvu78gIC8vIGJlIGNhbGxlZCBxdWl0ZSBvZnRlbiBzbyBhc3NlcnRp b25zIGFyZSBhIGJpZyB3aW4gYXMgdGhleSBjYW4gYmUgZGlzYWJsZWQgb3IKCSAgICDvu78gIC8v IGVuYWJsZWQgYXQgd2lsbC4KCSAgICDvu78gIGFzc2VydCBwcmYgIT0gbnVsbCA6ICJQc2V1ZG8g UmFuZG9tIEZ1bmN0aW9uIGZvciBLREYgY2Fubm90IGJlIG51bGwiOwoJ77u/ICBhc3NlcnQga2Rr ICE9IG51bGwgOiAiS2V5IGRlcml2YXRpb24ga2V5IGNhbm5vdCBiZSBudWxsLiI7Cgnvu78gIC8v IFdlIHdvdWxkIGNob29zZSBhIGxhcmdlciBtaW5pbXVtIGtleSBzaXplLCBidXQgd2Ugd2FudCB0 byBiZQoJICAgIO+7vyAgLy8gYWJsZSB0byBhY2NlcHQgREVTIGZvciBsZWdhY3kgZW5jcnlwdGlv biBuZWVkcy4gTklTVCBzYXlzIDExMi1iaXRzIGlzIG1pbi4gSWYgbGVzcyB0aGFuIHRoYXQsCgkg ICAg77u/ICAvLyB3ZSBwcmludCB3YXJuaW5nLgoJICAgIO+7vyAgYXNzZXJ0IGtleVNpemUgPj0g NTYgOiAiS2V5IGhhcyBzaXplIG9mICIgKyBrZXlTaXplICsgIiwgd2hpY2ggaXMgbGVzcyB0aGFu IG1pbmltdW0gb2YgNTYtYml0cy4iOwoJ77u/ICBhc3NlcnQgKGtleVNpemUgJSA4KSA9PSAwIDog IktleSBzaXplICgiICsga2V5U2l6ZSArICIpIG11c3QgYmUgYSBldmVuIG11bHRpcGxlIG9mIDgt Yml0cy4iOwoJ77u/ICBhc3NlcnQgcHVycG9zZSAhPSBudWxsIDogIlB1cnBvc2UgY2Fubm90IGJl IG51bGwuIFNob3VsZCBiZSAnZW5jcnlwdGlvbicgb3IgJ2F1dGhlbnRpY2l0eScuIjsKCe+7vyAg YXNzZXJ0IHB1cnBvc2UuZXF1YWxzKCJlbmNyeXB0aW9uIikgfHwgcHVycG9zZS5lcXVhbHMoImF1 dGhlbnRpY2l0eSIpIDoKCe+7vyAg77u/ICAiUHVycG9zZSBtdXN0IGJlIFwiZW5jcnlwdGlvblwi IG9yIFwiYXV0aGVudGljaXR5XCIuIjsKCgnvu78gIEtleURlcml2YXRpb25GdW5jdGlvbiBrZGYg PSBuZXcgS2V5RGVyaXZhdGlvbkZ1bmN0aW9uKHByZik7Cgnvu78gIGlmICgga2RmVmVyc2lvbiAh PSAwICkgewoJICAgIO+7vyAg77u/ICBrZGYuc2V0VmVyc2lvbihrZGZWZXJzaW9uKTsKCSAgICDv u78gIH0KCe+7vyAgcmV0dXJuIGtkZi5jb21wdXRlRGVyaXZlZEtleShrZGssIGtleVNpemUsIHB1 cnBvc2UpOwogICAgfQoKICAgIC8vIEdldCBhbGwgdGhlIGFsZ29yaXRobXMgd2Ugd2lsbCBiZSB1 c2luZyBmcm9tIEVTQVBJLnByb3BlcnRpZXMuCiAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNldHVw QWxnb3JpdGhtcygpIHsKCS8vIHNldHVwIGFsZ29yaXRobXMKCWVuY3J5cHRBbGdvcml0aG0gPSBF U0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRFbmNyeXB0aW9uQWxnb3JpdGhtKCk7Cglz aWduYXR1cmVBbGdvcml0aG0gPSBFU0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXREaWdp dGFsU2lnbmF0dXJlQWxnb3JpdGhtKCk7CglyYW5kb21BbGdvcml0aG0gPSBFU0FQSS5zZWN1cml0 eUNvbmZpZ3VyYXRpb24oKS5nZXRSYW5kb21BbGdvcml0aG0oKTsKCWhhc2hBbGdvcml0aG0gPSBF U0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRIYXNoQWxnb3JpdGhtKCk7CgloYXNoSXRl cmF0aW9ucyA9IEVTQVBJLnNlY3VyaXR5Q29uZmlndXJhdGlvbigpLmdldEhhc2hJdGVyYXRpb25z KCk7CgllbmNvZGluZyA9IEVTQVBJLnNlY3VyaXR5Q29uZmlndXJhdGlvbigpLmdldENoYXJhY3Rl ckVuY29kaW5nKCk7CgllbmNyeXB0aW9uS2V5TGVuZ3RoID0gRVNBUEkuc2VjdXJpdHlDb25maWd1 cmF0aW9uKCkuZ2V0RW5jcnlwdGlvbktleUxlbmd0aCgpOwoJc2lnbmF0dXJlS2V5TGVuZ3RoID0g RVNBUEkuc2VjdXJpdHlDb25maWd1cmF0aW9uKCkuZ2V0RGlnaXRhbFNpZ25hdHVyZUtleUxlbmd0 aCgpOwogICAgfQoKICAgIC8vIFNldCB1cCBzaWduaW5nIGtleSBwYWlyIHVzaW5nIHRoZSBtYXN0 ZXIgcGFzc3dvcmQgYW5kIHNhbHQuIENhbGxlZCAob25jZSkKICAgIC8vIGZyb20gdGhlIEphdmFF bmNyeXB0b3IgQ1RPUi4KICAgIHByaXZhdGUgc3RhdGljIHZvaWQgaW5pdEtleVBhaXIoU2VjdXJl UmFuZG9tIHBybmcpIHRocm93cyBOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gewoJU3RyaW5nIHNp Z0FsZyA9IHNpZ25hdHVyZUFsZ29yaXRobS50b0xvd2VyQ2FzZSgpOwoJaWYgKCBzaWdBbGcuZW5k c1dpdGgoIndpdGhkc2EiKSApIHsKCSAgICAvLwoJICAgIC8vIEFkbWl0dGVkbHksIHRoaXMgaXMg YSBrbHVkZ2UuIEhvd2V2ZXIgZm9yIFN1biBKQ0UsIGV2ZW4gdGhvdWdoCgkgICAgLy8gIlNIQTF3 aXRoRFNBIiBpcyBhIHZhbGlkIHNpZ25hdHVyZSBhbGdvcml0aG0gbmFtZSwgaWYgb25lIGNhbGxz CgkgICAgLy8gICAgICBLZXlQYWlyR2VuZXJhdG9yIGtwZyA9IEtleVBhaXJHZW5lcmF0b3IuZ2V0 SW5zdGFuY2UoIlNIQTF3aXRoRFNBIik7CgkgICAgLy8gdGhhdCB3aWxsIHRocm93IGEgTm9TdWNo QWxnb3JpdGhtRXhjZXB0aW9uIHdpdGggYW4gZXhjZXB0aW9uCgkgICAgLy8gbWVzc2FnZSBvZiAi U0hBMXdpdGhEU0EgS2V5UGFpckdlbmVyYXRvciBub3QgYXZhaWxhYmxlIi4gU2luY2UKCSAgICAv LyBTSEExd2l0aERTQSBhbmQgRFNBIGtleXMgc2hvdWxkIGJlIGlkZW50aWNhbCwgd2UgdXNlICJE U0EiCgkgICAgLy8gaW4gdGhlIGNhc2UgdGhhdCBTSEExd2l0aERTQSBvciBTSEF3aXRoRFNBIHdh cyBzcGVjaWZpZWQuIFRoaXMgaXMKCSAgICAvLyBhbGwganVzdCB0byBtYWtlIHRoZXNlIDIgd29y ayBhcyBleHBlY3RlZC4gU2lnaC4gKE5vdGU6CgkgICAgLy8gdGhpcyB3YXMgdGVzdGVkIHdpdGgg SkRLIDEuNi4wXzIxLCBidXQgbGlrZWx5IGZhaWxzIHdpdGggZWFybGllcgoJICAgIC8vIHZlcnNp b25zIG9mIHRoZSBKREsgYXMgd2VsbC4pCgkgICAgLy8KCSAgICBzaWdBbGcgPSAiRFNBIjsKCX0g ZWxzZSBpZiAoIHNpZ0FsZy5lbmRzV2l0aCgid2l0aHJzYSIpICkgewoJICAgIC8vIERpdHRvIGZv ciBSU0EuCgkgICAgc2lnQWxnID0gIlJTQSI7Cgl9CglLZXlQYWlyR2VuZXJhdG9yIGtleUdlbiA9 IEtleVBhaXJHZW5lcmF0b3IuZ2V0SW5zdGFuY2Uoc2lnQWxnKTsKCWtleUdlbi5pbml0aWFsaXpl KHNpZ25hdHVyZUtleUxlbmd0aCwgcHJuZyk7CglLZXlQYWlyIHBhaXIgPSBrZXlHZW4uZ2VuZXJh dGVLZXlQYWlyKCk7Cglwcml2YXRlS2V5ID0gcGFpci5nZXRQcml2YXRlKCk7CglwdWJsaWNLZXkg PSBwYWlyLmdldFB1YmxpYygpOwogICAgfQp9Cgo= --bcaec5485cf871279404af367d27 Content-Type: text/x-c++src; charset=UTF-8; name="efbbbf-strip.cpp" Content-Disposition: attachment; filename="efbbbf-strip.cpp" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gtqdod1f1 Ly8gZysrIC1nIC1PMiBlZmJiYmYtc3RyaXAuY3BwIC1vIGVmYmJiZi1zdHJpcC5leGUKCiNpbmNs dWRlIDxpb3N0cmVhbT4KdXNpbmcgc3RkOjpjb3V0Owp1c2luZyBzdGQ6OmNlcnI7CnVzaW5nIHN0 ZDo6ZW5kbDsKdXNpbmcgc3RkOjppb3NfYmFzZTsKCiNpbmNsdWRlIDxmc3RyZWFtPgp1c2luZyBz dGQ6Omlmc3RyZWFtOwp1c2luZyBzdGQ6Om9mc3RyZWFtOwoKI2luY2x1ZGUgPHN0cmluZz4KdXNp bmcgc3RkOjpzdHJpbmc7CgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgc3RkOjpzdHJsZW47Cgpz dGF0aWMgY29uc3Qgc3RyaW5nIEVGQkJCRiA9IHN0cmluZygiXHhlZlx4YmJceGJmIik7CnN0YXRp YyBjb25zdCB1bnNpZ25lZCBpbnQgRUZCQkJGX0xFTiA9IDM7Cgpib29sIFN0cmlwKGNvbnN0IGNo YXIqIGZpbGVuYW1lKTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKICBpZihh cmdjID09IDEpCiAgewogICAgY2VyciA8PCAiU3RyaXBzIHRleHQgZmlsZXMgb2YgVVRGLTggYnl0 ZSBvcmRlciBtYXJrcyAoQk9NKSBpbiBwbGFjZS4iIDw8IGVuZGw7CiAgICBjZXJyIDw8ICIgIFVz YWdlOiBlZmJiYmYtc3RyaXAuZXhlIDx0ZXh0IGZpbGU+IFs8dGV4dCBmaWxlPiDigKZdIiA8PCBl bmRsOwogICAgcmV0dXJuIDE7CiAgfQoKICBmb3IodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgKHVu c2lnbmVkIGludClhcmdjOyBpKyspCiAgewogICAgU3RyaXAoYXJndltpXSk7CiAgfQp9Cgpib29s IFN0cmlwKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQp7CiAgaWYgKCAhZmlsZW5hbWUgfHwgMCA9PSBz dHJsZW4oZmlsZW5hbWUpICkKICAgIHJldHVybiBmYWxzZTsKCiAgLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIC8vIFJlYWQgdGhlIGZp bGUKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vCgogIGlmc3RyZWFtIGlmaWxlKGZpbGVuYW1lKTsKICBpZiggIWlmaWxlLmdvb2QoKSAp CiAgewogICAgY2VyciA8PCAiVW5hYmxlIHRvIG9wZW4gIiA8PCBmaWxlbmFtZSA8PCAiIGZvciBy ZWFkaW5nIiA8PCBlbmRsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICAKICAvLyBSZXNlcnZlIHNp emUgdG8gc2F2ZSBvbiBhbGxvY2F0aW9ucwogIGlmaWxlLnNlZWtnKDAsIGlvc19iYXNlOjplbmQp OwogIGlmKCAhaWZpbGUuZ29vZCgpICkKICB7CiAgICBjZXJyIDw8ICJGYWlsZWQgdG8gc2VlayB0 byBlbmQgb2YgIiA8PCBmaWxlbmFtZSA8PCBlbmRsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAg c2l6ZV90IGZzaXplID0gaWZpbGUudGVsbGcoKTsKICBpZiggIWlmaWxlLmdvb2QoKSApCiAgewog ICAgY2VyciA8PCAiRmFpbGVkIHRvIGRldGVybWluZSBzaXplIG9mICIgPDwgZmlsZW5hbWUgPDwg ZW5kbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmaWxlLnNlZWtnKDAsIGlvc19iYXNlOjpi ZWcpOwogIGlmKCAhaWZpbGUuZ29vZCgpICkKICB7CiAgICBjZXJyIDw8ICJGYWlsZWQgdG8gc2Vl ayB0byBiZWdpbm5pbmcgb2YgIiA8PCBmaWxlbmFtZSA8PCBlbmRsOwogICAgcmV0dXJuIGZhbHNl OwogIH0KCiAgc3RyaW5nIHN0ciwgbGluZTsKICBzdHIucmVzZXJ2ZShmc2l6ZSk7CgogIC8vIFJl YWQgdGhlIGZpbGUgbGluZSBieSBsaW5lLiBOb3Qgc3VyZSB3aHkgcmVhZGluZyBpbiBvbmUgZmVs bCBzd29vcCBmYWlsZWQuLi4uCiAgd2hpbGUoc3RkOjpnZXRsaW5lKGlmaWxlLCBsaW5lKSkKICB7 CiAgICBzdHIgKz0gbGluZTsKICAgIHN0ciArPSAiXG4iOwoKICAgIGlmKCAhaWZpbGUuZ29vZCgp ICkKICAgICAgYnJlYWs7CiAgfQoKICBpZmlsZS5jbG9zZSgpOwoKICAvLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgLy8gRml4IHRoZSBm aWxlCiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLwoKICBzaXplX3QgY291bnQgPSAwOwogIHN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IDE7 CiAgd2hpbGUoIChwb3MgPSBzdHIuZmluZChFRkJCQkYsIHBvcykpICE9IHN0cmluZzo6bnBvcyAp CiAgewogICAgIHN0ci5yZXBsYWNlKHBvcywgRUZCQkJGX0xFTiwgIiIpOwogICAgIGNvdW50Kys7 CiAgfQoKICBpZigwID09IGNvdW50KQogIHsKICAgIGNvdXQgPDwgZmlsZW5hbWUgPDwgIjogbm8g cmVwbGFjZW1lbnRzIiA8PCBlbmRsOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgLy8gV3Jp dGUgdGhlIGZpbGUKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vCgogIG9mc3RyZWFtIG9maWxlKGZpbGVuYW1lLCBpb3NfYmFzZTo6b3V0 IHwgaW9zX2Jhc2U6OnRydW5jKTsKICBpZiggIW9maWxlLmdvb2QoKSApCiAgewogICAgY2VyciA8 PCAiVW5hYmxlIHRvIG9wZW4gIiA8PCBmaWxlbmFtZSA8PCAiIGZvciB3cml0aW5nIiA8PCBlbmRs OwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgb2ZpbGUud3JpdGUoc3RyLmRhdGEoKSwgc3RyLnNp emUoKSk7CiAgaWYoICFvZmlsZS5nb29kKCkgKQogIHsKICAgIGNlcnIgPDwgIkZhaWxlZCB0byB3 cml0ZSAiIDw8IGZpbGVuYW1lIDw8IGVuZGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBvZmls ZS5jbG9zZSgpOwoKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vCiAgLy8gQm9vayBrZWVwaW5nCiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKICBjb3V0IDw8IGZpbGVuYW1l IDw8ICI6ICIgPDwgY291bnQgPDwgIiByZXBsYWNlbWVudHMiIDw8IGVuZGw7CiAgcmV0dXJuIHRy dWU7Cn0KCg== --bcaec5485cf871279404af367d27-- From debbugs-submit-bounces@debbugs.gnu.org Wed Oct 19 19:56:36 2011 Received: (at 9747) by debbugs.gnu.org; 19 Oct 2011 23:56:36 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RGfzw-0007yZ-L7 for submit@debbugs.gnu.org; Wed, 19 Oct 2011 19:56:36 -0400 Received: from smarty.dreamhost.com ([208.113.175.8]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RGfzt-0007yP-VR for 9747@debbugs.gnu.org; Wed, 19 Oct 2011 19:56:35 -0400 Received: from ps18281.dreamhostps.com (ps18281.dreamhost.com [69.163.218.105]) by smarty.dreamhost.com (Postfix) with ESMTP id A8D616E8068; Wed, 19 Oct 2011 16:55:27 -0700 (PDT) Received: from localhost (ps18281.dreamhostps.com [69.163.218.105]) by ps18281.dreamhostps.com (Postfix) with ESMTP id D1587AC9400A; Wed, 19 Oct 2011 16:55:26 -0700 (PDT) From: Juri Linkov To: noloader@gmail.com Subject: Re: bug#9747: C-x h TAB and M-x untabify Organization: JURTA References: Date: Thu, 20 Oct 2011 02:32:14 +0300 In-Reply-To: (Jeffrey Walton's message of "Thu, 13 Oct 2011 19:27:54 -0400") Message-ID: <87zkgwsfo1.fsf@mail.jurta.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.90 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.7 (--) X-Debbugs-Envelope-To: 9747 Cc: 9747@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.7 (--) > I often use C-x h TAB and M-x untabify to format C, C++, and Java code. > > If a document has an errant UTF-8 byte order mark (a UTF-8 BOM is EF > BB BF), Emacs cannot always format the source file. > > For example, the attached Java file (JavaEncryptor.java-backup) has > 1845 BOMs sprinkled throughout. I'm not sure what editor put them in, > but Emacs does not properly handle some operations with them present. > If I strip the errant BOMs with the attached program > (efbbbf-strip.cpp), Emacs will properly format the file. "BYTE ORDER MARK" is the old name of the U+FEFF character. The new name is "ZERO WIDTH NO-BREAK SPACE". You can add to your .emacs something like: (eval-after-load "cc-mode" '(progn (modify-syntax-entry ?\uFEFF " " java-mode-syntax-table))) and the most of indentation code will work correctly. However, in some places in core packages we need to replace such code (skip-chars-forward " \t") with (skip-chars-forward " \t\uFEFF") to take into account other whitespace characters. From debbugs-submit-bounces@debbugs.gnu.org Fri Mar 24 21:20:16 2017 Received: (at control) by debbugs.gnu.org; 25 Mar 2017 01:20:16 +0000 Received: from localhost ([127.0.0.1]:42961 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1craNM-0002Ry-A0 for submit@debbugs.gnu.org; Fri, 24 Mar 2017 21:20:16 -0400 Received: from mail-it0-f54.google.com ([209.85.214.54]:38835) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1craNK-0002Rn-L8 for control@debbugs.gnu.org; Fri, 24 Mar 2017 21:20:15 -0400 Received: by mail-it0-f54.google.com with SMTP id y18so6527454itc.1 for ; Fri, 24 Mar 2017 18:20:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:mime-version; bh=+pQEdKgYht+yuaCFDIKxV00DTOhpZhQt1AbRN9Thu+I=; b=Z5C2Ox9r1Vocn9pUPf9eVSLG319CTnIi6D2M59ir30sNDmC/Lj9cBO9MSWVwlCgwWT fwYEH5nAvSAkr7Oqgm52UTbH2WdgnKnEP1tuLzgj9meQNMv7bEiRjRZ7EQGnRSWFF2G9 3Mr2UbknpJIOcU+uuXPTNK01Mi0dOPWxHG33bimwtZ+UZdN7zqegzbvb2FD6gyPpaNzx Q8H0i4ipueAvIETtdwGoMycbTBgpmw/PQaNQC4Oba18NWJiIQja8KWUYLBWGb3HNWF47 GzmyYMRHDEc8+EogiRnm4+BFMkoImsB79zsXIEUgkpF6UtNUDsj9fie6EGd2RddjnmEh C+Zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :mime-version; bh=+pQEdKgYht+yuaCFDIKxV00DTOhpZhQt1AbRN9Thu+I=; b=DrjDQRWRV97cuCMjYJ0+EWEQSs8KTeyCFqdhYxJpkjIn0Fso9c8dRXlT90Q5D2SXei Is3hiCDo3OPMhUGY2KXCAnZqujBcZI6V+WZLmW0IZ0tAM8s0fT9velaI6pPfEytNafaE DuDIWGN86wAeqLFh0++rYjEB3lMmky5Wl52sR5dlqHDhLG0RD7FsUPDBiC6Bx3Lzv7Rl F6hBFBPcxivMCuswoipte53uktErAk9DeiTCv6ggMztHeWi+p1YQsGCv/FTiXzLSsBR3 pWjoEQ9TDccRg7CyWBgRQgP/hubWrkdC0eRxbs5ZFphBtILnEa0ihjGwbHmw0KrZXnCu g4Qw== X-Gm-Message-State: AFeK/H30frzyhSVPwy2Xg8Hyb+BXaX5fKPO67EnRJ54g7qqh8Mae75yPVHirSt0sH4UMhA== X-Received: by 10.107.145.87 with SMTP id t84mr12153374iod.64.1490404809038; Fri, 24 Mar 2017 18:20:09 -0700 (PDT) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id 62sm77748itl.1.2017.03.24.18.20.08 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 24 Mar 2017 18:20:08 -0700 (PDT) From: npostavs@users.sourceforge.net To: control@debbugs.gnu.org Subject: control message for bug #9747 Date: Fri, 24 Mar 2017 21:21:32 -0400 Message-ID: <87bmsq2lsz.fsf@users.sourceforge.net> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) retitle 9747 M-x untabify with "ZERO WIDTH NO-BREAK SPACE" (aka "BYTE ORDER MARK") quit From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 16 09:58:03 2021 Received: (at 9747) by debbugs.gnu.org; 16 Jul 2021 13:58:03 +0000 Received: from localhost ([127.0.0.1]:51949 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m4OLq-0004B6-W8 for submit@debbugs.gnu.org; Fri, 16 Jul 2021 09:58:03 -0400 Received: from quimby.gnus.org ([95.216.78.240]:41526) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m4OLp-0004Aa-Ji for 9747@debbugs.gnu.org; Fri, 16 Jul 2021 09:58:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=jKihzepoYDnpQLNOqhbKE2bwLvL03XP8Q3ikRSfLjho=; b=sGD1UytGIM9swmsNakK2/RfGdz 5tAxWKAWdFUzts1pmUhIWTMWs2y3QGK40TJWoVjv0NU3ynDdbPwULa0/H0WplADpWfvIzcvbn1KNa RIc6vnHQ+ZBjqAyajHptasLvzd7TLZXLRKjMKXiibCrr2LkxAqWEPpepmZ9z1zHcXuQQ=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=elva) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m4OLg-0004y5-RP; Fri, 16 Jul 2021 15:57:55 +0200 From: Lars Ingebrigtsen To: Juri Linkov Subject: Re: bug#9747: M-x untabify with "ZERO WIDTH NO-BREAK SPACE" (aka "BYTE ORDER MARK") References: <87zkgwsfo1.fsf@mail.jurta.org> X-Now-Playing: John T. Gast's _Inna Babalon_: "Jah Guidance" Date: Fri, 16 Jul 2021 15:57:52 +0200 In-Reply-To: <87zkgwsfo1.fsf@mail.jurta.org> (Juri Linkov's message of "Thu, 20 Oct 2011 02:32:14 +0300") Message-ID: <87sg0e744f.fsf_-_@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Juri Linkov writes: >> I often use C-x h TAB and M-x untabify to format C, C++, and Java code. >> >> If a document has an errant UTF-8 byte order mark (a UTF-8 BOM is EF >> BB BF), Emacs cannot always format the source f [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 9747 Cc: noloader@gmail.com, 9747@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Juri Linkov writes: >> I often use C-x h TAB and M-x untabify to format C, C++, and Java code. >> >> If a document has an errant UTF-8 byte order mark (a UTF-8 BOM is EF >> BB BF), Emacs cannot always format the source file. >> >> For example, the attached Java file (JavaEncryptor.java-backup) has >> 1845 BOMs sprinkled throughout. I'm not sure what editor put them in, >> but Emacs does not properly handle some operations with them present. >> If I strip the errant BOMs with the attached program >> (efbbbf-strip.cpp), Emacs will properly format the file. > > "BYTE ORDER MARK" is the old name of the U+FEFF character. > The new name is "ZERO WIDTH NO-BREAK SPACE". So I don't think there's anything here to fix on the Emacs side -- zero-width spaces aren't necessarily supposed to be handled identically to other white space here. So I'm closing this bug report. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 16 09:58:09 2021 Received: (at control) by debbugs.gnu.org; 16 Jul 2021 13:58:09 +0000 Received: from localhost ([127.0.0.1]:51952 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m4OLx-0004BO-7j for submit@debbugs.gnu.org; Fri, 16 Jul 2021 09:58:09 -0400 Received: from quimby.gnus.org ([95.216.78.240]:41544) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m4OLv-0004Aq-5e for control@debbugs.gnu.org; Fri, 16 Jul 2021 09:58:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Subject:From:To:Message-Id:Date:Sender:Reply-To:Cc: MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=lEzwvN6JQPZoKQPUctAwiRw3gCEVRYvUAw6TkS4gTNo=; b=NnPF8m3mhzvudkpPWaMpeMrmd3 9fNKXXr2ocid3xIRAfko8sygk8hCPK7W2gffndfwj2gi9yzlryO0UbPRvR+tJ2ziASKH0ND0K1fyO TBUjeE1xCAPadleI+4+kv5DZvw2Sk97rMhvHq/hhVt2H9XPcftlIn22wH3UGpvmSCq2Y=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=elva) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m4OLn-0004yF-Ge for control@debbugs.gnu.org; Fri, 16 Jul 2021 15:58:01 +0200 Date: Fri, 16 Jul 2021 15:57:59 +0200 Message-Id: <87r1fy7448.fsf@gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #9747 X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: close 9747 quit Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) close 9747 quit From unknown Tue Jun 24 17:24:54 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sat, 14 Aug 2021 11:24:05 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator