From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Tony Zorman via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#59080: 29.0.50; preview-get-dpi produces surprising result on vertical monitor Date: Sun, 06 Nov 2022 16:31:22 +0100 Message-ID: <87mt94aylx.fsf@hyperspace> Reply-To: Tony Zorman Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="26539"; mail-complaints-to="usenet@ciao.gmane.io" To: 59080@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Nov 06 19:32:14 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1orkRJ-0006fj-RH for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 06 Nov 2022 19:32:14 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1orkRB-00070k-SK; Sun, 06 Nov 2022 13:32:06 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1orkR8-000707-GG for bug-gnu-emacs@gnu.org; Sun, 06 Nov 2022 13:32:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1orkR8-0000go-80 for bug-gnu-emacs@gnu.org; Sun, 06 Nov 2022 13:32:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1orkR8-0006CR-3c for bug-gnu-emacs@gnu.org; Sun, 06 Nov 2022 13:32:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Tony Zorman Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 06 Nov 2022 18:32:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 59080 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.166775946923755 (code B ref -1); Sun, 06 Nov 2022 18:32:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 6 Nov 2022 18:31:09 +0000 Original-Received: from localhost ([127.0.0.1]:60564 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1orkQE-0006B3-FR for submit@debbugs.gnu.org; Sun, 06 Nov 2022 13:31:09 -0500 Original-Received: from lists.gnu.org ([209.51.188.17]:46116) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1orhcV-0005md-HO for submit@debbugs.gnu.org; Sun, 06 Nov 2022 10:31:37 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1orhcV-0005nN-Br for bug-gnu-emacs@gnu.org; Sun, 06 Nov 2022 10:31:35 -0500 Original-Received: from mout-p-202.mailbox.org ([2001:67c:2050:0:465::202]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_CHACHA20_POLY1305:256) (Exim 4.90_1) (envelope-from ) id 1orhcR-0000tD-PT for bug-gnu-emacs@gnu.org; Sun, 06 Nov 2022 10:31:34 -0500 Original-Received: from smtp102.mailbox.org (smtp102.mailbox.org [IPv6:2001:67c:2050:b231:465::102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4N4yy51x17z9sWD for ; Sun, 6 Nov 2022 16:31:25 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1667748685; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=1dbu7a/jbXVAdwi44cFXcq9ytK9+gyIOVlmUfSmodzM=; b=nmw+aAlJCu/h0v8plD0wRxSNIJ6Ed5Lg1QvtLwTM8C5XteB8gSnLiAEJjOACMsKL98lSAC 1kL7ocbBnWUIyOBo1TFIaANQOkaq8P2QyWiAMMMpog9/N4oyfmUN0j2WNeOo6K7lEyg1De OIlcMKJN8Fq5yPnj8GG6AQ+AEzXPHOA3zPnliA7LBOfXVixaFSwrPDbafeP3zTNmZsrZSc V5mMyiPFvb4j5cXDq6dq703t2Oi0m3kQTqRB2vmL93aawB8VQ7mXn2C1bgrzJun0RYX8jl ZsfhShrpW51dVvajAElzIIeDQvdKskudlEjHnSQpaVAdBQO4EkGW+WRZ7jFcvw== X-MBO-RS-ID: 6120e476d6491a33135 X-MBO-RS-META: p8rwyaa9s3xj6da6baey3y8pxxk39ata Received-SPF: pass client-ip=2001:67c:2050:0:465::202; envelope-from=tonyzorman@mailbox.org; helo=mout-p-202.mailbox.org X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Sun, 06 Nov 2022 13:31:05 -0500 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:247229 Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi, tl;dr: the `preview-get-dpi' function compares the wrong values for horizontal monitors (i.e., ones that are flipped by 90/270 degrees). When previewing LaTeX fragments via AUCTeX's `preview.el' library, things get quite messed up when one or more monitors are set up in "portrait mode". I have attached three images that show this; bug1.png shows a rendered equation for two vertical monitors, bug2.png for a single one, and horiz.png displays that same equation being rendered on a horizontal monitor (i.e., this is the expected result). Looking into `preview.el', it seems like that `preview-get-dpi' (called by `preview-get-geometry', which is in turn called by `preview-generate-preview') calculates the wrong "resolution". The relevant implementation is (defun preview-get-dpi () (let* ((monitor-attrs (frame-monitor-attributes)) (mm-dims (cdr (assoc 'mm-size monitor-attrs))) (mm-width (nth 0 mm-dims)) (mm-height (nth 1 mm-dims)) (pixel-dims (cl-cdddr (assoc 'geometry monitor-attrs))) (pixel-width (nth 0 pixel-dims)) (pixel-height (nth 1 pixel-dims))) (cons (/ (* 25.4 pixel-width) mm-width) (/ (* 25.4 pixel-height) mm-height)))) An example output of `frame-monitor-attributes' for a horizontal monitor: '((name . "DP1") (geometry 0 0 1920 1080) (workarea 0 0 1920 1080) (mm-size 530 300) (frames <>) (source . "XRandR 1.5")) The same monitor in "vertical-mode" returns: '((name . "DP1") (geometry 0 0 1080 1920) (workarea 0 0 1080 1920) (mm-size 530 300) (frames <>) (source . "XRandR 1.5")) Crucially, the returned physical width and height of the monitor don't change, but the geometry=E2=80=94what will be the pixel width and height=E2= =80=94does. However, turning the monitor by 90 degrees obviously switches the physical width an height around as well, although that perhaps can't be reported property. In such a situation, we actually compare the pixel _width_ of the monitor with its physical _height_, as well as its pixel height with its width. Naturally, and depending on the specific setup, this produces too narrow or too wide previews. I have fixed this locally by only comparing comparable values; i.e., instead of (cons (/ (* 25.4 pixel-width) mm-width) (/ (* 25.4 pixel-height) mm-height)) I wrote something like (cons (/ (* 25.4 (max pixel-width pixel-height)) (max mm-width mm-heigh= t)) (/ (* 25.4 (min pixel-width pixel-height)) (min mm-width mm-heigh= t))) This fixed the problem for me, but I don't know if there is some situation (or strange resolution) in which it would be correct to compare some other combination of values. Hopefully this was comprehensible. If not, feel free to ask for more information. Best, Tony In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-musl, cairo version 1.16.0) of 2022-10-29 built on pbox Repository revision: 3b0296c8b03436c7848009ca0238b1126dc3bac7 Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12101004 System Description: Void Linux Configured using: 'configure --with-x --without-x-toolkit --without-toolkit-scroll-bars --without-dbus --without-gconf --without-gsettings --with-modules --with-file-notification=3Dinotify --with-jpeg --with-tiff --with-gif --with-png --with-xpm --with-rsvg --without-imagemagick --with-cairo --with-gnutls --with-sound --with-json --with-harfbuzz --with-gpm --with-native-compilation --without-compress-install --with-xinput2 --with-small-ja-dic 'CFLAGS=3D-O2 -pipe -march=3Dnative -mtune=3Dnative -fomit-frame-pointer'' Configured features: CAIRO FREETYPE GIF GLIB GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY INOTIFY OLDXMENU PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF WEBP X11 XDBE XIM XINPUT2 XPM ZLIB Important settings: value of $LC_ALL: en_US.UTF-8 value of $LC_COLLATE: C value of $LANG: en_GB locale-coding-system: utf-8-unix Major mode: Message Minor modes in effect: olivetti-mode: t rainbow-mode: t rainbow-delimiters-mode: t flyspell-mode: t mml-mode: t corfu-indexed-mode: t corfu-history-mode: t global-corfu-mode: t corfu-mode: t savehist-mode: t electric-pair-mode: t global-undo-tree-mode: t undo-tree-mode: t yas-global-mode: t yas-minor-mode: t xclip-mode: t global-auto-revert-mode: t global-hl-line-mode: t repeat-mode: t recentf-mode: t save-place-mode: t pixel-scroll-precision-mode: t global-subword-mode: t subword-mode: t popwin-mode: t marginalia-mode: t vertico-mode: t whole-line-or-region-global-mode: t whole-line-or-region-local-mode: t gcmh-mode: t override-global-mode: t ctrlf-mode: t ctrlf-local-mode: t puni-mode: t auto-compile-on-load-mode: t auto-compile-on-save-mode: t tooltip-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t column-number-mode: t line-number-mode: t auto-fill-function: yas--auto-fill visual-line-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t abbrev-mode: t Load-path shadows: /usr/share/emacs/site-lisp/notmuch/notmuch hides /home/slot/.config/emacs/e= lpa/notmuch-20220923.2323/notmuch /usr/share/emacs/site-lisp/notmuch/notmuch-wash hides /home/slot/.config/em= acs/elpa/notmuch-20220923.2323/notmuch-wash /usr/share/emacs/site-lisp/notmuch/notmuch-tree hides /home/slot/.config/em= acs/elpa/notmuch-20220923.2323/notmuch-tree /usr/share/emacs/site-lisp/notmuch/notmuch-tag hides /home/slot/.config/ema= cs/elpa/notmuch-20220923.2323/notmuch-tag /usr/share/emacs/site-lisp/notmuch/notmuch-show hides /home/slot/.config/em= acs/elpa/notmuch-20220923.2323/notmuch-show /usr/share/emacs/site-lisp/notmuch/notmuch-query hides /home/slot/.config/e= macs/elpa/notmuch-20220923.2323/notmuch-query /usr/share/emacs/site-lisp/notmuch/notmuch-print hides /home/slot/.config/e= macs/elpa/notmuch-20220923.2323/notmuch-print /usr/share/emacs/site-lisp/notmuch/notmuch-parser hides /home/slot/.config/= emacs/elpa/notmuch-20220923.2323/notmuch-parser /usr/share/emacs/site-lisp/notmuch/notmuch-mua hides /home/slot/.config/ema= cs/elpa/notmuch-20220923.2323/notmuch-mua /usr/share/emacs/site-lisp/notmuch/notmuch-message hides /home/slot/.config= /emacs/elpa/notmuch-20220923.2323/notmuch-message /usr/share/emacs/site-lisp/notmuch/notmuch-maildir-fcc hides /home/slot/.co= nfig/emacs/elpa/notmuch-20220923.2323/notmuch-maildir-fcc /usr/share/emacs/site-lisp/notmuch/notmuch-lib hides /home/slot/.config/ema= cs/elpa/notmuch-20220923.2323/notmuch-lib /usr/share/emacs/site-lisp/notmuch/notmuch-jump hides /home/slot/.config/em= acs/elpa/notmuch-20220923.2323/notmuch-jump /usr/share/emacs/site-lisp/notmuch/notmuch-hello hides /home/slot/.config/e= macs/elpa/notmuch-20220923.2323/notmuch-hello /usr/share/emacs/site-lisp/notmuch/notmuch-draft hides /home/slot/.config/e= macs/elpa/notmuch-20220923.2323/notmuch-draft /usr/share/emacs/site-lisp/notmuch/notmuch-crypto hides /home/slot/.config/= emacs/elpa/notmuch-20220923.2323/notmuch-crypto /usr/share/emacs/site-lisp/notmuch/notmuch-compat hides /home/slot/.config/= emacs/elpa/notmuch-20220923.2323/notmuch-compat /usr/share/emacs/site-lisp/notmuch/notmuch-company hides /home/slot/.config= /emacs/elpa/notmuch-20220923.2323/notmuch-company /usr/share/emacs/site-lisp/notmuch/notmuch-address hides /home/slot/.config= /emacs/elpa/notmuch-20220923.2323/notmuch-address /usr/share/emacs/site-lisp/notmuch/coolj hides /home/slot/.config/emacs/elp= a/notmuch-20220923.2323/coolj /home/slot/.config/emacs/elpa/transient-20221028.1430/transient hides /usr/= local/share/emacs/29.0.50/lisp/transient /home/slot/.config/emacs/lisp/completion hides /usr/local/share/emacs/29.0.= 50/lisp/completion /home/slot/.config/emacs/elpa/modus-themes-20221101.424/theme-loaddefs hide= s /usr/local/share/emacs/29.0.50/lisp/theme-loaddefs Features: (gnus-alias org-notmuch the-org-mode-expansions org-element avl-tree generator org-protocol org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote org-src ob-comint org-pcomplete pcomplete org-list org-faces org-entities noutline outline org-version ob-emacs-lisp ob-core ob-eval org-table oc-basic bibtex iso8601 ol org-keys oc org-compat org-macs org-loaddefs mailboxes notmuch notmuch-tree notmuch-jump notmuch-hello notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company notmuch-parser format-spec notmuch-wash diff-mode coolj notmuch-query goto-addr icalendar diary-lib diary-loaddefs cal-menu calendar cal-loaddefs notmuch-tag crm notmuch-lib notmuch-version notmuch-compat mm-view mml-smime smime gnutls dig embark-consult embark ffap wgrep grep compile comint ansi-osc ansi-color consult-vertico consult compat-28 bookmark rect face-remap olivetti expand-region subword-mode-expansions text-mode-expansions er-basic-expansions thingatpt expand-region-core expand-region-custom puni pulse mwim eudc-capf eudc cus-start eudc-vars jka-compr helpful cc-langs cc-vars cc-defs imenu trace edebug debug backtrace info-look find-func f f-shortdoc shortdoc help-fns radix-tree elisp-refs shadow sort rainbow-mode xterm-color color rainbow-delimiters flyspell ispell mail-extr emacsbug message yank-media puny dired-x dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util text-property-search time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils mule-util corfu-indexed corfu-history corfu orderless cursor-sensor savehist org-setup latex-config latex-pretty-symbols latex-math eshell-config programming agda2 erc-config rss email writing parens-config elec-pair global-packages undo-tree diff queue yasnippet xclip autorevert filenotify hl-line repeat recentf tree-widget saveplace pixel-scroll cua-base ring cap-words superword subword dired-config window-management popwin completion marginalia vertico keybindings whole-line-or-region edmacro kmacro theming modus-operandi-theme modus-themes cus-edit pp cus-load wid-edit pcase smart-mode-line-respectful-theme smart-mode-line advice rich-minority startup-screen sensible-defaults finder-inf s dash gcmh quelpa-use-package use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key use-package-core aas-autoloads arxiv-citation-autoloads auto-compile-autoloads avy-autoloads cdlatex-autoloads cider-autoloads clojure-mode-autoloads consult-notmuch-autoloads corfu-autoloads csv-mode-autoloads ctrlf-autoloads dictcc-autoloads diff-hl-autoloads dired-narrow-autoloads dired-hacks-utils-autoloads diredfl-autoloads ef-themes-autoloads elfeed-score-autoloads elfeed-autoloads emacs-anywhere-autoloads embark-consult-autoloads consult-autoloads embark-autoloads ement-autoloads erc-hl-nicks-autoloads esh-autosuggest-autoloads company-autoloads eshell-toggle-autoloads exercism-autoloads async-await-autoloads async-autoloads a-autoloads expand-region-autoloads flycheck-autoloads forge-autoloads closql-autoloads gcmh-autoloads ghub-autoloads gnus-alias-autoloads haskell-mode-autoloads helpful-autoloads elisp-refs-autoloads hide-mode-line-autoloads hindent-autoloads hl-todo-autoloads iter2-autoloads ivy-autoloads ix.io-autoloads kbd-mode-autoloads keycast-autoloads khalel-autoloads latex-change-env-autoloads ledger-mode-autoloads lsp-haskell-autoloads lsp-ltex-autoloads lsp-ui-autoloads lsp-mode-autoloads ht-autoloads lv-autoloads magit-delta-autoloads magit-autoloads git-commit-autoloads marginalia-autoloads math-delimiters-autoloads modus-themes-autoloads multiple-cursors-autoloads mwim-autoloads nano-theme-autoloads nix-mode-autoloads notmuch-autoloads olivetti-autoloads orderless-autoloads org-appear-autoloads org-auctex-autoloads auctex-autoloads tex-site org-present-autoloads org-roam-ui-autoloads org-roam-autoloads emacsql-sqlite-autoloads emacsql-autoloads packed-autoloads paredit-autoloads parseedn-autoloads parseclj-autoloads persist-autoloads pkg-info-autoloads epl-autoloads plz-autoloads popup-autoloads popwin-autoloads pos-tip-autoloads promise-autoloads puni-autoloads easy-mmode quelpa-use-package-autoloads quelpa-autoloads rainbow-delimiters-autoloads rainbow-mode-autoloads request-autoloads rustic-autoloads markdown-mode-autoloads f-autoloads rust-mode-autoloads s-autoloads sesman-autoloads showtip-autoloads simple-httpd-autoloads smart-mode-line-autoloads rich-minority-autoloads spinner-autoloads stimmung-themes-autoloads svg-lib-autoloads taxy-magit-section-autoloads taxy-autoloads magit-section-autoloads dash-autoloads transient-autoloads treepy-autoloads undo-tree-autoloads queue-autoloads use-package-autoloads bind-key-autoloads vertico-autoloads visual-fill-column-autoloads websocket-autoloads wgrep-autoloads whole-line-or-region-autoloads with-editor-autoloads info compat-autoloads xclip-autoloads xterm-color-autoloads yaml-autoloads yasnippet-autoloads auto-compile comp comp-cstr warnings icons rx cl-extra help-mode packed compat compat-macs package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads inotify lcms2 dynamic-setting font-render-setting cairo xinput2 x multi-tty make-network-process native-compile emacs) Memory information: ((conses 16 595812 522491) (symbols 48 82187 28) (strings 32 167057 27313) (string-bytes 1 5017839) (vectors 16 50353) (vector-slots 8 1125698 317543) (floats 8 434 762) (intervals 56 3989 5338) (buffers 984 15)) --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=bug1.png Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAggAAAAxCAIAAAAwdMZ4AAAAA3NCSVQICAjb4U/gAAAJHUlEQVR4 Xu2d0VHdOhCGw51bAKGDwAwFJOkgpANIB0AHSUpI6CBJByEdBDoAOgg88gbMpIDcb+afq6trS0aW sQ/Y/3k448jSavXtSquVfcjanz9/nvljAiZgAiZgAv8S+MsoTMAETMAETCAm4MBgfzABEzABE/gf AQcGO4QJmIAJmIADg33ABEzABEwgT8AZQ56N75iACZjAIgk4MCzS7B60CZiACeQJODDk2fiOCZiA CSySgAPDIs3uQZuACZhAnoADQ56N75iACZjAIgk4MCzS7B60CZiACeQJODDk2fiOCZiACSySgAPD Is3uQZuACZhAnoADQ56N75iACZjAIgk4MCzS7B60CZiACeQJODDk2fiOCZiACSySgAPDIs3uQZuA CZhAnsDf+VuD7pycnPz8+RMRt7e3XF9dXQVxL1682NnZef78OSVv377lOu7pw4cP+ietLi4u4lu7 u7ubm5uUbG1tHRwcDNLPjU2gjIA9uYyTa82KwNoE/4MbsWFjYyNgu7m5UVS4FyQx4/T0VNXev3// +fPne5tMUOH8/JxeXr16NUFf7S4uLy9RIETWdgWXjEdgZp48HihLfuoExsoYYi6NMFAYFSYjyzrL hKc7khVylDdv3nz8+JF/NlIZ6nz69Inyw8NDJS4jaSh99vb2kM92tRGB6JrP169ff/369e7du1XF pzB2AhUfssOjoyMKid9kgTEZhsNWgDo/fvyYYBcyklEkdlWeXA2525dGZfXIhTOzoMpcZr5zHWvL 5Pr+/btm2WMYRbX1BynPXJ3gE6tY3h02Cw1ZccobVtTUwRfHXKxi7eZnZ2fc+vLlS/vWGCWKQN3d oefLly97YWGMydGFIXCXOhUjQhMshdodbTkJ7Lg7zS0GCDGmfTeHDmVW6Ml1kEt8qWO8I91iQmGF kYSXi8WaLDLt+swCNl7t8hWW1Fm/WuEpMoZBgWuSxsRkdujr6+vHx8fthIZcgbt8cg822Jex6aAh uwzyDP7JB8eiIbuPviNAFCkL/oo0rhGoY+7G8xi6Q1set5Q/cdEmiDWRJgwnjBQ9EYXCnPgpU+ml M1jItFj3w/OhQCA+/aOLWOwQaNpD9VIyVAYjXUMVyE/oRK4OcqEv1ZEc0opMl8BAeOibf2M7GuLA ODMKaI7guq9fvw6ui6chmRJ6wVX4phUX1I/dPqk/xJgO7MloJe/lnzQPhUqImTtUoDI16QhH0qkD hWE2MbSHSujrrJ8cYGHhFM8YUGVtbS0oRBArVG6yZwzYj6UNGyeXfsyPN7CJaBwuMQo8htVQa1zs BBRytJJs0j12+bHcPQ5RlPAAnwmg+RCESCU07BbbuEsvTB4iBOVca1I1JBcKJPIxAdjONJ4AQQCt 2lF2DGiFqqprtGJ1qBssElbiyRWQZVl8styXYoxaCgvBXl9f//79e3t7u7B+qMYayhzhGyW1vCYd JtTXgkAOFLYgGiYzV9smRFGHuYxvt0Vhd6wPzBBCsGb7KElWbpdTmWMDyMSSNdMbKuUkNPhof0Oc +/btGxIwFp+22nXW72uLZv3qXKNXw7jX8oYPfpSEF3KS0Dii2d/fRz2+c4qx+6BCMvPFUbjVOH5B PoU65MFBe51asO+mbSONlYbJUyMU6HtEg3C8UBwYmq75rsidaU6axYeLmF73qB8cWs5wyXJGioEq Bitp03tyHWS07etLSVyjFmII/BCLNPwn16k8JzkT1QSz4o3YKDnp2vOImsmjpGR5shD92ysAyiQr t8cl4yantipXW7/dV6+SZR0l4YIYjGe2fLO5YPuAk3GdyxW4xYcwzhyjTvuYhW0yMhHFh/jPN/Wx JR7MSQW7cgrj3U0I/lzEGYY64pvdN020K9EFvs4mop0rUBn59KhH5UFCxwWdIkdHT2FjIjWQo9Ok koMpJSg0Yex3d3fA4ZpC9n3aibd3PbFWfaG1R6TzhHZ5YQlGJ5bjBm2DFkqYoNpAyGjYy5cmGFHc Bb4NfDwhmaPnlMHu+LDOoBrvOCAQUbgfdZiqeGY4bpI0LM5FSOLBq9lKQ6W2mgjtcsmMKyOHvERJ Fc0llm9q4vkh2ZJkVU6OCJnI4dN+37La+lphiHZM5+5pmFTpv8JeYaS6cqxEuZAHzxhCEMY/Cjcp QVuiOjuO5E6kfESqidc2koy+EqjP9IBP31FUdDSnJsqWhhjxUXnynEyzhLEwYZXf44HMX9YTVpUh 3jgetGVlDJrVya36PfHz2TOiOlsA7UQI8toa39uqUUE76yFn3AhUIsJ2QNuKvjosuT5WixO4JaPw 2KcnECYsk5dF4DEnrEsMDNUOwbKipI9ssU6IHKKurVopBx8iwW1NwARMoJvAWIGB9YsPG2TOOhrL aPk+V+d6GoBedtS5Ictr3a6/m0X53RX2XpeplA/NNRsE5u3JNrcJJAmM9bqqplOyy+GFKw8Mw4dg CU+FgD35qVjKej4ggbECwwOqaFEmYAImYAJTEvCf3Z6StvsyARMwgSdAYKxnDLmh84BBrxt3P2lI 5u8cr+dO2FX/3t8Q5rRyuQkkCdhdk1hcOHsCgwKDfgzCYs2hP0szD5l5KsurnB3U9At4fnpDZb1w Gb/6iRB+nKInzN1yGl2gA0+qeUDNe8F+H7GDv2/1ImB37YXLlWdDoPIZA7+vY/2N/+oI/2Rd1nKf o6NWhJPwVg9v8tKEeKAmeh8094O9joyBqMBdYoleXsop4HITKCdgdy1n5ZozI1CZMfALUhZ31mLW dBZlvplFvOPPos912LNTwuuq/M2G8HcXlAcoveAbCTQMTFnWOQ4iY7j3F2RUIH5QXz8ZY2fHCVX5 H4eYmRU9nDEI6C8WINnuOgZey3zMBCozhsIhadVm9e/74r+eQChyhL46MoZCfVzNBMYgYHcdg6pl rpDAuIFhhQNz1yZgAiZgAnUE/LpqHTe3MgETMIHZEnBgmK1pPTATMAETqCPgwFDHza1MwARMYLYE HBhma1oPzARMwATqCDgw1HFzKxMwAROYLQEHhtma1gMzARMwgToCDgx13NzKBEzABGZLwIFhtqb1 wEzABEygjoADQx03tzIBEzCB2RJwYJitaT0wEzABE6gj4MBQx82tTMAETGC2BP4BzBjdCumjEvAA AAAASUVORK5CYII= --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=bug2.png Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAALQAAABRCAIAAAD0JhtUAAAAA3NCSVQICAjb4U/gAAAJv0lEQVR4 Xu2cza0UOxOGL1cEAAgWiBWQAZAAAkKAECADIAQIAXaskIA9C0AEwE8CCHaIHYTA93wq3VLJ5XK7 +vTMnNPtWYz6lMv18/p12e3uOaf+/v37z/gMBGoI/FsTDtlA4P8IDHIMHoQIDHKE0IyGQY7BgRCB QY4QmtEwyDE4ECIwyBFCMxoGOQYHQgQGOUJoRsMgx+BAiMAgRwjNaBjkGBwIERjkCKEZDWlyPHr0 6NR/n9u3b4OglXC9Aky3kGPPMKXJcefOncuXL2P6zJkz9+7d4wIJ1yLhusfrMdfZQo5dQ8D7HNnP q1evMP3kyRPt+OzZMyR8Z00dW/0t5DgJfrpyQILr16/rtxDwypUrXMh3FyWPvdIWcpwchDnkWBMJ IoC2kGOUu8rnkGPS6FBYBwKHIcfr16874Xv//n2n5lBbHIHTi1uMDMownz17VpbzSA35jx8/2Ns+ ffqUa8r7ly9fJruItT9//qCslum769Wh8Hj69Om3b99K5I0E5zU9f/4c9O7evZvqfhRM9lc53r17 d//+fWJl7EmynaGWFiFHW1lbMc49FMTCl1x0dpytVnh8+fJlf1HMOsXX58+f+U65OAom+yMH84mR 5txsshLMnvF0pMY8ePAAXykEs+Ok+oVHznt2V6vkgBH05Da7M+ajYLI/cpCMANdTOTrXkQZAFKdz 5841FLRpqW2NeDx65O2Y8TKbf/2YSAz7IwdjMLmaVHGhMFblVSHKOjxyul9VK4QpF77vDI89UVV1 8PX48eNqUySchwnW9keOKPSqnOqicuCw20w7kH5QbVnqnMRw6CjFo/BoI6+m5oU2O9/qJdk5NgMT cbpXckid78mtqJyWBOw0Fa9oYyH6WdD9MPRL1OOMmp/aQ/SHVGjOwGR/5OAOQqby9+/fNW5ILbcw PmeVF2S6evWq5AkzfG0QZaEFrd4+N4SUiuID4XwR8iFVJYVHdKKMqt0R+qeV7D2JUELimo+GxzUp 0Esu5JvKh9PIvo8w0izk+yNHNSA5zygSY2j5sLJKtWeMIZZ2BzUpGNzXeXIIiFrbvX26Y7n4IOyp Z9UUrMci8qq+FxYVTqlPmlwzGYhWayRMktnFBbDQxJ+o3bhxI1ocC0x8AJFkf4dgRFAdAC8kGUad +szQ+jMf5Lb2FIlBCyaTFRb26e4rv87LCKaG3HpsRx4ZKSJkjBl4GEOaUh1R0JThsUwVLsCHJjR5 d6KRgsckiqSQ769yEKJMdL3DBIVoF+IrrY2bXpRWeZvEysUFfcVsw77tBayeLp3wFR7p1Y68ahZY 7OaJikg8jDpZwAkBrTr2wiqURUfrK9NDM/IRVmOoCvdXOSQ9BkzXAqVLMXWQt0eLcsJK5FdZ6ciU klQj+wUQzDztUsWoIfQefeQkbheOX79+Xbx4sbDJnlRrpJIVoGwuPgzBrUAPNXt+X0TojTQk+yOH z4Fp4aEkVuSAQlZR3NVeVlkUIvuF2eqkjFxHcvXoIycRe4f18+fPS5cuFXbQkVFEXk3coxdFghwu slMpFCZB8wb3Rw7xTZJ2MJgcxXZM1Mgk2l6hQBFGATsFZEgEFJVH9i0QElIKfe3uPfrIiaGRC6Yw Anvag5cKT2uPGC8w8SSIJDvfcxCoQCOcACldGqGFDIynuYQbnX+zKtsNvOYmqzV/CpST9qUjc709 eBF2yAuPqhlFXjWFd54HaVOVB9VyUrVWCKMIe/runByMkLChmrOE6Gcbcjrq7sRnQpfGPUuhX7Xv bS4laUfuveiComgIFZhODQS8HZXQvYF2o2PRtA9y4JLJ4cumZC7LCts0OdvR+H7//i3bMS3d0oQ+ 9/RRhtaLta/6ix+C+bw08ijIQl4MJFVHyEGmep1iid7jiCONELMFyO0Id77nIDJuK4gpuscDSoK+ cOHCixcv5AakqMlgZAeAjb3sxrmVZfNhD0IKTclc7KsahPPDSW2bN9UKj6nVJBoYQiUv4mRWyJLn D3ts3/aKYyNEE/T8XV4Uyc7JIVtCuKxnU7rDYHQR8qfsITREsEAelQeVY9niQpcPHz4w8Cq09hUR FDw5ZD8UYRTJvcd25JGdQk54Ahf7KijLcOKIa1KANN++ffv48SOpcQLGn6D35s0bmqjNZFG8hFZE iOVUBfpn8scLVQXyYbZpk+wqrMT2YivO8Kvk4cOHeg0KXEur7W71QYfZXw1jUmjtR8roWHeqlspR e1VNRa5F7rNDIpGjYK/bdkSZb4vwZJeGws4rBxBrzZApYu9NZBJ7OlsJcLframNGRvZtFyqNnjU1 THU2+VwmO/oVDYkK7fWkKeqHtzbZK1LY+YbUO45quK/20jdaX7zleZLI7zxrh+0FtgumcwByyC7E g9jeWHn9pSQLorlUSLPtkAvFI9r7Z80egBzUcLl9LWKN6mFUabKpbkFf7sWWWiUPQA4GqcqD6mrN PJi94dgCG3yOSzEDy4chR5UHPk+hUZVJVeUhXBaBw5Cjf5nvp9GyuAxrMytHdcewMjS3kOPkkM2p HNEzTH3cOun1+CtsIcfJUTjFAdmkklXgKYk8X7527ZruBrih+Pr1K2ochhZHXinjx0R5Czn2QD3n hPTWrVuFaVgiwtVsHreQ4yQ/0pVj0uJQWA0Cc/Ycq0l+JNJGYJCjjc+mWwc5Nj387eQHOdr4bLp1 kGPTw99Ofj45DvWEvZ3PIq0rTi2Fz0xy8PYi7zBGnjgH6396Ehk5lHzFqWUhnXMIhg8eo/P2XuRs R/9rMXK3rHzFqWWBmlk5cKOvgvKMioNR+xoBkuhHbNn4DqK/4tRSeM6sHPZHSrwdziJtD86XfZMx lc/RlVecWhacROWgHtg39vRP5tlqHqkIfCtOLcWPBDmKH0vxewomGTj693GKQpIK6Dgorzi1FLy9 5IAEvNOs9yD8yYN7SEAt8eQofquZCujgyitOLYttLzkoEnbLydyCKHzjjyYpIVnfx1N/xallAe/d kAoPqtbl39ZQP3wJqeqfIOGKU+sZhV5yiC398Zn92QxlQz2xypz0zemKU+shhNXpJYf8cwEOvs6f P3/z5k1rwhICopx0cmwktR6i9O452GHIE4dPnz5JqZAtKktJUTlO7sG54rXi1Ho4oTq95KCD/K9M 3iuWYwDubNmiUifsY6plf6uZymQpZQrhWlPLQpR4h1ROL4QNUkikSPAkhe0qR2HyD1IoJAv+Ii+b zyL6ZLrW1FL4JCoHeNn9hC4fPIO1/+7opDMD+FacWoocicohdqm6TKz13bWmUNuIcqJyKDkGMzZC jnTl2AguI00QSFeOgdp2EBjk2M5YpzMd5EhDtp0OgxzbGet0pv8DTjVCzfdzRAgAAAAASUVORK5C YII= --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=horiz.png Content-Transfer-Encoding: base64 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 --=-=-= Content-Type: text/plain -- Tony Zorman | https://tony-zorman.com/ --=-=-=--