From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Leo Liu Newsgroups: gmane.emacs.bugs Subject: bug#14395: 24.3; [PATCH] new feature smie-highlight-matching-block Date: Tue, 14 May 2013 10:49:20 +0800 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1368499845 27865 80.91.229.3 (14 May 2013 02:50:45 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 14 May 2013 02:50:45 +0000 (UTC) To: 14395@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue May 14 04:50:43 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Uc5K6-0002j6-OL for geb-bug-gnu-emacs@m.gmane.org; Tue, 14 May 2013 04:50:43 +0200 Original-Received: from localhost ([::1]:50282 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uc5K6-0000cb-Dn for geb-bug-gnu-emacs@m.gmane.org; Mon, 13 May 2013 22:50:42 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:36303) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uc5K0-0000cI-Mf for bug-gnu-emacs@gnu.org; Mon, 13 May 2013 22:50:38 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uc5Jz-0002oD-8j for bug-gnu-emacs@gnu.org; Mon, 13 May 2013 22:50:36 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:35115) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uc5Jz-0002o9-3r for bug-gnu-emacs@gnu.org; Mon, 13 May 2013 22:50:35 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1Uc5KS-0006pG-Qs; Mon, 13 May 2013 22:51:04 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Leo Liu Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: monnier@iro.umontreal.ca, bug-gnu-emacs@gnu.org Resent-Date: Tue, 14 May 2013 02:51:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 14395 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org X-Debbugs-Original-Xcc: Stefan Monnier Original-Received: via spool by submit@debbugs.gnu.org id=B.136849981226128 (code B ref -1); Tue, 14 May 2013 02:51:03 +0000 Original-Received: (at submit) by debbugs.gnu.org; 14 May 2013 02:50:12 +0000 Original-Received: from localhost ([127.0.0.1]:39223 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Uc5Jb-0006nJ-BF for submit@debbugs.gnu.org; Mon, 13 May 2013 22:50:12 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:52865) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Uc5JW-0006n2-To for submit@debbugs.gnu.org; Mon, 13 May 2013 22:50:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uc5J1-0002H5-BK for submit@debbugs.gnu.org; Mon, 13 May 2013 22:49:36 -0400 Original-Received: from lists.gnu.org ([208.118.235.17]:59271) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uc5J1-0002H1-7q for submit@debbugs.gnu.org; Mon, 13 May 2013 22:49:35 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:35991) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uc5J0-00009z-5f for bug-gnu-emacs@gnu.org; Mon, 13 May 2013 22:49:35 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uc5Iy-0002FL-Uv for bug-gnu-emacs@gnu.org; Mon, 13 May 2013 22:49:34 -0400 Original-Received: from mail-pa0-f48.google.com ([209.85.220.48]:39738) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uc5Iy-0002EP-Ih for bug-gnu-emacs@gnu.org; Mon, 13 May 2013 22:49:32 -0400 Original-Received: by mail-pa0-f48.google.com with SMTP id kp6so95082pab.7 for ; Mon, 13 May 2013 19:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:subject:x-debbugs-cc:date:message-id :mime-version:content-type; bh=JrrxiLu+dl3gN8PcoYIw+jTzOi9uDloBDAEz6Bsgm6g=; b=vAoQOictJKUdlECsHV61+u6e5WSEpRzh/yRNUA0+MvcE/be2WmgWRyRs/9CNcMKpo2 G6THnfeWSHL+5vWwJ1wjDhr35PwUAGT2Jb1citk2ymNTuwnSbkqpLrDedYqYA0R+OIKh B5dcwYFzyzWi339cSOJwixfJ1g7USgx3KVBNfqLrm9Tk5bTbuL5BWBH94iWqYXdGE17A /tcem7PCMQ9UK32frxVW7yhzN05wIbCM9+Uy1/OZ1eqGIKpSkrw0c+DwhV5OZORAU2gM EK4Smrkq6aRcCiWvtRJOV2FzvivwL68BSjZyVPKgPAOW6tZXYoOzuBpIYKJobq1pxKyQ ppYg== X-Received: by 10.68.200.10 with SMTP id jo10mr32101420pbc.53.1368499771626; Mon, 13 May 2013 19:49:31 -0700 (PDT) Original-Received: from Zeuss-MacBook.local (li511-224.members.linode.com. [66.175.216.224]) by mx.google.com with ESMTPSA id wp6sm16155672pbc.29.2013.05.13.19.49.27 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Mon, 13 May 2013 19:49:30 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:74220 Archived-At: --=-=-= Content-Type: text/plain Hi Stefan, I want something for octave mode that looks like something in the attached screenshot. But since this is generic I would like to put it in smie.el. Do you have any objections or comments? It doesn't make sense for this feature and smie-blink-matching-open to be on at the same time. So in the patch nothing is enabled. diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el index bbdd9f83..ad23f78c 100644 --- a/lisp/emacs-lisp/smie.el +++ b/lisp/emacs-lisp/smie.el @@ -1021,6 +1021,61 @@ (defun smie-blink-matching-open () (let ((blink-matching-check-function #'smie-blink-matching-check)) (blink-matching-open)))))))) +(defface smie-matching-block-highlight (:inherit highlight) + "Face used to highlight matching block." + :group 'smie) + +(defvar-local smie-highlight-matching-block-overlay nil) +(defvar-local smie-highlight-matching-block-lastpos -1) + +(defun smie-highlight-matching-block () + (when (and (bound-and-true-p smie-closer-alist) + (/= (point) smie-highlight-matching-block-lastpos)) + (unless (overlayp smie-highlight-matching-block-overlay) + (setq smie-highlight-matching-block-overlay + (make-overlay (point) (point)))) + (setq smie-highlight-matching-block-lastpos (point)) + (let ((open-re (concat "\\_<" + (regexp-opt (mapcar 'car smie-closer-alist)) + "\\_>")) + (close-re (concat "\\_<" + (regexp-opt (mapcar 'cdr smie-closer-alist)) + "\\_>")) + (beg-of-tok + (lambda (re) + "Move to the beginning of current token if matching RE." + (or (looking-at-p re) + (let* ((start (point)) + (beg (progn + (funcall smie-backward-token-function) + (and (looking-at-p re) (point)))) + (end (and beg + (progn + (funcall smie-forward-token-function) + (point))))) + (if (and beg (<= beg start) (<= start end)) + (goto-char beg) + (goto-char start) + nil))))) + (highlight (lambda (beg end) + (move-overlay smie-highlight-matching-block-overlay + beg end) + (overlay-put smie-highlight-matching-block-overlay + 'face 'smie-matching-block-highlight)))) + (save-excursion + (cond + ((funcall beg-of-tok open-re) + (with-demoted-errors + (forward-sexp 1) + (when (looking-back close-re) + (funcall highlight (match-beginning 0) (match-end 0))))) + ((funcall beg-of-tok close-re) + (funcall smie-forward-token-function) + (forward-sexp -1) + (when (looking-at open-re) + (funcall highlight (match-beginning 0) (match-end 0)))) + (t (overlay-put smie-highlight-matching-block-overlay 'face nil))))))) + ;;; The indentation engine. (defcustom smie-indent-basic 4 --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=smie-highlight.png Content-Transfer-Encoding: base64 Content-Description: smie-highlight.png iVBORw0KGgoAAAANSUhEUgAAAIMAAAA0CAIAAAAmMBz8AAAntWlDQ1BJQ0MgUHJvZmlsZQAAaAWt mnVUVO/b7vd0MEMM3d3dIN3djaB0lzQCIoiggIKISIkCAhICioQICEg3KKB0SKgoINJ1tt/ve973 d9Y657+zWTP7Zs+zHvbMs4fr/lzXBgBec8eAAB8oKQD4+gUHmmqpsljb2LKg5gAYAAcIABOAc3QO ClAxNtYH/p/b/iQA+fviR8G/c/0/h/3fXyBzcQ1yBgCIMfjyNZcgZ1+w7gRrbeeAwGAAgOLAmiMs OOBvLQLWFIHgCYK1+t/a/d/a+m/t9G/99+9TBJqbqoFjbgIAGufoGOgOANgU8DhLqLM7OA+2EgCQ BD8XTz8AIG0DABpFZw9HFwDgBYcAAr6+/n9rAbDmcfqPedz/o3Z0dPrvOR0d3f+7/ve9/J0GoFbX 0NdnsRCTEBUzYFFz9PF0CnQMdgVn/v+9+fqEgJ/fP9vfVcC5+lmYgfu/588AqAMagD74wwJYAGKA BCAKPhuAv6kBjoAP4Ak4AYFgFQy4Ai7BruHgZwMAav4BEYGe7h7BLCrgaroKsOj4OQsJsIiJiIoD f6+Nv2MAYPfzP2sOoUL/z7EAKgCQBdcFVvQ/x5zoAKABPD9azP8c4ygFABJwzepvOocEhv47H/zv DgFgARKAAqAFrzt2gAcQBM9WCpADlMF3oQsYAeaADXAFcAY8AF/wvMOAKCAWSACSgTTgEZADPAWK gBfAS+A10AA0A+1ANzAAjAITwAywCKwCP4BtYB84gUAgKAgeQg6hhTBDOCH8EDGIDEQRogHRh5hC bCAOEHeIHyQEEgW5BUmGpENyIAWQMsgryFtIO6QPMgb5AlmCfIP8hhxDYVAclALKCOWCCkNloCpQ Pag51B7qDr0GvQ6Nh96HZkELoZXQemg7dAA6AV2E/oDuwQAYEYwKxgoThMnA1GBGMFuYGywQdgOW BMuEFcKqYE2wHthH2CJsE3YER8LJ4SxwQbgcXBtuAXeGX4PfgKfAc+Av4PXwTvhH+BJ8G36OwCMY EPyISwgdhDXCHRGGSEBkIkoQdYguxARiFbGPRCKpkNxIaaQ20gbphYxEpiCfIKuRbcgx5ApyD4VC 0aL4UQooI5QjKhiVgMpGVaLeo8ZRq6hDNBGaGS2G1kTbov3QcehMdDm6FT2OXkefYEgxnJhLGCOM CyYCk4p5jmnCjGBWMSdYMiw3VgFrjvXCxmKzsFXYLuwsdpeIiIiNSJbIhMiT6CZRFlENUS/REtER joDjw6nh7HAhuPu4Ulwb7gtuF4/Hc+GV8bb4YPx9fBn+A34ef0hMTixErEPsQhxDnEtcTzxO/IsE Q8JJokJyheQ6SSZJLckIySYphpSLVI3UkfQGaS7pW9Ip0j0ycjJRMiMyX7IUsnKyPrINAorARdAg uBDiCUWED4QVchg5O7kauTP5LfLn5F3kqxRICm4KHQovimSKlxTDFNuUBEoJSkvKcMpcyhbKRSoY FReVDpUPVSrVa6pJqmNqRmoValfqu9RV1OPUBzT0NMo0rjRJNNU0EzTHtCy0GrTetA9oG2jn6OB0 fHQmdGF0+XRddJv0FPRy9M70SfSv6acZoAx8DKYMkQxFDIMMe4xMjFqMAYzZjB8YN5momJSZvJgy mFqZvjGTMysyezJnML9n/s5CyaLC4sOSxdLJss3KwKrNGsJawDrMesLGzWbBFsdWzTbHjmWXYXdj z2DvYN/mYOYw4IjiqOCY5sRwynB6cD7m7OE84OLmsuJK5Grg2uCm4dbhvs5dwT3Lg+dR4rnGU8jz iRfJK8PrzfuEd5QPyifJ58GXyzfCD+WX4vfkf8I/JoAQkBXwEygUmBLECaoIhgpWCC4JUQnpC8UJ NQj9EuYQthV+INwjfC4iKeIj8lxkRpQgqisaJ9ok+luMT8xZLFfskzheXFM8RrxRfEeCX8JVIl/i syS5pIFkomSH5JmUtFSgVJXUN2kOaQfpPOkpGQoZY5kUmV5ZhKyqbIxss+zRJalLwZdeX9qSE5Tz liuX25DnlneVfy6/osCm4KhQoLCoyKLooPhMcVGJVclRqVBpWZld2UW5RHldhVfFS6VS5ZeqiGqg ap3qgdoltWi1NnWYupZ6kvqwBkHDQiNHY16TTdNds0JzW0tSK1KrTRuhraf9QHtKh1HHWadMZ1tX Wjdat1MPp2eml6O3rM+nH6jfZAA10DV4aDBryGnoZ9hgBBjpGD00mjPmNr5m/M4EaWJskmuyZipq GmXaY0ZudtWs3GzfXNU81XzGgscixKLDksTSzrLM8sBK3SrdatFa2DraesCGzsbTptEWZWtpW2K7 d1nj8qPLq3aSdgl2k/bc9uH2fVforvhcablKctXxaq0DwsHKodzh1NHIsdBxz0nHKc9p21nN+bHz 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 pZO9JVsgIAkCBDPCdUIBoZewTU5NrkTuRn6fvJ58ngJFIUxhTXGTooxinOKEkoPSgDKM8hllP+Uf KiYqbapAqjyqHqrf1AzUWtSB1PnUfdR7NCw0+jThNM9pRmnOaHlpLWlv0daAJIelk6FzpXtI1063 Rc9Er08fSV9O/4UBzSDN4M6QydDNsM/IxWjFmMjYyPiNiY5JnymaqZppCeQ3TeZw5grmeRYyFg2W cJZKlkVWCpDdolhrWFfZ6NiM2OLZ3rL9Yudgt2VPZe9iP+UQ4/DgeAqqDZ5TnTOS8zXndy42Lluu dK5+bii3HHcQdyX3Kg8TjzXPA54BXjivIm8Eby3vTz4ePme+fL4vYFdixJ/M3yMAE1ASiBRoFPgj KCroB5LahhCXkLNQgdCCMKOwnXCO8BcRGhErkUyRCVFKUQvRR6ITYpRiFmKZYlPiNOI24rnisxJM Eg4ShRJfJbklPSUrJbekxKVCpZqkzqVVpROk+2VIZMxlsmXmZTlkPWWrZfcuyV2Ku9QnRyJnJZcv tyovKB8i36KAVDBUeAxyGa9ikGKzElLJWClXaVVZRDlSuVuFoHJFpVxlX1VNNVV1Vo1PLUytS51c 3VG9Rv1cw0AjT2NTU04zWXNGS0ArSmtIm0k7QLtdh1zHVadBF6trp1utB9Wz1CvTO9M30S/WPzYw NCgyODQ0NCwyPDIyMio2OjU2NS4zAUysTKpNkaZXTOvNiM3czd6b05hfM++34LCItpiyFLVMtly1 UrbKtdqzNrautEHZONu02tLZhtp+vCx8OeXyhp2GXaHdhb29fdMVmiuhVz5dFbuadvWXg4FDpSPW 0dOx14nbKdFpzVnTudgF4eLq0uXK6Xrbdc1N063UHe3u4d7nweeRDPKWgWe1F6lXoNdHb0nvTO9D H1ufZl8m35u+y37qfiX+aH8v/8EA4YAHAbvXLK81BtIHRgcuBqkGFQejgr1A0hIOeRDyJ9Qy9G0Y fVh02GK4avjzCFSEZ8TAdcHrqdd/R5pH1kVRR0VEzUQrROffAG44gpzFEXM7Zu0fzsL8N2ft3bK+ 1RzPEn8rfuO2/u1XCVQJkQmLiZqJFXcId8LvzN/VuFuZRJ50PWk5WSf5VQptSmzK93um997d57h/ 7/5+6tXUvjSxtLwHyAcBD6bTNdKrH9I+jH+4lWGb0fVI5FFuJjLzWubsY+3HtVlMWUlZ+9mO2UM5 MjnPc0lzo3LX88zy3j/he5KZD833BTtGjac1zxieJT77XXCloK9QovBpEbYopGjxue7zumLm4qTi PyVXSnpLRUtzX8Bf+L2YKlMqe1FOWh5RvlShXVFTSV15o3L1pf7L11U0VTeqVqq1q1/WEGpCa6Zf Kb4qeA1/7fa6t5avNrl2843Bm5d1+DqfuoF6vvo79asNqg1PG04arRpfv8W9dX/b1kTbFNjU/471 Xfi74WaO5ojmoRbWluCWnlaaVq/WpvfY9zbvX4AMptaW1jbfzt8e0d7TQdnh3PGq4+KDwYe8D987 ZTsTOye7OLuCujq6yboduqu7z3sMe570bPbK9yb3Tvfx9V3v6+un7ffsbxxAD1gPvBg4HNQezBrc GJIZujP0eZhnOGK4b4R2xHPk7Sh21Ha0fPRkTG8sd+zHuPx4yvjsR4GP0R+HPjF+8v3UMoGfuDJR NXE+aTiZP/lrSnHq/tTcZ8HP0Z+HvjCABPdummjadrps+mhGe+bxzNqs5Gz87Mc5trmAuffz+PnL 8+XzhwuaCxkLy4vCi9GLA0s0S65Lr5culvWXs5dXV8RWbqz0f6X66vS16uvRqsZq2urMGtfatbV3 64h14/Wc9ZUNwY3QjbZvmG8m33K+LX/n/x74vekH9IfOj7QfU5uMmy6b5ZvbPyV/Rv5s+wX/pfPr 3q+xLcot6628rflt1m3n7eLt9R2eHa+d8p0fv/l/e/8u//1tl2fXfbd4d+UPyx/7Pzl/JvcIe4Z7 d/c69873ZfYD9yv2vx4wHlgc3DvoPDg5FD10P3xyOH6EOpI78j8qPJo4Rh3LHnsf5x0PHp+eCJxc Pkk6aTxZPSWcKp16n2aetp9unlGeKZ25n6WdNZzNnyPO+c+Nz0POs89bzhcvoBccFxoXbhcJF8UX nRfL//SP/6P/8P9D/8n+S/8ZQa+cA3SiBQAR0D2XBRRB51wbMATMQCf6Kuia+4A+dARwE0gEUoFM IB8oAaqAeuA90AM6z1+AFWAT9JwvIBgIBYQJwgsRB51mHYgF6DL7QMIh8ZA0SB7oLtdBOiAjkDnI d8ghFAl6ymxQEagi1ABqB/UGveS70GxoGbQR2gv9Av0GPYJhYfQwAZgCzBDmAHrHt2CPYKWgbzwI W4DtwOFwajg/XBFuAneFR8DvwQtA/e8H9X8XgUYwIsQQWgh7RCDiDiIf8QbRj1gE/WE8kgMphzRF eiJvIh+DznA3ch65jyJGcaGUUFaogH86gCbUR9RPNBLNgpZFm6F90YnoAvQ79CR6G0OE4cIoYy5j wjDpmJeYPswqFsAyYGVAD/ga9h62HNuNXSECiBiJLhFZE4UQPQTd32GiTRwWx4PTwrni4nFFuHbc Iu4CpDNF/BV8NP4J2AfM4c+ImYgVia8S3yQuIO4gXiGBk3CRaJF4kiSTvAQ7gd+klKTSpLak0aTP SD+QrpFhyARArzeQLBPsBWYJAIGDoEXwJqQSaglThBNyZtDndSdPIa8hnyA/omCiUKNwp0iheEUx SXFKyUqpSelD+YCygXKWCkrFQ2VIFUyVQ9VOtU6Np5agvkwdR11GPQo6vEw0GjS+NI9ommm+0uJo JWntaW/TVtFO0QF0vHSmdJF0xXQjdIf0bPQG9GH0hfSD9AcMbAyGDBEMxQxjDGeMvIyWjLcYaxjn mLBMMkxuoLfbwbTDzMJsxBzDXM28wELCosQSwFLAMs4KY5VkdWPNYu1nPWUTZnNky2DrYTtmF2R3 AF3dXrA7EOFw4cjiGOKEckpz+nAWcE5x4bnUuCK4qrlWuRm4TbnvcrdxH/II87jz5PNM8hLzavHG 8DaCvMrL58SXxzfBT8KvzR/H38x/ICAq4CNQIrAkyCBoJfhQcFgIK6QpFCvUKnQsLCUcJFwtvCnC K+IG+rhLosyidqI5op/FqMTMxR6KjYmTihuJ3xcfksBJ6EkkS/RLYiV1JZMk+6WwUrpSyVID0jhp A+n70iMypDImMukyn2QpZa1ks2VnLjFeunqp4NKKHKecB+jf/pQXkQ+Sr5M/VJBTiFHoUEQoaium KI4okStZKeUozSuzKbsplyv/UhFTCVN5pwqoaqjeVR1Wo1CzUctXW1HnVfdXf6N+rKGskaAxpEmu aaP5THNdS0grWOudNkxbF/Ruv+iw6Hjo1Ogc6irr3tEd06PVc9Ir19vVl9e/rT9iQGPgaFBh8MdQ 0fCO4bgRg5G70Suwa9A0fmA8a8JtEmjSaooxtTB9ZrppJmMWbzZqzmjuaV5vAbUwssiz+GYpbRlv OW7FbOVr9c4aY21lXWL9x0bNJt1m0VbYNsZ2+DLjZd/LLXZ4O3u7l3Zn9ob2+fZbV5SvPLiyfFXi 6u2rUw68DpEOQ47MoNnV6UTt5OXU4kzq7Ozc4ELkcsXltSvK9bJrtRvczcatyh3mbu1e5QH3sPWo 8UR62nnWemG8HLwavIm93bxbfCh9fH26wG4i1HfEj8cv1m/aX8L/nv96gEpAbsD+NeNrFYHIQMfA 5iCaoOCg0WCB4DvBqyGqIU9DTkNtQhvCKMOCwsbCRcJTw39GGERUXsdd974+ECkQmRL5M8owqjqa LDow+tMNqRvZN05irsS03+S4eefmz1jT2MY4prjbcT9vWdxqjeeOfxB/etv99niCYkJFIk1iQuKf O853xu+q3n2dxJ6UkYxMDk/+nmKfMnpP/V7jfcH7hanUqffSYGnX03YeeDxYSLdKH3mo9bAtQzbj 9SOBRyWZLJk5jykep2Zhs25nA9mR2Qc5QTlbuV5gF+Gct/Dk8pPP+eb5Y08NnvY/03z2oUCpoLlQ prCuSLSo6jnf85JituL8EtqSR6WkpckvUC9iX5yWhZZtl3uVf62wr5isNKzsean0sh50aZ9X01en 1SBrImu2X7m8mnqt+7qlVrj22RuyN7Fvduoc6obr5evLGigbYhs2Gy0b37/leZv2dr/JvqnjHde7 pHebzYbNVS3ELb4tA63crbda595Lv099v96m0JbR9r1dpT2rfatDs+NJx58Peh+KPhx3mnaWdUG6 bLpedWO6Hbvf9pD1ePa099L1BvYO9LH3RfV96hfsv90/PyA9kDawMagymDO4O6Q/VDx0Pmw1XDOC GXEaeTdKMeo72j3GPBY+NjrOOx43PvNR4uO9j2ufFD89/rQ9oTNRMHE8aTpZMQWbujz15jMO9Hab v1CAvUHnNP100PTADNtMxMzYLM9szOzknODcrbnpeZH5xPm5BfGFuwsLixKLSYsLSxJLd5fml8WX E0HHV2QlfmXqK//XG1/HVjlWw1b71xjW/Nba1gnrzutvNhAblhulGwfftL49/rb2XfJ7/PePP1h/ +P9o2STatN4s3tz5qfgz6efEL9ZfPr/qtyBbelsZW3PbXNv+2w3bFztaO/d3Pv2m/+34u+T3j12R 3eDdxt3TP0p/Yv982EPsae4l7vXuo/e19hP2Ow9gB8oH0QdNB/tgH+BzWHq4dER3ZHaUfPTh6PhY 9Nj9+Mnx+Any5NKJ78mzk/FT2KnEqctpxumH050zpjO9s/CzorPhs6NzNtBfDj7PPe8437ggvhC7 sLy4fpF30Xrxr3/4v/X/790OCAAFYAAiAA9m0ASAEqAB6P+D/v9T/c0BW8ABcAf8wOQ8CrgFJAHp YP5cCFSA7N8MdAHDwGdgCUyc90Dtx4Lazwzhg0hCVMCM2RriAgkAyf8uSP5FkBpIC2QAzJTXIHtg nkwGZQGz5H+V3wcaBU2B5oEJcgt0CDoP3QKzYwKMHSYJ0wKdbu9/uL8IVg/rg83CtuCwf3RfCW4G d4dHwR/Ai+FN8FH4KvwYQYrgQsgjTBEeiBjEI0Ql4gNiGrGDRCNZwEzYCOmOjPlH9XuRi8gjFAHM gtVR9qgwVBqqHNWJmgdTYAJaEK2FdkJHox+jX6OH0d8wcAwLRh5jjQnGpGEqQe5fxUKwTFg5rDU2 BPsQW4Mdxv4gwhBxE2kQORPFET0jek80T3SKo8fJ4WxxEbhs3FvcZ9whnhYvi7fBX8fn4N/hZ0HF ZyZWJnYivkVcTNxD/I0ERyJEYkISTPKYpIlkjhRCykGqTepDmkpaC6a7J2TMZGpk7mTJZNVkH8kO CQwEZYIr4S6hijBOOCBnIFcB6T/5H70/pmCmUAdT3VSKOoppSoCSi1KfMpAyi7KV8isVlkqUyorq BlUx1SDVLjUdmOh6UKdRN1Av0KBohGmsaGJoXoAewBEtG60ebTDtE9oe2h06OjoNOn+6bLpO0AWg o9egv0b/hL6Pfo+BFVT7SIYXDJOMMEZRRgfG+4wtoH/IAPoAUUyVTHPMxMzKzIHMz5mnWLAsCqDW P2f5wopnVWUNY33JusxGA/oAt9ma2XZBp9mJPYf9IwcRhzpHNEcDxw4nP6cr51POaS5KLhOuFK5e bji3Mnc0dxP3AY8ETyBPNc9PXgFeL94y3g0+bj43vhK+VX5Oflf+Ev41AW4BD4Eyge+CAoK+gtWC O0LiQiFCjaC+KwjfFP4gghTREUkRGRElF7UE1X1ejE3MTaxc7Je4mHioeJP4hYSaRKLEoCSppLlk tuScFJuUm1S51Ja0uHSYdLMMIKMuc0dmUJZU1lw2C1R25ktOl4ovfZMTkPOTeyX3R15KPly+Sf5U QQFU9jZFiKKKYpxihxJUSUUpVqlN6VxZAfQAmpQPVaRVQlTeqPxWFVX1V61S/anGr+al9kJtXZ1L 3UW9SH1Zg1Xjqka+xpwmg6atZrbmZy1qLUutR1qftMm1TUGFH9Uh0THUuaczqEukq6t7V7dPD62n pZeg162P0NfQj9fvNIAZqBnEGXQYQg1VDGMN240gRipGsUZtxhBjFeNY43YTiImKSZxJhynMVM00 3rTTDGGmaZZo1muOMdc1TzYftMCDep9mMW5Jbmlh+djysxWdlZ1VvtWSNbu1q/UL6+82gjYBNrU2 +7aytlGgRwu7rHk56fKwHcHO0i7Hbt6e3d7dvtJ+54rUlcgrbVcRV/WuPgC1n9HB2aHMYdtRyjEa VH8iJzOnHKdlZz7nQOcmF5iLHpjdzrlyuQa4NoEdgKFbltuKu6B7uHunB4nHZY9Sj11PJc8Uzy9e XF5BXu3eJN723pXeJz66Ptk+33xlfe/6fvHj84v0G/Jn9r/m/yGAKsAzoPka6TUX0FnABzoFNgbh g1yCmoLJgj2C20JoQq6F9IWyh0aFToaJhqWErYerhT8NP42wiai/TnE98PpYpGhkWuROlElUbTRF dCiYGsnfeBYDj/GMGb4pcTM3Fh7rFzsdpxVXd4vzVmY8Oj4qfgfsBBYSrBPGEw0S++5o3ukCfYWu JC0wvTVM/phik7J4z/3e9v3rqfDU1DT6tBcPpB50ppuBmW1wBiLj8SPeR82ZRpkrj8Oz8FmF2TLZ wzkuOSe56Xl8ee1PbJ7s5N99yvq06Znpsx8FtwoZCt8U6Rd9fR5VTFFcWaJWMl16DVT8J2ViZb3l duXbFfGgU1D28tLLgSq7qh/VETWomoxXLK8qXku+bq3VrB18Y/pmss6mbqbern6mwbphotG4se+t ytuGJv6m/Hck726AGm/V3N7C23K/5XerWWvte9L33u872+jATLa7naE9qL2vg6UjtGPoA8eHyA/j nbydNzunuoS6ErrmuiW7U7q/9sj3POz50avWm9u726fXV9R30m/eXzkAH7AbqBvED7oOtg5RDfkN 9QwzD4cPj47wjsSOTI+KjSaProCJbcbY5rjG+JPxvY+GH0s+nn+y/FQ9gZq4OtEwSTLpNtk6RTXl N9X1mfFz8OfBL+xfrn8Zm+aZjpmenBGcuTUzPSsymzA7Oyc2d2dufl5i/u78/IIEqPFzi2KLiYsz S8JLt5amlvmXbyyPrXCshIHkz/jV/2v7Kvmqy2r9GmrNeu3F2tG6znr2+rcNmY3EjclvnN+CvrV/ J/lu973s+/4PtR+pP2Y2uTcDN1t+on+a/sz7ufZL+Ff4r7YtzJbxVtbWAqjyPtuvtw925Hdid7p+ Y34b/E77Pb5LsWu5+3j38x+aP9Z/HoPET7lntpe2N7SP2dfYj91v3t8/EDnwPCg8mD4kHOocxhzW Hf44Yj4yP0o8ajr6ecx0bHx887jmeOGE+ET+xPMk86Tj5OcpzakqSPwZp82nK2eYM+Ezc1Dv885a zxbPoaDiq547nsec5503nn8637rAXLBdyF2YXnhexFxkXLy4eHcxBKr/1l/+D3ITF/vbAgAQogbw 9rPMi4tdKwBAgTcCnk1dXJw0XFyclYBh8zQAtO3/e1/g38Gk4P2DzyJF9PXNhsho1P8e+c/tfwHa pBTKlzmDigAAAZxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0i YWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuMS4yIj4KICAgPHJkZjpSREYgeG1s bnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAg ICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0i aHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1l bnNpb24+MTMxPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGlt ZW5zaW9uPjUyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+ CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CtMRUTgAAArqSURBVHgB7VsLUFNXGj5JbrhEIDwC iy8KLqLCaLC4DuqqU6BrYdRltuKuq3YqPpDVVbpttQNOcaUjFLXWuN0q3QduAe2MtgOuiMMUcGVr dSzSsC6wIgVUEBAC3JDcPG5y99wkkJDchJAbiFDOOHjuf87/OP93zn/O/e8JC8MwYFK8vLxMnqar E+cBhKEqFotFK4EkSVr6NNGaB5giYSo3MeWtCAEP4E9yzhSa0hnWFX0dXTgveLYvQzkvOLvTkMiv keyI0jur8YlTkagvSFiWtk1CHh4nKPqaq0tKb1ZU1tRh8wqvf7zE3TWQsZ2kdvuKKF9F48VIGK1Y 4c5cEQBwUQEQejttylgMuKX0o+S0KgBa6qpa5GqL5okiMEcisaIdw/GCRQAgIRtvYjjWfitRbz2h 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 --=-=-=--