From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Re: buffer.c/buffer.h: How to add new buffer-local variables? Date: Sun, 7 Apr 2019 22:23:07 -0700 Organization: UCLA Computer Science Department Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------C375350D58CC43C5E4284586" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="148613"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 Cc: Alan Mackenzie , Daniel Colascione , Andreas Schwab , Stefan Monnier , emacs-devel@gnu.org To: Keith David Bershatsky Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Apr 08 07:36:15 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hDMx4-000cUh-3e for ged-emacs-devel@m.gmane.org; Mon, 08 Apr 2019 07:36:14 +0200 Original-Received: from localhost ([127.0.0.1]:47723 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hDMx3-0008Ga-2F for ged-emacs-devel@m.gmane.org; Mon, 08 Apr 2019 01:36:13 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:38540) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hDMwm-0007xk-JX for emacs-devel@gnu.org; Mon, 08 Apr 2019 01:35:58 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hDMkT-0005MR-Iz for emacs-devel@gnu.org; Mon, 08 Apr 2019 01:23:15 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:51288) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hDMkS-0005Lb-Tp for emacs-devel@gnu.org; Mon, 08 Apr 2019 01:23:13 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 9E80B16166A; Sun, 7 Apr 2019 22:23:10 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 19edS75RqrH6; Sun, 7 Apr 2019 22:23:08 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 1085E16166C; Sun, 7 Apr 2019 22:23:08 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id LZrGgqrESRVi; Sun, 7 Apr 2019 22:23:07 -0700 (PDT) Original-Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id B9E3C160A2B; Sun, 7 Apr 2019 22:23:07 -0700 (PDT) In-Reply-To: Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 131.179.128.68 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:235107 Archived-At: This is a multi-part message in MIME format. --------------C375350D58CC43C5E4284586 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Keith David Bershatsky wrote: > Perhaps there is something that may stand out (to a trained programmer) in the 01/31/2019 commit .... It did change the buffer struct layout, so it's a good candidate for a culprit. For what it's worth, I cannot reproduce the problem in a 32-bit build under Fedora 29 x86-64 (GCC 8.3.1). I configured this way: ./configure CC=gcc -m32 -march=native --enable-gcc-warnings --without-imagemagick --without-gif --with-modules --enable-checking=yes,glyphs --enable-check-lisp-object-type --with-gnutls=no and built Emacs master with the attached patch x.diff. My guess is that the problem has something to do with the unportable assumptions we've long made about struct buffer layout. I am attaching ptype.txt, the output of the GDB command "ptype /o current_buffer" that Eli suggested; please compare it to your ptype output. --------------C375350D58CC43C5E4284586 Content-Type: text/x-patch; name="x.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="x.diff" diff --git a/src/buffer.c b/src/buffer.c index ab47748191..2f8cb1d7c5 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -133,6 +133,69 @@ CHECK_OVERLAY (Lisp_Object x) /* These setters are used only in this file, so they can be private. The public setters are inline functions defined in buffer.h. */ + + +/* *************************************************************************** */ +/* begin MULTIPLE-CURSORS */ + +static void +bset_mc_real_fake_cursor (struct buffer *b, Lisp_Object val) +{ + b->mc_real_fake_cursor_ = val; +} + +static void +bset_mc_conf (struct buffer *b, Lisp_Object val) +{ + b->mc_conf_ = val; +} + +static void +bset_mc_inactive_windows (struct buffer *b, Lisp_Object val) +{ + b->mc_inactive_windows_ = val; +} + +static void +bset_crosshairs (struct buffer *b, Lisp_Object val) +{ + b->crosshairs_ = val; +} + +static void +bset_ch_horizontal_ruler (struct buffer *b, Lisp_Object val) +{ + b->ch_horizontal_ruler_ = val; +} + +static void +bset_ch_vertical_ruler (struct buffer *b, Lisp_Object val) +{ + b->ch_vertical_ruler_ = val; +} + +static void +bset_ch_inactive_windows (struct buffer *b, Lisp_Object val) +{ + b->ch_inactive_windows_ = val; +} + +static void +bset_fc_visible (struct buffer *b, Lisp_Object val) +{ + b->fc_visible_ = val; +} + +static void +bset_fc_inactive_windows (struct buffer *b, Lisp_Object val) +{ + b->fc_inactive_windows_ = val; +} + +/* end MULTIPLE-CURSORS */ +/* *************************************************************************** */ + + static void bset_abbrev_mode (struct buffer *b, Lisp_Object val) { @@ -5142,6 +5205,24 @@ init_buffer_once (void) bset_last_selected_window (&buffer_local_flags, make_fixnum (0)); idx = 1; + + +/* *************************************************************************** */ +/* MULTIPLE-CURSORS */ + + XSETFASTINT (BVAR (&buffer_local_flags, mc_real_fake_cursor), idx); ++idx; + XSETFASTINT (BVAR (&buffer_local_flags, mc_conf), idx); ++idx; + XSETFASTINT (BVAR (&buffer_local_flags, mc_inactive_windows), idx); ++idx; + XSETFASTINT (BVAR (&buffer_local_flags, crosshairs), idx); ++idx; + XSETFASTINT (BVAR (&buffer_local_flags, ch_horizontal_ruler), idx); ++idx; + XSETFASTINT (BVAR (&buffer_local_flags, ch_vertical_ruler), idx); ++idx; + XSETFASTINT (BVAR (&buffer_local_flags, ch_inactive_windows), idx); ++idx; + XSETFASTINT (BVAR (&buffer_local_flags, fc_visible), idx); ++idx; + XSETFASTINT (BVAR (&buffer_local_flags, fc_inactive_windows), idx); ++idx; + +/* *************************************************************************** */ + + XSETFASTINT (BVAR (&buffer_local_flags, mode_line_format), idx); ++idx; XSETFASTINT (BVAR (&buffer_local_flags, abbrev_mode), idx); ++idx; XSETFASTINT (BVAR (&buffer_local_flags, overwrite_mode), idx); ++idx; @@ -5228,6 +5309,24 @@ init_buffer_once (void) /* Must do these before making the first buffer! */ /* real setup is done in bindings.el */ + + +/* *************************************************************************** */ +/* MULTIPLE-CURSORS */ + + bset_mc_real_fake_cursor (&buffer_defaults, Qt); + bset_mc_conf (&buffer_defaults, Qnil); + bset_mc_inactive_windows (&buffer_defaults, Qt); + bset_crosshairs (&buffer_defaults, Qnil); + bset_ch_horizontal_ruler (&buffer_defaults, Qt); + bset_ch_vertical_ruler (&buffer_defaults, Qt); + bset_ch_inactive_windows (&buffer_defaults, Qt); + bset_fc_visible (&buffer_defaults, Qnil); + bset_fc_inactive_windows (&buffer_defaults, Qt); + +/* *************************************************************************** */ + + bset_mode_line_format (&buffer_defaults, build_pure_c_string ("%-")); bset_header_line_format (&buffer_defaults, Qnil); bset_abbrev_mode (&buffer_defaults, Qnil); @@ -5464,6 +5563,23 @@ syms_of_buffer (void) staticpro (&QSFundamental); staticpro (&Vbuffer_alist); + +/* *************************************************************************** */ +/* MULTIPLE-CURSORS */ + + DEFSYM (Qmc_real_fake_cursor, "mc-real-fake-cursor"); + DEFSYM (Qmc_conf, "mc-conf"); + DEFSYM (Qmc_inactive_windows, "mc-inactive-windows"); + DEFSYM (Qcrosshairs, "crosshairs"); + DEFSYM (Qch_horizontal_ruler, "ch-horizontal-ruler"); + DEFSYM (Qch_vertical_ruler, "ch-vertical-ruler"); + DEFSYM (Qch_inactive_windows, "ch-inactive-windows"); + DEFSYM (Qfc_visible, "fc-visible"); + DEFSYM (Qfc_visible_inactive_window, "fc-inactive-window"); + +/* *************************************************************************** */ + + DEFSYM (Qchoice, "choice"); DEFSYM (Qleft, "left"); DEFSYM (Qright, "right"); @@ -5501,6 +5617,41 @@ syms_of_buffer (void) Fput (Qprotected_field, Qerror_message, build_pure_c_string ("Attempt to modify a protected field")); + +/* *************************************************************************** */ +/* MULTIPLE-CURSORS */ + + DEFVAR_PER_BUFFER ("mc-real-fake-cursor", &BVAR (current_buffer, mc_real_fake_cursor), Qnil, + doc: /* A bufer-local variable to set the cursor type of the real fake cursor. */); + + DEFVAR_PER_BUFFER ("mc-conf", &BVAR (current_buffer, mc_conf), Qnil, + doc: /* A bufer-local variable to store the value of the multiple cursors to be displayed +during the next redisplay. */); + + DEFVAR_PER_BUFFER ("mc-inactive-windows", &BVAR (current_buffer, mc_inactive_windows), Qnil, + doc: /* When non-nil, draw multiple cursors in inactive windows. */); + + DEFVAR_PER_BUFFER ("crosshairs", &BVAR (current_buffer, crosshairs), Qnil, + doc: /* A bufer-local variable to activate/deactivate crosshairs. */); + + DEFVAR_PER_BUFFER ("ch-horizontal-ruler", &BVAR (current_buffer, ch_horizontal_ruler), Qnil, + doc: /* A bufer-local variable to activate/deactivate the crosshairs horizontal ruler. */); + + DEFVAR_PER_BUFFER ("ch-vertical-ruler", &BVAR (current_buffer, ch_vertical_ruler), Qnil, + doc: /* A bufer-local variable to activate/deactivate the crosshairs vertical ruler. */); + + DEFVAR_PER_BUFFER ("ch-inactive-windows", &BVAR (current_buffer, ch_inactive_windows), Qnil, + doc: /* When non-nil, draw crosshairs in inactive windows. */); + + DEFVAR_PER_BUFFER ("fc-visible", &BVAR (current_buffer, fc_visible), Qnil, + doc: /* A bufer-local variable to turn on/off the multiple cursors fill column. */); + + DEFVAR_PER_BUFFER ("fc-inactive-windows", &BVAR (current_buffer, fc_inactive_windows), Qnil, + doc: /* When non-nil, draw multiple cursors fill column in inactive windows. */); + +/* *************************************************************************** */ + + DEFVAR_PER_BUFFER ("header-line-format", &BVAR (current_buffer, header_line_format), Qnil, diff --git a/src/buffer.h b/src/buffer.h index 63b162161c..4dd91911da 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -636,6 +636,40 @@ struct buffer cache are enabled. See search.c, indent.c and bidi.c for details. */ Lisp_Object cache_long_scans_; + +/* *************************************************************************** */ +/* MULTIPLE-CURSORS */ + + /* The cursor type of the real fake cursor. */ + Lisp_Object mc_real_fake_cursor_; + + /* The name of list used by multiple cursors for next redisplay. */ + Lisp_Object mc_conf_; + + /* Whether to draw multiple cursors in inactive windows. */ + Lisp_Object mc_inactive_windows_; + + /* The name of the buffer-local variable. */ + Lisp_Object crosshairs_; + + /* The name of the crosshairs horizontal ruler. */ + Lisp_Object ch_horizontal_ruler_; + + /* The name of the crosshairs vertical ruler. */ + Lisp_Object ch_vertical_ruler_; + + /* Whether to draw crosshairs in inactive windows. */ + Lisp_Object ch_inactive_windows_; + + /* The name of the buffer-local variable. */ + Lisp_Object fc_visible_; + + /* Whether to draw multiple cursors fill column in inactive windows. */ + Lisp_Object fc_inactive_windows_; + +/* *************************************************************************** */ + + /* If the width run cache is enabled, this table contains the character widths width_run_cache (see above) assumes. When we do a thorough redisplay, we compare this against the buffer's @@ -787,14 +821,21 @@ struct buffer an indirect buffer since it counts as its base buffer. */ int window_count; + +/* *************************************************************************** */ +/* MULTIPLE-CURSORS */ + /* A non-zero value in slot IDX means that per-buffer variable with index IDX has a local value in this buffer. The index IDX for a buffer-local variable is stored in that variable's slot in buffer_local_flags as a Lisp integer. If the index is -1, this means the variable is always local in all buffers. */ -#define MAX_PER_BUFFER_VARS 50 +#define MAX_PER_BUFFER_VARS 60 char local_flags[MAX_PER_BUFFER_VARS]; +/* *************************************************************************** */ + + /* Set to the modtime of the visited file when read or written. modtime.tv_nsec == NONEXISTENT_MODTIME_NSECS means visited file was nonexistent. modtime.tv_nsec == @@ -903,6 +944,69 @@ XBUFFER (Lisp_Object a) /* Most code should use these functions to set Lisp fields in struct buffer. (Some setters that are private to a single .c file are defined as static in those files.) */ + + +/* *************************************************************************** */ +/* begin MULTIPLE-CURSORS */ + +INLINE void +bset_blv_mc_real_fake_cursor (struct buffer *b, Lisp_Object val) +{ + b->mc_real_fake_cursor_ = val; +} + +INLINE void +bset_blv_mc_conf (struct buffer *b, Lisp_Object val) +{ + b->mc_conf_ = val; +} + +INLINE void +bset_blv_mc_inactive_windows (struct buffer *b, Lisp_Object val) +{ + b->mc_inactive_windows_ = val; +} + +INLINE void +bset_blv_crosshairs (struct buffer *b, Lisp_Object val) +{ + b->crosshairs_ = val; +} + +INLINE void +bset_blv_ch_horizontal_ruler (struct buffer *b, Lisp_Object val) +{ + b->ch_horizontal_ruler_ = val; +} + +INLINE void +bset_blv_ch_vertical_ruler (struct buffer *b, Lisp_Object val) +{ + b->ch_vertical_ruler_ = val; +} + +INLINE void +bset_blv_ch_inactive_windows (struct buffer *b, Lisp_Object val) +{ + b->ch_inactive_windows_ = val; +} + +INLINE void +bset_blv_fc_visible (struct buffer *b, Lisp_Object val) +{ + b->fc_visible_ = val; +} + +INLINE void +bset_blv_fc_inactive_windows (struct buffer *b, Lisp_Object val) +{ + b->fc_inactive_windows_ = val; +} + +/* end MULTIPLE-CURSORS */ +/* *************************************************************************** */ + + INLINE void bset_bidi_paragraph_direction (struct buffer *b, Lisp_Object val) { diff --git a/src/pdumper.c b/src/pdumper.c index b19f206d1b..0b60f79a6c 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -2770,9 +2770,6 @@ dump_hash_table (struct dump_context *ctx, static dump_off dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer) { -#if CHECK_STRUCTS && !defined HASH_buffer_2CEE653E74 -# error "buffer changed. See CHECK_STRUCTS comment." -#endif struct buffer munged_buffer = *in_buffer; struct buffer *buffer = &munged_buffer; --------------C375350D58CC43C5E4284586 Content-Type: text/plain; charset=UTF-8; name="ptype.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ptype.txt" KGdkYikgcHR5cGUgL28gY3VycmVudF9idWZmZXIKdHlwZSA9IHN0cnVjdCBidWZmZXIgewov KiAgICAwICAgICAgfCAgICAgNCAqLyAgICB1bmlvbiB2ZWN0b3JsaWtlX2hlYWRlciB7Ci8q ICAgICAgICAgICAgICAgICA0ICovICAgICAgICBwdHJkaWZmX3Qgc2l6ZTsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0b3RhbCBzaXplIChieXRlcyk6ICAgIDQgKi8K ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBoZWFkZXI7Ci8qICAgIDQgICAgICB8ICAg ICA0ICovICAgIExpc3BfT2JqZWN0IG5hbWVfOwovKiAgICA4ICAgICAgfCAgICAgNCAqLyAg ICBMaXNwX09iamVjdCBmaWxlbmFtZV87Ci8qICAgMTIgICAgICB8ICAgICA0ICovICAgIExp c3BfT2JqZWN0IGRpcmVjdG9yeV87Ci8qICAgMTYgICAgICB8ICAgICA0ICovICAgIExpc3Bf T2JqZWN0IGJhY2tlZF91cF87Ci8qICAgMjAgICAgICB8ICAgICA0ICovICAgIExpc3BfT2Jq ZWN0IHNhdmVfbGVuZ3RoXzsKLyogICAyNCAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmpl Y3QgYXV0b19zYXZlX2ZpbGVfbmFtZV87Ci8qICAgMjggICAgICB8ICAgICA0ICovICAgIExp c3BfT2JqZWN0IHJlYWRfb25seV87Ci8qICAgMzIgICAgICB8ICAgICA0ICovICAgIExpc3Bf T2JqZWN0IG1hcmtfOwovKiAgIDM2ICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBs b2NhbF92YXJfYWxpc3RfOwovKiAgIDQwICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVj dCBtYWpvcl9tb2RlXzsKLyogICA0NCAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmplY3Qg bW9kZV9uYW1lXzsKLyogICA0OCAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmplY3QgbW9k ZV9saW5lX2Zvcm1hdF87Ci8qICAgNTIgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0 IGhlYWRlcl9saW5lX2Zvcm1hdF87Ci8qICAgNTYgICAgICB8ICAgICA0ICovICAgIExpc3Bf T2JqZWN0IGtleW1hcF87Ci8qICAgNjAgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0 IGFiYnJldl90YWJsZV87Ci8qICAgNjQgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0 IHN5bnRheF90YWJsZV87Ci8qICAgNjggICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0 IGNhdGVnb3J5X3RhYmxlXzsKLyogICA3MiAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmpl Y3QgY2FzZV9mb2xkX3NlYXJjaF87Ci8qICAgNzYgICAgICB8ICAgICA0ICovICAgIExpc3Bf T2JqZWN0IHRhYl93aWR0aF87Ci8qICAgODAgICAgICB8ICAgICA0ICovICAgIExpc3BfT2Jq ZWN0IGZpbGxfY29sdW1uXzsKLyogICA4NCAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmpl Y3QgbGVmdF9tYXJnaW5fOwovKiAgIDg4ICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVj dCBhdXRvX2ZpbGxfZnVuY3Rpb25fOwovKiAgIDkyICAgICAgfCAgICAgNCAqLyAgICBMaXNw X09iamVjdCBkb3duY2FzZV90YWJsZV87Ci8qICAgOTYgICAgICB8ICAgICA0ICovICAgIExp c3BfT2JqZWN0IHVwY2FzZV90YWJsZV87Ci8qICAxMDAgICAgICB8ICAgICA0ICovICAgIExp c3BfT2JqZWN0IGNhc2VfY2Fub25fdGFibGVfOwovKiAgMTA0ICAgICAgfCAgICAgNCAqLyAg ICBMaXNwX09iamVjdCBjYXNlX2Vxdl90YWJsZV87Ci8qICAxMDggICAgICB8ICAgICA0ICov ICAgIExpc3BfT2JqZWN0IHRydW5jYXRlX2xpbmVzXzsKLyogIDExMiAgICAgIHwgICAgIDQg Ki8gICAgTGlzcF9PYmplY3Qgd29yZF93cmFwXzsKLyogIDExNiAgICAgIHwgICAgIDQgKi8g ICAgTGlzcF9PYmplY3QgY3RsX2Fycm93XzsKLyogIDEyMCAgICAgIHwgICAgIDQgKi8gICAg TGlzcF9PYmplY3QgYmlkaV9kaXNwbGF5X3Jlb3JkZXJpbmdfOwovKiAgMTI0ICAgICAgfCAg ICAgNCAqLyAgICBMaXNwX09iamVjdCBiaWRpX3BhcmFncmFwaF9kaXJlY3Rpb25fOwovKiAg MTI4ICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBiaWRpX3BhcmFncmFwaF9zZXBh cmF0ZV9yZV87Ci8qICAxMzIgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0IGJpZGlf cGFyYWdyYXBoX3N0YXJ0X3JlXzsKLyogIDEzNiAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9P YmplY3Qgc2VsZWN0aXZlX2Rpc3BsYXlfOwovKiAgMTQwICAgICAgfCAgICAgNCAqLyAgICBM aXNwX09iamVjdCBzZWxlY3RpdmVfZGlzcGxheV9lbGxpcHNlc187Ci8qICAxNDQgICAgICB8 ICAgICA0ICovICAgIExpc3BfT2JqZWN0IG1pbm9yX21vZGVzXzsKLyogIDE0OCAgICAgIHwg ICAgIDQgKi8gICAgTGlzcF9PYmplY3Qgb3ZlcndyaXRlX21vZGVfOwovKiAgMTUyICAgICAg fCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBhYmJyZXZfbW9kZV87Ci8qICAxNTYgICAgICB8 ICAgICA0ICovICAgIExpc3BfT2JqZWN0IGRpc3BsYXlfdGFibGVfOwovKiAgMTYwICAgICAg fCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBtYXJrX2FjdGl2ZV87Ci8qICAxNjQgICAgICB8 ICAgICA0ICovICAgIExpc3BfT2JqZWN0IGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVyc187 Ci8qICAxNjggICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0IGJ1ZmZlcl9maWxlX2Nv ZGluZ19zeXN0ZW1fOwovKiAgMTcyICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBm aWxlX2Zvcm1hdF87Ci8qICAxNzYgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0IGF1 dG9fc2F2ZV9maWxlX2Zvcm1hdF87Ci8qICAxODAgICAgICB8ICAgICA0ICovICAgIExpc3Bf T2JqZWN0IGNhY2hlX2xvbmdfc2NhbnNfOwovKiAgMTg0ICAgICAgfCAgICAgNCAqLyAgICBM aXNwX09iamVjdCBtY19yZWFsX2Zha2VfY3Vyc29yXzsKLyogIDE4OCAgICAgIHwgICAgIDQg Ki8gICAgTGlzcF9PYmplY3QgbWNfY29uZl87Ci8qICAxOTIgICAgICB8ICAgICA0ICovICAg IExpc3BfT2JqZWN0IG1jX2luYWN0aXZlX3dpbmRvd3NfOwovKiAgMTk2ICAgICAgfCAgICAg NCAqLyAgICBMaXNwX09iamVjdCBjcm9zc2hhaXJzXzsKLyogIDIwMCAgICAgIHwgICAgIDQg Ki8gICAgTGlzcF9PYmplY3QgY2hfaG9yaXpvbnRhbF9ydWxlcl87Ci8qICAyMDQgICAgICB8 ICAgICA0ICovICAgIExpc3BfT2JqZWN0IGNoX3ZlcnRpY2FsX3J1bGVyXzsKLyogIDIwOCAg ICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmplY3QgY2hfaW5hY3RpdmVfd2luZG93c187Ci8q ICAyMTIgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0IGZjX3Zpc2libGVfOwovKiAg MjE2ICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBmY19pbmFjdGl2ZV93aW5kb3dz XzsKLyogIDIyMCAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmplY3Qgd2lkdGhfdGFibGVf OwovKiAgMjI0ICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBwdF9tYXJrZXJfOwov KiAgMjI4ICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBiZWd2X21hcmtlcl87Ci8q ICAyMzIgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0IHp2X21hcmtlcl87Ci8qICAy MzYgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0IHBvaW50X2JlZm9yZV9zY3JvbGxf OwovKiAgMjQwICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBmaWxlX3RydWVuYW1l XzsKLyogIDI0NCAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmplY3QgaW52aXNpYmlsaXR5 X3NwZWNfOwovKiAgMjQ4ICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBsYXN0X3Nl bGVjdGVkX3dpbmRvd187Ci8qICAyNTIgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0 IGRpc3BsYXlfY291bnRfOwovKiAgMjU2ICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVj dCBsZWZ0X21hcmdpbl9jb2xzXzsKLyogIDI2MCAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9P YmplY3QgcmlnaHRfbWFyZ2luX2NvbHNfOwovKiAgMjY0ICAgICAgfCAgICAgNCAqLyAgICBM aXNwX09iamVjdCBsZWZ0X2ZyaW5nZV93aWR0aF87Ci8qICAyNjggICAgICB8ICAgICA0ICov ICAgIExpc3BfT2JqZWN0IHJpZ2h0X2ZyaW5nZV93aWR0aF87Ci8qICAyNzIgICAgICB8ICAg ICA0ICovICAgIExpc3BfT2JqZWN0IGZyaW5nZXNfb3V0c2lkZV9tYXJnaW5zXzsKLyogIDI3 NiAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmplY3Qgc2Nyb2xsX2Jhcl93aWR0aF87Ci8q ICAyODAgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0IHNjcm9sbF9iYXJfaGVpZ2h0 XzsKLyogIDI4NCAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmplY3QgdmVydGljYWxfc2Ny b2xsX2Jhcl90eXBlXzsKLyogIDI4OCAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmplY3Qg aG9yaXpvbnRhbF9zY3JvbGxfYmFyX3R5cGVfOwovKiAgMjkyICAgICAgfCAgICAgNCAqLyAg ICBMaXNwX09iamVjdCBpbmRpY2F0ZV9lbXB0eV9saW5lc187Ci8qICAyOTYgICAgICB8ICAg ICA0ICovICAgIExpc3BfT2JqZWN0IGluZGljYXRlX2J1ZmZlcl9ib3VuZGFyaWVzXzsKLyog IDMwMCAgICAgIHwgICAgIDQgKi8gICAgTGlzcF9PYmplY3QgZnJpbmdlX2luZGljYXRvcl9h bGlzdF87Ci8qICAzMDQgICAgICB8ICAgICA0ICovICAgIExpc3BfT2JqZWN0IGZyaW5nZV9j dXJzb3JfYWxpc3RfOwovKiAgMzA4ICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBk aXNwbGF5X3RpbWVfOwovKiAgMzEyICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBz Y3JvbGxfdXBfYWdncmVzc2l2ZWx5XzsKLyogIDMxNiAgICAgIHwgICAgIDQgKi8gICAgTGlz cF9PYmplY3Qgc2Nyb2xsX2Rvd25fYWdncmVzc2l2ZWx5XzsKLyogIDMyMCAgICAgIHwgICAg IDQgKi8gICAgTGlzcF9PYmplY3QgY3Vyc29yX3R5cGVfOwovKiAgMzI0ICAgICAgfCAgICAg NCAqLyAgICBMaXNwX09iamVjdCBleHRyYV9saW5lX3NwYWNpbmdfOwovKiAgMzI4ICAgICAg fCAgICAgNCAqLyAgICBMaXNwX09iamVjdCBjdXJzb3JfaW5fbm9uX3NlbGVjdGVkX3dpbmRv d3NfOwovKiAgMzMyICAgICAgfCAgIDEwMCAqLyAgICBzdHJ1Y3QgYnVmZmVyX3RleHQgewov KiAgMzMyICAgICAgfCAgICAgNCAqLyAgICAgICAgdW5zaWduZWQgY2hhciAqYmVnOwovKiAg MzM2ICAgICAgfCAgICAgNCAqLyAgICAgICAgcHRyZGlmZl90IGdwdDsKLyogIDM0MCAgICAg IHwgICAgIDQgKi8gICAgICAgIHB0cmRpZmZfdCB6OwovKiAgMzQ0ICAgICAgfCAgICAgNCAq LyAgICAgICAgcHRyZGlmZl90IGdwdF9ieXRlOwovKiAgMzQ4ICAgICAgfCAgICAgNCAqLyAg ICAgICAgcHRyZGlmZl90IHpfYnl0ZTsKLyogIDM1MiAgICAgIHwgICAgIDQgKi8gICAgICAg IHB0cmRpZmZfdCBnYXBfc2l6ZTsKLyogIDM1NiAgICAgIHwgICAgIDggKi8gICAgICAgIG1v ZGlmZl9jb3VudCBtb2RpZmY7Ci8qICAzNjQgICAgICB8ICAgICA4ICovICAgICAgICBtb2Rp ZmZfY291bnQgY2hhcnNfbW9kaWZmOwovKiAgMzcyICAgICAgfCAgICAgOCAqLyAgICAgICAg bW9kaWZmX2NvdW50IHNhdmVfbW9kaWZmOwovKiAgMzgwICAgICAgfCAgICAgOCAqLyAgICAg ICAgbW9kaWZmX2NvdW50IG92ZXJsYXlfbW9kaWZmOwovKiAgMzg4ICAgICAgfCAgICAgOCAq LyAgICAgICAgbW9kaWZmX2NvdW50IGNvbXBhY3Q7Ci8qICAzOTYgICAgICB8ICAgICA0ICov ICAgICAgICBwdHJkaWZmX3QgYmVnX3VuY2hhbmdlZDsKLyogIDQwMCAgICAgIHwgICAgIDQg Ki8gICAgICAgIHB0cmRpZmZfdCBlbmRfdW5jaGFuZ2VkOwovKiAgNDA0ICAgICAgfCAgICAg OCAqLyAgICAgICAgbW9kaWZmX2NvdW50IHVuY2hhbmdlZF9tb2RpZmllZDsKLyogIDQxMiAg ICAgIHwgICAgIDggKi8gICAgICAgIG1vZGlmZl9jb3VudCBvdmVybGF5X3VuY2hhbmdlZF9t b2RpZmllZDsKLyogIDQyMCAgICAgIHwgICAgIDQgKi8gICAgICAgIElOVEVSVkFMIGludGVy dmFsczsKLyogIDQyNCAgICAgIHwgICAgIDQgKi8gICAgICAgIHN0cnVjdCBMaXNwX01hcmtl ciAqbWFya2VyczsKLyogIDQyODogNyAgIHwgICAgIDEgKi8gICAgICAgIGJvb2xfYmYgaW5o aWJpdF9zaHJpbmtpbmcgOiAxOwovKiAgNDI4OiA2ICAgfCAgICAgMSAqLyAgICAgICAgYm9v bF9iZiByZWRpc3BsYXkgOiAxOwovKiBYWFggIDYtYml0IHBhZGRpbmcgICovCi8qIFhYWCAg My1ieXRlIHBhZGRpbmcgKi8KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 b3RhbCBzaXplIChieXRlcyk6ICAxMDAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAg fSBvd25fdGV4dDsKLyogIDQzMiAgICAgIHwgICAgIDQgKi8gICAgc3RydWN0IGJ1ZmZlcl90 ZXh0ICp0ZXh0OwovKiAgNDM2ICAgICAgfCAgICAgNCAqLyAgICBzdHJ1Y3QgYnVmZmVyICpu ZXh0OwovKiAgNDQwICAgICAgfCAgICAgNCAqLyAgICBwdHJkaWZmX3QgcHQ7Ci8qICA0NDQg ICAgICB8ICAgICA0ICovICAgIHB0cmRpZmZfdCBwdF9ieXRlOwovKiAgNDQ4ICAgICAgfCAg ICAgNCAqLyAgICBwdHJkaWZmX3QgYmVndjsKLyogIDQ1MiAgICAgIHwgICAgIDQgKi8gICAg cHRyZGlmZl90IGJlZ3ZfYnl0ZTsKLyogIDQ1NiAgICAgIHwgICAgIDQgKi8gICAgcHRyZGlm Zl90IHp2OwovKiAgNDYwICAgICAgfCAgICAgNCAqLyAgICBwdHJkaWZmX3QgenZfYnl0ZTsK LyogIDQ2NCAgICAgIHwgICAgIDQgKi8gICAgc3RydWN0IGJ1ZmZlciAqYmFzZV9idWZmZXI7 Ci8qICA0NjggICAgICB8ICAgICA0ICovICAgIGludCBpbmRpcmVjdGlvbnM7Ci8qICA0NzIg ICAgICB8ICAgICA0ICovICAgIGludCB3aW5kb3dfY291bnQ7Ci8qICA0NzYgICAgICB8ICAg IDYwICovICAgIGNoYXIgbG9jYWxfZmxhZ3NbNjBdOwovKiAgNTM2ICAgICAgfCAgICAgOCAq LyAgICBzdHJ1Y3QgdGltZXNwZWMgewovKiAgNTM2ICAgICAgfCAgICAgNCAqLyAgICAgICAg X190aW1lX3QgdHZfc2VjOwovKiAgNTQwICAgICAgfCAgICAgNCAqLyAgICAgICAgX19zeXNj YWxsX3Nsb25nX3QgdHZfbnNlYzsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0b3RhbCBzaXplIChieXRlcyk6ICAgIDggKi8KICAgICAgICAgICAgICAgICAgICAgICAg ICAgfSBtb2R0aW1lOwovKiAgNTQ0ICAgICAgfCAgICAgOCAqLyAgICBvZmZfdCBtb2R0aW1l X3NpemU7Ci8qICA1NTIgICAgICB8ICAgICA4ICovICAgIG1vZGlmZl9jb3VudCBhdXRvX3Nh dmVfbW9kaWZpZWQ7Ci8qICA1NjAgICAgICB8ICAgICA4ICovICAgIG1vZGlmZl9jb3VudCBk aXNwbGF5X2Vycm9yX21vZGlmZjsKLyogIDU2OCAgICAgIHwgICAgIDQgKi8gICAgdGltZV90 IGF1dG9fc2F2ZV9mYWlsdXJlX3RpbWU7Ci8qICA1NzIgICAgICB8ICAgICA0ICovICAgIHB0 cmRpZmZfdCBsYXN0X3dpbmRvd19zdGFydDsKLyogIDU3NiAgICAgIHwgICAgIDQgKi8gICAg c3RydWN0IHJlZ2lvbl9jYWNoZSAqbmV3bGluZV9jYWNoZTsKLyogIDU4MCAgICAgIHwgICAg IDQgKi8gICAgc3RydWN0IHJlZ2lvbl9jYWNoZSAqd2lkdGhfcnVuX2NhY2hlOwovKiAgNTg0 ICAgICAgfCAgICAgNCAqLyAgICBzdHJ1Y3QgcmVnaW9uX2NhY2hlICpiaWRpX3BhcmFncmFw aF9jYWNoZTsKLyogIDU4ODogNyAgIHwgICAgIDEgKi8gICAgYm9vbF9iZiBwcmV2ZW50X3Jl ZGlzcGxheV9vcHRpbWl6YXRpb25zX3AgOiAxOwovKiAgNTg4OiA2ICAgfCAgICAgMSAqLyAg ICBib29sX2JmIGNsaXBfY2hhbmdlZCA6IDE7Ci8qICA1ODg6IDUgICB8ICAgICAxICovICAg IGJvb2xfYmYgaW5oaWJpdF9idWZmZXJfaG9va3MgOiAxOwovKiBYWFggIDUtYml0IGhvbGUg ICovCi8qIFhYWCAgMy1ieXRlIGhvbGUgKi8KLyogIDU5MiAgICAgIHwgICAgIDQgKi8gICAg c3RydWN0IExpc3BfT3ZlcmxheSAqb3ZlcmxheXNfYmVmb3JlOwovKiAgNTk2ICAgICAgfCAg ICAgNCAqLyAgICBzdHJ1Y3QgTGlzcF9PdmVybGF5ICpvdmVybGF5c19hZnRlcjsKLyogIDYw MCAgICAgIHwgICAgIDQgKi8gICAgcHRyZGlmZl90IG92ZXJsYXlfY2VudGVyOwovKiAgNjA0 ICAgICAgfCAgICAgNCAqLyAgICBMaXNwX09iamVjdCB1bmRvX2xpc3RfOwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdG90YWwgc2l6ZSAoYnl0ZXMpOiAgNjA4ICovCiAgICAg ICAgICAgICAgICAgICAgICAgICB9ICoKKGdkYikK --------------C375350D58CC43C5E4284586--