From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19024 invoked by alias); 13 Sep 2011 17:20:42 -0000 Received: (qmail 19008 invoked by uid 22791); 13 Sep 2011 17:20:38 -0000 X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RP_MATCHES_RCVD,SPF_HELO_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.67) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 13 Sep 2011 17:20:21 +0000 Received: from wpaz17.hot.corp.google.com (wpaz17.hot.corp.google.com [172.24.198.81]) by smtp-out.google.com with ESMTP id p8DHKIR1031714 for ; Tue, 13 Sep 2011 10:20:18 -0700 Received: from qyc1 (qyc1.prod.google.com [10.241.81.129]) by wpaz17.hot.corp.google.com with ESMTP id p8DHJfsJ007097 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Tue, 13 Sep 2011 10:20:17 -0700 Received: by qyc1 with SMTP id 1so2914370qyc.18 for ; Tue, 13 Sep 2011 10:20:17 -0700 (PDT) Received: by 10.224.217.194 with SMTP id hn2mr843805qab.11.1315934416968; Tue, 13 Sep 2011 10:20:16 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.217.194 with SMTP id hn2mr843798qab.11.1315934416753; Tue, 13 Sep 2011 10:20:16 -0700 (PDT) Received: by 10.224.80.201 with HTTP; Tue, 13 Sep 2011 10:20:16 -0700 (PDT) In-Reply-To: <834o0l5sic.fsf@gnu.org> References: <20110909183636.444932461B1@ruffy.mtv.corp.google.com> <834o0l5sic.fsf@gnu.org> Date: Tue, 13 Sep 2011 17:40:00 -0000 Message-ID: Subject: Re: [RFA, doc RFA] Add gdb.add_command_alias From: Doug Evans To: Eli Zaretskii Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf3005dc9075546404acd5db75 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-09/txt/msg00217.txt.bz2 --20cf3005dc9075546404acd5db75 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 7664 On Fri, Sep 9, 2011 at 2:13 PM, Eli Zaretskii wrote: >> Date: Fri, =A09 Sep 2011 11:36:36 -0700 (PDT) >> From: dje@google.com (Doug Evans) >> >> Per discussion on IRC, here is a patch to add support for adding >> command aliases. > > I wish people would discuss such issues here, not on IRC. =A0These > discussions should be recorded, for one thing. Whatever additional discussion one wants to have we can have here. No worries. > Me, I don't understand the need for this feature, especially not why > it should be a Python-only feature. =A0Moreover, why do we need to have > this, when one can easily write a command that just calls an existing > one, to have the same effect. Conversely, why does gdb have cli-decode.c:add_com_alias? IOW, it's more than just writing a command that just calls an existing one. Python is our extension language and we want to, for example, allow users to add new functionality to gdb that is on par with gdb's own internal functionality. In the case of gdb commands, take for example the "run" and "print" commands. There are alias commands of these ("r" and= "p") for good reasons. This patch extends this capability to commands created in python. [For completeness sake, There is still a capability that internal gdb commands have that python com= mands don't: one can add an alias for more than just simple commands. E.g. valprint.c:2177: add_alias_cmd ("p", "print", no_class, 1, &setlist); valprint.c:2184: add_alias_cmd ("p", "print", no_class, 1, &showlist); We've been extending python incrementally, and I'm doing that here as well.] btw, I've been debating whether to implement command aliases with a python object (akin to how gdb commands are implemented with gdb.Command). It's not clear an object-oriented approach for command aliases really brings any functional utility to the table. It would be consistent with how commands are treated, at the expense of extra complexity. I'm open to thoughts on which way to go. I've also been debating whether to use the name define_command_alias instead of add_command_alias. I don't have a strong enough preference to not go with what gdb uses intern= ally. >> valid_cmd_name_p is more restrictive than it could be. >> E.g. gdb allows a user-defined command named "42", but >> "it's easier to relax restrictions than it is to impose them after the f= act", >> so I'm going with this. > > Sorry, I don't understand what this is about. =A0I guess that was again > discussed "on IRC" or wherever. Actually it's just a restriction I've added on my own. I'm not entirely comfortable with gdb's allowing one to define user-commands like that, and I don't want to allow this in python if I don't have to. At least not in the first pass. If someone comes up with a compelling argument for relaxing what valid_cmd_name_p accepts we can cross that bridge at that time. >> + =A0 NOTE: TUI has a few special commands, +, <, >. >> + =A0 We don't watch for those here. =A0*/ > > Why not? =A0And what does that mean in terms of user expectations? This is another case of not wanting to have valid_cmd_name_p accept as legitimate names I'm not comfortable with. At least not in the first pass. As far as user expectation goes, I don't see a problem. What are valid command names is documented, and the current set of valid names is completely within reason IMO. [I was thinking of disallowing "-foo", but didn't have a strong enough opinion so I left it.] Note that we *can* relax things later if a compelling argument presents itself, I don't mind taking these particular kinds of things one step at a time (and often prefer it). IWBN to allow "!" be an alias for shell, for example, but gdb currently doesn't allow it. What special characters are valid and what are not, and why not? That discussion needn't block this. [For completeness sake, Having gdb.Command validate the command name is left for another patch. E.g., I can define a command named "!" and it will appear in "help" output, but I can't execute it. If/when we fix that we can relax valid_cmd_name_p: again, I don't mind taking these particular kinds of things one step at a time. bash$ cat foo.py import gdb class PlayCommand (gdb.Command): """Command to play with.""" def __init__(self): super(PlayCommand, self).__init__("!", gdb.COMMAND_OBSCURE) def invoke(self, arg, from_tty): """GDB calls this to perform the command.""" gdb.execute("shell %s" % arg) PlayCommand() class Play2Command (gdb.Command): """Command to play with.""" def __init__(self): super(Play2Command, self).__init__("bang", gdb.COMMAND_OBSCURE) def invoke(self, arg, from_tty): """GDB calls this to perform the command.""" gdb.execute("shell %s" % arg) Play2Command() bash$ gdb (gdb) source foo.py (gdb) help obscure Obscure features. List of commands: ! -- Command to play with bang -- Command to play with checkpoint -- Fork a duplicate process (experimental) compare-sections -- Compare section data on target to the exec file complete -- List the completions for the rest of the line as a command monitor -- Send a command to the remote monitor (remote targets only) python -- Evaluate a Python command record -- Abbreviated form of "target record" command record delete -- Delete the rest of execution log and start recording it an= ew record goto -- Restore the program to its state at instruction number N record restore -- Restore the execution log from a file record save -- Save the execution log to a file record stop -- Stop the record/replay target restart -- Restart : restore program context from a checkpoint stop -- There is no `stop' command Type "help" followed by command name for full documentation. Type "apropos word" to search for commands related to "word". Command name abbreviations are allowed if unambiguous. (gdb) ! pwd Undefined command: "". Try "help". (gdb) bang pwd /home/dje/src/play (gdb) >> +This is useful, for example, when you want to be able to type a command >> +with a long name using fewer characters, and the contraction is otherwi= se >> +ambiguous. =A0It can also we used when you want to give a command an al= ternate > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ^^ > "be" Righto, thanks. >> +@var{name} is the name of the new command. >> [..] >> +Command names must begin with a letter, dash or underscore, >> +and must consist of letters, numbers, dashes and underscores. > > =A0@var{name} is the name of the new command; it must begin with a > =A0letter, dash or underscore, and must consist of letters, numbers, > =A0dashes and underscores. Ok. >> +@var{command_class} should be one of the @samp{COMMAND_} constants. > > Please add here a cross-reference to where these constants are > documented. I was going to do that but since the values are documented preceding this item on the same page, and the existing text doesn't use a cross-reference (and since I forgot how to label the text so that I could cross-reference it :-)) I punted. Here's a revised patch. 2011-09-13 Doug Evans Add support for adding command aliases from python. * NEWS: Mention gdb.add_command_alias. * command.h (valid_cmd_name_p): Declare. * cli/cli-decode.c (valid_cmd_name_p): New function. * python/py-cmd.c (gdbpy_add_com_alias): New function. * python/python-internal.h (gdbpy_add_com_alias): Declare. * python/python.c (GdbMethods): Add add_command_alias. doc/ * gdb.texinfo (Commands In Python): Document add_command_alias. testsuite/ * gdb.python/py-cmd.exp: Add tests for gdb.add_command_alias. --20cf3005dc9075546404acd5db75 Content-Type: text/plain; charset=US-ASCII; name="gdb-110913-add-command-alias-2.patch.txt" Content-Disposition: attachment; filename="gdb-110913-add-command-alias-2.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gsj5c7n50 Content-length: 11590 MjAxMS0wOS0wOSAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCUFk ZCBzdXBwb3J0IGZvciBhZGRpbmcgY29tbWFuZCBhbGlhc2VzIGZyb20gcHl0 aG9uLgoJKiBORVdTOiBNZW50aW9uIGdkYi5hZGRfY29tbWFuZF9hbGlhcy4K CSogY29tbWFuZC5oICh2YWxpZF9jbWRfbmFtZV9wKTogRGVjbGFyZS4KCSog Y2xpL2NsaS1kZWNvZGUuYyAodmFsaWRfY21kX25hbWVfcCk6IE5ldyBmdW5j dGlvbi4KCSogcHl0aG9uL3B5LWNtZC5jIChnZGJweV9hZGRfY29tX2FsaWFz KTogTmV3IGZ1bmN0aW9uLgoJKiBweXRob24vcHl0aG9uLWludGVybmFsLmgg KGdkYnB5X2FkZF9jb21fYWxpYXMpOiBEZWNsYXJlLgoJKiBweXRob24vcHl0 aG9uLmMgKEdkYk1ldGhvZHMpOiBBZGQgYWRkX2NvbW1hbmRfYWxpYXMuCgoJ ZG9jLwoJKiBnZGIudGV4aW5mbyAoQ29tbWFuZHMgSW4gUHl0aG9uKTogRG9j dW1lbnQgYWRkX2NvbW1hbmRfYWxpYXMuCgoJdGVzdHN1aXRlLwoJKiBnZGIu cHl0aG9uL3B5LWNtZC5leHA6IEFkZCB0ZXN0cyBmb3IgZ2RiLmFkZF9jb21t YW5kX2FsaWFzLgoKSW5kZXg6IE5FV1MKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9ORVdTLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjQ1MgpkaWZmIC11IC1wIC1yMS40NTIgTkVXUwotLS0g TkVXUwk0IFNlcCAyMDExIDE3OjQ4OjUxIC0wMDAwCTEuNDUyCisrKyBORVdT CTkgU2VwIDIwMTEgMTg6MDc6NTAgLTAwMDAKQEAgLTM4LDYgKzM4LDggQEAK IAogICAqKiBTeW1ib2xzIG5vdyBwcm92aWRlIHRoZSAidHlwZSIgYXR0cmli dXRlLCB0aGUgdHlwZSBvZiB0aGUgc3ltYm9sLgogCisgICoqIENvbW1hbmQg YWxpYXNlcyBjYW4gbm93IGJlIGRlZmluZWQgd2l0aCB0aGUgYWRkX2NvbW1h bmRfYWxpYXMgZnVuY3Rpb24uCisKICogbGlidGhyZWFkLWRiLXNlYXJjaC1w YXRoIG5vdyBzdXBwb3J0cyB0d28gc3BlY2lhbCB2YWx1ZXM6ICRzZGlyIGFu ZCAkcGRpci4KICAgJHNkaXIgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IHN5c3Rl bSBsb2NhdGlvbnMgb2Ygc2hhcmVkIGxpYnJhcmllcy4KICAgJHBkaXIgc3Bl Y2lmaWVzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGxpYnB0aHJlYWQgdXNl ZCBieSB0aGUgYXBwbGljYXRpb24KSW5kZXg6IGNvbW1hbmQuaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2Nv bW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NApkaWZmIC11IC1w IC1yMS43NCBjb21tYW5kLmgKLS0tIGNvbW1hbmQuaAkxNCBGZWIgMjAxMSAy Mzo0MTozMyAtMDAwMAkxLjc0CisrKyBjb21tYW5kLmgJOSBTZXAgMjAxMSAx ODowNzo1MCAtMDAwMApAQCAtMTA2LDYgKzEwNiw4IEBAIHN0cnVjdCBjbWRf bGlzdF9lbGVtZW50OwogCiAvKiBGb3J3YXJkLWRlY2xhcmF0aW9ucyBvZiB0 aGUgZW50cnktcG9pbnRzIG9mIGNsaS9jbGktZGVjb2RlLmMuICAqLwogCitl eHRlcm4gaW50IHZhbGlkX2NtZF9uYW1lX3AgKGNvbnN0IGNoYXIgKm5hbWUp OworCiBleHRlcm4gc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmFkZF9jbWQg KGNoYXIgKiwgZW51bSBjb21tYW5kX2NsYXNzLAogCQkJCQkgdm9pZCAoKmZ1 bikgKGNoYXIgKiwgaW50KSwgY2hhciAqLAogCQkJCQkgc3RydWN0IGNtZF9s aXN0X2VsZW1lbnQgKiopOwpJbmRleDogY2xpL2NsaS1kZWNvZGUuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2Ri L2NsaS9jbGktZGVjb2RlLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTcK ZGlmZiAtdSAtcCAtcjEuOTcgY2xpLWRlY29kZS5jCi0tLSBjbGkvY2xpLWRl Y29kZS5jCTggU2VwIDIwMTEgMTc6MjA6NDMgLTAwMDAJMS45NworKysgY2xp L2NsaS1kZWNvZGUuYwk5IFNlcCAyMDExIDE4OjA3OjUwIC0wMDAwCkBAIC0x MjYsNiArMTI2LDM4IEBAIHNldF9jbWRfY29tcGxldGVyIChzdHJ1Y3QgY21k X2xpc3RfZWxlbWUKICAgY21kLT5jb21wbGV0ZXIgPSBjb21wbGV0ZXI7IC8q IE9rLiAgKi8KIH0KIAorLyogUmV0dXJuIFRSVUUgaWYgTkFNRSBpcyBhIHZh bGlkIGNvbW1hbmQgbmFtZS4KKworICAgTk9URTogVFVJIGhhcyBhIGZldyBz cGVjaWFsIGNvbW1hbmRzLCArLCA8LCA+LgorICAgV2UgZG9uJ3Qgd2F0Y2gg Zm9yIHRob3NlIGhlcmUuICAqLworCitpbnQKK3ZhbGlkX2NtZF9uYW1lX3Ag KGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKnA7CisKKyAg LyogRmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYSBsZXR0ZXIsIC0sIG9yIF8u ICAqLworICBpZiAoKm5hbWUgPT0gJ1wwJykKKyAgICByZXR1cm4gRkFMU0U7 CisgIGlmIChpc2FscGhhICgqbmFtZSkKKyAgICAgIHx8ICpuYW1lID09ICct JworICAgICAgfHwgKm5hbWUgPT0gJ18nKQorICAgIDsgLyogT2suICAqLwor ICBlbHNlCisgICAgcmV0dXJuIEZBTFNFOworCisgIGZvciAocCA9IG5hbWUg KyAxOyAqcCAhPSAnXDAnOyArK3ApCisgICAgeworICAgICAgaWYgKGlzYWxu dW0gKCpwKQorCSAgfHwgKnAgPT0gJy0nCisJICB8fCAqcCA9PSAnXycpCisJ OyAvKiBPay4gICovCisgICAgICBlbHNlCisJcmV0dXJuIEZBTFNFOworICAg IH0KKworICByZXR1cm4gVFJVRTsKK30KIAogLyogQWRkIGVsZW1lbnQgbmFt ZWQgTkFNRS4KICAgIFNwYWNlIGZvciBOQU1FIGFuZCBET0MgbXVzdCBiZSBh bGxvY2F0ZWQgYnkgdGhlIGNhbGxlci4KSW5kZXg6IGRvYy9nZGIudGV4aW5m bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvZ2RiL2RvYy9nZGIudGV4aW5mbyx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS44NTgKZGlmZiAtdSAtcCAtcjEuODU4IGdkYi50ZXhpbmZvCi0tLSBkb2Mv Z2RiLnRleGluZm8JNCBTZXAgMjAxMSAxNzowODo1NiAtMDAwMAkxLjg1OAor KysgZG9jL2dkYi50ZXhpbmZvCTkgU2VwIDIwMTEgMTg6MDc6NTEgLTAwMDAK QEAgLTIyNjY4LDYgKzIyNjY4LDM1IEBAIHJlZ2lzdHJhdGlvbiBvZiB0aGUg Y29tbWFuZCB3aXRoIEB2YWx1ZXsKIFB5dGhvbiBjb2RlIGlzIHJlYWQgaW50 byBAdmFsdWV7R0RCTn0sIHlvdSBtYXkgbmVlZCB0byBpbXBvcnQgdGhlCiBA Y29kZXtnZGJ9IG1vZHVsZSBleHBsaWNpdGx5LgogCitAZmluZGV4IGdkYi5h ZGRfY29tbWFuZF9hbGlhcworQGRlZnVuIGFkZF9jb21tYW5kX2FsaWFzIG5h bWUgYWxpYXNlZF9uYW1lIGNvbW1hbmRfY2xhc3MgYWJicmV2X2ZsYWcKK0Nv bW1hbmQgYWxpYXNlcyBjYW4gYmUgZGVmaW5lZCB3aXRoIHRoZSBAY29kZXtn ZGIuYWRkX2NvbW1hbmRfYWxpYXN9IGZ1bmN0aW9uLgorVGhpcyBpcyB1c2Vm dWwsIGZvciBleGFtcGxlLCB3aGVuIHlvdSB3YW50IHRvIGJlIGFibGUgdG8g dHlwZSBhIGNvbW1hbmQKK3dpdGggYSBsb25nIG5hbWUgdXNpbmcgZmV3ZXIg Y2hhcmFjdGVycywgYW5kIHRoZSBjb250cmFjdGlvbiBpcyBvdGhlcndpc2UK K2FtYmlndW91cy4gIEl0IGNhbiBhbHNvIHdlIHVzZWQgd2hlbiB5b3Ugd2Fu dCB0byBnaXZlIGEgY29tbWFuZCBhbiBhbHRlcm5hdGUKK3NwZWxsaW5nLgor CitAdmFye25hbWV9IGlzIHRoZSBuYW1lIG9mIHRoZSBuZXcgY29tbWFuZC4K K0B2YXJ7YWxpYXNlZF9uYW1lfSBpcyB0aGUgbmFtZSBvZiB0aGUgY29tbWFu ZCB0aGF0IGlzIGJlaW5nIGFsaWFzZWQuCitDb21tYW5kIG5hbWVzIG11c3Qg YmVnaW4gd2l0aCBhIGxldHRlciwgZGFzaCBvciB1bmRlcnNjb3JlLAorYW5k IG11c3QgY29uc2lzdCBvZiBsZXR0ZXJzLCBudW1iZXJzLCBkYXNoZXMgYW5k IHVuZGVyc2NvcmVzLgorCitAdmFye2NvbW1hbmRfY2xhc3N9IHNob3VsZCBi ZSBvbmUgb2YgdGhlIEBzYW1we0NPTU1BTkRffSBjb25zdGFudHMuCisKK0B2 YXJ7YWJicmV2X2ZsYWd9IGlzIGEgYm9vbGVhbiBmbGFnIHNwZWNpZnlpbmcg d2hldGhlciB0byB0cmVhdCB0aGUgYWxpYXMKK2FzIGFuIGFiYnJldmlhdGlv biBvZiB0aGUgb3JpZ2luYWwgY29tbWFuZCBvciBub3QuCitJZiB0aGUgYWxp YXMgaXMgYW4gYWJicmV2aWF0aW9uIGl0IHdpbGwgbm90IGFwcGVhciBpbiBA Y29kZXtoZWxwfQorY29tbWFuZCBsaXN0IG91dHB1dC4KKworSGVyZSBpcyBh biBleGFtcGxlIHdoZXJlIHdlIG1ha2UgQGNvZGV7ZX0gYW4gYWx0ZXJuYXRl IHNwZWxsaW5nIG9mIHRoZQorQGNvZGV7eH0gY29tbWFuZC4KKworQHNtYWxs ZXhhbXBsZQorKGdkYikgcHl0aG9uIGdkYi5hZGRfY29tbWFuZF9hbGlhcyAo ImUiLCAieCIsIGdkYi5DT01NQU5EX0RBVEEsIDApCisoZ2RiKSBlLzEwaSBt YWluCitAZW5kIHNtYWxsZXhhbXBsZQorQGVuZCBkZWZ1bgorCiBAbm9kZSBQ YXJhbWV0ZXJzIEluIFB5dGhvbgogQHN1YnN1YnNlY3Rpb24gUGFyYW1ldGVy cyBJbiBQeXRob24KIApJbmRleDogcHl0aG9uL3B5LWNtZC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvcHl0 aG9uL3B5LWNtZC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYg LXUgLXAgLXIxLjE2IHB5LWNtZC5jCi0tLSBweXRob24vcHktY21kLmMJOCBT ZXAgMjAxMSAxOTo1MToyNyAtMDAwMAkxLjE2CisrKyBweXRob24vcHktY21k LmMJOSBTZXAgMjAxMSAxODowNzo1MSAtMDAwMApAQCAtNjk4LDMgKzY5OCwz NCBAQCBnZGJweV9zdHJpbmdfdG9fYXJndiAoUHlPYmplY3QgKnNlbGYsIFB5 CiAKICAgcmV0dXJuIHB5X2FyZ3Y7CiB9CisKKwwKKworLyogV3JhcHBlciBh cm91bmQgYWRkX2NvbV9hbGlhcy4gICovCisKK1B5T2JqZWN0ICoKK2dkYnB5 X2FkZF9jb21fYWxpYXMgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJn cywgUHlPYmplY3QgKmt3KQoreworICBzdGF0aWMgY2hhciAqa2V5d29yZHNb XSA9IHsKKyAgICAibmFtZSIsICJhbGlhc2VkX25hbWUiLCAiY29tbWFuZF9j bGFzcyIsICJhYmJyZXZfZmxhZyIsIE5VTEwKKyAgfTsKKyAgY2hhciAqbmFt ZSwgKmFsaWFzZWRfbmFtZTsKKyAgaW50IGNvbW1hbmRfY2xhc3MsIGFiYnJl dl9mbGFnOworCisgIGlmICghIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jk cyAoYXJncywga3csICJzc2lpIiwga2V5d29yZHMsCisJCQkJICAgICAmbmFt ZSwgJmFsaWFzZWRfbmFtZSwKKwkJCQkgICAgICZjb21tYW5kX2NsYXNzLCAm YWJicmV2X2ZsYWcpKQorICAgIHJldHVybiBOVUxMOworCisgIGlmICghIHZh bGlkX2NtZF9uYW1lX3AgKG5hbWUpKQorICAgIHJldHVybiBQeUVycl9Gb3Jt YXQgKFB5RXhjX1J1bnRpbWVFcnJvciwKKwkJCSBfKCJJbnZhbGlkIGNvbW1h bmQgbmFtZSBgJXMnLiIpLCBuYW1lKTsKKyAgaWYgKCEgdmFsaWRfY21kX25h bWVfcCAoYWxpYXNlZF9uYW1lKSkKKyAgICByZXR1cm4gUHlFcnJfRm9ybWF0 IChQeUV4Y19SdW50aW1lRXJyb3IsCisJCQkgXygiSW52YWxpZCBhbGlhc2Vk IGNvbW1hbmQgbmFtZSBgJXMnLiIpLCBhbGlhc2VkX25hbWUpOworCisgIC8q IGFkZF9jbWQgcmVxdWlyZXMgKndlKiBhbGxvY2F0ZSBzcGFjZSBmb3IgbmFt ZSwgaGVuY2UgdGhlIHhzdHJkdXAuICAqLworICBhZGRfY29tX2FsaWFzICh4 c3RyZHVwIChuYW1lKSwgYWxpYXNlZF9uYW1lLCBjb21tYW5kX2NsYXNzLCBh YmJyZXZfZmxhZyk7CisKKyAgUHlfUkVUVVJOX05PTkU7Cit9CkluZGV4OiBw eXRob24vcHl0aG9uLWludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9weXRob24vcHl0aG9uLWlu dGVybmFsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDcKZGlmZiAtdSAt cCAtcjEuNDcgcHl0aG9uLWludGVybmFsLmgKLS0tIHB5dGhvbi9weXRob24t aW50ZXJuYWwuaAk4IFNlcCAyMDExIDE5OjUxOjI3IC0wMDAwCTEuNDcKKysr IHB5dGhvbi9weXRob24taW50ZXJuYWwuaAk5IFNlcCAyMDExIDE4OjA3OjUy IC0wMDAwCkBAIC0xNTIsNiArMTUyLDcgQEAgUHlPYmplY3QgKmdkYnB5X2Ny ZWF0ZV9sYXp5X3N0cmluZ19vYmplYwogUHlPYmplY3QgKmdkYnB5X2luZmVy aW9ycyAoUHlPYmplY3QgKnVudXNlZCwgUHlPYmplY3QgKnVudXNlZDIpOwog UHlPYmplY3QgKmdkYnB5X3NlbGVjdGVkX3RocmVhZCAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzKTsKIFB5T2JqZWN0ICpnZGJweV9zdHJpbmdf dG9fYXJndiAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKK1B5 T2JqZWN0ICpnZGJweV9hZGRfY29tX2FsaWFzIChQeU9iamVjdCAqc2VsZiwg UHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdyk7CiBQeU9iamVjdCAqZ2Ri cHlfcGFyYW1ldGVyIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3Mp OwogUHlPYmplY3QgKmdkYnB5X3BhcmFtZXRlcl92YWx1ZSAoZW51bSB2YXJf dHlwZXMgdHlwZSwgdm9pZCAqdmFyKTsKIGNoYXIgKmdkYnB5X3BhcnNlX2Nv bW1hbmRfbmFtZSAoY29uc3QgY2hhciAqbmFtZSwKSW5kZXg6IHB5dGhvbi9w eXRob24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz L3NyYy9zcmMvZ2RiL3B5dGhvbi9weXRob24uYyx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS43MQpkaWZmIC11IC1wIC1yMS43MSBweXRob24uYwotLS0gcHl0 aG9uL3B5dGhvbi5jCTYgU2VwIDIwMTEgMTQ6NDk6MDAgLTAwMDAJMS43MQor KysgcHl0aG9uL3B5dGhvbi5jCTkgU2VwIDIwMTEgMTg6MDc6NTIgLTAwMDAK QEAgLTE0MjYsNiArMTQyNiwxMCBAQCBSZXR1cm4gdGhlIHNlbGVjdGVkIHRo cmVhZCBvYmplY3QuIiB9LAogICB7ICJpbmZlcmlvcnMiLCBnZGJweV9pbmZl cmlvcnMsIE1FVEhfTk9BUkdTLAogICAgICJpbmZlcmlvcnMgKCkgLT4gKGdk Yi5JbmZlcmlvciwgLi4uKS5cblwKIFJldHVybiBhIHR1cGxlIGNvbnRhaW5p bmcgYWxsIGluZmVyaW9ycy4iIH0sCisgIHsgImFkZF9jb21tYW5kX2FsaWFz IiwgKFB5Q0Z1bmN0aW9uKWdkYnB5X2FkZF9jb21fYWxpYXMsCisgICAgTUVU SF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKKyAgICAiQWRkIGFuIGFsaWFz IGZvciBhbiBleGlzdGluZyBjb21tYW5kLiIgfSwKKwogICB7TlVMTCwgTlVM TCwgMCwgTlVMTH0KIH07CiAKSW5kZXg6IHRlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWNtZC5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1jbWQu ZXhwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEu NiBweS1jbWQuZXhwCi0tLSB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1jbWQu ZXhwCTEwIEphbiAyMDExIDExOjAwOjIzIC0wMDAwCTEuNgorKysgdGVzdHN1 aXRlL2dkYi5weXRob24vcHktY21kLmV4cAk5IFNlcCAyMDExIDE4OjA3OjUy IC0wMDAwCkBAIC00NSw2ICs0NSwyMCBAQCBnZGJfcHlfdGVzdF9tdWx0aXBs ZSAiaW5wdXQgc2ltcGxlIGNvbW1hCiAKIGdkYl90ZXN0ICJ0ZXN0X2NtZCB1 Z2giICJ0ZXN0X2NtZCBvdXRwdXQsIGFyZyA9IHVnaCIgImNhbGwgc2ltcGxl IGNvbW1hbmQiCiAKKyMgVGVzdCBhbiBhbGlhcyBjb21tYW5kLgorCitnZGJf dGVzdF9ub19vdXRwdXQgInB5dGhvbiBnZGIuYWRkX2NvbW1hbmRfYWxpYXMg KFwidGVzdF9hbGlhc19jbWRcIiwgXCJ0ZXN0X2NtZFwiLCBnZGIuQ09NTUFO RF9PQlNDVVJFLCAwKSIgImFkZF9jb21tYW5kX2FsaWFzIgorCitnZGJfdGVz dCAidGVzdF9hbGlhc19jbWQgdWdoIiAidGVzdF9jbWQgb3V0cHV0LCBhcmcg PSB1Z2giICJjYWxsIGFsaWFzIGNvbW1hbmQiCisKK2dkYl90ZXN0ICJweXRo b24gZ2RiLmFkZF9jb21tYW5kX2FsaWFzIChcIihiYWQgbmFtZSlcIiwgXCJ0 ZXN0X2NtZFwiLCBnZGIuQ09NTUFORF9PQlNDVVJFLCAwKSIgXAorICAiUnVu dGltZUVycm9yOiBJbnZhbGlkIGNvbW1hbmQgbmFtZS4qIiBcCisgICJiYWQg YWxpYXMgY29tbWFuZCBuYW1lIgorCitnZGJfdGVzdCAicHl0aG9uIGdkYi5h ZGRfY29tbWFuZF9hbGlhcyAoXCJ0ZXN0X2FsaWFzX2NtZFwiLCBcIihiYWQg bmFtZSlcIiwgZ2RiLkNPTU1BTkRfT0JTQ1VSRSwgMCkiIFwKKyAgIlJ1bnRp bWVFcnJvcjogSW52YWxpZCBhbGlhc2VkIGNvbW1hbmQgbmFtZS4qIiBcCisg ICJiYWQgYWxpYXNlZCBjb21tYW5kIG5hbWUiCisKICMgVGVzdCBhIHByZWZp eCBjb21tYW5kLCBhbmQgYSBzdWJjb21tYW5kIHdpdGhpbiBpdC4KIAogZ2Ri X3B5X3Rlc3RfbXVsdGlwbGUgImlucHV0IHByZWZpeCBjb21tYW5kIiBcCg== --20cf3005dc9075546404acd5db75--