From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Lennart Borgman Newsgroups: gmane.emacs.bugs Subject: bug#3467: 23.0.94; let + make-local-variable => let value made global Date: Sat, 6 Jun 2009 22:11:21 +0200 Message-ID: References: Reply-To: Lennart Borgman , 3467@emacsbugs.donarmstrong.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001485f1db5edeb382046bb39c62 X-Trace: ger.gmane.org 1244319480 32598 80.91.229.12 (6 Jun 2009 20:18:00 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 6 Jun 2009 20:18:00 +0000 (UTC) Cc: 3467@emacsbugs.donarmstrong.com To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Jun 06 22:17:56 2009 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1MD2Kw-0002kX-5o for geb-bug-gnu-emacs@m.gmane.org; Sat, 06 Jun 2009 22:17:54 +0200 Original-Received: from localhost ([127.0.0.1]:41750 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MD2Kv-0001Jr-IG for geb-bug-gnu-emacs@m.gmane.org; Sat, 06 Jun 2009 16:17:53 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MD2KV-00018F-GI for bug-gnu-emacs@gnu.org; Sat, 06 Jun 2009 16:17:27 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MD2KP-00014W-Pc for bug-gnu-emacs@gnu.org; Sat, 06 Jun 2009 16:17:26 -0400 Original-Received: from [199.232.76.173] (port=52719 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MD2KP-00014T-MI for bug-gnu-emacs@gnu.org; Sat, 06 Jun 2009 16:17:21 -0400 Original-Received: from rzlab.ucr.edu ([138.23.92.77]:40017) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1MD2KP-00071M-2p for bug-gnu-emacs@gnu.org; Sat, 06 Jun 2009 16:17:21 -0400 Original-Received: from rzlab.ucr.edu (rzlab.ucr.edu [127.0.0.1]) by rzlab.ucr.edu (8.14.3/8.14.3/Debian-5) with ESMTP id n56KHIRf005288; Sat, 6 Jun 2009 13:17:19 -0700 Original-Received: (from debbugs@localhost) by rzlab.ucr.edu (8.14.3/8.14.3/Submit) id n56KF4fd004586; Sat, 6 Jun 2009 13:15:04 -0700 X-Loop: owner@emacsbugs.donarmstrong.com Resent-From: Lennart Borgman Resent-To: bug-submit-list@donarmstrong.com Resent-CC: Emacs Bugs Resent-Date: Sat, 06 Jun 2009 20:15:03 +0000 Resent-Message-ID: Resent-Sender: owner@emacsbugs.donarmstrong.com X-Emacs-PR-Message: followup 3467 X-Emacs-PR-Package: emacs X-Emacs-PR-Keywords: Original-Received: via spool by 3467-submit@emacsbugs.donarmstrong.com id=B3467.12443190934354 (code B ref 3467); Sat, 06 Jun 2009 20:15:03 +0000 Original-Received: (at 3467) by emacsbugs.donarmstrong.com; 6 Jun 2009 20:11:33 +0000 X-Spam-Bayes: score:0.5 Bayes not run. spammytokens:Tokens not available. hammytokens:Tokens not available. Original-Received: from mail-fx0-f208.google.com (mail-fx0-f208.google.com [209.85.220.208]) by rzlab.ucr.edu (8.14.3/8.14.3/Debian-5) with ESMTP id n56KBRnk004344 for <3467@emacsbugs.donarmstrong.com>; Sat, 6 Jun 2009 13:11:29 -0700 Original-Received: by fxm4 with SMTP id 4so2558357fxm.1 for <3467@emacsbugs.donarmstrong.com>; Sat, 06 Jun 2009 13:11:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=QRGcrEwW+807Rp+GtR+4X7cWPhVvgJrsMxcYWn8A1pc=; b=JEjvL+JBKtrVt5ofxH4PHAI7B3D9CDrZz5u91Zz9ZNBH/h3RanPPUHY9noouQ1ak65 fVgoxtOVf7Z+dUWPX1YMHda5ilW/7LJ2MYjOQ8rhSgVpRjQXQgXlftYukhX8Fr4235Ew GoDZEEmXvguJJfeKbqeq8JWle6Ohpb+rYGyak= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=GUtAlnvj8GWzO9bhw1hFNj/LnpHV5REAJSObzQogiQ2qoBMt2hMJ7lSDvxdnl/AH6K TCxsRgvitvIypUBoT2Ggo6jqctSyzILeNfDB4obXSKLtfAc5n3NAix0G2C02jSHEr0z8 kBX/dG3YFD0KOP58NlkHg1GEIuo1nHBDiGzFo= Original-Received: by 10.239.152.143 with SMTP id v15mr376294hbb.26.1244319082000; Sat, 06 Jun 2009 13:11:22 -0700 (PDT) In-Reply-To: X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) Resent-Date: Sat, 06 Jun 2009 16:17:26 -0400 X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:28530 Archived-At: --001485f1db5edeb382046bb39c62 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Sat, Jun 6, 2009 at 12:48 AM, Lennart Borgman wrote: > > Sigh, and my suggestion was of course unnecessary stupid. What is > needed is of course to record values and frame+buffer localness and > dito values and reset them. Nothing less than this will ever work > correctly, or? > > And does not this apply to all uses of specbind + unbind_to? > > Can it be sufficient to just change specbind and unbind_to? Is there > anything else that will be affected by changes in the specbind stack? > Since info about buffer+frame is alwas needed should specbinding be > changed to the below form? > > struct specbinding > =C2=A0{ > =C2=A0 =C2=A0Lisp_Object symbol; > =C2=A0 =C2=A0Lisp_Object old_value; > =C2=A0 =C2=A0Lisp_Object old_buffer_value; > =C2=A0 =C2=A0Lisp_Object old_frame_value; > =C2=A0 =C2=A0specbinding_func func; > =C2=A0 =C2=A0Lisp_Object unused; =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* Dividing = by 16 is faster than by 12 */ > =C2=A0 =C2=A0Lisp_Object unused; > =C2=A0 =C2=A0Lisp_Object unused; > =C2=A0}; Here is a bit modified suggestion and some code where I try to implement it. Please notice that I have not tested the code. It is very possible that I have misunderstood something so please look at the code. struct specbinding { Lisp_Object symbol; Lisp_Object old_value; specbinding_func func; // total 8 fields Lisp_Object need_test_local; Lisp_Object old_buffer; Lisp_Object old_buffer_value; Lisp_Object old_frame; Lisp_Object old_frame_value; //Lisp_Object unused; /* Dividing by 16 is faster than by 12 */ }; --001485f1db5edeb382046bb39c62 Content-Type: application/octet-stream; name="eval.diff" Content-Disposition: attachment; filename="eval.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fvmrffz30 KioqIGV2YWwuYwkyMDA5LTA2LTA2IDIyOjA2OjMzLjM1OTM3NTAwMCArMDIwMA0KLS0tIGV2YWwt b3JpZy5jCTIwMDktMDMtMjcgMDk6MjE6MjYuNDUzMTI1MDAwICswMTAwDQoqKioqKioqKioqKioq KioNCioqKiAzMjk4LDMzMDQgKioqKg0KICAgICAgICBzcGVjcGRsX3B0ci0+c3ltYm9sID0gc3lt Ym9sOw0KICAgICAgICBzcGVjcGRsX3B0ci0+b2xkX3ZhbHVlID0gdmFsY29udGVudHM7DQogICAg ICAgIHNwZWNwZGxfcHRyLT5mdW5jID0gTlVMTDsNCi0gICAgICAgLy9zcGVjcGRsX3B0ci0+bmVl ZF90ZXN0X2xvY2FsID0gUW5pbDsgLy8gbm8gbmVlZCB0byBzZXQgdGhpcw0KICAgICAgICArK3Nw ZWNwZGxfcHRyOw0KICAgICAgICBTRVRfU1lNQk9MX1ZBTFVFIChzeW1ib2wsIHZhbHVlKTsNCiAg ICAgIH0NCi0tLSAzMjk4LDMzMDMgLS0tLQ0KKioqKioqKioqKioqKioqDQoqKiogMzMwNiwzMzE3 ICoqKioNCiAgICAgIHsNCiAgICAgICAgTGlzcF9PYmplY3Qgb3ZhbHVlID0gZmluZF9zeW1ib2xf dmFsdWUgKHN5bWJvbCk7DQogICAgICAgIHNwZWNwZGxfcHRyLT5mdW5jID0gMDsNCiEgICAgICAg Ly9zcGVjcGRsX3B0ci0+b2xkX3ZhbHVlID0gb3ZhbHVlOw0KISAgICAgICAvKiBGaXgtbWU6IFN0 b3JlIHN5bWJvbCBnbG9iYWwgdmFsdWUgaW4gb2xkX3ZhbHVlICovDQohICAgICAgIHNwZWNwZGxf cHRyLT5vbGRfdmFsdWUgPSBkb19zeW12YWxfZm9yd2FyZGluZyAodmFsY29udGVudHMpOw0KISAg ICAgICBzcGVjcGRsX3B0ci0+bmVlZF90ZXN0X2xvY2FsID0gUXQ7DQohICAgICAgIHNwZWNwZGxf cHRyLT5vbGRfYnVmZmVyPSBRdW5ib3VuZDsNCiEgICAgICAgc3BlY3BkbF9wdHItPm9sZF9mcmFt ZT0gUXVuYm91bmQ7DQogIA0KICAgICAgICB2YWxjb250ZW50cyA9IFhTWU1CT0wgKHN5bWJvbCkt PnZhbHVlOw0KICANCi0tLSAzMzA1LDMzMTEgLS0tLQ0KICAgICAgew0KICAgICAgICBMaXNwX09i amVjdCBvdmFsdWUgPSBmaW5kX3N5bWJvbF92YWx1ZSAoc3ltYm9sKTsNCiAgICAgICAgc3BlY3Bk bF9wdHItPmZ1bmMgPSAwOw0KISAgICAgICBzcGVjcGRsX3B0ci0+b2xkX3ZhbHVlID0gb3ZhbHVl Ow0KICANCiAgICAgICAgdmFsY29udGVudHMgPSBYU1lNQk9MIChzeW1ib2wpLT52YWx1ZTsNCiAg DQoqKioqKioqKioqKioqKioNCioqKiAzMzI0LDMzNDkgKioqKg0KICANCiAgCSAgLyogRm9yIGEg bG9jYWwgdmFyaWFibGUsIHJlY29yZCBib3RoIHRoZSBzeW1ib2wgYW5kIHdoaWNoDQogIAkgICAg IGJ1ZmZlcidzIG9yIGZyYW1lJ3MgdmFsdWUgd2UgYXJlIHNhdmluZy4gICovDQohICAgICAgICAg ICAvKiBGaXgtbWU6IFRoaXMgb25seSBzYXZlcyB0aGUgY3VycmVudCB1c2VkIGxvY2FsIGJpbmRp bmcsDQohICAgICAgICAgICAgICBub3QgYm90aCBhcyBpdCBzaG91bGQgKi8NCiEgCSAgaWYgKCFO SUxQIChGbG9jYWxfdmFyaWFibGVfcCAoc3ltYm9sLCBRbmlsKSkpIHsNCiAgCSAgICB3aGVyZSA9 IGN1cnJlbnRfYnVmZmVyOw0KISAgICAgICAgICAgICBzcGVjcGRsX3B0ci0+b2xkX2J1ZmZlciA9 IHdoZXJlOw0KISAgICAgICAgICAgICBzcGVjcGRsX3B0ci0+b2xkX2J1ZmZlcl92YWx1ZSA9IG92 YWx1ZTsNCiEgICAgICAgICAgIH0gZWxzZSBpZiAoQlVGRkVSX0xPQ0FMX1ZBTFVFUCAodmFsY29u dGVudHMpDQohICAgICAgICAgICAgICAgICAgICAgICYmIFhCVUZGRVJfTE9DQUxfVkFMVUUgKHZh bGNvbnRlbnRzKS0+Zm91bmRfZm9yX2ZyYW1lKSB7DQogIAkgICAgd2hlcmUgPSBYQlVGRkVSX0xP Q0FMX1ZBTFVFICh2YWxjb250ZW50cyktPmZyYW1lOw0KISAgICAgICAgICAgICBzcGVjcGRsX3B0 ci0+b2xkX2ZyYW1lID0gd2hlcmU7DQohICAgICAgICAgICAgIHNwZWNwZGxfcHRyLT5vbGRfZnJh bWVfdmFsdWUgPSBvdmFsdWU7DQohIAkgIH0gZWxzZSB7DQogIAkgICAgd2hlcmUgPSBRbmlsOw0K LSAgICAgICAgICAgfQ0KICANCiAgCSAgLyogV2UncmUgbm90IHVzaW5nIHRoZSBgdW51c2VkJyBz bG90IGluIHRoZSBzcGVjYmluZGluZw0KICAJICAgICBzdHJ1Y3R1cmUgYmVjYXVzZSB0aGlzIHdv dWxkIG1lYW4gd2UgaGF2ZSB0byBkbyBtb3JlDQogIAkgICAgIHdvcmsgZm9yIHNpbXBsZSB2YXJp YWJsZXMuICAqLw0KISAJICAvL3NwZWNwZGxfcHRyLT5zeW1ib2wgPSBGY29ucyAoc3ltYm9sLCBG Y29ucyAod2hlcmUsIGN1cnJlbnRfYnVmZmVyKSk7DQohICAgICAgICAgICBzcGVjcGRsX3B0ci0+ c3ltYm9sID0gc3ltYm9sOw0KICANCiAgCSAgLyogSWYgU1lNQk9MIGlzIGEgcGVyLWJ1ZmZlciB2 YXJpYWJsZSB3aGljaCBkb2Vzbid0IGhhdmUgYQ0KICAJICAgICBidWZmZXItbG9jYWwgdmFsdWUg aGVyZSwgbWFrZSB0aGUgYGxldCcgY2hhbmdlIHRoZSBnbG9iYWwNCi0tLSAzMzE4LDMzMzUgLS0t LQ0KICANCiAgCSAgLyogRm9yIGEgbG9jYWwgdmFyaWFibGUsIHJlY29yZCBib3RoIHRoZSBzeW1i b2wgYW5kIHdoaWNoDQogIAkgICAgIGJ1ZmZlcidzIG9yIGZyYW1lJ3MgdmFsdWUgd2UgYXJlIHNh dmluZy4gICovDQohIAkgIGlmICghTklMUCAoRmxvY2FsX3ZhcmlhYmxlX3AgKHN5bWJvbCwgUW5p bCkpKQ0KICAJICAgIHdoZXJlID0gY3VycmVudF9idWZmZXI7DQohIAkgIGVsc2UgaWYgKEJVRkZF Ul9MT0NBTF9WQUxVRVAgKHZhbGNvbnRlbnRzKQ0KISAJCSAgICYmIFhCVUZGRVJfTE9DQUxfVkFM VUUgKHZhbGNvbnRlbnRzKS0+Zm91bmRfZm9yX2ZyYW1lKQ0KICAJICAgIHdoZXJlID0gWEJVRkZF Ul9MT0NBTF9WQUxVRSAodmFsY29udGVudHMpLT5mcmFtZTsNCiEgCSAgZWxzZQ0KICAJICAgIHdo ZXJlID0gUW5pbDsNCiAgDQogIAkgIC8qIFdlJ3JlIG5vdCB1c2luZyB0aGUgYHVudXNlZCcgc2xv dCBpbiB0aGUgc3BlY2JpbmRpbmcNCiAgCSAgICAgc3RydWN0dXJlIGJlY2F1c2UgdGhpcyB3b3Vs ZCBtZWFuIHdlIGhhdmUgdG8gZG8gbW9yZQ0KICAJICAgICB3b3JrIGZvciBzaW1wbGUgdmFyaWFi bGVzLiAgKi8NCiEgCSAgc3BlY3BkbF9wdHItPnN5bWJvbCA9IEZjb25zIChzeW1ib2wsIEZjb25z ICh3aGVyZSwgY3VycmVudF9idWZmZXIpKTsNCiAgDQogIAkgIC8qIElmIFNZTUJPTCBpcyBhIHBl ci1idWZmZXIgdmFyaWFibGUgd2hpY2ggZG9lc24ndCBoYXZlIGENCiAgCSAgICAgYnVmZmVyLWxv Y2FsIHZhbHVlIGhlcmUsIG1ha2UgdGhlIGBsZXQnIGNoYW5nZSB0aGUgZ2xvYmFsDQoqKioqKioq KioqKioqKioNCioqKiAzNDE5LDM0NzkgKioqKg0KICAJIGJpbmRpbmcuICBXSEVSRSBuaWwgbWVh bnMgdGhhdCB0aGUgdmFyaWFibGUgaGFkIHRoZSBkZWZhdWx0DQogIAkgdmFsdWUgd2hlbiBpdCB3 YXMgYm91bmQuICBDVVJSRU5ULUJVRkZFUiBpcyB0aGUgYnVmZmVyIHRoYXQNCiAgICAgICAgICAg d2FzIGN1cnJlbnQgd2hlbiB0aGUgdmFyaWFibGUgd2FzIGJvdW5kLiAgKi8NCiEgICAgICAgLyog ZWxzZSBpZiAoQ09OU1AgKHRoaXNfYmluZGluZy5zeW1ib2wpKSAqLw0KISAgICAgICAvKiAgIHsg Ki8NCiEgICAgICAgLyogICAgIExpc3BfT2JqZWN0IHN5bWJvbCwgd2hlcmU7ICovDQohIA0KISAg ICAgICAvKiAgICAgc3ltYm9sID0gWENBUiAodGhpc19iaW5kaW5nLnN5bWJvbCk7ICovDQohICAg ICAgIC8qICAgICB3aGVyZSA9IFhDQVIgKFhDRFIgKHRoaXNfYmluZGluZy5zeW1ib2wpKTsgKi8N CiEgDQohICAgICAgIC8qICAgICBpZiAoTklMUCAod2hlcmUpKSAqLw0KISAgICAgICAvKiAgICAg ICBGc2V0X2RlZmF1bHQgKHN5bWJvbCwgdGhpc19iaW5kaW5nLm9sZF92YWx1ZSk7ICovDQohICAg ICAgIC8qICAgICBlbHNlIGlmIChCVUZGRVJQICh3aGVyZSkpICovDQohICAgICAgIC8qICAgICAg IHNldF9pbnRlcm5hbCAoc3ltYm9sLCB0aGlzX2JpbmRpbmcub2xkX3ZhbHVlLCBYQlVGRkVSICh3 aGVyZSksIDEpOyAqLw0KISAgICAgICAvKiAgICAgZWxzZSAqLw0KISAgICAgICAvKiAgICAgICBz ZXRfaW50ZXJuYWwgKHN5bWJvbCwgdGhpc19iaW5kaW5nLm9sZF92YWx1ZSwgTlVMTCwgMSk7ICov DQohICAgICAgIC8qICAgfSAqLw0KISAgICAgICAvKiBlbHNlICovDQohICAgICAgIC8qICAgeyAq Lw0KISAgICAgICAvKiAgICAgL1wqIElmIHZhcmlhYmxlIGhhcyBhIHRyaXZpYWwgdmFsdWUgKG5v IGZvcndhcmRpbmcpLCB3ZSBjYW4gKi8NCiEgICAgICAgLyogICAgICAgIGp1c3Qgc2V0IGl0LiAg Tm8gbmVlZCB0byBjaGVjayBmb3IgY29uc3RhbnQgc3ltYm9scyBoZXJlLCAqLw0KISAgICAgICAv KiAgICAgICAgc2luY2UgdGhhdCB3YXMgYWxyZWFkeSBkb25lIGJ5IHNwZWNiaW5kLiAgKlwvICov DQohICAgICAgIC8qICAgICBpZiAoIU1JU0NQIChTWU1CT0xfVkFMVUUgKHRoaXNfYmluZGluZy5z eW1ib2wpKSkgKi8NCiEgICAgICAgLyogICAgICAgU0VUX1NZTUJPTF9WQUxVRSAodGhpc19iaW5k aW5nLnN5bWJvbCwgdGhpc19iaW5kaW5nLm9sZF92YWx1ZSk7ICovDQohICAgICAgIC8qICAgICBl bHNlICovDQohICAgICAgIC8qICAgICAgIHNldF9pbnRlcm5hbCAodGhpc19iaW5kaW5nLnN5bWJv bCwgdGhpc19iaW5kaW5nLm9sZF92YWx1ZSwgMCwgMSk7ICovDQohICAgICAgIC8qICAgfSAqLw0K ISAgICAgICBlbHNlIHsNCiEgICAgICAgICAvKiBGaXgtbWU6IEJlZm9yZSByZXN0b3JpbmcgYW55 dGhpbmcgdGhlIGJ1ZmZlci9mcmFtZQ0KISAgICAgICAgICAgIGxvY2FsbmVzcyBtdXN0IGJlIGNo ZWNrZWQuICBJIGFtIG5vdCBzdXJlIGhvdyB0byBkbyB0aGF0LA0KISAgICAgICAgICAgIGJ1dCBz ZWUgYmVsb3cgZm9yIG15IGF0dGVtcHRzLg0KISAgICAgICAgICovDQohICAgICAgICAgLyogU2V0 IGdsb2JhbCB2YWx1ZSAqLw0KICAgICAgICAgIGlmICghTUlTQ1AgKFNZTUJPTF9WQUxVRSAodGhp c19iaW5kaW5nLnN5bWJvbCkpKQ0KICAgICAgICAgICAgU0VUX1NZTUJPTF9WQUxVRSAodGhpc19i aW5kaW5nLnN5bWJvbCwgdGhpc19iaW5kaW5nLm9sZF92YWx1ZSk7DQogICAgICAgICAgZWxzZQ0K ISAgICAgICAgICAgc2V0X2RlZmF1bHQgKHRoaXNfYmluZGluZy5zeW1ib2wsIHRoaXNfYmluZGlu Zy5vbGRfdmFsdWUsIDAsIDEpOw0KISANCiEgICAgICAgICB7DQohICAgICAgICAgICByZWdpc3Rl ciBMaXNwX09iamVjdCB2YWxjb250ZW50cyA9IFNZTUJPTF9WQUxVRSAoc3ltYm9sKTsNCiEgICAg ICAgICAgIGludCBpc19sb2NhbF9ub3cgPSBCVUZGRVJfTE9DQUxfVkFMVUVQICh2YWxjb250ZW50 cykgfHwgQlVGRkVSX09CSkZXRFAgKHZhbGNvbnRlbnRzKTsNCiEgICAgICAgICAgIGludCBpc19i dWZmZXJfbG9jYWxfbm93ID0gaXNfbG9jYWxfbm93ICYmIEZsb2NhbF92YXJpYWJsZV9wICh0aGlz X2JpbmRpbmcuc3ltYm9sLCBRbmlsKTsNCiEgICAgICAgICAgIGludCBpc19mcmFtZV9sb2NhbF9u b3cgPSBpc19sb2NhbF9ub3cgJiYgIWlzX2J1ZmZlcl9sb2NhbF9ub3c7DQohICAgICAgICAgICBp bnQgd2FzX2J1ZmZlcl9sb2NhbF9iZWZvcmUgPSB0aGlzX2JpbmRpbmcub2xkX2J1ZmZlciAvPSBR dW5ib3VuZDsNCiEgICAgICAgICAgIGludCB3YXNfbG9jYWxfYmVmb3JlID0gKHdhc19idWZmZXJf bG9jYWxfYmVmb3JlIHx8DQohICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz X2JpbmRpbmcub2xkX2ZyYW1lIC89IFF1bmJvdW5kKTsNCiEgICAgICAgICAgIGludCB3YXNfZnJh bWVfbG9jYWxfYmVmb3JlID0gKHdhc19sb2NhbF9iZWZvcmUgJiYgISB3YXNfYnVmZmVyX2xvY2Fs X2JlZm9yZSk7DQohICAgICAgICAgICAvKiBGaXggbWU6IHJlc3RvcmUgbG9jYWxuZXNzICovDQoh ICAgICAgICAgICBpZiAod2FzX2J1ZmZlcl9sb2NhbF9iZWZvcmVfc3BlY2JpbmQpIHsNCiEgICAg ICAgICAgICAgaWYgKCFpc19idWZmZXJfbG9jYWxfbm93KSBGbWFrZV9sb2NhbF92YXJpYWJsZSAo dGhpc19iaW5kaW5nLnN5bWJvbCk7DQohICAgICAgICAgICAgIC8qIFNldCBidWZmZXIgbG9jYWwg dmFsdWUgKi8NCiEgICAgICAgICAgICAgc2V0X2ludGVybmFsIChzeW1ib2wsIHRoaXNfYmluZGlu Zy5vbGRfYnVmZmVyX3ZhbHVlLCBYQlVGRkVSICh0aGlzX2JpbmRpbmcub2xkX2J1ZmZlciksIDEp Ow0KISAgICAgICAgICAgfSBlbHNlIGlmICh3YXNfZnJhbWVfbG9jYWxfYmVmb3JlX3NwZWNiaW5k KSB7DQohICAgICAgICAgICAgIGlmICghaXNfZnJhbWVfbG9jYWxfbm93KSBGbWFrZV92YXJpYWJs ZV9mcmFtZV9sb2NhbCAodGhpc19iaW5kaW5nLnN5bWJvbCk7DQohICAgICAgICAgICAgIC8qIFNl dCBmcmFtZSBsb2NhbCB2YWx1ZSAqLw0KISAgICAgICAgICAgICBzZXRfaW50ZXJuYWwgKHN5bWJv bCwgdGhpc19iaW5kaW5nLm9sZF9mcmFtZV92YWx1ZSwgTlVMTCwgMSk7DQohICAgICAgICAgICB9 DQohICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogIA0KLS0tIDM0MDUsMzQzMyAtLS0t DQogIAkgYmluZGluZy4gIFdIRVJFIG5pbCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBoYWQgdGhl IGRlZmF1bHQNCiAgCSB2YWx1ZSB3aGVuIGl0IHdhcyBib3VuZC4gIENVUlJFTlQtQlVGRkVSIGlz IHRoZSBidWZmZXIgdGhhdA0KICAgICAgICAgICB3YXMgY3VycmVudCB3aGVuIHRoZSB2YXJpYWJs ZSB3YXMgYm91bmQuICAqLw0KISAgICAgICBlbHNlIGlmIChDT05TUCAodGhpc19iaW5kaW5nLnN5 bWJvbCkpDQohIAl7DQohIAkgIExpc3BfT2JqZWN0IHN5bWJvbCwgd2hlcmU7DQohIA0KISAJICBz eW1ib2wgPSBYQ0FSICh0aGlzX2JpbmRpbmcuc3ltYm9sKTsNCiEgCSAgd2hlcmUgPSBYQ0FSIChY Q0RSICh0aGlzX2JpbmRpbmcuc3ltYm9sKSk7DQohIA0KISAJICBpZiAoTklMUCAod2hlcmUpKQ0K ISAJICAgIEZzZXRfZGVmYXVsdCAoc3ltYm9sLCB0aGlzX2JpbmRpbmcub2xkX3ZhbHVlKTsNCiEg CSAgZWxzZSBpZiAoQlVGRkVSUCAod2hlcmUpKQ0KISAJICAgIHNldF9pbnRlcm5hbCAoc3ltYm9s LCB0aGlzX2JpbmRpbmcub2xkX3ZhbHVlLCBYQlVGRkVSICh3aGVyZSksIDEpOw0KISAJICBlbHNl DQohIAkgICAgc2V0X2ludGVybmFsIChzeW1ib2wsIHRoaXNfYmluZGluZy5vbGRfdmFsdWUsIE5V TEwsIDEpOw0KISAJfQ0KISAgICAgICBlbHNlDQohIAl7DQohIAkgIC8qIElmIHZhcmlhYmxlIGhh cyBhIHRyaXZpYWwgdmFsdWUgKG5vIGZvcndhcmRpbmcpLCB3ZSBjYW4NCiEgCSAgICAganVzdCBz ZXQgaXQuICBObyBuZWVkIHRvIGNoZWNrIGZvciBjb25zdGFudCBzeW1ib2xzIGhlcmUsDQohIAkg ICAgIHNpbmNlIHRoYXQgd2FzIGFscmVhZHkgZG9uZSBieSBzcGVjYmluZC4gICovDQogIAkgIGlm ICghTUlTQ1AgKFNZTUJPTF9WQUxVRSAodGhpc19iaW5kaW5nLnN5bWJvbCkpKQ0KICAJICAgIFNF VF9TWU1CT0xfVkFMVUUgKHRoaXNfYmluZGluZy5zeW1ib2wsIHRoaXNfYmluZGluZy5vbGRfdmFs dWUpOw0KICAJICBlbHNlDQohIAkgICAgc2V0X2ludGVybmFsICh0aGlzX2JpbmRpbmcuc3ltYm9s LCB0aGlzX2JpbmRpbmcub2xkX3ZhbHVlLCAwLCAxKTsNCiAgCX0NCiAgICAgIH0NCiAgDQo= --001485f1db5edeb382046bb39c62--