From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 67096 invoked by alias); 15 Mar 2015 21:49:39 -0000 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 Received: (qmail 67084 invoked by uid 89); 15 Mar 2015 21:49:39 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=2.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,KAM_FROM_URIBL_PCCC,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-vc0-f176.google.com Received: from mail-vc0-f176.google.com (HELO mail-vc0-f176.google.com) (209.85.220.176) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sun, 15 Mar 2015 21:49:36 +0000 Received: by mail-vc0-f176.google.com with SMTP id kv19so397615vcb.7 for ; Sun, 15 Mar 2015 14:49:34 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.52.81.97 with SMTP id z1mr23258646vdx.22.1426456173936; Sun, 15 Mar 2015 14:49:33 -0700 (PDT) Received: by 10.52.146.73 with HTTP; Sun, 15 Mar 2015 14:49:33 -0700 (PDT) In-Reply-To: <20150227081642.GE31815@adacore.com> References: <20130926165939.GA5440@adacore.com> <20131004073447.GB3326@adacore.com> <20150225151646.GA30181@adacore.com> <20150227081642.GE31815@adacore.com> Date: Sun, 15 Mar 2015 21:49:00 -0000 Message-ID: Subject: Re: Setting parity for remote serial From: Yurij Grechishhev To: Joel Brobecker Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001a1136755289a2ab05115ab5dd X-SW-Source: 2015-03/txt/msg00429.txt.bz2 --001a1136755289a2ab05115ab5dd Content-Type: text/plain; charset=UTF-8 Content-length: 13976 Hello Joel, I kindly ask you to review this patch. Please, let me know in the case I have missed something. I see, you've reworked the command for baudrate setting. Parity is set the same way now: set/show serial parity. Thank you. diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 65a0051..7b88708 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,34 @@ +2013-07-16 Yurij Grechishhev + + * NEWS: Mention set/show serial parity command. + * monitor.c (monitor_open): Add serial_setparity. + * remote.c (remote_open_1): Likewise. + * ser-base.c (ser_base_serparity): New function. + * ser-base.h: Add ser_base_setparity declaration. + * serail.c: Add serial_parity declaration and definitions of + parity_enums and parity. + (serial_parity): Definition + (set_parity): New function. + (serial_setparity): New function. + (_initialize_serial): Add set/show serial parity command description + * serial.h: Add GDBPARITY_NONE, GDBPARITY_ODD, GDBPARITY_EVEN + definitions. Add serial_setparity declaration. + (serial_ops): Add setparity entry. + * ser-mingw.c (ser_windows_raw): Remove state.fParity and + state.Parity definitions. + (ser_windows_setparity): New function. + (hardwire_ops): add ser_windows_setparity. + (tty_ops): add NULL for setparity field + (pipe_ops): add ser_base_setparity. + (tcp_ops): add ser_base_setparity. + * ser-pipe.c (pipe_ops): Likewise. + * ser-tcp.c (tcp_ops): Likewise. + * ser-unix.c: Add hardwire_setparity declaration. + (hardwire_setparity): New function. + (hardwire_ops): add hardwire_setparity. + * ser-go32.c (dos_ops): add dos_noop + * target.h: serial_parity declaration. + 2014-10-16 Jan Kratochvil Remove HPUX. diff --git a/gdb/NEWS b/gdb/NEWS index f08f972..cd2e82b3 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -3,6 +3,10 @@ *** Changes since GDB 7.9 +* GDB has two new commands: "set serial parity odd|even|none" and + "show serial parity". These allows to set or show parity for the + remote serial I/O. + * The "info source" command now displays the producer string if it was present in the debug info. This typically includes the compiler version and may include things like its command line arguments. diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 5efb060..dd601fe 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2015-03-16 Yurij Grechishhev + + * gdb.texinfo (Remote configuration): Document "set/show + serial parity command". + 2015-03-11 Gary Benson * gdb.texinfo (Remote Configuration): Document the diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 9e71642..a818d58 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -19443,6 +19443,13 @@ remote targets. @item show serial baud Show the current speed of the remote connection. +@item set serial parity @var{parity} +Set the parity for the remote serial I/O. Supported values of @var{parity} are: +@code{even}, @code{none}, and @code{odd}. The default is @code{none}. + +@item show serial parity +Show the current parity of the serial port. + @item set remotebreak @cindex interrupt remote programs @cindex BREAK signal instead of Ctrl-C diff --git a/gdb/monitor.c b/gdb/monitor.c index b040ec4..548dae3 100644 --- a/gdb/monitor.c +++ b/gdb/monitor.c @@ -767,6 +767,7 @@ monitor_open (const char *args, struct monitor_ops *mon_ops, int from_tty) } } + serial_setparity (monitor_desc, serial_parity); serial_raw (monitor_desc); serial_flush_input (monitor_desc); diff --git a/gdb/remote.c b/gdb/remote.c index 9aaee13..1554259 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -4310,6 +4310,7 @@ remote_open_1 (const char *name, int from_tty, } } + serial_setparity(rs->remote_desc, serial_parity); serial_raw (rs->remote_desc); /* If there is something sitting in the buffer we might take it as a diff --git a/gdb/ser-base.c b/gdb/ser-base.c index 87817c4..93aad40 100644 --- a/gdb/ser-base.c +++ b/gdb/ser-base.c @@ -541,6 +541,12 @@ ser_base_setstopbits (struct serial *scb, int num) return 0; /* Never fails! */ } +int +ser_base_setparity (struct serial *scb, int parity) +{ + return 0; /* Never fails! */ +} + /* Put the SERIAL device into/out-of ASYNC mode. */ void diff --git a/gdb/ser-base.h b/gdb/ser-base.h index 2aba66d..bb1c51d 100644 --- a/gdb/ser-base.h +++ b/gdb/ser-base.h @@ -42,7 +42,8 @@ extern int ser_base_noflush_set_tty_state (struct serial *scb, serial_ttystate new_ttystate, serial_ttystate old_ttystate); extern int ser_base_setbaudrate (struct serial *scb, int rate); -extern int ser_base_setstopbits (struct serial *scb, int rate); +extern int ser_base_setstopbits (struct serial *scb, int num); +extern int ser_base_setparity (struct serial *scb, int parity); extern int ser_base_drain_output (struct serial *scb); extern int ser_base_write (struct serial *scb, const void *buf, size_t count); diff --git a/gdb/ser-go32.c b/gdb/ser-go32.c index 6bf1b4e..bbcf6af 100644 --- a/gdb/ser-go32.c +++ b/gdb/ser-go32.c @@ -864,6 +864,7 @@ static const struct serial_ops dos_ops = dos_noflush_set_tty_state, dos_setbaudrate, dos_setstopbits, + dos_noop, dos_noop, /* Wait for output to drain. */ (void (*)(struct serial *, int))NULL /* Change into async mode. */ }; diff --git a/gdb/ser-mingw.c b/gdb/ser-mingw.c index 7f335e9..be0f990 100644 --- a/gdb/ser-mingw.c +++ b/gdb/ser-mingw.c @@ -153,7 +153,6 @@ ser_windows_raw (struct serial *scb) if (GetCommState (h, &state) == 0) return; - state.fParity = FALSE; state.fOutxCtsFlow = FALSE; state.fOutxDsrFlow = FALSE; state.fDtrControl = DTR_CONTROL_ENABLE; @@ -163,7 +162,6 @@ ser_windows_raw (struct serial *scb) state.fNull = FALSE; state.fAbortOnError = FALSE; state.ByteSize = 8; - state.Parity = NOPARITY; scb->current_timeout = 0; @@ -199,6 +197,36 @@ ser_windows_setstopbits (struct serial *scb, int num) } static int +ser_windows_setparity (struct serial *scb, int parity) +{ + HANDLE h = (HANDLE) _get_osfhandle (scb->fd); + DCB state; + + if (GetCommState (h, &state) == 0) + return -1; + + switch (parity) + { + case GDBPARITY_NONE: + state.Parity = NOPARITY; + state.fParity = FALSE; + break; + case GDBPARITY_ODD: + state.Parity = ODDPARITY; + state.fParity = TRUE; + break; + case GDBPARITY_EVEN: + state.Parity = EVENPARITY; + state.fParity = TRUE; + break; + default: + return 1; + } + + return (SetCommState (h, &state) != 0) ? 0 : -1; +} + +static int ser_windows_setbaudrate (struct serial *scb, int rate) { HANDLE h = (HANDLE) _get_osfhandle (scb->fd); @@ -1227,6 +1255,7 @@ static const struct serial_ops hardwire_ops = ser_base_noflush_set_tty_state, ser_windows_setbaudrate, ser_windows_setstopbits, + ser_windows_setparity, ser_windows_drain_output, ser_base_async, ser_windows_read_prim, @@ -1257,6 +1286,7 @@ static const struct serial_ops tty_ops = ser_base_noflush_set_tty_state, NULL, NULL, + NULL, ser_base_drain_output, NULL, NULL, @@ -1287,6 +1317,7 @@ static const struct serial_ops pipe_ops = ser_base_noflush_set_tty_state, ser_base_setbaudrate, ser_base_setstopbits, + ser_base_setparity, ser_base_drain_output, ser_base_async, pipe_windows_read, @@ -1317,6 +1348,7 @@ static const struct serial_ops tcp_ops = ser_base_noflush_set_tty_state, ser_base_setbaudrate, ser_base_setstopbits, + ser_base_setparity, ser_base_drain_output, ser_base_async, net_read_prim, diff --git a/gdb/ser-pipe.c b/gdb/ser-pipe.c index bf5e4d4..0700132 100644 --- a/gdb/ser-pipe.c +++ b/gdb/ser-pipe.c @@ -224,6 +224,7 @@ static const struct serial_ops pipe_ops = ser_base_noflush_set_tty_state, ser_base_setbaudrate, ser_base_setstopbits, + ser_base_setparity, ser_base_drain_output, ser_base_async, ser_unix_read_prim, diff --git a/gdb/ser-tcp.c b/gdb/ser-tcp.c index 9c3dcf4..35512e6 100644 --- a/gdb/ser-tcp.c +++ b/gdb/ser-tcp.c @@ -394,6 +394,7 @@ static const struct serial_ops tcp_ops = ser_base_noflush_set_tty_state, ser_base_setbaudrate, ser_base_setstopbits, + ser_base_setparity, ser_base_drain_output, ser_base_async, net_read_prim, diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c index 4125797..88c16ba 100644 --- a/gdb/ser-unix.c +++ b/gdb/ser-unix.c @@ -83,6 +83,7 @@ static int hardwire_readchar (struct serial *scb, int timeout); static int do_hardwire_readchar (struct serial *scb, int timeout); static int rate_to_code (int rate); static int hardwire_setbaudrate (struct serial *scb, int rate); +static int hardwire_setparity (struct serial *scb, int parity); static void hardwire_close (struct serial *scb); static int get_tty_state (struct serial *scb, struct hardwire_ttystate * state); @@ -893,6 +894,46 @@ hardwire_setstopbits (struct serial *scb, int num) return set_tty_state (scb, &state); } +static int +hardwire_setparity (struct serial *scb, int parity) +{ + struct hardwire_ttystate state; + int newparity = 0; + + if (get_tty_state (scb, &state)) + return -1; + + switch (parity) + { + case GDBPARITY_NONE: + newparity = 0; + break; + case GDBPARITY_ODD: + newparity = PARENB | PARODD; + break; + case GDBPARITY_EVEN: + newparity = PARENB; + break; + default: + return 1; + } + +#ifdef HAVE_TERMIOS + state.termios.c_cflag |= newparity; +#endif + +#ifdef HAVE_TERMIO + state.termio.c_cflag |= newparity; +#endif + +#ifdef HAVE_SGTTY + return 0; /* sgtty doesn't support this */ +#endif + + return set_tty_state (scb, &state); +} + + static void hardwire_close (struct serial *scb) { @@ -929,6 +970,7 @@ static const struct serial_ops hardwire_ops = hardwire_noflush_set_tty_state, hardwire_setbaudrate, hardwire_setstopbits, + hardwire_setparity, hardwire_drain_output, ser_base_async, ser_unix_read_prim, diff --git a/gdb/serial.c b/gdb/serial.c index b7e620d..09c8b8d 100644 --- a/gdb/serial.c +++ b/gdb/serial.c @@ -525,6 +525,12 @@ serial_setstopbits (struct serial *scb, int num) } int +serial_setparity (struct serial*scb, int parity) +{ + return scb->ops->setparity (scb, parity); +} + +int serial_can_async_p (struct serial *scb) { return (scb->ops->async != NULL); @@ -638,6 +644,27 @@ serial_baud_show_cmd (struct ui_file *file, int from_tty, value); } +/* Parity for serial port */ +int serial_parity = GDBPARITY_NONE; + +static const char parity_none[] = "none"; +static const char parity_odd[] = "odd"; +static const char parity_even[] = "even"; +static const char *const parity_enums[] = +{parity_none, parity_odd, parity_even, NULL}; +static const char *parity = parity_none; + +static void +set_parity (char *ignore_args, int from_tty, struct cmd_list_element *c) +{ + if (parity == parity_odd) + serial_parity = GDBPARITY_ODD; + else if (parity == parity_even) + serial_parity = GDBPARITY_EVEN; + else + serial_parity = GDBPARITY_NONE; +} + void _initialize_serial (void) { @@ -670,6 +697,14 @@ using remote targets."), serial_baud_show_cmd, &serial_set_cmdlist, &serial_show_cmdlist); + add_setshow_enum_cmd ("parity", no_class, parity_enums, + &parity, _("\ +Set parity for remote serial I/O"), _("\ +Show parity for remote serial I/O"), NULL, + set_parity, + NULL, /* FIXME: i18n: */ + &serial_set_cmdlist, &serial_show_cmdlist); + add_setshow_filename_cmd ("remotelogfile", no_class, &serial_logfile, _("\ Set filename for remote session recording."), _("\ Show filename for remote session recording."), _("\ diff --git a/gdb/serial.h b/gdb/serial.h index 9eb1c39..0481ea1 100644 --- a/gdb/serial.h +++ b/gdb/serial.h @@ -186,6 +186,14 @@ extern int serial_setbaudrate (struct serial *scb, int rate); extern int serial_setstopbits (struct serial *scb, int num); +/* Set parity for serial port. Return 0 for success, -1 for failure */ + +#define GDBPARITY_NONE 0 +#define GDBPARITY_ODD 1 +#define GDBPARITY_EVEN 2 + +extern int serial_setparity (struct serial *scb, int parity); + /* Asynchronous serial interface: */ /* Can the serial device support asynchronous mode? */ @@ -271,6 +279,7 @@ struct serial_ops serial_ttystate); int (*setbaudrate) (struct serial *, int rate); int (*setstopbits) (struct serial *, int num); + int (*setparity) (struct serial *, int parity); /* Wait for output to drain. */ int (*drain_output) (struct serial *); /* Change the serial device into/out of asynchronous mode, call diff --git a/gdb/target.h b/gdb/target.h index c95e1a4..685a37f 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -2236,6 +2236,10 @@ extern int remote_debug; /* Speed in bits per second, or -1 which means don't mess with the speed. */ extern int baud_rate; + +/* Parity for serial port */ +extern int serial_parity; + /* Timeout limit for response from target. */ extern int remote_timeout; -- WBR, Yury 2015-02-27 11:16 GMT+03:00 Joel Brobecker : >> Glad to hear that this patch is still needed. >> I believe, all questions with FSF copyright assignments had been resolved? >> Please, let me know what I should do to complete this contribution. > > Indeed! Thanks very much for doing that. > > If you could rebase the patch against master, and resubmit, > I promise to review it promptly (I will taking a week off > Mar 07-15, though). If you'd rather I took it over, I will > try to do so after I come back. > > Thanks again! > -- > Joel --001a1136755289a2ab05115ab5dd Content-Type: text/x-patch; charset=US-ASCII; name="parity.patch" Content-Disposition: attachment; filename="parity.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i7ayolv80 Content-length: 17605 ZGlmZiAtLWdpdCBhL2dkYi9DaGFuZ2VMb2cgYi9nZGIvQ2hhbmdlTG9nCmlu ZGV4IDY1YTAwNTEuLjdiODg3MDggMTAwNjQ0Ci0tLSBhL2dkYi9DaGFuZ2VM b2cKKysrIGIvZ2RiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEz LTA3LTE2ICBZdXJpaiBHcmVjaGlzaGhldiAgPHl1cmlqLmdyZWNoaXNoaGV2 QGdtYWlsLmNvbT4KKworCSogTkVXUzogTWVudGlvbiBzZXQvc2hvdyBzZXJp YWwgcGFyaXR5IGNvbW1hbmQuCisJKiBtb25pdG9yLmMgKG1vbml0b3Jfb3Bl bik6IEFkZCBzZXJpYWxfc2V0cGFyaXR5LgorCSogcmVtb3RlLmMgKHJlbW90 ZV9vcGVuXzEpOiBMaWtld2lzZS4KKwkqIHNlci1iYXNlLmMgKHNlcl9iYXNl X3NlcnBhcml0eSk6IE5ldyBmdW5jdGlvbi4KKwkqIHNlci1iYXNlLmg6IEFk ZCBzZXJfYmFzZV9zZXRwYXJpdHkgZGVjbGFyYXRpb24uCisJKiBzZXJhaWwu YzogQWRkIHNlcmlhbF9wYXJpdHkgZGVjbGFyYXRpb24gYW5kIGRlZmluaXRp b25zIG9mCisJcGFyaXR5X2VudW1zIGFuZCBwYXJpdHkuCisJKHNlcmlhbF9w YXJpdHkpOiBEZWZpbml0aW9uCisJKHNldF9wYXJpdHkpOiBOZXcgZnVuY3Rp b24uCisJKHNlcmlhbF9zZXRwYXJpdHkpOiBOZXcgZnVuY3Rpb24uCisJKF9p bml0aWFsaXplX3NlcmlhbCk6IEFkZCBzZXQvc2hvdyBzZXJpYWwgcGFyaXR5 IGNvbW1hbmQgZGVzY3JpcHRpb24KKwkqIHNlcmlhbC5oOiBBZGQgR0RCUEFS SVRZX05PTkUsIEdEQlBBUklUWV9PREQsIEdEQlBBUklUWV9FVkVOCisJZGVm aW5pdGlvbnMuIEFkZCBzZXJpYWxfc2V0cGFyaXR5IGRlY2xhcmF0aW9uLgor CShzZXJpYWxfb3BzKTogQWRkIHNldHBhcml0eSBlbnRyeS4KKwkqIHNlci1t aW5ndy5jIChzZXJfd2luZG93c19yYXcpOiBSZW1vdmUgc3RhdGUuZlBhcml0 eSBhbmQKKwlzdGF0ZS5QYXJpdHkgZGVmaW5pdGlvbnMuCisJKHNlcl93aW5k b3dzX3NldHBhcml0eSk6IE5ldyBmdW5jdGlvbi4KKwkoaGFyZHdpcmVfb3Bz KTogYWRkIHNlcl93aW5kb3dzX3NldHBhcml0eS4KKwkodHR5X29wcyk6IGFk ZCBOVUxMIGZvciBzZXRwYXJpdHkgZmllbGQKKwkocGlwZV9vcHMpOiBhZGQg c2VyX2Jhc2Vfc2V0cGFyaXR5LgorCSh0Y3Bfb3BzKTogYWRkIHNlcl9iYXNl X3NldHBhcml0eS4KKwkqIHNlci1waXBlLmMgKHBpcGVfb3BzKTogTGlrZXdp c2UuCisJKiBzZXItdGNwLmMgKHRjcF9vcHMpOiBMaWtld2lzZS4KKwkqIHNl ci11bml4LmM6IEFkZCBoYXJkd2lyZV9zZXRwYXJpdHkgZGVjbGFyYXRpb24u CisJKGhhcmR3aXJlX3NldHBhcml0eSk6IE5ldyBmdW5jdGlvbi4KKwkoaGFy ZHdpcmVfb3BzKTogYWRkIGhhcmR3aXJlX3NldHBhcml0eS4KKwkqIHNlci1n bzMyLmMgKGRvc19vcHMpOiBhZGQgZG9zX25vb3AKKwkqIHRhcmdldC5oOiBz ZXJpYWxfcGFyaXR5IGRlY2xhcmF0aW9uLgorCiAyMDE0LTEwLTE2ICBKYW4g S3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CiAKIAlS ZW1vdmUgSFBVWC4KZGlmZiAtLWdpdCBhL2dkYi9ORVdTIGIvZ2RiL05FV1MK aW5kZXggZjA4Zjk3Mi4uY2QyZTgyYjMgMTAwNjQ0Ci0tLSBhL2dkYi9ORVdT CisrKyBiL2dkYi9ORVdTCkBAIC0zLDYgKzMsMTAgQEAKIAogKioqIENoYW5n ZXMgc2luY2UgR0RCIDcuOQogCisqIEdEQiBoYXMgdHdvIG5ldyBjb21tYW5k czogInNldCBzZXJpYWwgcGFyaXR5IG9kZHxldmVufG5vbmUiIGFuZAorICAi c2hvdyBzZXJpYWwgcGFyaXR5Ii4gIFRoZXNlIGFsbG93cyB0byBzZXQgb3Ig c2hvdyBwYXJpdHkgZm9yIHRoZQorICByZW1vdGUgc2VyaWFsIEkvTy4KKwog KiBUaGUgImluZm8gc291cmNlIiBjb21tYW5kIG5vdyBkaXNwbGF5cyB0aGUg cHJvZHVjZXIgc3RyaW5nIGlmIGl0IHdhcwogICBwcmVzZW50IGluIHRoZSBk ZWJ1ZyBpbmZvLiAgVGhpcyB0eXBpY2FsbHkgaW5jbHVkZXMgdGhlIGNvbXBp bGVyIHZlcnNpb24KICAgYW5kIG1heSBpbmNsdWRlIHRoaW5ncyBsaWtlIGl0 cyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgpkaWZmIC0tZ2l0IGEvZ2RiL2Rv Yy9DaGFuZ2VMb2cgYi9nZGIvZG9jL0NoYW5nZUxvZwppbmRleCA1ZWZiMDYw Li5kZDYwMWZlIDEwMDY0NAotLS0gYS9nZGIvZG9jL0NoYW5nZUxvZworKysg Yi9nZGIvZG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMTUtMDMt MTYgIFl1cmlqIEdyZWNoaXNoaGV2ICA8eXVyaWouZ3JlY2hpc2hoZXZAZ21h aWwuY29tPgorCisJKiBnZGIudGV4aW5mbyAoUmVtb3RlIGNvbmZpZ3VyYXRp b24pOiBEb2N1bWVudCAic2V0L3Nob3cKKwlzZXJpYWwgcGFyaXR5IGNvbW1h bmQiLgorCiAyMDE1LTAzLTExICBHYXJ5IEJlbnNvbiA8Z2JlbnNvbkByZWRo YXQuY29tPgogCiAJKiBnZGIudGV4aW5mbyAoUmVtb3RlIENvbmZpZ3VyYXRp b24pOiBEb2N1bWVudCB0aGUKZGlmZiAtLWdpdCBhL2dkYi9kb2MvZ2RiLnRl eGluZm8gYi9nZGIvZG9jL2dkYi50ZXhpbmZvCmluZGV4IDllNzE2NDIuLmE4 MThkNTggMTAwNjQ0Ci0tLSBhL2dkYi9kb2MvZ2RiLnRleGluZm8KKysrIGIv Z2RiL2RvYy9nZGIudGV4aW5mbwpAQCAtMTk0NDMsNiArMTk0NDMsMTMgQEAg cmVtb3RlIHRhcmdldHMuCiBAaXRlbSBzaG93IHNlcmlhbCBiYXVkCiBTaG93 IHRoZSBjdXJyZW50IHNwZWVkIG9mIHRoZSByZW1vdGUgY29ubmVjdGlvbi4K IAorQGl0ZW0gc2V0IHNlcmlhbCBwYXJpdHkgQHZhcntwYXJpdHl9CitTZXQg dGhlIHBhcml0eSBmb3IgdGhlIHJlbW90ZSBzZXJpYWwgSS9PLiAgU3VwcG9y dGVkIHZhbHVlcyBvZiBAdmFye3Bhcml0eX0gYXJlOgorQGNvZGV7ZXZlbn0s IEBjb2Rle25vbmV9LCBhbmQgQGNvZGV7b2RkfS4gIFRoZSBkZWZhdWx0IGlz IEBjb2Rle25vbmV9LgorCitAaXRlbSBzaG93IHNlcmlhbCBwYXJpdHkKK1No b3cgdGhlIGN1cnJlbnQgcGFyaXR5IG9mIHRoZSBzZXJpYWwgcG9ydC4KKwog QGl0ZW0gc2V0IHJlbW90ZWJyZWFrCiBAY2luZGV4IGludGVycnVwdCByZW1v dGUgcHJvZ3JhbXMKIEBjaW5kZXggQlJFQUsgc2lnbmFsIGluc3RlYWQgb2Yg Q3RybC1DCmRpZmYgLS1naXQgYS9nZGIvbW9uaXRvci5jIGIvZ2RiL21vbml0 b3IuYwppbmRleCBiMDQwZWM0Li41NDhkYWUzIDEwMDY0NAotLS0gYS9nZGIv bW9uaXRvci5jCisrKyBiL2dkYi9tb25pdG9yLmMKQEAgLTc2Nyw2ICs3Njcs NyBAQCBtb25pdG9yX29wZW4gKGNvbnN0IGNoYXIgKmFyZ3MsIHN0cnVjdCBt b25pdG9yX29wcyAqbW9uX29wcywgaW50IGZyb21fdHR5KQogCX0KICAgICB9 CiAKKyAgc2VyaWFsX3NldHBhcml0eSAobW9uaXRvcl9kZXNjLCBzZXJpYWxf cGFyaXR5KTsKICAgc2VyaWFsX3JhdyAobW9uaXRvcl9kZXNjKTsKIAogICBz ZXJpYWxfZmx1c2hfaW5wdXQgKG1vbml0b3JfZGVzYyk7CmRpZmYgLS1naXQg YS9nZGIvcmVtb3RlLmMgYi9nZGIvcmVtb3RlLmMKaW5kZXggOWFhZWUxMy4u MTU1NDI1OSAxMDA2NDQKLS0tIGEvZ2RiL3JlbW90ZS5jCisrKyBiL2dkYi9y ZW1vdGUuYwpAQCAtNDMxMCw2ICs0MzEwLDcgQEAgcmVtb3RlX29wZW5fMSAo Y29uc3QgY2hhciAqbmFtZSwgaW50IGZyb21fdHR5LAogCX0KICAgICB9CiAK KyAgc2VyaWFsX3NldHBhcml0eShycy0+cmVtb3RlX2Rlc2MsIHNlcmlhbF9w YXJpdHkpOwogICBzZXJpYWxfcmF3IChycy0+cmVtb3RlX2Rlc2MpOwogCiAg IC8qIElmIHRoZXJlIGlzIHNvbWV0aGluZyBzaXR0aW5nIGluIHRoZSBidWZm ZXIgd2UgbWlnaHQgdGFrZSBpdCBhcyBhCmRpZmYgLS1naXQgYS9nZGIvc2Vy LWJhc2UuYyBiL2dkYi9zZXItYmFzZS5jCmluZGV4IDg3ODE3YzQuLjkzYWFk NDAgMTAwNjQ0Ci0tLSBhL2dkYi9zZXItYmFzZS5jCisrKyBiL2dkYi9zZXIt YmFzZS5jCkBAIC01NDEsNiArNTQxLDEyIEBAIHNlcl9iYXNlX3NldHN0b3Bi aXRzIChzdHJ1Y3Qgc2VyaWFsICpzY2IsIGludCBudW0pCiAgIHJldHVybiAw OwkJCS8qIE5ldmVyIGZhaWxzISAgKi8KIH0KIAoraW50CitzZXJfYmFzZV9z ZXRwYXJpdHkgKHN0cnVjdCBzZXJpYWwgKnNjYiwgaW50IHBhcml0eSkKK3sK KyAgcmV0dXJuIDA7CQkJLyogTmV2ZXIgZmFpbHMhICAqLworfQorCiAvKiBQ dXQgdGhlIFNFUklBTCBkZXZpY2UgaW50by9vdXQtb2YgQVNZTkMgbW9kZS4g ICovCiAKIHZvaWQKZGlmZiAtLWdpdCBhL2dkYi9zZXItYmFzZS5oIGIvZ2Ri L3Nlci1iYXNlLmgKaW5kZXggMmFiYTY2ZC4uYmIxYzUxZCAxMDA2NDQKLS0t IGEvZ2RiL3Nlci1iYXNlLmgKKysrIGIvZ2RiL3Nlci1iYXNlLmgKQEAgLTQy LDcgKzQyLDggQEAgZXh0ZXJuIGludCBzZXJfYmFzZV9ub2ZsdXNoX3NldF90 dHlfc3RhdGUgKHN0cnVjdCBzZXJpYWwgKnNjYiwKIAkJCQkJICAgc2VyaWFs X3R0eXN0YXRlIG5ld190dHlzdGF0ZSwKIAkJCQkJICAgc2VyaWFsX3R0eXN0 YXRlIG9sZF90dHlzdGF0ZSk7CiBleHRlcm4gaW50IHNlcl9iYXNlX3NldGJh dWRyYXRlIChzdHJ1Y3Qgc2VyaWFsICpzY2IsIGludCByYXRlKTsKLWV4dGVy biBpbnQgc2VyX2Jhc2Vfc2V0c3RvcGJpdHMgKHN0cnVjdCBzZXJpYWwgKnNj YiwgaW50IHJhdGUpOworZXh0ZXJuIGludCBzZXJfYmFzZV9zZXRzdG9wYml0 cyAoc3RydWN0IHNlcmlhbCAqc2NiLCBpbnQgbnVtKTsKK2V4dGVybiBpbnQg c2VyX2Jhc2Vfc2V0cGFyaXR5IChzdHJ1Y3Qgc2VyaWFsICpzY2IsIGludCBw YXJpdHkpOwogZXh0ZXJuIGludCBzZXJfYmFzZV9kcmFpbl9vdXRwdXQgKHN0 cnVjdCBzZXJpYWwgKnNjYik7CiAKIGV4dGVybiBpbnQgc2VyX2Jhc2Vfd3Jp dGUgKHN0cnVjdCBzZXJpYWwgKnNjYiwgY29uc3Qgdm9pZCAqYnVmLCBzaXpl X3QgY291bnQpOwpkaWZmIC0tZ2l0IGEvZ2RiL3Nlci1nbzMyLmMgYi9nZGIv c2VyLWdvMzIuYwppbmRleCA2YmYxYjRlLi5iYmNmNmFmIDEwMDY0NAotLS0g YS9nZGIvc2VyLWdvMzIuYworKysgYi9nZGIvc2VyLWdvMzIuYwpAQCAtODY0 LDYgKzg2NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyaWFsX29wcyBk b3Nfb3BzID0KICAgZG9zX25vZmx1c2hfc2V0X3R0eV9zdGF0ZSwKICAgZG9z X3NldGJhdWRyYXRlLAogICBkb3Nfc2V0c3RvcGJpdHMsCisgIGRvc19ub29w LAogICBkb3Nfbm9vcCwJCQkvKiBXYWl0IGZvciBvdXRwdXQgdG8gZHJhaW4u ICAqLwogICAodm9pZCAoKikoc3RydWN0IHNlcmlhbCAqLCBpbnQpKU5VTEwJ LyogQ2hhbmdlIGludG8gYXN5bmMgbW9kZS4gICovCiB9OwpkaWZmIC0tZ2l0 IGEvZ2RiL3Nlci1taW5ndy5jIGIvZ2RiL3Nlci1taW5ndy5jCmluZGV4IDdm MzM1ZTkuLmJlMGY5OTAgMTAwNjQ0Ci0tLSBhL2dkYi9zZXItbWluZ3cuYwor KysgYi9nZGIvc2VyLW1pbmd3LmMKQEAgLTE1Myw3ICsxNTMsNiBAQCBzZXJf d2luZG93c19yYXcgKHN0cnVjdCBzZXJpYWwgKnNjYikKICAgaWYgKEdldENv bW1TdGF0ZSAoaCwgJnN0YXRlKSA9PSAwKQogICAgIHJldHVybjsKIAotICBz dGF0ZS5mUGFyaXR5ID0gRkFMU0U7CiAgIHN0YXRlLmZPdXR4Q3RzRmxvdyA9 IEZBTFNFOwogICBzdGF0ZS5mT3V0eERzckZsb3cgPSBGQUxTRTsKICAgc3Rh dGUuZkR0ckNvbnRyb2wgPSBEVFJfQ09OVFJPTF9FTkFCTEU7CkBAIC0xNjMs NyArMTYyLDYgQEAgc2VyX3dpbmRvd3NfcmF3IChzdHJ1Y3Qgc2VyaWFsICpz Y2IpCiAgIHN0YXRlLmZOdWxsID0gRkFMU0U7CiAgIHN0YXRlLmZBYm9ydE9u RXJyb3IgPSBGQUxTRTsKICAgc3RhdGUuQnl0ZVNpemUgPSA4OwotICBzdGF0 ZS5QYXJpdHkgPSBOT1BBUklUWTsKIAogICBzY2ItPmN1cnJlbnRfdGltZW91 dCA9IDA7CiAKQEAgLTE5OSw2ICsxOTcsMzYgQEAgc2VyX3dpbmRvd3Nfc2V0 c3RvcGJpdHMgKHN0cnVjdCBzZXJpYWwgKnNjYiwgaW50IG51bSkKIH0KIAog c3RhdGljIGludAorc2VyX3dpbmRvd3Nfc2V0cGFyaXR5IChzdHJ1Y3Qgc2Vy aWFsICpzY2IsIGludCBwYXJpdHkpCit7CisgIEhBTkRMRSBoID0gKEhBTkRM RSkgX2dldF9vc2ZoYW5kbGUgKHNjYi0+ZmQpOworICBEQ0Igc3RhdGU7CisK KyAgaWYgKEdldENvbW1TdGF0ZSAoaCwgJnN0YXRlKSA9PSAwKQorICAgIHJl dHVybiAtMTsKKworICBzd2l0Y2ggKHBhcml0eSkKKyAgICB7CisgICAgY2Fz ZSBHREJQQVJJVFlfTk9ORToKKyAgICAgIHN0YXRlLlBhcml0eSA9IE5PUEFS SVRZOworICAgICAgc3RhdGUuZlBhcml0eSA9IEZBTFNFOworICAgICAgYnJl YWs7CisgICAgY2FzZSBHREJQQVJJVFlfT0REOgorICAgICAgc3RhdGUuUGFy aXR5ID0gT0REUEFSSVRZOworICAgICAgc3RhdGUuZlBhcml0eSA9IFRSVUU7 CisgICAgICBicmVhazsKKyAgICBjYXNlIEdEQlBBUklUWV9FVkVOOgorICAg ICAgc3RhdGUuUGFyaXR5ID0gRVZFTlBBUklUWTsKKyAgICAgIHN0YXRlLmZQ YXJpdHkgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg ICAgIHJldHVybiAxOworICAgIH0KKworICByZXR1cm4gKFNldENvbW1TdGF0 ZSAoaCwgJnN0YXRlKSAhPSAwKSA/IDAgOiAtMTsKK30KKworc3RhdGljIGlu dAogc2VyX3dpbmRvd3Nfc2V0YmF1ZHJhdGUgKHN0cnVjdCBzZXJpYWwgKnNj YiwgaW50IHJhdGUpCiB7CiAgIEhBTkRMRSBoID0gKEhBTkRMRSkgX2dldF9v c2ZoYW5kbGUgKHNjYi0+ZmQpOwpAQCAtMTIyNyw2ICsxMjU1LDcgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBzZXJpYWxfb3BzIGhhcmR3aXJlX29wcyA9CiAg IHNlcl9iYXNlX25vZmx1c2hfc2V0X3R0eV9zdGF0ZSwKICAgc2VyX3dpbmRv d3Nfc2V0YmF1ZHJhdGUsCiAgIHNlcl93aW5kb3dzX3NldHN0b3BiaXRzLAor ICBzZXJfd2luZG93c19zZXRwYXJpdHksCiAgIHNlcl93aW5kb3dzX2RyYWlu X291dHB1dCwKICAgc2VyX2Jhc2VfYXN5bmMsCiAgIHNlcl93aW5kb3dzX3Jl YWRfcHJpbSwKQEAgLTEyNTcsNiArMTI4Niw3IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgc2VyaWFsX29wcyB0dHlfb3BzID0KICAgc2VyX2Jhc2Vfbm9mbHVz aF9zZXRfdHR5X3N0YXRlLAogICBOVUxMLAogICBOVUxMLAorICBOVUxMLAog ICBzZXJfYmFzZV9kcmFpbl9vdXRwdXQsCiAgIE5VTEwsCiAgIE5VTEwsCkBA IC0xMjg3LDYgKzEzMTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcmlh bF9vcHMgcGlwZV9vcHMgPQogICBzZXJfYmFzZV9ub2ZsdXNoX3NldF90dHlf c3RhdGUsCiAgIHNlcl9iYXNlX3NldGJhdWRyYXRlLAogICBzZXJfYmFzZV9z ZXRzdG9wYml0cywKKyAgc2VyX2Jhc2Vfc2V0cGFyaXR5LAogICBzZXJfYmFz ZV9kcmFpbl9vdXRwdXQsCiAgIHNlcl9iYXNlX2FzeW5jLAogICBwaXBlX3dp bmRvd3NfcmVhZCwKQEAgLTEzMTcsNiArMTM0OCw3IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3Qgc2VyaWFsX29wcyB0Y3Bfb3BzID0KICAgc2VyX2Jhc2Vfbm9m bHVzaF9zZXRfdHR5X3N0YXRlLAogICBzZXJfYmFzZV9zZXRiYXVkcmF0ZSwK ICAgc2VyX2Jhc2Vfc2V0c3RvcGJpdHMsCisgIHNlcl9iYXNlX3NldHBhcml0 eSwKICAgc2VyX2Jhc2VfZHJhaW5fb3V0cHV0LAogICBzZXJfYmFzZV9hc3lu YywKICAgbmV0X3JlYWRfcHJpbSwKZGlmZiAtLWdpdCBhL2dkYi9zZXItcGlw ZS5jIGIvZ2RiL3Nlci1waXBlLmMKaW5kZXggYmY1ZTRkNC4uMDcwMDEzMiAx MDA2NDQKLS0tIGEvZ2RiL3Nlci1waXBlLmMKKysrIGIvZ2RiL3Nlci1waXBl LmMKQEAgLTIyNCw2ICsyMjQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNl cmlhbF9vcHMgcGlwZV9vcHMgPQogICBzZXJfYmFzZV9ub2ZsdXNoX3NldF90 dHlfc3RhdGUsCiAgIHNlcl9iYXNlX3NldGJhdWRyYXRlLAogICBzZXJfYmFz ZV9zZXRzdG9wYml0cywKKyAgc2VyX2Jhc2Vfc2V0cGFyaXR5LAogICBzZXJf YmFzZV9kcmFpbl9vdXRwdXQsCiAgIHNlcl9iYXNlX2FzeW5jLAogICBzZXJf dW5peF9yZWFkX3ByaW0sCmRpZmYgLS1naXQgYS9nZGIvc2VyLXRjcC5jIGIv Z2RiL3Nlci10Y3AuYwppbmRleCA5YzNkY2Y0Li4zNTUxMmU2IDEwMDY0NAot LS0gYS9nZGIvc2VyLXRjcC5jCisrKyBiL2dkYi9zZXItdGNwLmMKQEAgLTM5 NCw2ICszOTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcmlhbF9vcHMg dGNwX29wcyA9CiAgIHNlcl9iYXNlX25vZmx1c2hfc2V0X3R0eV9zdGF0ZSwK ICAgc2VyX2Jhc2Vfc2V0YmF1ZHJhdGUsCiAgIHNlcl9iYXNlX3NldHN0b3Bi aXRzLAorICBzZXJfYmFzZV9zZXRwYXJpdHksCiAgIHNlcl9iYXNlX2RyYWlu X291dHB1dCwKICAgc2VyX2Jhc2VfYXN5bmMsCiAgIG5ldF9yZWFkX3ByaW0s CmRpZmYgLS1naXQgYS9nZGIvc2VyLXVuaXguYyBiL2dkYi9zZXItdW5peC5j CmluZGV4IDQxMjU3OTcuLjg4YzE2YmEgMTAwNjQ0Ci0tLSBhL2dkYi9zZXIt dW5peC5jCisrKyBiL2dkYi9zZXItdW5peC5jCkBAIC04Myw2ICs4Myw3IEBA IHN0YXRpYyBpbnQgaGFyZHdpcmVfcmVhZGNoYXIgKHN0cnVjdCBzZXJpYWwg KnNjYiwgaW50IHRpbWVvdXQpOwogc3RhdGljIGludCBkb19oYXJkd2lyZV9y ZWFkY2hhciAoc3RydWN0IHNlcmlhbCAqc2NiLCBpbnQgdGltZW91dCk7CiBz dGF0aWMgaW50IHJhdGVfdG9fY29kZSAoaW50IHJhdGUpOwogc3RhdGljIGlu dCBoYXJkd2lyZV9zZXRiYXVkcmF0ZSAoc3RydWN0IHNlcmlhbCAqc2NiLCBp bnQgcmF0ZSk7CitzdGF0aWMgaW50IGhhcmR3aXJlX3NldHBhcml0eSAoc3Ry dWN0IHNlcmlhbCAqc2NiLCBpbnQgcGFyaXR5KTsKIHN0YXRpYyB2b2lkIGhh cmR3aXJlX2Nsb3NlIChzdHJ1Y3Qgc2VyaWFsICpzY2IpOwogc3RhdGljIGlu dCBnZXRfdHR5X3N0YXRlIChzdHJ1Y3Qgc2VyaWFsICpzY2IsCiAJCQkgIHN0 cnVjdCBoYXJkd2lyZV90dHlzdGF0ZSAqIHN0YXRlKTsKQEAgLTg5Myw2ICs4 OTQsNDYgQEAgaGFyZHdpcmVfc2V0c3RvcGJpdHMgKHN0cnVjdCBzZXJpYWwg KnNjYiwgaW50IG51bSkKICAgcmV0dXJuIHNldF90dHlfc3RhdGUgKHNjYiwg JnN0YXRlKTsKIH0KIAorc3RhdGljIGludAoraGFyZHdpcmVfc2V0cGFyaXR5 IChzdHJ1Y3Qgc2VyaWFsICpzY2IsIGludCBwYXJpdHkpCit7CisgIHN0cnVj dCBoYXJkd2lyZV90dHlzdGF0ZSBzdGF0ZTsKKyAgaW50IG5ld3Bhcml0eSA9 IDA7CisKKyAgaWYgKGdldF90dHlfc3RhdGUgKHNjYiwgJnN0YXRlKSkKKyAg ICByZXR1cm4gLTE7CisKKyAgc3dpdGNoIChwYXJpdHkpCisgICAgeworICAg IGNhc2UgR0RCUEFSSVRZX05PTkU6CisgICAgICBuZXdwYXJpdHkgPSAwOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSBHREJQQVJJVFlfT0REOgorICAgICAg bmV3cGFyaXR5ID0gUEFSRU5CIHwgUEFST0REOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSBHREJQQVJJVFlfRVZFTjoKKyAgICAgIG5ld3Bhcml0eSA9IFBB UkVOQjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1 cm4gMTsKKyAgICB9CisKKyNpZmRlZiBIQVZFX1RFUk1JT1MKKyAgc3RhdGUu dGVybWlvcy5jX2NmbGFnIHw9IG5ld3Bhcml0eTsKKyNlbmRpZgorCisjaWZk ZWYgSEFWRV9URVJNSU8KKyAgc3RhdGUudGVybWlvLmNfY2ZsYWcgfD0gbmV3 cGFyaXR5OworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NHVFRZCisgIHJldHVy biAwOyAgICAgICAgICAgIC8qIHNndHR5IGRvZXNuJ3Qgc3VwcG9ydCB0aGlz ICovCisjZW5kaWYKKworICByZXR1cm4gc2V0X3R0eV9zdGF0ZSAoc2NiLCAm c3RhdGUpOworfQorCisKIHN0YXRpYyB2b2lkCiBoYXJkd2lyZV9jbG9zZSAo c3RydWN0IHNlcmlhbCAqc2NiKQogewpAQCAtOTI5LDYgKzk3MCw3IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyaWFsX29wcyBoYXJkd2lyZV9vcHMgPQog ICBoYXJkd2lyZV9ub2ZsdXNoX3NldF90dHlfc3RhdGUsCiAgIGhhcmR3aXJl X3NldGJhdWRyYXRlLAogICBoYXJkd2lyZV9zZXRzdG9wYml0cywKKyAgaGFy ZHdpcmVfc2V0cGFyaXR5LAogICBoYXJkd2lyZV9kcmFpbl9vdXRwdXQsCiAg IHNlcl9iYXNlX2FzeW5jLAogICBzZXJfdW5peF9yZWFkX3ByaW0sCmRpZmYg LS1naXQgYS9nZGIvc2VyaWFsLmMgYi9nZGIvc2VyaWFsLmMKaW5kZXggYjdl NjIwZC4uMDljOGI4ZCAxMDA2NDQKLS0tIGEvZ2RiL3NlcmlhbC5jCisrKyBi L2dkYi9zZXJpYWwuYwpAQCAtNTI1LDYgKzUyNSwxMiBAQCBzZXJpYWxfc2V0 c3RvcGJpdHMgKHN0cnVjdCBzZXJpYWwgKnNjYiwgaW50IG51bSkKIH0KIAog aW50CitzZXJpYWxfc2V0cGFyaXR5IChzdHJ1Y3Qgc2VyaWFsKnNjYiwgaW50 IHBhcml0eSkKK3sKKyAgICByZXR1cm4gc2NiLT5vcHMtPnNldHBhcml0eSAo c2NiLCBwYXJpdHkpOworfQorCitpbnQKIHNlcmlhbF9jYW5fYXN5bmNfcCAo c3RydWN0IHNlcmlhbCAqc2NiKQogewogICByZXR1cm4gKHNjYi0+b3BzLT5h c3luYyAhPSBOVUxMKTsKQEAgLTYzOCw2ICs2NDQsMjcgQEAgc2VyaWFsX2Jh dWRfc2hvd19jbWQgKHN0cnVjdCB1aV9maWxlICpmaWxlLCBpbnQgZnJvbV90 dHksCiAJCSAgICB2YWx1ZSk7CiB9CiAKKy8qIFBhcml0eSBmb3Igc2VyaWFs IHBvcnQgKi8KK2ludCBzZXJpYWxfcGFyaXR5ID0gR0RCUEFSSVRZX05PTkU7 CisKK3N0YXRpYyBjb25zdCBjaGFyIHBhcml0eV9ub25lW10gPSAibm9uZSI7 CitzdGF0aWMgY29uc3QgY2hhciBwYXJpdHlfb2RkW10gPSAib2RkIjsKK3N0 YXRpYyBjb25zdCBjaGFyIHBhcml0eV9ldmVuW10gPSAiZXZlbiI7CitzdGF0 aWMgY29uc3QgY2hhciAqY29uc3QgcGFyaXR5X2VudW1zW10gPQore3Bhcml0 eV9ub25lLCBwYXJpdHlfb2RkLCBwYXJpdHlfZXZlbiwgIE5VTEx9Oworc3Rh dGljIGNvbnN0IGNoYXIgKnBhcml0eSA9IHBhcml0eV9ub25lOworCitzdGF0 aWMgdm9pZAorc2V0X3Bhcml0eSAoY2hhciAqaWdub3JlX2FyZ3MsIGludCBm cm9tX3R0eSwgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmMpCit7CisgIGlm IChwYXJpdHkgPT0gcGFyaXR5X29kZCkKKyAgICBzZXJpYWxfcGFyaXR5ID0g R0RCUEFSSVRZX09ERDsKKyAgZWxzZSBpZiAocGFyaXR5ID09IHBhcml0eV9l dmVuKQorICAgIHNlcmlhbF9wYXJpdHkgPSBHREJQQVJJVFlfRVZFTjsKKyAg ZWxzZQorICAgIHNlcmlhbF9wYXJpdHkgPSBHREJQQVJJVFlfTk9ORTsKK30K Kwogdm9pZAogX2luaXRpYWxpemVfc2VyaWFsICh2b2lkKQogewpAQCAtNjcw LDYgKzY5NywxNCBAQCB1c2luZyByZW1vdGUgdGFyZ2V0cy4iKSwKIAkJCSAg ICBzZXJpYWxfYmF1ZF9zaG93X2NtZCwKIAkJCSAgICAmc2VyaWFsX3NldF9j bWRsaXN0LCAmc2VyaWFsX3Nob3dfY21kbGlzdCk7CiAKKyAgYWRkX3NldHNo b3dfZW51bV9jbWQgKCJwYXJpdHkiLCBub19jbGFzcywgcGFyaXR5X2VudW1z LAorICAgICAgICAgICAgICAgICAgICAgICAgJnBhcml0eSwgXygiXAorU2V0 IHBhcml0eSBmb3IgcmVtb3RlIHNlcmlhbCBJL08iKSwgXygiXAorU2hvdyBw YXJpdHkgZm9yIHJlbW90ZSBzZXJpYWwgSS9PIiksIE5VTEwsCisgICAgICAg ICAgICAgICAgICAgICAgICBzZXRfcGFyaXR5LAorICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgLyogRklYTUU6IGkxOG46ICovCisgICAgICAgICAg ICAgICAgICAgICAgICAmc2VyaWFsX3NldF9jbWRsaXN0LCAmc2VyaWFsX3No b3dfY21kbGlzdCk7CisKICAgYWRkX3NldHNob3dfZmlsZW5hbWVfY21kICgi cmVtb3RlbG9nZmlsZSIsIG5vX2NsYXNzLCAmc2VyaWFsX2xvZ2ZpbGUsIF8o IlwKIFNldCBmaWxlbmFtZSBmb3IgcmVtb3RlIHNlc3Npb24gcmVjb3JkaW5n LiIpLCBfKCJcCiBTaG93IGZpbGVuYW1lIGZvciByZW1vdGUgc2Vzc2lvbiBy ZWNvcmRpbmcuIiksIF8oIlwKZGlmZiAtLWdpdCBhL2dkYi9zZXJpYWwuaCBi L2dkYi9zZXJpYWwuaAppbmRleCA5ZWIxYzM5Li4wNDgxZWExIDEwMDY0NAot LS0gYS9nZGIvc2VyaWFsLmgKKysrIGIvZ2RiL3NlcmlhbC5oCkBAIC0xODYs NiArMTg2LDE0IEBAIGV4dGVybiBpbnQgc2VyaWFsX3NldGJhdWRyYXRlIChz dHJ1Y3Qgc2VyaWFsICpzY2IsIGludCByYXRlKTsKIAogZXh0ZXJuIGludCBz ZXJpYWxfc2V0c3RvcGJpdHMgKHN0cnVjdCBzZXJpYWwgKnNjYiwgaW50IG51 bSk7CiAKKy8qIFNldCBwYXJpdHkgZm9yIHNlcmlhbCBwb3J0LiBSZXR1cm4g MCBmb3Igc3VjY2VzcywgLTEgZm9yIGZhaWx1cmUgKi8KKworI2RlZmluZSBH REJQQVJJVFlfTk9ORSAgICAgMAorI2RlZmluZSBHREJQQVJJVFlfT0REICAg ICAgMQorI2RlZmluZSBHREJQQVJJVFlfRVZFTiAgICAgMgorCitleHRlcm4g aW50IHNlcmlhbF9zZXRwYXJpdHkgKHN0cnVjdCBzZXJpYWwgKnNjYiwgaW50 IHBhcml0eSk7CisKIC8qIEFzeW5jaHJvbm91cyBzZXJpYWwgaW50ZXJmYWNl OiAqLwogCiAvKiBDYW4gdGhlIHNlcmlhbCBkZXZpY2Ugc3VwcG9ydCBhc3lu Y2hyb25vdXMgbW9kZT8gICovCkBAIC0yNzEsNiArMjc5LDcgQEAgc3RydWN0 IHNlcmlhbF9vcHMKIAkJCQkgIHNlcmlhbF90dHlzdGF0ZSk7CiAgICAgaW50 ICgqc2V0YmF1ZHJhdGUpIChzdHJ1Y3Qgc2VyaWFsICosIGludCByYXRlKTsK ICAgICBpbnQgKCpzZXRzdG9wYml0cykgKHN0cnVjdCBzZXJpYWwgKiwgaW50 IG51bSk7CisgICAgaW50ICgqc2V0cGFyaXR5KSAoc3RydWN0IHNlcmlhbCAq LCBpbnQgcGFyaXR5KTsKICAgICAvKiBXYWl0IGZvciBvdXRwdXQgdG8gZHJh aW4uICAqLwogICAgIGludCAoKmRyYWluX291dHB1dCkgKHN0cnVjdCBzZXJp YWwgKik7CiAgICAgLyogQ2hhbmdlIHRoZSBzZXJpYWwgZGV2aWNlIGludG8v b3V0IG9mIGFzeW5jaHJvbm91cyBtb2RlLCBjYWxsCmRpZmYgLS1naXQgYS9n ZGIvdGFyZ2V0LmggYi9nZGIvdGFyZ2V0LmgKaW5kZXggYzk1ZTFhNC4uNjg1 YTM3ZiAxMDA2NDQKLS0tIGEvZ2RiL3RhcmdldC5oCisrKyBiL2dkYi90YXJn ZXQuaApAQCAtMjIzNiw2ICsyMjM2LDEwIEBAIGV4dGVybiBpbnQgcmVtb3Rl X2RlYnVnOwogCiAvKiBTcGVlZCBpbiBiaXRzIHBlciBzZWNvbmQsIG9yIC0x IHdoaWNoIG1lYW5zIGRvbid0IG1lc3Mgd2l0aCB0aGUgc3BlZWQuICAqLwog ZXh0ZXJuIGludCBiYXVkX3JhdGU7CisKKy8qIFBhcml0eSBmb3Igc2VyaWFs IHBvcnQgKi8KK2V4dGVybiBpbnQgc2VyaWFsX3Bhcml0eTsKKwogLyogVGlt ZW91dCBsaW1pdCBmb3IgcmVzcG9uc2UgZnJvbSB0YXJnZXQuICAqLwogZXh0 ZXJuIGludCByZW1vdGVfdGltZW91dDsKIAo= --001a1136755289a2ab05115ab5dd--