emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

scratch/etags-regen 535c262606 2/6: Merge branch 'master' into scratch/e


From: Dmitry Gutov
Subject: scratch/etags-regen 535c262606 2/6: Merge branch 'master' into scratch/etags-regen
Date: Mon, 11 Jul 2022 14:01:44 -0400 (EDT)

branch: scratch/etags-regen
commit 535c2626064a207b4ad30483de49d7e6aad8b48b
Merge: d680a23e57 174430e351
Author: Dmitry Gutov <dgutov@yandex.ru>
Commit: Dmitry Gutov <dgutov@yandex.ru>

    Merge branch 'master' into scratch/etags-regen
---
 admin/notes/unicode                                |   44 +-
 admin/unidata/BidiBrackets.txt                     |   20 +-
 admin/unidata/BidiMirroring.txt                    |   26 +-
 admin/unidata/Blocks.txt                           |   22 +-
 admin/unidata/IVD_Sequences.txt                    |  142 ++-
 admin/unidata/Makefile.in                          |    6 +-
 admin/unidata/NormalizationTest.txt                |  849 +++++++------
 admin/unidata/README                               |    4 +
 admin/unidata/SpecialCasing.txt                    |    6 +-
 admin/unidata/UnicodeData.txt                      |  837 ++++++++++++-
 admin/unidata/blocks.awk                           |   27 +-
 admin/unidata/copyright.html                       |    2 +-
 admin/unidata/emoji-data.txt                       | 1297 ++++++++++++++++++++
 configure.ac                                       |   64 +-
 doc/emacs/cmdargs.texi                             |    5 +
 doc/emacs/custom.texi                              |    6 +-
 doc/emacs/emacs.texi                               |    2 +-
 doc/emacs/frames.texi                              |  195 +--
 doc/emacs/maintaining.texi                         |    3 +-
 doc/emacs/package.texi                             |    2 +-
 doc/emacs/programs.texi                            |    4 +-
 doc/lispintro/emacs-lisp-intro.texi                |    2 +-
 doc/lispref/debugging.texi                         |    6 +-
 doc/lispref/elisp.texi                             |    2 +-
 doc/lispref/files.texi                             |    2 +-
 doc/lispref/internals.texi                         |   18 +-
 doc/lispref/minibuf.texi                           |    2 +-
 doc/lispref/nonascii.texi                          |    2 +-
 doc/lispref/os.texi                                |    2 +-
 doc/lispref/sequences.texi                         |   18 +
 doc/lispref/text.texi                              |    7 +-
 doc/lispref/tips.texi                              |   20 +-
 doc/lispref/variables.texi                         |   35 +
 doc/misc/ede.texi                                  |    2 +-
 doc/misc/efaq-w32.texi                             |    2 +-
 doc/misc/efaq.texi                                 |   11 +-
 doc/misc/flymake.texi                              |  279 +++--
 doc/misc/gnus-faq.texi                             |    4 +-
 doc/misc/gnus.texi                                 |    2 +-
 doc/misc/mairix-el.texi                            |    2 +-
 doc/misc/pgg.texi                                  |    3 +-
 doc/misc/rcirc.texi                                |   72 +-
 doc/misc/reftex.texi                               |    4 +-
 etc/NEWS                                           |  240 +++-
 etc/TODO                                           |    3 +-
 etc/themes/manoj-dark-theme.el                     |   23 +-
 etc/themes/tango-dark-theme.el                     |    2 +-
 etc/themes/tango-theme.el                          |    2 +-
 lisp/align.el                                      |    2 +-
 lisp/allout-widgets.el                             |   18 +-
 lisp/allout.el                                     |   42 +-
 lisp/ansi-color.el                                 |    2 +-
 lisp/apropos.el                                    |    2 +-
 lisp/arc-mode.el                                   |    2 +-
 lisp/auth-source-pass.el                           |    2 +-
 lisp/auth-source.el                                |   19 +-
 lisp/autoarg.el                                    |    2 +-
 lisp/autorevert.el                                 |   10 +-
 lisp/bindings.el                                   |   12 +-
 lisp/bookmark.el                                   |   64 +-
 lisp/bs.el                                         |    5 +-
 lisp/calc/calc-aent.el                             |    2 +-
 lisp/calc/calc-bin.el                              |    2 +-
 lisp/calc/calc-ext.el                              |    2 +-
 lisp/calc/calc-map.el                              |    2 +-
 lisp/calc/calc-menu.el                             |    2 +
 lisp/calc/calc-misc.el                             |    3 +-
 lisp/calc/calc-units.el                            |    2 +-
 lisp/calc/calc.el                                  |   57 +-
 lisp/calculator.el                                 |    3 +-
 lisp/calendar/cal-tex.el                           |    2 +-
 lisp/calendar/calendar.el                          |    4 +-
 lisp/calendar/icalendar.el                         |    2 +-
 lisp/calendar/todo-mode.el                         |   18 +-
 lisp/cedet/ede/auto.el                             |    4 +-
 lisp/cedet/ede/base.el                             |    4 +-
 lisp/cedet/ede/cpp-root.el                         |    2 +-
 lisp/cedet/ede/makefile-edit.el                    |    2 +-
 lisp/cedet/ede/proj-elisp.el                       |    4 +-
 lisp/cedet/ede/proj.el                             |    2 +-
 lisp/cedet/ede/project-am.el                       |    6 +-
 lisp/cedet/ede/source.el                           |    4 +-
 lisp/cedet/ede/system.el                           |    2 +-
 lisp/cedet/mode-local.el                           |    4 +-
 lisp/cedet/semantic.el                             |    2 +-
 lisp/cedet/semantic/analyze/complete.el            |    2 +-
 lisp/cedet/semantic/bovine/c.el                    |    6 +-
 lisp/cedet/semantic/bovine/debug.el                |    2 +-
 lisp/cedet/semantic/complete.el                    |    6 +-
 lisp/cedet/semantic/db-el.el                       |    2 +-
 lisp/cedet/semantic/db-find.el                     |    2 +-
 lisp/cedet/semantic/db-typecache.el                |    3 +-
 lisp/cedet/semantic/debug.el                       |    8 +-
 lisp/cedet/semantic/decorate/include.el            |   16 +-
 lisp/cedet/semantic/dep.el                         |    2 +-
 lisp/cedet/semantic/ede-grammar.el                 |    2 +-
 lisp/cedet/semantic/fw.el                          |    2 +-
 lisp/cedet/semantic/grammar.el                     |    2 +-
 lisp/cedet/semantic/idle.el                        |    3 +-
 lisp/cedet/semantic/symref/grep.el                 |   15 +-
 lisp/cedet/semantic/symref/list.el                 |    2 +-
 lisp/cedet/semantic/tag.el                         |   13 +-
 lisp/cedet/semantic/util-modes.el                  |    4 +-
 lisp/cedet/srecode/ctxt.el                         |    2 +-
 lisp/cedet/srecode/dictionary.el                   |    2 +-
 lisp/cedet/srecode/semantic.el                     |    2 +-
 lisp/cmuscheme.el                                  |    8 +-
 lisp/comint.el                                     |    2 +-
 lisp/completion.el                                 |    4 +-
 lisp/composite.el                                  |    2 +-
 lisp/delim-col.el                                  |    4 +-
 lisp/descr-text.el                                 |    2 +-
 lisp/dired-aux.el                                  |    6 +-
 lisp/dired-x.el                                    |    8 +-
 lisp/dired.el                                      |   31 +-
 lisp/dnd.el                                        |    2 +-
 lisp/doc-view.el                                   |    8 +-
 lisp/dos-fns.el                                    |    4 +-
 lisp/edmacro.el                                    |    2 +-
 lisp/elec-pair.el                                  |    4 +-
 lisp/emacs-lisp/advice.el                          |  112 +-
 lisp/emacs-lisp/byte-run.el                        |    6 +-
 lisp/emacs-lisp/bytecomp.el                        |    8 +-
 lisp/emacs-lisp/cconv.el                           |    2 +-
 lisp/emacs-lisp/check-declare.el                   |    6 +-
 lisp/emacs-lisp/checkdoc.el                        |  122 +-
 lisp/emacs-lisp/cl-indent.el                       |    4 +-
 lisp/emacs-lisp/cl-macs.el                         |    2 +-
 lisp/emacs-lisp/copyright.el                       |    4 +-
 lisp/emacs-lisp/debug.el                           |    2 +-
 lisp/emacs-lisp/disass.el                          |    4 +-
 lisp/emacs-lisp/easy-mmode.el                      |    4 +-
 lisp/emacs-lisp/eieio-custom.el                    |    2 +-
 lisp/emacs-lisp/eldoc.el                           |    2 +-
 lisp/emacs-lisp/elp.el                             |    4 +-
 lisp/emacs-lisp/ewoc.el                            |    6 +-
 lisp/emacs-lisp/find-func.el                       |   52 +-
 lisp/emacs-lisp/generator.el                       |    6 +-
 lisp/emacs-lisp/let-alist.el                       |    4 +-
 lisp/emacs-lisp/lisp-mnt.el                        |    7 +-
 lisp/emacs-lisp/lisp-mode.el                       |    8 +-
 lisp/emacs-lisp/macroexp.el                        |    8 +-
 lisp/emacs-lisp/nadvice.el                         |    2 +-
 lisp/emacs-lisp/package-x.el                       |    2 +-
 lisp/emacs-lisp/package.el                         |   14 +-
 lisp/emacs-lisp/pcase.el                           |    2 +-
 lisp/emacs-lisp/seq.el                             |   12 +
 lisp/emacs-lisp/shadow.el                          |   10 +-
 lisp/emacs-lisp/shortdoc.el                        |    5 +
 lisp/emacs-lisp/testcover.el                       |   36 +-
 lisp/emacs-lisp/thunk.el                           |    2 +-
 lisp/emulation/cua-base.el                         |   10 +-
 lisp/emulation/edt-mapper.el                       |    6 +-
 lisp/emulation/keypad.el                           |    4 +-
 lisp/emulation/viper-cmd.el                        |   12 +-
 lisp/emulation/viper-ex.el                         |    2 +-
 lisp/emulation/viper-keym.el                       |    8 +-
 lisp/emulation/viper-macs.el                       |   12 +-
 lisp/emulation/viper-mous.el                       |    2 +-
 lisp/emulation/viper-util.el                       |   29 +-
 lisp/emulation/viper.el                            |    4 +-
 lisp/epa-hook.el                                   |    2 +-
 lisp/epa.el                                        |    2 +-
 lisp/erc/erc-autoaway.el                           |    2 +-
 lisp/erc/erc-backend.el                            |   21 +-
 lisp/erc/erc-button.el                             |   11 +-
 lisp/erc/erc-dcc.el                                |   13 +-
 lisp/erc/erc-ibuffer.el                            |    9 +-
 lisp/erc/erc-join.el                               |   53 +-
 lisp/erc/erc-match.el                              |    2 +-
 lisp/erc/erc-netsplit.el                           |    5 +-
 lisp/erc/erc-networks.el                           |   13 +-
 lisp/erc/erc-pcomplete.el                          |    2 +-
 lisp/erc/erc-replace.el                            |    2 +-
 lisp/erc/erc-ring.el                               |    2 +-
 lisp/erc/erc-services.el                           |  168 +--
 lisp/erc/erc-sound.el                              |    5 +-
 lisp/erc/erc-speedbar.el                           |   25 +-
 lisp/erc/erc-spelling.el                           |    2 +-
 lisp/erc/erc-status-sidebar.el                     |    2 +-
 lisp/erc/erc-track.el                              |  126 +-
 lisp/erc/erc-truncate.el                           |    6 +-
 lisp/erc/erc-xdcc.el                               |    2 +-
 lisp/erc/erc.el                                    |  233 ++--
 lisp/eshell/em-basic.el                            |    2 +-
 lisp/eshell/em-glob.el                             |    4 +-
 lisp/eshell/em-hist.el                             |    2 +-
 lisp/eshell/em-ls.el                               |   14 +-
 lisp/eshell/em-pred.el                             |    2 +-
 lisp/eshell/em-rebind.el                           |    2 +-
 lisp/eshell/em-smart.el                            |    4 +-
 lisp/eshell/em-unix.el                             |    2 +-
 lisp/eshell/esh-arg.el                             |    2 +-
 lisp/eshell/esh-cmd.el                             |    4 +-
 lisp/eshell/esh-ext.el                             |    2 +-
 lisp/eshell/esh-io.el                              |    4 +-
 lisp/eshell/esh-mode.el                            |    2 +-
 lisp/eshell/eshell.el                              |   12 +-
 lisp/expand.el                                     |    2 +-
 lisp/face-remap.el                                 |   11 +-
 lisp/ffap.el                                       |    4 +-
 lisp/filenotify.el                                 |    2 +-
 lisp/files-x.el                                    |    2 +-
 lisp/files.el                                      |   17 +-
 lisp/filesets.el                                   |    4 +-
 lisp/find-file.el                                  |   16 +-
 lisp/find-lisp.el                                  |    6 +-
 lisp/finder.el                                     |    2 +-
 lisp/font-lock.el                                  |   10 +-
 lisp/forms.el                                      |   18 +-
 lisp/gnus/gnus-agent.el                            |   21 +-
 lisp/gnus/gnus-art.el                              |   19 +-
 lisp/gnus/gnus-diary.el                            |    6 +-
 lisp/gnus/gnus-dired.el                            |    2 +-
 lisp/gnus/gnus-group.el                            |    4 +-
 lisp/gnus/gnus-icalendar.el                        |    8 +-
 lisp/gnus/gnus-int.el                              |    3 +-
 lisp/gnus/gnus-ml.el                               |    2 +-
 lisp/gnus/gnus-mlspl.el                            |    2 +-
 lisp/gnus/gnus-msg.el                              |    4 +-
 lisp/gnus/gnus-registry.el                         |    4 +-
 lisp/gnus/gnus-salt.el                             |    2 +-
 lisp/gnus/gnus-score.el                            |    2 +-
 lisp/gnus/gnus-search.el                           |   26 +-
 lisp/gnus/gnus-sieve.el                            |    5 +-
 lisp/gnus/gnus-srvr.el                             |    2 +-
 lisp/gnus/gnus-start.el                            |   10 +-
 lisp/gnus/gnus-sum.el                              |   16 +-
 lisp/gnus/gnus-util.el                             |    8 +-
 lisp/gnus/gnus-uu.el                               |   38 +-
 lisp/gnus/gnus.el                                  |    9 +-
 lisp/gnus/message.el                               |    2 +-
 lisp/help-fns.el                                   |    6 +-
 lisp/help-mode.el                                  |   12 +-
 lisp/hexl.el                                       |    4 +-
 lisp/hippie-exp.el                                 |    2 +-
 lisp/ibuf-ext.el                                   |    4 +-
 lisp/icomplete.el                                  |    2 +-
 lisp/ido.el                                        |    8 +-
 lisp/iimage.el                                     |    2 +-
 lisp/image-mode.el                                 |    4 +-
 lisp/image.el                                      |    2 +-
 lisp/imenu.el                                      |   22 +-
 lisp/info-xref.el                                  |    8 +-
 lisp/info.el                                       |    5 +-
 lisp/informat.el                                   |    2 +-
 lisp/international/characters.el                   |   89 +-
 lisp/international/fontset.el                      |  195 +--
 lisp/international/iso-cvt.el                      |    4 +-
 lisp/international/latexenc.el                     |    4 +-
 lisp/international/mule-cmds.el                    |   10 +-
 lisp/international/mule-diag.el                    |    2 +-
 lisp/international/mule.el                         |    2 +-
 lisp/international/quail.el                        |    2 +-
 lisp/isearch.el                                    |   35 +-
 lisp/jsonrpc.el                                    |    4 +-
 lisp/kermit.el                                     |    2 +-
 lisp/kmacro.el                                     |    6 +-
 lisp/language/ind-util.el                          |   12 +-
 lisp/language/thai-word.el                         |   13 +-
 lisp/language/tibet-util.el                        |   12 +-
 lisp/language/tv-util.el                           |   10 +-
 lisp/ldefs-boot.el                                 |    4 +-
 lisp/leim/quail/persian.el                         |    2 +-
 lisp/leim/quail/sami.el                            |    2 +-
 lisp/leim/quail/vnvni.el                           |    2 +
 lisp/loadup.el                                     |    2 +-
 lisp/locate.el                                     |   14 +-
 lisp/ls-lisp.el                                    |    2 +-
 lisp/macros.el                                     |    2 +-
 lisp/mail/blessmail.el                             |    2 +-
 lisp/mail/feedmail.el                              |   14 +-
 lisp/mail/footnote.el                              |   18 +-
 lisp/mail/mailabbrev.el                            |   12 +-
 lisp/mail/mailclient.el                            |    2 +-
 lisp/mail/mspools.el                               |    4 +-
 lisp/mail/reporter.el                              |    4 +-
 lisp/mail/rmail-spam-filter.el                     |    2 +
 lisp/mail/rmail.el                                 |    5 +-
 lisp/mail/rmailout.el                              |    2 +-
 lisp/mail/supercite.el                             |    2 +-
 lisp/menu-bar.el                                   |    2 +-
 lisp/mh-e/mh-e.el                                  |   36 +-
 lisp/midnight.el                                   |    2 +-
 lisp/minibuf-eldef.el                              |    2 +-
 lisp/minibuffer.el                                 |    8 +-
 lisp/mouse-copy.el                                 |    4 +-
 lisp/mouse.el                                      |  218 ++--
 lisp/mpc.el                                        |    8 +-
 lisp/net/ange-ftp.el                               |  132 +-
 lisp/net/browse-url.el                             |    4 +-
 lisp/net/dictionary.el                             |   46 +-
 lisp/net/eudc.el                                   |    2 +-
 lisp/net/eww.el                                    |   22 +-
 lisp/net/gnutls.el                                 |    2 +-
 lisp/net/goto-addr.el                              |    5 +-
 lisp/net/ldap.el                                   |    3 +-
 lisp/net/mailcap.el                                |    4 +-
 lisp/net/mairix.el                                 |    2 +-
 lisp/net/nsm.el                                    |    8 +-
 lisp/net/quickurl.el                               |   16 +-
 lisp/net/rcirc.el                                  |  452 ++++---
 lisp/net/sasl-cram.el                              |    2 +
 lisp/net/sasl-digest.el                            |    4 +-
 lisp/net/secrets.el                                |    2 +-
 lisp/net/shr-color.el                              |    2 +-
 lisp/net/shr.el                                    |    2 +-
 lisp/net/sieve-manage.el                           |    2 +-
 lisp/net/sieve-mode.el                             |    2 +-
 lisp/net/sieve.el                                  |    2 +-
 lisp/net/snmp-mode.el                              |    4 +-
 lisp/net/soap-client.el                            |    2 +-
 lisp/net/soap-inspect.el                           |    2 +-
 lisp/net/socks.el                                  |    2 +-
 lisp/net/telnet.el                                 |    5 +-
 lisp/net/tramp-adb.el                              |    4 +-
 lisp/net/tramp-archive.el                          |    2 +-
 lisp/net/tramp-cmds.el                             |    4 +-
 lisp/net/tramp-crypt.el                            |    2 +-
 lisp/net/tramp-ftp.el                              |    6 +-
 lisp/net/tramp-gvfs.el                             |   10 +-
 lisp/net/tramp-sh.el                               |   47 +-
 lisp/net/tramp-smb.el                              |   21 +-
 lisp/net/tramp-sshfs.el                            |    2 +-
 lisp/net/tramp-sudoedit.el                         |    4 +-
 lisp/net/tramp.el                                  |   26 +-
 lisp/net/trampver.el                               |    2 +-
 lisp/net/webjump.el                                |    4 +-
 lisp/net/zeroconf.el                               |    6 +-
 lisp/newcomment.el                                 |   10 +-
 lisp/notifications.el                              |    2 +-
 lisp/nxml/nxml-mode.el                             |   15 +-
 lisp/nxml/nxml-ns.el                               |    2 +-
 lisp/nxml/nxml-outln.el                            |   10 +-
 lisp/nxml/nxml-rap.el                              |   16 +-
 lisp/nxml/rng-nxml.el                              |    2 +-
 lisp/nxml/rng-valid.el                             |   18 +-
 lisp/nxml/rng-xsd.el                               |    2 +-
 lisp/nxml/xmltok.el                                |    8 +-
 lisp/obsolete/rcompile.el                          |    2 +-
 lisp/obsolete/vc-arch.el                           |    2 +-
 lisp/org/ob-sql.el                                 |    4 +-
 lisp/org/ol.el                                     |    2 +-
 lisp/org/org-compat.el                             |    6 +-
 lisp/org/org-list.el                               |    2 +-
 lisp/org/org-timer.el                              |    6 +-
 lisp/org/org.el                                    |   14 +-
 lisp/org/ox.el                                     |    2 +-
 lisp/pixel-scroll.el                               |    6 +-
 lisp/play/5x5.el                                   |    7 +-
 lisp/play/cookie1.el                               |    6 +-
 lisp/play/decipher.el                              |    2 +-
 lisp/play/doctor.el                                |    5 +-
 lisp/play/dunnet.el                                |   13 +-
 lisp/play/fortune.el                               |    2 +-
 lisp/play/gamegrid.el                              |    2 +-
 lisp/play/gametree.el                              |    2 +-
 lisp/play/handwrite.el                             |    2 +-
 lisp/play/hanoi.el                                 |    6 +-
 lisp/play/life.el                                  |    4 +-
 lisp/play/mpuz.el                                  |    9 +-
 lisp/play/pong.el                                  |   15 +-
 lisp/play/solitaire.el                             |   27 +-
 lisp/play/spook.el                                 |    2 +-
 lisp/play/zone.el                                  |    2 +-
 lisp/plstore.el                                    |    2 +-
 lisp/printing.el                                   |   54 +-
 lisp/proced.el                                     |    6 +-
 lisp/profiler.el                                   |   17 +-
 lisp/progmodes/antlr-mode.el                       |    2 +-
 lisp/progmodes/bat-mode.el                         |    2 +-
 lisp/progmodes/bug-reference.el                    |    6 +-
 lisp/progmodes/cc-align.el                         |    8 +-
 lisp/progmodes/cc-awk.el                           |    7 +-
 lisp/progmodes/cc-bytecomp.el                      |    2 +-
 lisp/progmodes/cc-cmds.el                          |    8 +-
 lisp/progmodes/cc-defs.el                          |    4 +-
 lisp/progmodes/cc-engine.el                        |   12 +-
 lisp/progmodes/cc-guess.el                         |   20 +-
 lisp/progmodes/cc-langs.el                         |   12 +-
 lisp/progmodes/cc-menus.el                         |    2 +-
 lisp/progmodes/cc-mode.el                          |   53 +-
 lisp/progmodes/cc-styles.el                        |    2 +-
 lisp/progmodes/cc-vars.el                          |   40 +-
 lisp/progmodes/cfengine.el                         |    9 +-
 lisp/progmodes/cl-font-lock.el                     |    1 -
 lisp/progmodes/compile.el                          |   17 +-
 lisp/progmodes/cperl-mode.el                       |  402 +++---
 lisp/progmodes/ebnf-dtd.el                         |    8 +-
 lisp/progmodes/ebnf-ebx.el                         |    2 +-
 lisp/progmodes/ebnf2ps.el                          |    4 +-
 lisp/progmodes/ebrowse.el                          |    6 +-
 lisp/progmodes/elisp-mode.el                       |  271 +++-
 lisp/progmodes/etags.el                            |    2 +-
 lisp/progmodes/f90.el                              |   19 +-
 lisp/progmodes/flymake-cc.el                       |   41 +-
 lisp/progmodes/flymake-proc.el                     |   14 +-
 lisp/progmodes/flymake.el                          |  731 +++++++----
 lisp/progmodes/fortran.el                          |    2 +-
 lisp/progmodes/gdb-mi.el                           |    5 +-
 lisp/progmodes/grep.el                             |    2 +-
 lisp/progmodes/gud.el                              |   10 +-
 lisp/progmodes/hideif.el                           |    4 +-
 lisp/progmodes/idlw-complete-structtag.el          |    4 +-
 lisp/progmodes/idlw-help.el                        |   14 +-
 lisp/progmodes/idlw-shell.el                       |   50 +-
 lisp/progmodes/idlw-toolbar.el                     |    2 +-
 lisp/progmodes/idlwave.el                          |   24 +-
 lisp/progmodes/js.el                               |   16 +-
 lisp/progmodes/ld-script.el                        |    4 +-
 lisp/progmodes/octave.el                           |    4 +-
 lisp/progmodes/opascal.el                          |   13 +-
 lisp/progmodes/perl-mode.el                        |   12 +-
 lisp/progmodes/prog-mode.el                        |   47 +-
 lisp/progmodes/project.el                          |   43 +-
 lisp/progmodes/prolog.el                           |   14 +-
 lisp/progmodes/ps-mode.el                          |    2 +-
 lisp/progmodes/python.el                           |   36 +-
 lisp/progmodes/ruby-mode.el                        |    8 +-
 lisp/progmodes/sh-script.el                        |    2 +-
 lisp/progmodes/sql.el                              |    4 +-
 lisp/progmodes/tcl.el                              |    2 +-
 lisp/progmodes/verilog-mode.el                     |  139 ++-
 lisp/progmodes/vhdl-mode.el                        |   69 +-
 lisp/progmodes/xref.el                             |  116 +-
 lisp/ps-def.el                                     |    2 +-
 lisp/ps-print.el                                   |   14 +-
 lisp/ps-samp.el                                    |    2 +-
 lisp/register.el                                   |    2 +-
 lisp/registry.el                                   |    4 +-
 lisp/repeat.el                                     |   23 +-
 lisp/replace.el                                    |   36 +-
 lisp/rfn-eshadow.el                                |    2 +-
 lisp/rtree.el                                      |    2 +-
 lisp/saveplace.el                                  |    2 +-
 lisp/server.el                                     |    2 +-
 lisp/ses.el                                        |   41 +-
 lisp/simple.el                                     |   12 +-
 lisp/so-long.el                                    |   16 +-
 lisp/sort.el                                       |   10 +-
 lisp/strokes.el                                    |   22 +-
 lisp/subr.el                                       |   28 +-
 lisp/svg.el                                        |    2 +-
 lisp/t-mouse.el                                    |    2 +-
 lisp/tab-bar.el                                    |  374 +++---
 lisp/tab-line.el                                   |   63 +-
 lisp/tar-mode.el                                   |    8 +-
 lisp/tempo.el                                      |   32 +-
 lisp/term.el                                       |    4 +-
 lisp/term/ns-win.el                                |    4 +-
 lisp/term/sun.el                                   |    4 +-
 lisp/term/x-win.el                                 |    2 +-
 lisp/term/xterm.el                                 |    7 +-
 lisp/textmodes/artist.el                           |    4 +-
 lisp/textmodes/bibtex.el                           |    4 +-
 lisp/textmodes/conf-mode.el                        |    2 +-
 lisp/textmodes/css-mode.el                         |    4 +-
 lisp/textmodes/enriched.el                         |    3 +-
 lisp/textmodes/fill.el                             |    2 +-
 lisp/textmodes/flyspell.el                         |   10 +-
 lisp/textmodes/ispell.el                           |   11 +-
 lisp/textmodes/page-ext.el                         |    2 +-
 lisp/textmodes/picture.el                          |   10 +-
 lisp/textmodes/refbib.el                           |    2 +-
 lisp/textmodes/reftex-cite.el                      |    8 +-
 lisp/textmodes/reftex-dcr.el                       |    2 +-
 lisp/textmodes/reftex-index.el                     |   12 +-
 lisp/textmodes/reftex-ref.el                       |    2 +-
 lisp/textmodes/reftex-toc.el                       |    2 +-
 lisp/textmodes/reftex-vars.el                      |   16 +-
 lisp/textmodes/reftex.el                           |    5 +-
 lisp/textmodes/rst.el                              |    8 +-
 lisp/textmodes/sgml-mode.el                        |   14 +-
 lisp/textmodes/table.el                            |   27 +-
 lisp/textmodes/tex-mode.el                         |   92 +-
 lisp/textmodes/texinfmt.el                         |   10 +-
 lisp/textmodes/texinfo.el                          |   16 +-
 lisp/textmodes/texnfo-upd.el                       |    4 +-
 lisp/thingatpt.el                                  |   11 +-
 lisp/time.el                                       |    4 +-
 lisp/transient.el                                  |   16 +-
 lisp/url/url-http.el                               |    4 +-
 lisp/url/url-imap.el                               |    4 +-
 lisp/url/url-util.el                               |    2 +-
 lisp/url/url-vars.el                               |    3 +-
 lisp/vc/compare-w.el                               |    2 +-
 lisp/vc/diff-mode.el                               |    2 +-
 lisp/vc/ediff-diff.el                              |    7 +-
 lisp/vc/ediff-help.el                              |    1 -
 lisp/vc/ediff-init.el                              |   21 +-
 lisp/vc/ediff-merg.el                              |    5 +-
 lisp/vc/ediff-mult.el                              |   17 +-
 lisp/vc/ediff-util.el                              |   46 +-
 lisp/vc/ediff-vers.el                              |    4 +-
 lisp/vc/ediff.el                                   |    2 +-
 lisp/vc/emerge.el                                  |    4 +-
 lisp/vc/log-edit.el                                |    4 +-
 lisp/vc/log-view.el                                |    2 +-
 lisp/vc/pcvs.el                                    |    2 +-
 lisp/vc/vc-annotate.el                             |    2 +-
 lisp/vc/vc-bzr.el                                  |    2 +-
 lisp/vc/vc-cvs.el                                  |    2 +-
 lisp/vc/vc-dav.el                                  |   11 +-
 lisp/vc/vc-dir.el                                  |   22 +-
 lisp/vc/vc-dispatcher.el                           |    9 +-
 lisp/vc/vc-git.el                                  |    2 +-
 lisp/vc/vc-hg.el                                   |   14 +-
 lisp/vc/vc-hooks.el                                |    4 +-
 lisp/vc/vc-rcs.el                                  |   16 +-
 lisp/vc/vc-sccs.el                                 |    6 +-
 lisp/vc/vc-src.el                                  |   11 +-
 lisp/vc/vc-svn.el                                  |    2 +-
 lisp/vc/vc.el                                      |   36 +-
 lisp/vt-control.el                                 |    2 +-
 lisp/wdired.el                                     |    2 +-
 lisp/whitespace.el                                 |    2 +-
 lisp/widget.el                                     |    4 +-
 lisp/windmove.el                                   |   16 +-
 lisp/window.el                                     |   54 +-
 lisp/winner.el                                     |    3 +-
 lisp/x-dnd.el                                      |    2 +-
 lisp/xdg.el                                        |    4 +-
 lisp/xml.el                                        |    2 +-
 lisp/xt-mouse.el                                   |    8 +-
 src/comp.c                                         |   37 +-
 src/dispextern.h                                   |    2 +-
 src/fns.c                                          |    6 +-
 src/frame.h                                        |    4 +-
 src/minibuf.c                                      |    4 +
 src/nsmenu.m                                       |    2 +-
 src/nsterm.m                                       |   11 +-
 src/w32term.c                                      |   24 +-
 src/xdisp.c                                        |   15 +-
 src/xfaces.c                                       |    3 +-
 src/xterm.c                                        |   24 +-
 test/Makefile.in                                   |    2 +-
 test/lisp/abbrev-tests.el                          |   22 +-
 test/lisp/arc-mode-tests.el                        |    2 +-
 test/lisp/auth-source-pass-tests.el                |    8 +-
 test/lisp/auth-source-tests.el                     |    2 +-
 test/lisp/emacs-lisp/checkdoc-tests.el             |   24 +
 test/lisp/emacs-lisp/seq-tests.el                  |   27 +
 test/lisp/erc/erc-tests.el                         |  126 +-
 test/lisp/international/ucs-normalize-tests.el     |  141 ++-
 test/lisp/net/tramp-tests.el                       |   34 +-
 .../lisp/progmodes/cperl-mode-resources/grammar.pl |   14 +
 test/lisp/progmodes/cperl-mode-tests.el            |  301 ++++-
 test/lisp/progmodes/elisp-mode-tests.el            |  136 +-
 .../flymake-resources/another-problematic-file.c   |    5 +
 .../progmodes/flymake-resources/some-problems.h    |    2 +
 test/lisp/progmodes/flymake-tests.el               |   12 +-
 test/lisp/progmodes/xref-tests.el                  |   26 +-
 test/manual/BidiCharacterTest.txt                  |   32 +-
 test/manual/cedet/semantic-tests.el                |    4 +-
 554 files changed, 9156 insertions(+), 4133 deletions(-)

diff --git a/admin/notes/unicode b/admin/notes/unicode
index bcede9c6ed..9dc6f3bdca 100644
--- a/admin/notes/unicode
+++ b/admin/notes/unicode
@@ -12,17 +12,18 @@ Emacs uses the following files from the Unicode Character 
Database
   . UnicodeData.txt
   . Blocks.txt
   . BidiBrackets.txt
-  . BidiCharacterTest.txt
   . BidiMirroring.txt
   . IVD_Sequences.txt
   . NormalizationTest.txt
   . SpecialCasing.txt
+  . emoji-data.txt
+  . BidiCharacterTest.txt
 
-First, the first 7 files need to be copied into admin/unidata/, and
+First, the first 8 files need to be copied into admin/unidata/, and
 the file https://www.unicode.org/copyright.html should be copied over
-copyright.html in admin/unidata (that file might need trailing
-whitespace removed before it can be committed to the Emacs
-repository).
+copyright.html in admin/unidata (that file and emoji-data.txt might
+need trailing whitespace removed before they can be committed to the
+Emacs repository).
 
 Then Emacs should be rebuilt for them to take effect.  Rebuilding
 Emacs updates several derived files elsewhere in the Emacs source
@@ -81,7 +82,38 @@ regarding failing lines.
 
 The file BidiCharacterTest.txt should be copied to the test suite, and
 if its format has changed, the file biditest.el there should be
-modified to follow suit.
+modified to follow suit.  If there's trailing whitespace in
+BidiCharacterTest.txt, it should be removed before committing the new
+version.
+
+Visit "emoji-data.txt" with the rebuilt Emacs, and check that an
+appropriate font is being used for the emoji (by default Emacs uses
+"Noto Color Emoji").  Running the following command in that buffer
+will give you an idea of which codepoints are not supported by
+whichever font Emacs is using.
+
+(defun check-emoji-coverage (font-name-regexp)
+"Display a buffer containing emoji codepoints for which FONT-NAME is not used.
+This must be run from a buffer in the format of emoji-data.txt.
+FONT-NAME-REGEXP is checked using `string-match'."
+(interactive "MFont Name: ")
+(save-excursion
+(goto-char (point-min))
+(let (res char name ifont)
+  (while (re-search-forward "; Emoji [^(]+(\\(.\\)[).\uFE0F]" nil t)
+    (setq char (aref (match-string 1) 0))
+    (setq ifont (car (internal-char-font nil char)))
+    (when ifont
+      (setq name (font-xlfd-name ifont)))
+    (if (or (not ifont) (not (string-match font-name-regexp name)))
+        (setq res (concat (string char) res))))
+  (when res
+    (with-output-to-temp-buffer "*Check-Emoji-Coverage*"
+      (princ (format "Font not matching '%s' was used for the following 
characters:\n%s"
+                     font-name-regexp (reverse res))))))))
+
+Finally, etc/NEWS should be updated to announce the support for the
+new Unicode version.
 
 Problems, fixmes and other unicode-related issues
 -------------------------------------------------------------
diff --git a/admin/unidata/BidiBrackets.txt b/admin/unidata/BidiBrackets.txt
index a95e5ca5ca..89698f588a 100644
--- a/admin/unidata/BidiBrackets.txt
+++ b/admin/unidata/BidiBrackets.txt
@@ -1,11 +1,11 @@
-# BidiBrackets-13.0.0.txt
-# Date: 2019-09-09, 19:31:00 GMT [AG, LI, KW]
-# © 2019 Unicode®, Inc.
+# BidiBrackets-14.0.0.txt
+# Date: 2021-06-30, 23:59:00 GMT [AG, LI, KW]
+# © 2021 Unicode®, Inc.
 # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in 
the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For terms of use, see https://www.unicode.org/terms_of_use.html
 #
 # Unicode Character Database
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see https://www.unicode.org/reports/tr44/
 #
 # Bidi_Paired_Bracket and Bidi_Paired_Bracket_Type Properties
 #
@@ -56,7 +56,7 @@
 # of each line.
 #
 # For information on bidirectional paired brackets, see UAX #9: Unicode
-# Bidirectional Algorithm, at http://www.unicode.org/unicode/reports/tr9/
+# Bidirectional Algorithm, at https://www.unicode.org/reports/tr9/
 #
 # This file was originally created by Andrew Glass and Laurentiu Iancu
 # for Unicode 6.3.
@@ -147,6 +147,14 @@
 2E27; 2E26; c # RIGHT SIDEWAYS U BRACKET
 2E28; 2E29; o # LEFT DOUBLE PARENTHESIS
 2E29; 2E28; c # RIGHT DOUBLE PARENTHESIS
+2E55; 2E56; o # LEFT SQUARE BRACKET WITH STROKE
+2E56; 2E55; c # RIGHT SQUARE BRACKET WITH STROKE
+2E57; 2E58; o # LEFT SQUARE BRACKET WITH DOUBLE STROKE
+2E58; 2E57; c # RIGHT SQUARE BRACKET WITH DOUBLE STROKE
+2E59; 2E5A; o # TOP HALF LEFT PARENTHESIS
+2E5A; 2E59; c # TOP HALF RIGHT PARENTHESIS
+2E5B; 2E5C; o # BOTTOM HALF LEFT PARENTHESIS
+2E5C; 2E5B; c # BOTTOM HALF RIGHT PARENTHESIS
 3008; 3009; o # LEFT ANGLE BRACKET
 3009; 3008; c # RIGHT ANGLE BRACKET
 300A; 300B; o # LEFT DOUBLE ANGLE BRACKET
diff --git a/admin/unidata/BidiMirroring.txt b/admin/unidata/BidiMirroring.txt
index 34e42ae8dc..bd8e2c5d00 100644
--- a/admin/unidata/BidiMirroring.txt
+++ b/admin/unidata/BidiMirroring.txt
@@ -1,10 +1,10 @@
-# BidiMirroring-13.0.0.txt
-# Date: 2019-09-09, 19:34:00 GMT [KW, LI, RP]
-# © 2019 Unicode®, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
+# BidiMirroring-14.0.0.txt
+# Date: 2021-08-08, 22:55:00 GMT [KW, RP]
+# © 2021 Unicode®, Inc.
+# For terms of use, see https://www.unicode.org/terms_of_use.html
 #
 # Unicode Character Database
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see https://www.unicode.org/reports/tr44/
 #
 # Bidi_Mirroring_Glyph Property
 #
@@ -15,7 +15,7 @@
 # value, for which there is another Unicode character that typically has a 
glyph
 # that is the mirror image of the original character's glyph.
 #
-# The repertoire covered by the file is Unicode 13.0.0.
+# The repertoire covered by the file is Unicode 14.0.0.
 #
 # The file contains a list of lines with mappings from one code point
 # to another one for character-based mirroring.
@@ -40,7 +40,7 @@
 # for character-based mirroring.
 #
 # For information on bidi mirroring, see UAX #9: Unicode Bidirectional 
Algorithm,
-# at http://www.unicode.org/unicode/reports/tr9/
+# at https://www.unicode.org/reports/tr9/
 #
 # This file was originally created by Markus Scherer.
 # Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler,
@@ -96,10 +96,10 @@
 208D; 208E # SUBSCRIPT LEFT PARENTHESIS
 208E; 208D # SUBSCRIPT RIGHT PARENTHESIS
 2208; 220B # ELEMENT OF
-2209; 220C # NOT AN ELEMENT OF
+2209; 220C # [BEST FIT] NOT AN ELEMENT OF
 220A; 220D # SMALL ELEMENT OF
 220B; 2208 # CONTAINS AS MEMBER
-220C; 2209 # DOES NOT CONTAIN AS MEMBER
+220C; 2209 # [BEST FIT] DOES NOT CONTAIN AS MEMBER
 220D; 220A # SMALL CONTAINS AS MEMBER
 2215; 29F5 # DIVISION SLASH
 221F; 2BFE # RIGHT ANGLE
@@ -453,6 +453,14 @@
 2E27; 2E26 # RIGHT SIDEWAYS U BRACKET
 2E28; 2E29 # LEFT DOUBLE PARENTHESIS
 2E29; 2E28 # RIGHT DOUBLE PARENTHESIS
+2E55; 2E56 # LEFT SQUARE BRACKET WITH STROKE
+2E56; 2E55 # RIGHT SQUARE BRACKET WITH STROKE
+2E57; 2E58 # LEFT SQUARE BRACKET WITH DOUBLE STROKE
+2E58; 2E57 # RIGHT SQUARE BRACKET WITH DOUBLE STROKE
+2E59; 2E5A # TOP HALF LEFT PARENTHESIS
+2E5A; 2E59 # TOP HALF RIGHT PARENTHESIS
+2E5B; 2E5C # BOTTOM HALF LEFT PARENTHESIS
+2E5C; 2E5B # BOTTOM HALF RIGHT PARENTHESIS
 3008; 3009 # LEFT ANGLE BRACKET
 3009; 3008 # RIGHT ANGLE BRACKET
 300A; 300B # LEFT DOUBLE ANGLE BRACKET
diff --git a/admin/unidata/Blocks.txt b/admin/unidata/Blocks.txt
index 56877db10f..cc5d61988b 100644
--- a/admin/unidata/Blocks.txt
+++ b/admin/unidata/Blocks.txt
@@ -1,6 +1,6 @@
-# Blocks-13.0.0.txt
-# Date: 2019-07-10, 19:06:00 GMT [KW]
-# © 2019 Unicode®, Inc.
+# Blocks-14.0.0.txt
+# Date: 2021-01-22, 23:29:00 GMT [KW]
+# © 2021 Unicode®, Inc.
 # For terms of use, see http://www.unicode.org/terms_of_use.html
 #
 # Unicode Character Database
@@ -52,6 +52,7 @@
 0800..083F; Samaritan
 0840..085F; Mandaic
 0860..086F; Syriac Supplement
+0870..089F; Arabic Extended-B
 08A0..08FF; Arabic Extended-A
 0900..097F; Devanagari
 0980..09FF; Bengali
@@ -215,7 +216,9 @@ FFF0..FFFF; Specials
 104B0..104FF; Osage
 10500..1052F; Elbasan
 10530..1056F; Caucasian Albanian
+10570..105BF; Vithkuqi
 10600..1077F; Linear A
+10780..107BF; Latin Extended-F
 10800..1083F; Cypriot Syllabary
 10840..1085F; Imperial Aramaic
 10860..1087F; Palmyrene
@@ -240,6 +243,7 @@ FFF0..FFFF; Specials
 10E80..10EBF; Yezidi
 10F00..10F2F; Old Sogdian
 10F30..10F6F; Sogdian
+10F70..10FAF; Old Uyghur
 10FB0..10FDF; Chorasmian
 10FE0..10FFF; Elymaic
 11000..1107F; Brahmi
@@ -259,13 +263,14 @@ FFF0..FFFF; Specials
 11600..1165F; Modi
 11660..1167F; Mongolian Supplement
 11680..116CF; Takri
-11700..1173F; Ahom
+11700..1174F; Ahom
 11800..1184F; Dogra
 118A0..118FF; Warang Citi
 11900..1195F; Dives Akuru
 119A0..119FF; Nandinagari
 11A00..11A4F; Zanabazar Square
 11A50..11AAF; Soyombo
+11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A
 11AC0..11AFF; Pau Cin Hau
 11C00..11C6F; Bhaiksuki
 11C70..11CBF; Marchen
@@ -277,11 +282,13 @@ FFF0..FFFF; Specials
 12000..123FF; Cuneiform
 12400..1247F; Cuneiform Numbers and Punctuation
 12480..1254F; Early Dynastic Cuneiform
+12F90..12FFF; Cypro-Minoan
 13000..1342F; Egyptian Hieroglyphs
 13430..1343F; Egyptian Hieroglyph Format Controls
 14400..1467F; Anatolian Hieroglyphs
 16800..16A3F; Bamum Supplement
 16A40..16A6F; Mro
+16A70..16ACF; Tangsa
 16AD0..16AFF; Bassa Vah
 16B00..16B8F; Pahawh Hmong
 16E40..16E9F; Medefaidrin
@@ -290,13 +297,15 @@ FFF0..FFFF; Specials
 17000..187FF; Tangut
 18800..18AFF; Tangut Components
 18B00..18CFF; Khitan Small Script
-18D00..18D8F; Tangut Supplement
+18D00..18D7F; Tangut Supplement
+1AFF0..1AFFF; Kana Extended-B
 1B000..1B0FF; Kana Supplement
 1B100..1B12F; Kana Extended-A
 1B130..1B16F; Small Kana Extension
 1B170..1B2FF; Nushu
 1BC00..1BC9F; Duployan
 1BCA0..1BCAF; Shorthand Format Controls
+1CF00..1CFCF; Znamenny Musical Notation
 1D000..1D0FF; Byzantine Musical Symbols
 1D100..1D1FF; Musical Symbols
 1D200..1D24F; Ancient Greek Musical Notation
@@ -305,9 +314,12 @@ FFF0..FFFF; Specials
 1D360..1D37F; Counting Rod Numerals
 1D400..1D7FF; Mathematical Alphanumeric Symbols
 1D800..1DAAF; Sutton SignWriting
+1DF00..1DFFF; Latin Extended-G
 1E000..1E02F; Glagolitic Supplement
 1E100..1E14F; Nyiakeng Puachue Hmong
+1E290..1E2BF; Toto
 1E2C0..1E2FF; Wancho
+1E7E0..1E7FF; Ethiopic Extended-B
 1E800..1E8DF; Mende Kikakui
 1E900..1E95F; Adlam
 1EC70..1ECBF; Indic Siyaq Numbers
diff --git a/admin/unidata/IVD_Sequences.txt b/admin/unidata/IVD_Sequences.txt
index a1a38a2e92..886d8519ab 100644
--- a/admin/unidata/IVD_Sequences.txt
+++ b/admin/unidata/IVD_Sequences.txt
@@ -2,6 +2,9 @@
 #
 # History:
 #
+# 2020-11-06 Registration of additional sequences in the MSARG
+#            collection.
+#
 # 2017-12-12 Registration of additional sequences in the Adobe-Japan1
 #            collection. Combined registration of the KRName collection
 #            and of sequences in that collection. Registration of
@@ -27,10 +30,10 @@
 #
 # This file is part of the Unicode Ideographic Variation Database (IVD).
 # For more details on the IVD, see UTS #37:
-# http://www.unicode.org/reports/tr37/
+# https://www.unicode.org/reports/tr37/
 #
-# Copyright 2006-2017 Unicode, Inc.
-# For terms of use, see: http://www.unicode.org/terms_of_use.html
+# Copyright 2006-2020 Unicode, Inc.
+# For terms of use, see: https://www.unicode.org/copyright.html#8
 #
 3402 E0100; Adobe-Japan1; CID+13698
 3402 E0101; Adobe-Japan1; CID+13697
@@ -864,6 +867,8 @@
 4054 E0100; Hanyo-Denshi; IA3507
 4054 E0101; Hanyo-Denshi; TK01062970
 4058 E0100; Adobe-Japan1; CID+18198
+4058 E0101; MSARG; MD_4058
+4058 E0102; MSARG; ME_4058_001
 4071 E0100; Hanyo-Denshi; IA0509
 4071 E0100; Moji_Joho; MJ002897
 4071 E0101; Hanyo-Denshi; JTB661
@@ -1094,6 +1099,8 @@
 4359 E0101; Moji_Joho; MJ003650
 4395 E0100; Hanyo-Denshi; IA4278
 4395 E0101; Hanyo-Denshi; TK01074010
+4397 E0100; MSARG; MA_9967
+4397 E0101; MSARG; ME_4397_001
 43A8 E0100; Hanyo-Denshi; IA4294
 43A8 E0101; Hanyo-Denshi; TK01074340
 43A9 E0100; Hanyo-Denshi; IA0588
@@ -1407,6 +1414,8 @@
 460D E0101; Moji_Joho; MJ004388
 460F E0100; Adobe-Japan1; CID+18634
 4610 E0100; Adobe-Japan1; CID+19136
+4615 E0100; MSARG; MA_8FEB
+4615 E0101; MSARG; ME_4615_001
 462F E0100; Hanyo-Denshi; IA4925
 462F E0101; Hanyo-Denshi; TK01083800
 4635 E0100; Hanyo-Denshi; IA4929
@@ -1560,6 +1569,8 @@
 4921 E0101; Hanyo-Denshi; TK01092060
 4938 E0100; Hanyo-Denshi; IA5637
 4938 E0101; Hanyo-Denshi; TK01093220
+493E E0100; MSARG; MA_97E1
+493E E0101; MSARG; ME_493E_001
 493F E0100; Hanyo-Denshi; IA5643
 493F E0100; Moji_Joho; MJ005179
 493F E0101; Hanyo-Denshi; KS462830
@@ -1608,6 +1619,8 @@
 4A28 E0101; Hanyo-Denshi; IB1033
 4A28 E0101; Moji_Joho; MJ005391
 4A29 E0100; Adobe-Japan1; CID+18910
+4A29 E0101; MSARG; MD_4A29
+4A29 E0102; MSARG; ME_4A29_001
 4A3C E0100; Hanyo-Denshi; IB1041
 4A3C E0100; Moji_Joho; MJ005411
 4A3C E0101; Hanyo-Denshi; JTBEBD
@@ -2016,6 +2029,8 @@
 4E75 E0101; Moji_Joho; MJ006419
 4E75 E0102; Hanyo-Denshi; JTAD26
 4E75 E0102; Moji_Joho; MJ006420
+4E78 E0100; MSARG; MA_9AFB
+4E78 E0101; MSARG; ME_4E78_001
 4E79 E0100; Adobe-Japan1; CID+19143
 4E7E E0100; Adobe-Japan1; CID+1505
 4E7F E0100; Adobe-Japan1; CID+14306
@@ -2633,6 +2648,8 @@
 5029 E0101; Moji_Joho; MJ006862
 5029 E0102; Hanyo-Denshi; FT2068
 5029 E0102; Moji_Joho; MJ006863
+5029 E0103; MSARG; MB_ADC5
+5029 E0104; MSARG; ME_5029_001
 502A E0100; Adobe-Japan1; CID+4157
 502B E0100; Adobe-Japan1; CID+3993
 502B E0101; Hanyo-Denshi; JA4649
@@ -3511,6 +3528,8 @@
 51CD E0100; Adobe-Japan1; CID+3162
 51CF E0100; Adobe-Japan1; CID+19177
 51D1 E0100; Adobe-Japan1; CID+19178
+51D1 E0101; MSARG; MA_FAA4
+51D1 E0102; MSARG; ME_51D1_001
 51D2 E0100; Adobe-Japan1; CID+21186
 51D3 E0100; Adobe-Japan1; CID+19179
 51D4 E0100; Adobe-Japan1; CID+19180
@@ -4443,6 +4462,8 @@
 53D6 E0100; Adobe-Japan1; CID+2324
 53D7 E0100; Adobe-Japan1; CID+2337
 53D7 E0101; Adobe-Japan1; CID+13813
+53D8 E0100; MSARG; MA_895A
+53D8 E0101; MSARG; ME_53D8_001
 53D9 E0100; Adobe-Japan1; CID+2432
 53DA E0100; Adobe-Japan1; CID+14372
 53DB E0100; Adobe-Japan1; CID+3412
@@ -4943,6 +4964,8 @@
 555A E0102; Hanyo-Denshi; KS044550
 555A E0102; Moji_Joho; MJ008401
 555A E0103; Moji_Joho; MJ057180
+555A E0104; MSARG; MD_555A
+555A E0105; MSARG; ME_555A_001
 555B E0100; Adobe-Japan1; CID+21282
 555C E0100; Adobe-Japan1; CID+4392
 555D E0100; Adobe-Japan1; CID+4398
@@ -4951,6 +4974,8 @@
 555D E0102; Hanyo-Denshi; JTAEDA
 555D E0102; Moji_Joho; MJ008405
 555E E0100; Adobe-Japan1; CID+7633
+555F E0100; MSARG; MB_B1D2
+555F E0101; MSARG; ME_555F_001
 5560 E0100; Adobe-Japan1; CID+14392
 5561 E0100; Adobe-Japan1; CID+20308
 5561 E0101; Adobe-Japan1; CID+14393
@@ -4961,6 +4986,8 @@
 5568 E0100; Moji_Joho; MJ008415
 5568 E0101; Hanyo-Denshi; IB1035
 5568 E0101; Moji_Joho; MJ008416
+556B E0100; MSARG; MA_94DC
+556B E0101; MSARG; ME_556B_001
 557B E0100; Adobe-Japan1; CID+4404
 557C E0100; Adobe-Japan1; CID+4409
 557C E0101; Hanyo-Denshi; JA5138
@@ -5428,6 +5455,8 @@
 56A0 E0102; Hanyo-Denshi; JTAF22
 56A0 E0102; Moji_Joho; MJ008750
 56A2 E0100; Adobe-Japan1; CID+3311
+56A4 E0100; MSARG; MA_97A3
+56A4 E0101; MSARG; ME_56A4_001
 56A5 E0100; Adobe-Japan1; CID+4446
 56A5 E0101; Adobe-Japan1; CID+7822
 56A5 E0102; Hanyo-Denshi; JA5175
@@ -6654,6 +6683,8 @@
 59F6 E0100; Adobe-Japan1; CID+1132
 59F7 E0100; Adobe-Japan1; CID+21401
 59F8 E0100; Adobe-Japan1; CID+19312
+59F8 E0101; MSARG; MA_9D55
+59F8 E0102; MSARG; ME_59F8_001
 59FB E0100; Adobe-Japan1; CID+1213
 59FF E0100; Adobe-Japan1; CID+2207
 59FF E0101; Adobe-Japan1; CID+13792
@@ -6870,6 +6901,8 @@
 5ACC E0103; Hanyo-Denshi; FT1791S
 5ACC E0103; Moji_Joho; MJ009909
 5ACF E0100; Adobe-Japan1; CID+21424
+5ACF E0101; MSARG; MA_92F4
+5ACF E0102; MSARG; ME_5ACF_001
 5AD0 E0100; Adobe-Japan1; CID+4603
 5AD6 E0100; Adobe-Japan1; CID+4596
 5AD7 E0100; Adobe-Japan1; CID+4593
@@ -7540,6 +7573,8 @@
 5C8D E0100; Moji_Joho; MJ010418
 5C8D E0101; Hanyo-Denshi; JTB06C
 5C8D E0101; Moji_Joho; MJ010419
+5C8D E0102; MSARG; MB_CAC0
+5C8D E0103; MSARG; ME_5C8D_001
 5C8F E0100; Adobe-Japan1; CID+16840
 5C90 E0100; Adobe-Japan1; CID+1584
 5C91 E0100; Adobe-Japan1; CID+4663
@@ -7569,6 +7604,8 @@
 5CAB E0100; Adobe-Japan1; CID+4666
 5CAC E0100; Adobe-Japan1; CID+3764
 5CAD E0100; Adobe-Japan1; CID+17557
+5CAD E0101; MSARG; MB_CC64
+5CAD E0102; MSARG; ME_5CAD_001
 5CB1 E0100; Adobe-Japan1; CID+2866
 5CB2 E0100; Adobe-Japan1; CID+21464
 5CB3 E0100; Adobe-Japan1; CID+1463
@@ -10095,6 +10132,8 @@
 62D0 E0103; Moji_Joho; MJ012273
 62D0 E0104; Hanyo-Denshi; IB1917
 62D0 E0104; Moji_Joho; MJ012274
+62D0 E0105; MSARG; MB_A9E4
+62D0 E0106; MSARG; ME_62D0_001
 62D1 E0100; Adobe-Japan1; CID+4961
 62D2 E0100; Adobe-Japan1; CID+1675
 62D2 E0101; Adobe-Japan1; CID+13715
@@ -12633,6 +12672,8 @@
 690D E0104; Hanyo-Denshi; KS170180
 690D E0104; Moji_Joho; MJ057753
 690D E0105; Hanyo-Denshi; TK01044570
+690D E0106; MSARG; MB_B4D3
+690D E0107; MSARG; ME_690D_001
 690E E0100; Adobe-Japan1; CID+3043
 690F E0100; Adobe-Japan1; CID+5206
 6910 E0100; Adobe-Japan1; CID+21777
@@ -13038,6 +13079,8 @@
 6A0B E0102; Moji_Joho; MJ014416
 6A0B E0103; Hanyo-Denshi; FT1907
 6A0B E0103; Moji_Joho; MJ014417
+6A0B E0104; MSARG; MA_FD42
+6A0B E0105; MSARG; ME_6A0B_001
 6A0C E0100; Adobe-Japan1; CID+5295
 6A0F E0100; Adobe-Japan1; CID+14658
 6A11 E0100; Adobe-Japan1; CID+17851
@@ -13898,6 +13941,8 @@
 6C67 E0102; Hanyo-Denshi; IB2201
 6C67 E0102; Moji_Joho; MJ015090
 6C67 E0103; Hanyo-Denshi; TK01049100
+6C67 E0104; MSARG; MB_CB4C
+6C67 E0105; MSARG; ME_6C67_001
 6C68 E0100; Adobe-Japan1; CID+5392
 6C6A E0100; Adobe-Japan1; CID+5385
 6C6A E0101; Hanyo-Denshi; JA6174
@@ -14318,6 +14363,8 @@
 6DCD E0100; Hanyo-Denshi; IP6DCD
 6DCD E0101; Hanyo-Denshi; TK01050160
 6DCE E0100; Adobe-Japan1; CID+17952
+6DCE E0101; MSARG; MD_6DCE
+6DCE E0102; MSARG; ME_6DCE_001
 6DCF E0100; Adobe-Japan1; CID+8520
 6DCF E0101; Hanyo-Denshi; JB3957
 6DCF E0101; Moji_Joho; MJ015459
@@ -15270,6 +15317,8 @@
 701E E0106; Hanyo-Denshi; IB2283
 701E E0106; Moji_Joho; MJ016159
 701E E0107; Hanyo-Denshi; TK01053770
+701E E0108; MSARG; MA_96EE
+701E E0109; MSARG; ME_701E_001
 701F E0100; Adobe-Japan1; CID+5546
 701F E0101; Hanyo-Denshi; JA6347
 701F E0101; Moji_Joho; MJ016166
@@ -15692,6 +15741,8 @@
 71A8 E0100; Adobe-Japan1; CID+5580
 71AC E0100; Adobe-Japan1; CID+5581
 71AE E0100; Adobe-Japan1; CID+18037
+71AE E0101; MSARG; MD_71AE
+71AE E0102; MSARG; ME_71AE_001
 71AF E0100; Adobe-Japan1; CID+18038
 71B0 E0100; Adobe-Japan1; CID+21938
 71B1 E0100; Adobe-Japan1; CID+3300
@@ -15704,6 +15755,8 @@
 71B3 E0103; Moji_Joho; MJ016595
 71B9 E0100; Adobe-Japan1; CID+5583
 71BA E0100; Adobe-Japan1; CID+16965
+71BB E0100; MSARG; MD_71BB
+71BB E0101; MSARG; ME_71BB_001
 71BE E0100; Adobe-Japan1; CID+5584
 71BE E0101; Hanyo-Denshi; JA6385
 71BE E0101; Moji_Joho; MJ016605
@@ -15827,6 +15880,8 @@
 7210 E0100; Adobe-Japan1; CID+5597
 7213 E0100; Adobe-Japan1; CID+21946
 7215 E0100; Adobe-Japan1; CID+16967
+7215 E0101; MSARG; MA_FE41
+7215 E0102; MSARG; ME_7215_001
 7217 E0100; Adobe-Japan1; CID+19521
 7217 E0101; Hanyo-Denshi; JB4235
 7217 E0101; Moji_Joho; MJ016708
@@ -17688,6 +17743,8 @@
 771F E0105; Moji_Joho; MJ018174
 771F E0106; Hanyo-Denshi; TK01062480
 771F E0107; Moji_Joho; MJ018175
+771F E0108; MSARG; MB_AF75
+771F E0109; MSARG; ME_771F_001
 7720 E0100; Adobe-Japan1; CID+3774
 7722 E0100; Adobe-Japan1; CID+19578
 7724 E0100; Adobe-Japan1; CID+5815
@@ -18016,6 +18073,8 @@
 784F E0101; Moji_Joho; MJ018495
 784F E0102; Hanyo-Denshi; JTB674
 784F E0102; Moji_Joho; MJ018496
+784F E0103; MSARG; MD_784F
+784F E0104; MSARG; ME_784F_001
 7851 E0100; Adobe-Japan1; CID+15420
 7852 E0100; Adobe-Japan1; CID+22078
 785C E0100; Adobe-Japan1; CID+19603
@@ -19233,6 +19292,8 @@
 7AAE E0103; Moji_Joho; MJ019272
 7AAF E0100; Adobe-Japan1; CID+3900
 7AB0 E0100; Adobe-Japan1; CID+5938
+7AB0 E0101; MSARG; MA_8E50
+7AB0 E0102; MSARG; ME_7AB0_001
 7AB1 E0100; Hanyo-Denshi; IP7AB1
 7AB1 E0101; Hanyo-Denshi; TK01068710
 7AB3 E0100; Adobe-Japan1; CID+14931
@@ -19444,6 +19505,8 @@
 7B51 E0103; Moji_Joho; MJ019458
 7B51 E0104; Hanyo-Denshi; JTB7A5
 7B51 E0104; Moji_Joho; MJ019456
+7B51 E0105; MSARG; MB_B5AE
+7B51 E0106; MSARG; ME_7B51_001
 7B52 E0100; Adobe-Japan1; CID+3189
 7B53 E0100; Adobe-Japan1; CID+14173
 7B53 E0101; Hanyo-Denshi; IP7B53
@@ -20362,6 +20425,8 @@
 7D86 E0103; Moji_Joho; MJ020134
 7D88 E0100; Adobe-Japan1; CID+18353
 7D89 E0100; Adobe-Japan1; CID+6084
+7D89 E0101; MSARG; MA_8EA7
+7D89 E0102; MSARG; ME_7D89_001
 7D8B E0100; Adobe-Japan1; CID+14980
 7D8C E0100; Adobe-Japan1; CID+14981
 7D8D E0100; Adobe-Japan1; CID+19665
@@ -20427,6 +20492,8 @@
 7DAA E0102; Hanyo-Denshi; IB0846
 7DAA E0102; Moji_Joho; MJ020184
 7DAB E0100; Adobe-Japan1; CID+6095
+7DAB E0101; MSARG; MA_8EA8
+7DAB E0102; MSARG; ME_7DAB_001
 7DAC E0100; Adobe-Japan1; CID+2342
 7DAD E0100; Adobe-Japan1; CID+1185
 7DAD E0101; Hanyo-Denshi; JA1661
@@ -21226,6 +21293,8 @@
 7FEB E0103; Moji_Joho; MJ020716
 7FEB E0104; Moji_Joho; MJ020718
 7FEC E0100; Adobe-Japan1; CID+15007
+7FEC E0101; MSARG; MB_E6F8
+7FEC E0102; MSARG; ME_7FEC_001
 7FEE E0100; Adobe-Japan1; CID+15008
 7FEF E0100; Adobe-Japan1; CID+15009
 7FF0 E0100; Adobe-Japan1; CID+1545
@@ -21238,6 +21307,8 @@
 7FF0 E0104; Moji_Joho; MJ020725
 7FF0 E0105; Hanyo-Denshi; TK01074020
 7FF0 E0106; Hanyo-Denshi; TK01074040
+7FF1 E0100; MSARG; MB_BFAC
+7FF1 E0101; MSARG; ME_7FF1_001
 7FF2 E0100; Adobe-Japan1; CID+18402
 7FF3 E0100; Adobe-Japan1; CID+6199
 7FF3 E0101; Hanyo-Denshi; JA7042
@@ -21250,6 +21321,9 @@
 7FF9 E0102; Hanyo-Denshi; FT2443
 7FF9 E0102; Moji_Joho; MJ020737
 7FFA E0100; Adobe-Japan1; CID+15010
+7FFA E0101; MSARG; MA_8ECB
+7FFA E0102; MSARG; ME_7FFA_001
+7FFA E0103; MSARG; ME_7FFA_002
 7FFB E0100; Adobe-Japan1; CID+3723
 7FFB E0101; Adobe-Japan1; CID+14040
 7FFB E0102; Hanyo-Denshi; JA4361
@@ -23080,6 +23154,8 @@
 833A E0101; Moji_Joho; MJ021843
 833A E0102; Hanyo-Denshi; KS346690S
 833A E0102; Moji_Joho; MJ021844
+833A E0103; MSARG; MB_D072
+833A E0104; MSARG; ME_833A_001
 833C E0100; Adobe-Japan1; CID+18489
 833C E0101; Hanyo-Denshi; JB5581
 833C E0101; Moji_Joho; MJ021846
@@ -23543,6 +23619,8 @@
 83C1 E0104; Hanyo-Denshi; FT2479
 83C1 E0104; Moji_Joho; MJ022062
 83C1 E0105; Hanyo-Denshi; TK01078230
+83C1 E0106; MSARG; MB_B5D7
+83C1 E0107; MSARG; ME_83C1_001
 83C2 E0100; Hanyo-Denshi; KS350410
 83C2 E0101; Hanyo-Denshi; TK01078690
 83C5 E0100; Adobe-Japan1; CID+2625
@@ -24360,6 +24438,8 @@
 84A8 E0103; Hanyo-Denshi; IB0865
 84A8 E0103; Moji_Joho; MJ022481
 84A8 E0104; Hanyo-Denshi; TK01080090
+84A8 E0105; MSARG; MB_E3C8
+84A8 E0106; MSARG; ME_84A8_001
 84A9 E0100; Adobe-Japan1; CID+22350
 84A9 E0101; Hanyo-Denshi; JB5680
 84A9 E0101; Moji_Joho; MJ022484
@@ -24871,6 +24951,8 @@
 8534 E0101; Moji_Joho; MJ022738
 8534 E0102; Hanyo-Denshi; KS360300
 8534 E0102; Moji_Joho; MJ022739
+8534 E0103; MSARG; MA_8F77
+8534 E0104; MSARG; ME_8534_001
 8535 E0100; Adobe-Japan1; CID+2818
 8535 E0101; Hanyo-Denshi; JA3402
 8535 E0102; Hanyo-Denshi; TK01081050
@@ -26682,6 +26764,7 @@
 8846 E0106; Hanyo-Denshi; TK01083450
 8846 E0107; MSARG; MA_8FBC
 8846 E0108; MSARG; ME_8846_001
+8846 E0109; MSARG; ME_8846_002
 8848 E0100; Adobe-Japan1; CID+22465
 8849 E0100; Adobe-Japan1; CID+22466
 884A E0100; Adobe-Japan1; CID+18635
@@ -27969,6 +28052,8 @@
 8B66 E0101; Moji_Joho; MJ024795
 8B66 E0102; Hanyo-Denshi; KS408750S
 8B66 E0102; Moji_Joho; MJ024796
+8B67 E0100; MSARG; MB_F4D4
+8B67 E0101; MSARG; ME_8B67_001
 8B69 E0100; Adobe-Japan1; CID+17130
 8B69 E0101; Hanyo-Denshi; JC9220
 8B69 E0101; Moji_Joho; MJ024799
@@ -28664,6 +28749,8 @@
 8E26 E0100; Adobe-Japan1; CID+19850
 8E27 E0100; Adobe-Japan1; CID+18732
 8E2A E0100; Adobe-Japan1; CID+6824
+8E2D E0100; MSARG; MA_9E5A
+8E2D E0101; MSARG; ME_8E2D_001
 8E30 E0100; Adobe-Japan1; CID+6813
 8E30 E0101; Hanyo-Denshi; JA7692
 8E30 E0101; Moji_Joho; MJ025364
@@ -30340,6 +30427,8 @@
 90A8 E0103; Moji_Joho; MJ026250
 90A8 E0104; Hanyo-Denshi; TK01090660
 90A8 E0105; Hanyo-Denshi; TK01090690
+90A8 E0106; MSARG; MA_9068
+90A8 E0107; MSARG; ME_90A8_001
 90AA E0100; Adobe-Japan1; CID+2309
 90AA E0101; Adobe-Japan1; CID+13454
 90AA E0102; Adobe-Japan1; CID+13806
@@ -30615,6 +30704,8 @@
 9175 E0101; Moji_Joho; MJ026482
 9175 E0102; Hanyo-Denshi; JTBDA9
 9175 E0102; Moji_Joho; MJ026483
+9176 E0100; MSARG; MA_9E4A
+9176 E0101; MSARG; ME_9176_001
 9177 E0100; Adobe-Japan1; CID+2053
 9177 E0101; Adobe-Japan1; CID+13776
 9177 E0102; Hanyo-Denshi; JA2583
@@ -31073,6 +31164,8 @@
 92B7 E0102; Moji_Joho; MJ026858
 92B8 E0100; Adobe-Japan1; CID+22751
 92B9 E0100; Adobe-Japan1; CID+6997
+92B9 E0101; MSARG; MA_F9D7
+92B9 E0102; MSARG; ME_92B9_001
 92BA E0100; Adobe-Japan1; CID+22752
 92BB E0100; Adobe-Japan1; CID+19920
 92BC E0100; Adobe-Japan1; CID+19921
@@ -31310,6 +31403,8 @@
 936E E0101; Moji_Joho; MJ027061
 936E E0102; Hanyo-Denshi; FT2650
 936E E0102; Moji_Joho; MJ027062
+936E E0103; MSARG; MA_A05F
+936E E0104; MSARG; ME_936E_001
 936F E0100; Adobe-Japan1; CID+22777
 9370 E0100; Adobe-Japan1; CID+8676
 9371 E0100; Adobe-Japan1; CID+18852
@@ -32094,6 +32189,8 @@
 96B6 E0101; Moji_Joho; MJ027706
 96B6 E0102; Hanyo-Denshi; KS475490
 96B6 E0102; Moji_Joho; MJ027705
+96B6 E0103; MSARG; MA_90C4
+96B6 E0104; MSARG; ME_96B6_001
 96B7 E0100; Adobe-Japan1; CID+4020
 96B8 E0100; Adobe-Japan1; CID+7114
 96B9 E0100; Adobe-Japan1; CID+7115
@@ -32370,6 +32467,8 @@
 9759 E0102; Hanyo-Denshi; JA3237
 9759 E0103; Hanyo-Denshi; TK01097430
 9759 E0104; Hanyo-Denshi; TK01097490
+9759 E0105; MSARG; MD_9759
+9759 E0106; MSARG; ME_9759_001
 975A E0100; Adobe-Japan1; CID+15275
 975A E0101; Hanyo-Denshi; JB7121
 975A E0101; Moji_Joho; MJ027909
@@ -32392,6 +32491,8 @@
 975C E0105; Moji_Joho; MJ027915
 975C E0106; Hanyo-Denshi; TK01097530
 975C E0107; Hanyo-Denshi; TK01097550
+975C E0108; MSARG; MB_C052
+975C E0109; MSARG; ME_975C_001
 975D E0100; Hanyo-Denshi; IB1040
 975D E0100; Moji_Joho; MJ027919
 975D E0101; Hanyo-Denshi; IP975D
@@ -32439,6 +32540,8 @@
 976D E0103; Moji_Joho; MJ027942
 976D E0104; Hanyo-Denshi; HG1633
 976D E0104; Moji_Joho; MJ027941
+976D E0105; MSARG; MA_9E46
+976D E0106; MSARG; ME_976D_001
 976E E0100; Adobe-Japan1; CID+15277
 9771 E0100; Adobe-Japan1; CID+7152
 9771 E0101; Adobe-Japan1; CID+7710
@@ -32593,6 +32696,8 @@
 97C8 E0103; Moji_Joho; MJ028052
 97C8 E0104; Hanyo-Denshi; FT2682
 97C8 E0104; Moji_Joho; MJ028054
+97C8 E0105; MSARG; MA_9F76
+97C8 E0106; MSARG; ME_97C8_001
 97C9 E0100; Adobe-Japan1; CID+17192
 97C9 E0101; Hanyo-Denshi; JB7160
 97C9 E0101; Moji_Joho; MJ028055
@@ -33066,6 +33171,7 @@
 98EB E0103; Moji_Joho; MJ028358
 98EC E0100; MSARG; MA_914B
 98EC E0101; MSARG; ME_98EC_001
+98EC E0102; MSARG; ME_98EC_002
 98ED E0100; Adobe-Japan1; CID+4289
 98ED E0101; Hanyo-Denshi; JA5012
 98ED E0101; Moji_Joho; MJ028362
@@ -33366,6 +33472,8 @@
 9936 E0100; Moji_Joho; MJ028491
 9936 E0101; Hanyo-Denshi; IP9936
 9936 E0101; Moji_Joho; MJ028492
+9938 E0100; MSARG; MA_9652
+9938 E0101; MSARG; ME_9938_001
 9939 E0100; Adobe-Japan1; CID+22892
 9939 E0101; Hanyo-Denshi; JB7268
 9939 E0101; Moji_Joho; MJ028494
@@ -33844,6 +33952,8 @@
 9A5F E0103; Hanyo-Denshi; KS510550
 9A5F E0103; Moji_Joho; MJ028831
 9A62 E0100; Adobe-Japan1; CID+7261
+9A63 E0100; MSARG; MA_9557
+9A63 E0101; MSARG; ME_9A63_001
 9A64 E0100; Adobe-Japan1; CID+7263
 9A65 E0100; Adobe-Japan1; CID+7262
 9A65 E0101; Adobe-Japan1; CID+14268
@@ -35128,6 +35238,8 @@
 9ED8 E0102; Hanyo-Denshi; FT2329
 9ED8 E0102; Moji_Joho; MJ029902
 9ED9 E0100; Adobe-Japan1; CID+3815
+9ED9 E0101; MSARG; MD_9ED9
+9ED9 E0102; MSARG; ME_9ED9_001
 9EDB E0100; Adobe-Japan1; CID+2883
 9EDB E0101; Adobe-Japan1; CID+7729
 9EDB E0102; Hanyo-Denshi; JA3467
@@ -35813,6 +35925,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
 206EE E0101; Moji_Joho; MJ031295
 206F9 E0100; Moji_Joho; MJ031302
 206F9 E0101; Moji_Joho; MJ031303
+2070E E0100; MSARG; MA_92C3
+2070E E0101; MSARG; ME_2070E_001
 2071B E0100; Hanyo-Denshi; KS023680
 2071B E0101; Hanyo-Denshi; TK01009920
 2074F E0100; Adobe-Japan1; CID+17312
@@ -36093,6 +36207,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
 21764 E0100; Moji_Joho; MJ033638
 21764 E0101; Hanyo-Denshi; KS073700
 21764 E0101; Moji_Joho; MJ057303
+217B5 E0100; MSARG; MA_96FD
+217B5 E0101; MSARG; ME_217B5_001
 21800 E0100; Hanyo-Denshi; TK01020690
 21800 E0101; Hanyo-Denshi; TK01020760
 21898 E0100; Hanyo-Denshi; KS077190
@@ -36168,6 +36284,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
 21D45 E0100; Adobe-Japan1; CID+17545
 21D58 E0100; Hanyo-Denshi; KS089870
 21D58 E0101; Hanyo-Denshi; TK01024500
+21D5E E0100; MSARG; MA_876E
+21D5E E0101; MSARG; ME_21D5E_001
 21D62 E0100; Adobe-Japan1; CID+17547
 21D78 E0100; Adobe-Japan1; CID+17546
 21D92 E0100; Adobe-Japan1; CID+17556
@@ -36660,6 +36778,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
 23780 E0101; Hanyo-Denshi; JTB3B8
 23780 E0101; Moji_Joho; MJ038377
 23780 E0102; Hanyo-Denshi; TK01046760
+237C2 E0100; MSARG; MA_FCF0
+237C2 E0101; MSARG; ME_237C2_001
 237E7 E0100; Adobe-Japan1; CID+17875
 237E7 E0101; Hanyo-Denshi; JD1574
 237E7 E0101; Moji_Joho; MJ038420
@@ -36986,6 +37106,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
 254C9 E0101; Hanyo-Denshi; TK01063840
 254D9 E0100; Adobe-Japan1; CID+18217
 2550E E0100; Adobe-Japan1; CID+17009
+25584 E0100; MSARG; MA_93C3
+25584 E0101; MSARG; ME_25584_001
 255A7 E0100; Adobe-Japan1; CID+18229
 25607 E0100; Hanyo-Denshi; IB0328
 25607 E0100; Moji_Joho; MJ042965
@@ -37297,6 +37419,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
 263C1 E0101; Hanyo-Denshi; JTC0CA
 263C1 E0101; Moji_Joho; MJ045051
 263C1 E0102; Moji_Joho; MJ045050
+263F9 E0100; MSARG; MD_263F9
+263F9 E0101; MSARG; ME_263F9_001
 26402 E0100; Adobe-Japan1; CID+18398
 26405 E0100; Hanyo-Denshi; KS319810
 26405 E0101; Hanyo-Denshi; TK01073730
@@ -37311,12 +37435,18 @@ FA29 E0100; Adobe-Japan1; CID+8687
 26408 E0102; Hanyo-Denshi; TK01073790
 26409 E0100; Hanyo-Denshi; KS319910
 26409 E0101; Hanyo-Denshi; TK01073770
+26410 E0100; MSARG; MA_90CC
+26410 E0101; MSARG; ME_26410_001
+26439 E0100; MSARG; MD_26439
+26439 E0101; MSARG; ME_26439_001
 26462 E0100; Hanyo-Denshi; KS321040
 26462 E0100; Moji_Joho; MJ045176
 26462 E0101; Hanyo-Denshi; KS321270
 26462 E0101; Moji_Joho; MJ045177
 26489 E0100; Hanyo-Denshi; TK01007100
 26489 E0101; Hanyo-Denshi; TK01074030
+26489 E0102; MSARG; MA_8ECC
+26489 E0103; MSARG; ME_26489_001
 264B3 E0100; Hanyo-Denshi; KS322190
 264B3 E0100; Moji_Joho; MJ058361
 264B3 E0101; Hanyo-Denshi; KS322200S
@@ -37581,6 +37711,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
 27088 E0101; Hanyo-Denshi; TK01082110
 270F0 E0100; Hanyo-Denshi; KS369820
 270F0 E0101; Hanyo-Denshi; TK01082380
+270F0 E0102; MSARG; MA_8FA8
+270F0 E0103; MSARG; ME_270F0_001
 270F4 E0100; Adobe-Japan1; CID+17103
 270F4 E0101; Hanyo-Denshi; JC9141
 270F4 E0101; Moji_Joho; MJ047259
@@ -37698,6 +37830,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
 2770F E0100; Moji_Joho; MJ048373
 2770F E0101; Moji_Joho; MJ048374
 27723 E0100; Adobe-Japan1; CID+18652
+27741 E0100; MSARG; MA_94C7
+27741 E0101; MSARG; ME_27741_001
 27752 E0100; Adobe-Japan1; CID+18656
 27753 E0100; Hanyo-Denshi; KS393290
 27753 E0100; Moji_Joho; MJ048418
@@ -39019,6 +39153,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
 2CF4C E0101; Moji_Joho; MJ056893
 2CF4C E0102; Moji_Joho; MJ056894
 2CF4C E0103; Moji_Joho; MJ056898
+2CF7A E0100; MSARG; MC_00045
+2CF7A E0101; MSARG; ME_2CF7A_001
 2D020 E0100; Moji_Joho; MJ056969
 2D020 E0101; Moji_Joho; MJ056970
 2D028 E0100; Moji_Joho; MJ059338
diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in
index 357b812678..c57803e922 100644
--- a/admin/unidata/Makefile.in
+++ b/admin/unidata/Makefile.in
@@ -81,8 +81,10 @@ charscript.el: ${unidir}/charscript.el
 
 blocks = ${srcdir}/blocks.awk
 
-${unidir}/charscript.el: ${srcdir}/Blocks.txt ${blocks}
-       $(AM_V_GEN)$(AWK) -f ${blocks} < $< > $@
+${unidir}/charscript.el: ${blocks}
+
+${unidir}/charscript.el: ${srcdir}/Blocks.txt ${srcdir}/emoji-data.txt
+       $(AM_V_GEN)$(AWK) -f ${blocks} $^ > $@
 
 
 .PHONY: clean bootstrap-clean distclean maintainer-clean gen-clean
diff --git a/admin/unidata/NormalizationTest.txt 
b/admin/unidata/NormalizationTest.txt
index fa9b0d954c..302c35f37c 100644
--- a/admin/unidata/NormalizationTest.txt
+++ b/admin/unidata/NormalizationTest.txt
@@ -1,6 +1,6 @@
-# NormalizationTest-13.0.0.txt
-# Date: 2019-09-08, 23:31:12 GMT
-# © 2019 Unicode®, Inc.
+# NormalizationTest-14.0.0.txt
+# Date: 2021-05-28, 21:49:12 GMT
+# © 2021 Unicode®, Inc.
 # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in 
the U.S. and other countries.
 # For terms of use, see http://www.unicode.org/terms_of_use.html
 #
@@ -2409,6 +2409,9 @@
 A69C;A69C;A69C;044A;044A; # (ꚜ; ꚜ; ꚜ; ъ; ъ; ) MODIFIER LETTER CYRILLIC HARD 
SIGN
 A69D;A69D;A69D;044C;044C; # (ꚝ; ꚝ; ꚝ; ь; ь; ) MODIFIER LETTER CYRILLIC SOFT 
SIGN
 A770;A770;A770;A76F;A76F; # (ꝰ; ꝰ; ꝰ; ꝯ; ꝯ; ) MODIFIER LETTER US
+A7F2;A7F2;A7F2;0043;0043; # (ꟲ; ꟲ; ꟲ; C; C; ) MODIFIER LETTER CAPITAL C
+A7F3;A7F3;A7F3;0046;0046; # (ꟳ; ꟳ; ꟳ; F; F; ) MODIFIER LETTER CAPITAL F
+A7F4;A7F4;A7F4;0051;0051; # (ꟴ; ꟴ; ꟴ; Q; Q; ) MODIFIER LETTER CAPITAL Q
 A7F8;A7F8;A7F8;0126;0126; # (ꟸ; ꟸ; ꟸ; Ħ; Ħ; ) MODIFIER LETTER CAPITAL H WITH 
STROKE
 A7F9;A7F9;A7F9;0153;0153; # (ꟹ; ꟹ; ꟹ; œ; œ; ) MODIFIER LETTER SMALL LIGATURE OE
 AB5C;AB5C;AB5C;A727;A727; # (ꭜ; ꭜ; ꭜ; ꜧ; ꜧ; ) MODIFIER LETTER SMALL HENG
@@ -15127,6 +15130,62 @@ FFEB;FFEB;FFEB;2192;2192; # (→; →; →; →; →; ) 
HALFWIDTH RIGHTWARDS ARR
 FFEC;FFEC;FFEC;2193;2193; # (↓; ↓; ↓; ↓; ↓; ) HALFWIDTH DOWNWARDS ARROW
 FFED;FFED;FFED;25A0;25A0; # (■; ■; ■; ■; ■; ) HALFWIDTH BLACK SQUARE
 FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE
+10781;10781;10781;02D0;02D0; # (𐞁; 𐞁; 𐞁; ː; ː; ) MODIFIER LETTER SUPERSCRIPT 
TRIANGULAR COLON
+10782;10782;10782;02D1;02D1; # (𐞂; 𐞂; 𐞂; ˑ; ˑ; ) MODIFIER LETTER SUPERSCRIPT 
HALF TRIANGULAR COLON
+10783;10783;10783;00E6;00E6; # (𐞃; 𐞃; 𐞃; æ; æ; ) MODIFIER LETTER SMALL AE
+10784;10784;10784;0299;0299; # (𐞄; 𐞄; 𐞄; ʙ; ʙ; ) MODIFIER LETTER SMALL CAPITAL 
B
+10785;10785;10785;0253;0253; # (𐞅; 𐞅; 𐞅; ɓ; ɓ; ) MODIFIER LETTER SMALL B WITH 
HOOK
+10787;10787;10787;02A3;02A3; # (𐞇; 𐞇; 𐞇; ʣ; ʣ; ) MODIFIER LETTER SMALL DZ 
DIGRAPH
+10788;10788;10788;AB66;AB66; # (𐞈; 𐞈; 𐞈; ꭦ; ꭦ; ) MODIFIER LETTER SMALL DZ 
DIGRAPH WITH RETROFLEX HOOK
+10789;10789;10789;02A5;02A5; # (𐞉; 𐞉; 𐞉; ʥ; ʥ; ) MODIFIER LETTER SMALL DZ 
DIGRAPH WITH CURL
+1078A;1078A;1078A;02A4;02A4; # (𐞊; 𐞊; 𐞊; ʤ; ʤ; ) MODIFIER LETTER SMALL DEZH 
DIGRAPH
+1078B;1078B;1078B;0256;0256; # (𐞋; 𐞋; 𐞋; ɖ; ɖ; ) MODIFIER LETTER SMALL D WITH 
TAIL
+1078C;1078C;1078C;0257;0257; # (𐞌; 𐞌; 𐞌; ɗ; ɗ; ) MODIFIER LETTER SMALL D WITH 
HOOK
+1078D;1078D;1078D;1D91;1D91; # (𐞍; 𐞍; 𐞍; ᶑ; ᶑ; ) MODIFIER LETTER SMALL D WITH 
HOOK AND TAIL
+1078E;1078E;1078E;0258;0258; # (𐞎; 𐞎; 𐞎; ɘ; ɘ; ) MODIFIER LETTER SMALL 
REVERSED E
+1078F;1078F;1078F;025E;025E; # (𐞏; 𐞏; 𐞏; ɞ; ɞ; ) MODIFIER LETTER SMALL CLOSED 
REVERSED OPEN E
+10790;10790;10790;02A9;02A9; # (𐞐; 𐞐; 𐞐; ʩ; ʩ; ) MODIFIER LETTER SMALL FENG 
DIGRAPH
+10791;10791;10791;0264;0264; # (𐞑; 𐞑; 𐞑; ɤ; ɤ; ) MODIFIER LETTER SMALL RAMS 
HORN
+10792;10792;10792;0262;0262; # (𐞒; 𐞒; 𐞒; ɢ; ɢ; ) MODIFIER LETTER SMALL CAPITAL 
G
+10793;10793;10793;0260;0260; # (𐞓; 𐞓; 𐞓; ɠ; ɠ; ) MODIFIER LETTER SMALL G WITH 
HOOK
+10794;10794;10794;029B;029B; # (𐞔; 𐞔; 𐞔; ʛ; ʛ; ) MODIFIER LETTER SMALL CAPITAL 
G WITH HOOK
+10795;10795;10795;0127;0127; # (𐞕; 𐞕; 𐞕; ħ; ħ; ) MODIFIER LETTER SMALL H WITH 
STROKE
+10796;10796;10796;029C;029C; # (𐞖; 𐞖; 𐞖; ʜ; ʜ; ) MODIFIER LETTER SMALL CAPITAL 
H
+10797;10797;10797;0267;0267; # (𐞗; 𐞗; 𐞗; ɧ; ɧ; ) MODIFIER LETTER SMALL HENG 
WITH HOOK
+10798;10798;10798;0284;0284; # (𐞘; 𐞘; 𐞘; ʄ; ʄ; ) MODIFIER LETTER SMALL DOTLESS 
J WITH STROKE AND HOOK
+10799;10799;10799;02AA;02AA; # (𐞙; 𐞙; 𐞙; ʪ; ʪ; ) MODIFIER LETTER SMALL LS 
DIGRAPH
+1079A;1079A;1079A;02AB;02AB; # (𐞚; 𐞚; 𐞚; ʫ; ʫ; ) MODIFIER LETTER SMALL LZ 
DIGRAPH
+1079B;1079B;1079B;026C;026C; # (𐞛; 𐞛; 𐞛; ɬ; ɬ; ) MODIFIER LETTER SMALL L WITH 
BELT
+1079C;1079C;1079C;1DF04;1DF04; # (𐞜; 𐞜; 𐞜; 𝼄; 𝼄; ) MODIFIER LETTER SMALL 
CAPITAL L WITH BELT
+1079D;1079D;1079D;A78E;A78E; # (𐞝; 𐞝; 𐞝; ꞎ; ꞎ; ) MODIFIER LETTER SMALL L WITH 
RETROFLEX HOOK AND BELT
+1079E;1079E;1079E;026E;026E; # (𐞞; 𐞞; 𐞞; ɮ; ɮ; ) MODIFIER LETTER SMALL LEZH
+1079F;1079F;1079F;1DF05;1DF05; # (𐞟; 𐞟; 𐞟; 𝼅; 𝼅; ) MODIFIER LETTER SMALL LEZH 
WITH RETROFLEX HOOK
+107A0;107A0;107A0;028E;028E; # (𐞠; 𐞠; 𐞠; ʎ; ʎ; ) MODIFIER LETTER SMALL TURNED Y
+107A1;107A1;107A1;1DF06;1DF06; # (𐞡; 𐞡; 𐞡; 𝼆; 𝼆; ) MODIFIER LETTER SMALL 
TURNED Y WITH BELT
+107A2;107A2;107A2;00F8;00F8; # (𐞢; 𐞢; 𐞢; ø; ø; ) MODIFIER LETTER SMALL O WITH 
STROKE
+107A3;107A3;107A3;0276;0276; # (𐞣; 𐞣; 𐞣; ɶ; ɶ; ) MODIFIER LETTER SMALL CAPITAL 
OE
+107A4;107A4;107A4;0277;0277; # (𐞤; 𐞤; 𐞤; ɷ; ɷ; ) MODIFIER LETTER SMALL CLOSED 
OMEGA
+107A5;107A5;107A5;0071;0071; # (𐞥; 𐞥; 𐞥; q; q; ) MODIFIER LETTER SMALL Q
+107A6;107A6;107A6;027A;027A; # (𐞦; 𐞦; 𐞦; ɺ; ɺ; ) MODIFIER LETTER SMALL TURNED 
R WITH LONG LEG
+107A7;107A7;107A7;1DF08;1DF08; # (𐞧; 𐞧; 𐞧; 𝼈; 𝼈; ) MODIFIER LETTER SMALL 
TURNED R WITH LONG LEG AND RETROFLEX HOOK
+107A8;107A8;107A8;027D;027D; # (𐞨; 𐞨; 𐞨; ɽ; ɽ; ) MODIFIER LETTER SMALL R WITH 
TAIL
+107A9;107A9;107A9;027E;027E; # (𐞩; 𐞩; 𐞩; ɾ; ɾ; ) MODIFIER LETTER SMALL R WITH 
FISHHOOK
+107AA;107AA;107AA;0280;0280; # (𐞪; 𐞪; 𐞪; ʀ; ʀ; ) MODIFIER LETTER SMALL CAPITAL 
R
+107AB;107AB;107AB;02A8;02A8; # (𐞫; 𐞫; 𐞫; ʨ; ʨ; ) MODIFIER LETTER SMALL TC 
DIGRAPH WITH CURL
+107AC;107AC;107AC;02A6;02A6; # (𐞬; 𐞬; 𐞬; ʦ; ʦ; ) MODIFIER LETTER SMALL TS 
DIGRAPH
+107AD;107AD;107AD;AB67;AB67; # (𐞭; 𐞭; 𐞭; ꭧ; ꭧ; ) MODIFIER LETTER SMALL TS 
DIGRAPH WITH RETROFLEX HOOK
+107AE;107AE;107AE;02A7;02A7; # (𐞮; 𐞮; 𐞮; ʧ; ʧ; ) MODIFIER LETTER SMALL TESH 
DIGRAPH
+107AF;107AF;107AF;0288;0288; # (𐞯; 𐞯; 𐞯; ʈ; ʈ; ) MODIFIER LETTER SMALL T WITH 
RETROFLEX HOOK
+107B0;107B0;107B0;2C71;2C71; # (𐞰; 𐞰; 𐞰; ⱱ; ⱱ; ) MODIFIER LETTER SMALL V WITH 
RIGHT HOOK
+107B2;107B2;107B2;028F;028F; # (𐞲; 𐞲; 𐞲; ʏ; ʏ; ) MODIFIER LETTER SMALL CAPITAL 
Y
+107B3;107B3;107B3;02A1;02A1; # (𐞳; 𐞳; 𐞳; ʡ; ʡ; ) MODIFIER LETTER GLOTTAL STOP 
WITH STROKE
+107B4;107B4;107B4;02A2;02A2; # (𐞴; 𐞴; 𐞴; ʢ; ʢ; ) MODIFIER LETTER REVERSED 
GLOTTAL STOP WITH STROKE
+107B5;107B5;107B5;0298;0298; # (𐞵; 𐞵; 𐞵; ʘ; ʘ; ) MODIFIER LETTER BILABIAL CLICK
+107B6;107B6;107B6;01C0;01C0; # (𐞶; 𐞶; 𐞶; ǀ; ǀ; ) MODIFIER LETTER DENTAL CLICK
+107B7;107B7;107B7;01C1;01C1; # (𐞷; 𐞷; 𐞷; ǁ; ǁ; ) MODIFIER LETTER LATERAL CLICK
+107B8;107B8;107B8;01C2;01C2; # (𐞸; 𐞸; 𐞸; ǂ; ǂ; ) MODIFIER LETTER ALVEOLAR CLICK
+107B9;107B9;107B9;1DF0A;1DF0A; # (𐞹; 𐞹; 𐞹; 𝼊; 𝼊; ) MODIFIER LETTER RETROFLEX 
CLICK WITH RETROFLEX HOOK
+107BA;107BA;107BA;1DF1E;1DF1E; # (𐞺; 𐞺; 𐞺; 𝼞; 𝼞; ) MODIFIER LETTER SMALL S 
WITH CURL
 1109A;1109A;11099 110BA;1109A;11099 110BA; # (𑂚; 𑂚; 𑂙◌𑂺; 𑂚; 𑂙◌𑂺; ) KAITHI 
LETTER DDDHA
 1109C;1109C;1109B 110BA;1109C;1109B 110BA; # (𑂜; 𑂜; 𑂛◌𑂺; 𑂜; 𑂛◌𑂺; ) KAITHI 
LETTER RHA
 110AB;110AB;110A5 110BA;110AB;110A5 110BA; # (𑂫; 𑂫; 𑂥◌𑂺; 𑂫; 𑂥◌𑂺; ) KAITHI 
LETTER VA
@@ -17025,66 +17084,66 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 0314 0315 0300 05AE 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 
0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062; # 
(a◌̔◌̕◌̀◌֮b; a◌֮◌̔◌̀◌̕b; a◌֮◌̔◌̀◌̕b; a◌֮◌̔◌̀◌̕b; a◌֮◌̔◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING REVERSED COMMA ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 035C 0315 0300 0315 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 
035C 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062; # 
(a◌͜◌̕◌̀◌̕b; à◌̕◌̕◌͜b; a◌̀◌̕◌̕◌͜b; à◌̕◌̕◌͜b; a◌̀◌̕◌̕◌͜b; ) LATIN SMALL LETTER 
A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, COMBINING COMMA ABOVE RIGHT, LATIN SMALL LETTER B
 0061 0315 035C 0315 0300 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 
035C 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062; # 
(a◌̕◌͜◌̕◌̀b; à◌̕◌̕◌͜b; a◌̀◌̕◌̕◌͜b; à◌̕◌̕◌͜b; a◌̀◌̕◌̕◌͜b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA 
ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B
-0061 059A 0316 302A 0316 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 
0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062; # 
(a◌֚◌̖◌〪◌̖b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B
-0061 0316 059A 0316 302A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 
0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062; # 
(a◌̖◌֚◌̖◌〪b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING GRAVE ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0317 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 
0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062; # 
(a◌֚◌̖◌〪◌̗b; a◌〪◌̖◌̗◌֚b; a◌〪◌̖◌̗◌֚b; a◌〪◌̖◌̗◌֚b; a◌〪◌̖◌̗◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING ACUTE ACCENT BELOW, LATIN SMALL LETTER B
-0061 0317 059A 0316 302A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 
0316 059A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062; # 
(a◌̗◌֚◌̖◌〪b; a◌〪◌̗◌̖◌֚b; a◌〪◌̗◌̖◌֚b; a◌〪◌̗◌̖◌֚b; a◌〪◌̗◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING ACUTE ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0318 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 
0318 059A 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062; # 
(a◌֚◌̖◌〪◌̘b; a◌〪◌̖◌̘◌֚b; a◌〪◌̖◌̘◌֚b; a◌〪◌̖◌̘◌֚b; a◌〪◌̖◌̘◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LEFT TACK BELOW, LATIN SMALL LETTER B
-0061 0318 059A 0316 302A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 
0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062; # 
(a◌̘◌֚◌̖◌〪b; a◌〪◌̘◌̖◌֚b; a◌〪◌̘◌̖◌֚b; a◌〪◌̘◌̖◌֚b; a◌〪◌̘◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0319 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 
0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062; # 
(a◌֚◌̖◌〪◌̙b; a◌〪◌̖◌̙◌֚b; a◌〪◌̖◌̙◌֚b; a◌〪◌̖◌̙◌֚b; a◌〪◌̖◌̙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING RIGHT TACK BELOW, LATIN SMALL LETTER B
-0061 0319 059A 0316 302A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 
0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062; # 
(a◌̙◌֚◌̖◌〪b; a◌〪◌̙◌̖◌֚b; a◌〪◌̙◌̖◌֚b; a◌〪◌̙◌̖◌֚b; a◌〪◌̙◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0316 0062;0061 1DFA 0316 0316 059A 0062;0061 1DFA 0316 
0316 059A 0062;0061 1DFA 0316 0316 059A 0062;0061 1DFA 0316 0316 059A 0062; # 
(a◌֚◌̖◌᷺◌̖b; a◌᷺◌̖◌̖◌֚b; a◌᷺◌̖◌̖◌֚b; a◌᷺◌̖◌̖◌֚b; a◌᷺◌̖◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B
+0061 0316 059A 0316 1DFA 0062;0061 1DFA 0316 0316 059A 0062;0061 1DFA 0316 
0316 059A 0062;0061 1DFA 0316 0316 059A 0062;0061 1DFA 0316 0316 059A 0062; # 
(a◌̖◌֚◌̖◌᷺b; a◌᷺◌̖◌̖◌֚b; a◌᷺◌̖◌̖◌֚b; a◌᷺◌̖◌̖◌֚b; a◌᷺◌̖◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING GRAVE ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0317 0062;0061 1DFA 0316 0317 059A 0062;0061 1DFA 0316 
0317 059A 0062;0061 1DFA 0316 0317 059A 0062;0061 1DFA 0316 0317 059A 0062; # 
(a◌֚◌̖◌᷺◌̗b; a◌᷺◌̖◌̗◌֚b; a◌᷺◌̖◌̗◌֚b; a◌᷺◌̖◌̗◌֚b; a◌᷺◌̖◌̗◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING ACUTE ACCENT BELOW, LATIN SMALL LETTER B
+0061 0317 059A 0316 1DFA 0062;0061 1DFA 0317 0316 059A 0062;0061 1DFA 0317 
0316 059A 0062;0061 1DFA 0317 0316 059A 0062;0061 1DFA 0317 0316 059A 0062; # 
(a◌̗◌֚◌̖◌᷺b; a◌᷺◌̗◌̖◌֚b; a◌᷺◌̗◌̖◌֚b; a◌᷺◌̗◌̖◌֚b; a◌᷺◌̗◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING ACUTE ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0318 0062;0061 1DFA 0316 0318 059A 0062;0061 1DFA 0316 
0318 059A 0062;0061 1DFA 0316 0318 059A 0062;0061 1DFA 0316 0318 059A 0062; # 
(a◌֚◌̖◌᷺◌̘b; a◌᷺◌̖◌̘◌֚b; a◌᷺◌̖◌̘◌֚b; a◌᷺◌̖◌̘◌֚b; a◌᷺◌̖◌̘◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LEFT TACK BELOW, LATIN SMALL LETTER B
+0061 0318 059A 0316 1DFA 0062;0061 1DFA 0318 0316 059A 0062;0061 1DFA 0318 
0316 059A 0062;0061 1DFA 0318 0316 059A 0062;0061 1DFA 0318 0316 059A 0062; # 
(a◌̘◌֚◌̖◌᷺b; a◌᷺◌̘◌̖◌֚b; a◌᷺◌̘◌̖◌֚b; a◌᷺◌̘◌̖◌֚b; a◌᷺◌̘◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0319 0062;0061 1DFA 0316 0319 059A 0062;0061 1DFA 0316 
0319 059A 0062;0061 1DFA 0316 0319 059A 0062;0061 1DFA 0316 0319 059A 0062; # 
(a◌֚◌̖◌᷺◌̙b; a◌᷺◌̖◌̙◌֚b; a◌᷺◌̖◌̙◌֚b; a◌᷺◌̖◌̙◌֚b; a◌᷺◌̖◌̙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING RIGHT TACK BELOW, LATIN SMALL LETTER B
+0061 0319 059A 0316 1DFA 0062;0061 1DFA 0319 0316 059A 0062;0061 1DFA 0319 
0316 059A 0062;0061 1DFA 0319 0316 059A 0062;0061 1DFA 0319 0316 059A 0062; # 
(a◌̙◌֚◌̖◌᷺b; a◌᷺◌̙◌̖◌֚b; a◌᷺◌̙◌̖◌֚b; a◌᷺◌̙◌̖◌֚b; a◌᷺◌̙◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 035C 0315 0300 031A 0062;00E0 0315 031A 035C 0062;0061 0300 0315 031A 
035C 0062;00E0 0315 031A 035C 0062;0061 0300 0315 031A 035C 0062; # 
(a◌͜◌̕◌̀◌̚b; à◌̕◌̚◌͜b; a◌̀◌̕◌̚◌͜b; à◌̕◌̚◌͜b; a◌̀◌̕◌̚◌͜b; ) LATIN SMALL LETTER 
A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, COMBINING LEFT ANGLE ABOVE, LATIN SMALL LETTER B
 0061 031A 035C 0315 0300 0062;00E0 031A 0315 035C 0062;0061 0300 031A 0315 
035C 0062;00E0 031A 0315 035C 0062;0061 0300 031A 0315 035C 0062; # 
(a◌̚◌͜◌̕◌̀b; à◌̚◌̕◌͜b; a◌̀◌̚◌̕◌͜b; à◌̚◌̕◌͜b; a◌̀◌̚◌̕◌͜b; ) LATIN SMALL LETTER 
A, COMBINING LEFT ANGLE ABOVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA 
ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B
-0061 302A 031B 1DCE 031B 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 
031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062; # 
(a◌〪◌̛◌᷎◌̛b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; ) LATIN SMALL 
LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, 
COMBINING HORN, LATIN SMALL LETTER B
-0061 031B 302A 031B 1DCE 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 
031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062; # 
(a◌̛◌〪◌̛◌᷎b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; ) LATIN SMALL 
LETTER A, COMBINING HORN, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
-0061 059A 0316 302A 031C 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 
031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062; # 
(a◌֚◌̖◌〪◌̜b; a◌〪◌̖◌̜◌֚b; a◌〪◌̖◌̜◌֚b; a◌〪◌̖◌̜◌֚b; a◌〪◌̖◌̜◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LEFT HALF RING BELOW, LATIN SMALL LETTER B
-0061 031C 059A 0316 302A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 
0316 059A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062; # 
(a◌̜◌֚◌̖◌〪b; a◌〪◌̜◌̖◌֚b; a◌〪◌̜◌̖◌֚b; a◌〪◌̜◌̖◌֚b; a◌〪◌̜◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT HALF RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 031D 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 
031D 059A 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062; # 
(a◌֚◌̖◌〪◌̝b; a◌〪◌̖◌̝◌֚b; a◌〪◌̖◌̝◌֚b; a◌〪◌̖◌̝◌֚b; a◌〪◌̖◌̝◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING UP TACK BELOW, LATIN SMALL LETTER B
-0061 031D 059A 0316 302A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 
0316 059A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062; # 
(a◌̝◌֚◌̖◌〪b; a◌〪◌̝◌̖◌֚b; a◌〪◌̝◌̖◌֚b; a◌〪◌̝◌̖◌֚b; a◌〪◌̝◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING UP TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 031E 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 
031E 059A 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062; # 
(a◌֚◌̖◌〪◌̞b; a◌〪◌̖◌̞◌֚b; a◌〪◌̖◌̞◌֚b; a◌〪◌̖◌̞◌֚b; a◌〪◌̖◌̞◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING DOWN TACK BELOW, LATIN SMALL LETTER B
-0061 031E 059A 0316 302A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 
0316 059A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062; # 
(a◌̞◌֚◌̖◌〪b; a◌〪◌̞◌̖◌֚b; a◌〪◌̞◌̖◌֚b; a◌〪◌̞◌̖◌֚b; a◌〪◌̞◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOWN TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 031F 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 
031F 059A 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062; # 
(a◌֚◌̖◌〪◌̟b; a◌〪◌̖◌̟◌֚b; a◌〪◌̖◌̟◌֚b; a◌〪◌̖◌̟◌֚b; a◌〪◌̖◌̟◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING PLUS SIGN BELOW, LATIN SMALL LETTER B
-0061 031F 059A 0316 302A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 
0316 059A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062; # 
(a◌̟◌֚◌̖◌〪b; a◌〪◌̟◌̖◌֚b; a◌〪◌̟◌̖◌֚b; a◌〪◌̟◌̖◌֚b; a◌〪◌̟◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING PLUS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0320 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 
0320 059A 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062; # 
(a◌֚◌̖◌〪◌̠b; a◌〪◌̖◌̠◌֚b; a◌〪◌̖◌̠◌֚b; a◌〪◌̖◌̠◌֚b; a◌〪◌̖◌̠◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING MINUS SIGN BELOW, LATIN SMALL LETTER B
-0061 0320 059A 0316 302A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 
0316 059A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062; # 
(a◌̠◌֚◌̖◌〪b; a◌〪◌̠◌̖◌֚b; a◌〪◌̠◌̖◌֚b; a◌〪◌̠◌̖◌֚b; a◌〪◌̠◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING MINUS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 1DFA 031B 1DCE 031B 0062;0061 1DCE 031B 031B 1DFA 0062;0061 1DCE 031B 
031B 1DFA 0062;0061 1DCE 031B 031B 1DFA 0062;0061 1DCE 031B 031B 1DFA 0062; # 
(a◌᷺◌̛◌᷎◌̛b; a◌᷎◌̛◌̛◌᷺b; a◌᷎◌̛◌̛◌᷺b; a◌᷎◌̛◌̛◌᷺b; a◌᷎◌̛◌̛◌᷺b; ) LATIN SMALL 
LETTER A, COMBINING DOT BELOW LEFT, COMBINING HORN, COMBINING OGONEK ABOVE, 
COMBINING HORN, LATIN SMALL LETTER B
+0061 031B 1DFA 031B 1DCE 0062;0061 1DCE 031B 031B 1DFA 0062;0061 1DCE 031B 
031B 1DFA 0062;0061 1DCE 031B 031B 1DFA 0062;0061 1DCE 031B 031B 1DFA 0062; # 
(a◌̛◌᷺◌̛◌᷎b; a◌᷎◌̛◌̛◌᷺b; a◌᷎◌̛◌̛◌᷺b; a◌᷎◌̛◌̛◌᷺b; a◌᷎◌̛◌̛◌᷺b; ) LATIN SMALL 
LETTER A, COMBINING HORN, COMBINING DOT BELOW LEFT, COMBINING HORN, COMBINING 
OGONEK ABOVE, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 031C 0062;0061 1DFA 0316 031C 059A 0062;0061 1DFA 0316 
031C 059A 0062;0061 1DFA 0316 031C 059A 0062;0061 1DFA 0316 031C 059A 0062; # 
(a◌֚◌̖◌᷺◌̜b; a◌᷺◌̖◌̜◌֚b; a◌᷺◌̖◌̜◌֚b; a◌᷺◌̖◌̜◌֚b; a◌᷺◌̖◌̜◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LEFT HALF RING BELOW, LATIN SMALL LETTER B
+0061 031C 059A 0316 1DFA 0062;0061 1DFA 031C 0316 059A 0062;0061 1DFA 031C 
0316 059A 0062;0061 1DFA 031C 0316 059A 0062;0061 1DFA 031C 0316 059A 0062; # 
(a◌̜◌֚◌̖◌᷺b; a◌᷺◌̜◌̖◌֚b; a◌᷺◌̜◌̖◌֚b; a◌᷺◌̜◌̖◌֚b; a◌᷺◌̜◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT HALF RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 031D 0062;0061 1DFA 0316 031D 059A 0062;0061 1DFA 0316 
031D 059A 0062;0061 1DFA 0316 031D 059A 0062;0061 1DFA 0316 031D 059A 0062; # 
(a◌֚◌̖◌᷺◌̝b; a◌᷺◌̖◌̝◌֚b; a◌᷺◌̖◌̝◌֚b; a◌᷺◌̖◌̝◌֚b; a◌᷺◌̖◌̝◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING UP TACK BELOW, LATIN SMALL LETTER B
+0061 031D 059A 0316 1DFA 0062;0061 1DFA 031D 0316 059A 0062;0061 1DFA 031D 
0316 059A 0062;0061 1DFA 031D 0316 059A 0062;0061 1DFA 031D 0316 059A 0062; # 
(a◌̝◌֚◌̖◌᷺b; a◌᷺◌̝◌̖◌֚b; a◌᷺◌̝◌̖◌֚b; a◌᷺◌̝◌̖◌֚b; a◌᷺◌̝◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING UP TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 031E 0062;0061 1DFA 0316 031E 059A 0062;0061 1DFA 0316 
031E 059A 0062;0061 1DFA 0316 031E 059A 0062;0061 1DFA 0316 031E 059A 0062; # 
(a◌֚◌̖◌᷺◌̞b; a◌᷺◌̖◌̞◌֚b; a◌᷺◌̖◌̞◌֚b; a◌᷺◌̖◌̞◌֚b; a◌᷺◌̖◌̞◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING DOWN TACK BELOW, LATIN SMALL LETTER B
+0061 031E 059A 0316 1DFA 0062;0061 1DFA 031E 0316 059A 0062;0061 1DFA 031E 
0316 059A 0062;0061 1DFA 031E 0316 059A 0062;0061 1DFA 031E 0316 059A 0062; # 
(a◌̞◌֚◌̖◌᷺b; a◌᷺◌̞◌̖◌֚b; a◌᷺◌̞◌̖◌֚b; a◌᷺◌̞◌̖◌֚b; a◌᷺◌̞◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOWN TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 031F 0062;0061 1DFA 0316 031F 059A 0062;0061 1DFA 0316 
031F 059A 0062;0061 1DFA 0316 031F 059A 0062;0061 1DFA 0316 031F 059A 0062; # 
(a◌֚◌̖◌᷺◌̟b; a◌᷺◌̖◌̟◌֚b; a◌᷺◌̖◌̟◌֚b; a◌᷺◌̖◌̟◌֚b; a◌᷺◌̖◌̟◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING PLUS SIGN BELOW, LATIN SMALL LETTER B
+0061 031F 059A 0316 1DFA 0062;0061 1DFA 031F 0316 059A 0062;0061 1DFA 031F 
0316 059A 0062;0061 1DFA 031F 0316 059A 0062;0061 1DFA 031F 0316 059A 0062; # 
(a◌̟◌֚◌̖◌᷺b; a◌᷺◌̟◌̖◌֚b; a◌᷺◌̟◌̖◌֚b; a◌᷺◌̟◌̖◌֚b; a◌᷺◌̟◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING PLUS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0320 0062;0061 1DFA 0316 0320 059A 0062;0061 1DFA 0316 
0320 059A 0062;0061 1DFA 0316 0320 059A 0062;0061 1DFA 0316 0320 059A 0062; # 
(a◌֚◌̖◌᷺◌̠b; a◌᷺◌̖◌̠◌֚b; a◌᷺◌̖◌̠◌֚b; a◌᷺◌̖◌̠◌֚b; a◌᷺◌̖◌̠◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING MINUS SIGN BELOW, LATIN SMALL LETTER B
+0061 0320 059A 0316 1DFA 0062;0061 1DFA 0320 0316 059A 0062;0061 1DFA 0320 
0316 059A 0062;0061 1DFA 0320 0316 059A 0062;0061 1DFA 0320 0316 059A 0062; # 
(a◌̠◌֚◌̖◌᷺b; a◌᷺◌̠◌̖◌֚b; a◌᷺◌̠◌̖◌֚b; a◌᷺◌̠◌̖◌֚b; a◌᷺◌̠◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING MINUS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 1DCE 0321 0F74 0321 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 
0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062; # 
(a◌᷎◌̡◌ུ◌̡b; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; ) LATIN SMALL 
LETTER A, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN 
VOWEL SIGN U, COMBINING PALATALIZED HOOK BELOW, LATIN SMALL LETTER B
 0061 0321 1DCE 0321 0F74 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 
0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062; # 
(a◌̡◌᷎◌̡◌ུb; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; ) LATIN SMALL 
LETTER A, COMBINING PALATALIZED HOOK BELOW, COMBINING OGONEK ABOVE, COMBINING 
PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B
 0061 1DCE 0321 0F74 0322 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 
0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062; # 
(a◌᷎◌̡◌ུ◌̢b; a◌ུ◌̡◌̢◌᷎b; a◌ུ◌̡◌̢◌᷎b; a◌ུ◌̡◌̢◌᷎b; a◌ུ◌̡◌̢◌᷎b; ) LATIN SMALL 
LETTER A, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN 
VOWEL SIGN U, COMBINING RETROFLEX HOOK BELOW, LATIN SMALL LETTER B
 0061 0322 1DCE 0321 0F74 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 
0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062; # 
(a◌̢◌᷎◌̡◌ུb; a◌ུ◌̢◌̡◌᷎b; a◌ུ◌̢◌̡◌᷎b; a◌ུ◌̢◌̡◌᷎b; a◌ུ◌̢◌̡◌᷎b; ) LATIN SMALL 
LETTER A, COMBINING RETROFLEX HOOK BELOW, COMBINING OGONEK ABOVE, COMBINING 
PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B
-0061 059A 0316 302A 0323 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 
0323 059A 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062; # 
(a◌֚◌̖◌〪◌̣b; a◌〪◌̖◌̣◌֚b; a◌〪◌̖◌̣◌֚b; a◌〪◌̖◌̣◌֚b; a◌〪◌̖◌̣◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING DOT BELOW, LATIN SMALL LETTER B
-0061 0323 059A 0316 302A 0062;1EA1 302A 0316 059A 0062;0061 302A 0323 0316 
059A 0062;1EA1 302A 0316 059A 0062;0061 302A 0323 0316 059A 0062; # 
(a◌̣◌֚◌̖◌〪b; ạ◌〪◌̖◌֚b; a◌〪◌̣◌̖◌֚b; ạ◌〪◌̖◌֚b; a◌〪◌̣◌̖◌֚b; ) LATIN SMALL LETTER 
A, COMBINING DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0324 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 
0324 059A 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062; # 
(a◌֚◌̖◌〪◌̤b; a◌〪◌̖◌̤◌֚b; a◌〪◌̖◌̤◌֚b; a◌〪◌̖◌̤◌֚b; a◌〪◌̖◌̤◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING DIAERESIS BELOW, LATIN SMALL LETTER B
-0061 0324 059A 0316 302A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 
0316 059A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062; # 
(a◌̤◌֚◌̖◌〪b; a◌〪◌̤◌̖◌֚b; a◌〪◌̤◌̖◌֚b; a◌〪◌̤◌̖◌֚b; a◌〪◌̤◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DIAERESIS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0325 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 
0325 059A 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062; # 
(a◌֚◌̖◌〪◌̥b; a◌〪◌̖◌̥◌֚b; a◌〪◌̖◌̥◌֚b; a◌〪◌̖◌̥◌֚b; a◌〪◌̖◌̥◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING RING BELOW, LATIN SMALL LETTER B
-0061 0325 059A 0316 302A 0062;1E01 302A 0316 059A 0062;0061 302A 0325 0316 
059A 0062;1E01 302A 0316 059A 0062;0061 302A 0325 0316 059A 0062; # 
(a◌̥◌֚◌̖◌〪b; ḁ◌〪◌̖◌֚b; a◌〪◌̥◌̖◌֚b; ḁ◌〪◌̖◌֚b; a◌〪◌̥◌̖◌֚b; ) LATIN SMALL LETTER 
A, COMBINING RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0326 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 
0326 059A 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062; # 
(a◌֚◌̖◌〪◌̦b; a◌〪◌̖◌̦◌֚b; a◌〪◌̖◌̦◌֚b; a◌〪◌̖◌̦◌֚b; a◌〪◌̖◌̦◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING COMMA BELOW, LATIN SMALL LETTER B
-0061 0326 059A 0316 302A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 
0316 059A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062; # 
(a◌̦◌֚◌̖◌〪b; a◌〪◌̦◌̖◌֚b; a◌〪◌̦◌̖◌֚b; a◌〪◌̦◌̖◌֚b; a◌〪◌̦◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING COMMA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0323 0062;0061 1DFA 0316 0323 059A 0062;0061 1DFA 0316 
0323 059A 0062;0061 1DFA 0316 0323 059A 0062;0061 1DFA 0316 0323 059A 0062; # 
(a◌֚◌̖◌᷺◌̣b; a◌᷺◌̖◌̣◌֚b; a◌᷺◌̖◌̣◌֚b; a◌᷺◌̖◌̣◌֚b; a◌᷺◌̖◌̣◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING DOT BELOW, LATIN SMALL LETTER B
+0061 0323 059A 0316 1DFA 0062;1EA1 1DFA 0316 059A 0062;0061 1DFA 0323 0316 
059A 0062;1EA1 1DFA 0316 059A 0062;0061 1DFA 0323 0316 059A 0062; # 
(a◌̣◌֚◌̖◌᷺b; ạ◌᷺◌̖◌֚b; a◌᷺◌̣◌̖◌֚b; ạ◌᷺◌̖◌֚b; a◌᷺◌̣◌̖◌֚b; ) LATIN SMALL LETTER 
A, COMBINING DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0324 0062;0061 1DFA 0316 0324 059A 0062;0061 1DFA 0316 
0324 059A 0062;0061 1DFA 0316 0324 059A 0062;0061 1DFA 0316 0324 059A 0062; # 
(a◌֚◌̖◌᷺◌̤b; a◌᷺◌̖◌̤◌֚b; a◌᷺◌̖◌̤◌֚b; a◌᷺◌̖◌̤◌֚b; a◌᷺◌̖◌̤◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING DIAERESIS BELOW, LATIN SMALL LETTER B
+0061 0324 059A 0316 1DFA 0062;0061 1DFA 0324 0316 059A 0062;0061 1DFA 0324 
0316 059A 0062;0061 1DFA 0324 0316 059A 0062;0061 1DFA 0324 0316 059A 0062; # 
(a◌̤◌֚◌̖◌᷺b; a◌᷺◌̤◌̖◌֚b; a◌᷺◌̤◌̖◌֚b; a◌᷺◌̤◌̖◌֚b; a◌᷺◌̤◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DIAERESIS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0325 0062;0061 1DFA 0316 0325 059A 0062;0061 1DFA 0316 
0325 059A 0062;0061 1DFA 0316 0325 059A 0062;0061 1DFA 0316 0325 059A 0062; # 
(a◌֚◌̖◌᷺◌̥b; a◌᷺◌̖◌̥◌֚b; a◌᷺◌̖◌̥◌֚b; a◌᷺◌̖◌̥◌֚b; a◌᷺◌̖◌̥◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING RING BELOW, LATIN SMALL LETTER B
+0061 0325 059A 0316 1DFA 0062;1E01 1DFA 0316 059A 0062;0061 1DFA 0325 0316 
059A 0062;1E01 1DFA 0316 059A 0062;0061 1DFA 0325 0316 059A 0062; # 
(a◌̥◌֚◌̖◌᷺b; ḁ◌᷺◌̖◌֚b; a◌᷺◌̥◌̖◌֚b; ḁ◌᷺◌̖◌֚b; a◌᷺◌̥◌̖◌֚b; ) LATIN SMALL LETTER 
A, COMBINING RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0326 0062;0061 1DFA 0316 0326 059A 0062;0061 1DFA 0316 
0326 059A 0062;0061 1DFA 0316 0326 059A 0062;0061 1DFA 0316 0326 059A 0062; # 
(a◌֚◌̖◌᷺◌̦b; a◌᷺◌̖◌̦◌֚b; a◌᷺◌̖◌̦◌֚b; a◌᷺◌̖◌̦◌֚b; a◌᷺◌̖◌̦◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING COMMA BELOW, LATIN SMALL LETTER B
+0061 0326 059A 0316 1DFA 0062;0061 1DFA 0326 0316 059A 0062;0061 1DFA 0326 
0316 059A 0062;0061 1DFA 0326 0316 059A 0062;0061 1DFA 0326 0316 059A 0062; # 
(a◌̦◌֚◌̖◌᷺b; a◌᷺◌̦◌̖◌֚b; a◌᷺◌̦◌̖◌֚b; a◌᷺◌̦◌̖◌֚b; a◌᷺◌̦◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING COMMA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 1DCE 0321 0F74 0327 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 
0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062; # 
(a◌᷎◌̡◌ུ◌̧b; a◌ུ◌̡◌̧◌᷎b; a◌ུ◌̡◌̧◌᷎b; a◌ུ◌̡◌̧◌᷎b; a◌ུ◌̡◌̧◌᷎b; ) LATIN SMALL 
LETTER A, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN 
VOWEL SIGN U, COMBINING CEDILLA, LATIN SMALL LETTER B
 0061 0327 1DCE 0321 0F74 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 
0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062; # 
(a◌̧◌᷎◌̡◌ུb; a◌ུ◌̧◌̡◌᷎b; a◌ུ◌̧◌̡◌᷎b; a◌ུ◌̧◌̡◌᷎b; a◌ུ◌̧◌̡◌᷎b; ) LATIN SMALL 
LETTER A, COMBINING CEDILLA, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK 
BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B
 0061 1DCE 0321 0F74 0328 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 
0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062; # 
(a◌᷎◌̡◌ུ◌̨b; a◌ུ◌̡◌̨◌᷎b; a◌ུ◌̡◌̨◌᷎b; a◌ུ◌̡◌̨◌᷎b; a◌ུ◌̡◌̨◌᷎b; ) LATIN SMALL 
LETTER A, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN 
VOWEL SIGN U, COMBINING OGONEK, LATIN SMALL LETTER B
 0061 0328 1DCE 0321 0F74 0062;0105 0F74 0321 1DCE 0062;0061 0F74 0328 0321 
1DCE 0062;0105 0F74 0321 1DCE 0062;0061 0F74 0328 0321 1DCE 0062; # 
(a◌̨◌᷎◌̡◌ུb; ą◌ུ◌̡◌᷎b; a◌ུ◌̨◌̡◌᷎b; ą◌ུ◌̡◌᷎b; a◌ུ◌̨◌̡◌᷎b; ) LATIN SMALL LETTER 
A, COMBINING OGONEK, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, 
TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B
-0061 059A 0316 302A 0329 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 
0329 059A 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062; # 
(a◌֚◌̖◌〪◌̩b; a◌〪◌̖◌̩◌֚b; a◌〪◌̖◌̩◌֚b; a◌〪◌̖◌̩◌֚b; a◌〪◌̖◌̩◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING VERTICAL LINE BELOW, LATIN SMALL LETTER B
-0061 0329 059A 0316 302A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 
0316 059A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062; # 
(a◌̩◌֚◌̖◌〪b; a◌〪◌̩◌̖◌֚b; a◌〪◌̩◌̖◌֚b; a◌〪◌̩◌̖◌֚b; a◌〪◌̩◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING VERTICAL LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 032A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 
032A 059A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062; # 
(a◌֚◌̖◌〪◌̪b; a◌〪◌̖◌̪◌֚b; a◌〪◌̖◌̪◌֚b; a◌〪◌̖◌̪◌֚b; a◌〪◌̖◌̪◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING BRIDGE BELOW, LATIN SMALL LETTER B
-0061 032A 059A 0316 302A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 
0316 059A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062; # 
(a◌̪◌֚◌̖◌〪b; a◌〪◌̪◌̖◌֚b; a◌〪◌̪◌̖◌֚b; a◌〪◌̪◌̖◌֚b; a◌〪◌̪◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 032B 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 
032B 059A 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062; # 
(a◌֚◌̖◌〪◌̫b; a◌〪◌̖◌̫◌֚b; a◌〪◌̖◌̫◌֚b; a◌〪◌̖◌̫◌֚b; a◌〪◌̖◌̫◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING INVERTED DOUBLE ARCH BELOW, LATIN SMALL LETTER B
-0061 032B 059A 0316 302A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 
0316 059A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062; # 
(a◌̫◌֚◌̖◌〪b; a◌〪◌̫◌̖◌֚b; a◌〪◌̫◌̖◌֚b; a◌〪◌̫◌̖◌֚b; a◌〪◌̫◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING INVERTED DOUBLE ARCH BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 032C 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 
032C 059A 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062; # 
(a◌֚◌̖◌〪◌̬b; a◌〪◌̖◌̬◌֚b; a◌〪◌̖◌̬◌֚b; a◌〪◌̖◌̬◌֚b; a◌〪◌̖◌̬◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING CARON BELOW, LATIN SMALL LETTER B
-0061 032C 059A 0316 302A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 
0316 059A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062; # 
(a◌̬◌֚◌̖◌〪b; a◌〪◌̬◌̖◌֚b; a◌〪◌̬◌̖◌֚b; a◌〪◌̬◌̖◌֚b; a◌〪◌̬◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING CARON BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 032D 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 
032D 059A 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062; # 
(a◌֚◌̖◌〪◌̭b; a◌〪◌̖◌̭◌֚b; a◌〪◌̖◌̭◌֚b; a◌〪◌̖◌̭◌֚b; a◌〪◌̖◌̭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING CIRCUMFLEX ACCENT BELOW, LATIN SMALL LETTER B
-0061 032D 059A 0316 302A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 
0316 059A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062; # 
(a◌̭◌֚◌̖◌〪b; a◌〪◌̭◌̖◌֚b; a◌〪◌̭◌̖◌֚b; a◌〪◌̭◌̖◌֚b; a◌〪◌̭◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING CIRCUMFLEX ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 032E 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 
032E 059A 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062; # 
(a◌֚◌̖◌〪◌̮b; a◌〪◌̖◌̮◌֚b; a◌〪◌̖◌̮◌֚b; a◌〪◌̖◌̮◌֚b; a◌〪◌̖◌̮◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING BREVE BELOW, LATIN SMALL LETTER B
-0061 032E 059A 0316 302A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 
0316 059A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062; # 
(a◌̮◌֚◌̖◌〪b; a◌〪◌̮◌̖◌֚b; a◌〪◌̮◌̖◌֚b; a◌〪◌̮◌̖◌֚b; a◌〪◌̮◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING BREVE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 032F 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 
032F 059A 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062; # 
(a◌֚◌̖◌〪◌̯b; a◌〪◌̖◌̯◌֚b; a◌〪◌̖◌̯◌֚b; a◌〪◌̖◌̯◌֚b; a◌〪◌̖◌̯◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING INVERTED BREVE BELOW, LATIN SMALL LETTER B
-0061 032F 059A 0316 302A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 
0316 059A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062; # 
(a◌̯◌֚◌̖◌〪b; a◌〪◌̯◌̖◌֚b; a◌〪◌̯◌̖◌֚b; a◌〪◌̯◌̖◌֚b; a◌〪◌̯◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING INVERTED BREVE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0330 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 
0330 059A 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062; # 
(a◌֚◌̖◌〪◌̰b; a◌〪◌̖◌̰◌֚b; a◌〪◌̖◌̰◌֚b; a◌〪◌̖◌̰◌֚b; a◌〪◌̖◌̰◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING TILDE BELOW, LATIN SMALL LETTER B
-0061 0330 059A 0316 302A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 
0316 059A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062; # 
(a◌̰◌֚◌̖◌〪b; a◌〪◌̰◌̖◌֚b; a◌〪◌̰◌̖◌֚b; a◌〪◌̰◌̖◌֚b; a◌〪◌̰◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING TILDE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0331 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 
0331 059A 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062; # 
(a◌֚◌̖◌〪◌̱b; a◌〪◌̖◌̱◌֚b; a◌〪◌̖◌̱◌֚b; a◌〪◌̖◌̱◌֚b; a◌〪◌̖◌̱◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING MACRON BELOW, LATIN SMALL LETTER B
-0061 0331 059A 0316 302A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 
0316 059A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062; # 
(a◌̱◌֚◌̖◌〪b; a◌〪◌̱◌̖◌֚b; a◌〪◌̱◌̖◌֚b; a◌〪◌̱◌̖◌֚b; a◌〪◌̱◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING MACRON BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0332 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 
0332 059A 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062; # 
(a◌֚◌̖◌〪◌̲b; a◌〪◌̖◌̲◌֚b; a◌〪◌̖◌̲◌֚b; a◌〪◌̖◌̲◌֚b; a◌〪◌̖◌̲◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LOW LINE, LATIN SMALL LETTER B
-0061 0332 059A 0316 302A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 
0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062; # 
(a◌̲◌֚◌̖◌〪b; a◌〪◌̲◌̖◌֚b; a◌〪◌̲◌̖◌֚b; a◌〪◌̲◌̖◌֚b; a◌〪◌̲◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LOW LINE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0333 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 
0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062; # 
(a◌֚◌̖◌〪◌̳b; a◌〪◌̖◌̳◌֚b; a◌〪◌̖◌̳◌֚b; a◌〪◌̖◌̳◌֚b; a◌〪◌̖◌̳◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING DOUBLE LOW LINE, LATIN SMALL LETTER B
-0061 0333 059A 0316 302A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 
0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062; # 
(a◌̳◌֚◌̖◌〪b; a◌〪◌̳◌̖◌֚b; a◌〪◌̳◌̖◌֚b; a◌〪◌̳◌̖◌֚b; a◌〪◌̳◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE LOW LINE, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0329 0062;0061 1DFA 0316 0329 059A 0062;0061 1DFA 0316 
0329 059A 0062;0061 1DFA 0316 0329 059A 0062;0061 1DFA 0316 0329 059A 0062; # 
(a◌֚◌̖◌᷺◌̩b; a◌᷺◌̖◌̩◌֚b; a◌᷺◌̖◌̩◌֚b; a◌᷺◌̖◌̩◌֚b; a◌᷺◌̖◌̩◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING VERTICAL LINE BELOW, LATIN SMALL LETTER B
+0061 0329 059A 0316 1DFA 0062;0061 1DFA 0329 0316 059A 0062;0061 1DFA 0329 
0316 059A 0062;0061 1DFA 0329 0316 059A 0062;0061 1DFA 0329 0316 059A 0062; # 
(a◌̩◌֚◌̖◌᷺b; a◌᷺◌̩◌̖◌֚b; a◌᷺◌̩◌̖◌֚b; a◌᷺◌̩◌̖◌֚b; a◌᷺◌̩◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING VERTICAL LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 032A 0062;0061 1DFA 0316 032A 059A 0062;0061 1DFA 0316 
032A 059A 0062;0061 1DFA 0316 032A 059A 0062;0061 1DFA 0316 032A 059A 0062; # 
(a◌֚◌̖◌᷺◌̪b; a◌᷺◌̖◌̪◌֚b; a◌᷺◌̖◌̪◌֚b; a◌᷺◌̖◌̪◌֚b; a◌᷺◌̖◌̪◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING BRIDGE BELOW, LATIN SMALL LETTER B
+0061 032A 059A 0316 1DFA 0062;0061 1DFA 032A 0316 059A 0062;0061 1DFA 032A 
0316 059A 0062;0061 1DFA 032A 0316 059A 0062;0061 1DFA 032A 0316 059A 0062; # 
(a◌̪◌֚◌̖◌᷺b; a◌᷺◌̪◌̖◌֚b; a◌᷺◌̪◌̖◌֚b; a◌᷺◌̪◌̖◌֚b; a◌᷺◌̪◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 032B 0062;0061 1DFA 0316 032B 059A 0062;0061 1DFA 0316 
032B 059A 0062;0061 1DFA 0316 032B 059A 0062;0061 1DFA 0316 032B 059A 0062; # 
(a◌֚◌̖◌᷺◌̫b; a◌᷺◌̖◌̫◌֚b; a◌᷺◌̖◌̫◌֚b; a◌᷺◌̖◌̫◌֚b; a◌᷺◌̖◌̫◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING INVERTED DOUBLE ARCH BELOW, LATIN SMALL LETTER B
+0061 032B 059A 0316 1DFA 0062;0061 1DFA 032B 0316 059A 0062;0061 1DFA 032B 
0316 059A 0062;0061 1DFA 032B 0316 059A 0062;0061 1DFA 032B 0316 059A 0062; # 
(a◌̫◌֚◌̖◌᷺b; a◌᷺◌̫◌̖◌֚b; a◌᷺◌̫◌̖◌֚b; a◌᷺◌̫◌̖◌֚b; a◌᷺◌̫◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING INVERTED DOUBLE ARCH BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 032C 0062;0061 1DFA 0316 032C 059A 0062;0061 1DFA 0316 
032C 059A 0062;0061 1DFA 0316 032C 059A 0062;0061 1DFA 0316 032C 059A 0062; # 
(a◌֚◌̖◌᷺◌̬b; a◌᷺◌̖◌̬◌֚b; a◌᷺◌̖◌̬◌֚b; a◌᷺◌̖◌̬◌֚b; a◌᷺◌̖◌̬◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING CARON BELOW, LATIN SMALL LETTER B
+0061 032C 059A 0316 1DFA 0062;0061 1DFA 032C 0316 059A 0062;0061 1DFA 032C 
0316 059A 0062;0061 1DFA 032C 0316 059A 0062;0061 1DFA 032C 0316 059A 0062; # 
(a◌̬◌֚◌̖◌᷺b; a◌᷺◌̬◌̖◌֚b; a◌᷺◌̬◌̖◌֚b; a◌᷺◌̬◌̖◌֚b; a◌᷺◌̬◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING CARON BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 032D 0062;0061 1DFA 0316 032D 059A 0062;0061 1DFA 0316 
032D 059A 0062;0061 1DFA 0316 032D 059A 0062;0061 1DFA 0316 032D 059A 0062; # 
(a◌֚◌̖◌᷺◌̭b; a◌᷺◌̖◌̭◌֚b; a◌᷺◌̖◌̭◌֚b; a◌᷺◌̖◌̭◌֚b; a◌᷺◌̖◌̭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING CIRCUMFLEX ACCENT BELOW, LATIN SMALL LETTER B
+0061 032D 059A 0316 1DFA 0062;0061 1DFA 032D 0316 059A 0062;0061 1DFA 032D 
0316 059A 0062;0061 1DFA 032D 0316 059A 0062;0061 1DFA 032D 0316 059A 0062; # 
(a◌̭◌֚◌̖◌᷺b; a◌᷺◌̭◌̖◌֚b; a◌᷺◌̭◌̖◌֚b; a◌᷺◌̭◌̖◌֚b; a◌᷺◌̭◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING CIRCUMFLEX ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 032E 0062;0061 1DFA 0316 032E 059A 0062;0061 1DFA 0316 
032E 059A 0062;0061 1DFA 0316 032E 059A 0062;0061 1DFA 0316 032E 059A 0062; # 
(a◌֚◌̖◌᷺◌̮b; a◌᷺◌̖◌̮◌֚b; a◌᷺◌̖◌̮◌֚b; a◌᷺◌̖◌̮◌֚b; a◌᷺◌̖◌̮◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING BREVE BELOW, LATIN SMALL LETTER B
+0061 032E 059A 0316 1DFA 0062;0061 1DFA 032E 0316 059A 0062;0061 1DFA 032E 
0316 059A 0062;0061 1DFA 032E 0316 059A 0062;0061 1DFA 032E 0316 059A 0062; # 
(a◌̮◌֚◌̖◌᷺b; a◌᷺◌̮◌̖◌֚b; a◌᷺◌̮◌̖◌֚b; a◌᷺◌̮◌̖◌֚b; a◌᷺◌̮◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING BREVE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 032F 0062;0061 1DFA 0316 032F 059A 0062;0061 1DFA 0316 
032F 059A 0062;0061 1DFA 0316 032F 059A 0062;0061 1DFA 0316 032F 059A 0062; # 
(a◌֚◌̖◌᷺◌̯b; a◌᷺◌̖◌̯◌֚b; a◌᷺◌̖◌̯◌֚b; a◌᷺◌̖◌̯◌֚b; a◌᷺◌̖◌̯◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING INVERTED BREVE BELOW, LATIN SMALL LETTER B
+0061 032F 059A 0316 1DFA 0062;0061 1DFA 032F 0316 059A 0062;0061 1DFA 032F 
0316 059A 0062;0061 1DFA 032F 0316 059A 0062;0061 1DFA 032F 0316 059A 0062; # 
(a◌̯◌֚◌̖◌᷺b; a◌᷺◌̯◌̖◌֚b; a◌᷺◌̯◌̖◌֚b; a◌᷺◌̯◌̖◌֚b; a◌᷺◌̯◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING INVERTED BREVE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0330 0062;0061 1DFA 0316 0330 059A 0062;0061 1DFA 0316 
0330 059A 0062;0061 1DFA 0316 0330 059A 0062;0061 1DFA 0316 0330 059A 0062; # 
(a◌֚◌̖◌᷺◌̰b; a◌᷺◌̖◌̰◌֚b; a◌᷺◌̖◌̰◌֚b; a◌᷺◌̖◌̰◌֚b; a◌᷺◌̖◌̰◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING TILDE BELOW, LATIN SMALL LETTER B
+0061 0330 059A 0316 1DFA 0062;0061 1DFA 0330 0316 059A 0062;0061 1DFA 0330 
0316 059A 0062;0061 1DFA 0330 0316 059A 0062;0061 1DFA 0330 0316 059A 0062; # 
(a◌̰◌֚◌̖◌᷺b; a◌᷺◌̰◌̖◌֚b; a◌᷺◌̰◌̖◌֚b; a◌᷺◌̰◌̖◌֚b; a◌᷺◌̰◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING TILDE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0331 0062;0061 1DFA 0316 0331 059A 0062;0061 1DFA 0316 
0331 059A 0062;0061 1DFA 0316 0331 059A 0062;0061 1DFA 0316 0331 059A 0062; # 
(a◌֚◌̖◌᷺◌̱b; a◌᷺◌̖◌̱◌֚b; a◌᷺◌̖◌̱◌֚b; a◌᷺◌̖◌̱◌֚b; a◌᷺◌̖◌̱◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING MACRON BELOW, LATIN SMALL LETTER B
+0061 0331 059A 0316 1DFA 0062;0061 1DFA 0331 0316 059A 0062;0061 1DFA 0331 
0316 059A 0062;0061 1DFA 0331 0316 059A 0062;0061 1DFA 0331 0316 059A 0062; # 
(a◌̱◌֚◌̖◌᷺b; a◌᷺◌̱◌̖◌֚b; a◌᷺◌̱◌̖◌֚b; a◌᷺◌̱◌̖◌֚b; a◌᷺◌̱◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING MACRON BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0332 0062;0061 1DFA 0316 0332 059A 0062;0061 1DFA 0316 
0332 059A 0062;0061 1DFA 0316 0332 059A 0062;0061 1DFA 0316 0332 059A 0062; # 
(a◌֚◌̖◌᷺◌̲b; a◌᷺◌̖◌̲◌֚b; a◌᷺◌̖◌̲◌֚b; a◌᷺◌̖◌̲◌֚b; a◌᷺◌̖◌̲◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LOW LINE, LATIN SMALL LETTER B
+0061 0332 059A 0316 1DFA 0062;0061 1DFA 0332 0316 059A 0062;0061 1DFA 0332 
0316 059A 0062;0061 1DFA 0332 0316 059A 0062;0061 1DFA 0332 0316 059A 0062; # 
(a◌̲◌֚◌̖◌᷺b; a◌᷺◌̲◌̖◌֚b; a◌᷺◌̲◌̖◌֚b; a◌᷺◌̲◌̖◌֚b; a◌᷺◌̲◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LOW LINE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0333 0062;0061 1DFA 0316 0333 059A 0062;0061 1DFA 0316 
0333 059A 0062;0061 1DFA 0316 0333 059A 0062;0061 1DFA 0316 0333 059A 0062; # 
(a◌֚◌̖◌᷺◌̳b; a◌᷺◌̖◌̳◌֚b; a◌᷺◌̖◌̳◌֚b; a◌᷺◌̖◌̳◌֚b; a◌᷺◌̖◌̳◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING DOUBLE LOW LINE, LATIN SMALL LETTER B
+0061 0333 059A 0316 1DFA 0062;0061 1DFA 0333 0316 059A 0062;0061 1DFA 0333 
0316 059A 0062;0061 1DFA 0333 0316 059A 0062;0061 1DFA 0333 0316 059A 0062; # 
(a◌̳◌֚◌̖◌᷺b; a◌᷺◌̳◌̖◌֚b; a◌᷺◌̳◌̖◌֚b; a◌᷺◌̳◌̖◌֚b; a◌᷺◌̳◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE LOW LINE, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 16FF0 0334 0334 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 
0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062; # (a𖿰◌̴◌̴b; a◌̴◌̴𖿰b; 
a◌̴◌̴𖿰b; a◌̴◌̴𖿰b; a◌̴◌̴𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE ALTERNATE READING 
MARK CA, COMBINING TILDE OVERLAY, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
 0061 0334 16FF0 0334 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 
0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062; # (a◌̴𖿰◌̴b; a◌̴◌̴𖿰b; 
a◌̴◌̴𖿰b; a◌̴◌̴𖿰b; a◌̴◌̴𖿰b; ) LATIN SMALL LETTER A, COMBINING TILDE OVERLAY, 
VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, LATIN SMALL 
LETTER B
 0061 16FF0 0334 0335 0062;0061 0334 0335 16FF0 0062;0061 0334 0335 16FF0 
0062;0061 0334 0335 16FF0 0062;0061 0334 0335 16FF0 0062; # (a𖿰◌̴◌̵b; a◌̴◌̵𖿰b; 
a◌̴◌̵𖿰b; a◌̴◌̵𖿰b; a◌̴◌̵𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE ALTERNATE READING 
MARK CA, COMBINING TILDE OVERLAY, COMBINING SHORT STROKE OVERLAY, LATIN SMALL 
LETTER B
@@ -17095,14 +17154,14 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 0337 16FF0 0334 0062;0061 0337 0334 16FF0 0062;0061 0337 0334 16FF0 
0062;0061 0337 0334 16FF0 0062;0061 0337 0334 16FF0 0062; # (a◌̷𖿰◌̴b; a◌̷◌̴𖿰b; 
a◌̷◌̴𖿰b; a◌̷◌̴𖿰b; a◌̷◌̴𖿰b; ) LATIN SMALL LETTER A, COMBINING SHORT SOLIDUS 
OVERLAY, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, LATIN 
SMALL LETTER B
 0061 16FF0 0334 0338 0062;0061 0334 0338 16FF0 0062;0061 0334 0338 16FF0 
0062;0061 0334 0338 16FF0 0062;0061 0334 0338 16FF0 0062; # (a𖿰◌̴◌̸b; a◌̴◌̸𖿰b; 
a◌̴◌̸𖿰b; a◌̴◌̸𖿰b; a◌̴◌̸𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE ALTERNATE READING 
MARK CA, COMBINING TILDE OVERLAY, COMBINING LONG SOLIDUS OVERLAY, LATIN SMALL 
LETTER B
 0061 0338 16FF0 0334 0062;0061 0338 0334 16FF0 0062;0061 0338 0334 16FF0 
0062;0061 0338 0334 16FF0 0062;0061 0338 0334 16FF0 0062; # (a◌̸𖿰◌̴b; a◌̸◌̴𖿰b; 
a◌̸◌̴𖿰b; a◌̸◌̴𖿰b; a◌̸◌̴𖿰b; ) LATIN SMALL LETTER A, COMBINING LONG SOLIDUS 
OVERLAY, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, LATIN 
SMALL LETTER B
-0061 059A 0316 302A 0339 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 
0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062; # 
(a◌֚◌̖◌〪◌̹b; a◌〪◌̖◌̹◌֚b; a◌〪◌̖◌̹◌֚b; a◌〪◌̖◌̹◌֚b; a◌〪◌̖◌̹◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING RIGHT HALF RING BELOW, LATIN SMALL LETTER B
-0061 0339 059A 0316 302A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 
0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062; # 
(a◌̹◌֚◌̖◌〪b; a◌〪◌̹◌̖◌֚b; a◌〪◌̹◌̖◌֚b; a◌〪◌̹◌̖◌֚b; a◌〪◌̹◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT HALF RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 033A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 
033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062; # 
(a◌֚◌̖◌〪◌̺b; a◌〪◌̖◌̺◌֚b; a◌〪◌̖◌̺◌֚b; a◌〪◌̖◌̺◌֚b; a◌〪◌̖◌̺◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING INVERTED BRIDGE BELOW, LATIN SMALL LETTER B
-0061 033A 059A 0316 302A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 
0316 059A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062; # 
(a◌̺◌֚◌̖◌〪b; a◌〪◌̺◌̖◌֚b; a◌〪◌̺◌̖◌֚b; a◌〪◌̺◌̖◌֚b; a◌〪◌̺◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING INVERTED BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 033B 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 
033B 059A 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062; # 
(a◌֚◌̖◌〪◌̻b; a◌〪◌̖◌̻◌֚b; a◌〪◌̖◌̻◌֚b; a◌〪◌̖◌̻◌֚b; a◌〪◌̖◌̻◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING SQUARE BELOW, LATIN SMALL LETTER B
-0061 033B 059A 0316 302A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 
0316 059A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062; # 
(a◌̻◌֚◌̖◌〪b; a◌〪◌̻◌̖◌֚b; a◌〪◌̻◌̖◌֚b; a◌〪◌̻◌̖◌֚b; a◌〪◌̻◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING SQUARE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 033C 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 
033C 059A 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062; # 
(a◌֚◌̖◌〪◌̼b; a◌〪◌̖◌̼◌֚b; a◌〪◌̖◌̼◌֚b; a◌〪◌̖◌̼◌֚b; a◌〪◌̖◌̼◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING SEAGULL BELOW, LATIN SMALL LETTER B
-0061 033C 059A 0316 302A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 
0316 059A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062; # 
(a◌̼◌֚◌̖◌〪b; a◌〪◌̼◌̖◌֚b; a◌〪◌̼◌̖◌֚b; a◌〪◌̼◌̖◌֚b; a◌〪◌̼◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING SEAGULL BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0339 0062;0061 1DFA 0316 0339 059A 0062;0061 1DFA 0316 
0339 059A 0062;0061 1DFA 0316 0339 059A 0062;0061 1DFA 0316 0339 059A 0062; # 
(a◌֚◌̖◌᷺◌̹b; a◌᷺◌̖◌̹◌֚b; a◌᷺◌̖◌̹◌֚b; a◌᷺◌̖◌̹◌֚b; a◌᷺◌̖◌̹◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING RIGHT HALF RING BELOW, LATIN SMALL LETTER B
+0061 0339 059A 0316 1DFA 0062;0061 1DFA 0339 0316 059A 0062;0061 1DFA 0339 
0316 059A 0062;0061 1DFA 0339 0316 059A 0062;0061 1DFA 0339 0316 059A 0062; # 
(a◌̹◌֚◌̖◌᷺b; a◌᷺◌̹◌̖◌֚b; a◌᷺◌̹◌̖◌֚b; a◌᷺◌̹◌̖◌֚b; a◌᷺◌̹◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT HALF RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 033A 0062;0061 1DFA 0316 033A 059A 0062;0061 1DFA 0316 
033A 059A 0062;0061 1DFA 0316 033A 059A 0062;0061 1DFA 0316 033A 059A 0062; # 
(a◌֚◌̖◌᷺◌̺b; a◌᷺◌̖◌̺◌֚b; a◌᷺◌̖◌̺◌֚b; a◌᷺◌̖◌̺◌֚b; a◌᷺◌̖◌̺◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING INVERTED BRIDGE BELOW, LATIN SMALL LETTER B
+0061 033A 059A 0316 1DFA 0062;0061 1DFA 033A 0316 059A 0062;0061 1DFA 033A 
0316 059A 0062;0061 1DFA 033A 0316 059A 0062;0061 1DFA 033A 0316 059A 0062; # 
(a◌̺◌֚◌̖◌᷺b; a◌᷺◌̺◌̖◌֚b; a◌᷺◌̺◌̖◌֚b; a◌᷺◌̺◌̖◌֚b; a◌᷺◌̺◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING INVERTED BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 033B 0062;0061 1DFA 0316 033B 059A 0062;0061 1DFA 0316 
033B 059A 0062;0061 1DFA 0316 033B 059A 0062;0061 1DFA 0316 033B 059A 0062; # 
(a◌֚◌̖◌᷺◌̻b; a◌᷺◌̖◌̻◌֚b; a◌᷺◌̖◌̻◌֚b; a◌᷺◌̖◌̻◌֚b; a◌᷺◌̖◌̻◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING SQUARE BELOW, LATIN SMALL LETTER B
+0061 033B 059A 0316 1DFA 0062;0061 1DFA 033B 0316 059A 0062;0061 1DFA 033B 
0316 059A 0062;0061 1DFA 033B 0316 059A 0062;0061 1DFA 033B 0316 059A 0062; # 
(a◌̻◌֚◌̖◌᷺b; a◌᷺◌̻◌̖◌֚b; a◌᷺◌̻◌̖◌֚b; a◌᷺◌̻◌̖◌֚b; a◌᷺◌̻◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING SQUARE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 033C 0062;0061 1DFA 0316 033C 059A 0062;0061 1DFA 0316 
033C 059A 0062;0061 1DFA 0316 033C 059A 0062;0061 1DFA 0316 033C 059A 0062; # 
(a◌֚◌̖◌᷺◌̼b; a◌᷺◌̖◌̼◌֚b; a◌᷺◌̖◌̼◌֚b; a◌᷺◌̖◌̼◌֚b; a◌᷺◌̖◌̼◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING SEAGULL BELOW, LATIN SMALL LETTER B
+0061 033C 059A 0316 1DFA 0062;0061 1DFA 033C 0316 059A 0062;0061 1DFA 033C 
0316 059A 0062;0061 1DFA 033C 0316 059A 0062;0061 1DFA 033C 0316 059A 0062; # 
(a◌̼◌֚◌̖◌᷺b; a◌᷺◌̼◌̖◌֚b; a◌᷺◌̼◌̖◌֚b; a◌᷺◌̼◌̖◌֚b; a◌᷺◌̼◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING SEAGULL BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 033D 0062;00E0 05AE 033D 0315 0062;0061 05AE 0300 033D 
0315 0062;00E0 05AE 033D 0315 0062;0061 05AE 0300 033D 0315 0062; # 
(a◌̕◌̀◌֮◌̽b; à◌֮◌̽◌̕b; a◌֮◌̀◌̽◌̕b; à◌֮◌̽◌̕b; a◌֮◌̀◌̽◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING X ABOVE, LATIN SMALL LETTER B
 0061 033D 0315 0300 05AE 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 
0300 0315 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062; # 
(a◌̽◌̕◌̀◌֮b; a◌֮◌̽◌̀◌̕b; a◌֮◌̽◌̀◌̕b; a◌֮◌̽◌̀◌̕b; a◌֮◌̽◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING X ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 033E 0062;00E0 05AE 033E 0315 0062;0061 05AE 0300 033E 
0315 0062;00E0 05AE 033E 0315 0062;0061 05AE 0300 033E 0315 0062; # 
(a◌̕◌̀◌֮◌̾b; à◌֮◌̾◌̕b; a◌֮◌̀◌̾◌̕b; à◌֮◌̾◌̕b; a◌֮◌̀◌̾◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING VERTICAL TILDE, LATIN SMALL LETTER B
@@ -17123,44 +17182,44 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 0345 0345 035D 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 
0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062; # (a◌ͅ◌ͅ◌͝b; a◌͝◌ͅ◌ͅb; 
a◌͝◌ͅ◌ͅb; a◌͝◌ͅ◌ͅb; a◌͝◌ͅ◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK 
YPOGEGRAMMENI, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, LATIN 
SMALL LETTER B
 0061 0315 0300 05AE 0346 0062;00E0 05AE 0346 0315 0062;0061 05AE 0300 0346 
0315 0062;00E0 05AE 0346 0315 0062;0061 05AE 0300 0346 0315 0062; # 
(a◌̕◌̀◌֮◌͆b; à◌֮◌͆◌̕b; a◌֮◌̀◌͆◌̕b; à◌֮◌͆◌̕b; a◌֮◌̀◌͆◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING BRIDGE ABOVE, LATIN SMALL LETTER B
 0061 0346 0315 0300 05AE 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 
0300 0315 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062; # 
(a◌͆◌̕◌̀◌֮b; a◌֮◌͆◌̀◌̕b; a◌֮◌͆◌̀◌̕b; a◌֮◌͆◌̀◌̕b; a◌֮◌͆◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING BRIDGE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0347 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 
0347 059A 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062; # 
(a◌֚◌̖◌〪◌͇b; a◌〪◌̖◌͇◌֚b; a◌〪◌̖◌͇◌֚b; a◌〪◌̖◌͇◌֚b; a◌〪◌̖◌͇◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING EQUALS SIGN BELOW, LATIN SMALL LETTER B
-0061 0347 059A 0316 302A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 
0316 059A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062; # 
(a◌͇◌֚◌̖◌〪b; a◌〪◌͇◌̖◌֚b; a◌〪◌͇◌̖◌֚b; a◌〪◌͇◌̖◌֚b; a◌〪◌͇◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING EQUALS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0348 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 
0348 059A 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062; # 
(a◌֚◌̖◌〪◌͈b; a◌〪◌̖◌͈◌֚b; a◌〪◌̖◌͈◌֚b; a◌〪◌̖◌͈◌֚b; a◌〪◌̖◌͈◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING DOUBLE VERTICAL LINE BELOW, LATIN SMALL LETTER B
-0061 0348 059A 0316 302A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 
0316 059A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062; # 
(a◌͈◌֚◌̖◌〪b; a◌〪◌͈◌̖◌֚b; a◌〪◌͈◌̖◌֚b; a◌〪◌͈◌̖◌֚b; a◌〪◌͈◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE VERTICAL LINE BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0349 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 
0349 059A 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062; # 
(a◌֚◌̖◌〪◌͉b; a◌〪◌̖◌͉◌֚b; a◌〪◌̖◌͉◌֚b; a◌〪◌̖◌͉◌֚b; a◌〪◌̖◌͉◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LEFT ANGLE BELOW, LATIN SMALL LETTER B
-0061 0349 059A 0316 302A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 
0316 059A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062; # 
(a◌͉◌֚◌̖◌〪b; a◌〪◌͉◌̖◌֚b; a◌〪◌͉◌̖◌֚b; a◌〪◌͉◌̖◌֚b; a◌〪◌͉◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT ANGLE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0347 0062;0061 1DFA 0316 0347 059A 0062;0061 1DFA 0316 
0347 059A 0062;0061 1DFA 0316 0347 059A 0062;0061 1DFA 0316 0347 059A 0062; # 
(a◌֚◌̖◌᷺◌͇b; a◌᷺◌̖◌͇◌֚b; a◌᷺◌̖◌͇◌֚b; a◌᷺◌̖◌͇◌֚b; a◌᷺◌̖◌͇◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING EQUALS SIGN BELOW, LATIN SMALL LETTER B
+0061 0347 059A 0316 1DFA 0062;0061 1DFA 0347 0316 059A 0062;0061 1DFA 0347 
0316 059A 0062;0061 1DFA 0347 0316 059A 0062;0061 1DFA 0347 0316 059A 0062; # 
(a◌͇◌֚◌̖◌᷺b; a◌᷺◌͇◌̖◌֚b; a◌᷺◌͇◌̖◌֚b; a◌᷺◌͇◌̖◌֚b; a◌᷺◌͇◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING EQUALS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0348 0062;0061 1DFA 0316 0348 059A 0062;0061 1DFA 0316 
0348 059A 0062;0061 1DFA 0316 0348 059A 0062;0061 1DFA 0316 0348 059A 0062; # 
(a◌֚◌̖◌᷺◌͈b; a◌᷺◌̖◌͈◌֚b; a◌᷺◌̖◌͈◌֚b; a◌᷺◌̖◌͈◌֚b; a◌᷺◌̖◌͈◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING DOUBLE VERTICAL LINE BELOW, LATIN SMALL LETTER B
+0061 0348 059A 0316 1DFA 0062;0061 1DFA 0348 0316 059A 0062;0061 1DFA 0348 
0316 059A 0062;0061 1DFA 0348 0316 059A 0062;0061 1DFA 0348 0316 059A 0062; # 
(a◌͈◌֚◌̖◌᷺b; a◌᷺◌͈◌̖◌֚b; a◌᷺◌͈◌̖◌֚b; a◌᷺◌͈◌̖◌֚b; a◌᷺◌͈◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE VERTICAL LINE BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0349 0062;0061 1DFA 0316 0349 059A 0062;0061 1DFA 0316 
0349 059A 0062;0061 1DFA 0316 0349 059A 0062;0061 1DFA 0316 0349 059A 0062; # 
(a◌֚◌̖◌᷺◌͉b; a◌᷺◌̖◌͉◌֚b; a◌᷺◌̖◌͉◌֚b; a◌᷺◌̖◌͉◌֚b; a◌᷺◌̖◌͉◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LEFT ANGLE BELOW, LATIN SMALL LETTER B
+0061 0349 059A 0316 1DFA 0062;0061 1DFA 0349 0316 059A 0062;0061 1DFA 0349 
0316 059A 0062;0061 1DFA 0349 0316 059A 0062;0061 1DFA 0349 0316 059A 0062; # 
(a◌͉◌֚◌̖◌᷺b; a◌᷺◌͉◌̖◌֚b; a◌᷺◌͉◌̖◌֚b; a◌᷺◌͉◌̖◌֚b; a◌᷺◌͉◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT ANGLE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 034A 0062;00E0 05AE 034A 0315 0062;0061 05AE 0300 034A 
0315 0062;00E0 05AE 034A 0315 0062;0061 05AE 0300 034A 0315 0062; # 
(a◌̕◌̀◌֮◌͊b; à◌֮◌͊◌̕b; a◌֮◌̀◌͊◌̕b; à◌֮◌͊◌̕b; a◌֮◌̀◌͊◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING NOT TILDE ABOVE, LATIN SMALL LETTER B
 0061 034A 0315 0300 05AE 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 
0300 0315 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062; # 
(a◌͊◌̕◌̀◌֮b; a◌֮◌͊◌̀◌̕b; a◌֮◌͊◌̀◌̕b; a◌֮◌͊◌̀◌̕b; a◌֮◌͊◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING NOT TILDE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 034B 0062;00E0 05AE 034B 0315 0062;0061 05AE 0300 034B 
0315 0062;00E0 05AE 034B 0315 0062;0061 05AE 0300 034B 0315 0062; # 
(a◌̕◌̀◌֮◌͋b; à◌֮◌͋◌̕b; a◌֮◌̀◌͋◌̕b; à◌֮◌͋◌̕b; a◌֮◌̀◌͋◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING HOMOTHETIC ABOVE, LATIN SMALL LETTER B
 0061 034B 0315 0300 05AE 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 
0300 0315 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062; # 
(a◌͋◌̕◌̀◌֮b; a◌֮◌͋◌̀◌̕b; a◌֮◌͋◌̀◌̕b; a◌֮◌͋◌̀◌̕b; a◌֮◌͋◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING HOMOTHETIC ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 034C 0062;00E0 05AE 034C 0315 0062;0061 05AE 0300 034C 
0315 0062;00E0 05AE 034C 0315 0062;0061 05AE 0300 034C 0315 0062; # 
(a◌̕◌̀◌֮◌͌b; à◌֮◌͌◌̕b; a◌֮◌̀◌͌◌̕b; à◌֮◌͌◌̕b; a◌֮◌̀◌͌◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING ALMOST EQUAL TO ABOVE, LATIN SMALL LETTER B
 0061 034C 0315 0300 05AE 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 
0300 0315 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062; # 
(a◌͌◌̕◌̀◌֮b; a◌֮◌͌◌̀◌̕b; a◌֮◌͌◌̀◌̕b; a◌֮◌͌◌̀◌̕b; a◌֮◌͌◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING ALMOST EQUAL TO ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 034D 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 
034D 059A 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062; # 
(a◌֚◌̖◌〪◌͍b; a◌〪◌̖◌͍◌֚b; a◌〪◌̖◌͍◌֚b; a◌〪◌̖◌͍◌֚b; a◌〪◌̖◌͍◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LEFT RIGHT ARROW BELOW, LATIN SMALL LETTER B
-0061 034D 059A 0316 302A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 
0316 059A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062; # 
(a◌͍◌֚◌̖◌〪b; a◌〪◌͍◌̖◌֚b; a◌〪◌͍◌̖◌֚b; a◌〪◌͍◌̖◌֚b; a◌〪◌͍◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT RIGHT ARROW BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 034E 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 
034E 059A 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062; # 
(a◌֚◌̖◌〪◌͎b; a◌〪◌̖◌͎◌֚b; a◌〪◌̖◌͎◌֚b; a◌〪◌̖◌͎◌֚b; a◌〪◌̖◌͎◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING UPWARDS ARROW BELOW, LATIN SMALL LETTER B
-0061 034E 059A 0316 302A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 
0316 059A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062; # 
(a◌͎◌֚◌̖◌〪b; a◌〪◌͎◌̖◌֚b; a◌〪◌͎◌̖◌֚b; a◌〪◌͎◌̖◌֚b; a◌〪◌͎◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING UPWARDS ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 034D 0062;0061 1DFA 0316 034D 059A 0062;0061 1DFA 0316 
034D 059A 0062;0061 1DFA 0316 034D 059A 0062;0061 1DFA 0316 034D 059A 0062; # 
(a◌֚◌̖◌᷺◌͍b; a◌᷺◌̖◌͍◌֚b; a◌᷺◌̖◌͍◌֚b; a◌᷺◌̖◌͍◌֚b; a◌᷺◌̖◌͍◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LEFT RIGHT ARROW BELOW, LATIN SMALL LETTER B
+0061 034D 059A 0316 1DFA 0062;0061 1DFA 034D 0316 059A 0062;0061 1DFA 034D 
0316 059A 0062;0061 1DFA 034D 0316 059A 0062;0061 1DFA 034D 0316 059A 0062; # 
(a◌͍◌֚◌̖◌᷺b; a◌᷺◌͍◌̖◌֚b; a◌᷺◌͍◌̖◌֚b; a◌᷺◌͍◌̖◌֚b; a◌᷺◌͍◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT RIGHT ARROW BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 034E 0062;0061 1DFA 0316 034E 059A 0062;0061 1DFA 0316 
034E 059A 0062;0061 1DFA 0316 034E 059A 0062;0061 1DFA 0316 034E 059A 0062; # 
(a◌֚◌̖◌᷺◌͎b; a◌᷺◌̖◌͎◌֚b; a◌᷺◌̖◌͎◌֚b; a◌᷺◌̖◌͎◌֚b; a◌᷺◌̖◌͎◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING UPWARDS ARROW BELOW, LATIN SMALL LETTER B
+0061 034E 059A 0316 1DFA 0062;0061 1DFA 034E 0316 059A 0062;0061 1DFA 034E 
0316 059A 0062;0061 1DFA 034E 0316 059A 0062;0061 1DFA 034E 0316 059A 0062; # 
(a◌͎◌֚◌̖◌᷺b; a◌᷺◌͎◌̖◌֚b; a◌᷺◌͎◌̖◌֚b; a◌᷺◌͎◌̖◌֚b; a◌᷺◌͎◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING UPWARDS ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0350 0062;00E0 05AE 0350 0315 0062;0061 05AE 0300 0350 
0315 0062;00E0 05AE 0350 0315 0062;0061 05AE 0300 0350 0315 0062; # 
(a◌̕◌̀◌֮◌͐b; à◌֮◌͐◌̕b; a◌֮◌̀◌͐◌̕b; à◌֮◌͐◌̕b; a◌֮◌̀◌͐◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING RIGHT ARROWHEAD ABOVE, LATIN SMALL LETTER B
 0061 0350 0315 0300 05AE 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 
0300 0315 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 0300 0315 0062; # 
(a◌͐◌̕◌̀◌֮b; a◌֮◌͐◌̀◌̕b; a◌֮◌͐◌̀◌̕b; a◌֮◌͐◌̀◌̕b; a◌֮◌͐◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT ARROWHEAD ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0351 0062;00E0 05AE 0351 0315 0062;0061 05AE 0300 0351 
0315 0062;00E0 05AE 0351 0315 0062;0061 05AE 0300 0351 0315 0062; # 
(a◌̕◌̀◌֮◌͑b; à◌֮◌͑◌̕b; a◌֮◌̀◌͑◌̕b; à◌֮◌͑◌̕b; a◌֮◌̀◌͑◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING LEFT HALF RING ABOVE, LATIN SMALL LETTER B
 0061 0351 0315 0300 05AE 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 
0300 0315 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 0300 0315 0062; # 
(a◌͑◌̕◌̀◌֮b; a◌֮◌͑◌̀◌̕b; a◌֮◌͑◌̀◌̕b; a◌֮◌͑◌̀◌̕b; a◌֮◌͑◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING LEFT HALF RING ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0352 0062;00E0 05AE 0352 0315 0062;0061 05AE 0300 0352 
0315 0062;00E0 05AE 0352 0315 0062;0061 05AE 0300 0352 0315 0062; # 
(a◌̕◌̀◌֮◌͒b; à◌֮◌͒◌̕b; a◌֮◌̀◌͒◌̕b; à◌֮◌͒◌̕b; a◌֮◌̀◌͒◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING FERMATA, LATIN SMALL LETTER B
 0061 0352 0315 0300 05AE 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 
0300 0315 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 0300 0315 0062; # 
(a◌͒◌̕◌̀◌֮b; a◌֮◌͒◌̀◌̕b; a◌֮◌͒◌̀◌̕b; a◌֮◌͒◌̀◌̕b; a◌֮◌͒◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING FERMATA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0353 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 
0353 059A 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 0353 059A 0062; # 
(a◌֚◌̖◌〪◌͓b; a◌〪◌̖◌͓◌֚b; a◌〪◌̖◌͓◌֚b; a◌〪◌̖◌͓◌֚b; a◌〪◌̖◌͓◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING X BELOW, LATIN SMALL LETTER B
-0061 0353 059A 0316 302A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 
0316 059A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 0316 059A 0062; # 
(a◌͓◌֚◌̖◌〪b; a◌〪◌͓◌̖◌֚b; a◌〪◌͓◌̖◌֚b; a◌〪◌͓◌̖◌֚b; a◌〪◌͓◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING X BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0354 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 
0354 059A 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 0354 059A 0062; # 
(a◌֚◌̖◌〪◌͔b; a◌〪◌̖◌͔◌֚b; a◌〪◌̖◌͔◌֚b; a◌〪◌̖◌͔◌֚b; a◌〪◌̖◌͔◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LEFT ARROWHEAD BELOW, LATIN SMALL LETTER B
-0061 0354 059A 0316 302A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 
0316 059A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 0316 059A 0062; # 
(a◌͔◌֚◌̖◌〪b; a◌〪◌͔◌̖◌֚b; a◌〪◌͔◌̖◌֚b; a◌〪◌͔◌̖◌֚b; a◌〪◌͔◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0355 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 
0355 059A 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 0355 059A 0062; # 
(a◌֚◌̖◌〪◌͕b; a◌〪◌̖◌͕◌֚b; a◌〪◌̖◌͕◌֚b; a◌〪◌̖◌͕◌֚b; a◌〪◌̖◌͕◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING RIGHT ARROWHEAD BELOW, LATIN SMALL LETTER B
-0061 0355 059A 0316 302A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 
0316 059A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 0316 059A 0062; # 
(a◌͕◌֚◌̖◌〪b; a◌〪◌͕◌̖◌֚b; a◌〪◌͕◌̖◌֚b; a◌〪◌͕◌̖◌֚b; a◌〪◌͕◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0356 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 
0356 059A 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 0356 059A 0062; # 
(a◌֚◌̖◌〪◌͖b; a◌〪◌̖◌͖◌֚b; a◌〪◌̖◌͖◌֚b; a◌〪◌̖◌͖◌֚b; a◌〪◌̖◌͖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW, LATIN SMALL LETTER 
B
-0061 0356 059A 0316 302A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 
0316 059A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062; # 
(a◌͖◌֚◌̖◌〪b; a◌〪◌͖◌̖◌֚b; a◌〪◌͖◌̖◌֚b; a◌〪◌͖◌̖◌֚b; a◌〪◌͖◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL 
LETTER B
+0061 059A 0316 1DFA 0353 0062;0061 1DFA 0316 0353 059A 0062;0061 1DFA 0316 
0353 059A 0062;0061 1DFA 0316 0353 059A 0062;0061 1DFA 0316 0353 059A 0062; # 
(a◌֚◌̖◌᷺◌͓b; a◌᷺◌̖◌͓◌֚b; a◌᷺◌̖◌͓◌֚b; a◌᷺◌̖◌͓◌֚b; a◌᷺◌̖◌͓◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING X BELOW, LATIN SMALL LETTER B
+0061 0353 059A 0316 1DFA 0062;0061 1DFA 0353 0316 059A 0062;0061 1DFA 0353 
0316 059A 0062;0061 1DFA 0353 0316 059A 0062;0061 1DFA 0353 0316 059A 0062; # 
(a◌͓◌֚◌̖◌᷺b; a◌᷺◌͓◌̖◌֚b; a◌᷺◌͓◌̖◌֚b; a◌᷺◌͓◌̖◌֚b; a◌᷺◌͓◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING X BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0354 0062;0061 1DFA 0316 0354 059A 0062;0061 1DFA 0316 
0354 059A 0062;0061 1DFA 0316 0354 059A 0062;0061 1DFA 0316 0354 059A 0062; # 
(a◌֚◌̖◌᷺◌͔b; a◌᷺◌̖◌͔◌֚b; a◌᷺◌̖◌͔◌֚b; a◌᷺◌̖◌͔◌֚b; a◌᷺◌̖◌͔◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LEFT ARROWHEAD BELOW, LATIN SMALL LETTER B
+0061 0354 059A 0316 1DFA 0062;0061 1DFA 0354 0316 059A 0062;0061 1DFA 0354 
0316 059A 0062;0061 1DFA 0354 0316 059A 0062;0061 1DFA 0354 0316 059A 0062; # 
(a◌͔◌֚◌̖◌᷺b; a◌᷺◌͔◌̖◌֚b; a◌᷺◌͔◌̖◌֚b; a◌᷺◌͔◌̖◌֚b; a◌᷺◌͔◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0355 0062;0061 1DFA 0316 0355 059A 0062;0061 1DFA 0316 
0355 059A 0062;0061 1DFA 0316 0355 059A 0062;0061 1DFA 0316 0355 059A 0062; # 
(a◌֚◌̖◌᷺◌͕b; a◌᷺◌̖◌͕◌֚b; a◌᷺◌̖◌͕◌֚b; a◌᷺◌̖◌͕◌֚b; a◌᷺◌̖◌͕◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING RIGHT ARROWHEAD BELOW, LATIN SMALL LETTER B
+0061 0355 059A 0316 1DFA 0062;0061 1DFA 0355 0316 059A 0062;0061 1DFA 0355 
0316 059A 0062;0061 1DFA 0355 0316 059A 0062;0061 1DFA 0355 0316 059A 0062; # 
(a◌͕◌֚◌̖◌᷺b; a◌᷺◌͕◌̖◌֚b; a◌᷺◌͕◌̖◌֚b; a◌᷺◌͕◌̖◌֚b; a◌᷺◌͕◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0356 0062;0061 1DFA 0316 0356 059A 0062;0061 1DFA 0316 
0356 059A 0062;0061 1DFA 0316 0356 059A 0062;0061 1DFA 0316 0356 059A 0062; # 
(a◌֚◌̖◌᷺◌͖b; a◌᷺◌̖◌͖◌֚b; a◌᷺◌̖◌͖◌֚b; a◌᷺◌̖◌͖◌֚b; a◌᷺◌̖◌͖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW, LATIN SMALL 
LETTER B
+0061 0356 059A 0316 1DFA 0062;0061 1DFA 0356 0316 059A 0062;0061 1DFA 0356 
0316 059A 0062;0061 1DFA 0356 0316 059A 0062;0061 1DFA 0356 0316 059A 0062; # 
(a◌͖◌֚◌̖◌᷺b; a◌᷺◌͖◌̖◌֚b; a◌᷺◌͖◌̖◌֚b; a◌᷺◌͖◌̖◌֚b; a◌᷺◌͖◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL 
LETTER B
 0061 0315 0300 05AE 0357 0062;00E0 05AE 0357 0315 0062;0061 05AE 0300 0357 
0315 0062;00E0 05AE 0357 0315 0062;0061 05AE 0300 0357 0315 0062; # 
(a◌̕◌̀◌֮◌͗b; à◌֮◌͗◌̕b; a◌֮◌̀◌͗◌̕b; à◌֮◌͗◌̕b; a◌֮◌̀◌͗◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING RIGHT HALF RING ABOVE, LATIN SMALL LETTER B
 0061 0357 0315 0300 05AE 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 
0300 0315 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062; # 
(a◌͗◌̕◌̀◌֮b; a◌֮◌͗◌̀◌̕b; a◌֮◌͗◌̀◌̕b; a◌֮◌͗◌̀◌̕b; a◌֮◌͗◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT HALF RING ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 035C 0315 0300 0358 0062;00E0 0315 0358 035C 0062;0061 0300 0315 0358 
035C 0062;00E0 0315 0358 035C 0062;0061 0300 0315 0358 035C 0062; # 
(a◌͜◌̕◌̀◌͘b; à◌̕◌͘◌͜b; a◌̀◌̕◌͘◌͜b; à◌̕◌͘◌͜b; a◌̀◌̕◌͘◌͜b; ) LATIN SMALL LETTER 
A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, COMBINING DOT ABOVE RIGHT, LATIN SMALL LETTER B
 0061 0358 035C 0315 0300 0062;00E0 0358 0315 035C 0062;0061 0300 0358 0315 
035C 0062;00E0 0358 0315 035C 0062;0061 0300 0358 0315 035C 0062; # 
(a◌͘◌͜◌̕◌̀b; à◌͘◌̕◌͜b; a◌̀◌͘◌̕◌͜b; à◌͘◌̕◌͜b; a◌̀◌͘◌̕◌͜b; ) LATIN SMALL LETTER 
A, COMBINING DOT ABOVE RIGHT, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA 
ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B
-0061 059A 0316 302A 0359 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 
0359 059A 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062; # 
(a◌֚◌̖◌〪◌͙b; a◌〪◌̖◌͙◌֚b; a◌〪◌̖◌͙◌֚b; a◌〪◌̖◌͙◌֚b; a◌〪◌̖◌͙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING ASTERISK BELOW, LATIN SMALL LETTER B
-0061 0359 059A 0316 302A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 
0316 059A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062; # 
(a◌͙◌֚◌̖◌〪b; a◌〪◌͙◌̖◌֚b; a◌〪◌͙◌̖◌֚b; a◌〪◌͙◌̖◌֚b; a◌〪◌͙◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING ASTERISK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 035A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 
035A 059A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062; # 
(a◌֚◌̖◌〪◌͚b; a◌〪◌̖◌͚◌֚b; a◌〪◌̖◌͚◌֚b; a◌〪◌̖◌͚◌֚b; a◌〪◌̖◌͚◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING DOUBLE RING BELOW, LATIN SMALL LETTER B
-0061 035A 059A 0316 302A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 
0316 059A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062; # 
(a◌͚◌֚◌̖◌〪b; a◌〪◌͚◌̖◌֚b; a◌〪◌͚◌̖◌֚b; a◌〪◌͚◌̖◌֚b; a◌〪◌͚◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0359 0062;0061 1DFA 0316 0359 059A 0062;0061 1DFA 0316 
0359 059A 0062;0061 1DFA 0316 0359 059A 0062;0061 1DFA 0316 0359 059A 0062; # 
(a◌֚◌̖◌᷺◌͙b; a◌᷺◌̖◌͙◌֚b; a◌᷺◌̖◌͙◌֚b; a◌᷺◌̖◌͙◌֚b; a◌᷺◌̖◌͙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING ASTERISK BELOW, LATIN SMALL LETTER B
+0061 0359 059A 0316 1DFA 0062;0061 1DFA 0359 0316 059A 0062;0061 1DFA 0359 
0316 059A 0062;0061 1DFA 0359 0316 059A 0062;0061 1DFA 0359 0316 059A 0062; # 
(a◌͙◌֚◌̖◌᷺b; a◌᷺◌͙◌̖◌֚b; a◌᷺◌͙◌̖◌֚b; a◌᷺◌͙◌̖◌֚b; a◌᷺◌͙◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING ASTERISK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 035A 0062;0061 1DFA 0316 035A 059A 0062;0061 1DFA 0316 
035A 059A 0062;0061 1DFA 0316 035A 059A 0062;0061 1DFA 0316 035A 059A 0062; # 
(a◌֚◌̖◌᷺◌͚b; a◌᷺◌̖◌͚◌֚b; a◌᷺◌̖◌͚◌֚b; a◌᷺◌̖◌͚◌֚b; a◌᷺◌̖◌͚◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING DOUBLE RING BELOW, LATIN SMALL LETTER B
+0061 035A 059A 0316 1DFA 0062;0061 1DFA 035A 0316 059A 0062;0061 1DFA 035A 
0316 059A 0062;0061 1DFA 035A 0316 059A 0062;0061 1DFA 035A 0316 059A 0062; # 
(a◌͚◌֚◌̖◌᷺b; a◌᷺◌͚◌̖◌֚b; a◌᷺◌͚◌̖◌֚b; a◌᷺◌͚◌̖◌֚b; a◌᷺◌͚◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 035B 0062;00E0 05AE 035B 0315 0062;0061 05AE 0300 035B 
0315 0062;00E0 05AE 035B 0315 0062;0061 05AE 0300 035B 0315 0062; # 
(a◌̕◌̀◌֮◌͛b; à◌֮◌͛◌̕b; a◌֮◌̀◌͛◌̕b; à◌֮◌͛◌̕b; a◌֮◌̀◌͛◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING ZIGZAG ABOVE, LATIN SMALL LETTER B
 0061 035B 0315 0300 05AE 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 
0300 0315 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062; # 
(a◌͛◌̕◌̀◌֮b; a◌֮◌͛◌̀◌̕b; a◌֮◌͛◌̀◌̕b; a◌֮◌͛◌̀◌̕b; a◌֮◌͛◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING ZIGZAG ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 035D 035C 0315 035C 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 
035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062; # 
(a◌͝◌͜◌̕◌͜b; a◌̕◌͜◌͜◌͝b; a◌̕◌͜◌͜◌͝b; a◌̕◌͜◌͜◌͝b; a◌̕◌͜◌͜◌͝b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA 
ABOVE RIGHT, COMBINING DOUBLE BREVE BELOW, LATIN SMALL LETTER B
@@ -17213,8 +17272,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 0486 0315 0300 05AE 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 
0300 0315 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062; # 
(a◌҆◌̕◌̀◌֮b; a◌֮◌҆◌̀◌̕b; a◌֮◌҆◌̀◌̕b; a◌֮◌҆◌̀◌̕b; a◌֮◌҆◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING CYRILLIC PSILI PNEUMATA, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0487 0062;00E0 05AE 0487 0315 0062;0061 05AE 0300 0487 
0315 0062;00E0 05AE 0487 0315 0062;0061 05AE 0300 0487 0315 0062; # 
(a◌̕◌̀◌֮◌҇b; à◌֮◌҇◌̕b; a◌֮◌̀◌҇◌̕b; à◌֮◌҇◌̕b; a◌֮◌̀◌҇◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING CYRILLIC POKRYTIE, LATIN SMALL LETTER B
 0061 0487 0315 0300 05AE 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 
0300 0315 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 0300 0315 0062; # 
(a◌҇◌̕◌̀◌֮b; a◌֮◌҇◌̀◌̕b; a◌֮◌҇◌̀◌̕b; a◌֮◌҇◌̀◌̕b; a◌֮◌҇◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING CYRILLIC POKRYTIE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0591 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 
0591 059A 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062; # 
(a◌֚◌̖◌〪◌֑b; a◌〪◌̖◌֑◌֚b; a◌〪◌̖◌֑◌֚b; a◌〪◌̖◌֑◌֚b; a◌〪◌̖◌֑◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW ACCENT ETNAHTA, LATIN SMALL LETTER B
-0061 0591 059A 0316 302A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 
0316 059A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062; # 
(a◌֑◌֚◌̖◌〪b; a◌〪◌֑◌̖◌֚b; a◌〪◌֑◌̖◌֚b; a◌〪◌֑◌̖◌֚b; a◌〪◌֑◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT ETNAHTA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0591 0062;0061 1DFA 0316 0591 059A 0062;0061 1DFA 0316 
0591 059A 0062;0061 1DFA 0316 0591 059A 0062;0061 1DFA 0316 0591 059A 0062; # 
(a◌֚◌̖◌᷺◌֑b; a◌᷺◌̖◌֑◌֚b; a◌᷺◌̖◌֑◌֚b; a◌᷺◌̖◌֑◌֚b; a◌᷺◌̖◌֑◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW ACCENT ETNAHTA, LATIN SMALL LETTER B
+0061 0591 059A 0316 1DFA 0062;0061 1DFA 0591 0316 059A 0062;0061 1DFA 0591 
0316 059A 0062;0061 1DFA 0591 0316 059A 0062;0061 1DFA 0591 0316 059A 0062; # 
(a◌֑◌֚◌̖◌᷺b; a◌᷺◌֑◌̖◌֚b; a◌᷺◌֑◌̖◌֚b; a◌᷺◌֑◌̖◌֚b; a◌᷺◌֑◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT ETNAHTA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0592 0062;00E0 05AE 0592 0315 0062;0061 05AE 0300 0592 
0315 0062;00E0 05AE 0592 0315 0062;0061 05AE 0300 0592 0315 0062; # 
(a◌̕◌̀◌֮◌֒b; à◌֮◌֒◌̕b; a◌֮◌̀◌֒◌̕b; à◌֮◌֒◌̕b; a◌֮◌̀◌֒◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT SEGOL, LATIN SMALL LETTER B
 0061 0592 0315 0300 05AE 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 
0300 0315 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062; # 
(a◌֒◌̕◌̀◌֮b; a◌֮◌֒◌̀◌̕b; a◌֮◌֒◌̀◌̕b; a◌֮◌֒◌̀◌̕b; a◌֮◌֒◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT SEGOL, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0593 0062;00E0 05AE 0593 0315 0062;0061 05AE 0300 0593 
0315 0062;00E0 05AE 0593 0315 0062;0061 05AE 0300 0593 0315 0062; # 
(a◌̕◌̀◌֮◌֓b; à◌֮◌֓◌̕b; a◌֮◌̀◌֓◌̕b; à◌֮◌֓◌̕b; a◌֮◌̀◌֓◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT SHALSHELET, LATIN SMALL LETTER B
@@ -17223,8 +17282,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 0594 0315 0300 05AE 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 
0300 0315 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062; # 
(a◌֔◌̕◌̀◌֮b; a◌֮◌֔◌̀◌̕b; a◌֮◌֔◌̀◌̕b; a◌֮◌֔◌̀◌̕b; a◌֮◌֔◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT ZAQEF QATAN, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0595 0062;00E0 05AE 0595 0315 0062;0061 05AE 0300 0595 
0315 0062;00E0 05AE 0595 0315 0062;0061 05AE 0300 0595 0315 0062; # 
(a◌̕◌̀◌֮◌֕b; à◌֮◌֕◌̕b; a◌֮◌̀◌֕◌̕b; à◌֮◌֕◌̕b; a◌֮◌̀◌֕◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT ZAQEF GADOL, LATIN SMALL LETTER B
 0061 0595 0315 0300 05AE 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 
0300 0315 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062; # 
(a◌֕◌̕◌̀◌֮b; a◌֮◌֕◌̀◌̕b; a◌֮◌֕◌̀◌̕b; a◌֮◌֕◌̀◌̕b; a◌֮◌֕◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT ZAQEF GADOL, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0596 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 
0596 059A 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062; # 
(a◌֚◌̖◌〪◌֖b; a◌〪◌̖◌֖◌֚b; a◌〪◌̖◌֖◌֚b; a◌〪◌̖◌֖◌֚b; a◌〪◌̖◌֖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW ACCENT TIPEHA, LATIN SMALL LETTER B
-0061 0596 059A 0316 302A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 
0316 059A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062; # 
(a◌֖◌֚◌̖◌〪b; a◌〪◌֖◌̖◌֚b; a◌〪◌֖◌̖◌֚b; a◌〪◌֖◌̖◌֚b; a◌〪◌֖◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT TIPEHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0596 0062;0061 1DFA 0316 0596 059A 0062;0061 1DFA 0316 
0596 059A 0062;0061 1DFA 0316 0596 059A 0062;0061 1DFA 0316 0596 059A 0062; # 
(a◌֚◌̖◌᷺◌֖b; a◌᷺◌̖◌֖◌֚b; a◌᷺◌̖◌֖◌֚b; a◌᷺◌̖◌֖◌֚b; a◌᷺◌̖◌֖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW ACCENT TIPEHA, LATIN SMALL LETTER B
+0061 0596 059A 0316 1DFA 0062;0061 1DFA 0596 0316 059A 0062;0061 1DFA 0596 
0316 059A 0062;0061 1DFA 0596 0316 059A 0062;0061 1DFA 0596 0316 059A 0062; # 
(a◌֖◌֚◌̖◌᷺b; a◌᷺◌֖◌̖◌֚b; a◌᷺◌֖◌̖◌֚b; a◌᷺◌֖◌̖◌֚b; a◌᷺◌֖◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT TIPEHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0597 0062;00E0 05AE 0597 0315 0062;0061 05AE 0300 0597 
0315 0062;00E0 05AE 0597 0315 0062;0061 05AE 0300 0597 0315 0062; # 
(a◌̕◌̀◌֮◌֗b; à◌֮◌֗◌̕b; a◌֮◌̀◌֗◌̕b; à◌֮◌֗◌̕b; a◌֮◌̀◌֗◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT REVIA, LATIN SMALL LETTER B
 0061 0597 0315 0300 05AE 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 
0300 0315 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062; # 
(a◌֗◌̕◌̀◌֮b; a◌֮◌֗◌̀◌̕b; a◌֮◌֗◌̀◌̕b; a◌֮◌֗◌̀◌̕b; a◌֮◌֗◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT REVIA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0598 0062;00E0 05AE 0598 0315 0062;0061 05AE 0300 0598 
0315 0062;00E0 05AE 0598 0315 0062;0061 05AE 0300 0598 0315 0062; # 
(a◌̕◌̀◌֮◌֘b; à◌֮◌֘◌̕b; a◌֮◌̀◌֘◌̕b; à◌֮◌֘◌̕b; a◌֮◌̀◌֘◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT ZARQA, LATIN SMALL LETTER B
@@ -17233,8 +17292,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 0599 0315 0300 05AE 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 
0300 0315 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062; # 
(a◌֙◌̕◌̀◌֮b; a◌֮◌֙◌̀◌̕b; a◌֮◌֙◌̀◌̕b; a◌֮◌֙◌̀◌̕b; a◌֮◌֙◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT PASHTA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 302E 059A 0316 059A 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 
059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062; # 
(a〮◌֚◌̖◌֚b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; ) LATIN SMALL LETTER A, 
HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
HEBREW ACCENT YETIV, LATIN SMALL LETTER B
 0061 059A 302E 059A 0316 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 
059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062; # 
(a◌֚〮◌֚◌̖b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; ) LATIN SMALL LETTER A, 
HEBREW ACCENT YETIV, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B
-0061 059A 0316 302A 059B 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 
059B 059A 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062; # 
(a◌֚◌̖◌〪◌֛b; a◌〪◌̖◌֛◌֚b; a◌〪◌̖◌֛◌֚b; a◌〪◌̖◌֛◌֚b; a◌〪◌̖◌֛◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW ACCENT TEVIR, LATIN SMALL LETTER B
-0061 059B 059A 0316 302A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 
0316 059A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062; # 
(a◌֛◌֚◌̖◌〪b; a◌〪◌֛◌̖◌֚b; a◌〪◌֛◌̖◌֚b; a◌〪◌֛◌̖◌֚b; a◌〪◌֛◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT TEVIR, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 059B 0062;0061 1DFA 0316 059B 059A 0062;0061 1DFA 0316 
059B 059A 0062;0061 1DFA 0316 059B 059A 0062;0061 1DFA 0316 059B 059A 0062; # 
(a◌֚◌̖◌᷺◌֛b; a◌᷺◌̖◌֛◌֚b; a◌᷺◌̖◌֛◌֚b; a◌᷺◌̖◌֛◌֚b; a◌᷺◌̖◌֛◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW ACCENT TEVIR, LATIN SMALL LETTER B
+0061 059B 059A 0316 1DFA 0062;0061 1DFA 059B 0316 059A 0062;0061 1DFA 059B 
0316 059A 0062;0061 1DFA 059B 0316 059A 0062;0061 1DFA 059B 0316 059A 0062; # 
(a◌֛◌֚◌̖◌᷺b; a◌᷺◌֛◌̖◌֚b; a◌᷺◌֛◌̖◌֚b; a◌᷺◌֛◌̖◌֚b; a◌᷺◌֛◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT TEVIR, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 059C 0062;00E0 05AE 059C 0315 0062;0061 05AE 0300 059C 
0315 0062;00E0 05AE 059C 0315 0062;0061 05AE 0300 059C 0315 0062; # 
(a◌̕◌̀◌֮◌֜b; à◌֮◌֜◌̕b; a◌֮◌̀◌֜◌̕b; à◌֮◌֜◌̕b; a◌֮◌̀◌֜◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT GERESH, LATIN SMALL LETTER B
 0061 059C 0315 0300 05AE 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 
0300 0315 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062; # 
(a◌֜◌̕◌̀◌֮b; a◌֮◌֜◌̀◌̕b; a◌֮◌֜◌̀◌̕b; a◌֮◌֜◌̀◌̕b; a◌֮◌֜◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT GERESH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 059D 0062;00E0 05AE 059D 0315 0062;0061 05AE 0300 059D 
0315 0062;00E0 05AE 059D 0315 0062;0061 05AE 0300 059D 0315 0062; # 
(a◌̕◌̀◌֮◌֝b; à◌֮◌֝◌̕b; a◌֮◌̀◌֝◌̕b; à◌֮◌֝◌̕b; a◌֮◌̀◌֝◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT GERESH MUQDAM, LATIN SMALL LETTER B
@@ -17247,24 +17306,24 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 05A0 0315 0300 05AE 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 
0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062; # 
(a◌֠◌̕◌̀◌֮b; a◌֮◌֠◌̀◌̕b; a◌֮◌֠◌̀◌̕b; a◌֮◌֠◌̀◌̕b; a◌֮◌֠◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT TELISHA GEDOLA, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 05A1 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 
0315 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062; # 
(a◌̕◌̀◌֮◌֡b; à◌֮◌֡◌̕b; a◌֮◌̀◌֡◌̕b; à◌֮◌֡◌̕b; a◌֮◌̀◌֡◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT PAZER, LATIN SMALL LETTER B
 0061 05A1 0315 0300 05AE 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 
0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062; # 
(a◌֡◌̕◌̀◌֮b; a◌֮◌֡◌̀◌̕b; a◌֮◌֡◌̀◌̕b; a◌֮◌֡◌̀◌̕b; a◌֮◌֡◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT PAZER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 05A2 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 
05A2 059A 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062; # 
(a◌֚◌̖◌〪◌֢b; a◌〪◌̖◌֢◌֚b; a◌〪◌̖◌֢◌֚b; a◌〪◌̖◌֢◌֚b; a◌〪◌̖◌֢◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW ACCENT ATNAH HAFUKH, LATIN SMALL LETTER B
-0061 05A2 059A 0316 302A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 
0316 059A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062; # 
(a◌֢◌֚◌̖◌〪b; a◌〪◌֢◌̖◌֚b; a◌〪◌֢◌̖◌֚b; a◌〪◌֢◌̖◌֚b; a◌〪◌֢◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT ATNAH HAFUKH, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 05A3 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 
05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062; # 
(a◌֚◌̖◌〪◌֣b; a◌〪◌̖◌֣◌֚b; a◌〪◌̖◌֣◌֚b; a◌〪◌̖◌֣◌֚b; a◌〪◌̖◌֣◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW ACCENT MUNAH, LATIN SMALL LETTER B
-0061 05A3 059A 0316 302A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 
0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062; # 
(a◌֣◌֚◌̖◌〪b; a◌〪◌֣◌̖◌֚b; a◌〪◌֣◌̖◌֚b; a◌〪◌֣◌̖◌֚b; a◌〪◌֣◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT MUNAH, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 05A4 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 
05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062; # 
(a◌֚◌̖◌〪◌֤b; a◌〪◌̖◌֤◌֚b; a◌〪◌̖◌֤◌֚b; a◌〪◌̖◌֤◌֚b; a◌〪◌̖◌֤◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW ACCENT MAHAPAKH, LATIN SMALL LETTER B
-0061 05A4 059A 0316 302A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 
0316 059A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062; # 
(a◌֤◌֚◌̖◌〪b; a◌〪◌֤◌̖◌֚b; a◌〪◌֤◌̖◌֚b; a◌〪◌֤◌̖◌֚b; a◌〪◌֤◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT MAHAPAKH, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 05A5 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 
05A5 059A 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062; # 
(a◌֚◌̖◌〪◌֥b; a◌〪◌̖◌֥◌֚b; a◌〪◌̖◌֥◌֚b; a◌〪◌̖◌֥◌֚b; a◌〪◌̖◌֥◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW ACCENT MERKHA, LATIN SMALL LETTER B
-0061 05A5 059A 0316 302A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 
0316 059A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062; # 
(a◌֥◌֚◌̖◌〪b; a◌〪◌֥◌̖◌֚b; a◌〪◌֥◌̖◌֚b; a◌〪◌֥◌̖◌֚b; a◌〪◌֥◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT MERKHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 05A6 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 
05A6 059A 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062; # 
(a◌֚◌̖◌〪◌֦b; a◌〪◌̖◌֦◌֚b; a◌〪◌̖◌֦◌֚b; a◌〪◌̖◌֦◌֚b; a◌〪◌̖◌֦◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW ACCENT MERKHA KEFULA, LATIN SMALL LETTER B
-0061 05A6 059A 0316 302A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 
0316 059A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062; # 
(a◌֦◌֚◌̖◌〪b; a◌〪◌֦◌̖◌֚b; a◌〪◌֦◌̖◌֚b; a◌〪◌֦◌̖◌֚b; a◌〪◌֦◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT MERKHA KEFULA, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 05A7 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 
05A7 059A 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062; # 
(a◌֚◌̖◌〪◌֧b; a◌〪◌̖◌֧◌֚b; a◌〪◌̖◌֧◌֚b; a◌〪◌̖◌֧◌֚b; a◌〪◌̖◌֧◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW ACCENT DARGA, LATIN SMALL LETTER B
-0061 05A7 059A 0316 302A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 
0316 059A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062; # 
(a◌֧◌֚◌̖◌〪b; a◌〪◌֧◌̖◌֚b; a◌〪◌֧◌̖◌֚b; a◌〪◌֧◌̖◌֚b; a◌〪◌֧◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT DARGA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 05A2 0062;0061 1DFA 0316 05A2 059A 0062;0061 1DFA 0316 
05A2 059A 0062;0061 1DFA 0316 05A2 059A 0062;0061 1DFA 0316 05A2 059A 0062; # 
(a◌֚◌̖◌᷺◌֢b; a◌᷺◌̖◌֢◌֚b; a◌᷺◌̖◌֢◌֚b; a◌᷺◌̖◌֢◌֚b; a◌᷺◌̖◌֢◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW ACCENT ATNAH HAFUKH, LATIN SMALL LETTER B
+0061 05A2 059A 0316 1DFA 0062;0061 1DFA 05A2 0316 059A 0062;0061 1DFA 05A2 
0316 059A 0062;0061 1DFA 05A2 0316 059A 0062;0061 1DFA 05A2 0316 059A 0062; # 
(a◌֢◌֚◌̖◌᷺b; a◌᷺◌֢◌̖◌֚b; a◌᷺◌֢◌̖◌֚b; a◌᷺◌֢◌̖◌֚b; a◌᷺◌֢◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT ATNAH HAFUKH, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 05A3 0062;0061 1DFA 0316 05A3 059A 0062;0061 1DFA 0316 
05A3 059A 0062;0061 1DFA 0316 05A3 059A 0062;0061 1DFA 0316 05A3 059A 0062; # 
(a◌֚◌̖◌᷺◌֣b; a◌᷺◌̖◌֣◌֚b; a◌᷺◌̖◌֣◌֚b; a◌᷺◌̖◌֣◌֚b; a◌᷺◌̖◌֣◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW ACCENT MUNAH, LATIN SMALL LETTER B
+0061 05A3 059A 0316 1DFA 0062;0061 1DFA 05A3 0316 059A 0062;0061 1DFA 05A3 
0316 059A 0062;0061 1DFA 05A3 0316 059A 0062;0061 1DFA 05A3 0316 059A 0062; # 
(a◌֣◌֚◌̖◌᷺b; a◌᷺◌֣◌̖◌֚b; a◌᷺◌֣◌̖◌֚b; a◌᷺◌֣◌̖◌֚b; a◌᷺◌֣◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT MUNAH, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 05A4 0062;0061 1DFA 0316 05A4 059A 0062;0061 1DFA 0316 
05A4 059A 0062;0061 1DFA 0316 05A4 059A 0062;0061 1DFA 0316 05A4 059A 0062; # 
(a◌֚◌̖◌᷺◌֤b; a◌᷺◌̖◌֤◌֚b; a◌᷺◌̖◌֤◌֚b; a◌᷺◌̖◌֤◌֚b; a◌᷺◌̖◌֤◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW ACCENT MAHAPAKH, LATIN SMALL LETTER B
+0061 05A4 059A 0316 1DFA 0062;0061 1DFA 05A4 0316 059A 0062;0061 1DFA 05A4 
0316 059A 0062;0061 1DFA 05A4 0316 059A 0062;0061 1DFA 05A4 0316 059A 0062; # 
(a◌֤◌֚◌̖◌᷺b; a◌᷺◌֤◌̖◌֚b; a◌᷺◌֤◌̖◌֚b; a◌᷺◌֤◌̖◌֚b; a◌᷺◌֤◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT MAHAPAKH, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 05A5 0062;0061 1DFA 0316 05A5 059A 0062;0061 1DFA 0316 
05A5 059A 0062;0061 1DFA 0316 05A5 059A 0062;0061 1DFA 0316 05A5 059A 0062; # 
(a◌֚◌̖◌᷺◌֥b; a◌᷺◌̖◌֥◌֚b; a◌᷺◌̖◌֥◌֚b; a◌᷺◌̖◌֥◌֚b; a◌᷺◌̖◌֥◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW ACCENT MERKHA, LATIN SMALL LETTER B
+0061 05A5 059A 0316 1DFA 0062;0061 1DFA 05A5 0316 059A 0062;0061 1DFA 05A5 
0316 059A 0062;0061 1DFA 05A5 0316 059A 0062;0061 1DFA 05A5 0316 059A 0062; # 
(a◌֥◌֚◌̖◌᷺b; a◌᷺◌֥◌̖◌֚b; a◌᷺◌֥◌̖◌֚b; a◌᷺◌֥◌̖◌֚b; a◌᷺◌֥◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT MERKHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 05A6 0062;0061 1DFA 0316 05A6 059A 0062;0061 1DFA 0316 
05A6 059A 0062;0061 1DFA 0316 05A6 059A 0062;0061 1DFA 0316 05A6 059A 0062; # 
(a◌֚◌̖◌᷺◌֦b; a◌᷺◌̖◌֦◌֚b; a◌᷺◌̖◌֦◌֚b; a◌᷺◌̖◌֦◌֚b; a◌᷺◌̖◌֦◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW ACCENT MERKHA KEFULA, LATIN SMALL LETTER B
+0061 05A6 059A 0316 1DFA 0062;0061 1DFA 05A6 0316 059A 0062;0061 1DFA 05A6 
0316 059A 0062;0061 1DFA 05A6 0316 059A 0062;0061 1DFA 05A6 0316 059A 0062; # 
(a◌֦◌֚◌̖◌᷺b; a◌᷺◌֦◌̖◌֚b; a◌᷺◌֦◌̖◌֚b; a◌᷺◌֦◌̖◌֚b; a◌᷺◌֦◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT MERKHA KEFULA, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 05A7 0062;0061 1DFA 0316 05A7 059A 0062;0061 1DFA 0316 
05A7 059A 0062;0061 1DFA 0316 05A7 059A 0062;0061 1DFA 0316 05A7 059A 0062; # 
(a◌֚◌̖◌᷺◌֧b; a◌᷺◌̖◌֧◌֚b; a◌᷺◌̖◌֧◌֚b; a◌᷺◌̖◌֧◌֚b; a◌᷺◌̖◌֧◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW ACCENT DARGA, LATIN SMALL LETTER B
+0061 05A7 059A 0316 1DFA 0062;0061 1DFA 05A7 0316 059A 0062;0061 1DFA 05A7 
0316 059A 0062;0061 1DFA 05A7 0316 059A 0062;0061 1DFA 05A7 0316 059A 0062; # 
(a◌֧◌֚◌̖◌᷺b; a◌᷺◌֧◌̖◌֚b; a◌᷺◌֧◌̖◌֚b; a◌᷺◌֧◌̖◌֚b; a◌᷺◌֧◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT DARGA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 05A8 0062;00E0 05AE 05A8 0315 0062;0061 05AE 0300 05A8 
0315 0062;00E0 05AE 05A8 0315 0062;0061 05AE 0300 05A8 0315 0062; # 
(a◌̕◌̀◌֮◌֨b; à◌֮◌֨◌̕b; a◌֮◌̀◌֨◌̕b; à◌֮◌֨◌̕b; a◌֮◌̀◌֨◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT QADMA, LATIN SMALL LETTER B
 0061 05A8 0315 0300 05AE 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 
0300 0315 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062; # 
(a◌֨◌̕◌̀◌֮b; a◌֮◌֨◌̀◌̕b; a◌֮◌֨◌̀◌̕b; a◌֮◌֨◌̀◌̕b; a◌֮◌֨◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT QADMA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 05A9 0062;00E0 05AE 05A9 0315 0062;0061 05AE 0300 05A9 
0315 0062;00E0 05AE 05A9 0315 0062;0061 05AE 0300 05A9 0315 0062; # 
(a◌̕◌̀◌֮◌֩b; à◌֮◌֩◌̕b; a◌֮◌̀◌֩◌̕b; à◌֮◌֩◌̕b; a◌֮◌̀◌֩◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT TELISHA QETANA, LATIN SMALL LETTER B
 0061 05A9 0315 0300 05AE 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 
0300 0315 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062; # 
(a◌֩◌̕◌̀◌֮b; a◌֮◌֩◌̀◌̕b; a◌֮◌֩◌̀◌̕b; a◌֮◌֩◌̀◌̕b; a◌֮◌֩◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT TELISHA QETANA, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 05AA 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 
05AA 059A 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062; # 
(a◌֚◌̖◌〪◌֪b; a◌〪◌̖◌֪◌֚b; a◌〪◌̖◌֪◌֚b; a◌〪◌̖◌֪◌֚b; a◌〪◌̖◌֪◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW ACCENT YERAH BEN YOMO, LATIN SMALL LETTER B
-0061 05AA 059A 0316 302A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 
0316 059A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062; # 
(a◌֪◌֚◌̖◌〪b; a◌〪◌֪◌̖◌֚b; a◌〪◌֪◌̖◌֚b; a◌〪◌֪◌̖◌֚b; a◌〪◌֪◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YERAH BEN YOMO, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 05AA 0062;0061 1DFA 0316 05AA 059A 0062;0061 1DFA 0316 
05AA 059A 0062;0061 1DFA 0316 05AA 059A 0062;0061 1DFA 0316 05AA 059A 0062; # 
(a◌֚◌̖◌᷺◌֪b; a◌᷺◌̖◌֪◌֚b; a◌᷺◌̖◌֪◌֚b; a◌᷺◌̖◌֪◌֚b; a◌᷺◌̖◌֪◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW ACCENT YERAH BEN YOMO, LATIN SMALL LETTER B
+0061 05AA 059A 0316 1DFA 0062;0061 1DFA 05AA 0316 059A 0062;0061 1DFA 05AA 
0316 059A 0062;0061 1DFA 05AA 0316 059A 0062;0061 1DFA 05AA 0316 059A 0062; # 
(a◌֪◌֚◌̖◌᷺b; a◌᷺◌֪◌̖◌֚b; a◌᷺◌֪◌̖◌֚b; a◌᷺◌֪◌̖◌֚b; a◌᷺◌֪◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YERAH BEN YOMO, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 05AB 0062;00E0 05AE 05AB 0315 0062;0061 05AE 0300 05AB 
0315 0062;00E0 05AE 05AB 0315 0062;0061 05AE 0300 05AB 0315 0062; # 
(a◌̕◌̀◌֮◌֫b; à◌֮◌֫◌̕b; a◌֮◌̀◌֫◌̕b; à◌֮◌֫◌̕b; a◌֮◌̀◌֫◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT OLE, LATIN SMALL LETTER B
 0061 05AB 0315 0300 05AE 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 
0300 0315 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062; # 
(a◌֫◌̕◌̀◌֮b; a◌֮◌֫◌̀◌̕b; a◌֮◌֫◌̀◌̕b; a◌֮◌֫◌̀◌̕b; a◌֮◌֫◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT OLE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 05AC 0062;00E0 05AE 05AC 0315 0062;0061 05AE 0300 05AC 
0315 0062;00E0 05AE 05AC 0315 0062;0061 05AE 0300 05AC 0315 0062; # 
(a◌̕◌̀◌֮◌֬b; à◌֮◌֬◌̕b; a◌֮◌̀◌֬◌̕b; à◌֮◌֬◌̕b; a◌֮◌̀◌֬◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW ACCENT ILUY, LATIN SMALL LETTER B
@@ -17311,8 +17370,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 05C2 FB1E 05C2 05C1 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 
05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062; # 
(a◌ׂ◌ﬞ◌ׂ◌ׁb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; ) LATIN SMALL 
LETTER A, HEBREW POINT SIN DOT, HEBREW POINT JUDEO-SPANISH VARIKA, HEBREW POINT 
SIN DOT, HEBREW POINT SHIN DOT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 05C4 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 
0315 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062; # 
(a◌̕◌̀◌֮◌ׄb; à◌֮◌ׄ◌̕b; a◌֮◌̀◌ׄ◌̕b; à◌֮◌ׄ◌̕b; a◌֮◌̀◌ׄ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HEBREW MARK UPPER DOT, LATIN SMALL LETTER B
 0061 05C4 0315 0300 05AE 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 
0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062; # 
(a◌ׄ◌̕◌̀◌֮b; a◌֮◌ׄ◌̀◌̕b; a◌֮◌ׄ◌̀◌̕b; a◌֮◌ׄ◌̀◌̕b; a◌֮◌ׄ◌̀◌̕b; ) LATIN SMALL 
LETTER A, HEBREW MARK UPPER DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 05C5 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 
05C5 059A 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062; # 
(a◌֚◌̖◌〪◌ׅb; a◌〪◌̖◌ׅ◌֚b; a◌〪◌̖◌ׅ◌֚b; a◌〪◌̖◌ׅ◌֚b; a◌〪◌̖◌ׅ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, HEBREW MARK LOWER DOT, LATIN SMALL LETTER B
-0061 05C5 059A 0316 302A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 
0316 059A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062; # 
(a◌ׅ◌֚◌̖◌〪b; a◌〪◌ׅ◌̖◌֚b; a◌〪◌ׅ◌̖◌֚b; a◌〪◌ׅ◌̖◌֚b; a◌〪◌ׅ◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW MARK LOWER DOT, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 05C5 0062;0061 1DFA 0316 05C5 059A 0062;0061 1DFA 0316 
05C5 059A 0062;0061 1DFA 0316 05C5 059A 0062;0061 1DFA 0316 05C5 059A 0062; # 
(a◌֚◌̖◌᷺◌ׅb; a◌᷺◌̖◌ׅ◌֚b; a◌᷺◌̖◌ׅ◌֚b; a◌᷺◌̖◌ׅ◌֚b; a◌᷺◌̖◌ׅ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, HEBREW MARK LOWER DOT, LATIN SMALL LETTER B
+0061 05C5 059A 0316 1DFA 0062;0061 1DFA 05C5 0316 059A 0062;0061 1DFA 05C5 
0316 059A 0062;0061 1DFA 05C5 0316 059A 0062;0061 1DFA 05C5 0316 059A 0062; # 
(a◌ׅ◌֚◌̖◌᷺b; a◌᷺◌ׅ◌̖◌֚b; a◌᷺◌ׅ◌̖◌֚b; a◌᷺◌ׅ◌̖◌֚b; a◌᷺◌ׅ◌̖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW MARK LOWER DOT, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 05B9 05B8 05B7 05C7 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 
05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062; # 
(a◌ֹ◌ָ◌ַ◌ׇb; a◌ַ◌ָ◌ׇ◌ֹb; a◌ַ◌ָ◌ׇ◌ֹb; a◌ַ◌ָ◌ׇ◌ֹb; a◌ַ◌ָ◌ׇ◌ֹb; ) LATIN SMALL 
LETTER A, HEBREW POINT HOLAM, HEBREW POINT QAMATS, HEBREW POINT PATAH, HEBREW 
POINT QAMATS QATAN, LATIN SMALL LETTER B
 0061 05C7 05B9 05B8 05B7 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 
05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062; # 
(a◌ׇ◌ֹ◌ָ◌ַb; a◌ַ◌ׇ◌ָ◌ֹb; a◌ַ◌ׇ◌ָ◌ֹb; a◌ַ◌ׇ◌ָ◌ֹb; a◌ַ◌ׇ◌ָ◌ֹb; ) LATIN SMALL 
LETTER A, HEBREW POINT QAMATS QATAN, HEBREW POINT HOLAM, HEBREW POINT QAMATS, 
HEBREW POINT PATAH, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0610 0062;00E0 05AE 0610 0315 0062;0061 05AE 0300 0610 
0315 0062;00E0 05AE 0610 0315 0062;0061 05AE 0300 0610 0315 0062; # 
(a◌̕◌̀◌֮◌ؐb; à◌֮◌ؐ◌̕b; a◌֮◌̀◌ؐ◌̕b; à◌֮◌ؐ◌̕b; a◌֮◌̀◌ؐ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM, LATIN SMALL LETTER B
@@ -17357,10 +17416,10 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 0653 0315 0300 05AE 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 
0300 0315 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062; # 
(a◌ٓ◌̕◌̀◌֮b; a◌֮◌ٓ◌̀◌̕b; a◌֮◌ٓ◌̀◌̕b; a◌֮◌ٓ◌̀◌̕b; a◌֮◌ٓ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC MADDAH ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0654 0062;00E0 05AE 0654 0315 0062;0061 05AE 0300 0654 
0315 0062;00E0 05AE 0654 0315 0062;0061 05AE 0300 0654 0315 0062; # 
(a◌̕◌̀◌֮◌ٔb; à◌֮◌ٔ◌̕b; a◌֮◌̀◌ٔ◌̕b; à◌֮◌ٔ◌̕b; a◌֮◌̀◌ٔ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC HAMZA ABOVE, LATIN SMALL LETTER B
 0061 0654 0315 0300 05AE 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 
0300 0315 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062; # 
(a◌ٔ◌̕◌̀◌֮b; a◌֮◌ٔ◌̀◌̕b; a◌֮◌ٔ◌̀◌̕b; a◌֮◌ٔ◌̀◌̕b; a◌֮◌ٔ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC HAMZA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0655 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 
0655 059A 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062; # 
(a◌֚◌̖◌〪◌ٕb; a◌〪◌̖◌ٕ◌֚b; a◌〪◌̖◌ٕ◌֚b; a◌〪◌̖◌ٕ◌֚b; a◌〪◌̖◌ٕ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC HAMZA BELOW, LATIN SMALL LETTER B
-0061 0655 059A 0316 302A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 
0316 059A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062; # 
(a◌ٕ◌֚◌̖◌〪b; a◌〪◌ٕ◌̖◌֚b; a◌〪◌ٕ◌̖◌֚b; a◌〪◌ٕ◌̖◌֚b; a◌〪◌ٕ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC HAMZA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0656 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 
0656 059A 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 0656 059A 0062; # 
(a◌֚◌̖◌〪◌ٖb; a◌〪◌̖◌ٖ◌֚b; a◌〪◌̖◌ٖ◌֚b; a◌〪◌̖◌ٖ◌֚b; a◌〪◌̖◌ٖ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC SUBSCRIPT ALEF, LATIN SMALL LETTER B
-0061 0656 059A 0316 302A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 
0316 059A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 0316 059A 0062; # 
(a◌ٖ◌֚◌̖◌〪b; a◌〪◌ٖ◌̖◌֚b; a◌〪◌ٖ◌̖◌֚b; a◌〪◌ٖ◌̖◌֚b; a◌〪◌ٖ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SUBSCRIPT ALEF, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0655 0062;0061 1DFA 0316 0655 059A 0062;0061 1DFA 0316 
0655 059A 0062;0061 1DFA 0316 0655 059A 0062;0061 1DFA 0316 0655 059A 0062; # 
(a◌֚◌̖◌᷺◌ٕb; a◌᷺◌̖◌ٕ◌֚b; a◌᷺◌̖◌ٕ◌֚b; a◌᷺◌̖◌ٕ◌֚b; a◌᷺◌̖◌ٕ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC HAMZA BELOW, LATIN SMALL LETTER B
+0061 0655 059A 0316 1DFA 0062;0061 1DFA 0655 0316 059A 0062;0061 1DFA 0655 
0316 059A 0062;0061 1DFA 0655 0316 059A 0062;0061 1DFA 0655 0316 059A 0062; # 
(a◌ٕ◌֚◌̖◌᷺b; a◌᷺◌ٕ◌̖◌֚b; a◌᷺◌ٕ◌̖◌֚b; a◌᷺◌ٕ◌̖◌֚b; a◌᷺◌ٕ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC HAMZA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0656 0062;0061 1DFA 0316 0656 059A 0062;0061 1DFA 0316 
0656 059A 0062;0061 1DFA 0316 0656 059A 0062;0061 1DFA 0316 0656 059A 0062; # 
(a◌֚◌̖◌᷺◌ٖb; a◌᷺◌̖◌ٖ◌֚b; a◌᷺◌̖◌ٖ◌֚b; a◌᷺◌̖◌ٖ◌֚b; a◌᷺◌̖◌ٖ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC SUBSCRIPT ALEF, LATIN SMALL LETTER B
+0061 0656 059A 0316 1DFA 0062;0061 1DFA 0656 0316 059A 0062;0061 1DFA 0656 
0316 059A 0062;0061 1DFA 0656 0316 059A 0062;0061 1DFA 0656 0316 059A 0062; # 
(a◌ٖ◌֚◌̖◌᷺b; a◌᷺◌ٖ◌̖◌֚b; a◌᷺◌ٖ◌̖◌֚b; a◌᷺◌ٖ◌̖◌֚b; a◌᷺◌ٖ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SUBSCRIPT ALEF, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0657 0062;00E0 05AE 0657 0315 0062;0061 05AE 0300 0657 
0315 0062;00E0 05AE 0657 0315 0062;0061 05AE 0300 0657 0315 0062; # 
(a◌̕◌̀◌֮◌ٗb; à◌֮◌ٗ◌̕b; a◌֮◌̀◌ٗ◌̕b; à◌֮◌ٗ◌̕b; a◌֮◌̀◌ٗ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC INVERTED DAMMA, LATIN SMALL LETTER B
 0061 0657 0315 0300 05AE 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 
0300 0315 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062; # 
(a◌ٗ◌̕◌̀◌֮b; a◌֮◌ٗ◌̀◌̕b; a◌֮◌ٗ◌̀◌̕b; a◌֮◌ٗ◌̀◌̕b; a◌֮◌ٗ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC INVERTED DAMMA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0658 0062;00E0 05AE 0658 0315 0062;0061 05AE 0300 0658 
0315 0062;00E0 05AE 0658 0315 0062;0061 05AE 0300 0658 0315 0062; # 
(a◌̕◌̀◌֮◌٘b; à◌֮◌٘◌̕b; a◌֮◌̀◌٘◌̕b; à◌֮◌٘◌̕b; a◌֮◌̀◌٘◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC MARK NOON GHUNNA, LATIN SMALL LETTER B
@@ -17371,14 +17430,14 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 065A 0315 0300 05AE 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 
0300 0315 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062; # 
(a◌ٚ◌̕◌̀◌֮b; a◌֮◌ٚ◌̀◌̕b; a◌֮◌ٚ◌̀◌̕b; a◌֮◌ٚ◌̀◌̕b; a◌֮◌ٚ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC VOWEL SIGN SMALL V ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 065B 0062;00E0 05AE 065B 0315 0062;0061 05AE 0300 065B 
0315 0062;00E0 05AE 065B 0315 0062;0061 05AE 0300 065B 0315 0062; # 
(a◌̕◌̀◌֮◌ٛb; à◌֮◌ٛ◌̕b; a◌֮◌̀◌ٛ◌̕b; à◌֮◌ٛ◌̕b; a◌֮◌̀◌ٛ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC VOWEL SIGN INVERTED SMALL V ABOVE, LATIN SMALL LETTER B
 0061 065B 0315 0300 05AE 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 
0300 0315 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062; # 
(a◌ٛ◌̕◌̀◌֮b; a◌֮◌ٛ◌̀◌̕b; a◌֮◌ٛ◌̀◌̕b; a◌֮◌ٛ◌̀◌̕b; a◌֮◌ٛ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC VOWEL SIGN INVERTED SMALL V ABOVE, COMBINING COMMA ABOVE 
RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 065C 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 
065C 059A 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062; # 
(a◌֚◌̖◌〪◌ٜb; a◌〪◌̖◌ٜ◌֚b; a◌〪◌̖◌ٜ◌֚b; a◌〪◌̖◌ٜ◌֚b; a◌〪◌̖◌ٜ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC VOWEL SIGN DOT BELOW, LATIN SMALL LETTER B
-0061 065C 059A 0316 302A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 
0316 059A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062; # 
(a◌ٜ◌֚◌̖◌〪b; a◌〪◌ٜ◌̖◌֚b; a◌〪◌ٜ◌̖◌֚b; a◌〪◌ٜ◌̖◌֚b; a◌〪◌ٜ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC VOWEL SIGN DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 065C 0062;0061 1DFA 0316 065C 059A 0062;0061 1DFA 0316 
065C 059A 0062;0061 1DFA 0316 065C 059A 0062;0061 1DFA 0316 065C 059A 0062; # 
(a◌֚◌̖◌᷺◌ٜb; a◌᷺◌̖◌ٜ◌֚b; a◌᷺◌̖◌ٜ◌֚b; a◌᷺◌̖◌ٜ◌֚b; a◌᷺◌̖◌ٜ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC VOWEL SIGN DOT BELOW, LATIN SMALL LETTER B
+0061 065C 059A 0316 1DFA 0062;0061 1DFA 065C 0316 059A 0062;0061 1DFA 065C 
0316 059A 0062;0061 1DFA 065C 0316 059A 0062;0061 1DFA 065C 0316 059A 0062; # 
(a◌ٜ◌֚◌̖◌᷺b; a◌᷺◌ٜ◌̖◌֚b; a◌᷺◌ٜ◌̖◌֚b; a◌᷺◌ٜ◌̖◌֚b; a◌᷺◌ٜ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC VOWEL SIGN DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 065D 0062;00E0 05AE 065D 0315 0062;0061 05AE 0300 065D 
0315 0062;00E0 05AE 065D 0315 0062;0061 05AE 0300 065D 0315 0062; # 
(a◌̕◌̀◌֮◌ٝb; à◌֮◌ٝ◌̕b; a◌֮◌̀◌ٝ◌̕b; à◌֮◌ٝ◌̕b; a◌֮◌̀◌ٝ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC REVERSED DAMMA, LATIN SMALL LETTER B
 0061 065D 0315 0300 05AE 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 
0300 0315 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062; # 
(a◌ٝ◌̕◌̀◌֮b; a◌֮◌ٝ◌̀◌̕b; a◌֮◌ٝ◌̀◌̕b; a◌֮◌ٝ◌̀◌̕b; a◌֮◌ٝ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC REVERSED DAMMA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 065E 0062;00E0 05AE 065E 0315 0062;0061 05AE 0300 065E 
0315 0062;00E0 05AE 065E 0315 0062;0061 05AE 0300 065E 0315 0062; # 
(a◌̕◌̀◌֮◌ٞb; à◌֮◌ٞ◌̕b; a◌֮◌̀◌ٞ◌̕b; à◌֮◌ٞ◌̕b; a◌֮◌̀◌ٞ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC FATHA WITH TWO DOTS, LATIN SMALL LETTER B
 0061 065E 0315 0300 05AE 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 
0300 0315 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062; # 
(a◌ٞ◌̕◌̀◌֮b; a◌֮◌ٞ◌̀◌̕b; a◌֮◌ٞ◌̀◌̕b; a◌֮◌ٞ◌̀◌̕b; a◌֮◌ٞ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC FATHA WITH TWO DOTS, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 065F 0062;0061 302A 0316 065F 059A 0062;0061 302A 0316 
065F 059A 0062;0061 302A 0316 065F 059A 0062;0061 302A 0316 065F 059A 0062; # 
(a◌֚◌̖◌〪◌ٟb; a◌〪◌̖◌ٟ◌֚b; a◌〪◌̖◌ٟ◌֚b; a◌〪◌̖◌ٟ◌֚b; a◌〪◌̖◌ٟ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC WAVY HAMZA BELOW, LATIN SMALL LETTER B
-0061 065F 059A 0316 302A 0062;0061 302A 065F 0316 059A 0062;0061 302A 065F 
0316 059A 0062;0061 302A 065F 0316 059A 0062;0061 302A 065F 0316 059A 0062; # 
(a◌ٟ◌֚◌̖◌〪b; a◌〪◌ٟ◌̖◌֚b; a◌〪◌ٟ◌̖◌֚b; a◌〪◌ٟ◌̖◌֚b; a◌〪◌ٟ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC WAVY HAMZA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 065F 0062;0061 1DFA 0316 065F 059A 0062;0061 1DFA 0316 
065F 059A 0062;0061 1DFA 0316 065F 059A 0062;0061 1DFA 0316 065F 059A 0062; # 
(a◌֚◌̖◌᷺◌ٟb; a◌᷺◌̖◌ٟ◌֚b; a◌᷺◌̖◌ٟ◌֚b; a◌᷺◌̖◌ٟ◌֚b; a◌᷺◌̖◌ٟ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC WAVY HAMZA BELOW, LATIN SMALL LETTER B
+0061 065F 059A 0316 1DFA 0062;0061 1DFA 065F 0316 059A 0062;0061 1DFA 065F 
0316 059A 0062;0061 1DFA 065F 0316 059A 0062;0061 1DFA 065F 0316 059A 0062; # 
(a◌ٟ◌֚◌̖◌᷺b; a◌᷺◌ٟ◌̖◌֚b; a◌᷺◌ٟ◌̖◌֚b; a◌᷺◌ٟ◌̖◌֚b; a◌᷺◌ٟ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC WAVY HAMZA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0711 0670 0652 0670 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 
0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062; # 
(a◌ܑ◌ٰ◌ْ◌ٰb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; ) LATIN SMALL 
LETTER A, SYRIAC LETTER SUPERSCRIPT ALAPH, ARABIC LETTER SUPERSCRIPT ALEF, 
ARABIC SUKUN, ARABIC LETTER SUPERSCRIPT ALEF, LATIN SMALL LETTER B
 0061 0670 0711 0670 0652 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 
0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062; # 
(a◌ٰ◌ܑ◌ٰ◌ْb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; ) LATIN SMALL 
LETTER A, ARABIC LETTER SUPERSCRIPT ALEF, SYRIAC LETTER SUPERSCRIPT ALAPH, 
ARABIC LETTER SUPERSCRIPT ALEF, ARABIC SUKUN, LATIN SMALL LETTER B
 0061 0315 0300 05AE 06D6 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 
0315 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062; # 
(a◌̕◌̀◌֮◌ۖb; à◌֮◌ۖ◌̕b; a◌֮◌̀◌ۖ◌̕b; à◌֮◌ۖ◌̕b; a◌֮◌̀◌ۖ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA, LATIN SMALL LETTER B
@@ -17403,74 +17462,74 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 06E1 0315 0300 05AE 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 
0300 0315 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062; # 
(a◌ۡ◌̕◌̀◌֮b; a◌֮◌ۡ◌̀◌̕b; a◌֮◌ۡ◌̀◌̕b; a◌֮◌ۡ◌̀◌̕b; a◌֮◌ۡ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH DOTLESS HEAD OF KHAH, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 06E2 0062;00E0 05AE 06E2 0315 0062;0061 05AE 0300 06E2 
0315 0062;00E0 05AE 06E2 0315 0062;0061 05AE 0300 06E2 0315 0062; # 
(a◌̕◌̀◌֮◌ۢb; à◌֮◌ۢ◌̕b; a◌֮◌̀◌ۢ◌̕b; à◌֮◌ۢ◌̕b; a◌֮◌̀◌ۢ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH MEEM ISOLATED FORM, LATIN SMALL LETTER B
 0061 06E2 0315 0300 05AE 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 
0300 0315 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062; # 
(a◌ۢ◌̕◌̀◌֮b; a◌֮◌ۢ◌̀◌̕b; a◌֮◌ۢ◌̀◌̕b; a◌֮◌ۢ◌̀◌̕b; a◌֮◌ۢ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH MEEM ISOLATED FORM, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 06E3 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 
06E3 059A 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062; # 
(a◌֚◌̖◌〪◌ۣb; a◌〪◌̖◌ۣ◌֚b; a◌〪◌̖◌ۣ◌֚b; a◌〪◌̖◌ۣ◌֚b; a◌〪◌̖◌ۣ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC SMALL LOW SEEN, LATIN SMALL LETTER B
-0061 06E3 059A 0316 302A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 
0316 059A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062; # 
(a◌ۣ◌֚◌̖◌〪b; a◌〪◌ۣ◌̖◌֚b; a◌〪◌ۣ◌̖◌֚b; a◌〪◌ۣ◌̖◌֚b; a◌〪◌ۣ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SMALL LOW SEEN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 06E3 0062;0061 1DFA 0316 06E3 059A 0062;0061 1DFA 0316 
06E3 059A 0062;0061 1DFA 0316 06E3 059A 0062;0061 1DFA 0316 06E3 059A 0062; # 
(a◌֚◌̖◌᷺◌ۣb; a◌᷺◌̖◌ۣ◌֚b; a◌᷺◌̖◌ۣ◌֚b; a◌᷺◌̖◌ۣ◌֚b; a◌᷺◌̖◌ۣ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC SMALL LOW SEEN, LATIN SMALL LETTER B
+0061 06E3 059A 0316 1DFA 0062;0061 1DFA 06E3 0316 059A 0062;0061 1DFA 06E3 
0316 059A 0062;0061 1DFA 06E3 0316 059A 0062;0061 1DFA 06E3 0316 059A 0062; # 
(a◌ۣ◌֚◌̖◌᷺b; a◌᷺◌ۣ◌̖◌֚b; a◌᷺◌ۣ◌̖◌֚b; a◌᷺◌ۣ◌̖◌֚b; a◌᷺◌ۣ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SMALL LOW SEEN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 06E4 0062;00E0 05AE 06E4 0315 0062;0061 05AE 0300 06E4 
0315 0062;00E0 05AE 06E4 0315 0062;0061 05AE 0300 06E4 0315 0062; # 
(a◌̕◌̀◌֮◌ۤb; à◌֮◌ۤ◌̕b; a◌֮◌̀◌ۤ◌̕b; à◌֮◌ۤ◌̕b; a◌֮◌̀◌ۤ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH MADDA, LATIN SMALL LETTER B
 0061 06E4 0315 0300 05AE 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 
0300 0315 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062; # 
(a◌ۤ◌̕◌̀◌֮b; a◌֮◌ۤ◌̀◌̕b; a◌֮◌ۤ◌̀◌̕b; a◌֮◌ۤ◌̀◌̕b; a◌֮◌ۤ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH MADDA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 06E7 0062;00E0 05AE 06E7 0315 0062;0061 05AE 0300 06E7 
0315 0062;00E0 05AE 06E7 0315 0062;0061 05AE 0300 06E7 0315 0062; # 
(a◌̕◌̀◌֮◌ۧb; à◌֮◌ۧ◌̕b; a◌֮◌̀◌ۧ◌̕b; à◌֮◌ۧ◌̕b; a◌֮◌̀◌ۧ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH YEH, LATIN SMALL LETTER B
 0061 06E7 0315 0300 05AE 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 
0300 0315 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062; # 
(a◌ۧ◌̕◌̀◌֮b; a◌֮◌ۧ◌̀◌̕b; a◌֮◌ۧ◌̀◌̕b; a◌֮◌ۧ◌̀◌̕b; a◌֮◌ۧ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH YEH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 06E8 0062;00E0 05AE 06E8 0315 0062;0061 05AE 0300 06E8 
0315 0062;00E0 05AE 06E8 0315 0062;0061 05AE 0300 06E8 0315 0062; # 
(a◌̕◌̀◌֮◌ۨb; à◌֮◌ۨ◌̕b; a◌֮◌̀◌ۨ◌̕b; à◌֮◌ۨ◌̕b; a◌֮◌̀◌ۨ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH NOON, LATIN SMALL LETTER B
 0061 06E8 0315 0300 05AE 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 
0300 0315 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062; # 
(a◌ۨ◌̕◌̀◌֮b; a◌֮◌ۨ◌̀◌̕b; a◌֮◌ۨ◌̀◌̕b; a◌֮◌ۨ◌̀◌̕b; a◌֮◌ۨ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH NOON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 06EA 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 
06EA 059A 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062; # 
(a◌֚◌̖◌〪◌۪b; a◌〪◌̖◌۪◌֚b; a◌〪◌̖◌۪◌֚b; a◌〪◌̖◌۪◌֚b; a◌〪◌̖◌۪◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC EMPTY CENTRE LOW STOP, LATIN SMALL LETTER B
-0061 06EA 059A 0316 302A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 
0316 059A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062; # 
(a◌۪◌֚◌̖◌〪b; a◌〪◌۪◌̖◌֚b; a◌〪◌۪◌̖◌֚b; a◌〪◌۪◌̖◌֚b; a◌〪◌۪◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC EMPTY CENTRE LOW STOP, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 06EA 0062;0061 1DFA 0316 06EA 059A 0062;0061 1DFA 0316 
06EA 059A 0062;0061 1DFA 0316 06EA 059A 0062;0061 1DFA 0316 06EA 059A 0062; # 
(a◌֚◌̖◌᷺◌۪b; a◌᷺◌̖◌۪◌֚b; a◌᷺◌̖◌۪◌֚b; a◌᷺◌̖◌۪◌֚b; a◌᷺◌̖◌۪◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC EMPTY CENTRE LOW STOP, LATIN SMALL LETTER B
+0061 06EA 059A 0316 1DFA 0062;0061 1DFA 06EA 0316 059A 0062;0061 1DFA 06EA 
0316 059A 0062;0061 1DFA 06EA 0316 059A 0062;0061 1DFA 06EA 0316 059A 0062; # 
(a◌۪◌֚◌̖◌᷺b; a◌᷺◌۪◌̖◌֚b; a◌᷺◌۪◌̖◌֚b; a◌᷺◌۪◌̖◌֚b; a◌᷺◌۪◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC EMPTY CENTRE LOW STOP, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 06EB 0062;00E0 05AE 06EB 0315 0062;0061 05AE 0300 06EB 
0315 0062;00E0 05AE 06EB 0315 0062;0061 05AE 0300 06EB 0315 0062; # 
(a◌̕◌̀◌֮◌۫b; à◌֮◌۫◌̕b; a◌֮◌̀◌۫◌̕b; à◌֮◌۫◌̕b; a◌֮◌̀◌۫◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC EMPTY CENTRE HIGH STOP, LATIN SMALL LETTER B
 0061 06EB 0315 0300 05AE 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 
0300 0315 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062; # 
(a◌۫◌̕◌̀◌֮b; a◌֮◌۫◌̀◌̕b; a◌֮◌۫◌̀◌̕b; a◌֮◌۫◌̀◌̕b; a◌֮◌۫◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC EMPTY CENTRE HIGH STOP, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 06EC 0062;00E0 05AE 06EC 0315 0062;0061 05AE 0300 06EC 
0315 0062;00E0 05AE 06EC 0315 0062;0061 05AE 0300 06EC 0315 0062; # 
(a◌̕◌̀◌֮◌۬b; à◌֮◌۬◌̕b; a◌֮◌̀◌۬◌̕b; à◌֮◌۬◌̕b; a◌֮◌̀◌۬◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE, LATIN SMALL LETTER B
 0061 06EC 0315 0300 05AE 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 
0300 0315 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062; # 
(a◌۬◌̕◌̀◌֮b; a◌֮◌۬◌̀◌̕b; a◌֮◌۬◌̀◌̕b; a◌֮◌۬◌̀◌̕b; a◌֮◌۬◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE, COMBINING COMMA ABOVE 
RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 06ED 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 
06ED 059A 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062; # 
(a◌֚◌̖◌〪◌ۭb; a◌〪◌̖◌ۭ◌֚b; a◌〪◌̖◌ۭ◌֚b; a◌〪◌̖◌ۭ◌֚b; a◌〪◌̖◌ۭ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC SMALL LOW MEEM, LATIN SMALL LETTER B
-0061 06ED 059A 0316 302A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 
0316 059A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062; # 
(a◌ۭ◌֚◌̖◌〪b; a◌〪◌ۭ◌̖◌֚b; a◌〪◌ۭ◌̖◌֚b; a◌〪◌ۭ◌̖◌֚b; a◌〪◌ۭ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SMALL LOW MEEM, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 06ED 0062;0061 1DFA 0316 06ED 059A 0062;0061 1DFA 0316 
06ED 059A 0062;0061 1DFA 0316 06ED 059A 0062;0061 1DFA 0316 06ED 059A 0062; # 
(a◌֚◌̖◌᷺◌ۭb; a◌᷺◌̖◌ۭ◌֚b; a◌᷺◌̖◌ۭ◌֚b; a◌᷺◌̖◌ۭ◌֚b; a◌᷺◌̖◌ۭ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC SMALL LOW MEEM, LATIN SMALL LETTER B
+0061 06ED 059A 0316 1DFA 0062;0061 1DFA 06ED 0316 059A 0062;0061 1DFA 06ED 
0316 059A 0062;0061 1DFA 06ED 0316 059A 0062;0061 1DFA 06ED 0316 059A 0062; # 
(a◌ۭ◌֚◌̖◌᷺b; a◌᷺◌ۭ◌̖◌֚b; a◌᷺◌ۭ◌̖◌֚b; a◌᷺◌ۭ◌̖◌֚b; a◌᷺◌ۭ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SMALL LOW MEEM, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0C55 0711 0670 0711 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 
0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062; # 
(a◌ౕ◌ܑ◌ٰ◌ܑb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; ) LATIN SMALL 
LETTER A, TELUGU LENGTH MARK, SYRIAC LETTER SUPERSCRIPT ALAPH, ARABIC LETTER 
SUPERSCRIPT ALEF, SYRIAC LETTER SUPERSCRIPT ALAPH, LATIN SMALL LETTER B
 0061 0711 0C55 0711 0670 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 
0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062; # 
(a◌ܑ◌ౕ◌ܑ◌ٰb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; ) LATIN SMALL 
LETTER A, SYRIAC LETTER SUPERSCRIPT ALAPH, TELUGU LENGTH MARK, SYRIAC LETTER 
SUPERSCRIPT ALAPH, ARABIC LETTER SUPERSCRIPT ALEF, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0730 0062;00E0 05AE 0730 0315 0062;0061 05AE 0300 0730 
0315 0062;00E0 05AE 0730 0315 0062;0061 05AE 0300 0730 0315 0062; # 
(a◌̕◌̀◌֮◌ܰb; à◌֮◌ܰ◌̕b; a◌֮◌̀◌ܰ◌̕b; à◌֮◌ܰ◌̕b; a◌֮◌̀◌ܰ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC PTHAHA ABOVE, LATIN SMALL LETTER B
 0061 0730 0315 0300 05AE 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 
0300 0315 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062; # 
(a◌ܰ◌̕◌̀◌֮b; a◌֮◌ܰ◌̀◌̕b; a◌֮◌ܰ◌̀◌̕b; a◌֮◌ܰ◌̀◌̕b; a◌֮◌ܰ◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC PTHAHA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0731 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 
0731 059A 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062; # 
(a◌֚◌̖◌〪◌ܱb; a◌〪◌̖◌ܱ◌֚b; a◌〪◌̖◌ܱ◌֚b; a◌〪◌̖◌ܱ◌֚b; a◌〪◌̖◌ܱ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC PTHAHA BELOW, LATIN SMALL LETTER B
-0061 0731 059A 0316 302A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 
0316 059A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062; # 
(a◌ܱ◌֚◌̖◌〪b; a◌〪◌ܱ◌̖◌֚b; a◌〪◌ܱ◌̖◌֚b; a◌〪◌ܱ◌̖◌֚b; a◌〪◌ܱ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC PTHAHA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0731 0062;0061 1DFA 0316 0731 059A 0062;0061 1DFA 0316 
0731 059A 0062;0061 1DFA 0316 0731 059A 0062;0061 1DFA 0316 0731 059A 0062; # 
(a◌֚◌̖◌᷺◌ܱb; a◌᷺◌̖◌ܱ◌֚b; a◌᷺◌̖◌ܱ◌֚b; a◌᷺◌̖◌ܱ◌֚b; a◌᷺◌̖◌ܱ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC PTHAHA BELOW, LATIN SMALL LETTER B
+0061 0731 059A 0316 1DFA 0062;0061 1DFA 0731 0316 059A 0062;0061 1DFA 0731 
0316 059A 0062;0061 1DFA 0731 0316 059A 0062;0061 1DFA 0731 0316 059A 0062; # 
(a◌ܱ◌֚◌̖◌᷺b; a◌᷺◌ܱ◌̖◌֚b; a◌᷺◌ܱ◌̖◌֚b; a◌᷺◌ܱ◌̖◌֚b; a◌᷺◌ܱ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC PTHAHA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0732 0062;00E0 05AE 0732 0315 0062;0061 05AE 0300 0732 
0315 0062;00E0 05AE 0732 0315 0062;0061 05AE 0300 0732 0315 0062; # 
(a◌̕◌̀◌֮◌ܲb; à◌֮◌ܲ◌̕b; a◌֮◌̀◌ܲ◌̕b; à◌֮◌ܲ◌̕b; a◌֮◌̀◌ܲ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC PTHAHA DOTTED, LATIN SMALL LETTER B
 0061 0732 0315 0300 05AE 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 
0300 0315 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062; # 
(a◌ܲ◌̕◌̀◌֮b; a◌֮◌ܲ◌̀◌̕b; a◌֮◌ܲ◌̀◌̕b; a◌֮◌ܲ◌̀◌̕b; a◌֮◌ܲ◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC PTHAHA DOTTED, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0733 0062;00E0 05AE 0733 0315 0062;0061 05AE 0300 0733 
0315 0062;00E0 05AE 0733 0315 0062;0061 05AE 0300 0733 0315 0062; # 
(a◌̕◌̀◌֮◌ܳb; à◌֮◌ܳ◌̕b; a◌֮◌̀◌ܳ◌̕b; à◌֮◌ܳ◌̕b; a◌֮◌̀◌ܳ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC ZQAPHA ABOVE, LATIN SMALL LETTER B
 0061 0733 0315 0300 05AE 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 
0300 0315 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062; # 
(a◌ܳ◌̕◌̀◌֮b; a◌֮◌ܳ◌̀◌̕b; a◌֮◌ܳ◌̀◌̕b; a◌֮◌ܳ◌̀◌̕b; a◌֮◌ܳ◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC ZQAPHA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0734 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 
0734 059A 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062; # 
(a◌֚◌̖◌〪◌ܴb; a◌〪◌̖◌ܴ◌֚b; a◌〪◌̖◌ܴ◌֚b; a◌〪◌̖◌ܴ◌֚b; a◌〪◌̖◌ܴ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC ZQAPHA BELOW, LATIN SMALL LETTER B
-0061 0734 059A 0316 302A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 
0316 059A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062; # 
(a◌ܴ◌֚◌̖◌〪b; a◌〪◌ܴ◌̖◌֚b; a◌〪◌ܴ◌̖◌֚b; a◌〪◌ܴ◌̖◌֚b; a◌〪◌ܴ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC ZQAPHA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0734 0062;0061 1DFA 0316 0734 059A 0062;0061 1DFA 0316 
0734 059A 0062;0061 1DFA 0316 0734 059A 0062;0061 1DFA 0316 0734 059A 0062; # 
(a◌֚◌̖◌᷺◌ܴb; a◌᷺◌̖◌ܴ◌֚b; a◌᷺◌̖◌ܴ◌֚b; a◌᷺◌̖◌ܴ◌֚b; a◌᷺◌̖◌ܴ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC ZQAPHA BELOW, LATIN SMALL LETTER B
+0061 0734 059A 0316 1DFA 0062;0061 1DFA 0734 0316 059A 0062;0061 1DFA 0734 
0316 059A 0062;0061 1DFA 0734 0316 059A 0062;0061 1DFA 0734 0316 059A 0062; # 
(a◌ܴ◌֚◌̖◌᷺b; a◌᷺◌ܴ◌̖◌֚b; a◌᷺◌ܴ◌̖◌֚b; a◌᷺◌ܴ◌̖◌֚b; a◌᷺◌ܴ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC ZQAPHA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0735 0062;00E0 05AE 0735 0315 0062;0061 05AE 0300 0735 
0315 0062;00E0 05AE 0735 0315 0062;0061 05AE 0300 0735 0315 0062; # 
(a◌̕◌̀◌֮◌ܵb; à◌֮◌ܵ◌̕b; a◌֮◌̀◌ܵ◌̕b; à◌֮◌ܵ◌̕b; a◌֮◌̀◌ܵ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC ZQAPHA DOTTED, LATIN SMALL LETTER B
 0061 0735 0315 0300 05AE 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 
0300 0315 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062; # 
(a◌ܵ◌̕◌̀◌֮b; a◌֮◌ܵ◌̀◌̕b; a◌֮◌ܵ◌̀◌̕b; a◌֮◌ܵ◌̀◌̕b; a◌֮◌ܵ◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC ZQAPHA DOTTED, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0736 0062;00E0 05AE 0736 0315 0062;0061 05AE 0300 0736 
0315 0062;00E0 05AE 0736 0315 0062;0061 05AE 0300 0736 0315 0062; # 
(a◌̕◌̀◌֮◌ܶb; à◌֮◌ܶ◌̕b; a◌֮◌̀◌ܶ◌̕b; à◌֮◌ܶ◌̕b; a◌֮◌̀◌ܶ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC RBASA ABOVE, LATIN SMALL LETTER B
 0061 0736 0315 0300 05AE 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 
0300 0315 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062; # 
(a◌ܶ◌̕◌̀◌֮b; a◌֮◌ܶ◌̀◌̕b; a◌֮◌ܶ◌̀◌̕b; a◌֮◌ܶ◌̀◌̕b; a◌֮◌ܶ◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC RBASA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0737 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 
0737 059A 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062; # 
(a◌֚◌̖◌〪◌ܷb; a◌〪◌̖◌ܷ◌֚b; a◌〪◌̖◌ܷ◌֚b; a◌〪◌̖◌ܷ◌֚b; a◌〪◌̖◌ܷ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC RBASA BELOW, LATIN SMALL LETTER B
-0061 0737 059A 0316 302A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 
0316 059A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062; # 
(a◌ܷ◌֚◌̖◌〪b; a◌〪◌ܷ◌̖◌֚b; a◌〪◌ܷ◌̖◌֚b; a◌〪◌ܷ◌̖◌֚b; a◌〪◌ܷ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC RBASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0738 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 
0738 059A 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062; # 
(a◌֚◌̖◌〪◌ܸb; a◌〪◌̖◌ܸ◌֚b; a◌〪◌̖◌ܸ◌֚b; a◌〪◌̖◌ܸ◌֚b; a◌〪◌̖◌ܸ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC DOTTED ZLAMA HORIZONTAL, LATIN SMALL LETTER B
-0061 0738 059A 0316 302A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 
0316 059A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062; # 
(a◌ܸ◌֚◌̖◌〪b; a◌〪◌ܸ◌̖◌֚b; a◌〪◌ܸ◌̖◌֚b; a◌〪◌ܸ◌̖◌֚b; a◌〪◌ܸ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC DOTTED ZLAMA HORIZONTAL, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0739 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 
0739 059A 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062; # 
(a◌֚◌̖◌〪◌ܹb; a◌〪◌̖◌ܹ◌֚b; a◌〪◌̖◌ܹ◌֚b; a◌〪◌̖◌ܹ◌֚b; a◌〪◌̖◌ܹ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC DOTTED ZLAMA ANGULAR, LATIN SMALL LETTER B
-0061 0739 059A 0316 302A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 
0316 059A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062; # 
(a◌ܹ◌֚◌̖◌〪b; a◌〪◌ܹ◌̖◌֚b; a◌〪◌ܹ◌̖◌֚b; a◌〪◌ܹ◌̖◌֚b; a◌〪◌ܹ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC DOTTED ZLAMA ANGULAR, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0737 0062;0061 1DFA 0316 0737 059A 0062;0061 1DFA 0316 
0737 059A 0062;0061 1DFA 0316 0737 059A 0062;0061 1DFA 0316 0737 059A 0062; # 
(a◌֚◌̖◌᷺◌ܷb; a◌᷺◌̖◌ܷ◌֚b; a◌᷺◌̖◌ܷ◌֚b; a◌᷺◌̖◌ܷ◌֚b; a◌᷺◌̖◌ܷ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC RBASA BELOW, LATIN SMALL LETTER B
+0061 0737 059A 0316 1DFA 0062;0061 1DFA 0737 0316 059A 0062;0061 1DFA 0737 
0316 059A 0062;0061 1DFA 0737 0316 059A 0062;0061 1DFA 0737 0316 059A 0062; # 
(a◌ܷ◌֚◌̖◌᷺b; a◌᷺◌ܷ◌̖◌֚b; a◌᷺◌ܷ◌̖◌֚b; a◌᷺◌ܷ◌̖◌֚b; a◌᷺◌ܷ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC RBASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0738 0062;0061 1DFA 0316 0738 059A 0062;0061 1DFA 0316 
0738 059A 0062;0061 1DFA 0316 0738 059A 0062;0061 1DFA 0316 0738 059A 0062; # 
(a◌֚◌̖◌᷺◌ܸb; a◌᷺◌̖◌ܸ◌֚b; a◌᷺◌̖◌ܸ◌֚b; a◌᷺◌̖◌ܸ◌֚b; a◌᷺◌̖◌ܸ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC DOTTED ZLAMA HORIZONTAL, LATIN SMALL LETTER B
+0061 0738 059A 0316 1DFA 0062;0061 1DFA 0738 0316 059A 0062;0061 1DFA 0738 
0316 059A 0062;0061 1DFA 0738 0316 059A 0062;0061 1DFA 0738 0316 059A 0062; # 
(a◌ܸ◌֚◌̖◌᷺b; a◌᷺◌ܸ◌̖◌֚b; a◌᷺◌ܸ◌̖◌֚b; a◌᷺◌ܸ◌̖◌֚b; a◌᷺◌ܸ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC DOTTED ZLAMA HORIZONTAL, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0739 0062;0061 1DFA 0316 0739 059A 0062;0061 1DFA 0316 
0739 059A 0062;0061 1DFA 0316 0739 059A 0062;0061 1DFA 0316 0739 059A 0062; # 
(a◌֚◌̖◌᷺◌ܹb; a◌᷺◌̖◌ܹ◌֚b; a◌᷺◌̖◌ܹ◌֚b; a◌᷺◌̖◌ܹ◌֚b; a◌᷺◌̖◌ܹ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC DOTTED ZLAMA ANGULAR, LATIN SMALL LETTER B
+0061 0739 059A 0316 1DFA 0062;0061 1DFA 0739 0316 059A 0062;0061 1DFA 0739 
0316 059A 0062;0061 1DFA 0739 0316 059A 0062;0061 1DFA 0739 0316 059A 0062; # 
(a◌ܹ◌֚◌̖◌᷺b; a◌᷺◌ܹ◌̖◌֚b; a◌᷺◌ܹ◌̖◌֚b; a◌᷺◌ܹ◌̖◌֚b; a◌᷺◌ܹ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC DOTTED ZLAMA ANGULAR, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 073A 0062;00E0 05AE 073A 0315 0062;0061 05AE 0300 073A 
0315 0062;00E0 05AE 073A 0315 0062;0061 05AE 0300 073A 0315 0062; # 
(a◌̕◌̀◌֮◌ܺb; à◌֮◌ܺ◌̕b; a◌֮◌̀◌ܺ◌̕b; à◌֮◌ܺ◌̕b; a◌֮◌̀◌ܺ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC HBASA ABOVE, LATIN SMALL LETTER B
 0061 073A 0315 0300 05AE 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 
0300 0315 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062; # 
(a◌ܺ◌̕◌̀◌֮b; a◌֮◌ܺ◌̀◌̕b; a◌֮◌ܺ◌̀◌̕b; a◌֮◌ܺ◌̀◌̕b; a◌֮◌ܺ◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC HBASA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 073B 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 
073B 059A 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062; # 
(a◌֚◌̖◌〪◌ܻb; a◌〪◌̖◌ܻ◌֚b; a◌〪◌̖◌ܻ◌֚b; a◌〪◌̖◌ܻ◌֚b; a◌〪◌̖◌ܻ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC HBASA BELOW, LATIN SMALL LETTER B
-0061 073B 059A 0316 302A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 
0316 059A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062; # 
(a◌ܻ◌֚◌̖◌〪b; a◌〪◌ܻ◌̖◌֚b; a◌〪◌ܻ◌̖◌֚b; a◌〪◌ܻ◌̖◌֚b; a◌〪◌ܻ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC HBASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 073C 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 
073C 059A 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062; # 
(a◌֚◌̖◌〪◌ܼb; a◌〪◌̖◌ܼ◌֚b; a◌〪◌̖◌ܼ◌֚b; a◌〪◌̖◌ܼ◌֚b; a◌〪◌̖◌ܼ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC HBASA-ESASA DOTTED, LATIN SMALL LETTER B
-0061 073C 059A 0316 302A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 
0316 059A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062; # 
(a◌ܼ◌֚◌̖◌〪b; a◌〪◌ܼ◌̖◌֚b; a◌〪◌ܼ◌̖◌֚b; a◌〪◌ܼ◌̖◌֚b; a◌〪◌ܼ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC HBASA-ESASA DOTTED, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 073B 0062;0061 1DFA 0316 073B 059A 0062;0061 1DFA 0316 
073B 059A 0062;0061 1DFA 0316 073B 059A 0062;0061 1DFA 0316 073B 059A 0062; # 
(a◌֚◌̖◌᷺◌ܻb; a◌᷺◌̖◌ܻ◌֚b; a◌᷺◌̖◌ܻ◌֚b; a◌᷺◌̖◌ܻ◌֚b; a◌᷺◌̖◌ܻ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC HBASA BELOW, LATIN SMALL LETTER B
+0061 073B 059A 0316 1DFA 0062;0061 1DFA 073B 0316 059A 0062;0061 1DFA 073B 
0316 059A 0062;0061 1DFA 073B 0316 059A 0062;0061 1DFA 073B 0316 059A 0062; # 
(a◌ܻ◌֚◌̖◌᷺b; a◌᷺◌ܻ◌̖◌֚b; a◌᷺◌ܻ◌̖◌֚b; a◌᷺◌ܻ◌̖◌֚b; a◌᷺◌ܻ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC HBASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 073C 0062;0061 1DFA 0316 073C 059A 0062;0061 1DFA 0316 
073C 059A 0062;0061 1DFA 0316 073C 059A 0062;0061 1DFA 0316 073C 059A 0062; # 
(a◌֚◌̖◌᷺◌ܼb; a◌᷺◌̖◌ܼ◌֚b; a◌᷺◌̖◌ܼ◌֚b; a◌᷺◌̖◌ܼ◌֚b; a◌᷺◌̖◌ܼ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC HBASA-ESASA DOTTED, LATIN SMALL LETTER B
+0061 073C 059A 0316 1DFA 0062;0061 1DFA 073C 0316 059A 0062;0061 1DFA 073C 
0316 059A 0062;0061 1DFA 073C 0316 059A 0062;0061 1DFA 073C 0316 059A 0062; # 
(a◌ܼ◌֚◌̖◌᷺b; a◌᷺◌ܼ◌̖◌֚b; a◌᷺◌ܼ◌̖◌֚b; a◌᷺◌ܼ◌̖◌֚b; a◌᷺◌ܼ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC HBASA-ESASA DOTTED, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 073D 0062;00E0 05AE 073D 0315 0062;0061 05AE 0300 073D 
0315 0062;00E0 05AE 073D 0315 0062;0061 05AE 0300 073D 0315 0062; # 
(a◌̕◌̀◌֮◌ܽb; à◌֮◌ܽ◌̕b; a◌֮◌̀◌ܽ◌̕b; à◌֮◌ܽ◌̕b; a◌֮◌̀◌ܽ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC ESASA ABOVE, LATIN SMALL LETTER B
 0061 073D 0315 0300 05AE 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 
0300 0315 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062; # 
(a◌ܽ◌̕◌̀◌֮b; a◌֮◌ܽ◌̀◌̕b; a◌֮◌ܽ◌̀◌̕b; a◌֮◌ܽ◌̀◌̕b; a◌֮◌ܽ◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC ESASA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 073E 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 
073E 059A 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062; # 
(a◌֚◌̖◌〪◌ܾb; a◌〪◌̖◌ܾ◌֚b; a◌〪◌̖◌ܾ◌֚b; a◌〪◌̖◌ܾ◌֚b; a◌〪◌̖◌ܾ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC ESASA BELOW, LATIN SMALL LETTER B
-0061 073E 059A 0316 302A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 
0316 059A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062; # 
(a◌ܾ◌֚◌̖◌〪b; a◌〪◌ܾ◌̖◌֚b; a◌〪◌ܾ◌̖◌֚b; a◌〪◌ܾ◌̖◌֚b; a◌〪◌ܾ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC ESASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 073E 0062;0061 1DFA 0316 073E 059A 0062;0061 1DFA 0316 
073E 059A 0062;0061 1DFA 0316 073E 059A 0062;0061 1DFA 0316 073E 059A 0062; # 
(a◌֚◌̖◌᷺◌ܾb; a◌᷺◌̖◌ܾ◌֚b; a◌᷺◌̖◌ܾ◌֚b; a◌᷺◌̖◌ܾ◌֚b; a◌᷺◌̖◌ܾ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC ESASA BELOW, LATIN SMALL LETTER B
+0061 073E 059A 0316 1DFA 0062;0061 1DFA 073E 0316 059A 0062;0061 1DFA 073E 
0316 059A 0062;0061 1DFA 073E 0316 059A 0062;0061 1DFA 073E 0316 059A 0062; # 
(a◌ܾ◌֚◌̖◌᷺b; a◌᷺◌ܾ◌̖◌֚b; a◌᷺◌ܾ◌̖◌֚b; a◌᷺◌ܾ◌̖◌֚b; a◌᷺◌ܾ◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC ESASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 073F 0062;00E0 05AE 073F 0315 0062;0061 05AE 0300 073F 
0315 0062;00E0 05AE 073F 0315 0062;0061 05AE 0300 073F 0315 0062; # 
(a◌̕◌̀◌֮◌ܿb; à◌֮◌ܿ◌̕b; a◌֮◌̀◌ܿ◌̕b; à◌֮◌ܿ◌̕b; a◌֮◌̀◌ܿ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC RWAHA, LATIN SMALL LETTER B
 0061 073F 0315 0300 05AE 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 
0300 0315 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062; # 
(a◌ܿ◌̕◌̀◌֮b; a◌֮◌ܿ◌̀◌̕b; a◌֮◌ܿ◌̀◌̕b; a◌֮◌ܿ◌̀◌̕b; a◌֮◌ܿ◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC RWAHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, 
HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0740 0062;00E0 05AE 0740 0315 0062;0061 05AE 0300 0740 
0315 0062;00E0 05AE 0740 0315 0062;0061 05AE 0300 0740 0315 0062; # 
(a◌̕◌̀◌֮◌݀b; à◌֮◌݀◌̕b; a◌֮◌̀◌݀◌̕b; à◌֮◌݀◌̕b; a◌֮◌̀◌݀◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC FEMININE DOT, LATIN SMALL LETTER B
 0061 0740 0315 0300 05AE 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 
0300 0315 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062; # 
(a◌݀◌̕◌̀◌֮b; a◌֮◌݀◌̀◌̕b; a◌֮◌݀◌̀◌̕b; a◌֮◌݀◌̀◌̕b; a◌֮◌݀◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC FEMININE DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0741 0062;00E0 05AE 0741 0315 0062;0061 05AE 0300 0741 
0315 0062;00E0 05AE 0741 0315 0062;0061 05AE 0300 0741 0315 0062; # 
(a◌̕◌̀◌֮◌݁b; à◌֮◌݁◌̕b; a◌֮◌̀◌݁◌̕b; à◌֮◌݁◌̕b; a◌֮◌̀◌݁◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC QUSHSHAYA, LATIN SMALL LETTER B
 0061 0741 0315 0300 05AE 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 
0300 0315 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062; # 
(a◌݁◌̕◌̀◌֮b; a◌֮◌݁◌̀◌̕b; a◌֮◌݁◌̀◌̕b; a◌֮◌݁◌̀◌̕b; a◌֮◌݁◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC QUSHSHAYA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0742 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 
0742 059A 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062; # 
(a◌֚◌̖◌〪◌݂b; a◌〪◌̖◌݂◌֚b; a◌〪◌̖◌݂◌֚b; a◌〪◌̖◌݂◌֚b; a◌〪◌̖◌݂◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC RUKKAKHA, LATIN SMALL LETTER B
-0061 0742 059A 0316 302A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 
0316 059A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062; # 
(a◌݂◌֚◌̖◌〪b; a◌〪◌݂◌̖◌֚b; a◌〪◌݂◌̖◌֚b; a◌〪◌݂◌̖◌֚b; a◌〪◌݂◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC RUKKAKHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0742 0062;0061 1DFA 0316 0742 059A 0062;0061 1DFA 0316 
0742 059A 0062;0061 1DFA 0316 0742 059A 0062;0061 1DFA 0316 0742 059A 0062; # 
(a◌֚◌̖◌᷺◌݂b; a◌᷺◌̖◌݂◌֚b; a◌᷺◌̖◌݂◌֚b; a◌᷺◌̖◌݂◌֚b; a◌᷺◌̖◌݂◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC RUKKAKHA, LATIN SMALL LETTER B
+0061 0742 059A 0316 1DFA 0062;0061 1DFA 0742 0316 059A 0062;0061 1DFA 0742 
0316 059A 0062;0061 1DFA 0742 0316 059A 0062;0061 1DFA 0742 0316 059A 0062; # 
(a◌݂◌֚◌̖◌᷺b; a◌᷺◌݂◌̖◌֚b; a◌᷺◌݂◌̖◌֚b; a◌᷺◌݂◌̖◌֚b; a◌᷺◌݂◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC RUKKAKHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0743 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 
0315 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062; # 
(a◌̕◌̀◌֮◌݃b; à◌֮◌݃◌̕b; a◌֮◌̀◌݃◌̕b; à◌֮◌݃◌̕b; a◌֮◌̀◌݃◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC TWO VERTICAL DOTS ABOVE, LATIN SMALL LETTER B
 0061 0743 0315 0300 05AE 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 
0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062; # 
(a◌݃◌̕◌̀◌֮b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC TWO VERTICAL DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0744 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 
0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062; # 
(a◌֚◌̖◌〪◌݄b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC TWO VERTICAL DOTS BELOW, LATIN SMALL LETTER B
-0061 0744 059A 0316 302A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 
0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062; # 
(a◌݄◌֚◌̖◌〪b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC TWO VERTICAL DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0744 0062;0061 1DFA 0316 0744 059A 0062;0061 1DFA 0316 
0744 059A 0062;0061 1DFA 0316 0744 059A 0062;0061 1DFA 0316 0744 059A 0062; # 
(a◌֚◌̖◌᷺◌݄b; a◌᷺◌̖◌݄◌֚b; a◌᷺◌̖◌݄◌֚b; a◌᷺◌̖◌݄◌֚b; a◌᷺◌̖◌݄◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC TWO VERTICAL DOTS BELOW, LATIN SMALL LETTER B
+0061 0744 059A 0316 1DFA 0062;0061 1DFA 0744 0316 059A 0062;0061 1DFA 0744 
0316 059A 0062;0061 1DFA 0744 0316 059A 0062;0061 1DFA 0744 0316 059A 0062; # 
(a◌݄◌֚◌̖◌᷺b; a◌᷺◌݄◌̖◌֚b; a◌᷺◌݄◌̖◌֚b; a◌᷺◌݄◌̖◌֚b; a◌᷺◌݄◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC TWO VERTICAL DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0745 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 
0315 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062; # 
(a◌̕◌̀◌֮◌݅b; à◌֮◌݅◌̕b; a◌֮◌̀◌݅◌̕b; à◌֮◌݅◌̕b; a◌֮◌̀◌݅◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC THREE DOTS ABOVE, LATIN SMALL LETTER B
 0061 0745 0315 0300 05AE 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 
0300 0315 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062; # 
(a◌݅◌̕◌̀◌֮b; a◌֮◌݅◌̀◌̕b; a◌֮◌݅◌̀◌̕b; a◌֮◌݅◌̀◌̕b; a◌֮◌݅◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC THREE DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0746 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 
0746 059A 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062; # 
(a◌֚◌̖◌〪◌݆b; a◌〪◌̖◌݆◌֚b; a◌〪◌̖◌݆◌֚b; a◌〪◌̖◌݆◌֚b; a◌〪◌̖◌݆◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC THREE DOTS BELOW, LATIN SMALL LETTER B
-0061 0746 059A 0316 302A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 
0316 059A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062; # 
(a◌݆◌֚◌̖◌〪b; a◌〪◌݆◌̖◌֚b; a◌〪◌݆◌̖◌֚b; a◌〪◌݆◌̖◌֚b; a◌〪◌݆◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC THREE DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0746 0062;0061 1DFA 0316 0746 059A 0062;0061 1DFA 0316 
0746 059A 0062;0061 1DFA 0316 0746 059A 0062;0061 1DFA 0316 0746 059A 0062; # 
(a◌֚◌̖◌᷺◌݆b; a◌᷺◌̖◌݆◌֚b; a◌᷺◌̖◌݆◌֚b; a◌᷺◌̖◌݆◌֚b; a◌᷺◌̖◌݆◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC THREE DOTS BELOW, LATIN SMALL LETTER B
+0061 0746 059A 0316 1DFA 0062;0061 1DFA 0746 0316 059A 0062;0061 1DFA 0746 
0316 059A 0062;0061 1DFA 0746 0316 059A 0062;0061 1DFA 0746 0316 059A 0062; # 
(a◌݆◌֚◌̖◌᷺b; a◌᷺◌݆◌̖◌֚b; a◌᷺◌݆◌̖◌֚b; a◌᷺◌݆◌̖◌֚b; a◌᷺◌݆◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC THREE DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0747 0062;00E0 05AE 0747 0315 0062;0061 05AE 0300 0747 
0315 0062;00E0 05AE 0747 0315 0062;0061 05AE 0300 0747 0315 0062; # 
(a◌̕◌̀◌֮◌݇b; à◌֮◌݇◌̕b; a◌֮◌̀◌݇◌̕b; à◌֮◌݇◌̕b; a◌֮◌̀◌݇◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC OBLIQUE LINE ABOVE, LATIN SMALL LETTER B
 0061 0747 0315 0300 05AE 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 
0300 0315 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062; # 
(a◌݇◌̕◌̀◌֮b; a◌֮◌݇◌̀◌̕b; a◌֮◌݇◌̀◌̕b; a◌֮◌݇◌̀◌̕b; a◌֮◌݇◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC OBLIQUE LINE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0748 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 
0748 059A 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062; # 
(a◌֚◌̖◌〪◌݈b; a◌〪◌̖◌݈◌֚b; a◌〪◌̖◌݈◌֚b; a◌〪◌̖◌݈◌֚b; a◌〪◌̖◌݈◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SYRIAC OBLIQUE LINE BELOW, LATIN SMALL LETTER B
-0061 0748 059A 0316 302A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 
0316 059A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062; # 
(a◌݈◌֚◌̖◌〪b; a◌〪◌݈◌̖◌֚b; a◌〪◌݈◌̖◌֚b; a◌〪◌݈◌̖◌֚b; a◌〪◌݈◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC OBLIQUE LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0748 0062;0061 1DFA 0316 0748 059A 0062;0061 1DFA 0316 
0748 059A 0062;0061 1DFA 0316 0748 059A 0062;0061 1DFA 0316 0748 059A 0062; # 
(a◌֚◌̖◌᷺◌݈b; a◌᷺◌̖◌݈◌֚b; a◌᷺◌̖◌݈◌֚b; a◌᷺◌̖◌݈◌֚b; a◌᷺◌̖◌݈◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SYRIAC OBLIQUE LINE BELOW, LATIN SMALL LETTER B
+0061 0748 059A 0316 1DFA 0062;0061 1DFA 0748 0316 059A 0062;0061 1DFA 0748 
0316 059A 0062;0061 1DFA 0748 0316 059A 0062;0061 1DFA 0748 0316 059A 0062; # 
(a◌݈◌֚◌̖◌᷺b; a◌᷺◌݈◌̖◌֚b; a◌᷺◌݈◌̖◌֚b; a◌᷺◌݈◌̖◌֚b; a◌᷺◌݈◌̖◌֚b; ) LATIN SMALL 
LETTER A, SYRIAC OBLIQUE LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0749 0062;00E0 05AE 0749 0315 0062;0061 05AE 0300 0749 
0315 0062;00E0 05AE 0749 0315 0062;0061 05AE 0300 0749 0315 0062; # 
(a◌̕◌̀◌֮◌݉b; à◌֮◌݉◌̕b; a◌֮◌̀◌݉◌̕b; à◌֮◌݉◌̕b; a◌֮◌̀◌݉◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC MUSIC, LATIN SMALL LETTER B
 0061 0749 0315 0300 05AE 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 
0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062; # 
(a◌݉◌̕◌̀◌֮b; a◌֮◌݉◌̀◌̕b; a◌֮◌݉◌̀◌̕b; a◌֮◌݉◌̀◌̕b; a◌֮◌݉◌̀◌̕b; ) LATIN SMALL 
LETTER A, SYRIAC MUSIC, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, 
HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 074A 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 
0315 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062; # 
(a◌̕◌̀◌֮◌݊b; à◌֮◌݊◌̕b; a◌֮◌̀◌݊◌̕b; à◌֮◌݊◌̕b; a◌֮◌̀◌݊◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SYRIAC BARREKH, LATIN SMALL LETTER B
@@ -17489,12 +17548,12 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 07F0 0315 0300 05AE 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 
0300 0315 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062; # 
(a◌߰◌̕◌̀◌֮b; a◌֮◌߰◌̀◌̕b; a◌֮◌߰◌̀◌̕b; a◌֮◌߰◌̀◌̕b; a◌֮◌߰◌̀◌̕b; ) LATIN SMALL 
LETTER A, NKO COMBINING LONG LOW TONE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 07F1 0062;00E0 05AE 07F1 0315 0062;0061 05AE 0300 07F1 
0315 0062;00E0 05AE 07F1 0315 0062;0061 05AE 0300 07F1 0315 0062; # 
(a◌̕◌̀◌֮◌߱b; à◌֮◌߱◌̕b; a◌֮◌̀◌߱◌̕b; à◌֮◌߱◌̕b; a◌֮◌̀◌߱◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
NKO COMBINING LONG RISING TONE, LATIN SMALL LETTER B
 0061 07F1 0315 0300 05AE 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 
0300 0315 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062; # 
(a◌߱◌̕◌̀◌֮b; a◌֮◌߱◌̀◌̕b; a◌֮◌߱◌̀◌̕b; a◌֮◌߱◌̀◌̕b; a◌֮◌߱◌̀◌̕b; ) LATIN SMALL 
LETTER A, NKO COMBINING LONG RISING TONE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 07F2 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 
07F2 059A 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062; # 
(a◌֚◌̖◌〪◌߲b; a◌〪◌̖◌߲◌֚b; a◌〪◌̖◌߲◌֚b; a◌〪◌̖◌߲◌֚b; a◌〪◌̖◌߲◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, NKO COMBINING NASALIZATION MARK, LATIN SMALL LETTER B
-0061 07F2 059A 0316 302A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 
0316 059A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062; # 
(a◌߲◌֚◌̖◌〪b; a◌〪◌߲◌̖◌֚b; a◌〪◌߲◌̖◌֚b; a◌〪◌߲◌̖◌֚b; a◌〪◌߲◌̖◌֚b; ) LATIN SMALL 
LETTER A, NKO COMBINING NASALIZATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 07F2 0062;0061 1DFA 0316 07F2 059A 0062;0061 1DFA 0316 
07F2 059A 0062;0061 1DFA 0316 07F2 059A 0062;0061 1DFA 0316 07F2 059A 0062; # 
(a◌֚◌̖◌᷺◌߲b; a◌᷺◌̖◌߲◌֚b; a◌᷺◌̖◌߲◌֚b; a◌᷺◌̖◌߲◌֚b; a◌᷺◌̖◌߲◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, NKO COMBINING NASALIZATION MARK, LATIN SMALL LETTER B
+0061 07F2 059A 0316 1DFA 0062;0061 1DFA 07F2 0316 059A 0062;0061 1DFA 07F2 
0316 059A 0062;0061 1DFA 07F2 0316 059A 0062;0061 1DFA 07F2 0316 059A 0062; # 
(a◌߲◌֚◌̖◌᷺b; a◌᷺◌߲◌̖◌֚b; a◌᷺◌߲◌̖◌֚b; a◌᷺◌߲◌̖◌֚b; a◌᷺◌߲◌̖◌֚b; ) LATIN SMALL 
LETTER A, NKO COMBINING NASALIZATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 07F3 0062;00E0 05AE 07F3 0315 0062;0061 05AE 0300 07F3 
0315 0062;00E0 05AE 07F3 0315 0062;0061 05AE 0300 07F3 0315 0062; # 
(a◌̕◌̀◌֮◌߳b; à◌֮◌߳◌̕b; a◌֮◌̀◌߳◌̕b; à◌֮◌߳◌̕b; a◌֮◌̀◌߳◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
NKO COMBINING DOUBLE DOT ABOVE, LATIN SMALL LETTER B
 0061 07F3 0315 0300 05AE 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 
0300 0315 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062; # 
(a◌߳◌̕◌̀◌֮b; a◌֮◌߳◌̀◌̕b; a◌֮◌߳◌̀◌̕b; a◌֮◌߳◌̀◌̕b; a◌֮◌߳◌̀◌̕b; ) LATIN SMALL 
LETTER A, NKO COMBINING DOUBLE DOT ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 07FD 0062;0061 302A 0316 07FD 059A 0062;0061 302A 0316 
07FD 059A 0062;0061 302A 0316 07FD 059A 0062;0061 302A 0316 07FD 059A 0062; # 
(a◌֚◌̖◌〪◌߽b; a◌〪◌̖◌߽◌֚b; a◌〪◌̖◌߽◌֚b; a◌〪◌̖◌߽◌֚b; a◌〪◌̖◌߽◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, NKO DANTAYALAN, LATIN SMALL LETTER B
-0061 07FD 059A 0316 302A 0062;0061 302A 07FD 0316 059A 0062;0061 302A 07FD 
0316 059A 0062;0061 302A 07FD 0316 059A 0062;0061 302A 07FD 0316 059A 0062; # 
(a◌߽◌֚◌̖◌〪b; a◌〪◌߽◌̖◌֚b; a◌〪◌߽◌̖◌֚b; a◌〪◌߽◌̖◌֚b; a◌〪◌߽◌̖◌֚b; ) LATIN SMALL 
LETTER A, NKO DANTAYALAN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 07FD 0062;0061 1DFA 0316 07FD 059A 0062;0061 1DFA 0316 
07FD 059A 0062;0061 1DFA 0316 07FD 059A 0062;0061 1DFA 0316 07FD 059A 0062; # 
(a◌֚◌̖◌᷺◌߽b; a◌᷺◌̖◌߽◌֚b; a◌᷺◌̖◌߽◌֚b; a◌᷺◌̖◌߽◌֚b; a◌᷺◌̖◌߽◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, NKO DANTAYALAN, LATIN SMALL LETTER B
+0061 07FD 059A 0316 1DFA 0062;0061 1DFA 07FD 0316 059A 0062;0061 1DFA 07FD 
0316 059A 0062;0061 1DFA 07FD 0316 059A 0062;0061 1DFA 07FD 0316 059A 0062; # 
(a◌߽◌֚◌̖◌᷺b; a◌᷺◌߽◌̖◌֚b; a◌᷺◌߽◌̖◌֚b; a◌᷺◌߽◌̖◌֚b; a◌᷺◌߽◌̖◌֚b; ) LATIN SMALL 
LETTER A, NKO DANTAYALAN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0816 0062;00E0 05AE 0816 0315 0062;0061 05AE 0300 0816 
0315 0062;00E0 05AE 0816 0315 0062;0061 05AE 0300 0816 0315 0062; # 
(a◌̕◌̀◌֮◌ࠖb; à◌֮◌ࠖ◌̕b; a◌֮◌̀◌ࠖ◌̕b; à◌֮◌ࠖ◌̕b; a◌֮◌̀◌ࠖ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SAMARITAN MARK IN, LATIN SMALL LETTER B
 0061 0816 0315 0300 05AE 0062;0061 05AE 0816 0300 0315 0062;0061 05AE 0816 
0300 0315 0062;0061 05AE 0816 0300 0315 0062;0061 05AE 0816 0300 0315 0062; # 
(a◌ࠖ◌̕◌̀◌֮b; a◌֮◌ࠖ◌̀◌̕b; a◌֮◌ࠖ◌̀◌̕b; a◌֮◌ࠖ◌̀◌̕b; a◌֮◌ࠖ◌̀◌̕b; ) LATIN SMALL 
LETTER A, SAMARITAN MARK IN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0817 0062;00E0 05AE 0817 0315 0062;0061 05AE 0300 0817 
0315 0062;00E0 05AE 0817 0315 0062;0061 05AE 0300 0817 0315 0062; # 
(a◌̕◌̀◌֮◌ࠗb; à◌֮◌ࠗ◌̕b; a◌֮◌̀◌ࠗ◌̕b; à◌֮◌ࠗ◌̕b; a◌֮◌̀◌ࠗ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SAMARITAN MARK IN-ALAF, LATIN SMALL LETTER B
@@ -17537,14 +17596,48 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 082C 0315 0300 05AE 0062;0061 05AE 082C 0300 0315 0062;0061 05AE 082C 
0300 0315 0062;0061 05AE 082C 0300 0315 0062;0061 05AE 082C 0300 0315 0062; # 
(a◌ࠬ◌̕◌̀◌֮b; a◌֮◌ࠬ◌̀◌̕b; a◌֮◌ࠬ◌̀◌̕b; a◌֮◌ࠬ◌̀◌̕b; a◌֮◌ࠬ◌̀◌̕b; ) LATIN SMALL 
LETTER A, SAMARITAN VOWEL SIGN SUKUN, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 082D 0062;00E0 05AE 082D 0315 0062;0061 05AE 0300 082D 
0315 0062;00E0 05AE 082D 0315 0062;0061 05AE 0300 082D 0315 0062; # 
(a◌̕◌̀◌֮◌࠭b; à◌֮◌࠭◌̕b; a◌֮◌̀◌࠭◌̕b; à◌֮◌࠭◌̕b; a◌֮◌̀◌࠭◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SAMARITAN MARK NEQUDAA, LATIN SMALL LETTER B
 0061 082D 0315 0300 05AE 0062;0061 05AE 082D 0300 0315 0062;0061 05AE 082D 
0300 0315 0062;0061 05AE 082D 0300 0315 0062;0061 05AE 082D 0300 0315 0062; # 
(a◌࠭◌̕◌̀◌֮b; a◌֮◌࠭◌̀◌̕b; a◌֮◌࠭◌̀◌̕b; a◌֮◌࠭◌̀◌̕b; a◌֮◌࠭◌̀◌̕b; ) LATIN SMALL 
LETTER A, SAMARITAN MARK NEQUDAA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0859 0062;0061 302A 0316 0859 059A 0062;0061 302A 0316 
0859 059A 0062;0061 302A 0316 0859 059A 0062;0061 302A 0316 0859 059A 0062; # 
(a◌֚◌̖◌〪◌࡙b; a◌〪◌̖◌࡙◌֚b; a◌〪◌̖◌࡙◌֚b; a◌〪◌̖◌࡙◌֚b; a◌〪◌̖◌࡙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MANDAIC AFFRICATION MARK, LATIN SMALL LETTER B
-0061 0859 059A 0316 302A 0062;0061 302A 0859 0316 059A 0062;0061 302A 0859 
0316 059A 0062;0061 302A 0859 0316 059A 0062;0061 302A 0859 0316 059A 0062; # 
(a◌࡙◌֚◌̖◌〪b; a◌〪◌࡙◌̖◌֚b; a◌〪◌࡙◌̖◌֚b; a◌〪◌࡙◌̖◌֚b; a◌〪◌࡙◌̖◌֚b; ) LATIN SMALL 
LETTER A, MANDAIC AFFRICATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 085A 0062;0061 302A 0316 085A 059A 0062;0061 302A 0316 
085A 059A 0062;0061 302A 0316 085A 059A 0062;0061 302A 0316 085A 059A 0062; # 
(a◌֚◌̖◌〪◌࡚b; a◌〪◌̖◌࡚◌֚b; a◌〪◌̖◌࡚◌֚b; a◌〪◌̖◌࡚◌֚b; a◌〪◌̖◌࡚◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MANDAIC VOCALIZATION MARK, LATIN SMALL LETTER B
-0061 085A 059A 0316 302A 0062;0061 302A 085A 0316 059A 0062;0061 302A 085A 
0316 059A 0062;0061 302A 085A 0316 059A 0062;0061 302A 085A 0316 059A 0062; # 
(a◌࡚◌֚◌̖◌〪b; a◌〪◌࡚◌̖◌֚b; a◌〪◌࡚◌̖◌֚b; a◌〪◌࡚◌̖◌֚b; a◌〪◌࡚◌̖◌֚b; ) LATIN SMALL 
LETTER A, MANDAIC VOCALIZATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 085B 0062;0061 302A 0316 085B 059A 0062;0061 302A 0316 
085B 059A 0062;0061 302A 0316 085B 059A 0062;0061 302A 0316 085B 059A 0062; # 
(a◌֚◌̖◌〪◌࡛b; a◌〪◌̖◌࡛◌֚b; a◌〪◌̖◌࡛◌֚b; a◌〪◌̖◌࡛◌֚b; a◌〪◌̖◌࡛◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MANDAIC GEMINATION MARK, LATIN SMALL LETTER B
-0061 085B 059A 0316 302A 0062;0061 302A 085B 0316 059A 0062;0061 302A 085B 
0316 059A 0062;0061 302A 085B 0316 059A 0062;0061 302A 085B 0316 059A 0062; # 
(a◌࡛◌֚◌̖◌〪b; a◌〪◌࡛◌̖◌֚b; a◌〪◌࡛◌̖◌֚b; a◌〪◌࡛◌̖◌֚b; a◌〪◌࡛◌̖◌֚b; ) LATIN SMALL 
LETTER A, MANDAIC GEMINATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 08D3 0062;0061 302A 0316 08D3 059A 0062;0061 302A 0316 
08D3 059A 0062;0061 302A 0316 08D3 059A 0062;0061 302A 0316 08D3 059A 0062; # 
(a◌֚◌̖◌〪◌࣓b; a◌〪◌̖◌࣓◌֚b; a◌〪◌̖◌࣓◌֚b; a◌〪◌̖◌࣓◌֚b; a◌〪◌̖◌࣓◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC SMALL LOW WAW, LATIN SMALL LETTER B
-0061 08D3 059A 0316 302A 0062;0061 302A 08D3 0316 059A 0062;0061 302A 08D3 
0316 059A 0062;0061 302A 08D3 0316 059A 0062;0061 302A 08D3 0316 059A 0062; # 
(a◌࣓◌֚◌̖◌〪b; a◌〪◌࣓◌̖◌֚b; a◌〪◌࣓◌̖◌֚b; a◌〪◌࣓◌̖◌֚b; a◌〪◌࣓◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SMALL LOW WAW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0859 0062;0061 1DFA 0316 0859 059A 0062;0061 1DFA 0316 
0859 059A 0062;0061 1DFA 0316 0859 059A 0062;0061 1DFA 0316 0859 059A 0062; # 
(a◌֚◌̖◌᷺◌࡙b; a◌᷺◌̖◌࡙◌֚b; a◌᷺◌̖◌࡙◌֚b; a◌᷺◌̖◌࡙◌֚b; a◌᷺◌̖◌࡙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MANDAIC AFFRICATION MARK, LATIN SMALL LETTER B
+0061 0859 059A 0316 1DFA 0062;0061 1DFA 0859 0316 059A 0062;0061 1DFA 0859 
0316 059A 0062;0061 1DFA 0859 0316 059A 0062;0061 1DFA 0859 0316 059A 0062; # 
(a◌࡙◌֚◌̖◌᷺b; a◌᷺◌࡙◌̖◌֚b; a◌᷺◌࡙◌̖◌֚b; a◌᷺◌࡙◌̖◌֚b; a◌᷺◌࡙◌̖◌֚b; ) LATIN SMALL 
LETTER A, MANDAIC AFFRICATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 085A 0062;0061 1DFA 0316 085A 059A 0062;0061 1DFA 0316 
085A 059A 0062;0061 1DFA 0316 085A 059A 0062;0061 1DFA 0316 085A 059A 0062; # 
(a◌֚◌̖◌᷺◌࡚b; a◌᷺◌̖◌࡚◌֚b; a◌᷺◌̖◌࡚◌֚b; a◌᷺◌̖◌࡚◌֚b; a◌᷺◌̖◌࡚◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MANDAIC VOCALIZATION MARK, LATIN SMALL LETTER B
+0061 085A 059A 0316 1DFA 0062;0061 1DFA 085A 0316 059A 0062;0061 1DFA 085A 
0316 059A 0062;0061 1DFA 085A 0316 059A 0062;0061 1DFA 085A 0316 059A 0062; # 
(a◌࡚◌֚◌̖◌᷺b; a◌᷺◌࡚◌̖◌֚b; a◌᷺◌࡚◌̖◌֚b; a◌᷺◌࡚◌̖◌֚b; a◌᷺◌࡚◌̖◌֚b; ) LATIN SMALL 
LETTER A, MANDAIC VOCALIZATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 085B 0062;0061 1DFA 0316 085B 059A 0062;0061 1DFA 0316 
085B 059A 0062;0061 1DFA 0316 085B 059A 0062;0061 1DFA 0316 085B 059A 0062; # 
(a◌֚◌̖◌᷺◌࡛b; a◌᷺◌̖◌࡛◌֚b; a◌᷺◌̖◌࡛◌֚b; a◌᷺◌̖◌࡛◌֚b; a◌᷺◌̖◌࡛◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MANDAIC GEMINATION MARK, LATIN SMALL LETTER B
+0061 085B 059A 0316 1DFA 0062;0061 1DFA 085B 0316 059A 0062;0061 1DFA 085B 
0316 059A 0062;0061 1DFA 085B 0316 059A 0062;0061 1DFA 085B 0316 059A 0062; # 
(a◌࡛◌֚◌̖◌᷺b; a◌᷺◌࡛◌̖◌֚b; a◌᷺◌࡛◌̖◌֚b; a◌᷺◌࡛◌̖◌֚b; a◌᷺◌࡛◌̖◌֚b; ) LATIN SMALL 
LETTER A, MANDAIC GEMINATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0898 0062;00E0 05AE 0898 0315 0062;0061 05AE 0300 0898 
0315 0062;00E0 05AE 0898 0315 0062;0061 05AE 0300 0898 0315 0062; # 
(a◌̕◌̀◌֮◌࢘b; à◌֮◌࢘◌̕b; a◌֮◌̀◌࢘◌̕b; à◌֮◌࢘◌̕b; a◌֮◌̀◌࢘◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH WORD AL-JUZ, LATIN SMALL LETTER B
+0061 0898 0315 0300 05AE 0062;0061 05AE 0898 0300 0315 0062;0061 05AE 0898 
0300 0315 0062;0061 05AE 0898 0300 0315 0062;0061 05AE 0898 0300 0315 0062; # 
(a◌࢘◌̕◌̀◌֮b; a◌֮◌࢘◌̀◌̕b; a◌֮◌࢘◌̀◌̕b; a◌֮◌࢘◌̀◌̕b; a◌֮◌࢘◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH WORD AL-JUZ, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0899 0062;0061 1DFA 0316 0899 059A 0062;0061 1DFA 0316 
0899 059A 0062;0061 1DFA 0316 0899 059A 0062;0061 1DFA 0316 0899 059A 0062; # 
(a◌֚◌̖◌᷺◌࢙b; a◌᷺◌̖◌࢙◌֚b; a◌᷺◌̖◌࢙◌֚b; a◌᷺◌̖◌࢙◌֚b; a◌᷺◌̖◌࢙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC SMALL LOW WORD ISHMAAM, LATIN SMALL LETTER B
+0061 0899 059A 0316 1DFA 0062;0061 1DFA 0899 0316 059A 0062;0061 1DFA 0899 
0316 059A 0062;0061 1DFA 0899 0316 059A 0062;0061 1DFA 0899 0316 059A 0062; # 
(a◌࢙◌֚◌̖◌᷺b; a◌᷺◌࢙◌̖◌֚b; a◌᷺◌࢙◌̖◌֚b; a◌᷺◌࢙◌̖◌֚b; a◌᷺◌࢙◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SMALL LOW WORD ISHMAAM, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 089A 0062;0061 1DFA 0316 089A 059A 0062;0061 1DFA 0316 
089A 059A 0062;0061 1DFA 0316 089A 059A 0062;0061 1DFA 0316 089A 059A 0062; # 
(a◌֚◌̖◌᷺◌࢚b; a◌᷺◌̖◌࢚◌֚b; a◌᷺◌̖◌࢚◌֚b; a◌᷺◌̖◌࢚◌֚b; a◌᷺◌̖◌࢚◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC SMALL LOW WORD IMAALA, LATIN SMALL LETTER B
+0061 089A 059A 0316 1DFA 0062;0061 1DFA 089A 0316 059A 0062;0061 1DFA 089A 
0316 059A 0062;0061 1DFA 089A 0316 059A 0062;0061 1DFA 089A 0316 059A 0062; # 
(a◌࢚◌֚◌̖◌᷺b; a◌᷺◌࢚◌̖◌֚b; a◌᷺◌࢚◌̖◌֚b; a◌᷺◌࢚◌̖◌֚b; a◌᷺◌࢚◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SMALL LOW WORD IMAALA, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 089B 0062;0061 1DFA 0316 089B 059A 0062;0061 1DFA 0316 
089B 059A 0062;0061 1DFA 0316 089B 059A 0062;0061 1DFA 0316 089B 059A 0062; # 
(a◌֚◌̖◌᷺◌࢛b; a◌᷺◌̖◌࢛◌֚b; a◌᷺◌̖◌࢛◌֚b; a◌᷺◌̖◌࢛◌֚b; a◌᷺◌̖◌࢛◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC SMALL LOW WORD TASHEEL, LATIN SMALL LETTER B
+0061 089B 059A 0316 1DFA 0062;0061 1DFA 089B 0316 059A 0062;0061 1DFA 089B 
0316 059A 0062;0061 1DFA 089B 0316 059A 0062;0061 1DFA 089B 0316 059A 0062; # 
(a◌࢛◌֚◌̖◌᷺b; a◌᷺◌࢛◌̖◌֚b; a◌᷺◌࢛◌̖◌֚b; a◌᷺◌࢛◌̖◌֚b; a◌᷺◌࢛◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SMALL LOW WORD TASHEEL, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 0315 0300 05AE 089C 0062;00E0 05AE 089C 0315 0062;0061 05AE 0300 089C 
0315 0062;00E0 05AE 089C 0315 0062;0061 05AE 0300 089C 0315 0062; # 
(a◌̕◌̀◌֮◌࢜b; à◌֮◌࢜◌̕b; a◌֮◌̀◌࢜◌̕b; à◌֮◌࢜◌̕b; a◌֮◌̀◌࢜◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC MADDA WAAJIB, LATIN SMALL LETTER B
+0061 089C 0315 0300 05AE 0062;0061 05AE 089C 0300 0315 0062;0061 05AE 089C 
0300 0315 0062;0061 05AE 089C 0300 0315 0062;0061 05AE 089C 0300 0315 0062; # 
(a◌࢜◌̕◌̀◌֮b; a◌֮◌࢜◌̀◌̕b; a◌֮◌࢜◌̀◌̕b; a◌֮◌࢜◌̀◌̕b; a◌֮◌࢜◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC MADDA WAAJIB, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 089D 0062;00E0 05AE 089D 0315 0062;0061 05AE 0300 089D 
0315 0062;00E0 05AE 089D 0315 0062;0061 05AE 0300 089D 0315 0062; # 
(a◌̕◌̀◌֮◌࢝b; à◌֮◌࢝◌̕b; a◌֮◌̀◌࢝◌̕b; à◌֮◌࢝◌̕b; a◌֮◌̀◌࢝◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SUPERSCRIPT ALEF MOKHASSAS, LATIN SMALL LETTER B
+0061 089D 0315 0300 05AE 0062;0061 05AE 089D 0300 0315 0062;0061 05AE 089D 
0300 0315 0062;0061 05AE 089D 0300 0315 0062;0061 05AE 089D 0300 0315 0062; # 
(a◌࢝◌̕◌̀◌֮b; a◌֮◌࢝◌̀◌̕b; a◌֮◌࢝◌̀◌̕b; a◌֮◌࢝◌̀◌̕b; a◌֮◌࢝◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SUPERSCRIPT ALEF MOKHASSAS, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 089E 0062;00E0 05AE 089E 0315 0062;0061 05AE 0300 089E 
0315 0062;00E0 05AE 089E 0315 0062;0061 05AE 0300 089E 0315 0062; # 
(a◌̕◌̀◌֮◌࢞b; à◌֮◌࢞◌̕b; a◌֮◌̀◌࢞◌̕b; à◌֮◌࢞◌̕b; a◌֮◌̀◌࢞◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC DOUBLED MADDA, LATIN SMALL LETTER B
+0061 089E 0315 0300 05AE 0062;0061 05AE 089E 0300 0315 0062;0061 05AE 089E 
0300 0315 0062;0061 05AE 089E 0300 0315 0062;0061 05AE 089E 0300 0315 0062; # 
(a◌࢞◌̕◌̀◌֮b; a◌֮◌࢞◌̀◌̕b; a◌֮◌࢞◌̀◌̕b; a◌֮◌࢞◌̀◌̕b; a◌֮◌࢞◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC DOUBLED MADDA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 089F 0062;00E0 05AE 089F 0315 0062;0061 05AE 0300 089F 
0315 0062;00E0 05AE 089F 0315 0062;0061 05AE 0300 089F 0315 0062; # 
(a◌̕◌̀◌֮◌࢟b; à◌֮◌࢟◌̕b; a◌֮◌̀◌࢟◌̕b; à◌֮◌࢟◌̕b; a◌֮◌̀◌࢟◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC HALF MADDA OVER MADDA, LATIN SMALL LETTER B
+0061 089F 0315 0300 05AE 0062;0061 05AE 089F 0300 0315 0062;0061 05AE 089F 
0300 0315 0062;0061 05AE 089F 0300 0315 0062;0061 05AE 089F 0300 0315 0062; # 
(a◌࢟◌̕◌̀◌֮b; a◌֮◌࢟◌̀◌̕b; a◌֮◌࢟◌̀◌̕b; a◌֮◌࢟◌̀◌̕b; a◌֮◌࢟◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC HALF MADDA OVER MADDA, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 08CA 0062;00E0 05AE 08CA 0315 0062;0061 05AE 0300 08CA 
0315 0062;00E0 05AE 08CA 0315 0062;0061 05AE 0300 08CA 0315 0062; # 
(a◌̕◌̀◌֮◌࣊b; à◌֮◌࣊◌̕b; a◌֮◌̀◌࣊◌̕b; à◌֮◌࣊◌̕b; a◌֮◌̀◌࣊◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH FARSI YEH, LATIN SMALL LETTER B
+0061 08CA 0315 0300 05AE 0062;0061 05AE 08CA 0300 0315 0062;0061 05AE 08CA 
0300 0315 0062;0061 05AE 08CA 0300 0315 0062;0061 05AE 08CA 0300 0315 0062; # 
(a◌࣊◌̕◌̀◌֮b; a◌֮◌࣊◌̀◌̕b; a◌֮◌࣊◌̀◌̕b; a◌֮◌࣊◌̀◌̕b; a◌֮◌࣊◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH FARSI YEH, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 08CB 0062;00E0 05AE 08CB 0315 0062;0061 05AE 0300 08CB 
0315 0062;00E0 05AE 08CB 0315 0062;0061 05AE 0300 08CB 0315 0062; # 
(a◌̕◌̀◌֮◌࣋b; à◌֮◌࣋◌̕b; a◌֮◌̀◌࣋◌̕b; à◌֮◌࣋◌̕b; a◌֮◌̀◌࣋◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW, LATIN SMALL LETTER B
+0061 08CB 0315 0300 05AE 0062;0061 05AE 08CB 0300 0315 0062;0061 05AE 08CB 
0300 0315 0062;0061 05AE 08CB 0300 0315 0062;0061 05AE 08CB 0300 0315 0062; # 
(a◌࣋◌̕◌̀◌֮b; a◌֮◌࣋◌̀◌̕b; a◌֮◌࣋◌̀◌̕b; a◌֮◌࣋◌̀◌̕b; a◌֮◌࣋◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW, COMBINING COMMA 
ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 08CC 0062;00E0 05AE 08CC 0315 0062;0061 05AE 0300 08CC 
0315 0062;00E0 05AE 08CC 0315 0062;0061 05AE 0300 08CC 0315 0062; # 
(a◌̕◌̀◌֮◌࣌b; à◌֮◌࣌◌̕b; a◌֮◌̀◌࣌◌̕b; à◌֮◌࣌◌̕b; a◌֮◌̀◌࣌◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH WORD SAH, LATIN SMALL LETTER B
+0061 08CC 0315 0300 05AE 0062;0061 05AE 08CC 0300 0315 0062;0061 05AE 08CC 
0300 0315 0062;0061 05AE 08CC 0300 0315 0062;0061 05AE 08CC 0300 0315 0062; # 
(a◌࣌◌̕◌̀◌֮b; a◌֮◌࣌◌̀◌̕b; a◌֮◌࣌◌̀◌̕b; a◌֮◌࣌◌̀◌̕b; a◌֮◌࣌◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH WORD SAH, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 08CD 0062;00E0 05AE 08CD 0315 0062;0061 05AE 0300 08CD 
0315 0062;00E0 05AE 08CD 0315 0062;0061 05AE 0300 08CD 0315 0062; # 
(a◌̕◌̀◌֮◌࣍b; à◌֮◌࣍◌̕b; a◌֮◌̀◌࣍◌̕b; à◌֮◌࣍◌̕b; a◌֮◌̀◌࣍◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH ZAH, LATIN SMALL LETTER B
+0061 08CD 0315 0300 05AE 0062;0061 05AE 08CD 0300 0315 0062;0061 05AE 08CD 
0300 0315 0062;0061 05AE 08CD 0300 0315 0062;0061 05AE 08CD 0300 0315 0062; # 
(a◌࣍◌̕◌̀◌֮b; a◌֮◌࣍◌̀◌̕b; a◌֮◌࣍◌̀◌̕b; a◌֮◌࣍◌̀◌̕b; a◌֮◌࣍◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH ZAH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 08CE 0062;00E0 05AE 08CE 0315 0062;0061 05AE 0300 08CE 
0315 0062;00E0 05AE 08CE 0315 0062;0061 05AE 0300 08CE 0315 0062; # 
(a◌̕◌̀◌֮◌࣎b; à◌֮◌࣎◌̕b; a◌֮◌̀◌࣎◌̕b; à◌֮◌࣎◌̕b; a◌֮◌̀◌࣎◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC LARGE ROUND DOT ABOVE, LATIN SMALL LETTER B
+0061 08CE 0315 0300 05AE 0062;0061 05AE 08CE 0300 0315 0062;0061 05AE 08CE 
0300 0315 0062;0061 05AE 08CE 0300 0315 0062;0061 05AE 08CE 0300 0315 0062; # 
(a◌࣎◌̕◌̀◌֮b; a◌֮◌࣎◌̀◌̕b; a◌֮◌࣎◌̀◌̕b; a◌֮◌࣎◌̀◌̕b; a◌֮◌࣎◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC LARGE ROUND DOT ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08CF 0062;0061 1DFA 0316 08CF 059A 0062;0061 1DFA 0316 
08CF 059A 0062;0061 1DFA 0316 08CF 059A 0062;0061 1DFA 0316 08CF 059A 0062; # 
(a◌֚◌̖◌᷺◌࣏b; a◌᷺◌̖◌࣏◌֚b; a◌᷺◌̖◌࣏◌֚b; a◌᷺◌̖◌࣏◌֚b; a◌᷺◌̖◌࣏◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC LARGE ROUND DOT BELOW, LATIN SMALL LETTER B
+0061 08CF 059A 0316 1DFA 0062;0061 1DFA 08CF 0316 059A 0062;0061 1DFA 08CF 
0316 059A 0062;0061 1DFA 08CF 0316 059A 0062;0061 1DFA 08CF 0316 059A 0062; # 
(a◌࣏◌֚◌̖◌᷺b; a◌᷺◌࣏◌̖◌֚b; a◌᷺◌࣏◌̖◌֚b; a◌᷺◌࣏◌̖◌֚b; a◌᷺◌࣏◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC LARGE ROUND DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08D0 0062;0061 1DFA 0316 08D0 059A 0062;0061 1DFA 0316 
08D0 059A 0062;0061 1DFA 0316 08D0 059A 0062;0061 1DFA 0316 08D0 059A 0062; # 
(a◌֚◌̖◌᷺◌࣐b; a◌᷺◌̖◌࣐◌֚b; a◌᷺◌̖◌࣐◌֚b; a◌᷺◌̖◌࣐◌֚b; a◌᷺◌̖◌࣐◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC SUKUN BELOW, LATIN SMALL LETTER B
+0061 08D0 059A 0316 1DFA 0062;0061 1DFA 08D0 0316 059A 0062;0061 1DFA 08D0 
0316 059A 0062;0061 1DFA 08D0 0316 059A 0062;0061 1DFA 08D0 0316 059A 0062; # 
(a◌࣐◌֚◌̖◌᷺b; a◌᷺◌࣐◌̖◌֚b; a◌᷺◌࣐◌̖◌֚b; a◌᷺◌࣐◌̖◌֚b; a◌᷺◌࣐◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SUKUN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08D1 0062;0061 1DFA 0316 08D1 059A 0062;0061 1DFA 0316 
08D1 059A 0062;0061 1DFA 0316 08D1 059A 0062;0061 1DFA 0316 08D1 059A 0062; # 
(a◌֚◌̖◌᷺◌࣑b; a◌᷺◌̖◌࣑◌֚b; a◌᷺◌̖◌࣑◌֚b; a◌᷺◌̖◌࣑◌֚b; a◌᷺◌̖◌࣑◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC LARGE CIRCLE BELOW, LATIN SMALL LETTER B
+0061 08D1 059A 0316 1DFA 0062;0061 1DFA 08D1 0316 059A 0062;0061 1DFA 08D1 
0316 059A 0062;0061 1DFA 08D1 0316 059A 0062;0061 1DFA 08D1 0316 059A 0062; # 
(a◌࣑◌֚◌̖◌᷺b; a◌᷺◌࣑◌̖◌֚b; a◌᷺◌࣑◌̖◌֚b; a◌᷺◌࣑◌̖◌֚b; a◌᷺◌࣑◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC LARGE CIRCLE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08D2 0062;0061 1DFA 0316 08D2 059A 0062;0061 1DFA 0316 
08D2 059A 0062;0061 1DFA 0316 08D2 059A 0062;0061 1DFA 0316 08D2 059A 0062; # 
(a◌֚◌̖◌᷺◌࣒b; a◌᷺◌̖◌࣒◌֚b; a◌᷺◌̖◌࣒◌֚b; a◌᷺◌̖◌࣒◌֚b; a◌᷺◌̖◌࣒◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW, LATIN SMALL LETTER B
+0061 08D2 059A 0316 1DFA 0062;0061 1DFA 08D2 0316 059A 0062;0061 1DFA 08D2 
0316 059A 0062;0061 1DFA 08D2 0316 059A 0062;0061 1DFA 08D2 0316 059A 0062; # 
(a◌࣒◌֚◌̖◌᷺b; a◌᷺◌࣒◌̖◌֚b; a◌᷺◌࣒◌̖◌֚b; a◌᷺◌࣒◌̖◌֚b; a◌᷺◌࣒◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08D3 0062;0061 1DFA 0316 08D3 059A 0062;0061 1DFA 0316 
08D3 059A 0062;0061 1DFA 0316 08D3 059A 0062;0061 1DFA 0316 08D3 059A 0062; # 
(a◌֚◌̖◌᷺◌࣓b; a◌᷺◌̖◌࣓◌֚b; a◌᷺◌̖◌࣓◌֚b; a◌᷺◌̖◌࣓◌֚b; a◌᷺◌̖◌࣓◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC SMALL LOW WAW, LATIN SMALL LETTER B
+0061 08D3 059A 0316 1DFA 0062;0061 1DFA 08D3 0316 059A 0062;0061 1DFA 08D3 
0316 059A 0062;0061 1DFA 08D3 0316 059A 0062;0061 1DFA 08D3 0316 059A 0062; # 
(a◌࣓◌֚◌̖◌᷺b; a◌᷺◌࣓◌̖◌֚b; a◌᷺◌࣓◌̖◌֚b; a◌᷺◌࣓◌̖◌֚b; a◌᷺◌࣓◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC SMALL LOW WAW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08D4 0062;00E0 05AE 08D4 0315 0062;0061 05AE 0300 08D4 
0315 0062;00E0 05AE 08D4 0315 0062;0061 05AE 0300 08D4 0315 0062; # 
(a◌̕◌̀◌֮◌ࣔb; à◌֮◌ࣔ◌̕b; a◌֮◌̀◌ࣔ◌̕b; à◌֮◌ࣔ◌̕b; a◌֮◌̀◌ࣔ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH WORD AR-RUB, LATIN SMALL LETTER B
 0061 08D4 0315 0300 05AE 0062;0061 05AE 08D4 0300 0315 0062;0061 05AE 08D4 
0300 0315 0062;0061 05AE 08D4 0300 0315 0062;0061 05AE 08D4 0300 0315 0062; # 
(a◌ࣔ◌̕◌̀◌֮b; a◌֮◌ࣔ◌̀◌̕b; a◌֮◌ࣔ◌̀◌̕b; a◌֮◌ࣔ◌̀◌̕b; a◌֮◌ࣔ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH WORD AR-RUB, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08D5 0062;00E0 05AE 08D5 0315 0062;0061 05AE 0300 08D5 
0315 0062;00E0 05AE 08D5 0315 0062;0061 05AE 0300 08D5 0315 0062; # 
(a◌̕◌̀◌֮◌ࣕb; à◌֮◌ࣕ◌̕b; a◌֮◌̀◌ࣕ◌̕b; à◌֮◌ࣕ◌̕b; a◌֮◌̀◌ࣕ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH SAD, LATIN SMALL LETTER B
@@ -17573,32 +17666,32 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 08E0 0315 0300 05AE 0062;0061 05AE 08E0 0300 0315 0062;0061 05AE 08E0 
0300 0315 0062;0061 05AE 08E0 0300 0315 0062;0061 05AE 08E0 0300 0315 0062; # 
(a◌࣠◌̕◌̀◌֮b; a◌֮◌࣠◌̀◌̕b; a◌֮◌࣠◌̀◌̕b; a◌֮◌࣠◌̀◌̕b; a◌֮◌࣠◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH FOOTNOTE MARKER, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08E1 0062;00E0 05AE 08E1 0315 0062;0061 05AE 0300 08E1 
0315 0062;00E0 05AE 08E1 0315 0062;0061 05AE 0300 08E1 0315 0062; # 
(a◌̕◌̀◌֮◌࣡b; à◌֮◌࣡◌̕b; a◌֮◌̀◌࣡◌̕b; à◌֮◌࣡◌̕b; a◌֮◌̀◌࣡◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC SMALL HIGH SIGN SAFHA, LATIN SMALL LETTER B
 0061 08E1 0315 0300 05AE 0062;0061 05AE 08E1 0300 0315 0062;0061 05AE 08E1 
0300 0315 0062;0061 05AE 08E1 0300 0315 0062;0061 05AE 08E1 0300 0315 0062; # 
(a◌࣡◌̕◌̀◌֮b; a◌֮◌࣡◌̀◌̕b; a◌֮◌࣡◌̀◌̕b; a◌֮◌࣡◌̀◌̕b; a◌֮◌࣡◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC SMALL HIGH SIGN SAFHA, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 08E3 0062;0061 302A 0316 08E3 059A 0062;0061 302A 0316 
08E3 059A 0062;0061 302A 0316 08E3 059A 0062;0061 302A 0316 08E3 059A 0062; # 
(a◌֚◌̖◌〪◌ࣣb; a◌〪◌̖◌ࣣ◌֚b; a◌〪◌̖◌ࣣ◌֚b; a◌〪◌̖◌ࣣ◌֚b; a◌〪◌̖◌ࣣ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC TURNED DAMMA BELOW, LATIN SMALL LETTER B
-0061 08E3 059A 0316 302A 0062;0061 302A 08E3 0316 059A 0062;0061 302A 08E3 
0316 059A 0062;0061 302A 08E3 0316 059A 0062;0061 302A 08E3 0316 059A 0062; # 
(a◌ࣣ◌֚◌̖◌〪b; a◌〪◌ࣣ◌̖◌֚b; a◌〪◌ࣣ◌̖◌֚b; a◌〪◌ࣣ◌̖◌֚b; a◌〪◌ࣣ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC TURNED DAMMA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08E3 0062;0061 1DFA 0316 08E3 059A 0062;0061 1DFA 0316 
08E3 059A 0062;0061 1DFA 0316 08E3 059A 0062;0061 1DFA 0316 08E3 059A 0062; # 
(a◌֚◌̖◌᷺◌ࣣb; a◌᷺◌̖◌ࣣ◌֚b; a◌᷺◌̖◌ࣣ◌֚b; a◌᷺◌̖◌ࣣ◌֚b; a◌᷺◌̖◌ࣣ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC TURNED DAMMA BELOW, LATIN SMALL LETTER B
+0061 08E3 059A 0316 1DFA 0062;0061 1DFA 08E3 0316 059A 0062;0061 1DFA 08E3 
0316 059A 0062;0061 1DFA 08E3 0316 059A 0062;0061 1DFA 08E3 0316 059A 0062; # 
(a◌ࣣ◌֚◌̖◌᷺b; a◌᷺◌ࣣ◌̖◌֚b; a◌᷺◌ࣣ◌̖◌֚b; a◌᷺◌ࣣ◌̖◌֚b; a◌᷺◌ࣣ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC TURNED DAMMA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08E4 0062;00E0 05AE 08E4 0315 0062;0061 05AE 0300 08E4 
0315 0062;00E0 05AE 08E4 0315 0062;0061 05AE 0300 08E4 0315 0062; # 
(a◌̕◌̀◌֮◌ࣤb; à◌֮◌ࣤ◌̕b; a◌֮◌̀◌ࣤ◌̕b; à◌֮◌ࣤ◌̕b; a◌֮◌̀◌ࣤ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC CURLY FATHA, LATIN SMALL LETTER B
 0061 08E4 0315 0300 05AE 0062;0061 05AE 08E4 0300 0315 0062;0061 05AE 08E4 
0300 0315 0062;0061 05AE 08E4 0300 0315 0062;0061 05AE 08E4 0300 0315 0062; # 
(a◌ࣤ◌̕◌̀◌֮b; a◌֮◌ࣤ◌̀◌̕b; a◌֮◌ࣤ◌̀◌̕b; a◌֮◌ࣤ◌̀◌̕b; a◌֮◌ࣤ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC CURLY FATHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08E5 0062;00E0 05AE 08E5 0315 0062;0061 05AE 0300 08E5 
0315 0062;00E0 05AE 08E5 0315 0062;0061 05AE 0300 08E5 0315 0062; # 
(a◌̕◌̀◌֮◌ࣥb; à◌֮◌ࣥ◌̕b; a◌֮◌̀◌ࣥ◌̕b; à◌֮◌ࣥ◌̕b; a◌֮◌̀◌ࣥ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC CURLY DAMMA, LATIN SMALL LETTER B
 0061 08E5 0315 0300 05AE 0062;0061 05AE 08E5 0300 0315 0062;0061 05AE 08E5 
0300 0315 0062;0061 05AE 08E5 0300 0315 0062;0061 05AE 08E5 0300 0315 0062; # 
(a◌ࣥ◌̕◌̀◌֮b; a◌֮◌ࣥ◌̀◌̕b; a◌֮◌ࣥ◌̀◌̕b; a◌֮◌ࣥ◌̀◌̕b; a◌֮◌ࣥ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC CURLY DAMMA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 08E6 0062;0061 302A 0316 08E6 059A 0062;0061 302A 0316 
08E6 059A 0062;0061 302A 0316 08E6 059A 0062;0061 302A 0316 08E6 059A 0062; # 
(a◌֚◌̖◌〪◌ࣦb; a◌〪◌̖◌ࣦ◌֚b; a◌〪◌̖◌ࣦ◌֚b; a◌〪◌̖◌ࣦ◌֚b; a◌〪◌̖◌ࣦ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC CURLY KASRA, LATIN SMALL LETTER B
-0061 08E6 059A 0316 302A 0062;0061 302A 08E6 0316 059A 0062;0061 302A 08E6 
0316 059A 0062;0061 302A 08E6 0316 059A 0062;0061 302A 08E6 0316 059A 0062; # 
(a◌ࣦ◌֚◌̖◌〪b; a◌〪◌ࣦ◌̖◌֚b; a◌〪◌ࣦ◌̖◌֚b; a◌〪◌ࣦ◌̖◌֚b; a◌〪◌ࣦ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC CURLY KASRA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08E6 0062;0061 1DFA 0316 08E6 059A 0062;0061 1DFA 0316 
08E6 059A 0062;0061 1DFA 0316 08E6 059A 0062;0061 1DFA 0316 08E6 059A 0062; # 
(a◌֚◌̖◌᷺◌ࣦb; a◌᷺◌̖◌ࣦ◌֚b; a◌᷺◌̖◌ࣦ◌֚b; a◌᷺◌̖◌ࣦ◌֚b; a◌᷺◌̖◌ࣦ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC CURLY KASRA, LATIN SMALL LETTER B
+0061 08E6 059A 0316 1DFA 0062;0061 1DFA 08E6 0316 059A 0062;0061 1DFA 08E6 
0316 059A 0062;0061 1DFA 08E6 0316 059A 0062;0061 1DFA 08E6 0316 059A 0062; # 
(a◌ࣦ◌֚◌̖◌᷺b; a◌᷺◌ࣦ◌̖◌֚b; a◌᷺◌ࣦ◌̖◌֚b; a◌᷺◌ࣦ◌̖◌֚b; a◌᷺◌ࣦ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC CURLY KASRA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08E7 0062;00E0 05AE 08E7 0315 0062;0061 05AE 0300 08E7 
0315 0062;00E0 05AE 08E7 0315 0062;0061 05AE 0300 08E7 0315 0062; # 
(a◌̕◌̀◌֮◌ࣧb; à◌֮◌ࣧ◌̕b; a◌֮◌̀◌ࣧ◌̕b; à◌֮◌ࣧ◌̕b; a◌֮◌̀◌ࣧ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC CURLY FATHATAN, LATIN SMALL LETTER B
 0061 08E7 0315 0300 05AE 0062;0061 05AE 08E7 0300 0315 0062;0061 05AE 08E7 
0300 0315 0062;0061 05AE 08E7 0300 0315 0062;0061 05AE 08E7 0300 0315 0062; # 
(a◌ࣧ◌̕◌̀◌֮b; a◌֮◌ࣧ◌̀◌̕b; a◌֮◌ࣧ◌̀◌̕b; a◌֮◌ࣧ◌̀◌̕b; a◌֮◌ࣧ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC CURLY FATHATAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08E8 0062;00E0 05AE 08E8 0315 0062;0061 05AE 0300 08E8 
0315 0062;00E0 05AE 08E8 0315 0062;0061 05AE 0300 08E8 0315 0062; # 
(a◌̕◌̀◌֮◌ࣨb; à◌֮◌ࣨ◌̕b; a◌֮◌̀◌ࣨ◌̕b; à◌֮◌ࣨ◌̕b; a◌֮◌̀◌ࣨ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC CURLY DAMMATAN, LATIN SMALL LETTER B
 0061 08E8 0315 0300 05AE 0062;0061 05AE 08E8 0300 0315 0062;0061 05AE 08E8 
0300 0315 0062;0061 05AE 08E8 0300 0315 0062;0061 05AE 08E8 0300 0315 0062; # 
(a◌ࣨ◌̕◌̀◌֮b; a◌֮◌ࣨ◌̀◌̕b; a◌֮◌ࣨ◌̀◌̕b; a◌֮◌ࣨ◌̀◌̕b; a◌֮◌ࣨ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC CURLY DAMMATAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 08E9 0062;0061 302A 0316 08E9 059A 0062;0061 302A 0316 
08E9 059A 0062;0061 302A 0316 08E9 059A 0062;0061 302A 0316 08E9 059A 0062; # 
(a◌֚◌̖◌〪◌ࣩb; a◌〪◌̖◌ࣩ◌֚b; a◌〪◌̖◌ࣩ◌֚b; a◌〪◌̖◌ࣩ◌֚b; a◌〪◌̖◌ࣩ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC CURLY KASRATAN, LATIN SMALL LETTER B
-0061 08E9 059A 0316 302A 0062;0061 302A 08E9 0316 059A 0062;0061 302A 08E9 
0316 059A 0062;0061 302A 08E9 0316 059A 0062;0061 302A 08E9 0316 059A 0062; # 
(a◌ࣩ◌֚◌̖◌〪b; a◌〪◌ࣩ◌̖◌֚b; a◌〪◌ࣩ◌̖◌֚b; a◌〪◌ࣩ◌̖◌֚b; a◌〪◌ࣩ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC CURLY KASRATAN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08E9 0062;0061 1DFA 0316 08E9 059A 0062;0061 1DFA 0316 
08E9 059A 0062;0061 1DFA 0316 08E9 059A 0062;0061 1DFA 0316 08E9 059A 0062; # 
(a◌֚◌̖◌᷺◌ࣩb; a◌᷺◌̖◌ࣩ◌֚b; a◌᷺◌̖◌ࣩ◌֚b; a◌᷺◌̖◌ࣩ◌֚b; a◌᷺◌̖◌ࣩ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC CURLY KASRATAN, LATIN SMALL LETTER B
+0061 08E9 059A 0316 1DFA 0062;0061 1DFA 08E9 0316 059A 0062;0061 1DFA 08E9 
0316 059A 0062;0061 1DFA 08E9 0316 059A 0062;0061 1DFA 08E9 0316 059A 0062; # 
(a◌ࣩ◌֚◌̖◌᷺b; a◌᷺◌ࣩ◌̖◌֚b; a◌᷺◌ࣩ◌̖◌֚b; a◌᷺◌ࣩ◌̖◌֚b; a◌᷺◌ࣩ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC CURLY KASRATAN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08EA 0062;00E0 05AE 08EA 0315 0062;0061 05AE 0300 08EA 
0315 0062;00E0 05AE 08EA 0315 0062;0061 05AE 0300 08EA 0315 0062; # 
(a◌̕◌̀◌֮◌࣪b; à◌֮◌࣪◌̕b; a◌֮◌̀◌࣪◌̕b; à◌֮◌࣪◌̕b; a◌֮◌̀◌࣪◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC TONE ONE DOT ABOVE, LATIN SMALL LETTER B
 0061 08EA 0315 0300 05AE 0062;0061 05AE 08EA 0300 0315 0062;0061 05AE 08EA 
0300 0315 0062;0061 05AE 08EA 0300 0315 0062;0061 05AE 08EA 0300 0315 0062; # 
(a◌࣪◌̕◌̀◌֮b; a◌֮◌࣪◌̀◌̕b; a◌֮◌࣪◌̀◌̕b; a◌֮◌࣪◌̀◌̕b; a◌֮◌࣪◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC TONE ONE DOT ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08EB 0062;00E0 05AE 08EB 0315 0062;0061 05AE 0300 08EB 
0315 0062;00E0 05AE 08EB 0315 0062;0061 05AE 0300 08EB 0315 0062; # 
(a◌̕◌̀◌֮◌࣫b; à◌֮◌࣫◌̕b; a◌֮◌̀◌࣫◌̕b; à◌֮◌࣫◌̕b; a◌֮◌̀◌࣫◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC TONE TWO DOTS ABOVE, LATIN SMALL LETTER B
 0061 08EB 0315 0300 05AE 0062;0061 05AE 08EB 0300 0315 0062;0061 05AE 08EB 
0300 0315 0062;0061 05AE 08EB 0300 0315 0062;0061 05AE 08EB 0300 0315 0062; # 
(a◌࣫◌̕◌̀◌֮b; a◌֮◌࣫◌̀◌̕b; a◌֮◌࣫◌̀◌̕b; a◌֮◌࣫◌̀◌̕b; a◌֮◌࣫◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC TONE TWO DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08EC 0062;00E0 05AE 08EC 0315 0062;0061 05AE 0300 08EC 
0315 0062;00E0 05AE 08EC 0315 0062;0061 05AE 0300 08EC 0315 0062; # 
(a◌̕◌̀◌֮◌࣬b; à◌֮◌࣬◌̕b; a◌֮◌̀◌࣬◌̕b; à◌֮◌࣬◌̕b; a◌֮◌̀◌࣬◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC TONE LOOP ABOVE, LATIN SMALL LETTER B
 0061 08EC 0315 0300 05AE 0062;0061 05AE 08EC 0300 0315 0062;0061 05AE 08EC 
0300 0315 0062;0061 05AE 08EC 0300 0315 0062;0061 05AE 08EC 0300 0315 0062; # 
(a◌࣬◌̕◌̀◌֮b; a◌֮◌࣬◌̀◌̕b; a◌֮◌࣬◌̀◌̕b; a◌֮◌࣬◌̀◌̕b; a◌֮◌࣬◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC TONE LOOP ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 08ED 0062;0061 302A 0316 08ED 059A 0062;0061 302A 0316 
08ED 059A 0062;0061 302A 0316 08ED 059A 0062;0061 302A 0316 08ED 059A 0062; # 
(a◌֚◌̖◌〪◌࣭b; a◌〪◌̖◌࣭◌֚b; a◌〪◌̖◌࣭◌֚b; a◌〪◌̖◌࣭◌֚b; a◌〪◌̖◌࣭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC TONE ONE DOT BELOW, LATIN SMALL LETTER B
-0061 08ED 059A 0316 302A 0062;0061 302A 08ED 0316 059A 0062;0061 302A 08ED 
0316 059A 0062;0061 302A 08ED 0316 059A 0062;0061 302A 08ED 0316 059A 0062; # 
(a◌࣭◌֚◌̖◌〪b; a◌〪◌࣭◌̖◌֚b; a◌〪◌࣭◌̖◌֚b; a◌〪◌࣭◌̖◌֚b; a◌〪◌࣭◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC TONE ONE DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 08EE 0062;0061 302A 0316 08EE 059A 0062;0061 302A 0316 
08EE 059A 0062;0061 302A 0316 08EE 059A 0062;0061 302A 0316 08EE 059A 0062; # 
(a◌֚◌̖◌〪◌࣮b; a◌〪◌̖◌࣮◌֚b; a◌〪◌̖◌࣮◌֚b; a◌〪◌̖◌࣮◌֚b; a◌〪◌̖◌࣮◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC TONE TWO DOTS BELOW, LATIN SMALL LETTER B
-0061 08EE 059A 0316 302A 0062;0061 302A 08EE 0316 059A 0062;0061 302A 08EE 
0316 059A 0062;0061 302A 08EE 0316 059A 0062;0061 302A 08EE 0316 059A 0062; # 
(a◌࣮◌֚◌̖◌〪b; a◌〪◌࣮◌̖◌֚b; a◌〪◌࣮◌̖◌֚b; a◌〪◌࣮◌̖◌֚b; a◌〪◌࣮◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC TONE TWO DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 08EF 0062;0061 302A 0316 08EF 059A 0062;0061 302A 0316 
08EF 059A 0062;0061 302A 0316 08EF 059A 0062;0061 302A 0316 08EF 059A 0062; # 
(a◌֚◌̖◌〪◌࣯b; a◌〪◌̖◌࣯◌֚b; a◌〪◌̖◌࣯◌֚b; a◌〪◌̖◌࣯◌֚b; a◌〪◌̖◌࣯◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC TONE LOOP BELOW, LATIN SMALL LETTER B
-0061 08EF 059A 0316 302A 0062;0061 302A 08EF 0316 059A 0062;0061 302A 08EF 
0316 059A 0062;0061 302A 08EF 0316 059A 0062;0061 302A 08EF 0316 059A 0062; # 
(a◌࣯◌֚◌̖◌〪b; a◌〪◌࣯◌̖◌֚b; a◌〪◌࣯◌̖◌֚b; a◌〪◌࣯◌̖◌֚b; a◌〪◌࣯◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC TONE LOOP BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08ED 0062;0061 1DFA 0316 08ED 059A 0062;0061 1DFA 0316 
08ED 059A 0062;0061 1DFA 0316 08ED 059A 0062;0061 1DFA 0316 08ED 059A 0062; # 
(a◌֚◌̖◌᷺◌࣭b; a◌᷺◌̖◌࣭◌֚b; a◌᷺◌̖◌࣭◌֚b; a◌᷺◌̖◌࣭◌֚b; a◌᷺◌̖◌࣭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC TONE ONE DOT BELOW, LATIN SMALL LETTER B
+0061 08ED 059A 0316 1DFA 0062;0061 1DFA 08ED 0316 059A 0062;0061 1DFA 08ED 
0316 059A 0062;0061 1DFA 08ED 0316 059A 0062;0061 1DFA 08ED 0316 059A 0062; # 
(a◌࣭◌֚◌̖◌᷺b; a◌᷺◌࣭◌̖◌֚b; a◌᷺◌࣭◌̖◌֚b; a◌᷺◌࣭◌̖◌֚b; a◌᷺◌࣭◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC TONE ONE DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08EE 0062;0061 1DFA 0316 08EE 059A 0062;0061 1DFA 0316 
08EE 059A 0062;0061 1DFA 0316 08EE 059A 0062;0061 1DFA 0316 08EE 059A 0062; # 
(a◌֚◌̖◌᷺◌࣮b; a◌᷺◌̖◌࣮◌֚b; a◌᷺◌̖◌࣮◌֚b; a◌᷺◌̖◌࣮◌֚b; a◌᷺◌̖◌࣮◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC TONE TWO DOTS BELOW, LATIN SMALL LETTER B
+0061 08EE 059A 0316 1DFA 0062;0061 1DFA 08EE 0316 059A 0062;0061 1DFA 08EE 
0316 059A 0062;0061 1DFA 08EE 0316 059A 0062;0061 1DFA 08EE 0316 059A 0062; # 
(a◌࣮◌֚◌̖◌᷺b; a◌᷺◌࣮◌̖◌֚b; a◌᷺◌࣮◌̖◌֚b; a◌᷺◌࣮◌̖◌֚b; a◌᷺◌࣮◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC TONE TWO DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08EF 0062;0061 1DFA 0316 08EF 059A 0062;0061 1DFA 0316 
08EF 059A 0062;0061 1DFA 0316 08EF 059A 0062;0061 1DFA 0316 08EF 059A 0062; # 
(a◌֚◌̖◌᷺◌࣯b; a◌᷺◌̖◌࣯◌֚b; a◌᷺◌̖◌࣯◌֚b; a◌᷺◌̖◌࣯◌֚b; a◌᷺◌̖◌࣯◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC TONE LOOP BELOW, LATIN SMALL LETTER B
+0061 08EF 059A 0316 1DFA 0062;0061 1DFA 08EF 0316 059A 0062;0061 1DFA 08EF 
0316 059A 0062;0061 1DFA 08EF 0316 059A 0062;0061 1DFA 08EF 0316 059A 0062; # 
(a◌࣯◌֚◌̖◌᷺b; a◌᷺◌࣯◌̖◌֚b; a◌᷺◌࣯◌̖◌֚b; a◌᷺◌࣯◌̖◌֚b; a◌᷺◌࣯◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC TONE LOOP BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 064C 064B FB1E 08F0 0062;0061 FB1E 064B 08F0 064C 0062;0061 FB1E 064B 
08F0 064C 0062;0061 FB1E 064B 08F0 064C 0062;0061 FB1E 064B 08F0 064C 0062; # 
(a◌ٌ◌ً◌ﬞ◌ࣰb; a◌ﬞ◌ً◌ࣰ◌ٌb; a◌ﬞ◌ً◌ࣰ◌ٌb; a◌ﬞ◌ً◌ࣰ◌ٌb; a◌ﬞ◌ً◌ࣰ◌ٌb; ) LATIN SMALL 
LETTER A, ARABIC DAMMATAN, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, 
ARABIC OPEN FATHATAN, LATIN SMALL LETTER B
 0061 08F0 064C 064B FB1E 0062;0061 FB1E 08F0 064B 064C 0062;0061 FB1E 08F0 
064B 064C 0062;0061 FB1E 08F0 064B 064C 0062;0061 FB1E 08F0 064B 064C 0062; # 
(a◌ࣰ◌ٌ◌ً◌ﬞb; a◌ﬞ◌ࣰ◌ً◌ٌb; a◌ﬞ◌ࣰ◌ً◌ٌb; a◌ﬞ◌ࣰ◌ً◌ٌb; a◌ﬞ◌ࣰ◌ً◌ٌb; ) LATIN SMALL 
LETTER A, ARABIC OPEN FATHATAN, ARABIC DAMMATAN, ARABIC FATHATAN, HEBREW POINT 
JUDEO-SPANISH VARIKA, LATIN SMALL LETTER B
 0061 064D 064C 064B 08F1 0062;0061 064B 064C 08F1 064D 0062;0061 064B 064C 
08F1 064D 0062;0061 064B 064C 08F1 064D 0062;0061 064B 064C 08F1 064D 0062; # 
(a◌ٍ◌ٌ◌ً◌ࣱb; a◌ً◌ٌ◌ࣱ◌ٍb; a◌ً◌ٌ◌ࣱ◌ٍb; a◌ً◌ٌ◌ࣱ◌ٍb; a◌ً◌ٌ◌ࣱ◌ٍb; ) LATIN SMALL 
LETTER A, ARABIC KASRATAN, ARABIC DAMMATAN, ARABIC FATHATAN, ARABIC OPEN 
DAMMATAN, LATIN SMALL LETTER B
@@ -17611,16 +17704,16 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 08F4 0315 0300 05AE 0062;0061 05AE 08F4 0300 0315 0062;0061 05AE 08F4 
0300 0315 0062;0061 05AE 08F4 0300 0315 0062;0061 05AE 08F4 0300 0315 0062; # 
(a◌ࣴ◌̕◌̀◌֮b; a◌֮◌ࣴ◌̀◌̕b; a◌֮◌ࣴ◌̀◌̕b; a◌֮◌ࣴ◌̀◌̕b; a◌֮◌ࣴ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC FATHA WITH RING, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08F5 0062;00E0 05AE 08F5 0315 0062;0061 05AE 0300 08F5 
0315 0062;00E0 05AE 08F5 0315 0062;0061 05AE 0300 08F5 0315 0062; # 
(a◌̕◌̀◌֮◌ࣵb; à◌֮◌ࣵ◌̕b; a◌֮◌̀◌ࣵ◌̕b; à◌֮◌ࣵ◌̕b; a◌֮◌̀◌ࣵ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC FATHA WITH DOT ABOVE, LATIN SMALL LETTER B
 0061 08F5 0315 0300 05AE 0062;0061 05AE 08F5 0300 0315 0062;0061 05AE 08F5 
0300 0315 0062;0061 05AE 08F5 0300 0315 0062;0061 05AE 08F5 0300 0315 0062; # 
(a◌ࣵ◌̕◌̀◌֮b; a◌֮◌ࣵ◌̀◌̕b; a◌֮◌ࣵ◌̀◌̕b; a◌֮◌ࣵ◌̀◌̕b; a◌֮◌ࣵ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC FATHA WITH DOT ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 08F6 0062;0061 302A 0316 08F6 059A 0062;0061 302A 0316 
08F6 059A 0062;0061 302A 0316 08F6 059A 0062;0061 302A 0316 08F6 059A 0062; # 
(a◌֚◌̖◌〪◌ࣶb; a◌〪◌̖◌ࣶ◌֚b; a◌〪◌̖◌ࣶ◌֚b; a◌〪◌̖◌ࣶ◌֚b; a◌〪◌̖◌ࣶ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC KASRA WITH DOT BELOW, LATIN SMALL LETTER B
-0061 08F6 059A 0316 302A 0062;0061 302A 08F6 0316 059A 0062;0061 302A 08F6 
0316 059A 0062;0061 302A 08F6 0316 059A 0062;0061 302A 08F6 0316 059A 0062; # 
(a◌ࣶ◌֚◌̖◌〪b; a◌〪◌ࣶ◌̖◌֚b; a◌〪◌ࣶ◌̖◌֚b; a◌〪◌ࣶ◌̖◌֚b; a◌〪◌ࣶ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC KASRA WITH DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08F6 0062;0061 1DFA 0316 08F6 059A 0062;0061 1DFA 0316 
08F6 059A 0062;0061 1DFA 0316 08F6 059A 0062;0061 1DFA 0316 08F6 059A 0062; # 
(a◌֚◌̖◌᷺◌ࣶb; a◌᷺◌̖◌ࣶ◌֚b; a◌᷺◌̖◌ࣶ◌֚b; a◌᷺◌̖◌ࣶ◌֚b; a◌᷺◌̖◌ࣶ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC KASRA WITH DOT BELOW, LATIN SMALL LETTER B
+0061 08F6 059A 0316 1DFA 0062;0061 1DFA 08F6 0316 059A 0062;0061 1DFA 08F6 
0316 059A 0062;0061 1DFA 08F6 0316 059A 0062;0061 1DFA 08F6 0316 059A 0062; # 
(a◌ࣶ◌֚◌̖◌᷺b; a◌᷺◌ࣶ◌̖◌֚b; a◌᷺◌ࣶ◌̖◌֚b; a◌᷺◌ࣶ◌̖◌֚b; a◌᷺◌ࣶ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC KASRA WITH DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08F7 0062;00E0 05AE 08F7 0315 0062;0061 05AE 0300 08F7 
0315 0062;00E0 05AE 08F7 0315 0062;0061 05AE 0300 08F7 0315 0062; # 
(a◌̕◌̀◌֮◌ࣷb; à◌֮◌ࣷ◌̕b; a◌֮◌̀◌ࣷ◌̕b; à◌֮◌ࣷ◌̕b; a◌֮◌̀◌ࣷ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC LEFT ARROWHEAD ABOVE, LATIN SMALL LETTER B
 0061 08F7 0315 0300 05AE 0062;0061 05AE 08F7 0300 0315 0062;0061 05AE 08F7 
0300 0315 0062;0061 05AE 08F7 0300 0315 0062;0061 05AE 08F7 0300 0315 0062; # 
(a◌ࣷ◌̕◌̀◌֮b; a◌֮◌ࣷ◌̀◌̕b; a◌֮◌ࣷ◌̀◌̕b; a◌֮◌ࣷ◌̀◌̕b; a◌֮◌ࣷ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC LEFT ARROWHEAD ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08F8 0062;00E0 05AE 08F8 0315 0062;0061 05AE 0300 08F8 
0315 0062;00E0 05AE 08F8 0315 0062;0061 05AE 0300 08F8 0315 0062; # 
(a◌̕◌̀◌֮◌ࣸb; à◌֮◌ࣸ◌̕b; a◌֮◌̀◌ࣸ◌̕b; à◌֮◌ࣸ◌̕b; a◌֮◌̀◌ࣸ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC RIGHT ARROWHEAD ABOVE, LATIN SMALL LETTER B
 0061 08F8 0315 0300 05AE 0062;0061 05AE 08F8 0300 0315 0062;0061 05AE 08F8 
0300 0315 0062;0061 05AE 08F8 0300 0315 0062;0061 05AE 08F8 0300 0315 0062; # 
(a◌ࣸ◌̕◌̀◌֮b; a◌֮◌ࣸ◌̀◌̕b; a◌֮◌ࣸ◌̀◌̕b; a◌֮◌ࣸ◌̀◌̕b; a◌֮◌ࣸ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC RIGHT ARROWHEAD ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 08F9 0062;0061 302A 0316 08F9 059A 0062;0061 302A 0316 
08F9 059A 0062;0061 302A 0316 08F9 059A 0062;0061 302A 0316 08F9 059A 0062; # 
(a◌֚◌̖◌〪◌ࣹb; a◌〪◌̖◌ࣹ◌֚b; a◌〪◌̖◌ࣹ◌֚b; a◌〪◌̖◌ࣹ◌֚b; a◌〪◌̖◌ࣹ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC LEFT ARROWHEAD BELOW, LATIN SMALL LETTER B
-0061 08F9 059A 0316 302A 0062;0061 302A 08F9 0316 059A 0062;0061 302A 08F9 
0316 059A 0062;0061 302A 08F9 0316 059A 0062;0061 302A 08F9 0316 059A 0062; # 
(a◌ࣹ◌֚◌̖◌〪b; a◌〪◌ࣹ◌̖◌֚b; a◌〪◌ࣹ◌̖◌֚b; a◌〪◌ࣹ◌̖◌֚b; a◌〪◌ࣹ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC LEFT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 08FA 0062;0061 302A 0316 08FA 059A 0062;0061 302A 0316 
08FA 059A 0062;0061 302A 0316 08FA 059A 0062;0061 302A 0316 08FA 059A 0062; # 
(a◌֚◌̖◌〪◌ࣺb; a◌〪◌̖◌ࣺ◌֚b; a◌〪◌̖◌ࣺ◌֚b; a◌〪◌̖◌ࣺ◌֚b; a◌〪◌̖◌ࣺ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, ARABIC RIGHT ARROWHEAD BELOW, LATIN SMALL LETTER B
-0061 08FA 059A 0316 302A 0062;0061 302A 08FA 0316 059A 0062;0061 302A 08FA 
0316 059A 0062;0061 302A 08FA 0316 059A 0062;0061 302A 08FA 0316 059A 0062; # 
(a◌ࣺ◌֚◌̖◌〪b; a◌〪◌ࣺ◌̖◌֚b; a◌〪◌ࣺ◌̖◌֚b; a◌〪◌ࣺ◌̖◌֚b; a◌〪◌ࣺ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC RIGHT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08F9 0062;0061 1DFA 0316 08F9 059A 0062;0061 1DFA 0316 
08F9 059A 0062;0061 1DFA 0316 08F9 059A 0062;0061 1DFA 0316 08F9 059A 0062; # 
(a◌֚◌̖◌᷺◌ࣹb; a◌᷺◌̖◌ࣹ◌֚b; a◌᷺◌̖◌ࣹ◌֚b; a◌᷺◌̖◌ࣹ◌֚b; a◌᷺◌̖◌ࣹ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC LEFT ARROWHEAD BELOW, LATIN SMALL LETTER B
+0061 08F9 059A 0316 1DFA 0062;0061 1DFA 08F9 0316 059A 0062;0061 1DFA 08F9 
0316 059A 0062;0061 1DFA 08F9 0316 059A 0062;0061 1DFA 08F9 0316 059A 0062; # 
(a◌ࣹ◌֚◌̖◌᷺b; a◌᷺◌ࣹ◌̖◌֚b; a◌᷺◌ࣹ◌̖◌֚b; a◌᷺◌ࣹ◌̖◌֚b; a◌᷺◌ࣹ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC LEFT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 08FA 0062;0061 1DFA 0316 08FA 059A 0062;0061 1DFA 0316 
08FA 059A 0062;0061 1DFA 0316 08FA 059A 0062;0061 1DFA 0316 08FA 059A 0062; # 
(a◌֚◌̖◌᷺◌ࣺb; a◌᷺◌̖◌ࣺ◌֚b; a◌᷺◌̖◌ࣺ◌֚b; a◌᷺◌̖◌ࣺ◌֚b; a◌᷺◌̖◌ࣺ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, ARABIC RIGHT ARROWHEAD BELOW, LATIN SMALL LETTER B
+0061 08FA 059A 0316 1DFA 0062;0061 1DFA 08FA 0316 059A 0062;0061 1DFA 08FA 
0316 059A 0062;0061 1DFA 08FA 0316 059A 0062;0061 1DFA 08FA 0316 059A 0062; # 
(a◌ࣺ◌֚◌̖◌᷺b; a◌᷺◌ࣺ◌̖◌֚b; a◌᷺◌ࣺ◌̖◌֚b; a◌᷺◌ࣺ◌̖◌֚b; a◌᷺◌ࣺ◌̖◌֚b; ) LATIN SMALL 
LETTER A, ARABIC RIGHT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08FB 0062;00E0 05AE 08FB 0315 0062;0061 05AE 0300 08FB 
0315 0062;00E0 05AE 08FB 0315 0062;0061 05AE 0300 08FB 0315 0062; # 
(a◌̕◌̀◌֮◌ࣻb; à◌֮◌ࣻ◌̕b; a◌֮◌̀◌ࣻ◌̕b; à◌֮◌ࣻ◌̕b; a◌֮◌̀◌ࣻ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC DOUBLE RIGHT ARROWHEAD ABOVE, LATIN SMALL LETTER B
 0061 08FB 0315 0300 05AE 0062;0061 05AE 08FB 0300 0315 0062;0061 05AE 08FB 
0300 0315 0062;0061 05AE 08FB 0300 0315 0062;0061 05AE 08FB 0300 0315 0062; # 
(a◌ࣻ◌̕◌̀◌֮b; a◌֮◌ࣻ◌̀◌̕b; a◌֮◌ࣻ◌̀◌̕b; a◌֮◌ࣻ◌̀◌̕b; a◌֮◌ࣻ◌̀◌̕b; ) LATIN SMALL 
LETTER A, ARABIC DOUBLE RIGHT ARROWHEAD ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 08FC 0062;00E0 05AE 08FC 0315 0062;0061 05AE 0300 08FC 
0315 0062;00E0 05AE 08FC 0315 0062;0061 05AE 0300 08FC 0315 0062; # 
(a◌̕◌̀◌֮◌ࣼb; à◌֮◌ࣼ◌̕b; a◌֮◌̀◌ࣼ◌̕b; à◌֮◌ࣼ◌̕b; a◌֮◌̀◌ࣼ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT, LATIN SMALL LETTER B
@@ -17637,8 +17730,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 094D 05B0 094D 3099 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 
094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062; # 
(a◌्◌ְ◌्◌゙b; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; ) LATIN SMALL 
LETTER A, DEVANAGARI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0951 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 
0315 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062; # 
(a◌̕◌̀◌֮◌॑b; à◌֮◌॑◌̕b; a◌֮◌̀◌॑◌̕b; à◌֮◌॑◌̕b; a◌֮◌̀◌॑◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
DEVANAGARI STRESS SIGN UDATTA, LATIN SMALL LETTER B
 0061 0951 0315 0300 05AE 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 
0300 0315 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062; # 
(a◌॑◌̕◌̀◌֮b; a◌֮◌॑◌̀◌̕b; a◌֮◌॑◌̀◌̕b; a◌֮◌॑◌̀◌̕b; a◌֮◌॑◌̀◌̕b; ) LATIN SMALL 
LETTER A, DEVANAGARI STRESS SIGN UDATTA, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0952 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 
0952 059A 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062; # 
(a◌֚◌̖◌〪◌॒b; a◌〪◌̖◌॒◌֚b; a◌〪◌̖◌॒◌֚b; a◌〪◌̖◌॒◌֚b; a◌〪◌̖◌॒◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, DEVANAGARI STRESS SIGN ANUDATTA, LATIN SMALL LETTER B
-0061 0952 059A 0316 302A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 
0316 059A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062; # 
(a◌॒◌֚◌̖◌〪b; a◌〪◌॒◌̖◌֚b; a◌〪◌॒◌̖◌֚b; a◌〪◌॒◌̖◌֚b; a◌〪◌॒◌̖◌֚b; ) LATIN SMALL 
LETTER A, DEVANAGARI STRESS SIGN ANUDATTA, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0952 0062;0061 1DFA 0316 0952 059A 0062;0061 1DFA 0316 
0952 059A 0062;0061 1DFA 0316 0952 059A 0062;0061 1DFA 0316 0952 059A 0062; # 
(a◌֚◌̖◌᷺◌॒b; a◌᷺◌̖◌॒◌֚b; a◌᷺◌̖◌॒◌֚b; a◌᷺◌̖◌॒◌֚b; a◌᷺◌̖◌॒◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, DEVANAGARI STRESS SIGN ANUDATTA, LATIN SMALL LETTER B
+0061 0952 059A 0316 1DFA 0062;0061 1DFA 0952 0316 059A 0062;0061 1DFA 0952 
0316 059A 0062;0061 1DFA 0952 0316 059A 0062;0061 1DFA 0952 0316 059A 0062; # 
(a◌॒◌֚◌̖◌᷺b; a◌᷺◌॒◌̖◌֚b; a◌᷺◌॒◌̖◌֚b; a◌᷺◌॒◌̖◌֚b; a◌᷺◌॒◌̖◌֚b; ) LATIN SMALL 
LETTER A, DEVANAGARI STRESS SIGN ANUDATTA, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0953 0062;00E0 05AE 0953 0315 0062;0061 05AE 0300 0953 
0315 0062;00E0 05AE 0953 0315 0062;0061 05AE 0300 0953 0315 0062; # 
(a◌̕◌̀◌֮◌॓b; à◌֮◌॓◌̕b; a◌֮◌̀◌॓◌̕b; à◌֮◌॓◌̕b; a◌֮◌̀◌॓◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
DEVANAGARI GRAVE ACCENT, LATIN SMALL LETTER B
 0061 0953 0315 0300 05AE 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 
0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062; # 
(a◌॓◌̕◌̀◌֮b; a◌֮◌॓◌̀◌̕b; a◌֮◌॓◌̀◌̕b; a◌֮◌॓◌̀◌̕b; a◌֮◌॓◌̀◌̕b; ) LATIN SMALL 
LETTER A, DEVANAGARI GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0954 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 
0315 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062; # 
(a◌̕◌̀◌֮◌॔b; à◌֮◌॔◌̕b; a◌֮◌̀◌॔◌̕b; à◌֮◌॔◌̕b; a◌֮◌̀◌॔◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
DEVANAGARI ACUTE ACCENT, LATIN SMALL LETTER B
@@ -17663,6 +17756,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 0B4D 05B0 094D 3099 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 
094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062; # 
(a◌୍◌ְ◌्◌゙b; a◌゙◌୍◌्◌ְb; a◌゙◌୍◌्◌ְb; a◌゙◌୍◌्◌ְb; a◌゙◌୍◌्◌ְb; ) LATIN SMALL 
LETTER A, ORIYA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 05B0 094D 3099 0BCD 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 
0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062; # 
(a◌ְ◌्◌゙◌்b; a◌゙◌्◌்◌ְb; a◌゙◌्◌்◌ְb; a◌゙◌्◌்◌ְb; a◌゙◌्◌்◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, TAMIL SIGN VIRAMA, LATIN SMALL LETTER B
 0061 0BCD 05B0 094D 3099 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 
094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062; # 
(a◌்◌ְ◌्◌゙b; a◌゙◌்◌्◌ְb; a◌゙◌்◌्◌ְb; a◌゙◌்◌्◌ְb; a◌゙◌்◌्◌ְb; ) LATIN SMALL 
LETTER A, TAMIL SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 3099 093C 16FF0 0C3C 0062;0061 16FF0 093C 0C3C 3099 0062;0061 16FF0 093C 
0C3C 3099 0062;0061 16FF0 093C 0C3C 3099 0062;0061 16FF0 093C 0C3C 3099 0062; # 
(a◌゙◌𖿰़◌఼b; a𖿰◌़◌఼◌゙b; a𖿰◌़◌఼◌゙b; a𖿰◌़◌఼◌゙b; a𖿰◌़◌఼◌゙b; ) LATIN SMALL LETTER A, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, 
VIETNAMESE ALTERNATE READING MARK CA, TELUGU SIGN NUKTA, LATIN SMALL LETTER B
+0061 0C3C 3099 093C 16FF0 0062;0061 16FF0 0C3C 093C 3099 0062;0061 16FF0 0C3C 
093C 3099 0062;0061 16FF0 0C3C 093C 3099 0062;0061 16FF0 0C3C 093C 3099 0062; # 
(a◌఼◌゙◌𖿰़b; a𖿰◌఼◌़◌゙b; a𖿰◌఼◌़◌゙b; a𖿰◌఼◌़◌゙b; a𖿰◌఼◌़◌゙b; ) LATIN SMALL LETTER A, 
TELUGU SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI 
SIGN NUKTA, VIETNAMESE ALTERNATE READING MARK CA, LATIN SMALL LETTER B
 0061 05B0 094D 3099 0C4D 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 
0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062; # 
(a◌ְ◌्◌゙◌్b; a◌゙◌्◌్◌ְb; a◌゙◌्◌్◌ְb; a◌゙◌्◌్◌ְb; a◌゙◌्◌్◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, TELUGU SIGN VIRAMA, LATIN SMALL LETTER B
 0061 0C4D 05B0 094D 3099 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 
094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062; # 
(a◌్◌ְ◌्◌゙b; a◌゙◌్◌्◌ְb; a◌゙◌్◌्◌ְb; a◌゙◌్◌्◌ְb; a◌゙◌్◌्◌ְb; ) LATIN SMALL 
LETTER A, TELUGU SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 0C56 0C55 0711 0C55 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 
0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062; # 
(a◌ౖ◌ౕ◌ܑ◌ౕb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; ) LATIN SMALL 
LETTER A, TELUGU AI LENGTH MARK, TELUGU LENGTH MARK, SYRIAC LETTER SUPERSCRIPT 
ALAPH, TELUGU LENGTH MARK, LATIN SMALL LETTER B
@@ -17709,16 +17804,16 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 0ECA 0F71 0EC8 0EB8 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 
0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062; # 
(a◌໊◌ཱ◌່◌ຸb; a◌ຸ◌໊◌່◌ཱb; a◌ຸ◌໊◌່◌ཱb; a◌ຸ◌໊◌່◌ཱb; a◌ຸ◌໊◌່◌ཱb; ) LATIN SMALL 
LETTER A, LAO TONE MAI TI, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL 
SIGN U, LATIN SMALL LETTER B
 0061 0F71 0EC8 0EB8 0ECB 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 
0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062; # 
(a◌ཱ◌່◌ຸ◌໋b; a◌ຸ◌່◌໋◌ཱb; a◌ຸ◌່◌໋◌ཱb; a◌ຸ◌່◌໋◌ཱb; a◌ຸ◌່◌໋◌ཱb; ) LATIN SMALL 
LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE 
MAI CATAWA, LATIN SMALL LETTER B
 0061 0ECB 0F71 0EC8 0EB8 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 
0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062; # 
(a◌໋◌ཱ◌່◌ຸb; a◌ຸ◌໋◌່◌ཱb; a◌ຸ◌໋◌່◌ཱb; a◌ຸ◌໋◌່◌ཱb; a◌ຸ◌໋◌່◌ཱb; ) LATIN SMALL 
LETTER A, LAO TONE MAI CATAWA, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO 
VOWEL SIGN U, LATIN SMALL LETTER B
-0061 059A 0316 302A 0F18 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 
0F18 059A 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062; # 
(a◌֚◌̖◌〪◌༘b; a◌〪◌̖◌༘◌֚b; a◌〪◌̖◌༘◌֚b; a◌〪◌̖◌༘◌֚b; a◌〪◌̖◌༘◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, TIBETAN ASTROLOGICAL SIGN -KHYUD PA, LATIN SMALL LETTER B
-0061 0F18 059A 0316 302A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 
0316 059A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062; # 
(a◌༘◌֚◌̖◌〪b; a◌〪◌༘◌̖◌֚b; a◌〪◌༘◌̖◌֚b; a◌〪◌༘◌̖◌֚b; a◌〪◌༘◌̖◌֚b; ) LATIN SMALL 
LETTER A, TIBETAN ASTROLOGICAL SIGN -KHYUD PA, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0F19 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 
0F19 059A 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062; # 
(a◌֚◌̖◌〪◌༙b; a◌〪◌̖◌༙◌֚b; a◌〪◌̖◌༙◌֚b; a◌〪◌̖◌༙◌֚b; a◌〪◌̖◌༙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS, LATIN SMALL LETTER B
-0061 0F19 059A 0316 302A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 
0316 059A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062; # 
(a◌༙◌֚◌̖◌〪b; a◌〪◌༙◌̖◌֚b; a◌〪◌༙◌̖◌֚b; a◌〪◌༙◌̖◌֚b; a◌〪◌༙◌̖◌֚b; ) LATIN SMALL 
LETTER A, TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0F35 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 
0F35 059A 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062; # 
(a◌֚◌̖◌〪◌༵b; a◌〪◌̖◌༵◌֚b; a◌〪◌̖◌༵◌֚b; a◌〪◌̖◌༵◌֚b; a◌〪◌̖◌༵◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, TIBETAN MARK NGAS BZUNG NYI ZLA, LATIN SMALL LETTER B
-0061 0F35 059A 0316 302A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 
0316 059A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062; # 
(a◌༵◌֚◌̖◌〪b; a◌〪◌༵◌̖◌֚b; a◌〪◌༵◌̖◌֚b; a◌〪◌༵◌̖◌֚b; a◌〪◌༵◌̖◌֚b; ) LATIN SMALL 
LETTER A, TIBETAN MARK NGAS BZUNG NYI ZLA, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 0F37 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 
0F37 059A 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062; # 
(a◌֚◌̖◌〪◌༷b; a◌〪◌̖◌༷◌֚b; a◌〪◌̖◌༷◌֚b; a◌〪◌̖◌༷◌֚b; a◌〪◌̖◌༷◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, TIBETAN MARK NGAS BZUNG SGOR RTAGS, LATIN SMALL LETTER B
-0061 0F37 059A 0316 302A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 
0316 059A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062; # 
(a◌༷◌֚◌̖◌〪b; a◌〪◌༷◌̖◌֚b; a◌〪◌༷◌̖◌֚b; a◌〪◌༷◌̖◌֚b; a◌〪◌༷◌̖◌֚b; ) LATIN SMALL 
LETTER A, TIBETAN MARK NGAS BZUNG SGOR RTAGS, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 302A 031B 1DCE 0F39 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 
0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062; # 
(a◌〪◌̛◌᷎◌༹b; a◌᷎◌̛◌༹◌〪b; a◌᷎◌̛◌༹◌〪b; a◌᷎◌̛◌༹◌〪b; a◌᷎◌̛◌༹◌〪b; ) LATIN SMALL 
LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, 
TIBETAN MARK TSA -PHRU, LATIN SMALL LETTER B
-0061 0F39 302A 031B 1DCE 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 
031B 302A 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 031B 302A 0062; # 
(a◌༹◌〪◌̛◌᷎b; a◌᷎◌༹◌̛◌〪b; a◌᷎◌༹◌̛◌〪b; a◌᷎◌༹◌̛◌〪b; a◌᷎◌༹◌̛◌〪b; ) LATIN SMALL 
LETTER A, TIBETAN MARK TSA -PHRU, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0F18 0062;0061 1DFA 0316 0F18 059A 0062;0061 1DFA 0316 
0F18 059A 0062;0061 1DFA 0316 0F18 059A 0062;0061 1DFA 0316 0F18 059A 0062; # 
(a◌֚◌̖◌᷺◌༘b; a◌᷺◌̖◌༘◌֚b; a◌᷺◌̖◌༘◌֚b; a◌᷺◌̖◌༘◌֚b; a◌᷺◌̖◌༘◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, TIBETAN ASTROLOGICAL SIGN -KHYUD PA, LATIN SMALL LETTER B
+0061 0F18 059A 0316 1DFA 0062;0061 1DFA 0F18 0316 059A 0062;0061 1DFA 0F18 
0316 059A 0062;0061 1DFA 0F18 0316 059A 0062;0061 1DFA 0F18 0316 059A 0062; # 
(a◌༘◌֚◌̖◌᷺b; a◌᷺◌༘◌̖◌֚b; a◌᷺◌༘◌̖◌֚b; a◌᷺◌༘◌̖◌֚b; a◌᷺◌༘◌̖◌֚b; ) LATIN SMALL 
LETTER A, TIBETAN ASTROLOGICAL SIGN -KHYUD PA, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0F19 0062;0061 1DFA 0316 0F19 059A 0062;0061 1DFA 0316 
0F19 059A 0062;0061 1DFA 0316 0F19 059A 0062;0061 1DFA 0316 0F19 059A 0062; # 
(a◌֚◌̖◌᷺◌༙b; a◌᷺◌̖◌༙◌֚b; a◌᷺◌̖◌༙◌֚b; a◌᷺◌̖◌༙◌֚b; a◌᷺◌̖◌༙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS, LATIN SMALL LETTER B
+0061 0F19 059A 0316 1DFA 0062;0061 1DFA 0F19 0316 059A 0062;0061 1DFA 0F19 
0316 059A 0062;0061 1DFA 0F19 0316 059A 0062;0061 1DFA 0F19 0316 059A 0062; # 
(a◌༙◌֚◌̖◌᷺b; a◌᷺◌༙◌̖◌֚b; a◌᷺◌༙◌̖◌֚b; a◌᷺◌༙◌̖◌֚b; a◌᷺◌༙◌̖◌֚b; ) LATIN SMALL 
LETTER A, TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0F35 0062;0061 1DFA 0316 0F35 059A 0062;0061 1DFA 0316 
0F35 059A 0062;0061 1DFA 0316 0F35 059A 0062;0061 1DFA 0316 0F35 059A 0062; # 
(a◌֚◌̖◌᷺◌༵b; a◌᷺◌̖◌༵◌֚b; a◌᷺◌̖◌༵◌֚b; a◌᷺◌̖◌༵◌֚b; a◌᷺◌̖◌༵◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, TIBETAN MARK NGAS BZUNG NYI ZLA, LATIN SMALL LETTER B
+0061 0F35 059A 0316 1DFA 0062;0061 1DFA 0F35 0316 059A 0062;0061 1DFA 0F35 
0316 059A 0062;0061 1DFA 0F35 0316 059A 0062;0061 1DFA 0F35 0316 059A 0062; # 
(a◌༵◌֚◌̖◌᷺b; a◌᷺◌༵◌̖◌֚b; a◌᷺◌༵◌̖◌֚b; a◌᷺◌༵◌̖◌֚b; a◌᷺◌༵◌̖◌֚b; ) LATIN SMALL 
LETTER A, TIBETAN MARK NGAS BZUNG NYI ZLA, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0F37 0062;0061 1DFA 0316 0F37 059A 0062;0061 1DFA 0316 
0F37 059A 0062;0061 1DFA 0316 0F37 059A 0062;0061 1DFA 0316 0F37 059A 0062; # 
(a◌֚◌̖◌᷺◌༷b; a◌᷺◌̖◌༷◌֚b; a◌᷺◌̖◌༷◌֚b; a◌᷺◌̖◌༷◌֚b; a◌᷺◌̖◌༷◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, TIBETAN MARK NGAS BZUNG SGOR RTAGS, LATIN SMALL LETTER B
+0061 0F37 059A 0316 1DFA 0062;0061 1DFA 0F37 0316 059A 0062;0061 1DFA 0F37 
0316 059A 0062;0061 1DFA 0F37 0316 059A 0062;0061 1DFA 0F37 0316 059A 0062; # 
(a◌༷◌֚◌̖◌᷺b; a◌᷺◌༷◌̖◌֚b; a◌᷺◌༷◌̖◌֚b; a◌᷺◌༷◌̖◌֚b; a◌᷺◌༷◌̖◌֚b; ) LATIN SMALL 
LETTER A, TIBETAN MARK NGAS BZUNG SGOR RTAGS, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 1DFA 031B 1DCE 0F39 0062;0061 1DCE 031B 0F39 1DFA 0062;0061 1DCE 031B 
0F39 1DFA 0062;0061 1DCE 031B 0F39 1DFA 0062;0061 1DCE 031B 0F39 1DFA 0062; # 
(a◌᷺◌̛◌᷎◌༹b; a◌᷎◌̛◌༹◌᷺b; a◌᷎◌̛◌༹◌᷺b; a◌᷎◌̛◌༹◌᷺b; a◌᷎◌̛◌༹◌᷺b; ) LATIN SMALL 
LETTER A, COMBINING DOT BELOW LEFT, COMBINING HORN, COMBINING OGONEK ABOVE, 
TIBETAN MARK TSA -PHRU, LATIN SMALL LETTER B
+0061 0F39 1DFA 031B 1DCE 0062;0061 1DCE 0F39 031B 1DFA 0062;0061 1DCE 0F39 
031B 1DFA 0062;0061 1DCE 0F39 031B 1DFA 0062;0061 1DCE 0F39 031B 1DFA 0062; # 
(a◌༹◌᷺◌̛◌᷎b; a◌᷎◌༹◌̛◌᷺b; a◌᷎◌༹◌̛◌᷺b; a◌᷎◌༹◌̛◌᷺b; a◌᷎◌༹◌̛◌᷺b; ) LATIN SMALL 
LETTER A, TIBETAN MARK TSA -PHRU, COMBINING DOT BELOW LEFT, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
 0061 0F72 0F71 0EC8 0F71 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 
0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062; # 
(a◌ི◌ཱ◌່◌ཱb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; ) LATIN SMALL 
LETTER A, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, TIBETAN 
VOWEL SIGN AA, LATIN SMALL LETTER B
 0061 0F71 0F72 0F71 0EC8 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 
0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062; # 
(a◌ཱ◌ི◌ཱ◌່b; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; ) LATIN SMALL 
LETTER A, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, 
LAO TONE MAI EK, LATIN SMALL LETTER B
 0061 0F74 0F72 0F71 0F72 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 
0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062; # 
(a◌ུ◌ི◌ཱ◌ིb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; ) LATIN SMALL 
LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, 
TIBETAN VOWEL SIGN I, LATIN SMALL LETTER B
@@ -17745,16 +17840,16 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 0F86 0315 0300 05AE 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 
0300 0315 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062; # 
(a◌྆◌̕◌̀◌֮b; a◌֮◌྆◌̀◌̕b; a◌֮◌྆◌̀◌̕b; a◌֮◌྆◌̀◌̕b; a◌֮◌྆◌̀◌̕b; ) LATIN SMALL 
LETTER A, TIBETAN SIGN LCI RTAGS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 0F87 0062;00E0 05AE 0F87 0315 0062;0061 05AE 0300 0F87 
0315 0062;00E0 05AE 0F87 0315 0062;0061 05AE 0300 0F87 0315 0062; # 
(a◌̕◌̀◌֮◌྇b; à◌֮◌྇◌̕b; a◌֮◌̀◌྇◌̕b; à◌֮◌྇◌̕b; a◌֮◌̀◌྇◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
TIBETAN SIGN YANG RTAGS, LATIN SMALL LETTER B
 0061 0F87 0315 0300 05AE 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 
0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062; # 
(a◌྇◌̕◌̀◌֮b; a◌֮◌྇◌̀◌̕b; a◌֮◌྇◌̀◌̕b; a◌֮◌྇◌̀◌̕b; a◌֮◌྇◌̀◌̕b; ) LATIN SMALL 
LETTER A, TIBETAN SIGN YANG RTAGS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 0FC6 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 
0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062; # 
(a◌֚◌̖◌〪◌࿆b; a◌〪◌̖◌࿆◌֚b; a◌〪◌̖◌࿆◌֚b; a◌〪◌̖◌࿆◌֚b; a◌〪◌̖◌࿆◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, TIBETAN SYMBOL PADMA GDAN, LATIN SMALL LETTER B
-0061 0FC6 059A 0316 302A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 
0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062; # 
(a◌࿆◌֚◌̖◌〪b; a◌〪◌࿆◌̖◌֚b; a◌〪◌࿆◌̖◌֚b; a◌〪◌࿆◌̖◌֚b; a◌〪◌࿆◌̖◌֚b; ) LATIN SMALL 
LETTER A, TIBETAN SYMBOL PADMA GDAN, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 0FC6 0062;0061 1DFA 0316 0FC6 059A 0062;0061 1DFA 0316 
0FC6 059A 0062;0061 1DFA 0316 0FC6 059A 0062;0061 1DFA 0316 0FC6 059A 0062; # 
(a◌֚◌̖◌᷺◌࿆b; a◌᷺◌̖◌࿆◌֚b; a◌᷺◌̖◌࿆◌֚b; a◌᷺◌̖◌࿆◌֚b; a◌᷺◌̖◌࿆◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, TIBETAN SYMBOL PADMA GDAN, LATIN SMALL LETTER B
+0061 0FC6 059A 0316 1DFA 0062;0061 1DFA 0FC6 0316 059A 0062;0061 1DFA 0FC6 
0316 059A 0062;0061 1DFA 0FC6 0316 059A 0062;0061 1DFA 0FC6 0316 059A 0062; # 
(a◌࿆◌֚◌̖◌᷺b; a◌᷺◌࿆◌̖◌֚b; a◌᷺◌࿆◌̖◌֚b; a◌᷺◌࿆◌̖◌֚b; a◌᷺◌࿆◌̖◌֚b; ) LATIN SMALL 
LETTER A, TIBETAN SYMBOL PADMA GDAN, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 3099 093C 16FF0 1037 0062;0061 16FF0 093C 1037 3099 0062;0061 16FF0 093C 
1037 3099 0062;0061 16FF0 093C 1037 3099 0062;0061 16FF0 093C 1037 3099 0062; # 
(a◌゙◌𖿰़◌့b; a𖿰◌़◌့◌゙b; a𖿰◌़◌့◌゙b; a𖿰◌़◌့◌゙b; a𖿰◌़◌့◌゙b; ) LATIN SMALL LETTER A, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, 
VIETNAMESE ALTERNATE READING MARK CA, MYANMAR SIGN DOT BELOW, LATIN SMALL 
LETTER B
 0061 1037 3099 093C 16FF0 0062;0061 16FF0 1037 093C 3099 0062;0061 16FF0 1037 
093C 3099 0062;0061 16FF0 1037 093C 3099 0062;0061 16FF0 1037 093C 3099 0062; # 
(a◌့◌゙◌𖿰़b; a𖿰◌့◌़◌゙b; a𖿰◌့◌़◌゙b; a𖿰◌့◌़◌゙b; a𖿰◌့◌़◌゙b; ) LATIN SMALL LETTER A, 
MYANMAR SIGN DOT BELOW, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, 
DEVANAGARI SIGN NUKTA, VIETNAMESE ALTERNATE READING MARK CA, LATIN SMALL LETTER 
B
 0061 05B0 094D 3099 1039 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 
1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062; # 
(a◌ְ◌्◌゙◌္b; a◌゙◌्◌္◌ְb; a◌゙◌्◌္◌ְb; a◌゙◌्◌္◌ְb; a◌゙◌्◌္◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, MYANMAR SIGN VIRAMA, LATIN SMALL LETTER B
 0061 1039 05B0 094D 3099 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 
094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062; # 
(a◌္◌ְ◌्◌゙b; a◌゙◌္◌्◌ְb; a◌゙◌္◌्◌ְb; a◌゙◌္◌्◌ְb; a◌゙◌္◌्◌ְb; ) LATIN SMALL 
LETTER A, MYANMAR SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 05B0 094D 3099 103A 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 
103A 05B0 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062; # 
(a◌ְ◌्◌゙◌်b; a◌゙◌्◌်◌ְb; a◌゙◌्◌်◌ְb; a◌゙◌्◌်◌ְb; a◌゙◌्◌်◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, MYANMAR SIGN ASAT, LATIN SMALL LETTER B
 0061 103A 05B0 094D 3099 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 
094D 05B0 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 094D 05B0 0062; # 
(a◌်◌ְ◌्◌゙b; a◌゙◌်◌्◌ְb; a◌゙◌်◌्◌ְb; a◌゙◌်◌्◌ְb; a◌゙◌်◌्◌ְb; ) LATIN SMALL 
LETTER A, MYANMAR SIGN ASAT, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 108D 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 
108D 059A 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 108D 059A 0062; # 
(a◌֚◌̖◌〪◌ႍb; a◌〪◌̖◌ႍ◌֚b; a◌〪◌̖◌ႍ◌֚b; a◌〪◌̖◌ႍ◌֚b; a◌〪◌̖◌ႍ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE, LATIN SMALL LETTER B
-0061 108D 059A 0316 302A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 
0316 059A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 0316 059A 0062; # 
(a◌ႍ◌֚◌̖◌〪b; a◌〪◌ႍ◌̖◌֚b; a◌〪◌ႍ◌̖◌֚b; a◌〪◌ႍ◌̖◌֚b; a◌〪◌ႍ◌̖◌֚b; ) LATIN SMALL 
LETTER A, MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 108D 0062;0061 1DFA 0316 108D 059A 0062;0061 1DFA 0316 
108D 059A 0062;0061 1DFA 0316 108D 059A 0062;0061 1DFA 0316 108D 059A 0062; # 
(a◌֚◌̖◌᷺◌ႍb; a◌᷺◌̖◌ႍ◌֚b; a◌᷺◌̖◌ႍ◌֚b; a◌᷺◌̖◌ႍ◌֚b; a◌᷺◌̖◌ႍ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE, LATIN SMALL LETTER B
+0061 108D 059A 0316 1DFA 0062;0061 1DFA 108D 0316 059A 0062;0061 1DFA 108D 
0316 059A 0062;0061 1DFA 108D 0316 059A 0062;0061 1DFA 108D 0316 059A 0062; # 
(a◌ႍ◌֚◌̖◌᷺b; a◌᷺◌ႍ◌̖◌֚b; a◌᷺◌ႍ◌̖◌֚b; a◌᷺◌ႍ◌̖◌֚b; a◌᷺◌ႍ◌̖◌֚b; ) LATIN SMALL 
LETTER A, MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 135D 0062;00E0 05AE 135D 0315 0062;0061 05AE 0300 135D 
0315 0062;00E0 05AE 135D 0315 0062;0061 05AE 0300 135D 0315 0062; # 
(a◌̕◌̀◌֮◌፝b; à◌֮◌፝◌̕b; a◌֮◌̀◌፝◌̕b; à◌֮◌፝◌̕b; a◌֮◌̀◌፝◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK, LATIN SMALL LETTER B
 0061 135D 0315 0300 05AE 0062;0061 05AE 135D 0300 0315 0062;0061 05AE 135D 
0300 0315 0062;0061 05AE 135D 0300 0315 0062;0061 05AE 135D 0300 0315 0062; # 
(a◌፝◌̕◌̀◌֮b; a◌֮◌፝◌̀◌̕b; a◌֮◌፝◌̀◌̕b; a◌֮◌፝◌̀◌̕b; a◌֮◌፝◌̀◌̕b; ) LATIN SMALL 
LETTER A, ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK, COMBINING COMMA 
ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 135E 0062;00E0 05AE 135E 0315 0062;0061 05AE 0300 135E 
0315 0062;00E0 05AE 135E 0315 0062;0061 05AE 0300 135E 0315 0062; # 
(a◌̕◌̀◌֮◌፞b; à◌֮◌፞◌̕b; a◌֮◌̀◌፞◌̕b; à◌֮◌፞◌̕b; a◌֮◌̀◌፞◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ETHIOPIC COMBINING VOWEL LENGTH MARK, LATIN SMALL LETTER B
@@ -17763,8 +17858,10 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 135F 0315 0300 05AE 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 
0300 0315 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062; # 
(a◌፟◌̕◌̀◌֮b; a◌֮◌፟◌̀◌̕b; a◌֮◌፟◌̀◌̕b; a◌֮◌፟◌̀◌̕b; a◌֮◌፟◌̀◌̕b; ) LATIN SMALL 
LETTER A, ETHIOPIC COMBINING GEMINATION MARK, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 05B0 094D 3099 1714 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 
1714 05B0 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062; # 
(a◌ְ◌्◌゙◌᜔b; a◌゙◌्◌᜔◌ְb; a◌゙◌्◌᜔◌ְb; a◌゙◌्◌᜔◌ְb; a◌゙◌्◌᜔◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, TAGALOG SIGN VIRAMA, LATIN SMALL LETTER B
 0061 1714 05B0 094D 3099 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 
094D 05B0 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062; # 
(a◌᜔◌ְ◌्◌゙b; a◌゙◌᜔◌्◌ְb; a◌゙◌᜔◌्◌ְb; a◌゙◌᜔◌्◌ְb; a◌゙◌᜔◌्◌ְb; ) LATIN SMALL 
LETTER A, TAGALOG SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
-0061 05B0 094D 3099 1734 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 
1734 05B0 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062; # 
(a◌ְ◌्◌゙◌᜴b; a◌゙◌्◌᜴◌ְb; a◌゙◌्◌᜴◌ְb; a◌゙◌्◌᜴◌ְb; a◌゙◌्◌᜴◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, HANUNOO SIGN PAMUDPOD, LATIN SMALL LETTER B
-0061 1734 05B0 094D 3099 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 
094D 05B0 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062; # 
(a◌᜴◌ְ◌्◌゙b; a◌゙◌᜴◌्◌ְb; a◌゙◌᜴◌्◌ְb; a◌゙◌᜴◌्◌ְb; a◌゙◌᜴◌्◌ְb; ) LATIN SMALL 
LETTER A, HANUNOO SIGN PAMUDPOD, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 05B0 094D 3099 1715 0062;0061 3099 094D 1715 05B0 0062;0061 3099 094D 
1715 05B0 0062;0061 3099 094D 1715 05B0 0062;0061 3099 094D 1715 05B0 0062; # 
(a◌ְ◌्◌゙᜕b; a◌゙◌्᜕◌ְb; a◌゙◌्᜕◌ְb; a◌゙◌्᜕◌ְb; a◌゙◌्᜕◌ְb; ) LATIN SMALL LETTER A, 
HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED 
SOUND MARK, TAGALOG SIGN PAMUDPOD, LATIN SMALL LETTER B
+0061 1715 05B0 094D 3099 0062;0061 3099 1715 094D 05B0 0062;0061 3099 1715 
094D 05B0 0062;0061 3099 1715 094D 05B0 0062;0061 3099 1715 094D 05B0 0062; # 
(a᜕◌ְ◌्◌゙b; a◌゙᜕◌्◌ְb; a◌゙᜕◌्◌ְb; a◌゙᜕◌्◌ְb; a◌゙᜕◌्◌ְb; ) LATIN SMALL LETTER A, 
TAGALOG SIGN PAMUDPOD, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 05B0 094D 3099 1734 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 
1734 05B0 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062; # 
(a◌ְ◌्◌゙᜴b; a◌゙◌्᜴◌ְb; a◌゙◌्᜴◌ְb; a◌゙◌्᜴◌ְb; a◌゙◌्᜴◌ְb; ) LATIN SMALL LETTER A, 
HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED 
SOUND MARK, HANUNOO SIGN PAMUDPOD, LATIN SMALL LETTER B
+0061 1734 05B0 094D 3099 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 
094D 05B0 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062; # 
(a᜴◌ְ◌्◌゙b; a◌゙᜴◌्◌ְb; a◌゙᜴◌्◌ְb; a◌゙᜴◌्◌ְb; a◌゙᜴◌्◌ְb; ) LATIN SMALL LETTER A, 
HANUNOO SIGN PAMUDPOD, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 05B0 094D 3099 17D2 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 
17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062; # 
(a◌ְ◌्◌゙◌្b; a◌゙◌्◌្◌ְb; a◌゙◌्◌្◌ְb; a◌゙◌्◌្◌ְb; a◌゙◌्◌្◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, KHMER SIGN COENG, LATIN SMALL LETTER B
 0061 17D2 05B0 094D 3099 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 
094D 05B0 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 094D 05B0 0062; # 
(a◌្◌ְ◌्◌゙b; a◌゙◌្◌्◌ְb; a◌゙◌្◌्◌ְb; a◌゙◌្◌्◌ְb; a◌゙◌្◌्◌ְb; ) LATIN SMALL 
LETTER A, KHMER SIGN COENG, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 0315 0300 05AE 17DD 0062;00E0 05AE 17DD 0315 0062;0061 05AE 0300 17DD 
0315 0062;00E0 05AE 17DD 0315 0062;0061 05AE 0300 17DD 0315 0062; # 
(a◌̕◌̀◌֮◌៝b; à◌֮◌៝◌̕b; a◌֮◌̀◌៝◌̕b; à◌֮◌៝◌̕b; a◌֮◌̀◌៝◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
KHMER SIGN ATTHACAN, LATIN SMALL LETTER B
@@ -17775,12 +17872,12 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 1939 302E 059A 0316 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 
059A 302E 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 059A 302E 0062; # 
(a◌᤹〮◌֚◌̖b; a◌̖◌᤹◌֚〮b; a◌̖◌᤹◌֚〮b; a◌̖◌᤹◌֚〮b; a◌̖◌᤹◌֚〮b; ) LATIN SMALL LETTER A, 
LIMBU SIGN MUKPHRENG, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B
 0061 0315 0300 05AE 193A 0062;00E0 05AE 193A 0315 0062;0061 05AE 0300 193A 
0315 0062;00E0 05AE 193A 0315 0062;0061 05AE 0300 193A 0315 0062; # 
(a◌̕◌̀◌֮◌᤺b; à◌֮◌᤺◌̕b; a◌֮◌̀◌᤺◌̕b; à◌֮◌᤺◌̕b; a◌֮◌̀◌᤺◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
LIMBU SIGN KEMPHRENG, LATIN SMALL LETTER B
 0061 193A 0315 0300 05AE 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 
0300 0315 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062; # 
(a◌᤺◌̕◌̀◌֮b; a◌֮◌᤺◌̀◌̕b; a◌֮◌᤺◌̀◌̕b; a◌֮◌᤺◌̀◌̕b; a◌֮◌᤺◌̀◌̕b; ) LATIN SMALL 
LETTER A, LIMBU SIGN KEMPHRENG, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 193B 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 
193B 059A 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062; # 
(a◌֚◌̖◌〪◌᤻b; a◌〪◌̖◌᤻◌֚b; a◌〪◌̖◌᤻◌֚b; a◌〪◌̖◌᤻◌֚b; a◌〪◌̖◌᤻◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, LIMBU SIGN SA-I, LATIN SMALL LETTER B
-0061 193B 059A 0316 302A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 
0316 059A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062; # 
(a◌᤻◌֚◌̖◌〪b; a◌〪◌᤻◌̖◌֚b; a◌〪◌᤻◌̖◌֚b; a◌〪◌᤻◌̖◌֚b; a◌〪◌᤻◌̖◌֚b; ) LATIN SMALL 
LETTER A, LIMBU SIGN SA-I, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 193B 0062;0061 1DFA 0316 193B 059A 0062;0061 1DFA 0316 
193B 059A 0062;0061 1DFA 0316 193B 059A 0062;0061 1DFA 0316 193B 059A 0062; # 
(a◌֚◌̖◌᷺◌᤻b; a◌᷺◌̖◌᤻◌֚b; a◌᷺◌̖◌᤻◌֚b; a◌᷺◌̖◌᤻◌֚b; a◌᷺◌̖◌᤻◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, LIMBU SIGN SA-I, LATIN SMALL LETTER B
+0061 193B 059A 0316 1DFA 0062;0061 1DFA 193B 0316 059A 0062;0061 1DFA 193B 
0316 059A 0062;0061 1DFA 193B 0316 059A 0062;0061 1DFA 193B 0316 059A 0062; # 
(a◌᤻◌֚◌̖◌᷺b; a◌᷺◌᤻◌̖◌֚b; a◌᷺◌᤻◌̖◌֚b; a◌᷺◌᤻◌̖◌֚b; a◌᷺◌᤻◌̖◌֚b; ) LATIN SMALL 
LETTER A, LIMBU SIGN SA-I, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1A17 0062;00E0 05AE 1A17 0315 0062;0061 05AE 0300 1A17 
0315 0062;00E0 05AE 1A17 0315 0062;0061 05AE 0300 1A17 0315 0062; # 
(a◌̕◌̀◌֮◌ᨗb; à◌֮◌ᨗ◌̕b; a◌֮◌̀◌ᨗ◌̕b; à◌֮◌ᨗ◌̕b; a◌֮◌̀◌ᨗ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
BUGINESE VOWEL SIGN I, LATIN SMALL LETTER B
 0061 1A17 0315 0300 05AE 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 
0300 0315 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062; # 
(a◌ᨗ◌̕◌̀◌֮b; a◌֮◌ᨗ◌̀◌̕b; a◌֮◌ᨗ◌̀◌̕b; a◌֮◌ᨗ◌̀◌̕b; a◌֮◌ᨗ◌̀◌̕b; ) LATIN SMALL 
LETTER A, BUGINESE VOWEL SIGN I, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1A18 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 
1A18 059A 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062; # 
(a◌֚◌̖◌〪◌ᨘb; a◌〪◌̖◌ᨘ◌֚b; a◌〪◌̖◌ᨘ◌֚b; a◌〪◌̖◌ᨘ◌֚b; a◌〪◌̖◌ᨘ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, BUGINESE VOWEL SIGN U, LATIN SMALL LETTER B
-0061 1A18 059A 0316 302A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 
0316 059A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062; # 
(a◌ᨘ◌֚◌̖◌〪b; a◌〪◌ᨘ◌̖◌֚b; a◌〪◌ᨘ◌̖◌֚b; a◌〪◌ᨘ◌̖◌֚b; a◌〪◌ᨘ◌̖◌֚b; ) LATIN SMALL 
LETTER A, BUGINESE VOWEL SIGN U, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1A18 0062;0061 1DFA 0316 1A18 059A 0062;0061 1DFA 0316 
1A18 059A 0062;0061 1DFA 0316 1A18 059A 0062;0061 1DFA 0316 1A18 059A 0062; # 
(a◌֚◌̖◌᷺◌ᨘb; a◌᷺◌̖◌ᨘ◌֚b; a◌᷺◌̖◌ᨘ◌֚b; a◌᷺◌̖◌ᨘ◌֚b; a◌᷺◌̖◌ᨘ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, BUGINESE VOWEL SIGN U, LATIN SMALL LETTER B
+0061 1A18 059A 0316 1DFA 0062;0061 1DFA 1A18 0316 059A 0062;0061 1DFA 1A18 
0316 059A 0062;0061 1DFA 1A18 0316 059A 0062;0061 1DFA 1A18 0316 059A 0062; # 
(a◌ᨘ◌֚◌̖◌᷺b; a◌᷺◌ᨘ◌̖◌֚b; a◌᷺◌ᨘ◌̖◌֚b; a◌᷺◌ᨘ◌̖◌֚b; a◌᷺◌ᨘ◌̖◌֚b; ) LATIN SMALL 
LETTER A, BUGINESE VOWEL SIGN U, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 05B0 094D 3099 1A60 0062;0061 3099 094D 1A60 05B0 0062;0061 3099 094D 
1A60 05B0 0062;0061 3099 094D 1A60 05B0 0062;0061 3099 094D 1A60 05B0 0062; # 
(a◌ְ◌्◌゙◌᩠b; a◌゙◌्◌᩠◌ְb; a◌゙◌्◌᩠◌ְb; a◌゙◌्◌᩠◌ְb; a◌゙◌्◌᩠◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, TAI THAM SIGN SAKOT, LATIN SMALL LETTER B
 0061 1A60 05B0 094D 3099 0062;0061 3099 1A60 094D 05B0 0062;0061 3099 1A60 
094D 05B0 0062;0061 3099 1A60 094D 05B0 0062;0061 3099 1A60 094D 05B0 0062; # 
(a◌᩠◌ְ◌्◌゙b; a◌゙◌᩠◌्◌ְb; a◌゙◌᩠◌्◌ְb; a◌゙◌᩠◌्◌ְb; a◌゙◌᩠◌्◌ְb; ) LATIN SMALL 
LETTER A, TAI THAM SIGN SAKOT, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1A75 0062;00E0 05AE 1A75 0315 0062;0061 05AE 0300 1A75 
0315 0062;00E0 05AE 1A75 0315 0062;0061 05AE 0300 1A75 0315 0062; # 
(a◌̕◌̀◌֮◌᩵b; à◌֮◌᩵◌̕b; a◌֮◌̀◌᩵◌̕b; à◌֮◌᩵◌̕b; a◌֮◌̀◌᩵◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
TAI THAM SIGN TONE-1, LATIN SMALL LETTER B
@@ -17799,8 +17896,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 1A7B 0315 0300 05AE 0062;0061 05AE 1A7B 0300 0315 0062;0061 05AE 1A7B 
0300 0315 0062;0061 05AE 1A7B 0300 0315 0062;0061 05AE 1A7B 0300 0315 0062; # 
(a◌᩻◌̕◌̀◌֮b; a◌֮◌᩻◌̀◌̕b; a◌֮◌᩻◌̀◌̕b; a◌֮◌᩻◌̀◌̕b; a◌֮◌᩻◌̀◌̕b; ) LATIN SMALL 
LETTER A, TAI THAM SIGN MAI SAM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1A7C 0062;00E0 05AE 1A7C 0315 0062;0061 05AE 0300 1A7C 
0315 0062;00E0 05AE 1A7C 0315 0062;0061 05AE 0300 1A7C 0315 0062; # 
(a◌̕◌̀◌֮◌᩼b; à◌֮◌᩼◌̕b; a◌֮◌̀◌᩼◌̕b; à◌֮◌᩼◌̕b; a◌֮◌̀◌᩼◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
TAI THAM SIGN KHUEN-LUE KARAN, LATIN SMALL LETTER B
 0061 1A7C 0315 0300 05AE 0062;0061 05AE 1A7C 0300 0315 0062;0061 05AE 1A7C 
0300 0315 0062;0061 05AE 1A7C 0300 0315 0062;0061 05AE 1A7C 0300 0315 0062; # 
(a◌᩼◌̕◌̀◌֮b; a◌֮◌᩼◌̀◌̕b; a◌֮◌᩼◌̀◌̕b; a◌֮◌᩼◌̀◌̕b; a◌֮◌᩼◌̀◌̕b; ) LATIN SMALL 
LETTER A, TAI THAM SIGN KHUEN-LUE KARAN, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1A7F 0062;0061 302A 0316 1A7F 059A 0062;0061 302A 0316 
1A7F 059A 0062;0061 302A 0316 1A7F 059A 0062;0061 302A 0316 1A7F 059A 0062; # 
(a◌֚◌̖◌〪◌᩿b; a◌〪◌̖◌᩿◌֚b; a◌〪◌̖◌᩿◌֚b; a◌〪◌̖◌᩿◌֚b; a◌〪◌̖◌᩿◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, TAI THAM COMBINING CRYPTOGRAMMIC DOT, LATIN SMALL LETTER B
-0061 1A7F 059A 0316 302A 0062;0061 302A 1A7F 0316 059A 0062;0061 302A 1A7F 
0316 059A 0062;0061 302A 1A7F 0316 059A 0062;0061 302A 1A7F 0316 059A 0062; # 
(a◌᩿◌֚◌̖◌〪b; a◌〪◌᩿◌̖◌֚b; a◌〪◌᩿◌̖◌֚b; a◌〪◌᩿◌̖◌֚b; a◌〪◌᩿◌̖◌֚b; ) LATIN SMALL 
LETTER A, TAI THAM COMBINING CRYPTOGRAMMIC DOT, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1A7F 0062;0061 1DFA 0316 1A7F 059A 0062;0061 1DFA 0316 
1A7F 059A 0062;0061 1DFA 0316 1A7F 059A 0062;0061 1DFA 0316 1A7F 059A 0062; # 
(a◌֚◌̖◌᷺◌᩿b; a◌᷺◌̖◌᩿◌֚b; a◌᷺◌̖◌᩿◌֚b; a◌᷺◌̖◌᩿◌֚b; a◌᷺◌̖◌᩿◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, TAI THAM COMBINING CRYPTOGRAMMIC DOT, LATIN SMALL LETTER B
+0061 1A7F 059A 0316 1DFA 0062;0061 1DFA 1A7F 0316 059A 0062;0061 1DFA 1A7F 
0316 059A 0062;0061 1DFA 1A7F 0316 059A 0062;0061 1DFA 1A7F 0316 059A 0062; # 
(a◌᩿◌֚◌̖◌᷺b; a◌᷺◌᩿◌̖◌֚b; a◌᷺◌᩿◌̖◌֚b; a◌᷺◌᩿◌̖◌֚b; a◌᷺◌᩿◌̖◌֚b; ) LATIN SMALL 
LETTER A, TAI THAM COMBINING CRYPTOGRAMMIC DOT, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1AB0 0062;00E0 05AE 1AB0 0315 0062;0061 05AE 0300 1AB0 
0315 0062;00E0 05AE 1AB0 0315 0062;0061 05AE 0300 1AB0 0315 0062; # 
(a◌̕◌̀◌֮◌᪰b; à◌֮◌᪰◌̕b; a◌֮◌̀◌᪰◌̕b; à◌֮◌᪰◌̕b; a◌֮◌̀◌᪰◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING DOUBLED CIRCUMFLEX ACCENT, LATIN SMALL LETTER B
 0061 1AB0 0315 0300 05AE 0062;0061 05AE 1AB0 0300 0315 0062;0061 05AE 1AB0 
0300 0315 0062;0061 05AE 1AB0 0300 0315 0062;0061 05AE 1AB0 0300 0315 0062; # 
(a◌᪰◌̕◌̀◌֮b; a◌֮◌᪰◌̀◌̕b; a◌֮◌᪰◌̀◌̕b; a◌֮◌᪰◌̀◌̕b; a◌֮◌᪰◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLED CIRCUMFLEX ACCENT, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1AB1 0062;00E0 05AE 1AB1 0315 0062;0061 05AE 0300 1AB1 
0315 0062;00E0 05AE 1AB1 0315 0062;0061 05AE 0300 1AB1 0315 0062; # 
(a◌̕◌̀◌֮◌᪱b; à◌֮◌᪱◌̕b; a◌֮◌̀◌᪱◌̕b; à◌֮◌᪱◌̕b; a◌֮◌̀◌᪱◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING DIAERESIS-RING, LATIN SMALL LETTER B
@@ -17811,36 +17908,64 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 1AB3 0315 0300 05AE 0062;0061 05AE 1AB3 0300 0315 0062;0061 05AE 1AB3 
0300 0315 0062;0061 05AE 1AB3 0300 0315 0062;0061 05AE 1AB3 0300 0315 0062; # 
(a◌᪳◌̕◌̀◌֮b; a◌֮◌᪳◌̀◌̕b; a◌֮◌᪳◌̀◌̕b; a◌֮◌᪳◌̀◌̕b; a◌֮◌᪳◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING DOWNWARDS ARROW, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1AB4 0062;00E0 05AE 1AB4 0315 0062;0061 05AE 0300 1AB4 
0315 0062;00E0 05AE 1AB4 0315 0062;0061 05AE 0300 1AB4 0315 0062; # 
(a◌̕◌̀◌֮◌᪴b; à◌֮◌᪴◌̕b; a◌֮◌̀◌᪴◌̕b; à◌֮◌᪴◌̕b; a◌֮◌̀◌᪴◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING TRIPLE DOT, LATIN SMALL LETTER B
 0061 1AB4 0315 0300 05AE 0062;0061 05AE 1AB4 0300 0315 0062;0061 05AE 1AB4 
0300 0315 0062;0061 05AE 1AB4 0300 0315 0062;0061 05AE 1AB4 0300 0315 0062; # 
(a◌᪴◌̕◌̀◌֮b; a◌֮◌᪴◌̀◌̕b; a◌֮◌᪴◌̀◌̕b; a◌֮◌᪴◌̀◌̕b; a◌֮◌᪴◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING TRIPLE DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1AB5 0062;0061 302A 0316 1AB5 059A 0062;0061 302A 0316 
1AB5 059A 0062;0061 302A 0316 1AB5 059A 0062;0061 302A 0316 1AB5 059A 0062; # 
(a◌֚◌̖◌〪◌᪵b; a◌〪◌̖◌᪵◌֚b; a◌〪◌̖◌᪵◌֚b; a◌〪◌̖◌᪵◌֚b; a◌〪◌̖◌᪵◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING X-X BELOW, LATIN SMALL LETTER B
-0061 1AB5 059A 0316 302A 0062;0061 302A 1AB5 0316 059A 0062;0061 302A 1AB5 
0316 059A 0062;0061 302A 1AB5 0316 059A 0062;0061 302A 1AB5 0316 059A 0062; # 
(a◌᪵◌֚◌̖◌〪b; a◌〪◌᪵◌̖◌֚b; a◌〪◌᪵◌̖◌֚b; a◌〪◌᪵◌̖◌֚b; a◌〪◌᪵◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING X-X BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1AB6 0062;0061 302A 0316 1AB6 059A 0062;0061 302A 0316 
1AB6 059A 0062;0061 302A 0316 1AB6 059A 0062;0061 302A 0316 1AB6 059A 0062; # 
(a◌֚◌̖◌〪◌᪶b; a◌〪◌̖◌᪶◌֚b; a◌〪◌̖◌᪶◌֚b; a◌〪◌̖◌᪶◌֚b; a◌〪◌̖◌᪶◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING WIGGLY LINE BELOW, LATIN SMALL LETTER B
-0061 1AB6 059A 0316 302A 0062;0061 302A 1AB6 0316 059A 0062;0061 302A 1AB6 
0316 059A 0062;0061 302A 1AB6 0316 059A 0062;0061 302A 1AB6 0316 059A 0062; # 
(a◌᪶◌֚◌̖◌〪b; a◌〪◌᪶◌̖◌֚b; a◌〪◌᪶◌̖◌֚b; a◌〪◌᪶◌̖◌֚b; a◌〪◌᪶◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING WIGGLY LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1AB7 0062;0061 302A 0316 1AB7 059A 0062;0061 302A 0316 
1AB7 059A 0062;0061 302A 0316 1AB7 059A 0062;0061 302A 0316 1AB7 059A 0062; # 
(a◌֚◌̖◌〪◌᪷b; a◌〪◌̖◌᪷◌֚b; a◌〪◌̖◌᪷◌֚b; a◌〪◌̖◌᪷◌֚b; a◌〪◌̖◌᪷◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING OPEN MARK BELOW, LATIN SMALL LETTER B
-0061 1AB7 059A 0316 302A 0062;0061 302A 1AB7 0316 059A 0062;0061 302A 1AB7 
0316 059A 0062;0061 302A 1AB7 0316 059A 0062;0061 302A 1AB7 0316 059A 0062; # 
(a◌᪷◌֚◌̖◌〪b; a◌〪◌᪷◌̖◌֚b; a◌〪◌᪷◌̖◌֚b; a◌〪◌᪷◌̖◌֚b; a◌〪◌᪷◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING OPEN MARK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1AB8 0062;0061 302A 0316 1AB8 059A 0062;0061 302A 0316 
1AB8 059A 0062;0061 302A 0316 1AB8 059A 0062;0061 302A 0316 1AB8 059A 0062; # 
(a◌֚◌̖◌〪◌᪸b; a◌〪◌̖◌᪸◌֚b; a◌〪◌̖◌᪸◌֚b; a◌〪◌̖◌᪸◌֚b; a◌〪◌̖◌᪸◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING DOUBLE OPEN MARK BELOW, LATIN SMALL LETTER B
-0061 1AB8 059A 0316 302A 0062;0061 302A 1AB8 0316 059A 0062;0061 302A 1AB8 
0316 059A 0062;0061 302A 1AB8 0316 059A 0062;0061 302A 1AB8 0316 059A 0062; # 
(a◌᪸◌֚◌̖◌〪b; a◌〪◌᪸◌̖◌֚b; a◌〪◌᪸◌̖◌֚b; a◌〪◌᪸◌̖◌֚b; a◌〪◌᪸◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE OPEN MARK BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1AB9 0062;0061 302A 0316 1AB9 059A 0062;0061 302A 0316 
1AB9 059A 0062;0061 302A 0316 1AB9 059A 0062;0061 302A 0316 1AB9 059A 0062; # 
(a◌֚◌̖◌〪◌᪹b; a◌〪◌̖◌᪹◌֚b; a◌〪◌̖◌᪹◌֚b; a◌〪◌̖◌᪹◌֚b; a◌〪◌̖◌᪹◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LIGHT CENTRALIZATION STROKE BELOW, LATIN SMALL LETTER B
-0061 1AB9 059A 0316 302A 0062;0061 302A 1AB9 0316 059A 0062;0061 302A 1AB9 
0316 059A 0062;0061 302A 1AB9 0316 059A 0062;0061 302A 1AB9 0316 059A 0062; # 
(a◌᪹◌֚◌̖◌〪b; a◌〪◌᪹◌̖◌֚b; a◌〪◌᪹◌̖◌֚b; a◌〪◌᪹◌̖◌֚b; a◌〪◌᪹◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LIGHT CENTRALIZATION STROKE BELOW, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1ABA 0062;0061 302A 0316 1ABA 059A 0062;0061 302A 0316 
1ABA 059A 0062;0061 302A 0316 1ABA 059A 0062;0061 302A 0316 1ABA 059A 0062; # 
(a◌֚◌̖◌〪◌᪺b; a◌〪◌̖◌᪺◌֚b; a◌〪◌̖◌᪺◌֚b; a◌〪◌̖◌᪺◌֚b; a◌〪◌̖◌᪺◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING STRONG CENTRALIZATION STROKE BELOW, LATIN SMALL LETTER B
-0061 1ABA 059A 0316 302A 0062;0061 302A 1ABA 0316 059A 0062;0061 302A 1ABA 
0316 059A 0062;0061 302A 1ABA 0316 059A 0062;0061 302A 1ABA 0316 059A 0062; # 
(a◌᪺◌֚◌̖◌〪b; a◌〪◌᪺◌̖◌֚b; a◌〪◌᪺◌̖◌֚b; a◌〪◌᪺◌̖◌֚b; a◌〪◌᪺◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING STRONG CENTRALIZATION STROKE BELOW, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1AB5 0062;0061 1DFA 0316 1AB5 059A 0062;0061 1DFA 0316 
1AB5 059A 0062;0061 1DFA 0316 1AB5 059A 0062;0061 1DFA 0316 1AB5 059A 0062; # 
(a◌֚◌̖◌᷺◌᪵b; a◌᷺◌̖◌᪵◌֚b; a◌᷺◌̖◌᪵◌֚b; a◌᷺◌̖◌᪵◌֚b; a◌᷺◌̖◌᪵◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING X-X BELOW, LATIN SMALL LETTER B
+0061 1AB5 059A 0316 1DFA 0062;0061 1DFA 1AB5 0316 059A 0062;0061 1DFA 1AB5 
0316 059A 0062;0061 1DFA 1AB5 0316 059A 0062;0061 1DFA 1AB5 0316 059A 0062; # 
(a◌᪵◌֚◌̖◌᷺b; a◌᷺◌᪵◌̖◌֚b; a◌᷺◌᪵◌̖◌֚b; a◌᷺◌᪵◌̖◌֚b; a◌᷺◌᪵◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING X-X BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1AB6 0062;0061 1DFA 0316 1AB6 059A 0062;0061 1DFA 0316 
1AB6 059A 0062;0061 1DFA 0316 1AB6 059A 0062;0061 1DFA 0316 1AB6 059A 0062; # 
(a◌֚◌̖◌᷺◌᪶b; a◌᷺◌̖◌᪶◌֚b; a◌᷺◌̖◌᪶◌֚b; a◌᷺◌̖◌᪶◌֚b; a◌᷺◌̖◌᪶◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING WIGGLY LINE BELOW, LATIN SMALL LETTER B
+0061 1AB6 059A 0316 1DFA 0062;0061 1DFA 1AB6 0316 059A 0062;0061 1DFA 1AB6 
0316 059A 0062;0061 1DFA 1AB6 0316 059A 0062;0061 1DFA 1AB6 0316 059A 0062; # 
(a◌᪶◌֚◌̖◌᷺b; a◌᷺◌᪶◌̖◌֚b; a◌᷺◌᪶◌̖◌֚b; a◌᷺◌᪶◌̖◌֚b; a◌᷺◌᪶◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING WIGGLY LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1AB7 0062;0061 1DFA 0316 1AB7 059A 0062;0061 1DFA 0316 
1AB7 059A 0062;0061 1DFA 0316 1AB7 059A 0062;0061 1DFA 0316 1AB7 059A 0062; # 
(a◌֚◌̖◌᷺◌᪷b; a◌᷺◌̖◌᪷◌֚b; a◌᷺◌̖◌᪷◌֚b; a◌᷺◌̖◌᪷◌֚b; a◌᷺◌̖◌᪷◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING OPEN MARK BELOW, LATIN SMALL LETTER B
+0061 1AB7 059A 0316 1DFA 0062;0061 1DFA 1AB7 0316 059A 0062;0061 1DFA 1AB7 
0316 059A 0062;0061 1DFA 1AB7 0316 059A 0062;0061 1DFA 1AB7 0316 059A 0062; # 
(a◌᪷◌֚◌̖◌᷺b; a◌᷺◌᪷◌̖◌֚b; a◌᷺◌᪷◌̖◌֚b; a◌᷺◌᪷◌̖◌֚b; a◌᷺◌᪷◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING OPEN MARK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1AB8 0062;0061 1DFA 0316 1AB8 059A 0062;0061 1DFA 0316 
1AB8 059A 0062;0061 1DFA 0316 1AB8 059A 0062;0061 1DFA 0316 1AB8 059A 0062; # 
(a◌֚◌̖◌᷺◌᪸b; a◌᷺◌̖◌᪸◌֚b; a◌᷺◌̖◌᪸◌֚b; a◌᷺◌̖◌᪸◌֚b; a◌᷺◌̖◌᪸◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING DOUBLE OPEN MARK BELOW, LATIN SMALL LETTER B
+0061 1AB8 059A 0316 1DFA 0062;0061 1DFA 1AB8 0316 059A 0062;0061 1DFA 1AB8 
0316 059A 0062;0061 1DFA 1AB8 0316 059A 0062;0061 1DFA 1AB8 0316 059A 0062; # 
(a◌᪸◌֚◌̖◌᷺b; a◌᷺◌᪸◌̖◌֚b; a◌᷺◌᪸◌̖◌֚b; a◌᷺◌᪸◌̖◌֚b; a◌᷺◌᪸◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE OPEN MARK BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1AB9 0062;0061 1DFA 0316 1AB9 059A 0062;0061 1DFA 0316 
1AB9 059A 0062;0061 1DFA 0316 1AB9 059A 0062;0061 1DFA 0316 1AB9 059A 0062; # 
(a◌֚◌̖◌᷺◌᪹b; a◌᷺◌̖◌᪹◌֚b; a◌᷺◌̖◌᪹◌֚b; a◌᷺◌̖◌᪹◌֚b; a◌᷺◌̖◌᪹◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LIGHT CENTRALIZATION STROKE BELOW, LATIN SMALL LETTER B
+0061 1AB9 059A 0316 1DFA 0062;0061 1DFA 1AB9 0316 059A 0062;0061 1DFA 1AB9 
0316 059A 0062;0061 1DFA 1AB9 0316 059A 0062;0061 1DFA 1AB9 0316 059A 0062; # 
(a◌᪹◌֚◌̖◌᷺b; a◌᷺◌᪹◌̖◌֚b; a◌᷺◌᪹◌̖◌֚b; a◌᷺◌᪹◌̖◌֚b; a◌᷺◌᪹◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LIGHT CENTRALIZATION STROKE BELOW, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1ABA 0062;0061 1DFA 0316 1ABA 059A 0062;0061 1DFA 0316 
1ABA 059A 0062;0061 1DFA 0316 1ABA 059A 0062;0061 1DFA 0316 1ABA 059A 0062; # 
(a◌֚◌̖◌᷺◌᪺b; a◌᷺◌̖◌᪺◌֚b; a◌᷺◌̖◌᪺◌֚b; a◌᷺◌̖◌᪺◌֚b; a◌᷺◌̖◌᪺◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING STRONG CENTRALIZATION STROKE BELOW, LATIN SMALL LETTER B
+0061 1ABA 059A 0316 1DFA 0062;0061 1DFA 1ABA 0316 059A 0062;0061 1DFA 1ABA 
0316 059A 0062;0061 1DFA 1ABA 0316 059A 0062;0061 1DFA 1ABA 0316 059A 0062; # 
(a◌᪺◌֚◌̖◌᷺b; a◌᷺◌᪺◌̖◌֚b; a◌᷺◌᪺◌̖◌֚b; a◌᷺◌᪺◌̖◌֚b; a◌᷺◌᪺◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING STRONG CENTRALIZATION STROKE BELOW, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1ABB 0062;00E0 05AE 1ABB 0315 0062;0061 05AE 0300 1ABB 
0315 0062;00E0 05AE 1ABB 0315 0062;0061 05AE 0300 1ABB 0315 0062; # 
(a◌̕◌̀◌֮◌᪻b; à◌֮◌᪻◌̕b; a◌֮◌̀◌᪻◌̕b; à◌֮◌᪻◌̕b; a◌֮◌̀◌᪻◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING PARENTHESES ABOVE, LATIN SMALL LETTER B
 0061 1ABB 0315 0300 05AE 0062;0061 05AE 1ABB 0300 0315 0062;0061 05AE 1ABB 
0300 0315 0062;0061 05AE 1ABB 0300 0315 0062;0061 05AE 1ABB 0300 0315 0062; # 
(a◌᪻◌̕◌̀◌֮b; a◌֮◌᪻◌̀◌̕b; a◌֮◌᪻◌̀◌̕b; a◌֮◌᪻◌̀◌̕b; a◌֮◌᪻◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING PARENTHESES ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1ABC 0062;00E0 05AE 1ABC 0315 0062;0061 05AE 0300 1ABC 
0315 0062;00E0 05AE 1ABC 0315 0062;0061 05AE 0300 1ABC 0315 0062; # 
(a◌̕◌̀◌֮◌᪼b; à◌֮◌᪼◌̕b; a◌֮◌̀◌᪼◌̕b; à◌֮◌᪼◌̕b; a◌֮◌̀◌᪼◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING DOUBLE PARENTHESES ABOVE, LATIN SMALL LETTER B
 0061 1ABC 0315 0300 05AE 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 
0300 0315 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 0300 0315 0062; # 
(a◌᪼◌̕◌̀◌֮b; a◌֮◌᪼◌̀◌̕b; a◌֮◌᪼◌̀◌̕b; a◌֮◌᪼◌̀◌̕b; a◌֮◌᪼◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE PARENTHESES ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1ABD 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 
1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062; # 
(a◌֚◌̖◌〪◌᪽b; a◌〪◌̖◌᪽◌֚b; a◌〪◌̖◌᪽◌֚b; a◌〪◌̖◌᪽◌֚b; a◌〪◌̖◌᪽◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING PARENTHESES BELOW, LATIN SMALL LETTER B
-0061 1ABD 059A 0316 302A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 
0316 059A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 0316 059A 0062; # 
(a◌᪽◌֚◌̖◌〪b; a◌〪◌᪽◌̖◌֚b; a◌〪◌᪽◌̖◌֚b; a◌〪◌᪽◌̖◌֚b; a◌〪◌᪽◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING PARENTHESES BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1ABF 0062;0061 302A 0316 1ABF 059A 0062;0061 302A 0316 
1ABF 059A 0062;0061 302A 0316 1ABF 059A 0062;0061 302A 0316 1ABF 059A 0062; # 
(a◌֚◌̖◌〪◌ᪿb; a◌〪◌̖◌ᪿ◌֚b; a◌〪◌̖◌ᪿ◌֚b; a◌〪◌̖◌ᪿ◌֚b; a◌〪◌̖◌ᪿ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LATIN SMALL LETTER W BELOW, LATIN SMALL LETTER B
-0061 1ABF 059A 0316 302A 0062;0061 302A 1ABF 0316 059A 0062;0061 302A 1ABF 
0316 059A 0062;0061 302A 1ABF 0316 059A 0062;0061 302A 1ABF 0316 059A 0062; # 
(a◌ᪿ◌֚◌̖◌〪b; a◌〪◌ᪿ◌̖◌֚b; a◌〪◌ᪿ◌̖◌֚b; a◌〪◌ᪿ◌̖◌֚b; a◌〪◌ᪿ◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LATIN SMALL LETTER W BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1AC0 0062;0061 302A 0316 1AC0 059A 0062;0061 302A 0316 
1AC0 059A 0062;0061 302A 0316 1AC0 059A 0062;0061 302A 0316 1AC0 059A 0062; # 
(a◌֚◌̖◌〪◌ᫀb; a◌〪◌̖◌ᫀ◌֚b; a◌〪◌̖◌ᫀ◌֚b; a◌〪◌̖◌ᫀ◌֚b; a◌〪◌̖◌ᫀ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LATIN SMALL LETTER TURNED W BELOW, LATIN SMALL LETTER B
-0061 1AC0 059A 0316 302A 0062;0061 302A 1AC0 0316 059A 0062;0061 302A 1AC0 
0316 059A 0062;0061 302A 1AC0 0316 059A 0062;0061 302A 1AC0 0316 059A 0062; # 
(a◌ᫀ◌֚◌̖◌〪b; a◌〪◌ᫀ◌̖◌֚b; a◌〪◌ᫀ◌̖◌֚b; a◌〪◌ᫀ◌̖◌֚b; a◌〪◌ᫀ◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LATIN SMALL LETTER TURNED W BELOW, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1ABD 0062;0061 1DFA 0316 1ABD 059A 0062;0061 1DFA 0316 
1ABD 059A 0062;0061 1DFA 0316 1ABD 059A 0062;0061 1DFA 0316 1ABD 059A 0062; # 
(a◌֚◌̖◌᷺◌᪽b; a◌᷺◌̖◌᪽◌֚b; a◌᷺◌̖◌᪽◌֚b; a◌᷺◌̖◌᪽◌֚b; a◌᷺◌̖◌᪽◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING PARENTHESES BELOW, LATIN SMALL LETTER B
+0061 1ABD 059A 0316 1DFA 0062;0061 1DFA 1ABD 0316 059A 0062;0061 1DFA 1ABD 
0316 059A 0062;0061 1DFA 1ABD 0316 059A 0062;0061 1DFA 1ABD 0316 059A 0062; # 
(a◌᪽◌֚◌̖◌᷺b; a◌᷺◌᪽◌̖◌֚b; a◌᷺◌᪽◌̖◌֚b; a◌᷺◌᪽◌̖◌֚b; a◌᷺◌᪽◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING PARENTHESES BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1ABF 0062;0061 1DFA 0316 1ABF 059A 0062;0061 1DFA 0316 
1ABF 059A 0062;0061 1DFA 0316 1ABF 059A 0062;0061 1DFA 0316 1ABF 059A 0062; # 
(a◌֚◌̖◌᷺◌ᪿb; a◌᷺◌̖◌ᪿ◌֚b; a◌᷺◌̖◌ᪿ◌֚b; a◌᷺◌̖◌ᪿ◌֚b; a◌᷺◌̖◌ᪿ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LATIN SMALL LETTER W BELOW, LATIN SMALL LETTER B
+0061 1ABF 059A 0316 1DFA 0062;0061 1DFA 1ABF 0316 059A 0062;0061 1DFA 1ABF 
0316 059A 0062;0061 1DFA 1ABF 0316 059A 0062;0061 1DFA 1ABF 0316 059A 0062; # 
(a◌ᪿ◌֚◌̖◌᷺b; a◌᷺◌ᪿ◌̖◌֚b; a◌᷺◌ᪿ◌̖◌֚b; a◌᷺◌ᪿ◌̖◌֚b; a◌᷺◌ᪿ◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LATIN SMALL LETTER W BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1AC0 0062;0061 1DFA 0316 1AC0 059A 0062;0061 1DFA 0316 
1AC0 059A 0062;0061 1DFA 0316 1AC0 059A 0062;0061 1DFA 0316 1AC0 059A 0062; # 
(a◌֚◌̖◌᷺◌ᫀb; a◌᷺◌̖◌ᫀ◌֚b; a◌᷺◌̖◌ᫀ◌֚b; a◌᷺◌̖◌ᫀ◌֚b; a◌᷺◌̖◌ᫀ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LATIN SMALL LETTER TURNED W BELOW, LATIN SMALL LETTER B
+0061 1AC0 059A 0316 1DFA 0062;0061 1DFA 1AC0 0316 059A 0062;0061 1DFA 1AC0 
0316 059A 0062;0061 1DFA 1AC0 0316 059A 0062;0061 1DFA 1AC0 0316 059A 0062; # 
(a◌ᫀ◌֚◌̖◌᷺b; a◌᷺◌ᫀ◌̖◌֚b; a◌᷺◌ᫀ◌̖◌֚b; a◌᷺◌ᫀ◌̖◌֚b; a◌᷺◌ᫀ◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LATIN SMALL LETTER TURNED W BELOW, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1AC1 0062;00E0 05AE 1AC1 0315 0062;0061 05AE 0300 1AC1 
0315 0062;00E0 05AE 1AC1 0315 0062;0061 05AE 0300 1AC1 0315 0062; # 
(a◌̕◌̀◌֮◌᫁b; à◌֮◌᫁◌̕b; a◌֮◌̀◌᫁◌̕b; à◌֮◌᫁◌̕b; a◌֮◌̀◌᫁◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING LEFT PARENTHESIS ABOVE LEFT, LATIN SMALL LETTER B
+0061 1AC1 0315 0300 05AE 0062;0061 05AE 1AC1 0300 0315 0062;0061 05AE 1AC1 
0300 0315 0062;0061 05AE 1AC1 0300 0315 0062;0061 05AE 1AC1 0300 0315 0062; # 
(a◌᫁◌̕◌̀◌֮b; a◌֮◌᫁◌̀◌̕b; a◌֮◌᫁◌̀◌̕b; a◌֮◌᫁◌̀◌̕b; a◌֮◌᫁◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING LEFT PARENTHESIS ABOVE LEFT, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1AC2 0062;00E0 05AE 1AC2 0315 0062;0061 05AE 0300 1AC2 
0315 0062;00E0 05AE 1AC2 0315 0062;0061 05AE 0300 1AC2 0315 0062; # 
(a◌̕◌̀◌֮◌᫂b; à◌֮◌᫂◌̕b; a◌֮◌̀◌᫂◌̕b; à◌֮◌᫂◌̕b; a◌֮◌̀◌᫂◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING RIGHT PARENTHESIS ABOVE RIGHT, LATIN SMALL LETTER B
+0061 1AC2 0315 0300 05AE 0062;0061 05AE 1AC2 0300 0315 0062;0061 05AE 1AC2 
0300 0315 0062;0061 05AE 1AC2 0300 0315 0062;0061 05AE 1AC2 0300 0315 0062; # 
(a◌᫂◌̕◌̀◌֮b; a◌֮◌᫂◌̀◌̕b; a◌֮◌᫂◌̀◌̕b; a◌֮◌᫂◌̀◌̕b; a◌֮◌᫂◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT PARENTHESIS ABOVE RIGHT, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1AC3 0062;0061 1DFA 0316 1AC3 059A 0062;0061 1DFA 0316 
1AC3 059A 0062;0061 1DFA 0316 1AC3 059A 0062;0061 1DFA 0316 1AC3 059A 0062; # 
(a◌֚◌̖◌᷺◌᫃b; a◌᷺◌̖◌᫃◌֚b; a◌᷺◌̖◌᫃◌֚b; a◌᷺◌̖◌᫃◌֚b; a◌᷺◌̖◌᫃◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LEFT PARENTHESIS BELOW LEFT, LATIN SMALL LETTER B
+0061 1AC3 059A 0316 1DFA 0062;0061 1DFA 1AC3 0316 059A 0062;0061 1DFA 1AC3 
0316 059A 0062;0061 1DFA 1AC3 0316 059A 0062;0061 1DFA 1AC3 0316 059A 0062; # 
(a◌᫃◌֚◌̖◌᷺b; a◌᷺◌᫃◌̖◌֚b; a◌᷺◌᫃◌̖◌֚b; a◌᷺◌᫃◌̖◌֚b; a◌᷺◌᫃◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT PARENTHESIS BELOW LEFT, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1AC4 0062;0061 1DFA 0316 1AC4 059A 0062;0061 1DFA 0316 
1AC4 059A 0062;0061 1DFA 0316 1AC4 059A 0062;0061 1DFA 0316 1AC4 059A 0062; # 
(a◌֚◌̖◌᷺◌᫄b; a◌᷺◌̖◌᫄◌֚b; a◌᷺◌̖◌᫄◌֚b; a◌᷺◌̖◌᫄◌֚b; a◌᷺◌̖◌᫄◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING RIGHT PARENTHESIS BELOW RIGHT, LATIN SMALL LETTER B
+0061 1AC4 059A 0316 1DFA 0062;0061 1DFA 1AC4 0316 059A 0062;0061 1DFA 1AC4 
0316 059A 0062;0061 1DFA 1AC4 0316 059A 0062;0061 1DFA 1AC4 0316 059A 0062; # 
(a◌᫄◌֚◌̖◌᷺b; a◌᷺◌᫄◌̖◌֚b; a◌᷺◌᫄◌̖◌֚b; a◌᷺◌᫄◌̖◌֚b; a◌᷺◌᫄◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT PARENTHESIS BELOW RIGHT, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1AC5 0062;00E0 05AE 1AC5 0315 0062;0061 05AE 0300 1AC5 
0315 0062;00E0 05AE 1AC5 0315 0062;0061 05AE 0300 1AC5 0315 0062; # 
(a◌̕◌̀◌֮◌᫅b; à◌֮◌᫅◌̕b; a◌֮◌̀◌᫅◌̕b; à◌֮◌᫅◌̕b; a◌֮◌̀◌᫅◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING SQUARE BRACKETS ABOVE, LATIN SMALL LETTER B
+0061 1AC5 0315 0300 05AE 0062;0061 05AE 1AC5 0300 0315 0062;0061 05AE 1AC5 
0300 0315 0062;0061 05AE 1AC5 0300 0315 0062;0061 05AE 1AC5 0300 0315 0062; # 
(a◌᫅◌̕◌̀◌֮b; a◌֮◌᫅◌̀◌̕b; a◌֮◌᫅◌̀◌̕b; a◌֮◌᫅◌̀◌̕b; a◌֮◌᫅◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING SQUARE BRACKETS ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1AC6 0062;00E0 05AE 1AC6 0315 0062;0061 05AE 0300 1AC6 
0315 0062;00E0 05AE 1AC6 0315 0062;0061 05AE 0300 1AC6 0315 0062; # 
(a◌̕◌̀◌֮◌᫆b; à◌֮◌᫆◌̕b; a◌֮◌̀◌᫆◌̕b; à◌֮◌᫆◌̕b; a◌֮◌̀◌᫆◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING NUMBER SIGN ABOVE, LATIN SMALL LETTER B
+0061 1AC6 0315 0300 05AE 0062;0061 05AE 1AC6 0300 0315 0062;0061 05AE 1AC6 
0300 0315 0062;0061 05AE 1AC6 0300 0315 0062;0061 05AE 1AC6 0300 0315 0062; # 
(a◌᫆◌̕◌̀◌֮b; a◌֮◌᫆◌̀◌̕b; a◌֮◌᫆◌̀◌̕b; a◌֮◌᫆◌̀◌̕b; a◌֮◌᫆◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING NUMBER SIGN ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1AC7 0062;00E0 05AE 1AC7 0315 0062;0061 05AE 0300 1AC7 
0315 0062;00E0 05AE 1AC7 0315 0062;0061 05AE 0300 1AC7 0315 0062; # 
(a◌̕◌̀◌֮◌᫇b; à◌֮◌᫇◌̕b; a◌֮◌̀◌᫇◌̕b; à◌֮◌᫇◌̕b; a◌֮◌̀◌᫇◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING INVERTED DOUBLE ARCH ABOVE, LATIN SMALL LETTER B
+0061 1AC7 0315 0300 05AE 0062;0061 05AE 1AC7 0300 0315 0062;0061 05AE 1AC7 
0300 0315 0062;0061 05AE 1AC7 0300 0315 0062;0061 05AE 1AC7 0300 0315 0062; # 
(a◌᫇◌̕◌̀◌֮b; a◌֮◌᫇◌̀◌̕b; a◌֮◌᫇◌̀◌̕b; a◌֮◌᫇◌̀◌̕b; a◌֮◌᫇◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING INVERTED DOUBLE ARCH ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1AC8 0062;00E0 05AE 1AC8 0315 0062;0061 05AE 0300 1AC8 
0315 0062;00E0 05AE 1AC8 0315 0062;0061 05AE 0300 1AC8 0315 0062; # 
(a◌̕◌̀◌֮◌᫈b; à◌֮◌᫈◌̕b; a◌֮◌̀◌᫈◌̕b; à◌֮◌᫈◌̕b; a◌֮◌̀◌᫈◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING PLUS SIGN ABOVE, LATIN SMALL LETTER B
+0061 1AC8 0315 0300 05AE 0062;0061 05AE 1AC8 0300 0315 0062;0061 05AE 1AC8 
0300 0315 0062;0061 05AE 1AC8 0300 0315 0062;0061 05AE 1AC8 0300 0315 0062; # 
(a◌᫈◌̕◌̀◌֮b; a◌֮◌᫈◌̀◌̕b; a◌֮◌᫈◌̀◌̕b; a◌֮◌᫈◌̀◌̕b; a◌֮◌᫈◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING PLUS SIGN ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1AC9 0062;00E0 05AE 1AC9 0315 0062;0061 05AE 0300 1AC9 
0315 0062;00E0 05AE 1AC9 0315 0062;0061 05AE 0300 1AC9 0315 0062; # 
(a◌̕◌̀◌֮◌᫉b; à◌֮◌᫉◌̕b; a◌֮◌̀◌᫉◌̕b; à◌֮◌᫉◌̕b; a◌֮◌̀◌᫉◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING DOUBLE PLUS SIGN ABOVE, LATIN SMALL LETTER B
+0061 1AC9 0315 0300 05AE 0062;0061 05AE 1AC9 0300 0315 0062;0061 05AE 1AC9 
0300 0315 0062;0061 05AE 1AC9 0300 0315 0062;0061 05AE 1AC9 0300 0315 0062; # 
(a◌᫉◌̕◌̀◌֮b; a◌֮◌᫉◌̀◌̕b; a◌֮◌᫉◌̀◌̕b; a◌֮◌᫉◌̀◌̕b; a◌֮◌᫉◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE PLUS SIGN ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1ACA 0062;0061 1DFA 0316 1ACA 059A 0062;0061 1DFA 0316 
1ACA 059A 0062;0061 1DFA 0316 1ACA 059A 0062;0061 1DFA 0316 1ACA 059A 0062; # 
(a◌֚◌̖◌᷺◌᫊b; a◌᷺◌̖◌᫊◌֚b; a◌᷺◌̖◌᫊◌֚b; a◌᷺◌̖◌᫊◌֚b; a◌᷺◌̖◌᫊◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING DOUBLE PLUS SIGN BELOW, LATIN SMALL LETTER B
+0061 1ACA 059A 0316 1DFA 0062;0061 1DFA 1ACA 0316 059A 0062;0061 1DFA 1ACA 
0316 059A 0062;0061 1DFA 1ACA 0316 059A 0062;0061 1DFA 1ACA 0316 059A 0062; # 
(a◌᫊◌֚◌̖◌᷺b; a◌᷺◌᫊◌̖◌֚b; a◌᷺◌᫊◌̖◌֚b; a◌᷺◌᫊◌̖◌֚b; a◌᷺◌᫊◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE PLUS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1ACB 0062;00E0 05AE 1ACB 0315 0062;0061 05AE 0300 1ACB 
0315 0062;00E0 05AE 1ACB 0315 0062;0061 05AE 0300 1ACB 0315 0062; # 
(a◌̕◌̀◌֮◌᫋b; à◌֮◌᫋◌̕b; a◌֮◌̀◌᫋◌̕b; à◌֮◌᫋◌̕b; a◌֮◌̀◌᫋◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING TRIPLE ACUTE ACCENT, LATIN SMALL LETTER B
+0061 1ACB 0315 0300 05AE 0062;0061 05AE 1ACB 0300 0315 0062;0061 05AE 1ACB 
0300 0315 0062;0061 05AE 1ACB 0300 0315 0062;0061 05AE 1ACB 0300 0315 0062; # 
(a◌᫋◌̕◌̀◌֮b; a◌֮◌᫋◌̀◌̕b; a◌֮◌᫋◌̀◌̕b; a◌֮◌᫋◌̀◌̕b; a◌֮◌᫋◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING TRIPLE ACUTE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1ACC 0062;00E0 05AE 1ACC 0315 0062;0061 05AE 0300 1ACC 
0315 0062;00E0 05AE 1ACC 0315 0062;0061 05AE 0300 1ACC 0315 0062; # 
(a◌̕◌̀◌֮◌ᫌb; à◌֮◌ᫌ◌̕b; a◌֮◌̀◌ᫌ◌̕b; à◌֮◌ᫌ◌̕b; a◌֮◌̀◌ᫌ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING LATIN SMALL LETTER INSULAR G, LATIN SMALL LETTER B
+0061 1ACC 0315 0300 05AE 0062;0061 05AE 1ACC 0300 0315 0062;0061 05AE 1ACC 
0300 0315 0062;0061 05AE 1ACC 0300 0315 0062;0061 05AE 1ACC 0300 0315 0062; # 
(a◌ᫌ◌̕◌̀◌֮b; a◌֮◌ᫌ◌̀◌̕b; a◌֮◌ᫌ◌̀◌̕b; a◌֮◌ᫌ◌̀◌̕b; a◌֮◌ᫌ◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING LATIN SMALL LETTER INSULAR G, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1ACD 0062;00E0 05AE 1ACD 0315 0062;0061 05AE 0300 1ACD 
0315 0062;00E0 05AE 1ACD 0315 0062;0061 05AE 0300 1ACD 0315 0062; # 
(a◌̕◌̀◌֮◌ᫍb; à◌֮◌ᫍ◌̕b; a◌֮◌̀◌ᫍ◌̕b; à◌֮◌ᫍ◌̕b; a◌֮◌̀◌ᫍ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING LATIN SMALL LETTER INSULAR R, LATIN SMALL LETTER B
+0061 1ACD 0315 0300 05AE 0062;0061 05AE 1ACD 0300 0315 0062;0061 05AE 1ACD 
0300 0315 0062;0061 05AE 1ACD 0300 0315 0062;0061 05AE 1ACD 0300 0315 0062; # 
(a◌ᫍ◌̕◌̀◌֮b; a◌֮◌ᫍ◌̀◌̕b; a◌֮◌ᫍ◌̀◌̕b; a◌֮◌ᫍ◌̀◌̕b; a◌֮◌ᫍ◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING LATIN SMALL LETTER INSULAR R, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1ACE 0062;00E0 05AE 1ACE 0315 0062;0061 05AE 0300 1ACE 
0315 0062;00E0 05AE 1ACE 0315 0062;0061 05AE 0300 1ACE 0315 0062; # 
(a◌̕◌̀◌֮◌ᫎb; à◌֮◌ᫎ◌̕b; a◌֮◌̀◌ᫎ◌̕b; à◌֮◌ᫎ◌̕b; a◌֮◌̀◌ᫎ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING LATIN SMALL LETTER INSULAR T, LATIN SMALL LETTER B
+0061 1ACE 0315 0300 05AE 0062;0061 05AE 1ACE 0300 0315 0062;0061 05AE 1ACE 
0300 0315 0062;0061 05AE 1ACE 0300 0315 0062;0061 05AE 1ACE 0300 0315 0062; # 
(a◌ᫎ◌̕◌̀◌֮b; a◌֮◌ᫎ◌̀◌̕b; a◌֮◌ᫎ◌̀◌̕b; a◌֮◌ᫎ◌̀◌̕b; a◌֮◌ᫎ◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING LATIN SMALL LETTER INSULAR T, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 3099 093C 16FF0 1B34 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 
1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062; # 
(a◌゙◌𖿰़◌᬴b; a𖿰◌़◌᬴◌゙b; a𖿰◌़◌᬴◌゙b; a𖿰◌़◌᬴◌゙b; a𖿰◌़◌᬴◌゙b; ) LATIN SMALL LETTER A, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, 
VIETNAMESE ALTERNATE READING MARK CA, BALINESE SIGN REREKAN, LATIN SMALL LETTER 
B
 0061 1B34 3099 093C 16FF0 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 
093C 3099 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 093C 3099 0062; # 
(a◌᬴◌゙◌𖿰़b; a𖿰◌᬴◌़◌゙b; a𖿰◌᬴◌़◌゙b; a𖿰◌᬴◌़◌゙b; a𖿰◌᬴◌़◌゙b; ) LATIN SMALL LETTER A, 
BALINESE SIGN REREKAN, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, 
DEVANAGARI SIGN NUKTA, VIETNAMESE ALTERNATE READING MARK CA, LATIN SMALL LETTER 
B
 0061 05B0 094D 3099 1B44 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 
1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062; # 
(a◌ְ◌्◌゙᭄b; a◌゙◌्᭄◌ְb; a◌゙◌्᭄◌ְb; a◌゙◌्᭄◌ְb; a◌゙◌्᭄◌ְb; ) LATIN SMALL LETTER A, 
HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED 
SOUND MARK, BALINESE ADEG ADEG, LATIN SMALL LETTER B
 0061 1B44 05B0 094D 3099 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 
094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062; # 
(a᭄◌ְ◌्◌゙b; a◌゙᭄◌्◌ְb; a◌゙᭄◌्◌ְb; a◌゙᭄◌्◌ְb; a◌゙᭄◌्◌ְb; ) LATIN SMALL LETTER A, 
BALINESE ADEG ADEG, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1B6B 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 
0315 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062; # 
(a◌̕◌̀◌֮◌᭫b; à◌֮◌᭫◌̕b; a◌֮◌̀◌᭫◌̕b; à◌֮◌᭫◌̕b; a◌֮◌̀◌᭫◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
BALINESE MUSICAL SYMBOL COMBINING TEGEH, LATIN SMALL LETTER B
 0061 1B6B 0315 0300 05AE 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 
0300 0315 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062; # 
(a◌᭫◌̕◌̀◌֮b; a◌֮◌᭫◌̀◌̕b; a◌֮◌᭫◌̀◌̕b; a◌֮◌᭫◌̀◌̕b; a◌֮◌᭫◌̀◌̕b; ) LATIN SMALL 
LETTER A, BALINESE MUSICAL SYMBOL COMBINING TEGEH, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1B6C 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 
1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062; # 
(a◌֚◌̖◌〪◌᭬b; a◌〪◌̖◌᭬◌֚b; a◌〪◌̖◌᭬◌֚b; a◌〪◌̖◌᭬◌֚b; a◌〪◌̖◌᭬◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, BALINESE MUSICAL SYMBOL COMBINING ENDEP, LATIN SMALL LETTER B
-0061 1B6C 059A 0316 302A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 
0316 059A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062; # 
(a◌᭬◌֚◌̖◌〪b; a◌〪◌᭬◌̖◌֚b; a◌〪◌᭬◌̖◌֚b; a◌〪◌᭬◌̖◌֚b; a◌〪◌᭬◌̖◌֚b; ) LATIN SMALL 
LETTER A, BALINESE MUSICAL SYMBOL COMBINING ENDEP, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1B6C 0062;0061 1DFA 0316 1B6C 059A 0062;0061 1DFA 0316 
1B6C 059A 0062;0061 1DFA 0316 1B6C 059A 0062;0061 1DFA 0316 1B6C 059A 0062; # 
(a◌֚◌̖◌᷺◌᭬b; a◌᷺◌̖◌᭬◌֚b; a◌᷺◌̖◌᭬◌֚b; a◌᷺◌̖◌᭬◌֚b; a◌᷺◌̖◌᭬◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, BALINESE MUSICAL SYMBOL COMBINING ENDEP, LATIN SMALL LETTER B
+0061 1B6C 059A 0316 1DFA 0062;0061 1DFA 1B6C 0316 059A 0062;0061 1DFA 1B6C 
0316 059A 0062;0061 1DFA 1B6C 0316 059A 0062;0061 1DFA 1B6C 0316 059A 0062; # 
(a◌᭬◌֚◌̖◌᷺b; a◌᷺◌᭬◌̖◌֚b; a◌᷺◌᭬◌̖◌֚b; a◌᷺◌᭬◌̖◌֚b; a◌᷺◌᭬◌̖◌֚b; ) LATIN SMALL 
LETTER A, BALINESE MUSICAL SYMBOL COMBINING ENDEP, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1B6D 0062;00E0 05AE 1B6D 0315 0062;0061 05AE 0300 1B6D 
0315 0062;00E0 05AE 1B6D 0315 0062;0061 05AE 0300 1B6D 0315 0062; # 
(a◌̕◌̀◌֮◌᭭b; à◌֮◌᭭◌̕b; a◌֮◌̀◌᭭◌̕b; à◌֮◌᭭◌̕b; a◌֮◌̀◌᭭◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
BALINESE MUSICAL SYMBOL COMBINING KEMPUL, LATIN SMALL LETTER B
 0061 1B6D 0315 0300 05AE 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 
0300 0315 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062; # 
(a◌᭭◌̕◌̀◌֮b; a◌֮◌᭭◌̀◌̕b; a◌֮◌᭭◌̀◌̕b; a◌֮◌᭭◌̀◌̕b; a◌֮◌᭭◌̀◌̕b; ) LATIN SMALL 
LETTER A, BALINESE MUSICAL SYMBOL COMBINING KEMPUL, COMBINING COMMA ABOVE 
RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1B6E 0062;00E0 05AE 1B6E 0315 0062;0061 05AE 0300 1B6E 
0315 0062;00E0 05AE 1B6E 0315 0062;0061 05AE 0300 1B6E 0315 0062; # 
(a◌̕◌̀◌֮◌᭮b; à◌֮◌᭮◌̕b; a◌֮◌̀◌᭮◌̕b; à◌֮◌᭮◌̕b; a◌֮◌̀◌᭮◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
BALINESE MUSICAL SYMBOL COMBINING KEMPLI, LATIN SMALL LETTER B
@@ -17875,28 +18000,28 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 1CD2 0315 0300 05AE 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 
0300 0315 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 0300 0315 0062; # 
(a◌᳒◌̕◌̀◌֮b; a◌֮◌᳒◌̀◌̕b; a◌֮◌᳒◌̀◌̕b; a◌֮◌᳒◌̀◌̕b; a◌֮◌᳒◌̀◌̕b; ) LATIN SMALL 
LETTER A, VEDIC TONE PRENKHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 16FF0 0334 1CD4 0062;0061 0334 1CD4 16FF0 0062;0061 0334 1CD4 16FF0 
0062;0061 0334 1CD4 16FF0 0062;0061 0334 1CD4 16FF0 0062; # (a𖿰◌̴◌᳔b; a◌̴◌᳔𖿰b; 
a◌̴◌᳔𖿰b; a◌̴◌᳔𖿰b; a◌̴◌᳔𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE ALTERNATE READING 
MARK CA, COMBINING TILDE OVERLAY, VEDIC SIGN YAJURVEDIC MIDLINE SVARITA, LATIN 
SMALL LETTER B
 0061 1CD4 16FF0 0334 0062;0061 1CD4 0334 16FF0 0062;0061 1CD4 0334 16FF0 
0062;0061 1CD4 0334 16FF0 0062;0061 1CD4 0334 16FF0 0062; # (a◌᳔𖿰◌̴b; a◌᳔◌̴𖿰b; 
a◌᳔◌̴𖿰b; a◌᳔◌̴𖿰b; a◌᳔◌̴𖿰b; ) LATIN SMALL LETTER A, VEDIC SIGN YAJURVEDIC 
MIDLINE SVARITA, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, 
LATIN SMALL LETTER B
-0061 059A 0316 302A 1CD5 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 
1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062; # 
(a◌֚◌̖◌〪◌᳕b; a◌〪◌̖◌᳕◌֚b; a◌〪◌̖◌᳕◌֚b; a◌〪◌̖◌᳕◌֚b; a◌〪◌̖◌᳕◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA, LATIN SMALL 
LETTER B
-0061 1CD5 059A 0316 302A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 
0316 059A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 0316 059A 0062; # 
(a◌᳕◌֚◌̖◌〪b; a◌〪◌᳕◌̖◌֚b; a◌〪◌᳕◌̖◌֚b; a◌〪◌᳕◌̖◌֚b; a◌〪◌᳕◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL 
LETTER B
-0061 059A 0316 302A 1CD6 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 
1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062; # 
(a◌֚◌̖◌〪◌᳖b; a◌〪◌̖◌᳖◌֚b; a◌〪◌̖◌᳖◌֚b; a◌〪◌̖◌᳖◌֚b; a◌〪◌̖◌᳖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA, LATIN SMALL LETTER B
-0061 1CD6 059A 0316 302A 0062;0061 302A 1CD6 0316 059A 0062;0061 302A 1CD6 
0316 059A 0062;0061 302A 1CD6 0316 059A 0062;0061 302A 1CD6 0316 059A 0062; # 
(a◌᳖◌֚◌̖◌〪b; a◌〪◌᳖◌̖◌֚b; a◌〪◌᳖◌̖◌֚b; a◌〪◌᳖◌̖◌֚b; a◌〪◌᳖◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1CD7 0062;0061 302A 0316 1CD7 059A 0062;0061 302A 0316 
1CD7 059A 0062;0061 302A 0316 1CD7 059A 0062;0061 302A 0316 1CD7 059A 0062; # 
(a◌֚◌̖◌〪◌᳗b; a◌〪◌̖◌᳗◌֚b; a◌〪◌̖◌᳗◌֚b; a◌〪◌̖◌᳗◌֚b; a◌〪◌̖◌᳗◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA, LATIN SMALL 
LETTER B
-0061 1CD7 059A 0316 302A 0062;0061 302A 1CD7 0316 059A 0062;0061 302A 1CD7 
0316 059A 0062;0061 302A 1CD7 0316 059A 0062;0061 302A 1CD7 0316 059A 0062; # 
(a◌᳗◌֚◌̖◌〪b; a◌〪◌᳗◌̖◌֚b; a◌〪◌᳗◌̖◌֚b; a◌〪◌᳗◌̖◌֚b; a◌〪◌᳗◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL 
LETTER B
-0061 059A 0316 302A 1CD8 0062;0061 302A 0316 1CD8 059A 0062;0061 302A 0316 
1CD8 059A 0062;0061 302A 0316 1CD8 059A 0062;0061 302A 0316 1CD8 059A 0062; # 
(a◌֚◌̖◌〪◌᳘b; a◌〪◌̖◌᳘◌֚b; a◌〪◌̖◌᳘◌֚b; a◌〪◌̖◌᳘◌֚b; a◌〪◌̖◌᳘◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, VEDIC TONE CANDRA BELOW, LATIN SMALL LETTER B
-0061 1CD8 059A 0316 302A 0062;0061 302A 1CD8 0316 059A 0062;0061 302A 1CD8 
0316 059A 0062;0061 302A 1CD8 0316 059A 0062;0061 302A 1CD8 0316 059A 0062; # 
(a◌᳘◌֚◌̖◌〪b; a◌〪◌᳘◌̖◌֚b; a◌〪◌᳘◌̖◌֚b; a◌〪◌᳘◌̖◌֚b; a◌〪◌᳘◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE CANDRA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1CD9 0062;0061 302A 0316 1CD9 059A 0062;0061 302A 0316 
1CD9 059A 0062;0061 302A 0316 1CD9 059A 0062;0061 302A 0316 1CD9 059A 0062; # 
(a◌֚◌̖◌〪◌᳙b; a◌〪◌̖◌᳙◌֚b; a◌〪◌̖◌᳙◌֚b; a◌〪◌̖◌᳙◌֚b; a◌〪◌̖◌᳙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER, LATIN 
SMALL LETTER B
-0061 1CD9 059A 0316 302A 0062;0061 302A 1CD9 0316 059A 0062;0061 302A 1CD9 
0316 059A 0062;0061 302A 1CD9 0316 059A 0062;0061 302A 1CD9 0316 059A 0062; # 
(a◌᳙◌֚◌̖◌〪b; a◌〪◌᳙◌̖◌֚b; a◌〪◌᳙◌̖◌֚b; a◌〪◌᳙◌̖◌֚b; a◌〪◌᳙◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER, HEBREW 
ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN 
SMALL LETTER B
+0061 059A 0316 1DFA 1CD5 0062;0061 1DFA 0316 1CD5 059A 0062;0061 1DFA 0316 
1CD5 059A 0062;0061 1DFA 0316 1CD5 059A 0062;0061 1DFA 0316 1CD5 059A 0062; # 
(a◌֚◌̖◌᷺◌᳕b; a◌᷺◌̖◌᳕◌֚b; a◌᷺◌̖◌᳕◌֚b; a◌᷺◌̖◌᳕◌֚b; a◌᷺◌̖◌᳕◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA, LATIN SMALL 
LETTER B
+0061 1CD5 059A 0316 1DFA 0062;0061 1DFA 1CD5 0316 059A 0062;0061 1DFA 1CD5 
0316 059A 0062;0061 1DFA 1CD5 0316 059A 0062;0061 1DFA 1CD5 0316 059A 0062; # 
(a◌᳕◌֚◌̖◌᷺b; a◌᷺◌᳕◌̖◌֚b; a◌᷺◌᳕◌̖◌֚b; a◌᷺◌᳕◌̖◌֚b; a◌᷺◌᳕◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL 
LETTER B
+0061 059A 0316 1DFA 1CD6 0062;0061 1DFA 0316 1CD6 059A 0062;0061 1DFA 0316 
1CD6 059A 0062;0061 1DFA 0316 1CD6 059A 0062;0061 1DFA 0316 1CD6 059A 0062; # 
(a◌֚◌̖◌᷺◌᳖b; a◌᷺◌̖◌᳖◌֚b; a◌᷺◌̖◌᳖◌֚b; a◌᷺◌̖◌᳖◌֚b; a◌᷺◌̖◌᳖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA, LATIN SMALL LETTER B
+0061 1CD6 059A 0316 1DFA 0062;0061 1DFA 1CD6 0316 059A 0062;0061 1DFA 1CD6 
0316 059A 0062;0061 1DFA 1CD6 0316 059A 0062;0061 1DFA 1CD6 0316 059A 0062; # 
(a◌᳖◌֚◌̖◌᷺b; a◌᷺◌᳖◌̖◌֚b; a◌᷺◌᳖◌̖◌֚b; a◌᷺◌᳖◌̖◌֚b; a◌᷺◌᳖◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1CD7 0062;0061 1DFA 0316 1CD7 059A 0062;0061 1DFA 0316 
1CD7 059A 0062;0061 1DFA 0316 1CD7 059A 0062;0061 1DFA 0316 1CD7 059A 0062; # 
(a◌֚◌̖◌᷺◌᳗b; a◌᷺◌̖◌᳗◌֚b; a◌᷺◌̖◌᳗◌֚b; a◌᷺◌̖◌᳗◌֚b; a◌᷺◌̖◌᳗◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA, LATIN SMALL 
LETTER B
+0061 1CD7 059A 0316 1DFA 0062;0061 1DFA 1CD7 0316 059A 0062;0061 1DFA 1CD7 
0316 059A 0062;0061 1DFA 1CD7 0316 059A 0062;0061 1DFA 1CD7 0316 059A 0062; # 
(a◌᳗◌֚◌̖◌᷺b; a◌᷺◌᳗◌̖◌֚b; a◌᷺◌᳗◌̖◌֚b; a◌᷺◌᳗◌̖◌֚b; a◌᷺◌᳗◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL 
LETTER B
+0061 059A 0316 1DFA 1CD8 0062;0061 1DFA 0316 1CD8 059A 0062;0061 1DFA 0316 
1CD8 059A 0062;0061 1DFA 0316 1CD8 059A 0062;0061 1DFA 0316 1CD8 059A 0062; # 
(a◌֚◌̖◌᷺◌᳘b; a◌᷺◌̖◌᳘◌֚b; a◌᷺◌̖◌᳘◌֚b; a◌᷺◌̖◌᳘◌֚b; a◌᷺◌̖◌᳘◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, VEDIC TONE CANDRA BELOW, LATIN SMALL LETTER B
+0061 1CD8 059A 0316 1DFA 0062;0061 1DFA 1CD8 0316 059A 0062;0061 1DFA 1CD8 
0316 059A 0062;0061 1DFA 1CD8 0316 059A 0062;0061 1DFA 1CD8 0316 059A 0062; # 
(a◌᳘◌֚◌̖◌᷺b; a◌᷺◌᳘◌̖◌֚b; a◌᷺◌᳘◌̖◌֚b; a◌᷺◌᳘◌̖◌֚b; a◌᷺◌᳘◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE CANDRA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1CD9 0062;0061 1DFA 0316 1CD9 059A 0062;0061 1DFA 0316 
1CD9 059A 0062;0061 1DFA 0316 1CD9 059A 0062;0061 1DFA 0316 1CD9 059A 0062; # 
(a◌֚◌̖◌᷺◌᳙b; a◌᷺◌̖◌᳙◌֚b; a◌᷺◌̖◌᳙◌֚b; a◌᷺◌̖◌᳙◌֚b; a◌᷺◌̖◌᳙◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER, LATIN 
SMALL LETTER B
+0061 1CD9 059A 0316 1DFA 0062;0061 1DFA 1CD9 0316 059A 0062;0061 1DFA 1CD9 
0316 059A 0062;0061 1DFA 1CD9 0316 059A 0062;0061 1DFA 1CD9 0316 059A 0062; # 
(a◌᳙◌֚◌̖◌᷺b; a◌᷺◌᳙◌̖◌֚b; a◌᷺◌᳙◌̖◌֚b; a◌᷺◌᳙◌̖◌֚b; a◌᷺◌᳙◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER, HEBREW 
ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN 
SMALL LETTER B
 0061 0315 0300 05AE 1CDA 0062;00E0 05AE 1CDA 0315 0062;0061 05AE 0300 1CDA 
0315 0062;00E0 05AE 1CDA 0315 0062;0061 05AE 0300 1CDA 0315 0062; # 
(a◌̕◌̀◌֮◌᳚b; à◌֮◌᳚◌̕b; a◌֮◌̀◌᳚◌̕b; à◌֮◌᳚◌̕b; a◌֮◌̀◌᳚◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
VEDIC TONE DOUBLE SVARITA, LATIN SMALL LETTER B
 0061 1CDA 0315 0300 05AE 0062;0061 05AE 1CDA 0300 0315 0062;0061 05AE 1CDA 
0300 0315 0062;0061 05AE 1CDA 0300 0315 0062;0061 05AE 1CDA 0300 0315 0062; # 
(a◌᳚◌̕◌̀◌֮b; a◌֮◌᳚◌̀◌̕b; a◌֮◌᳚◌̀◌̕b; a◌֮◌᳚◌̀◌̕b; a◌֮◌᳚◌̀◌̕b; ) LATIN SMALL 
LETTER A, VEDIC TONE DOUBLE SVARITA, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1CDB 0062;00E0 05AE 1CDB 0315 0062;0061 05AE 0300 1CDB 
0315 0062;00E0 05AE 1CDB 0315 0062;0061 05AE 0300 1CDB 0315 0062; # 
(a◌̕◌̀◌֮◌᳛b; à◌֮◌᳛◌̕b; a◌֮◌̀◌᳛◌̕b; à◌֮◌᳛◌̕b; a◌֮◌̀◌᳛◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
VEDIC TONE TRIPLE SVARITA, LATIN SMALL LETTER B
 0061 1CDB 0315 0300 05AE 0062;0061 05AE 1CDB 0300 0315 0062;0061 05AE 1CDB 
0300 0315 0062;0061 05AE 1CDB 0300 0315 0062;0061 05AE 1CDB 0300 0315 0062; # 
(a◌᳛◌̕◌̀◌֮b; a◌֮◌᳛◌̀◌̕b; a◌֮◌᳛◌̀◌̕b; a◌֮◌᳛◌̀◌̕b; a◌֮◌᳛◌̀◌̕b; ) LATIN SMALL 
LETTER A, VEDIC TONE TRIPLE SVARITA, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1CDC 0062;0061 302A 0316 1CDC 059A 0062;0061 302A 0316 
1CDC 059A 0062;0061 302A 0316 1CDC 059A 0062;0061 302A 0316 1CDC 059A 0062; # 
(a◌֚◌̖◌〪◌᳜b; a◌〪◌̖◌᳜◌֚b; a◌〪◌̖◌᳜◌֚b; a◌〪◌̖◌᳜◌֚b; a◌〪◌̖◌᳜◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, VEDIC TONE KATHAKA ANUDATTA, LATIN SMALL LETTER B
-0061 1CDC 059A 0316 302A 0062;0061 302A 1CDC 0316 059A 0062;0061 302A 1CDC 
0316 059A 0062;0061 302A 1CDC 0316 059A 0062;0061 302A 1CDC 0316 059A 0062; # 
(a◌᳜◌֚◌̖◌〪b; a◌〪◌᳜◌̖◌֚b; a◌〪◌᳜◌̖◌֚b; a◌〪◌᳜◌̖◌֚b; a◌〪◌᳜◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE KATHAKA ANUDATTA, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1CDD 0062;0061 302A 0316 1CDD 059A 0062;0061 302A 0316 
1CDD 059A 0062;0061 302A 0316 1CDD 059A 0062;0061 302A 0316 1CDD 059A 0062; # 
(a◌֚◌̖◌〪◌᳝b; a◌〪◌̖◌᳝◌֚b; a◌〪◌̖◌᳝◌֚b; a◌〪◌̖◌᳝◌֚b; a◌〪◌̖◌᳝◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, VEDIC TONE DOT BELOW, LATIN SMALL LETTER B
-0061 1CDD 059A 0316 302A 0062;0061 302A 1CDD 0316 059A 0062;0061 302A 1CDD 
0316 059A 0062;0061 302A 1CDD 0316 059A 0062;0061 302A 1CDD 0316 059A 0062; # 
(a◌᳝◌֚◌̖◌〪b; a◌〪◌᳝◌̖◌֚b; a◌〪◌᳝◌̖◌֚b; a◌〪◌᳝◌̖◌֚b; a◌〪◌᳝◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1CDE 0062;0061 302A 0316 1CDE 059A 0062;0061 302A 0316 
1CDE 059A 0062;0061 302A 0316 1CDE 059A 0062;0061 302A 0316 1CDE 059A 0062; # 
(a◌֚◌̖◌〪◌᳞b; a◌〪◌̖◌᳞◌֚b; a◌〪◌̖◌᳞◌֚b; a◌〪◌̖◌᳞◌֚b; a◌〪◌̖◌᳞◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, VEDIC TONE TWO DOTS BELOW, LATIN SMALL LETTER B
-0061 1CDE 059A 0316 302A 0062;0061 302A 1CDE 0316 059A 0062;0061 302A 1CDE 
0316 059A 0062;0061 302A 1CDE 0316 059A 0062;0061 302A 1CDE 0316 059A 0062; # 
(a◌᳞◌֚◌̖◌〪b; a◌〪◌᳞◌̖◌֚b; a◌〪◌᳞◌̖◌֚b; a◌〪◌᳞◌̖◌֚b; a◌〪◌᳞◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE TWO DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1CDF 0062;0061 302A 0316 1CDF 059A 0062;0061 302A 0316 
1CDF 059A 0062;0061 302A 0316 1CDF 059A 0062;0061 302A 0316 1CDF 059A 0062; # 
(a◌֚◌̖◌〪◌᳟b; a◌〪◌̖◌᳟◌֚b; a◌〪◌̖◌᳟◌֚b; a◌〪◌̖◌᳟◌֚b; a◌〪◌̖◌᳟◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, VEDIC TONE THREE DOTS BELOW, LATIN SMALL LETTER B
-0061 1CDF 059A 0316 302A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 
0316 059A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 0316 059A 0062; # 
(a◌᳟◌֚◌̖◌〪b; a◌〪◌᳟◌̖◌֚b; a◌〪◌᳟◌̖◌֚b; a◌〪◌᳟◌̖◌֚b; a◌〪◌᳟◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE THREE DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1CDC 0062;0061 1DFA 0316 1CDC 059A 0062;0061 1DFA 0316 
1CDC 059A 0062;0061 1DFA 0316 1CDC 059A 0062;0061 1DFA 0316 1CDC 059A 0062; # 
(a◌֚◌̖◌᷺◌᳜b; a◌᷺◌̖◌᳜◌֚b; a◌᷺◌̖◌᳜◌֚b; a◌᷺◌̖◌᳜◌֚b; a◌᷺◌̖◌᳜◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, VEDIC TONE KATHAKA ANUDATTA, LATIN SMALL LETTER B
+0061 1CDC 059A 0316 1DFA 0062;0061 1DFA 1CDC 0316 059A 0062;0061 1DFA 1CDC 
0316 059A 0062;0061 1DFA 1CDC 0316 059A 0062;0061 1DFA 1CDC 0316 059A 0062; # 
(a◌᳜◌֚◌̖◌᷺b; a◌᷺◌᳜◌̖◌֚b; a◌᷺◌᳜◌̖◌֚b; a◌᷺◌᳜◌̖◌֚b; a◌᷺◌᳜◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE KATHAKA ANUDATTA, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1CDD 0062;0061 1DFA 0316 1CDD 059A 0062;0061 1DFA 0316 
1CDD 059A 0062;0061 1DFA 0316 1CDD 059A 0062;0061 1DFA 0316 1CDD 059A 0062; # 
(a◌֚◌̖◌᷺◌᳝b; a◌᷺◌̖◌᳝◌֚b; a◌᷺◌̖◌᳝◌֚b; a◌᷺◌̖◌᳝◌֚b; a◌᷺◌̖◌᳝◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, VEDIC TONE DOT BELOW, LATIN SMALL LETTER B
+0061 1CDD 059A 0316 1DFA 0062;0061 1DFA 1CDD 0316 059A 0062;0061 1DFA 1CDD 
0316 059A 0062;0061 1DFA 1CDD 0316 059A 0062;0061 1DFA 1CDD 0316 059A 0062; # 
(a◌᳝◌֚◌̖◌᷺b; a◌᷺◌᳝◌̖◌֚b; a◌᷺◌᳝◌̖◌֚b; a◌᷺◌᳝◌̖◌֚b; a◌᷺◌᳝◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1CDE 0062;0061 1DFA 0316 1CDE 059A 0062;0061 1DFA 0316 
1CDE 059A 0062;0061 1DFA 0316 1CDE 059A 0062;0061 1DFA 0316 1CDE 059A 0062; # 
(a◌֚◌̖◌᷺◌᳞b; a◌᷺◌̖◌᳞◌֚b; a◌᷺◌̖◌᳞◌֚b; a◌᷺◌̖◌᳞◌֚b; a◌᷺◌̖◌᳞◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, VEDIC TONE TWO DOTS BELOW, LATIN SMALL LETTER B
+0061 1CDE 059A 0316 1DFA 0062;0061 1DFA 1CDE 0316 059A 0062;0061 1DFA 1CDE 
0316 059A 0062;0061 1DFA 1CDE 0316 059A 0062;0061 1DFA 1CDE 0316 059A 0062; # 
(a◌᳞◌֚◌̖◌᷺b; a◌᷺◌᳞◌̖◌֚b; a◌᷺◌᳞◌̖◌֚b; a◌᷺◌᳞◌̖◌֚b; a◌᷺◌᳞◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE TWO DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1CDF 0062;0061 1DFA 0316 1CDF 059A 0062;0061 1DFA 0316 
1CDF 059A 0062;0061 1DFA 0316 1CDF 059A 0062;0061 1DFA 0316 1CDF 059A 0062; # 
(a◌֚◌̖◌᷺◌᳟b; a◌᷺◌̖◌᳟◌֚b; a◌᷺◌̖◌᳟◌֚b; a◌᷺◌̖◌᳟◌֚b; a◌᷺◌̖◌᳟◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, VEDIC TONE THREE DOTS BELOW, LATIN SMALL LETTER B
+0061 1CDF 059A 0316 1DFA 0062;0061 1DFA 1CDF 0316 059A 0062;0061 1DFA 1CDF 
0316 059A 0062;0061 1DFA 1CDF 0316 059A 0062;0061 1DFA 1CDF 0316 059A 0062; # 
(a◌᳟◌֚◌̖◌᷺b; a◌᷺◌᳟◌̖◌֚b; a◌᷺◌᳟◌̖◌֚b; a◌᷺◌᳟◌̖◌֚b; a◌᷺◌᳟◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC TONE THREE DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1CE0 0062;00E0 05AE 1CE0 0315 0062;0061 05AE 0300 1CE0 
0315 0062;00E0 05AE 1CE0 0315 0062;0061 05AE 0300 1CE0 0315 0062; # 
(a◌̕◌̀◌֮◌᳠b; à◌֮◌᳠◌̕b; a◌֮◌̀◌᳠◌̕b; à◌֮◌᳠◌̕b; a◌֮◌̀◌᳠◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA, LATIN SMALL LETTER B
 0061 1CE0 0315 0300 05AE 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 
0300 0315 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 0300 0315 0062; # 
(a◌᳠◌̕◌̀◌֮b; a◌֮◌᳠◌̀◌̕b; a◌֮◌᳠◌̀◌̕b; a◌֮◌᳠◌̀◌̕b; a◌֮◌᳠◌̀◌̕b; ) LATIN SMALL 
LETTER A, VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA, COMBINING COMMA 
ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 16FF0 0334 1CE2 0062;0061 0334 1CE2 16FF0 0062;0061 0334 1CE2 16FF0 
0062;0061 0334 1CE2 16FF0 0062;0061 0334 1CE2 16FF0 0062; # (a𖿰◌̴◌᳢b; a◌̴◌᳢𖿰b; 
a◌̴◌᳢𖿰b; a◌̴◌᳢𖿰b; a◌̴◌᳢𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE ALTERNATE READING 
MARK CA, COMBINING TILDE OVERLAY, VEDIC SIGN VISARGA SVARITA, LATIN SMALL 
LETTER B
@@ -17913,8 +18038,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 1CE7 16FF0 0334 0062;0061 1CE7 0334 16FF0 0062;0061 1CE7 0334 16FF0 
0062;0061 1CE7 0334 16FF0 0062;0061 1CE7 0334 16FF0 0062; # (a◌᳧𖿰◌̴b; a◌᳧◌̴𖿰b; 
a◌᳧◌̴𖿰b; a◌᳧◌̴𖿰b; a◌᳧◌̴𖿰b; ) LATIN SMALL LETTER A, VEDIC SIGN VISARGA UDATTA 
WITH TAIL, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, LATIN 
SMALL LETTER B
 0061 16FF0 0334 1CE8 0062;0061 0334 1CE8 16FF0 0062;0061 0334 1CE8 16FF0 
0062;0061 0334 1CE8 16FF0 0062;0061 0334 1CE8 16FF0 0062; # (a𖿰◌̴◌᳨b; a◌̴◌᳨𖿰b; 
a◌̴◌᳨𖿰b; a◌̴◌᳨𖿰b; a◌̴◌᳨𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE ALTERNATE READING 
MARK CA, COMBINING TILDE OVERLAY, VEDIC SIGN VISARGA ANUDATTA WITH TAIL, LATIN 
SMALL LETTER B
 0061 1CE8 16FF0 0334 0062;0061 1CE8 0334 16FF0 0062;0061 1CE8 0334 16FF0 
0062;0061 1CE8 0334 16FF0 0062;0061 1CE8 0334 16FF0 0062; # (a◌᳨𖿰◌̴b; a◌᳨◌̴𖿰b; 
a◌᳨◌̴𖿰b; a◌᳨◌̴𖿰b; a◌᳨◌̴𖿰b; ) LATIN SMALL LETTER A, VEDIC SIGN VISARGA ANUDATTA 
WITH TAIL, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, LATIN 
SMALL LETTER B
-0061 059A 0316 302A 1CED 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 
1CED 059A 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 1CED 059A 0062; # 
(a◌֚◌̖◌〪◌᳭b; a◌〪◌̖◌᳭◌֚b; a◌〪◌̖◌᳭◌֚b; a◌〪◌̖◌᳭◌֚b; a◌〪◌̖◌᳭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, VEDIC SIGN TIRYAK, LATIN SMALL LETTER B
-0061 1CED 059A 0316 302A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 
0316 059A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 0316 059A 0062; # 
(a◌᳭◌֚◌̖◌〪b; a◌〪◌᳭◌̖◌֚b; a◌〪◌᳭◌̖◌֚b; a◌〪◌᳭◌̖◌֚b; a◌〪◌᳭◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC SIGN TIRYAK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1CED 0062;0061 1DFA 0316 1CED 059A 0062;0061 1DFA 0316 
1CED 059A 0062;0061 1DFA 0316 1CED 059A 0062;0061 1DFA 0316 1CED 059A 0062; # 
(a◌֚◌̖◌᷺◌᳭b; a◌᷺◌̖◌᳭◌֚b; a◌᷺◌̖◌᳭◌֚b; a◌᷺◌̖◌᳭◌֚b; a◌᷺◌̖◌᳭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, VEDIC SIGN TIRYAK, LATIN SMALL LETTER B
+0061 1CED 059A 0316 1DFA 0062;0061 1DFA 1CED 0316 059A 0062;0061 1DFA 1CED 
0316 059A 0062;0061 1DFA 1CED 0316 059A 0062;0061 1DFA 1CED 0316 059A 0062; # 
(a◌᳭◌֚◌̖◌᷺b; a◌᷺◌᳭◌̖◌֚b; a◌᷺◌᳭◌̖◌֚b; a◌᷺◌᳭◌̖◌֚b; a◌᷺◌᳭◌̖◌֚b; ) LATIN SMALL 
LETTER A, VEDIC SIGN TIRYAK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1CF4 0062;00E0 05AE 1CF4 0315 0062;0061 05AE 0300 1CF4 
0315 0062;00E0 05AE 1CF4 0315 0062;0061 05AE 0300 1CF4 0315 0062; # 
(a◌̕◌̀◌֮◌᳴b; à◌֮◌᳴◌̕b; a◌֮◌̀◌᳴◌̕b; à◌֮◌᳴◌̕b; a◌֮◌̀◌᳴◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
VEDIC TONE CANDRA ABOVE, LATIN SMALL LETTER B
 0061 1CF4 0315 0300 05AE 0062;0061 05AE 1CF4 0300 0315 0062;0061 05AE 1CF4 
0300 0315 0062;0061 05AE 1CF4 0300 0315 0062;0061 05AE 1CF4 0300 0315 0062; # 
(a◌᳴◌̕◌̀◌֮b; a◌֮◌᳴◌̀◌̕b; a◌֮◌᳴◌̀◌̕b; a◌֮◌᳴◌̀◌̕b; a◌֮◌᳴◌̀◌̕b; ) LATIN SMALL 
LETTER A, VEDIC TONE CANDRA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1CF8 0062;00E0 05AE 1CF8 0315 0062;0061 05AE 0300 1CF8 
0315 0062;00E0 05AE 1CF8 0315 0062;0061 05AE 0300 1CF8 0315 0062; # 
(a◌̕◌̀◌֮◌᳸b; à◌֮◌᳸◌̕b; a◌֮◌̀◌᳸◌̕b; à◌֮◌᳸◌̕b; a◌֮◌̀◌᳸◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
VEDIC TONE RING ABOVE, LATIN SMALL LETTER B
@@ -17925,8 +18050,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 1DC0 0315 0300 05AE 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 
0300 0315 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062; # 
(a◌᷀◌̕◌̀◌֮b; a◌֮◌᷀◌̀◌̕b; a◌֮◌᷀◌̀◌̕b; a◌֮◌᷀◌̀◌̕b; a◌֮◌᷀◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING DOTTED GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1DC1 0062;00E0 05AE 1DC1 0315 0062;0061 05AE 0300 1DC1 
0315 0062;00E0 05AE 1DC1 0315 0062;0061 05AE 0300 1DC1 0315 0062; # 
(a◌̕◌̀◌֮◌᷁b; à◌֮◌᷁◌̕b; a◌֮◌̀◌᷁◌̕b; à◌֮◌᷁◌̕b; a◌֮◌̀◌᷁◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING DOTTED ACUTE ACCENT, LATIN SMALL LETTER B
 0061 1DC1 0315 0300 05AE 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 
0300 0315 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062; # 
(a◌᷁◌̕◌̀◌֮b; a◌֮◌᷁◌̀◌̕b; a◌֮◌᷁◌̀◌̕b; a◌֮◌᷁◌̀◌̕b; a◌֮◌᷁◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING DOTTED ACUTE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1DC2 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 
1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062; # 
(a◌֚◌̖◌〪◌᷂b; a◌〪◌̖◌᷂◌֚b; a◌〪◌̖◌᷂◌֚b; a◌〪◌̖◌᷂◌֚b; a◌〪◌̖◌᷂◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING SNAKE BELOW, LATIN SMALL LETTER B
-0061 1DC2 059A 0316 302A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 
0316 059A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062; # 
(a◌᷂◌֚◌̖◌〪b; a◌〪◌᷂◌̖◌֚b; a◌〪◌᷂◌̖◌֚b; a◌〪◌᷂◌̖◌֚b; a◌〪◌᷂◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING SNAKE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1DC2 0062;0061 1DFA 0316 1DC2 059A 0062;0061 1DFA 0316 
1DC2 059A 0062;0061 1DFA 0316 1DC2 059A 0062;0061 1DFA 0316 1DC2 059A 0062; # 
(a◌֚◌̖◌᷺◌᷂b; a◌᷺◌̖◌᷂◌֚b; a◌᷺◌̖◌᷂◌֚b; a◌᷺◌̖◌᷂◌֚b; a◌᷺◌̖◌᷂◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING SNAKE BELOW, LATIN SMALL LETTER B
+0061 1DC2 059A 0316 1DFA 0062;0061 1DFA 1DC2 0316 059A 0062;0061 1DFA 1DC2 
0316 059A 0062;0061 1DFA 1DC2 0316 059A 0062;0061 1DFA 1DC2 0316 059A 0062; # 
(a◌᷂◌֚◌̖◌᷺b; a◌᷺◌᷂◌̖◌֚b; a◌᷺◌᷂◌̖◌֚b; a◌᷺◌᷂◌̖◌֚b; a◌᷺◌᷂◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING SNAKE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1DC3 0062;00E0 05AE 1DC3 0315 0062;0061 05AE 0300 1DC3 
0315 0062;00E0 05AE 1DC3 0315 0062;0061 05AE 0300 1DC3 0315 0062; # 
(a◌̕◌̀◌֮◌᷃b; à◌֮◌᷃◌̕b; a◌֮◌̀◌᷃◌̕b; à◌֮◌᷃◌̕b; a◌֮◌̀◌᷃◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING SUSPENSION MARK, LATIN SMALL LETTER B
 0061 1DC3 0315 0300 05AE 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 
0300 0315 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062; # 
(a◌᷃◌̕◌̀◌֮b; a◌֮◌᷃◌̀◌̕b; a◌֮◌᷃◌̀◌̕b; a◌֮◌᷃◌̀◌̕b; a◌֮◌᷃◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING SUSPENSION MARK, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1DC4 0062;00E0 05AE 1DC4 0315 0062;0061 05AE 0300 1DC4 
0315 0062;00E0 05AE 1DC4 0315 0062;0061 05AE 0300 1DC4 0315 0062; # 
(a◌̕◌̀◌֮◌᷄b; à◌֮◌᷄◌̕b; a◌֮◌̀◌᷄◌̕b; à◌֮◌᷄◌̕b; a◌֮◌̀◌᷄◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING MACRON-ACUTE, LATIN SMALL LETTER B
@@ -17941,8 +18066,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 1DC8 0315 0300 05AE 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 
0300 0315 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062; # 
(a◌᷈◌̕◌̀◌֮b; a◌֮◌᷈◌̀◌̕b; a◌֮◌᷈◌̀◌̕b; a◌֮◌᷈◌̀◌̕b; a◌֮◌᷈◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING GRAVE-ACUTE-GRAVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1DC9 0062;00E0 05AE 1DC9 0315 0062;0061 05AE 0300 1DC9 
0315 0062;00E0 05AE 1DC9 0315 0062;0061 05AE 0300 1DC9 0315 0062; # 
(a◌̕◌̀◌֮◌᷉b; à◌֮◌᷉◌̕b; a◌֮◌̀◌᷉◌̕b; à◌֮◌᷉◌̕b; a◌֮◌̀◌᷉◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING ACUTE-GRAVE-ACUTE, LATIN SMALL LETTER B
 0061 1DC9 0315 0300 05AE 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 
0300 0315 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062; # 
(a◌᷉◌̕◌̀◌֮b; a◌֮◌᷉◌̀◌̕b; a◌֮◌᷉◌̀◌̕b; a◌֮◌᷉◌̀◌̕b; a◌֮◌᷉◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING ACUTE-GRAVE-ACUTE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1DCA 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 
1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062; # 
(a◌֚◌̖◌〪◌᷊b; a◌〪◌̖◌᷊◌֚b; a◌〪◌̖◌᷊◌֚b; a◌〪◌̖◌᷊◌֚b; a◌〪◌̖◌᷊◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LATIN SMALL LETTER R BELOW, LATIN SMALL LETTER B
-0061 1DCA 059A 0316 302A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 
0316 059A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062; # 
(a◌᷊◌֚◌̖◌〪b; a◌〪◌᷊◌̖◌֚b; a◌〪◌᷊◌̖◌֚b; a◌〪◌᷊◌̖◌֚b; a◌〪◌᷊◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LATIN SMALL LETTER R BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1DCA 0062;0061 1DFA 0316 1DCA 059A 0062;0061 1DFA 0316 
1DCA 059A 0062;0061 1DFA 0316 1DCA 059A 0062;0061 1DFA 0316 1DCA 059A 0062; # 
(a◌֚◌̖◌᷺◌᷊b; a◌᷺◌̖◌᷊◌֚b; a◌᷺◌̖◌᷊◌֚b; a◌᷺◌̖◌᷊◌֚b; a◌᷺◌̖◌᷊◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LATIN SMALL LETTER R BELOW, LATIN SMALL LETTER B
+0061 1DCA 059A 0316 1DFA 0062;0061 1DFA 1DCA 0316 059A 0062;0061 1DFA 1DCA 
0316 059A 0062;0061 1DFA 1DCA 0316 059A 0062;0061 1DFA 1DCA 0316 059A 0062; # 
(a◌᷊◌֚◌̖◌᷺b; a◌᷺◌᷊◌̖◌֚b; a◌᷺◌᷊◌̖◌֚b; a◌᷺◌᷊◌̖◌֚b; a◌᷺◌᷊◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LATIN SMALL LETTER R BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1DCB 0062;00E0 05AE 1DCB 0315 0062;0061 05AE 0300 1DCB 
0315 0062;00E0 05AE 1DCB 0315 0062;0061 05AE 0300 1DCB 0315 0062; # 
(a◌̕◌̀◌֮◌᷋b; à◌֮◌᷋◌̕b; a◌֮◌̀◌᷋◌̕b; à◌֮◌᷋◌̕b; a◌֮◌̀◌᷋◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING BREVE-MACRON, LATIN SMALL LETTER B
 0061 1DCB 0315 0300 05AE 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 
0300 0315 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 0300 0315 0062; # 
(a◌᷋◌̕◌̀◌֮b; a◌֮◌᷋◌̀◌̕b; a◌֮◌᷋◌̀◌̕b; a◌֮◌᷋◌̀◌̕b; a◌֮◌᷋◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING BREVE-MACRON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1DCC 0062;00E0 05AE 1DCC 0315 0062;0061 05AE 0300 1DCC 
0315 0062;00E0 05AE 1DCC 0315 0062;0061 05AE 0300 1DCC 0315 0062; # 
(a◌̕◌̀◌֮◌᷌b; à◌֮◌᷌◌̕b; a◌֮◌̀◌᷌◌̕b; à◌֮◌᷌◌̕b; a◌֮◌̀◌᷌◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING MACRON-BREVE, LATIN SMALL LETTER B
@@ -17951,8 +18076,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 1DCD 0345 035D 035C 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 
035D 0345 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 035D 0345 0062; # 
(a◌᷍◌ͅ◌͝◌͜b; a◌͜◌᷍◌͝◌ͅb; a◌͜◌᷍◌͝◌ͅb; a◌͜◌᷍◌͝◌ͅb; a◌͜◌᷍◌͝◌ͅb; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE CIRCUMFLEX ABOVE, COMBINING GREEK YPOGEGRAMMENI, 
COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, LATIN SMALL LETTER B
 0061 031B 1DCE 0321 1DCE 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 
1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062; # 
(a◌̛◌᷎◌̡◌᷎b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; ) LATIN SMALL 
LETTER A, COMBINING HORN, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK 
BELOW, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
 0061 1DCE 031B 1DCE 0321 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 
1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062; # 
(a◌᷎◌̛◌᷎◌̡b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; ) LATIN SMALL 
LETTER A, COMBINING OGONEK ABOVE, COMBINING HORN, COMBINING OGONEK ABOVE, 
COMBINING PALATALIZED HOOK BELOW, LATIN SMALL LETTER B
-0061 059A 0316 302A 1DCF 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 
1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062; # 
(a◌֚◌̖◌〪◌᷏b; a◌〪◌̖◌᷏◌֚b; a◌〪◌̖◌᷏◌֚b; a◌〪◌̖◌᷏◌֚b; a◌〪◌̖◌᷏◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING ZIGZAG BELOW, LATIN SMALL LETTER B
-0061 1DCF 059A 0316 302A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 
0316 059A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 0316 059A 0062; # 
(a◌᷏◌֚◌̖◌〪b; a◌〪◌᷏◌̖◌֚b; a◌〪◌᷏◌̖◌֚b; a◌〪◌᷏◌̖◌֚b; a◌〪◌᷏◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING ZIGZAG BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1DCF 0062;0061 1DFA 0316 1DCF 059A 0062;0061 1DFA 0316 
1DCF 059A 0062;0061 1DFA 0316 1DCF 059A 0062;0061 1DFA 0316 1DCF 059A 0062; # 
(a◌֚◌̖◌᷺◌᷏b; a◌᷺◌̖◌᷏◌֚b; a◌᷺◌̖◌᷏◌֚b; a◌᷺◌̖◌᷏◌֚b; a◌᷺◌̖◌᷏◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING ZIGZAG BELOW, LATIN SMALL LETTER B
+0061 1DCF 059A 0316 1DFA 0062;0061 1DFA 1DCF 0316 059A 0062;0061 1DFA 1DCF 
0316 059A 0062;0061 1DFA 1DCF 0316 059A 0062;0061 1DFA 1DCF 0316 059A 0062; # 
(a◌᷏◌֚◌̖◌᷺b; a◌᷺◌᷏◌̖◌֚b; a◌᷺◌᷏◌̖◌֚b; a◌᷺◌᷏◌̖◌֚b; a◌᷺◌᷏◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING ZIGZAG BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 1DCE 0321 0F74 1DD0 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 
1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062; # 
(a◌᷎◌̡◌ུ◌᷐b; a◌ུ◌̡◌᷐◌᷎b; a◌ུ◌̡◌᷐◌᷎b; a◌ུ◌̡◌᷐◌᷎b; a◌ུ◌̡◌᷐◌᷎b; ) LATIN SMALL 
LETTER A, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN 
VOWEL SIGN U, COMBINING IS BELOW, LATIN SMALL LETTER B
 0061 1DD0 1DCE 0321 0F74 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 
0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062; # 
(a◌᷐◌᷎◌̡◌ུb; a◌ུ◌᷐◌̡◌᷎b; a◌ུ◌᷐◌̡◌᷎b; a◌ུ◌᷐◌̡◌᷎b; a◌ུ◌᷐◌̡◌᷎b; ) LATIN SMALL 
LETTER A, COMBINING IS BELOW, COMBINING OGONEK ABOVE, COMBINING PALATALIZED 
HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1DD1 0062;00E0 05AE 1DD1 0315 0062;0061 05AE 0300 1DD1 
0315 0062;00E0 05AE 1DD1 0315 0062;0061 05AE 0300 1DD1 0315 0062; # 
(a◌̕◌̀◌֮◌᷑b; à◌֮◌᷑◌̕b; a◌֮◌̀◌᷑◌̕b; à◌֮◌᷑◌̕b; a◌֮◌̀◌᷑◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING UR ABOVE, LATIN SMALL LETTER B
@@ -18035,18 +18160,20 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 1DF7 0300 05AE 1D16D 0062;00E0 1D16D 1DF7 05AE 0062;0061 1D16D 1DF7 05AE 
0300 0062;00E0 1D16D 1DF7 05AE 0062;0061 1D16D 1DF7 05AE 0300 0062; # 
(a◌᷷◌̀◌𝅭֮b; à𝅭◌᷷◌֮b; a𝅭◌᷷◌֮◌̀b; à𝅭◌᷷◌֮b; a𝅭◌᷷◌֮◌̀b; ) LATIN SMALL LETTER A, 
COMBINING KAVYKA ABOVE LEFT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
MUSICAL SYMBOL COMBINING AUGMENTATION DOT, LATIN SMALL LETTER B
 0061 0300 05AE 1D16D 1DF8 0062;00E0 1D16D 05AE 1DF8 0062;0061 1D16D 05AE 1DF8 
0300 0062;00E0 1D16D 05AE 1DF8 0062;0061 1D16D 05AE 1DF8 0300 0062; # 
(a◌̀◌𝅭֮◌᷸b; à𝅭◌֮◌᷸b; a𝅭◌֮◌᷸◌̀b; à𝅭◌֮◌᷸b; a𝅭◌֮◌᷸◌̀b; ) LATIN SMALL LETTER A, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING 
AUGMENTATION DOT, COMBINING DOT ABOVE LEFT, LATIN SMALL LETTER B
 0061 1DF8 0300 05AE 1D16D 0062;00E0 1D16D 1DF8 05AE 0062;0061 1D16D 1DF8 05AE 
0300 0062;00E0 1D16D 1DF8 05AE 0062;0061 1D16D 1DF8 05AE 0300 0062; # 
(a◌᷸◌̀◌𝅭֮b; à𝅭◌᷸◌֮b; a𝅭◌᷸◌֮◌̀b; à𝅭◌᷸◌֮b; a𝅭◌᷸◌֮◌̀b; ) LATIN SMALL LETTER A, 
COMBINING DOT ABOVE LEFT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL 
SYMBOL COMBINING AUGMENTATION DOT, LATIN SMALL LETTER B
-0061 059A 0316 302A 1DF9 0062;0061 302A 0316 1DF9 059A 0062;0061 302A 0316 
1DF9 059A 0062;0061 302A 0316 1DF9 059A 0062;0061 302A 0316 1DF9 059A 0062; # 
(a◌֚◌̖◌〪◌᷹b; a◌〪◌̖◌᷹◌֚b; a◌〪◌̖◌᷹◌֚b; a◌〪◌̖◌᷹◌֚b; a◌〪◌̖◌᷹◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING WIDE INVERTED BRIDGE BELOW, LATIN SMALL LETTER B
-0061 1DF9 059A 0316 302A 0062;0061 302A 1DF9 0316 059A 0062;0061 302A 1DF9 
0316 059A 0062;0061 302A 1DF9 0316 059A 0062;0061 302A 1DF9 0316 059A 0062; # 
(a◌᷹◌֚◌̖◌〪b; a◌〪◌᷹◌̖◌֚b; a◌〪◌᷹◌̖◌֚b; a◌〪◌᷹◌̖◌֚b; a◌〪◌᷹◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING WIDE INVERTED BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1DF9 0062;0061 1DFA 0316 1DF9 059A 0062;0061 1DFA 0316 
1DF9 059A 0062;0061 1DFA 0316 1DF9 059A 0062;0061 1DFA 0316 1DF9 059A 0062; # 
(a◌֚◌̖◌᷺◌᷹b; a◌᷺◌̖◌᷹◌֚b; a◌᷺◌̖◌᷹◌֚b; a◌᷺◌̖◌᷹◌֚b; a◌᷺◌̖◌᷹◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING WIDE INVERTED BRIDGE BELOW, LATIN SMALL LETTER B
+0061 1DF9 059A 0316 1DFA 0062;0061 1DFA 1DF9 0316 059A 0062;0061 1DFA 1DF9 
0316 059A 0062;0061 1DFA 1DF9 0316 059A 0062;0061 1DFA 1DF9 0316 059A 0062; # 
(a◌᷹◌֚◌̖◌᷺b; a◌᷺◌᷹◌̖◌֚b; a◌᷺◌᷹◌̖◌֚b; a◌᷺◌᷹◌̖◌֚b; a◌᷺◌᷹◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING WIDE INVERTED BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 0316 1DFA 031B 1DFA 0062;0061 031B 1DFA 1DFA 0316 0062;0061 031B 1DFA 
1DFA 0316 0062;0061 031B 1DFA 1DFA 0316 0062;0061 031B 1DFA 1DFA 0316 0062; # 
(a◌̖◌᷺◌̛◌᷺b; a◌̛◌᷺◌᷺◌̖b; a◌̛◌᷺◌᷺◌̖b; a◌̛◌᷺◌᷺◌̖b; a◌̛◌᷺◌᷺◌̖b; ) LATIN SMALL 
LETTER A, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, COMBINING 
HORN, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 1DFA 0316 1DFA 031B 0062;0061 031B 1DFA 1DFA 0316 0062;0061 031B 1DFA 
1DFA 0316 0062;0061 031B 1DFA 1DFA 0316 0062;0061 031B 1DFA 1DFA 0316 0062; # 
(a◌᷺◌̖◌᷺◌̛b; a◌̛◌᷺◌᷺◌̖b; a◌̛◌᷺◌᷺◌̖b; a◌̛◌᷺◌᷺◌̖b; a◌̛◌᷺◌᷺◌̖b; ) LATIN SMALL 
LETTER A, COMBINING DOT BELOW LEFT, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING HORN, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1DFB 0062;00E0 05AE 1DFB 0315 0062;0061 05AE 0300 1DFB 
0315 0062;00E0 05AE 1DFB 0315 0062;0061 05AE 0300 1DFB 0315 0062; # 
(a◌̕◌̀◌֮◌᷻b; à◌֮◌᷻◌̕b; a◌֮◌̀◌᷻◌̕b; à◌֮◌᷻◌̕b; a◌֮◌̀◌᷻◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING DELETION MARK, LATIN SMALL LETTER B
 0061 1DFB 0315 0300 05AE 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 
0300 0315 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 0300 0315 0062; # 
(a◌᷻◌̕◌̀◌֮b; a◌֮◌᷻◌̀◌̕b; a◌֮◌᷻◌̀◌̕b; a◌֮◌᷻◌̀◌̕b; a◌֮◌᷻◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING DELETION MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 035D 035C 0315 1DFC 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 
1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062; # 
(a◌͝◌͜◌̕◌᷼b; a◌̕◌͜◌᷼◌͝b; a◌̕◌͜◌᷼◌͝b; a◌̕◌͜◌᷼◌͝b; a◌̕◌͜◌᷼◌͝b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA 
ABOVE RIGHT, COMBINING DOUBLE INVERTED BREVE BELOW, LATIN SMALL LETTER B
 0061 1DFC 035D 035C 0315 0062;0061 0315 1DFC 035C 035D 0062;0061 0315 1DFC 
035C 035D 0062;0061 0315 1DFC 035C 035D 0062;0061 0315 1DFC 035C 035D 0062; # 
(a◌᷼◌͝◌͜◌̕b; a◌̕◌᷼◌͜◌͝b; a◌̕◌᷼◌͜◌͝b; a◌̕◌᷼◌͜◌͝b; a◌̕◌᷼◌͜◌͝b; ) LATIN SMALL 
LETTER A, COMBINING DOUBLE INVERTED BREVE BELOW, COMBINING DOUBLE BREVE, 
COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, LATIN SMALL LETTER B
-0061 059A 0316 302A 1DFD 0062;0061 302A 0316 1DFD 059A 0062;0061 302A 0316 
1DFD 059A 0062;0061 302A 0316 1DFD 059A 0062;0061 302A 0316 1DFD 059A 0062; # 
(a◌֚◌̖◌〪◌᷽b; a◌〪◌̖◌᷽◌֚b; a◌〪◌̖◌᷽◌֚b; a◌〪◌̖◌᷽◌֚b; a◌〪◌̖◌᷽◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING ALMOST EQUAL TO BELOW, LATIN SMALL LETTER B
-0061 1DFD 059A 0316 302A 0062;0061 302A 1DFD 0316 059A 0062;0061 302A 1DFD 
0316 059A 0062;0061 302A 1DFD 0316 059A 0062;0061 302A 1DFD 0316 059A 0062; # 
(a◌᷽◌֚◌̖◌〪b; a◌〪◌᷽◌̖◌֚b; a◌〪◌᷽◌̖◌֚b; a◌〪◌᷽◌̖◌֚b; a◌〪◌᷽◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING ALMOST EQUAL TO BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1DFD 0062;0061 1DFA 0316 1DFD 059A 0062;0061 1DFA 0316 
1DFD 059A 0062;0061 1DFA 0316 1DFD 059A 0062;0061 1DFA 0316 1DFD 059A 0062; # 
(a◌֚◌̖◌᷺◌᷽b; a◌᷺◌̖◌᷽◌֚b; a◌᷺◌̖◌᷽◌֚b; a◌᷺◌̖◌᷽◌֚b; a◌᷺◌̖◌᷽◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING ALMOST EQUAL TO BELOW, LATIN SMALL LETTER B
+0061 1DFD 059A 0316 1DFA 0062;0061 1DFA 1DFD 0316 059A 0062;0061 1DFA 1DFD 
0316 059A 0062;0061 1DFA 1DFD 0316 059A 0062;0061 1DFA 1DFD 0316 059A 0062; # 
(a◌᷽◌֚◌̖◌᷺b; a◌᷺◌᷽◌̖◌֚b; a◌᷺◌᷽◌̖◌֚b; a◌᷺◌᷽◌̖◌֚b; a◌᷺◌᷽◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING ALMOST EQUAL TO BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1DFE 0062;00E0 05AE 1DFE 0315 0062;0061 05AE 0300 1DFE 
0315 0062;00E0 05AE 1DFE 0315 0062;0061 05AE 0300 1DFE 0315 0062; # 
(a◌̕◌̀◌֮◌᷾b; à◌֮◌᷾◌̕b; a◌֮◌̀◌᷾◌̕b; à◌֮◌᷾◌̕b; a◌֮◌̀◌᷾◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING LEFT ARROWHEAD ABOVE, LATIN SMALL LETTER B
 0061 1DFE 0315 0300 05AE 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 
0300 0315 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062; # 
(a◌᷾◌̕◌̀◌֮b; a◌֮◌᷾◌̀◌̕b; a◌֮◌᷾◌̀◌̕b; a◌֮◌᷾◌̀◌̕b; a◌֮◌᷾◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING LEFT ARROWHEAD ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1DFF 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 
1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062; # 
(a◌֚◌̖◌〪◌᷿b; a◌〪◌̖◌᷿◌֚b; a◌〪◌̖◌᷿◌֚b; a◌〪◌̖◌᷿◌֚b; a◌〪◌̖◌᷿◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW, LATIN SMALL 
LETTER B
-0061 1DFF 059A 0316 302A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 
0316 059A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062; # 
(a◌᷿◌֚◌̖◌〪b; a◌〪◌᷿◌̖◌֚b; a◌〪◌᷿◌̖◌֚b; a◌〪◌᷿◌̖◌֚b; a◌〪◌᷿◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL 
LETTER B
+0061 059A 0316 1DFA 1DFF 0062;0061 1DFA 0316 1DFF 059A 0062;0061 1DFA 0316 
1DFF 059A 0062;0061 1DFA 0316 1DFF 059A 0062;0061 1DFA 0316 1DFF 059A 0062; # 
(a◌֚◌̖◌᷺◌᷿b; a◌᷺◌̖◌᷿◌֚b; a◌᷺◌̖◌᷿◌֚b; a◌᷺◌̖◌᷿◌֚b; a◌᷺◌̖◌᷿◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW, LATIN SMALL 
LETTER B
+0061 1DFF 059A 0316 1DFA 0062;0061 1DFA 1DFF 0316 059A 0062;0061 1DFA 1DFF 
0316 059A 0062;0061 1DFA 1DFF 0316 059A 0062;0061 1DFA 1DFF 0316 059A 0062; # 
(a◌᷿◌֚◌̖◌᷺b; a◌᷺◌᷿◌̖◌֚b; a◌᷺◌᷿◌̖◌֚b; a◌᷺◌᷿◌̖◌֚b; a◌᷺◌᷿◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL 
LETTER B
 0061 0315 0300 05AE 20D0 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 
0315 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062; # 
(a◌̕◌̀◌֮◌⃐b; à◌֮◌⃐◌̕b; a◌֮◌̀◌⃐◌̕b; à◌֮◌⃐◌̕b; a◌֮◌̀◌⃐◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING LEFT HARPOON ABOVE, LATIN SMALL LETTER B
 0061 20D0 0315 0300 05AE 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 
0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062; # 
(a◌⃐◌̕◌̀◌֮b; a◌֮◌⃐◌̀◌̕b; a◌֮◌⃐◌̀◌̕b; a◌֮◌⃐◌̀◌̕b; a◌֮◌⃐◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING LEFT HARPOON ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 20D1 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 
0315 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062; # 
(a◌̕◌̀◌֮◌⃑b; à◌֮◌⃑◌̕b; a◌֮◌̀◌⃑◌̕b; à◌֮◌⃑◌̕b; a◌֮◌̀◌⃑◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING RIGHT HARPOON ABOVE, LATIN SMALL LETTER B
@@ -18081,22 +18208,22 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 20E6 16FF0 0334 0062;0061 20E6 0334 16FF0 0062;0061 20E6 0334 16FF0 
0062;0061 20E6 0334 16FF0 0062;0061 20E6 0334 16FF0 0062; # (a◌⃦𖿰◌̴b; a◌⃦◌̴𖿰b; 
a◌⃦◌̴𖿰b; a◌⃦◌̴𖿰b; a◌⃦◌̴𖿰b; ) LATIN SMALL LETTER A, COMBINING DOUBLE VERTICAL 
STROKE OVERLAY, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, 
LATIN SMALL LETTER B
 0061 0315 0300 05AE 20E7 0062;00E0 05AE 20E7 0315 0062;0061 05AE 0300 20E7 
0315 0062;00E0 05AE 20E7 0315 0062;0061 05AE 0300 20E7 0315 0062; # 
(a◌̕◌̀◌֮◌⃧b; à◌֮◌⃧◌̕b; a◌֮◌̀◌⃧◌̕b; à◌֮◌⃧◌̕b; a◌֮◌̀◌⃧◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING ANNUITY SYMBOL, LATIN SMALL LETTER B
 0061 20E7 0315 0300 05AE 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 
0300 0315 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062; # 
(a◌⃧◌̕◌̀◌֮b; a◌֮◌⃧◌̀◌̕b; a◌֮◌⃧◌̀◌̕b; a◌֮◌⃧◌̀◌̕b; a◌֮◌⃧◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING ANNUITY SYMBOL, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 20E8 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 
20E8 059A 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062; # 
(a◌֚◌̖◌〪◌⃨b; a◌〪◌̖◌⃨◌֚b; a◌〪◌̖◌⃨◌֚b; a◌〪◌̖◌⃨◌֚b; a◌〪◌̖◌⃨◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING TRIPLE UNDERDOT, LATIN SMALL LETTER B
-0061 20E8 059A 0316 302A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 
0316 059A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062; # 
(a◌⃨◌֚◌̖◌〪b; a◌〪◌⃨◌̖◌֚b; a◌〪◌⃨◌̖◌֚b; a◌〪◌⃨◌̖◌֚b; a◌〪◌⃨◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING TRIPLE UNDERDOT, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 20E8 0062;0061 1DFA 0316 20E8 059A 0062;0061 1DFA 0316 
20E8 059A 0062;0061 1DFA 0316 20E8 059A 0062;0061 1DFA 0316 20E8 059A 0062; # 
(a◌֚◌̖◌᷺◌⃨b; a◌᷺◌̖◌⃨◌֚b; a◌᷺◌̖◌⃨◌֚b; a◌᷺◌̖◌⃨◌֚b; a◌᷺◌̖◌⃨◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING TRIPLE UNDERDOT, LATIN SMALL LETTER B
+0061 20E8 059A 0316 1DFA 0062;0061 1DFA 20E8 0316 059A 0062;0061 1DFA 20E8 
0316 059A 0062;0061 1DFA 20E8 0316 059A 0062;0061 1DFA 20E8 0316 059A 0062; # 
(a◌⃨◌֚◌̖◌᷺b; a◌᷺◌⃨◌̖◌֚b; a◌᷺◌⃨◌̖◌֚b; a◌᷺◌⃨◌̖◌֚b; a◌᷺◌⃨◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING TRIPLE UNDERDOT, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 20E9 0062;00E0 05AE 20E9 0315 0062;0061 05AE 0300 20E9 
0315 0062;00E0 05AE 20E9 0315 0062;0061 05AE 0300 20E9 0315 0062; # 
(a◌̕◌̀◌֮◌⃩b; à◌֮◌⃩◌̕b; a◌֮◌̀◌⃩◌̕b; à◌֮◌⃩◌̕b; a◌֮◌̀◌⃩◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING WIDE BRIDGE ABOVE, LATIN SMALL LETTER B
 0061 20E9 0315 0300 05AE 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 
0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062; # 
(a◌⃩◌̕◌̀◌֮b; a◌֮◌⃩◌̀◌̕b; a◌֮◌⃩◌̀◌̕b; a◌֮◌⃩◌̀◌̕b; a◌֮◌⃩◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING WIDE BRIDGE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 16FF0 0334 20EA 0062;0061 0334 20EA 16FF0 0062;0061 0334 20EA 16FF0 
0062;0061 0334 20EA 16FF0 0062;0061 0334 20EA 16FF0 0062; # (a𖿰◌̴◌⃪b; a◌̴◌⃪𖿰b; 
a◌̴◌⃪𖿰b; a◌̴◌⃪𖿰b; a◌̴◌⃪𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE ALTERNATE READING 
MARK CA, COMBINING TILDE OVERLAY, COMBINING LEFTWARDS ARROW OVERLAY, LATIN 
SMALL LETTER B
 0061 20EA 16FF0 0334 0062;0061 20EA 0334 16FF0 0062;0061 20EA 0334 16FF0 
0062;0061 20EA 0334 16FF0 0062;0061 20EA 0334 16FF0 0062; # (a◌⃪𖿰◌̴b; a◌⃪◌̴𖿰b; 
a◌⃪◌̴𖿰b; a◌⃪◌̴𖿰b; a◌⃪◌̴𖿰b; ) LATIN SMALL LETTER A, COMBINING LEFTWARDS ARROW 
OVERLAY, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, LATIN 
SMALL LETTER B
 0061 16FF0 0334 20EB 0062;0061 0334 20EB 16FF0 0062;0061 0334 20EB 16FF0 
0062;0061 0334 20EB 16FF0 0062;0061 0334 20EB 16FF0 0062; # (a𖿰◌̴◌⃫b; a◌̴◌⃫𖿰b; 
a◌̴◌⃫𖿰b; a◌̴◌⃫𖿰b; a◌̴◌⃫𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE ALTERNATE READING 
MARK CA, COMBINING TILDE OVERLAY, COMBINING LONG DOUBLE SOLIDUS OVERLAY, LATIN 
SMALL LETTER B
 0061 20EB 16FF0 0334 0062;0061 20EB 0334 16FF0 0062;0061 20EB 0334 16FF0 
0062;0061 20EB 0334 16FF0 0062;0061 20EB 0334 16FF0 0062; # (a◌⃫𖿰◌̴b; a◌⃫◌̴𖿰b; 
a◌⃫◌̴𖿰b; a◌⃫◌̴𖿰b; a◌⃫◌̴𖿰b; ) LATIN SMALL LETTER A, COMBINING LONG DOUBLE 
SOLIDUS OVERLAY, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, 
LATIN SMALL LETTER B
-0061 059A 0316 302A 20EC 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 
20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062; # 
(a◌֚◌̖◌〪◌⃬b; a◌〪◌̖◌⃬◌֚b; a◌〪◌̖◌⃬◌֚b; a◌〪◌̖◌⃬◌֚b; a◌〪◌̖◌⃬◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS, LATIN SMALL LETTER 
B
-0061 20EC 059A 0316 302A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 
0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062; # 
(a◌⃬◌֚◌̖◌〪b; a◌〪◌⃬◌̖◌֚b; a◌〪◌⃬◌̖◌֚b; a◌〪◌⃬◌̖◌֚b; a◌〪◌⃬◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL 
LETTER B
-0061 059A 0316 302A 20ED 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 
20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062; # 
(a◌֚◌̖◌〪◌⃭b; a◌〪◌̖◌⃭◌֚b; a◌〪◌̖◌⃭◌֚b; a◌〪◌̖◌⃭◌֚b; a◌〪◌̖◌⃭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS, LATIN SMALL LETTER B
-0061 20ED 059A 0316 302A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 
0316 059A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062; # 
(a◌⃭◌֚◌̖◌〪b; a◌〪◌⃭◌̖◌֚b; a◌〪◌⃭◌̖◌֚b; a◌〪◌⃭◌̖◌֚b; a◌〪◌⃭◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 20EE 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 
20EE 059A 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062; # 
(a◌֚◌̖◌〪◌⃮b; a◌〪◌̖◌⃮◌֚b; a◌〪◌̖◌⃮◌֚b; a◌〪◌̖◌⃮◌֚b; a◌〪◌̖◌⃮◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LEFT ARROW BELOW, LATIN SMALL LETTER B
-0061 20EE 059A 0316 302A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 
0316 059A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062; # 
(a◌⃮◌֚◌̖◌〪b; a◌〪◌⃮◌̖◌֚b; a◌〪◌⃮◌̖◌֚b; a◌〪◌⃮◌̖◌֚b; a◌〪◌⃮◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 20EF 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 
20EF 059A 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062; # 
(a◌֚◌̖◌〪◌⃯b; a◌〪◌̖◌⃯◌֚b; a◌〪◌̖◌⃯◌֚b; a◌〪◌̖◌⃯◌֚b; a◌〪◌̖◌⃯◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING RIGHT ARROW BELOW, LATIN SMALL LETTER B
-0061 20EF 059A 0316 302A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 
0316 059A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062; # 
(a◌⃯◌֚◌̖◌〪b; a◌〪◌⃯◌̖◌֚b; a◌〪◌⃯◌̖◌֚b; a◌〪◌⃯◌̖◌֚b; a◌〪◌⃯◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 20EC 0062;0061 1DFA 0316 20EC 059A 0062;0061 1DFA 0316 
20EC 059A 0062;0061 1DFA 0316 20EC 059A 0062;0061 1DFA 0316 20EC 059A 0062; # 
(a◌֚◌̖◌᷺◌⃬b; a◌᷺◌̖◌⃬◌֚b; a◌᷺◌̖◌⃬◌֚b; a◌᷺◌̖◌⃬◌֚b; a◌᷺◌̖◌⃬◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS, LATIN SMALL 
LETTER B
+0061 20EC 059A 0316 1DFA 0062;0061 1DFA 20EC 0316 059A 0062;0061 1DFA 20EC 
0316 059A 0062;0061 1DFA 20EC 0316 059A 0062;0061 1DFA 20EC 0316 059A 0062; # 
(a◌⃬◌֚◌̖◌᷺b; a◌᷺◌⃬◌̖◌֚b; a◌᷺◌⃬◌̖◌֚b; a◌᷺◌⃬◌̖◌֚b; a◌᷺◌⃬◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL 
LETTER B
+0061 059A 0316 1DFA 20ED 0062;0061 1DFA 0316 20ED 059A 0062;0061 1DFA 0316 
20ED 059A 0062;0061 1DFA 0316 20ED 059A 0062;0061 1DFA 0316 20ED 059A 0062; # 
(a◌֚◌̖◌᷺◌⃭b; a◌᷺◌̖◌⃭◌֚b; a◌᷺◌̖◌⃭◌֚b; a◌᷺◌̖◌⃭◌֚b; a◌᷺◌̖◌⃭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS, LATIN SMALL LETTER 
B
+0061 20ED 059A 0316 1DFA 0062;0061 1DFA 20ED 0316 059A 0062;0061 1DFA 20ED 
0316 059A 0062;0061 1DFA 20ED 0316 059A 0062;0061 1DFA 20ED 0316 059A 0062; # 
(a◌⃭◌֚◌̖◌᷺b; a◌᷺◌⃭◌̖◌֚b; a◌᷺◌⃭◌̖◌֚b; a◌᷺◌⃭◌̖◌֚b; a◌᷺◌⃭◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 20EE 0062;0061 1DFA 0316 20EE 059A 0062;0061 1DFA 0316 
20EE 059A 0062;0061 1DFA 0316 20EE 059A 0062;0061 1DFA 0316 20EE 059A 0062; # 
(a◌֚◌̖◌᷺◌⃮b; a◌᷺◌̖◌⃮◌֚b; a◌᷺◌̖◌⃮◌֚b; a◌᷺◌̖◌⃮◌֚b; a◌᷺◌̖◌⃮◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LEFT ARROW BELOW, LATIN SMALL LETTER B
+0061 20EE 059A 0316 1DFA 0062;0061 1DFA 20EE 0316 059A 0062;0061 1DFA 20EE 
0316 059A 0062;0061 1DFA 20EE 0316 059A 0062;0061 1DFA 20EE 0316 059A 0062; # 
(a◌⃮◌֚◌̖◌᷺b; a◌᷺◌⃮◌̖◌֚b; a◌᷺◌⃮◌̖◌֚b; a◌᷺◌⃮◌̖◌֚b; a◌᷺◌⃮◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LEFT ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 20EF 0062;0061 1DFA 0316 20EF 059A 0062;0061 1DFA 0316 
20EF 059A 0062;0061 1DFA 0316 20EF 059A 0062;0061 1DFA 0316 20EF 059A 0062; # 
(a◌֚◌̖◌᷺◌⃯b; a◌᷺◌̖◌⃯◌֚b; a◌᷺◌̖◌⃯◌֚b; a◌᷺◌̖◌⃯◌֚b; a◌᷺◌̖◌⃯◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING RIGHT ARROW BELOW, LATIN SMALL LETTER B
+0061 20EF 059A 0316 1DFA 0062;0061 1DFA 20EF 0316 059A 0062;0061 1DFA 20EF 
0316 059A 0062;0061 1DFA 20EF 0316 059A 0062;0061 1DFA 20EF 0316 059A 0062; # 
(a◌⃯◌֚◌̖◌᷺b; a◌᷺◌⃯◌̖◌֚b; a◌᷺◌⃯◌̖◌֚b; a◌᷺◌⃯◌̖◌֚b; a◌᷺◌⃯◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING RIGHT ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 20F0 0062;00E0 05AE 20F0 0315 0062;0061 05AE 0300 20F0 
0315 0062;00E0 05AE 20F0 0315 0062;0061 05AE 0300 20F0 0315 0062; # 
(a◌̕◌̀◌֮◌⃰b; à◌֮◌⃰◌̕b; a◌֮◌̀◌⃰◌̕b; à◌֮◌⃰◌̕b; a◌֮◌̀◌⃰◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING ASTERISK ABOVE, LATIN SMALL LETTER B
 0061 20F0 0315 0300 05AE 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 
0300 0315 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 0300 0315 0062; # 
(a◌⃰◌̕◌̀◌֮b; a◌֮◌⃰◌̀◌̕b; a◌֮◌⃰◌̀◌̕b; a◌֮◌⃰◌̀◌̕b; a◌֮◌⃰◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING ASTERISK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 2CEF 0062;00E0 05AE 2CEF 0315 0062;0061 05AE 0300 2CEF 
0315 0062;00E0 05AE 2CEF 0315 0062;0061 05AE 0300 2CEF 0315 0062; # 
(a◌̕◌̀◌֮◌⳯b; à◌֮◌⳯◌̕b; a◌֮◌̀◌⳯◌̕b; à◌֮◌⳯◌̕b; a◌֮◌̀◌⳯◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COPTIC COMBINING NI ABOVE, LATIN SMALL LETTER B
@@ -18171,8 +18298,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 2DFE 0315 0300 05AE 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 
0300 0315 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 0300 0315 0062; # 
(a◌ⷾ◌̕◌̀◌֮b; a◌֮◌ⷾ◌̀◌̕b; a◌֮◌ⷾ◌̀◌̕b; a◌֮◌ⷾ◌̀◌̕b; a◌֮◌ⷾ◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING CYRILLIC LETTER BIG YUS, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 2DFF 0062;00E0 05AE 2DFF 0315 0062;0061 05AE 0300 2DFF 
0315 0062;00E0 05AE 2DFF 0315 0062;0061 05AE 0300 2DFF 0315 0062; # 
(a◌̕◌̀◌֮◌ⷿb; à◌֮◌ⷿ◌̕b; a◌֮◌̀◌ⷿ◌̕b; à◌֮◌ⷿ◌̕b; a◌֮◌̀◌ⷿ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING CYRILLIC LETTER IOTIFIED BIG YUS, LATIN SMALL LETTER B
 0061 2DFF 0315 0300 05AE 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 
0300 0315 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 0300 0315 0062; # 
(a◌ⷿ◌̕◌̀◌֮b; a◌֮◌ⷿ◌̀◌̕b; a◌֮◌ⷿ◌̀◌̕b; a◌֮◌ⷿ◌̀◌̕b; a◌֮◌ⷿ◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING CYRILLIC LETTER IOTIFIED BIG YUS, COMBINING COMMA ABOVE 
RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 0316 302A 031B 302A 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 
302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062; # 
(a◌̖◌〪◌̛◌〪b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; ) LATIN SMALL 
LETTER A, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING 
HORN, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 302A 0316 302A 031B 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 
302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062; # 
(a◌〪◌̖◌〪◌̛b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; ) LATIN SMALL 
LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING GRAVE ACCENT BELOW, 
IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, LATIN SMALL LETTER B
+0061 0316 1DFA 031B 302A 0062;0061 031B 1DFA 302A 0316 0062;0061 031B 1DFA 
302A 0316 0062;0061 031B 1DFA 302A 0316 0062;0061 031B 1DFA 302A 0316 0062; # 
(a◌̖◌᷺◌̛◌〪b; a◌̛◌᷺◌〪◌̖b; a◌̛◌᷺◌〪◌̖b; a◌̛◌᷺◌〪◌̖b; a◌̛◌᷺◌〪◌̖b; ) LATIN SMALL 
LETTER A, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, COMBINING 
HORN, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 302A 0316 1DFA 031B 0062;0061 031B 302A 1DFA 0316 0062;0061 031B 302A 
1DFA 0316 0062;0061 031B 302A 1DFA 0316 0062;0061 031B 302A 1DFA 0316 0062; # 
(a◌〪◌̖◌᷺◌̛b; a◌̛◌〪◌᷺◌̖b; a◌̛◌〪◌᷺◌̖b; a◌̛◌〪◌᷺◌̖b; a◌̛◌〪◌᷺◌̖b; ) LATIN SMALL 
LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING GRAVE ACCENT BELOW, COMBINING 
DOT BELOW LEFT, COMBINING HORN, LATIN SMALL LETTER B
 0061 0300 05AE 1D16D 302B 0062;00E0 1D16D 05AE 302B 0062;0061 1D16D 05AE 302B 
0300 0062;00E0 1D16D 05AE 302B 0062;0061 1D16D 05AE 302B 0300 0062; # 
(a◌̀◌𝅭֮◌〫b; à𝅭◌֮◌〫b; a𝅭◌֮◌〫◌̀b; à𝅭◌֮◌〫b; a𝅭◌֮◌〫◌̀b; ) LATIN SMALL LETTER A, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING 
AUGMENTATION DOT, IDEOGRAPHIC RISING TONE MARK, LATIN SMALL LETTER B
 0061 302B 0300 05AE 1D16D 0062;00E0 1D16D 302B 05AE 0062;0061 1D16D 302B 05AE 
0300 0062;00E0 1D16D 302B 05AE 0062;0061 1D16D 302B 05AE 0300 0062; # 
(a◌〫◌̀◌𝅭֮b; à𝅭◌〫◌֮b; a𝅭◌〫◌֮◌̀b; à𝅭◌〫◌֮b; a𝅭◌〫◌֮◌̀b; ) LATIN SMALL LETTER A, 
IDEOGRAPHIC RISING TONE MARK, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
MUSICAL SYMBOL COMBINING AUGMENTATION DOT, LATIN SMALL LETTER B
 0061 035C 0315 0300 302C 0062;00E0 0315 302C 035C 0062;0061 0300 0315 302C 
035C 0062;00E0 0315 302C 035C 0062;0061 0300 0315 302C 035C 0062; # 
(a◌͜◌̕◌̀◌〬b; à◌̕◌〬◌͜b; a◌̀◌̕◌〬◌͜b; à◌̕◌〬◌͜b; a◌̀◌̕◌〬◌͜b; ) LATIN SMALL LETTER 
A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, IDEOGRAPHIC DEPARTING TONE MARK, LATIN SMALL LETTER B
@@ -18259,12 +18386,12 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 A8F0 0315 0300 05AE 0062;0061 05AE A8F0 0300 0315 0062;0061 05AE A8F0 
0300 0315 0062;0061 05AE A8F0 0300 0315 0062;0061 05AE A8F0 0300 0315 0062; # 
(a◌꣰◌̕◌̀◌֮b; a◌֮◌꣰◌̀◌̕b; a◌֮◌꣰◌̀◌̕b; a◌֮◌꣰◌̀◌̕b; a◌֮◌꣰◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING DEVANAGARI LETTER VI, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE A8F1 0062;00E0 05AE A8F1 0315 0062;0061 05AE 0300 A8F1 
0315 0062;00E0 05AE A8F1 0315 0062;0061 05AE 0300 A8F1 0315 0062; # 
(a◌̕◌̀◌֮◌꣱b; à◌֮◌꣱◌̕b; a◌֮◌̀◌꣱◌̕b; à◌֮◌꣱◌̕b; a◌֮◌̀◌꣱◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING DEVANAGARI SIGN AVAGRAHA, LATIN SMALL LETTER B
 0061 A8F1 0315 0300 05AE 0062;0061 05AE A8F1 0300 0315 0062;0061 05AE A8F1 
0300 0315 0062;0061 05AE A8F1 0300 0315 0062;0061 05AE A8F1 0300 0315 0062; # 
(a◌꣱◌̕◌̀◌֮b; a◌֮◌꣱◌̀◌̕b; a◌֮◌꣱◌̀◌̕b; a◌֮◌꣱◌̀◌̕b; a◌֮◌꣱◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING DEVANAGARI SIGN AVAGRAHA, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A A92B 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 
A92B 059A 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 A92B 059A 0062; # 
(a◌֚◌̖◌〪◌꤫b; a◌〪◌̖◌꤫◌֚b; a◌〪◌̖◌꤫◌֚b; a◌〪◌̖◌꤫◌֚b; a◌〪◌̖◌꤫◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, KAYAH LI TONE PLOPHU, LATIN SMALL LETTER B
-0061 A92B 059A 0316 302A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 
0316 059A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 0316 059A 0062; # 
(a◌꤫◌֚◌̖◌〪b; a◌〪◌꤫◌̖◌֚b; a◌〪◌꤫◌̖◌֚b; a◌〪◌꤫◌̖◌֚b; a◌〪◌꤫◌̖◌֚b; ) LATIN SMALL 
LETTER A, KAYAH LI TONE PLOPHU, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A A92C 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 
A92C 059A 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 A92C 059A 0062; # 
(a◌֚◌̖◌〪◌꤬b; a◌〪◌̖◌꤬◌֚b; a◌〪◌̖◌꤬◌֚b; a◌〪◌̖◌꤬◌֚b; a◌〪◌̖◌꤬◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, KAYAH LI TONE CALYA, LATIN SMALL LETTER B
-0061 A92C 059A 0316 302A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 
0316 059A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 0316 059A 0062; # 
(a◌꤬◌֚◌̖◌〪b; a◌〪◌꤬◌̖◌֚b; a◌〪◌꤬◌̖◌֚b; a◌〪◌꤬◌̖◌֚b; a◌〪◌꤬◌̖◌֚b; ) LATIN SMALL 
LETTER A, KAYAH LI TONE CALYA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A A92D 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 
A92D 059A 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 A92D 059A 0062; # 
(a◌֚◌̖◌〪◌꤭b; a◌〪◌̖◌꤭◌֚b; a◌〪◌̖◌꤭◌֚b; a◌〪◌̖◌꤭◌֚b; a◌〪◌̖◌꤭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, KAYAH LI TONE CALYA PLOPHU, LATIN SMALL LETTER B
-0061 A92D 059A 0316 302A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 
0316 059A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062; # 
(a◌꤭◌֚◌̖◌〪b; a◌〪◌꤭◌̖◌֚b; a◌〪◌꤭◌̖◌֚b; a◌〪◌꤭◌̖◌֚b; a◌〪◌꤭◌̖◌֚b; ) LATIN SMALL 
LETTER A, KAYAH LI TONE CALYA PLOPHU, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA A92B 0062;0061 1DFA 0316 A92B 059A 0062;0061 1DFA 0316 
A92B 059A 0062;0061 1DFA 0316 A92B 059A 0062;0061 1DFA 0316 A92B 059A 0062; # 
(a◌֚◌̖◌᷺◌꤫b; a◌᷺◌̖◌꤫◌֚b; a◌᷺◌̖◌꤫◌֚b; a◌᷺◌̖◌꤫◌֚b; a◌᷺◌̖◌꤫◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, KAYAH LI TONE PLOPHU, LATIN SMALL LETTER B
+0061 A92B 059A 0316 1DFA 0062;0061 1DFA A92B 0316 059A 0062;0061 1DFA A92B 
0316 059A 0062;0061 1DFA A92B 0316 059A 0062;0061 1DFA A92B 0316 059A 0062; # 
(a◌꤫◌֚◌̖◌᷺b; a◌᷺◌꤫◌̖◌֚b; a◌᷺◌꤫◌̖◌֚b; a◌᷺◌꤫◌̖◌֚b; a◌᷺◌꤫◌̖◌֚b; ) LATIN SMALL 
LETTER A, KAYAH LI TONE PLOPHU, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA A92C 0062;0061 1DFA 0316 A92C 059A 0062;0061 1DFA 0316 
A92C 059A 0062;0061 1DFA 0316 A92C 059A 0062;0061 1DFA 0316 A92C 059A 0062; # 
(a◌֚◌̖◌᷺◌꤬b; a◌᷺◌̖◌꤬◌֚b; a◌᷺◌̖◌꤬◌֚b; a◌᷺◌̖◌꤬◌֚b; a◌᷺◌̖◌꤬◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, KAYAH LI TONE CALYA, LATIN SMALL LETTER B
+0061 A92C 059A 0316 1DFA 0062;0061 1DFA A92C 0316 059A 0062;0061 1DFA A92C 
0316 059A 0062;0061 1DFA A92C 0316 059A 0062;0061 1DFA A92C 0316 059A 0062; # 
(a◌꤬◌֚◌̖◌᷺b; a◌᷺◌꤬◌̖◌֚b; a◌᷺◌꤬◌̖◌֚b; a◌᷺◌꤬◌̖◌֚b; a◌᷺◌꤬◌̖◌֚b; ) LATIN SMALL 
LETTER A, KAYAH LI TONE CALYA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT 
BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA A92D 0062;0061 1DFA 0316 A92D 059A 0062;0061 1DFA 0316 
A92D 059A 0062;0061 1DFA 0316 A92D 059A 0062;0061 1DFA 0316 A92D 059A 0062; # 
(a◌֚◌̖◌᷺◌꤭b; a◌᷺◌̖◌꤭◌֚b; a◌᷺◌̖◌꤭◌֚b; a◌᷺◌̖◌꤭◌֚b; a◌᷺◌̖◌꤭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, KAYAH LI TONE CALYA PLOPHU, LATIN SMALL LETTER B
+0061 A92D 059A 0316 1DFA 0062;0061 1DFA A92D 0316 059A 0062;0061 1DFA A92D 
0316 059A 0062;0061 1DFA A92D 0316 059A 0062;0061 1DFA A92D 0316 059A 0062; # 
(a◌꤭◌֚◌̖◌᷺b; a◌᷺◌꤭◌̖◌֚b; a◌᷺◌꤭◌̖◌֚b; a◌᷺◌꤭◌̖◌֚b; a◌᷺◌꤭◌̖◌֚b; ) LATIN SMALL 
LETTER A, KAYAH LI TONE CALYA PLOPHU, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 05B0 094D 3099 A953 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D 
A953 05B0 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062; # 
(a◌ְ◌्◌゙꥓b; a◌゙◌्꥓◌ְb; a◌゙◌्꥓◌ְb; a◌゙◌्꥓◌ְb; a◌゙◌्꥓◌ְb; ) LATIN SMALL LETTER A, 
HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED 
SOUND MARK, REJANG VIRAMA, LATIN SMALL LETTER B
 0061 A953 05B0 094D 3099 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 
094D 05B0 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062; # 
(a꥓◌ְ◌्◌゙b; a◌゙꥓◌्◌ְb; a◌゙꥓◌्◌ְb; a◌゙꥓◌्◌ְb; a◌゙꥓◌्◌ְb; ) LATIN SMALL LETTER A, 
REJANG VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 3099 093C 16FF0 A9B3 0062;0061 16FF0 093C A9B3 3099 0062;0061 16FF0 093C 
A9B3 3099 0062;0061 16FF0 093C A9B3 3099 0062;0061 16FF0 093C A9B3 3099 0062; # 
(a◌゙◌𖿰़◌꦳b; a𖿰◌़◌꦳◌゙b; a𖿰◌़◌꦳◌゙b; a𖿰◌़◌꦳◌゙b; a𖿰◌़◌꦳◌゙b; ) LATIN SMALL LETTER A, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, 
VIETNAMESE ALTERNATE READING MARK CA, JAVANESE SIGN CECAK TELU, LATIN SMALL 
LETTER B
@@ -18277,8 +18404,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 AAB2 0315 0300 05AE 0062;0061 05AE AAB2 0300 0315 0062;0061 05AE AAB2 
0300 0315 0062;0061 05AE AAB2 0300 0315 0062;0061 05AE AAB2 0300 0315 0062; # 
(a◌ꪲ◌̕◌̀◌֮b; a◌֮◌ꪲ◌̀◌̕b; a◌֮◌ꪲ◌̀◌̕b; a◌֮◌ꪲ◌̀◌̕b; a◌֮◌ꪲ◌̀◌̕b; ) LATIN SMALL 
LETTER A, TAI VIET VOWEL I, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE AAB3 0062;00E0 05AE AAB3 0315 0062;0061 05AE 0300 AAB3 
0315 0062;00E0 05AE AAB3 0315 0062;0061 05AE 0300 AAB3 0315 0062; # 
(a◌̕◌̀◌֮◌ꪳb; à◌֮◌ꪳ◌̕b; a◌֮◌̀◌ꪳ◌̕b; à◌֮◌ꪳ◌̕b; a◌֮◌̀◌ꪳ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
TAI VIET VOWEL UE, LATIN SMALL LETTER B
 0061 AAB3 0315 0300 05AE 0062;0061 05AE AAB3 0300 0315 0062;0061 05AE AAB3 
0300 0315 0062;0061 05AE AAB3 0300 0315 0062;0061 05AE AAB3 0300 0315 0062; # 
(a◌ꪳ◌̕◌̀◌֮b; a◌֮◌ꪳ◌̀◌̕b; a◌֮◌ꪳ◌̀◌̕b; a◌֮◌ꪳ◌̀◌̕b; a◌֮◌ꪳ◌̀◌̕b; ) LATIN SMALL 
LETTER A, TAI VIET VOWEL UE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A AAB4 0062;0061 302A 0316 AAB4 059A 0062;0061 302A 0316 
AAB4 059A 0062;0061 302A 0316 AAB4 059A 0062;0061 302A 0316 AAB4 059A 0062; # 
(a◌֚◌̖◌〪◌ꪴb; a◌〪◌̖◌ꪴ◌֚b; a◌〪◌̖◌ꪴ◌֚b; a◌〪◌̖◌ꪴ◌֚b; a◌〪◌̖◌ꪴ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, TAI VIET VOWEL U, LATIN SMALL LETTER B
-0061 AAB4 059A 0316 302A 0062;0061 302A AAB4 0316 059A 0062;0061 302A AAB4 
0316 059A 0062;0061 302A AAB4 0316 059A 0062;0061 302A AAB4 0316 059A 0062; # 
(a◌ꪴ◌֚◌̖◌〪b; a◌〪◌ꪴ◌̖◌֚b; a◌〪◌ꪴ◌̖◌֚b; a◌〪◌ꪴ◌̖◌֚b; a◌〪◌ꪴ◌̖◌֚b; ) LATIN SMALL 
LETTER A, TAI VIET VOWEL U, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA AAB4 0062;0061 1DFA 0316 AAB4 059A 0062;0061 1DFA 0316 
AAB4 059A 0062;0061 1DFA 0316 AAB4 059A 0062;0061 1DFA 0316 AAB4 059A 0062; # 
(a◌֚◌̖◌᷺◌ꪴb; a◌᷺◌̖◌ꪴ◌֚b; a◌᷺◌̖◌ꪴ◌֚b; a◌᷺◌̖◌ꪴ◌֚b; a◌᷺◌̖◌ꪴ◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, TAI VIET VOWEL U, LATIN SMALL LETTER B
+0061 AAB4 059A 0316 1DFA 0062;0061 1DFA AAB4 0316 059A 0062;0061 1DFA AAB4 
0316 059A 0062;0061 1DFA AAB4 0316 059A 0062;0061 1DFA AAB4 0316 059A 0062; # 
(a◌ꪴ◌֚◌̖◌᷺b; a◌᷺◌ꪴ◌̖◌֚b; a◌᷺◌ꪴ◌̖◌֚b; a◌᷺◌ꪴ◌̖◌֚b; a◌᷺◌ꪴ◌̖◌֚b; ) LATIN SMALL 
LETTER A, TAI VIET VOWEL U, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, 
COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE AAB7 0062;00E0 05AE AAB7 0315 0062;0061 05AE 0300 AAB7 
0315 0062;00E0 05AE AAB7 0315 0062;0061 05AE 0300 AAB7 0315 0062; # 
(a◌̕◌̀◌֮◌ꪷb; à◌֮◌ꪷ◌̕b; a◌֮◌̀◌ꪷ◌̕b; à◌֮◌ꪷ◌̕b; a◌֮◌̀◌ꪷ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
TAI VIET MAI KHIT, LATIN SMALL LETTER B
 0061 AAB7 0315 0300 05AE 0062;0061 05AE AAB7 0300 0315 0062;0061 05AE AAB7 
0300 0315 0062;0061 05AE AAB7 0300 0315 0062;0061 05AE AAB7 0300 0315 0062; # 
(a◌ꪷ◌̕◌̀◌֮b; a◌֮◌ꪷ◌̀◌̕b; a◌֮◌ꪷ◌̀◌̕b; a◌֮◌ꪷ◌̀◌̕b; a◌֮◌ꪷ◌̀◌̕b; ) LATIN SMALL 
LETTER A, TAI VIET MAI KHIT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE AAB8 0062;00E0 05AE AAB8 0315 0062;0061 05AE 0300 AAB8 
0315 0062;00E0 05AE AAB8 0315 0062;0061 05AE 0300 AAB8 0315 0062; # 
(a◌̕◌̀◌֮◌ꪸb; à◌֮◌ꪸ◌̕b; a◌֮◌̀◌ꪸ◌̕b; à◌֮◌ꪸ◌̕b; a◌֮◌̀◌ꪸ◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
TAI VIET VOWEL IA, LATIN SMALL LETTER B
@@ -18309,28 +18436,28 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 FE25 0315 0300 05AE 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 
0300 0315 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 0300 0315 0062; # 
(a◌︥◌̕◌̀◌֮b; a◌֮◌︥◌̀◌̕b; a◌֮◌︥◌̀◌̕b; a◌֮◌︥◌̀◌̕b; a◌֮◌︥◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING MACRON RIGHT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE FE26 0062;00E0 05AE FE26 0315 0062;0061 05AE 0300 FE26 
0315 0062;00E0 05AE FE26 0315 0062;0061 05AE 0300 FE26 0315 0062; # 
(a◌̕◌̀◌֮◌︦b; à◌֮◌︦◌̕b; a◌֮◌̀◌︦◌̕b; à◌֮◌︦◌̕b; a◌֮◌̀◌︦◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING CONJOINING MACRON, LATIN SMALL LETTER B
 0061 FE26 0315 0300 05AE 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 
0300 0315 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 0300 0315 0062; # 
(a◌︦◌̕◌̀◌֮b; a◌֮◌︦◌̀◌̕b; a◌֮◌︦◌̀◌̕b; a◌֮◌︦◌̀◌̕b; a◌֮◌︦◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING CONJOINING MACRON, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A FE27 0062;0061 302A 0316 FE27 059A 0062;0061 302A 0316 
FE27 059A 0062;0061 302A 0316 FE27 059A 0062;0061 302A 0316 FE27 059A 0062; # 
(a◌֚◌̖◌〪◌︧b; a◌〪◌̖◌︧◌֚b; a◌〪◌̖◌︧◌֚b; a◌〪◌̖◌︧◌֚b; a◌〪◌̖◌︧◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LIGATURE LEFT HALF BELOW, LATIN SMALL LETTER B
-0061 FE27 059A 0316 302A 0062;0061 302A FE27 0316 059A 0062;0061 302A FE27 
0316 059A 0062;0061 302A FE27 0316 059A 0062;0061 302A FE27 0316 059A 0062; # 
(a◌︧◌֚◌̖◌〪b; a◌〪◌︧◌̖◌֚b; a◌〪◌︧◌̖◌֚b; a◌〪◌︧◌̖◌֚b; a◌〪◌︧◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LIGATURE LEFT HALF BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A FE28 0062;0061 302A 0316 FE28 059A 0062;0061 302A 0316 
FE28 059A 0062;0061 302A 0316 FE28 059A 0062;0061 302A 0316 FE28 059A 0062; # 
(a◌֚◌̖◌〪◌︨b; a◌〪◌̖◌︨◌֚b; a◌〪◌̖◌︨◌֚b; a◌〪◌̖◌︨◌֚b; a◌〪◌̖◌︨◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING LIGATURE RIGHT HALF BELOW, LATIN SMALL LETTER B
-0061 FE28 059A 0316 302A 0062;0061 302A FE28 0316 059A 0062;0061 302A FE28 
0316 059A 0062;0061 302A FE28 0316 059A 0062;0061 302A FE28 0316 059A 0062; # 
(a◌︨◌֚◌̖◌〪b; a◌〪◌︨◌̖◌֚b; a◌〪◌︨◌̖◌֚b; a◌〪◌︨◌̖◌֚b; a◌〪◌︨◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LIGATURE RIGHT HALF BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A FE29 0062;0061 302A 0316 FE29 059A 0062;0061 302A 0316 
FE29 059A 0062;0061 302A 0316 FE29 059A 0062;0061 302A 0316 FE29 059A 0062; # 
(a◌֚◌̖◌〪◌︩b; a◌〪◌̖◌︩◌֚b; a◌〪◌̖◌︩◌֚b; a◌〪◌̖◌︩◌֚b; a◌〪◌̖◌︩◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING TILDE LEFT HALF BELOW, LATIN SMALL LETTER B
-0061 FE29 059A 0316 302A 0062;0061 302A FE29 0316 059A 0062;0061 302A FE29 
0316 059A 0062;0061 302A FE29 0316 059A 0062;0061 302A FE29 0316 059A 0062; # 
(a◌︩◌֚◌̖◌〪b; a◌〪◌︩◌̖◌֚b; a◌〪◌︩◌̖◌֚b; a◌〪◌︩◌̖◌֚b; a◌〪◌︩◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING TILDE LEFT HALF BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A FE2A 0062;0061 302A 0316 FE2A 059A 0062;0061 302A 0316 
FE2A 059A 0062;0061 302A 0316 FE2A 059A 0062;0061 302A 0316 FE2A 059A 0062; # 
(a◌֚◌̖◌〪◌︪b; a◌〪◌̖◌︪◌֚b; a◌〪◌̖◌︪◌֚b; a◌〪◌̖◌︪◌֚b; a◌〪◌̖◌︪◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING TILDE RIGHT HALF BELOW, LATIN SMALL LETTER B
-0061 FE2A 059A 0316 302A 0062;0061 302A FE2A 0316 059A 0062;0061 302A FE2A 
0316 059A 0062;0061 302A FE2A 0316 059A 0062;0061 302A FE2A 0316 059A 0062; # 
(a◌︪◌֚◌̖◌〪b; a◌〪◌︪◌̖◌֚b; a◌〪◌︪◌̖◌֚b; a◌〪◌︪◌̖◌֚b; a◌〪◌︪◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING TILDE RIGHT HALF BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A FE2B 0062;0061 302A 0316 FE2B 059A 0062;0061 302A 0316 
FE2B 059A 0062;0061 302A 0316 FE2B 059A 0062;0061 302A 0316 FE2B 059A 0062; # 
(a◌֚◌̖◌〪◌︫b; a◌〪◌̖◌︫◌֚b; a◌〪◌̖◌︫◌֚b; a◌〪◌̖◌︫◌֚b; a◌〪◌̖◌︫◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING MACRON LEFT HALF BELOW, LATIN SMALL LETTER B
-0061 FE2B 059A 0316 302A 0062;0061 302A FE2B 0316 059A 0062;0061 302A FE2B 
0316 059A 0062;0061 302A FE2B 0316 059A 0062;0061 302A FE2B 0316 059A 0062; # 
(a◌︫◌֚◌̖◌〪b; a◌〪◌︫◌̖◌֚b; a◌〪◌︫◌̖◌֚b; a◌〪◌︫◌̖◌֚b; a◌〪◌︫◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING MACRON LEFT HALF BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A FE2C 0062;0061 302A 0316 FE2C 059A 0062;0061 302A 0316 
FE2C 059A 0062;0061 302A 0316 FE2C 059A 0062;0061 302A 0316 FE2C 059A 0062; # 
(a◌֚◌̖◌〪◌︬b; a◌〪◌̖◌︬◌֚b; a◌〪◌̖◌︬◌֚b; a◌〪◌̖◌︬◌֚b; a◌〪◌̖◌︬◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING MACRON RIGHT HALF BELOW, LATIN SMALL LETTER B
-0061 FE2C 059A 0316 302A 0062;0061 302A FE2C 0316 059A 0062;0061 302A FE2C 
0316 059A 0062;0061 302A FE2C 0316 059A 0062;0061 302A FE2C 0316 059A 0062; # 
(a◌︬◌֚◌̖◌〪b; a◌〪◌︬◌̖◌֚b; a◌〪◌︬◌̖◌֚b; a◌〪◌︬◌̖◌֚b; a◌〪◌︬◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING MACRON RIGHT HALF BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A FE2D 0062;0061 302A 0316 FE2D 059A 0062;0061 302A 0316 
FE2D 059A 0062;0061 302A 0316 FE2D 059A 0062;0061 302A 0316 FE2D 059A 0062; # 
(a◌֚◌̖◌〪◌︭b; a◌〪◌̖◌︭◌֚b; a◌〪◌̖◌︭◌֚b; a◌〪◌̖◌︭◌֚b; a◌〪◌̖◌︭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COMBINING CONJOINING MACRON BELOW, LATIN SMALL LETTER B
-0061 FE2D 059A 0316 302A 0062;0061 302A FE2D 0316 059A 0062;0061 302A FE2D 
0316 059A 0062;0061 302A FE2D 0316 059A 0062;0061 302A FE2D 0316 059A 0062; # 
(a◌︭◌֚◌̖◌〪b; a◌〪◌︭◌̖◌֚b; a◌〪◌︭◌̖◌֚b; a◌〪◌︭◌̖◌֚b; a◌〪◌︭◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING CONJOINING MACRON BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA FE27 0062;0061 1DFA 0316 FE27 059A 0062;0061 1DFA 0316 
FE27 059A 0062;0061 1DFA 0316 FE27 059A 0062;0061 1DFA 0316 FE27 059A 0062; # 
(a◌֚◌̖◌᷺◌︧b; a◌᷺◌̖◌︧◌֚b; a◌᷺◌̖◌︧◌֚b; a◌᷺◌̖◌︧◌֚b; a◌᷺◌̖◌︧◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LIGATURE LEFT HALF BELOW, LATIN SMALL LETTER B
+0061 FE27 059A 0316 1DFA 0062;0061 1DFA FE27 0316 059A 0062;0061 1DFA FE27 
0316 059A 0062;0061 1DFA FE27 0316 059A 0062;0061 1DFA FE27 0316 059A 0062; # 
(a◌︧◌֚◌̖◌᷺b; a◌᷺◌︧◌̖◌֚b; a◌᷺◌︧◌̖◌֚b; a◌᷺◌︧◌̖◌֚b; a◌᷺◌︧◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LIGATURE LEFT HALF BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA FE28 0062;0061 1DFA 0316 FE28 059A 0062;0061 1DFA 0316 
FE28 059A 0062;0061 1DFA 0316 FE28 059A 0062;0061 1DFA 0316 FE28 059A 0062; # 
(a◌֚◌̖◌᷺◌︨b; a◌᷺◌̖◌︨◌֚b; a◌᷺◌̖◌︨◌֚b; a◌᷺◌̖◌︨◌֚b; a◌᷺◌̖◌︨◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING LIGATURE RIGHT HALF BELOW, LATIN SMALL LETTER B
+0061 FE28 059A 0316 1DFA 0062;0061 1DFA FE28 0316 059A 0062;0061 1DFA FE28 
0316 059A 0062;0061 1DFA FE28 0316 059A 0062;0061 1DFA FE28 0316 059A 0062; # 
(a◌︨◌֚◌̖◌᷺b; a◌᷺◌︨◌̖◌֚b; a◌᷺◌︨◌̖◌֚b; a◌᷺◌︨◌̖◌֚b; a◌᷺◌︨◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING LIGATURE RIGHT HALF BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA FE29 0062;0061 1DFA 0316 FE29 059A 0062;0061 1DFA 0316 
FE29 059A 0062;0061 1DFA 0316 FE29 059A 0062;0061 1DFA 0316 FE29 059A 0062; # 
(a◌֚◌̖◌᷺◌︩b; a◌᷺◌̖◌︩◌֚b; a◌᷺◌̖◌︩◌֚b; a◌᷺◌̖◌︩◌֚b; a◌᷺◌̖◌︩◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING TILDE LEFT HALF BELOW, LATIN SMALL LETTER B
+0061 FE29 059A 0316 1DFA 0062;0061 1DFA FE29 0316 059A 0062;0061 1DFA FE29 
0316 059A 0062;0061 1DFA FE29 0316 059A 0062;0061 1DFA FE29 0316 059A 0062; # 
(a◌︩◌֚◌̖◌᷺b; a◌᷺◌︩◌̖◌֚b; a◌᷺◌︩◌̖◌֚b; a◌᷺◌︩◌̖◌֚b; a◌᷺◌︩◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING TILDE LEFT HALF BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA FE2A 0062;0061 1DFA 0316 FE2A 059A 0062;0061 1DFA 0316 
FE2A 059A 0062;0061 1DFA 0316 FE2A 059A 0062;0061 1DFA 0316 FE2A 059A 0062; # 
(a◌֚◌̖◌᷺◌︪b; a◌᷺◌̖◌︪◌֚b; a◌᷺◌̖◌︪◌֚b; a◌᷺◌̖◌︪◌֚b; a◌᷺◌̖◌︪◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING TILDE RIGHT HALF BELOW, LATIN SMALL LETTER B
+0061 FE2A 059A 0316 1DFA 0062;0061 1DFA FE2A 0316 059A 0062;0061 1DFA FE2A 
0316 059A 0062;0061 1DFA FE2A 0316 059A 0062;0061 1DFA FE2A 0316 059A 0062; # 
(a◌︪◌֚◌̖◌᷺b; a◌᷺◌︪◌̖◌֚b; a◌᷺◌︪◌̖◌֚b; a◌᷺◌︪◌̖◌֚b; a◌᷺◌︪◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING TILDE RIGHT HALF BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA FE2B 0062;0061 1DFA 0316 FE2B 059A 0062;0061 1DFA 0316 
FE2B 059A 0062;0061 1DFA 0316 FE2B 059A 0062;0061 1DFA 0316 FE2B 059A 0062; # 
(a◌֚◌̖◌᷺◌︫b; a◌᷺◌̖◌︫◌֚b; a◌᷺◌̖◌︫◌֚b; a◌᷺◌̖◌︫◌֚b; a◌᷺◌̖◌︫◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING MACRON LEFT HALF BELOW, LATIN SMALL LETTER B
+0061 FE2B 059A 0316 1DFA 0062;0061 1DFA FE2B 0316 059A 0062;0061 1DFA FE2B 
0316 059A 0062;0061 1DFA FE2B 0316 059A 0062;0061 1DFA FE2B 0316 059A 0062; # 
(a◌︫◌֚◌̖◌᷺b; a◌᷺◌︫◌̖◌֚b; a◌᷺◌︫◌̖◌֚b; a◌᷺◌︫◌̖◌֚b; a◌᷺◌︫◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING MACRON LEFT HALF BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA FE2C 0062;0061 1DFA 0316 FE2C 059A 0062;0061 1DFA 0316 
FE2C 059A 0062;0061 1DFA 0316 FE2C 059A 0062;0061 1DFA 0316 FE2C 059A 0062; # 
(a◌֚◌̖◌᷺◌︬b; a◌᷺◌̖◌︬◌֚b; a◌᷺◌̖◌︬◌֚b; a◌᷺◌̖◌︬◌֚b; a◌᷺◌̖◌︬◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING MACRON RIGHT HALF BELOW, LATIN SMALL LETTER B
+0061 FE2C 059A 0316 1DFA 0062;0061 1DFA FE2C 0316 059A 0062;0061 1DFA FE2C 
0316 059A 0062;0061 1DFA FE2C 0316 059A 0062;0061 1DFA FE2C 0316 059A 0062; # 
(a◌︬◌֚◌̖◌᷺b; a◌᷺◌︬◌̖◌֚b; a◌᷺◌︬◌̖◌֚b; a◌᷺◌︬◌̖◌֚b; a◌᷺◌︬◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING MACRON RIGHT HALF BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA FE2D 0062;0061 1DFA 0316 FE2D 059A 0062;0061 1DFA 0316 
FE2D 059A 0062;0061 1DFA 0316 FE2D 059A 0062;0061 1DFA 0316 FE2D 059A 0062; # 
(a◌֚◌̖◌᷺◌︭b; a◌᷺◌̖◌︭◌֚b; a◌᷺◌̖◌︭◌֚b; a◌᷺◌̖◌︭◌֚b; a◌᷺◌̖◌︭◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COMBINING CONJOINING MACRON BELOW, LATIN SMALL LETTER B
+0061 FE2D 059A 0316 1DFA 0062;0061 1DFA FE2D 0316 059A 0062;0061 1DFA FE2D 
0316 059A 0062;0061 1DFA FE2D 0316 059A 0062;0061 1DFA FE2D 0316 059A 0062; # 
(a◌︭◌֚◌̖◌᷺b; a◌᷺◌︭◌̖◌֚b; a◌᷺◌︭◌̖◌֚b; a◌᷺◌︭◌̖◌֚b; a◌᷺◌︭◌̖◌֚b; ) LATIN SMALL 
LETTER A, COMBINING CONJOINING MACRON BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE FE2E 0062;00E0 05AE FE2E 0315 0062;0061 05AE 0300 FE2E 
0315 0062;00E0 05AE FE2E 0315 0062;0061 05AE 0300 FE2E 0315 0062; # 
(a◌̕◌̀◌֮◌︮b; à◌֮◌︮◌̕b; a◌֮◌̀◌︮◌̕b; à◌֮◌︮◌̕b; a◌֮◌̀◌︮◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING CYRILLIC TITLO LEFT HALF, LATIN SMALL LETTER B
 0061 FE2E 0315 0300 05AE 0062;0061 05AE FE2E 0300 0315 0062;0061 05AE FE2E 
0300 0315 0062;0061 05AE FE2E 0300 0315 0062;0061 05AE FE2E 0300 0315 0062; # 
(a◌︮◌̕◌̀◌֮b; a◌֮◌︮◌̀◌̕b; a◌֮◌︮◌̀◌̕b; a◌֮◌︮◌̀◌̕b; a◌֮◌︮◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING CYRILLIC TITLO LEFT HALF, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE FE2F 0062;00E0 05AE FE2F 0315 0062;0061 05AE 0300 FE2F 
0315 0062;00E0 05AE FE2F 0315 0062;0061 05AE 0300 FE2F 0315 0062; # 
(a◌̕◌̀◌֮◌︯b; à◌֮◌︯◌̕b; a◌֮◌̀◌︯◌̕b; à◌֮◌︯◌̕b; a◌֮◌̀◌︯◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING CYRILLIC TITLO RIGHT HALF, LATIN SMALL LETTER B
 0061 FE2F 0315 0300 05AE 0062;0061 05AE FE2F 0300 0315 0062;0061 05AE FE2F 
0300 0315 0062;0061 05AE FE2F 0300 0315 0062;0061 05AE FE2F 0300 0315 0062; # 
(a◌︯◌̕◌̀◌֮b; a◌֮◌︯◌̀◌̕b; a◌֮◌︯◌̀◌̕b; a◌֮◌︯◌̀◌̕b; a◌֮◌︯◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING CYRILLIC TITLO RIGHT HALF, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 101FD 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 
101FD 059A 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 101FD 059A 0062; 
# (a◌֚◌̖◌〪◌𐇽b; a◌〪◌̖◌𐇽◌֚b; a◌〪◌̖◌𐇽◌֚b; a◌〪◌̖◌𐇽◌֚b; a◌〪◌̖◌𐇽◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE, LATIN SMALL LETTER B
-0061 101FD 059A 0316 302A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 
0316 059A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 0316 059A 0062; # 
(a◌𐇽◌֚◌̖◌〪b; a◌〪◌𐇽◌̖◌֚b; a◌〪◌𐇽◌̖◌֚b; a◌〪◌𐇽◌̖◌֚b; a◌〪◌𐇽◌̖◌֚b; ) LATIN SMALL 
LETTER A, PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 102E0 0062;0061 302A 0316 102E0 059A 0062;0061 302A 0316 
102E0 059A 0062;0061 302A 0316 102E0 059A 0062;0061 302A 0316 102E0 059A 0062; 
# (a◌֚◌̖◌〪◌𐋠b; a◌〪◌̖◌𐋠◌֚b; a◌〪◌̖◌𐋠◌֚b; a◌〪◌̖◌𐋠◌֚b; a◌〪◌̖◌𐋠◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, COPTIC EPACT THOUSANDS MARK, LATIN SMALL LETTER B
-0061 102E0 059A 0316 302A 0062;0061 302A 102E0 0316 059A 0062;0061 302A 102E0 
0316 059A 0062;0061 302A 102E0 0316 059A 0062;0061 302A 102E0 0316 059A 0062; # 
(a◌𐋠◌֚◌̖◌〪b; a◌〪◌𐋠◌̖◌֚b; a◌〪◌𐋠◌̖◌֚b; a◌〪◌𐋠◌̖◌֚b; a◌〪◌𐋠◌̖◌֚b; ) LATIN SMALL 
LETTER A, COPTIC EPACT THOUSANDS MARK, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 101FD 0062;0061 1DFA 0316 101FD 059A 0062;0061 1DFA 0316 
101FD 059A 0062;0061 1DFA 0316 101FD 059A 0062;0061 1DFA 0316 101FD 059A 0062; 
# (a◌֚◌̖◌᷺◌𐇽b; a◌᷺◌̖◌𐇽◌֚b; a◌᷺◌̖◌𐇽◌֚b; a◌᷺◌̖◌𐇽◌֚b; a◌᷺◌̖◌𐇽◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE, LATIN SMALL LETTER B
+0061 101FD 059A 0316 1DFA 0062;0061 1DFA 101FD 0316 059A 0062;0061 1DFA 101FD 
0316 059A 0062;0061 1DFA 101FD 0316 059A 0062;0061 1DFA 101FD 0316 059A 0062; # 
(a◌𐇽◌֚◌̖◌᷺b; a◌᷺◌𐇽◌̖◌֚b; a◌᷺◌𐇽◌̖◌֚b; a◌᷺◌𐇽◌̖◌֚b; a◌᷺◌𐇽◌̖◌֚b; ) LATIN SMALL 
LETTER A, PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 102E0 0062;0061 1DFA 0316 102E0 059A 0062;0061 1DFA 0316 
102E0 059A 0062;0061 1DFA 0316 102E0 059A 0062;0061 1DFA 0316 102E0 059A 0062; 
# (a◌֚◌̖◌᷺◌𐋠b; a◌᷺◌̖◌𐋠◌֚b; a◌᷺◌̖◌𐋠◌֚b; a◌᷺◌̖◌𐋠◌֚b; a◌᷺◌̖◌𐋠◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, COPTIC EPACT THOUSANDS MARK, LATIN SMALL LETTER B
+0061 102E0 059A 0316 1DFA 0062;0061 1DFA 102E0 0316 059A 0062;0061 1DFA 102E0 
0316 059A 0062;0061 1DFA 102E0 0316 059A 0062;0061 1DFA 102E0 0316 059A 0062; # 
(a◌𐋠◌֚◌̖◌᷺b; a◌᷺◌𐋠◌̖◌֚b; a◌᷺◌𐋠◌̖◌֚b; a◌᷺◌𐋠◌̖◌֚b; a◌᷺◌𐋠◌̖◌֚b; ) LATIN SMALL 
LETTER A, COPTIC EPACT THOUSANDS MARK, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10376 0062;00E0 05AE 10376 0315 0062;0061 05AE 0300 10376 
0315 0062;00E0 05AE 10376 0315 0062;0061 05AE 0300 10376 0315 0062; # 
(a◌̕◌̀◌֮◌𐍶b; à◌֮◌𐍶◌̕b; a◌֮◌̀◌𐍶◌̕b; à◌֮◌𐍶◌̕b; a◌֮◌̀◌𐍶◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING OLD PERMIC LETTER AN, LATIN SMALL LETTER B
 0061 10376 0315 0300 05AE 0062;0061 05AE 10376 0300 0315 0062;0061 05AE 10376 
0300 0315 0062;0061 05AE 10376 0300 0315 0062;0061 05AE 10376 0300 0315 0062; # 
(a◌𐍶◌̕◌̀◌֮b; a◌֮◌𐍶◌̀◌̕b; a◌֮◌𐍶◌̀◌̕b; a◌֮◌𐍶◌̀◌̕b; a◌֮◌𐍶◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING OLD PERMIC LETTER AN, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10377 0062;00E0 05AE 10377 0315 0062;0061 05AE 0300 10377 
0315 0062;00E0 05AE 10377 0315 0062;0061 05AE 0300 10377 0315 0062; # 
(a◌̕◌̀◌֮◌𐍷b; à◌֮◌𐍷◌̕b; a◌֮◌̀◌𐍷◌̕b; à◌֮◌𐍷◌̕b; a◌֮◌̀◌𐍷◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING OLD PERMIC LETTER DOI, LATIN SMALL LETTER B
@@ -18341,22 +18468,22 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 10379 0315 0300 05AE 0062;0061 05AE 10379 0300 0315 0062;0061 05AE 10379 
0300 0315 0062;0061 05AE 10379 0300 0315 0062;0061 05AE 10379 0300 0315 0062; # 
(a◌𐍹◌̕◌̀◌֮b; a◌֮◌𐍹◌̀◌̕b; a◌֮◌𐍹◌̀◌̕b; a◌֮◌𐍹◌̀◌̕b; a◌֮◌𐍹◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING OLD PERMIC LETTER NENOE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1037A 0062;00E0 05AE 1037A 0315 0062;0061 05AE 0300 1037A 
0315 0062;00E0 05AE 1037A 0315 0062;0061 05AE 0300 1037A 0315 0062; # 
(a◌̕◌̀◌֮◌𐍺b; à◌֮◌𐍺◌̕b; a◌֮◌̀◌𐍺◌̕b; à◌֮◌𐍺◌̕b; a◌֮◌̀◌𐍺◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
COMBINING OLD PERMIC LETTER SII, LATIN SMALL LETTER B
 0061 1037A 0315 0300 05AE 0062;0061 05AE 1037A 0300 0315 0062;0061 05AE 1037A 
0300 0315 0062;0061 05AE 1037A 0300 0315 0062;0061 05AE 1037A 0300 0315 0062; # 
(a◌𐍺◌̕◌̀◌֮b; a◌֮◌𐍺◌̀◌̕b; a◌֮◌𐍺◌̀◌̕b; a◌֮◌𐍺◌̀◌̕b; a◌֮◌𐍺◌̀◌̕b; ) LATIN SMALL 
LETTER A, COMBINING OLD PERMIC LETTER SII, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 10A0D 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 
10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062; 
# (a◌֚◌̖◌〪◌𐨍b; a◌〪◌̖◌𐨍◌֚b; a◌〪◌̖◌𐨍◌֚b; a◌〪◌̖◌𐨍◌֚b; a◌〪◌̖◌𐨍◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, KHAROSHTHI SIGN DOUBLE RING BELOW, LATIN SMALL LETTER B
-0061 10A0D 059A 0316 302A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 
0316 059A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062; # 
(a◌𐨍◌֚◌̖◌〪b; a◌〪◌𐨍◌̖◌֚b; a◌〪◌𐨍◌̖◌֚b; a◌〪◌𐨍◌̖◌֚b; a◌〪◌𐨍◌̖◌֚b; ) LATIN SMALL 
LETTER A, KHAROSHTHI SIGN DOUBLE RING BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10A0D 0062;0061 1DFA 0316 10A0D 059A 0062;0061 1DFA 0316 
10A0D 059A 0062;0061 1DFA 0316 10A0D 059A 0062;0061 1DFA 0316 10A0D 059A 0062; 
# (a◌֚◌̖◌᷺◌𐨍b; a◌᷺◌̖◌𐨍◌֚b; a◌᷺◌̖◌𐨍◌֚b; a◌᷺◌̖◌𐨍◌֚b; a◌᷺◌̖◌𐨍◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, KHAROSHTHI SIGN DOUBLE RING BELOW, LATIN SMALL LETTER B
+0061 10A0D 059A 0316 1DFA 0062;0061 1DFA 10A0D 0316 059A 0062;0061 1DFA 10A0D 
0316 059A 0062;0061 1DFA 10A0D 0316 059A 0062;0061 1DFA 10A0D 0316 059A 0062; # 
(a◌𐨍◌֚◌̖◌᷺b; a◌᷺◌𐨍◌̖◌֚b; a◌᷺◌𐨍◌̖◌֚b; a◌᷺◌𐨍◌̖◌֚b; a◌᷺◌𐨍◌̖◌֚b; ) LATIN SMALL 
LETTER A, KHAROSHTHI SIGN DOUBLE RING BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10A0F 0062;00E0 05AE 10A0F 0315 0062;0061 05AE 0300 10A0F 
0315 0062;00E0 05AE 10A0F 0315 0062;0061 05AE 0300 10A0F 0315 0062; # 
(a◌̕◌̀◌֮◌𐨏b; à◌֮◌𐨏◌̕b; a◌֮◌̀◌𐨏◌̕b; à◌֮◌𐨏◌̕b; a◌֮◌̀◌𐨏◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
KHAROSHTHI SIGN VISARGA, LATIN SMALL LETTER B
 0061 10A0F 0315 0300 05AE 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 
0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062; # 
(a◌𐨏◌̕◌̀◌֮b; a◌֮◌𐨏◌̀◌̕b; a◌֮◌𐨏◌̀◌̕b; a◌֮◌𐨏◌̀◌̕b; a◌֮◌𐨏◌̀◌̕b; ) LATIN SMALL 
LETTER A, KHAROSHTHI SIGN VISARGA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10A38 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 
0315 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062; # 
(a◌̕◌̀◌֮◌𐨸b; à◌֮◌𐨸◌̕b; a◌֮◌̀◌𐨸◌̕b; à◌֮◌𐨸◌̕b; a◌֮◌̀◌𐨸◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
KHAROSHTHI SIGN BAR ABOVE, LATIN SMALL LETTER B
 0061 10A38 0315 0300 05AE 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 
0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062; # 
(a◌𐨸◌̕◌̀◌֮b; a◌֮◌𐨸◌̀◌̕b; a◌֮◌𐨸◌̀◌̕b; a◌֮◌𐨸◌̀◌̕b; a◌֮◌𐨸◌̀◌̕b; ) LATIN SMALL 
LETTER A, KHAROSHTHI SIGN BAR ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 16FF0 0334 10A39 0062;0061 0334 10A39 16FF0 0062;0061 0334 10A39 16FF0 
0062;0061 0334 10A39 16FF0 0062;0061 0334 10A39 16FF0 0062; # (a𖿰◌̴◌𐨹b; 
a◌̴◌𐨹𖿰b; a◌̴◌𐨹𖿰b; a◌̴◌𐨹𖿰b; a◌̴◌𐨹𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE 
ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, KHAROSHTHI SIGN CAUDA, 
LATIN SMALL LETTER B
 0061 10A39 16FF0 0334 0062;0061 10A39 0334 16FF0 0062;0061 10A39 0334 16FF0 
0062;0061 10A39 0334 16FF0 0062;0061 10A39 0334 16FF0 0062; # (a◌𐨹𖿰◌̴b; 
a◌𐨹◌̴𖿰b; a◌𐨹◌̴𖿰b; a◌𐨹◌̴𖿰b; a◌𐨹◌̴𖿰b; ) LATIN SMALL LETTER A, KHAROSHTHI SIGN 
CAUDA, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, LATIN 
SMALL LETTER B
-0061 059A 0316 302A 10A3A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 
10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062; 
# (a◌֚◌̖◌〪◌𐨺b; a◌〪◌̖◌𐨺◌֚b; a◌〪◌̖◌𐨺◌֚b; a◌〪◌̖◌𐨺◌֚b; a◌〪◌̖◌𐨺◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, KHAROSHTHI SIGN DOT BELOW, LATIN SMALL LETTER B
-0061 10A3A 059A 0316 302A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 
0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062; # 
(a◌𐨺◌֚◌̖◌〪b; a◌〪◌𐨺◌̖◌֚b; a◌〪◌𐨺◌̖◌֚b; a◌〪◌𐨺◌̖◌֚b; a◌〪◌𐨺◌̖◌֚b; ) LATIN SMALL 
LETTER A, KHAROSHTHI SIGN DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10A3A 0062;0061 1DFA 0316 10A3A 059A 0062;0061 1DFA 0316 
10A3A 059A 0062;0061 1DFA 0316 10A3A 059A 0062;0061 1DFA 0316 10A3A 059A 0062; 
# (a◌֚◌̖◌᷺◌𐨺b; a◌᷺◌̖◌𐨺◌֚b; a◌᷺◌̖◌𐨺◌֚b; a◌᷺◌̖◌𐨺◌֚b; a◌᷺◌̖◌𐨺◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, KHAROSHTHI SIGN DOT BELOW, LATIN SMALL LETTER B
+0061 10A3A 059A 0316 1DFA 0062;0061 1DFA 10A3A 0316 059A 0062;0061 1DFA 10A3A 
0316 059A 0062;0061 1DFA 10A3A 0316 059A 0062;0061 1DFA 10A3A 0316 059A 0062; # 
(a◌𐨺◌֚◌̖◌᷺b; a◌᷺◌𐨺◌̖◌֚b; a◌᷺◌𐨺◌̖◌֚b; a◌᷺◌𐨺◌̖◌֚b; a◌᷺◌𐨺◌̖◌֚b; ) LATIN SMALL 
LETTER A, KHAROSHTHI SIGN DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 05B0 094D 3099 10A3F 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 
10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062; 
# (a◌ְ◌्◌゙◌𐨿b; a◌゙◌्◌𐨿◌ְb; a◌゙◌्◌𐨿◌ְb; a◌゙◌्◌𐨿◌ְb; a◌゙◌्◌𐨿◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, KHAROSHTHI VIRAMA, LATIN SMALL LETTER B
 0061 10A3F 05B0 094D 3099 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 
094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062; # 
(a◌𐨿◌ְ◌्◌゙b; a◌゙◌𐨿◌्◌ְb; a◌゙◌𐨿◌्◌ְb; a◌゙◌𐨿◌्◌ְb; a◌゙◌𐨿◌्◌ְb; ) LATIN SMALL 
LETTER A, KHAROSHTHI VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10AE5 0062;00E0 05AE 10AE5 0315 0062;0061 05AE 0300 10AE5 
0315 0062;00E0 05AE 10AE5 0315 0062;0061 05AE 0300 10AE5 0315 0062; # 
(a◌̕◌̀◌֮◌𐫥b; à◌֮◌𐫥◌̕b; a◌֮◌̀◌𐫥◌̕b; à◌֮◌𐫥◌̕b; a◌֮◌̀◌𐫥◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
MANICHAEAN ABBREVIATION MARK ABOVE, LATIN SMALL LETTER B
 0061 10AE5 0315 0300 05AE 0062;0061 05AE 10AE5 0300 0315 0062;0061 05AE 10AE5 
0300 0315 0062;0061 05AE 10AE5 0300 0315 0062;0061 05AE 10AE5 0300 0315 0062; # 
(a◌𐫥◌̕◌̀◌֮b; a◌֮◌𐫥◌̀◌̕b; a◌֮◌𐫥◌̀◌̕b; a◌֮◌𐫥◌̀◌̕b; a◌֮◌𐫥◌̀◌̕b; ) LATIN SMALL 
LETTER A, MANICHAEAN ABBREVIATION MARK ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 10AE6 0062;0061 302A 0316 10AE6 059A 0062;0061 302A 0316 
10AE6 059A 0062;0061 302A 0316 10AE6 059A 0062;0061 302A 0316 10AE6 059A 0062; 
# (a◌֚◌̖◌〪◌𐫦b; a◌〪◌̖◌𐫦◌֚b; a◌〪◌̖◌𐫦◌֚b; a◌〪◌̖◌𐫦◌֚b; a◌〪◌̖◌𐫦◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MANICHAEAN ABBREVIATION MARK BELOW, LATIN SMALL LETTER B
-0061 10AE6 059A 0316 302A 0062;0061 302A 10AE6 0316 059A 0062;0061 302A 10AE6 
0316 059A 0062;0061 302A 10AE6 0316 059A 0062;0061 302A 10AE6 0316 059A 0062; # 
(a◌𐫦◌֚◌̖◌〪b; a◌〪◌𐫦◌̖◌֚b; a◌〪◌𐫦◌̖◌֚b; a◌〪◌𐫦◌̖◌֚b; a◌〪◌𐫦◌̖◌֚b; ) LATIN SMALL 
LETTER A, MANICHAEAN ABBREVIATION MARK BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10AE6 0062;0061 1DFA 0316 10AE6 059A 0062;0061 1DFA 0316 
10AE6 059A 0062;0061 1DFA 0316 10AE6 059A 0062;0061 1DFA 0316 10AE6 059A 0062; 
# (a◌֚◌̖◌᷺◌𐫦b; a◌᷺◌̖◌𐫦◌֚b; a◌᷺◌̖◌𐫦◌֚b; a◌᷺◌̖◌𐫦◌֚b; a◌᷺◌̖◌𐫦◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MANICHAEAN ABBREVIATION MARK BELOW, LATIN SMALL LETTER B
+0061 10AE6 059A 0316 1DFA 0062;0061 1DFA 10AE6 0316 059A 0062;0061 1DFA 10AE6 
0316 059A 0062;0061 1DFA 10AE6 0316 059A 0062;0061 1DFA 10AE6 0316 059A 0062; # 
(a◌𐫦◌֚◌̖◌᷺b; a◌᷺◌𐫦◌̖◌֚b; a◌᷺◌𐫦◌̖◌֚b; a◌᷺◌𐫦◌̖◌֚b; a◌᷺◌𐫦◌̖◌֚b; ) LATIN SMALL 
LETTER A, MANICHAEAN ABBREVIATION MARK BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10D24 0062;00E0 05AE 10D24 0315 0062;0061 05AE 0300 10D24 
0315 0062;00E0 05AE 10D24 0315 0062;0061 05AE 0300 10D24 0315 0062; # 
(a◌̕◌̀◌֮◌𐴤b; à◌֮◌𐴤◌̕b; a◌֮◌̀◌𐴤◌̕b; à◌֮◌𐴤◌̕b; a◌֮◌̀◌𐴤◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HANIFI ROHINGYA SIGN HARBAHAY, LATIN SMALL LETTER B
 0061 10D24 0315 0300 05AE 0062;0061 05AE 10D24 0300 0315 0062;0061 05AE 10D24 
0300 0315 0062;0061 05AE 10D24 0300 0315 0062;0061 05AE 10D24 0300 0315 0062; # 
(a◌𐴤◌̕◌̀◌֮b; a◌֮◌𐴤◌̀◌̕b; a◌֮◌𐴤◌̀◌̕b; a◌֮◌𐴤◌̀◌̕b; a◌֮◌𐴤◌̀◌̕b; ) LATIN SMALL 
LETTER A, HANIFI ROHINGYA SIGN HARBAHAY, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10D25 0062;00E0 05AE 10D25 0315 0062;0061 05AE 0300 10D25 
0315 0062;00E0 05AE 10D25 0315 0062;0061 05AE 0300 10D25 0315 0062; # 
(a◌̕◌̀◌֮◌𐴥b; à◌֮◌𐴥◌̕b; a◌֮◌̀◌𐴥◌̕b; à◌֮◌𐴥◌̕b; a◌֮◌̀◌𐴥◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
HANIFI ROHINGYA SIGN TAHALA, LATIN SMALL LETTER B
@@ -18369,30 +18496,40 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 10EAB 0315 0300 05AE 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 
0300 0315 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 0300 0315 0062; # 
(a◌𐺫◌̕◌̀◌֮b; a◌֮◌𐺫◌̀◌̕b; a◌֮◌𐺫◌̀◌̕b; a◌֮◌𐺫◌̀◌̕b; a◌֮◌𐺫◌̀◌̕b; ) LATIN SMALL 
LETTER A, YEZIDI COMBINING HAMZA MARK, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10EAC 0062;00E0 05AE 10EAC 0315 0062;0061 05AE 0300 10EAC 
0315 0062;00E0 05AE 10EAC 0315 0062;0061 05AE 0300 10EAC 0315 0062; # 
(a◌̕◌̀◌֮◌𐺬b; à◌֮◌𐺬◌̕b; a◌֮◌̀◌𐺬◌̕b; à◌֮◌𐺬◌̕b; a◌֮◌̀◌𐺬◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
YEZIDI COMBINING MADDA MARK, LATIN SMALL LETTER B
 0061 10EAC 0315 0300 05AE 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 
0300 0315 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 0300 0315 0062; # 
(a◌𐺬◌̕◌̀◌֮b; a◌֮◌𐺬◌̀◌̕b; a◌֮◌𐺬◌̀◌̕b; a◌֮◌𐺬◌̀◌̕b; a◌֮◌𐺬◌̀◌̕b; ) LATIN SMALL 
LETTER A, YEZIDI COMBINING MADDA MARK, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 10F46 0062;0061 302A 0316 10F46 059A 0062;0061 302A 0316 
10F46 059A 0062;0061 302A 0316 10F46 059A 0062;0061 302A 0316 10F46 059A 0062; 
# (a◌֚◌̖◌〪◌𐽆b; a◌〪◌̖◌𐽆◌֚b; a◌〪◌̖◌𐽆◌֚b; a◌〪◌̖◌𐽆◌֚b; a◌〪◌̖◌𐽆◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SOGDIAN COMBINING DOT BELOW, LATIN SMALL LETTER B
-0061 10F46 059A 0316 302A 0062;0061 302A 10F46 0316 059A 0062;0061 302A 10F46 
0316 059A 0062;0061 302A 10F46 0316 059A 0062;0061 302A 10F46 0316 059A 0062; # 
(a◌𐽆◌֚◌̖◌〪b; a◌〪◌𐽆◌̖◌֚b; a◌〪◌𐽆◌̖◌֚b; a◌〪◌𐽆◌̖◌֚b; a◌〪◌𐽆◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 10F47 0062;0061 302A 0316 10F47 059A 0062;0061 302A 0316 
10F47 059A 0062;0061 302A 0316 10F47 059A 0062;0061 302A 0316 10F47 059A 0062; 
# (a◌֚◌̖◌〪◌𐽇b; a◌〪◌̖◌𐽇◌֚b; a◌〪◌̖◌𐽇◌֚b; a◌〪◌̖◌𐽇◌֚b; a◌〪◌̖◌𐽇◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SOGDIAN COMBINING TWO DOTS BELOW, LATIN SMALL LETTER B
-0061 10F47 059A 0316 302A 0062;0061 302A 10F47 0316 059A 0062;0061 302A 10F47 
0316 059A 0062;0061 302A 10F47 0316 059A 0062;0061 302A 10F47 0316 059A 0062; # 
(a◌𐽇◌֚◌̖◌〪b; a◌〪◌𐽇◌̖◌֚b; a◌〪◌𐽇◌̖◌֚b; a◌〪◌𐽇◌̖◌֚b; a◌〪◌𐽇◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING TWO DOTS BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10F46 0062;0061 1DFA 0316 10F46 059A 0062;0061 1DFA 0316 
10F46 059A 0062;0061 1DFA 0316 10F46 059A 0062;0061 1DFA 0316 10F46 059A 0062; 
# (a◌֚◌̖◌᷺◌𐽆b; a◌᷺◌̖◌𐽆◌֚b; a◌᷺◌̖◌𐽆◌֚b; a◌᷺◌̖◌𐽆◌֚b; a◌᷺◌̖◌𐽆◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SOGDIAN COMBINING DOT BELOW, LATIN SMALL LETTER B
+0061 10F46 059A 0316 1DFA 0062;0061 1DFA 10F46 0316 059A 0062;0061 1DFA 10F46 
0316 059A 0062;0061 1DFA 10F46 0316 059A 0062;0061 1DFA 10F46 0316 059A 0062; # 
(a◌𐽆◌֚◌̖◌᷺b; a◌᷺◌𐽆◌̖◌֚b; a◌᷺◌𐽆◌̖◌֚b; a◌᷺◌𐽆◌̖◌֚b; a◌᷺◌𐽆◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10F47 0062;0061 1DFA 0316 10F47 059A 0062;0061 1DFA 0316 
10F47 059A 0062;0061 1DFA 0316 10F47 059A 0062;0061 1DFA 0316 10F47 059A 0062; 
# (a◌֚◌̖◌᷺◌𐽇b; a◌᷺◌̖◌𐽇◌֚b; a◌᷺◌̖◌𐽇◌֚b; a◌᷺◌̖◌𐽇◌֚b; a◌᷺◌̖◌𐽇◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SOGDIAN COMBINING TWO DOTS BELOW, LATIN SMALL LETTER B
+0061 10F47 059A 0316 1DFA 0062;0061 1DFA 10F47 0316 059A 0062;0061 1DFA 10F47 
0316 059A 0062;0061 1DFA 10F47 0316 059A 0062;0061 1DFA 10F47 0316 059A 0062; # 
(a◌𐽇◌֚◌̖◌᷺b; a◌᷺◌𐽇◌̖◌֚b; a◌᷺◌𐽇◌̖◌֚b; a◌᷺◌𐽇◌̖◌֚b; a◌᷺◌𐽇◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING TWO DOTS BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10F48 0062;00E0 05AE 10F48 0315 0062;0061 05AE 0300 10F48 
0315 0062;00E0 05AE 10F48 0315 0062;0061 05AE 0300 10F48 0315 0062; # 
(a◌̕◌̀◌֮◌𐽈b; à◌֮◌𐽈◌̕b; a◌֮◌̀◌𐽈◌̕b; à◌֮◌𐽈◌̕b; a◌֮◌̀◌𐽈◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SOGDIAN COMBINING DOT ABOVE, LATIN SMALL LETTER B
 0061 10F48 0315 0300 05AE 0062;0061 05AE 10F48 0300 0315 0062;0061 05AE 10F48 
0300 0315 0062;0061 05AE 10F48 0300 0315 0062;0061 05AE 10F48 0300 0315 0062; # 
(a◌𐽈◌̕◌̀◌֮b; a◌֮◌𐽈◌̀◌̕b; a◌֮◌𐽈◌̀◌̕b; a◌֮◌𐽈◌̀◌̕b; a◌֮◌𐽈◌̀◌̕b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING DOT ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10F49 0062;00E0 05AE 10F49 0315 0062;0061 05AE 0300 10F49 
0315 0062;00E0 05AE 10F49 0315 0062;0061 05AE 0300 10F49 0315 0062; # 
(a◌̕◌̀◌֮◌𐽉b; à◌֮◌𐽉◌̕b; a◌֮◌̀◌𐽉◌̕b; à◌֮◌𐽉◌̕b; a◌֮◌̀◌𐽉◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SOGDIAN COMBINING TWO DOTS ABOVE, LATIN SMALL LETTER B
 0061 10F49 0315 0300 05AE 0062;0061 05AE 10F49 0300 0315 0062;0061 05AE 10F49 
0300 0315 0062;0061 05AE 10F49 0300 0315 0062;0061 05AE 10F49 0300 0315 0062; # 
(a◌𐽉◌̕◌̀◌֮b; a◌֮◌𐽉◌̀◌̕b; a◌֮◌𐽉◌̀◌̕b; a◌֮◌𐽉◌̀◌̕b; a◌֮◌𐽉◌̀◌̕b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING TWO DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10F4A 0062;00E0 05AE 10F4A 0315 0062;0061 05AE 0300 10F4A 
0315 0062;00E0 05AE 10F4A 0315 0062;0061 05AE 0300 10F4A 0315 0062; # 
(a◌̕◌̀◌֮◌𐽊b; à◌֮◌𐽊◌̕b; a◌֮◌̀◌𐽊◌̕b; à◌֮◌𐽊◌̕b; a◌֮◌̀◌𐽊◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SOGDIAN COMBINING CURVE ABOVE, LATIN SMALL LETTER B
 0061 10F4A 0315 0300 05AE 0062;0061 05AE 10F4A 0300 0315 0062;0061 05AE 10F4A 
0300 0315 0062;0061 05AE 10F4A 0300 0315 0062;0061 05AE 10F4A 0300 0315 0062; # 
(a◌𐽊◌̕◌̀◌֮b; a◌֮◌𐽊◌̀◌̕b; a◌֮◌𐽊◌̀◌̕b; a◌֮◌𐽊◌̀◌̕b; a◌֮◌𐽊◌̀◌̕b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING CURVE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 10F4B 0062;0061 302A 0316 10F4B 059A 0062;0061 302A 0316 
10F4B 059A 0062;0061 302A 0316 10F4B 059A 0062;0061 302A 0316 10F4B 059A 0062; 
# (a◌֚◌̖◌〪◌𐽋b; a◌〪◌̖◌𐽋◌֚b; a◌〪◌̖◌𐽋◌֚b; a◌〪◌̖◌𐽋◌֚b; a◌〪◌̖◌𐽋◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SOGDIAN COMBINING CURVE BELOW, LATIN SMALL LETTER B
-0061 10F4B 059A 0316 302A 0062;0061 302A 10F4B 0316 059A 0062;0061 302A 10F4B 
0316 059A 0062;0061 302A 10F4B 0316 059A 0062;0061 302A 10F4B 0316 059A 0062; # 
(a◌𐽋◌֚◌̖◌〪b; a◌〪◌𐽋◌̖◌֚b; a◌〪◌𐽋◌̖◌֚b; a◌〪◌𐽋◌̖◌֚b; a◌〪◌𐽋◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING CURVE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10F4B 0062;0061 1DFA 0316 10F4B 059A 0062;0061 1DFA 0316 
10F4B 059A 0062;0061 1DFA 0316 10F4B 059A 0062;0061 1DFA 0316 10F4B 059A 0062; 
# (a◌֚◌̖◌᷺◌𐽋b; a◌᷺◌̖◌𐽋◌֚b; a◌᷺◌̖◌𐽋◌֚b; a◌᷺◌̖◌𐽋◌֚b; a◌᷺◌̖◌𐽋◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SOGDIAN COMBINING CURVE BELOW, LATIN SMALL LETTER B
+0061 10F4B 059A 0316 1DFA 0062;0061 1DFA 10F4B 0316 059A 0062;0061 1DFA 10F4B 
0316 059A 0062;0061 1DFA 10F4B 0316 059A 0062;0061 1DFA 10F4B 0316 059A 0062; # 
(a◌𐽋◌֚◌̖◌᷺b; a◌᷺◌𐽋◌̖◌֚b; a◌᷺◌𐽋◌̖◌֚b; a◌᷺◌𐽋◌̖◌֚b; a◌᷺◌𐽋◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING CURVE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 10F4C 0062;00E0 05AE 10F4C 0315 0062;0061 05AE 0300 10F4C 
0315 0062;00E0 05AE 10F4C 0315 0062;0061 05AE 0300 10F4C 0315 0062; # 
(a◌̕◌̀◌֮◌𐽌b; à◌֮◌𐽌◌̕b; a◌֮◌̀◌𐽌◌̕b; à◌֮◌𐽌◌̕b; a◌֮◌̀◌𐽌◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
SOGDIAN COMBINING HOOK ABOVE, LATIN SMALL LETTER B
 0061 10F4C 0315 0300 05AE 0062;0061 05AE 10F4C 0300 0315 0062;0061 05AE 10F4C 
0300 0315 0062;0061 05AE 10F4C 0300 0315 0062;0061 05AE 10F4C 0300 0315 0062; # 
(a◌𐽌◌̕◌̀◌֮b; a◌֮◌𐽌◌̀◌̕b; a◌֮◌𐽌◌̀◌̕b; a◌֮◌𐽌◌̀◌̕b; a◌֮◌𐽌◌̀◌̕b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING HOOK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 10F4D 0062;0061 302A 0316 10F4D 059A 0062;0061 302A 0316 
10F4D 059A 0062;0061 302A 0316 10F4D 059A 0062;0061 302A 0316 10F4D 059A 0062; 
# (a◌֚◌̖◌〪◌𐽍b; a◌〪◌̖◌𐽍◌֚b; a◌〪◌̖◌𐽍◌֚b; a◌〪◌̖◌𐽍◌֚b; a◌〪◌̖◌𐽍◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SOGDIAN COMBINING HOOK BELOW, LATIN SMALL LETTER B
-0061 10F4D 059A 0316 302A 0062;0061 302A 10F4D 0316 059A 0062;0061 302A 10F4D 
0316 059A 0062;0061 302A 10F4D 0316 059A 0062;0061 302A 10F4D 0316 059A 0062; # 
(a◌𐽍◌֚◌̖◌〪b; a◌〪◌𐽍◌̖◌֚b; a◌〪◌𐽍◌̖◌֚b; a◌〪◌𐽍◌̖◌֚b; a◌〪◌𐽍◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING HOOK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 10F4E 0062;0061 302A 0316 10F4E 059A 0062;0061 302A 0316 
10F4E 059A 0062;0061 302A 0316 10F4E 059A 0062;0061 302A 0316 10F4E 059A 0062; 
# (a◌֚◌̖◌〪◌𐽎b; a◌〪◌̖◌𐽎◌֚b; a◌〪◌̖◌𐽎◌֚b; a◌〪◌̖◌𐽎◌֚b; a◌〪◌̖◌𐽎◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SOGDIAN COMBINING LONG HOOK BELOW, LATIN SMALL LETTER B
-0061 10F4E 059A 0316 302A 0062;0061 302A 10F4E 0316 059A 0062;0061 302A 10F4E 
0316 059A 0062;0061 302A 10F4E 0316 059A 0062;0061 302A 10F4E 0316 059A 0062; # 
(a◌𐽎◌֚◌̖◌〪b; a◌〪◌𐽎◌̖◌֚b; a◌〪◌𐽎◌̖◌֚b; a◌〪◌𐽎◌̖◌֚b; a◌〪◌𐽎◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING LONG HOOK BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 10F4F 0062;0061 302A 0316 10F4F 059A 0062;0061 302A 0316 
10F4F 059A 0062;0061 302A 0316 10F4F 059A 0062;0061 302A 0316 10F4F 059A 0062; 
# (a◌֚◌̖◌〪◌𐽏b; a◌〪◌̖◌𐽏◌֚b; a◌〪◌̖◌𐽏◌֚b; a◌〪◌̖◌𐽏◌֚b; a◌〪◌̖◌𐽏◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SOGDIAN COMBINING RESH BELOW, LATIN SMALL LETTER B
-0061 10F4F 059A 0316 302A 0062;0061 302A 10F4F 0316 059A 0062;0061 302A 10F4F 
0316 059A 0062;0061 302A 10F4F 0316 059A 0062;0061 302A 10F4F 0316 059A 0062; # 
(a◌𐽏◌֚◌̖◌〪b; a◌〪◌𐽏◌̖◌֚b; a◌〪◌𐽏◌̖◌֚b; a◌〪◌𐽏◌̖◌֚b; a◌〪◌𐽏◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING RESH BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 10F50 0062;0061 302A 0316 10F50 059A 0062;0061 302A 0316 
10F50 059A 0062;0061 302A 0316 10F50 059A 0062;0061 302A 0316 10F50 059A 0062; 
# (a◌֚◌̖◌〪◌𐽐b; a◌〪◌̖◌𐽐◌֚b; a◌〪◌̖◌𐽐◌֚b; a◌〪◌̖◌𐽐◌֚b; a◌〪◌̖◌𐽐◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, SOGDIAN COMBINING STROKE BELOW, LATIN SMALL LETTER B
-0061 10F50 059A 0316 302A 0062;0061 302A 10F50 0316 059A 0062;0061 302A 10F50 
0316 059A 0062;0061 302A 10F50 0316 059A 0062;0061 302A 10F50 0316 059A 0062; # 
(a◌𐽐◌֚◌̖◌〪b; a◌〪◌𐽐◌̖◌֚b; a◌〪◌𐽐◌̖◌֚b; a◌〪◌𐽐◌̖◌֚b; a◌〪◌𐽐◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING STROKE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10F4D 0062;0061 1DFA 0316 10F4D 059A 0062;0061 1DFA 0316 
10F4D 059A 0062;0061 1DFA 0316 10F4D 059A 0062;0061 1DFA 0316 10F4D 059A 0062; 
# (a◌֚◌̖◌᷺◌𐽍b; a◌᷺◌̖◌𐽍◌֚b; a◌᷺◌̖◌𐽍◌֚b; a◌᷺◌̖◌𐽍◌֚b; a◌᷺◌̖◌𐽍◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SOGDIAN COMBINING HOOK BELOW, LATIN SMALL LETTER B
+0061 10F4D 059A 0316 1DFA 0062;0061 1DFA 10F4D 0316 059A 0062;0061 1DFA 10F4D 
0316 059A 0062;0061 1DFA 10F4D 0316 059A 0062;0061 1DFA 10F4D 0316 059A 0062; # 
(a◌𐽍◌֚◌̖◌᷺b; a◌᷺◌𐽍◌̖◌֚b; a◌᷺◌𐽍◌̖◌֚b; a◌᷺◌𐽍◌̖◌֚b; a◌᷺◌𐽍◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING HOOK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10F4E 0062;0061 1DFA 0316 10F4E 059A 0062;0061 1DFA 0316 
10F4E 059A 0062;0061 1DFA 0316 10F4E 059A 0062;0061 1DFA 0316 10F4E 059A 0062; 
# (a◌֚◌̖◌᷺◌𐽎b; a◌᷺◌̖◌𐽎◌֚b; a◌᷺◌̖◌𐽎◌֚b; a◌᷺◌̖◌𐽎◌֚b; a◌᷺◌̖◌𐽎◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SOGDIAN COMBINING LONG HOOK BELOW, LATIN SMALL LETTER B
+0061 10F4E 059A 0316 1DFA 0062;0061 1DFA 10F4E 0316 059A 0062;0061 1DFA 10F4E 
0316 059A 0062;0061 1DFA 10F4E 0316 059A 0062;0061 1DFA 10F4E 0316 059A 0062; # 
(a◌𐽎◌֚◌̖◌᷺b; a◌᷺◌𐽎◌̖◌֚b; a◌᷺◌𐽎◌̖◌֚b; a◌᷺◌𐽎◌̖◌֚b; a◌᷺◌𐽎◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING LONG HOOK BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10F4F 0062;0061 1DFA 0316 10F4F 059A 0062;0061 1DFA 0316 
10F4F 059A 0062;0061 1DFA 0316 10F4F 059A 0062;0061 1DFA 0316 10F4F 059A 0062; 
# (a◌֚◌̖◌᷺◌𐽏b; a◌᷺◌̖◌𐽏◌֚b; a◌᷺◌̖◌𐽏◌֚b; a◌᷺◌̖◌𐽏◌֚b; a◌᷺◌̖◌𐽏◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SOGDIAN COMBINING RESH BELOW, LATIN SMALL LETTER B
+0061 10F4F 059A 0316 1DFA 0062;0061 1DFA 10F4F 0316 059A 0062;0061 1DFA 10F4F 
0316 059A 0062;0061 1DFA 10F4F 0316 059A 0062;0061 1DFA 10F4F 0316 059A 0062; # 
(a◌𐽏◌֚◌̖◌᷺b; a◌᷺◌𐽏◌̖◌֚b; a◌᷺◌𐽏◌̖◌֚b; a◌᷺◌𐽏◌̖◌֚b; a◌᷺◌𐽏◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING RESH BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10F50 0062;0061 1DFA 0316 10F50 059A 0062;0061 1DFA 0316 
10F50 059A 0062;0061 1DFA 0316 10F50 059A 0062;0061 1DFA 0316 10F50 059A 0062; 
# (a◌֚◌̖◌᷺◌𐽐b; a◌᷺◌̖◌𐽐◌֚b; a◌᷺◌̖◌𐽐◌֚b; a◌᷺◌̖◌𐽐◌֚b; a◌᷺◌̖◌𐽐◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, SOGDIAN COMBINING STROKE BELOW, LATIN SMALL LETTER B
+0061 10F50 059A 0316 1DFA 0062;0061 1DFA 10F50 0316 059A 0062;0061 1DFA 10F50 
0316 059A 0062;0061 1DFA 10F50 0316 059A 0062;0061 1DFA 10F50 0316 059A 0062; # 
(a◌𐽐◌֚◌̖◌᷺b; a◌᷺◌𐽐◌̖◌֚b; a◌᷺◌𐽐◌̖◌֚b; a◌᷺◌𐽐◌̖◌֚b; a◌᷺◌𐽐◌̖◌֚b; ) LATIN SMALL 
LETTER A, SOGDIAN COMBINING STROKE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 0315 0300 05AE 10F82 0062;00E0 05AE 10F82 0315 0062;0061 05AE 0300 10F82 
0315 0062;00E0 05AE 10F82 0315 0062;0061 05AE 0300 10F82 0315 0062; # 
(a◌̕◌̀◌֮◌𐾂b; à◌֮◌𐾂◌̕b; a◌֮◌̀◌𐾂◌̕b; à◌֮◌𐾂◌̕b; a◌֮◌̀◌𐾂◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
OLD UYGHUR COMBINING DOT ABOVE, LATIN SMALL LETTER B
+0061 10F82 0315 0300 05AE 0062;0061 05AE 10F82 0300 0315 0062;0061 05AE 10F82 
0300 0315 0062;0061 05AE 10F82 0300 0315 0062;0061 05AE 10F82 0300 0315 0062; # 
(a◌𐾂◌̕◌̀◌֮b; a◌֮◌𐾂◌̀◌̕b; a◌֮◌𐾂◌̀◌̕b; a◌֮◌𐾂◌̀◌̕b; a◌֮◌𐾂◌̀◌̕b; ) LATIN SMALL 
LETTER A, OLD UYGHUR COMBINING DOT ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10F83 0062;0061 1DFA 0316 10F83 059A 0062;0061 1DFA 0316 
10F83 059A 0062;0061 1DFA 0316 10F83 059A 0062;0061 1DFA 0316 10F83 059A 0062; 
# (a◌֚◌̖◌᷺◌𐾃b; a◌᷺◌̖◌𐾃◌֚b; a◌᷺◌̖◌𐾃◌֚b; a◌᷺◌̖◌𐾃◌֚b; a◌᷺◌̖◌𐾃◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, OLD UYGHUR COMBINING DOT BELOW, LATIN SMALL LETTER B
+0061 10F83 059A 0316 1DFA 0062;0061 1DFA 10F83 0316 059A 0062;0061 1DFA 10F83 
0316 059A 0062;0061 1DFA 10F83 0316 059A 0062;0061 1DFA 10F83 0316 059A 0062; # 
(a◌𐾃◌֚◌̖◌᷺b; a◌᷺◌𐾃◌̖◌֚b; a◌᷺◌𐾃◌̖◌֚b; a◌᷺◌𐾃◌̖◌֚b; a◌᷺◌𐾃◌̖◌֚b; ) LATIN SMALL 
LETTER A, OLD UYGHUR COMBINING DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 0315 0300 05AE 10F84 0062;00E0 05AE 10F84 0315 0062;0061 05AE 0300 10F84 
0315 0062;00E0 05AE 10F84 0315 0062;0061 05AE 0300 10F84 0315 0062; # 
(a◌̕◌̀◌֮◌𐾄b; à◌֮◌𐾄◌̕b; a◌֮◌̀◌𐾄◌̕b; à◌֮◌𐾄◌̕b; a◌֮◌̀◌𐾄◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
OLD UYGHUR COMBINING TWO DOTS ABOVE, LATIN SMALL LETTER B
+0061 10F84 0315 0300 05AE 0062;0061 05AE 10F84 0300 0315 0062;0061 05AE 10F84 
0300 0315 0062;0061 05AE 10F84 0300 0315 0062;0061 05AE 10F84 0300 0315 0062; # 
(a◌𐾄◌̕◌̀◌֮b; a◌֮◌𐾄◌̀◌̕b; a◌֮◌𐾄◌̀◌̕b; a◌֮◌𐾄◌̀◌̕b; a◌֮◌𐾄◌̀◌̕b; ) LATIN SMALL 
LETTER A, OLD UYGHUR COMBINING TWO DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 10F85 0062;0061 1DFA 0316 10F85 059A 0062;0061 1DFA 0316 
10F85 059A 0062;0061 1DFA 0316 10F85 059A 0062;0061 1DFA 0316 10F85 059A 0062; 
# (a◌֚◌̖◌᷺◌𐾅b; a◌᷺◌̖◌𐾅◌֚b; a◌᷺◌̖◌𐾅◌֚b; a◌᷺◌̖◌𐾅◌֚b; a◌᷺◌̖◌𐾅◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, OLD UYGHUR COMBINING TWO DOTS BELOW, LATIN SMALL LETTER B
+0061 10F85 059A 0316 1DFA 0062;0061 1DFA 10F85 0316 059A 0062;0061 1DFA 10F85 
0316 059A 0062;0061 1DFA 10F85 0316 059A 0062;0061 1DFA 10F85 0316 059A 0062; # 
(a◌𐾅◌֚◌̖◌᷺b; a◌᷺◌𐾅◌̖◌֚b; a◌᷺◌𐾅◌̖◌֚b; a◌᷺◌𐾅◌̖◌֚b; a◌᷺◌𐾅◌̖◌֚b; ) LATIN SMALL 
LETTER A, OLD UYGHUR COMBINING TWO DOTS BELOW, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 05B0 094D 3099 11046 0062;0061 3099 094D 11046 05B0 0062;0061 3099 094D 
11046 05B0 0062;0061 3099 094D 11046 05B0 0062;0061 3099 094D 11046 05B0 0062; 
# (a◌ְ◌्◌゙◌𑁆b; a◌゙◌्◌𑁆◌ְb; a◌゙◌्◌𑁆◌ְb; a◌゙◌्◌𑁆◌ְb; a◌゙◌्◌𑁆◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, BRAHMI VIRAMA, LATIN SMALL LETTER B
 0061 11046 05B0 094D 3099 0062;0061 3099 11046 094D 05B0 0062;0061 3099 11046 
094D 05B0 0062;0061 3099 11046 094D 05B0 0062;0061 3099 11046 094D 05B0 0062; # 
(a◌𑁆◌ְ◌्◌゙b; a◌゙◌𑁆◌्◌ְb; a◌゙◌𑁆◌्◌ְb; a◌゙◌𑁆◌्◌ְb; a◌゙◌𑁆◌्◌ְb; ) LATIN SMALL 
LETTER A, BRAHMI VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 05B0 094D 3099 11070 0062;0061 3099 094D 11070 05B0 0062;0061 3099 094D 
11070 05B0 0062;0061 3099 094D 11070 05B0 0062;0061 3099 094D 11070 05B0 0062; 
# (a◌ְ◌्◌゙◌𑁰b; a◌゙◌्◌𑁰◌ְb; a◌゙◌्◌𑁰◌ְb; a◌゙◌्◌𑁰◌ְb; a◌゙◌्◌𑁰◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, BRAHMI SIGN OLD TAMIL VIRAMA, LATIN SMALL 
LETTER B
+0061 11070 05B0 094D 3099 0062;0061 3099 11070 094D 05B0 0062;0061 3099 11070 
094D 05B0 0062;0061 3099 11070 094D 05B0 0062;0061 3099 11070 094D 05B0 0062; # 
(a◌𑁰◌ְ◌्◌゙b; a◌゙◌𑁰◌्◌ְb; a◌゙◌𑁰◌्◌ְb; a◌゙◌𑁰◌्◌ְb; a◌゙◌𑁰◌्◌ְb; ) LATIN SMALL 
LETTER A, BRAHMI SIGN OLD TAMIL VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN 
VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 05B0 094D 3099 1107F 0062;0061 3099 094D 1107F 05B0 0062;0061 3099 094D 
1107F 05B0 0062;0061 3099 094D 1107F 05B0 0062;0061 3099 094D 1107F 05B0 0062; 
# (a◌ְ◌्◌゙◌𑁿b; a◌゙◌्◌𑁿◌ְb; a◌゙◌्◌𑁿◌ְb; a◌゙◌्◌𑁿◌ְb; a◌゙◌्◌𑁿◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, BRAHMI NUMBER JOINER, LATIN SMALL LETTER B
 0061 1107F 05B0 094D 3099 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 
094D 05B0 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 094D 05B0 0062; # 
(a◌𑁿◌ְ◌्◌゙b; a◌゙◌𑁿◌्◌ְb; a◌゙◌𑁿◌्◌ְb; a◌゙◌𑁿◌्◌ְb; a◌゙◌𑁿◌्◌ְb; ) LATIN SMALL 
LETTER A, BRAHMI NUMBER JOINER, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, 
COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
 0061 05B0 094D 3099 110B9 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 
110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062; 
# (a◌ְ◌्◌゙◌𑂹b; a◌゙◌्◌𑂹◌ְb; a◌゙◌्◌𑂹◌ְb; a◌゙◌्◌𑂹◌ְb; a◌゙◌्◌𑂹◌ְb; ) LATIN SMALL 
LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING 
KATAKANA-HIRAGANA VOICED SOUND MARK, KAITHI SIGN VIRAMA, LATIN SMALL LETTER B
@@ -18533,10 +18670,10 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 16FF1 093C 16FF0 0334 0062;0061 0334 16FF1 16FF0 093C 0062;0061 0334 
16FF1 16FF0 093C 0062;0061 0334 16FF1 16FF0 093C 0062;0061 0334 16FF1 16FF0 
093C 0062; # (a𖿱◌𖿰़◌̴b; a◌̴𖿱𖿰◌़b; a◌̴𖿱𖿰◌़b; a◌̴𖿱𖿰◌़b; a◌̴𖿱𖿰◌़b; ) LATIN SMALL 
LETTER A, VIETNAMESE ALTERNATE READING MARK NHAY, DEVANAGARI SIGN NUKTA, 
VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, LATIN SMALL 
LETTER B
 0061 16FF0 0334 1BC9E 0062;0061 0334 1BC9E 16FF0 0062;0061 0334 1BC9E 16FF0 
0062;0061 0334 1BC9E 16FF0 0062;0061 0334 1BC9E 16FF0 0062; # (a𖿰◌̴◌𛲞b; 
a◌̴◌𛲞𖿰b; a◌̴◌𛲞𖿰b; a◌̴◌𛲞𖿰b; a◌̴◌𛲞𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE 
ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, DUPLOYAN DOUBLE MARK, LATIN 
SMALL LETTER B
 0061 1BC9E 16FF0 0334 0062;0061 1BC9E 0334 16FF0 0062;0061 1BC9E 0334 16FF0 
0062;0061 1BC9E 0334 16FF0 0062;0061 1BC9E 0334 16FF0 0062; # (a◌𛲞𖿰◌̴b; 
a◌𛲞◌̴𖿰b; a◌𛲞◌̴𖿰b; a◌𛲞◌̴𖿰b; a◌𛲞◌̴𖿰b; ) LATIN SMALL LETTER A, DUPLOYAN DOUBLE 
MARK, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, LATIN 
SMALL LETTER B
-0061 302A 031B 1DCE 1D165 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 
1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062; 
# (a◌〪◌̛◌᷎𝅥b; a◌᷎◌̛𝅥◌〪b; a◌᷎◌̛𝅥◌〪b; a◌᷎◌̛𝅥◌〪b; a◌᷎◌̛𝅥◌〪b; ) LATIN SMALL LETTER 
A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING STEM, LATIN SMALL LETTER B
-0061 1D165 302A 031B 1DCE 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 
031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062; # 
(a𝅥◌〪◌̛◌᷎b; a◌᷎𝅥◌̛◌〪b; a◌᷎𝅥◌̛◌〪b; a◌᷎𝅥◌̛◌〪b; a◌᷎𝅥◌̛◌〪b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING STEM, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
-0061 302A 031B 1DCE 1D166 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 
1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062; 
# (a◌〪◌̛◌᷎𝅦b; a◌᷎◌̛𝅦◌〪b; a◌᷎◌̛𝅦◌〪b; a◌᷎◌̛𝅦◌〪b; a◌᷎◌̛𝅦◌〪b; ) LATIN SMALL LETTER 
A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING SPRECHGESANG STEM, LATIN SMALL LETTER B
-0061 1D166 302A 031B 1DCE 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 
031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062; # 
(a𝅦◌〪◌̛◌᷎b; a◌᷎𝅦◌̛◌〪b; a◌᷎𝅦◌̛◌〪b; a◌᷎𝅦◌̛◌〪b; a◌᷎𝅦◌̛◌〪b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING SPRECHGESANG STEM, IDEOGRAPHIC LEVEL TONE MARK, 
COMBINING HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
+0061 1DFA 031B 1DCE 1D165 0062;0061 1DCE 031B 1D165 1DFA 0062;0061 1DCE 031B 
1D165 1DFA 0062;0061 1DCE 031B 1D165 1DFA 0062;0061 1DCE 031B 1D165 1DFA 0062; 
# (a◌᷺◌̛◌᷎𝅥b; a◌᷎◌̛𝅥◌᷺b; a◌᷎◌̛𝅥◌᷺b; a◌᷎◌̛𝅥◌᷺b; a◌᷎◌̛𝅥◌᷺b; ) LATIN SMALL LETTER 
A, COMBINING DOT BELOW LEFT, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING STEM, LATIN SMALL LETTER B
+0061 1D165 1DFA 031B 1DCE 0062;0061 1DCE 1D165 031B 1DFA 0062;0061 1DCE 1D165 
031B 1DFA 0062;0061 1DCE 1D165 031B 1DFA 0062;0061 1DCE 1D165 031B 1DFA 0062; # 
(a𝅥◌᷺◌̛◌᷎b; a◌᷎𝅥◌̛◌᷺b; a◌᷎𝅥◌̛◌᷺b; a◌᷎𝅥◌̛◌᷺b; a◌᷎𝅥◌̛◌᷺b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING STEM, COMBINING DOT BELOW LEFT, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
+0061 1DFA 031B 1DCE 1D166 0062;0061 1DCE 031B 1D166 1DFA 0062;0061 1DCE 031B 
1D166 1DFA 0062;0061 1DCE 031B 1D166 1DFA 0062;0061 1DCE 031B 1D166 1DFA 0062; 
# (a◌᷺◌̛◌᷎𝅦b; a◌᷎◌̛𝅦◌᷺b; a◌᷎◌̛𝅦◌᷺b; a◌᷎◌̛𝅦◌᷺b; a◌᷎◌̛𝅦◌᷺b; ) LATIN SMALL LETTER 
A, COMBINING DOT BELOW LEFT, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING SPRECHGESANG STEM, LATIN SMALL LETTER B
+0061 1D166 1DFA 031B 1DCE 0062;0061 1DCE 1D166 031B 1DFA 0062;0061 1DCE 1D166 
031B 1DFA 0062;0061 1DCE 1D166 031B 1DFA 0062;0061 1DCE 1D166 031B 1DFA 0062; # 
(a𝅦◌᷺◌̛◌᷎b; a◌᷎𝅦◌̛◌᷺b; a◌᷎𝅦◌̛◌᷺b; a◌᷎𝅦◌̛◌᷺b; a◌᷎𝅦◌̛◌᷺b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING SPRECHGESANG STEM, COMBINING DOT BELOW LEFT, COMBINING 
HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
 0061 16FF0 0334 1D167 0062;0061 0334 1D167 16FF0 0062;0061 0334 1D167 16FF0 
0062;0061 0334 1D167 16FF0 0062;0061 0334 1D167 16FF0 0062; # (a𖿰◌̴◌𝅧b; 
a◌̴◌𝅧𖿰b; a◌̴◌𝅧𖿰b; a◌̴◌𝅧𖿰b; a◌̴◌𝅧𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE 
ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, MUSICAL SYMBOL COMBINING 
TREMOLO-1, LATIN SMALL LETTER B
 0061 1D167 16FF0 0334 0062;0061 1D167 0334 16FF0 0062;0061 1D167 0334 16FF0 
0062;0061 1D167 0334 16FF0 0062;0061 1D167 0334 16FF0 0062; # (a◌𝅧𖿰◌̴b; 
a◌𝅧◌̴𖿰b; a◌𝅧◌̴𖿰b; a◌𝅧◌̴𖿰b; a◌𝅧◌̴𖿰b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL 
COMBINING TREMOLO-1, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE 
OVERLAY, LATIN SMALL LETTER B
 0061 16FF0 0334 1D168 0062;0061 0334 1D168 16FF0 0062;0061 0334 1D168 16FF0 
0062;0061 0334 1D168 16FF0 0062;0061 0334 1D168 16FF0 0062; # (a𖿰◌̴◌𝅨b; 
a◌̴◌𝅨𖿰b; a◌̴◌𝅨𖿰b; a◌̴◌𝅨𖿰b; a◌̴◌𝅨𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE 
ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, MUSICAL SYMBOL COMBINING 
TREMOLO-2, LATIN SMALL LETTER B
@@ -18545,32 +18682,32 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 1D169 16FF0 0334 0062;0061 1D169 0334 16FF0 0062;0061 1D169 0334 16FF0 
0062;0061 1D169 0334 16FF0 0062;0061 1D169 0334 16FF0 0062; # (a◌𝅩𖿰◌̴b; 
a◌𝅩◌̴𖿰b; a◌𝅩◌̴𖿰b; a◌𝅩◌̴𖿰b; a◌𝅩◌̴𖿰b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL 
COMBINING TREMOLO-3, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE 
OVERLAY, LATIN SMALL LETTER B
 0061 05AE 1D16D 302E 1D16D 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 
1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 
05AE 0062; # (a◌〮𝅭𝅭֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; ) LATIN SMALL LETTER 
A, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, HANGUL 
SINGLE DOT TONE MARK, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, LATIN SMALL 
LETTER B
 0061 1D16D 05AE 1D16D 302E 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 
1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 
05AE 0062; # (a𝅭◌〮𝅭֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; ) LATIN SMALL LETTER 
A, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, HEBREW ACCENT ZINOR, MUSICAL 
SYMBOL COMBINING AUGMENTATION DOT, HANGUL SINGLE DOT TONE MARK, LATIN SMALL 
LETTER B
-0061 302A 031B 1DCE 1D16E 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 
1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062; 
# (a◌〪◌̛◌᷎𝅮b; a◌᷎◌̛𝅮◌〪b; a◌᷎◌̛𝅮◌〪b; a◌᷎◌̛𝅮◌〪b; a◌᷎◌̛𝅮◌〪b; ) LATIN SMALL LETTER 
A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING FLAG-1, LATIN SMALL LETTER B
-0061 1D16E 302A 031B 1DCE 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 
031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062; # 
(a𝅮◌〪◌̛◌᷎b; a◌᷎𝅮◌̛◌〪b; a◌᷎𝅮◌̛◌〪b; a◌᷎𝅮◌̛◌〪b; a◌᷎𝅮◌̛◌〪b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING FLAG-1, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
-0061 302A 031B 1DCE 1D16F 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 
1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062; 
# (a◌〪◌̛◌᷎𝅯b; a◌᷎◌̛𝅯◌〪b; a◌᷎◌̛𝅯◌〪b; a◌᷎◌̛𝅯◌〪b; a◌᷎◌̛𝅯◌〪b; ) LATIN SMALL LETTER 
A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING FLAG-2, LATIN SMALL LETTER B
-0061 1D16F 302A 031B 1DCE 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 
031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062; # 
(a𝅯◌〪◌̛◌᷎b; a◌᷎𝅯◌̛◌〪b; a◌᷎𝅯◌̛◌〪b; a◌᷎𝅯◌̛◌〪b; a◌᷎𝅯◌̛◌〪b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING FLAG-2, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
-0061 302A 031B 1DCE 1D170 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 
1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062; 
# (a◌〪◌̛◌᷎𝅰b; a◌᷎◌̛𝅰◌〪b; a◌᷎◌̛𝅰◌〪b; a◌᷎◌̛𝅰◌〪b; a◌᷎◌̛𝅰◌〪b; ) LATIN SMALL LETTER 
A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING FLAG-3, LATIN SMALL LETTER B
-0061 1D170 302A 031B 1DCE 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 
031B 302A 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 031B 302A 0062; # 
(a𝅰◌〪◌̛◌᷎b; a◌᷎𝅰◌̛◌〪b; a◌᷎𝅰◌̛◌〪b; a◌᷎𝅰◌̛◌〪b; a◌᷎𝅰◌̛◌〪b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING FLAG-3, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
-0061 302A 031B 1DCE 1D171 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 
1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062; 
# (a◌〪◌̛◌᷎𝅱b; a◌᷎◌̛𝅱◌〪b; a◌᷎◌̛𝅱◌〪b; a◌᷎◌̛𝅱◌〪b; a◌᷎◌̛𝅱◌〪b; ) LATIN SMALL LETTER 
A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING FLAG-4, LATIN SMALL LETTER B
-0061 1D171 302A 031B 1DCE 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 
031B 302A 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 031B 302A 0062; # 
(a𝅱◌〪◌̛◌᷎b; a◌᷎𝅱◌̛◌〪b; a◌᷎𝅱◌̛◌〪b; a◌᷎𝅱◌̛◌〪b; a◌᷎𝅱◌̛◌〪b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING FLAG-4, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
-0061 302A 031B 1DCE 1D172 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 
1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062; 
# (a◌〪◌̛◌᷎𝅲b; a◌᷎◌̛𝅲◌〪b; a◌᷎◌̛𝅲◌〪b; a◌᷎◌̛𝅲◌〪b; a◌᷎◌̛𝅲◌〪b; ) LATIN SMALL LETTER 
A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING FLAG-5, LATIN SMALL LETTER B
-0061 1D172 302A 031B 1DCE 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 
031B 302A 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 031B 302A 0062; # 
(a𝅲◌〪◌̛◌᷎b; a◌᷎𝅲◌̛◌〪b; a◌᷎𝅲◌̛◌〪b; a◌᷎𝅲◌̛◌〪b; a◌᷎𝅲◌̛◌〪b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING FLAG-5, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
-0061 059A 0316 302A 1D17B 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 
1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062; 
# (a◌֚◌̖◌〪◌𝅻b; a◌〪◌̖◌𝅻◌֚b; a◌〪◌̖◌𝅻◌֚b; a◌〪◌̖◌𝅻◌֚b; a◌〪◌̖◌𝅻◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MUSICAL SYMBOL COMBINING ACCENT, LATIN SMALL LETTER B
-0061 1D17B 059A 0316 302A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 
0316 059A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 0316 059A 0062; # 
(a◌𝅻◌֚◌̖◌〪b; a◌〪◌𝅻◌̖◌֚b; a◌〪◌𝅻◌̖◌֚b; a◌〪◌𝅻◌̖◌֚b; a◌〪◌𝅻◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING ACCENT, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1D17C 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 
1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062; 
# (a◌֚◌̖◌〪◌𝅼b; a◌〪◌̖◌𝅼◌֚b; a◌〪◌̖◌𝅼◌֚b; a◌〪◌̖◌𝅼◌֚b; a◌〪◌̖◌𝅼◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MUSICAL SYMBOL COMBINING STACCATO, LATIN SMALL LETTER B
-0061 1D17C 059A 0316 302A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 
0316 059A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 0316 059A 0062; # 
(a◌𝅼◌֚◌̖◌〪b; a◌〪◌𝅼◌̖◌֚b; a◌〪◌𝅼◌̖◌֚b; a◌〪◌𝅼◌̖◌֚b; a◌〪◌𝅼◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING STACCATO, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1D17D 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 
1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062; 
# (a◌֚◌̖◌〪◌𝅽b; a◌〪◌̖◌𝅽◌֚b; a◌〪◌̖◌𝅽◌֚b; a◌〪◌̖◌𝅽◌֚b; a◌〪◌̖◌𝅽◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MUSICAL SYMBOL COMBINING TENUTO, LATIN SMALL LETTER B
-0061 1D17D 059A 0316 302A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 
0316 059A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 0316 059A 0062; # 
(a◌𝅽◌֚◌̖◌〪b; a◌〪◌𝅽◌̖◌֚b; a◌〪◌𝅽◌̖◌֚b; a◌〪◌𝅽◌̖◌֚b; a◌〪◌𝅽◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING TENUTO, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1D17E 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 
1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062; 
# (a◌֚◌̖◌〪◌𝅾b; a◌〪◌̖◌𝅾◌֚b; a◌〪◌̖◌𝅾◌֚b; a◌〪◌̖◌𝅾◌֚b; a◌〪◌̖◌𝅾◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MUSICAL SYMBOL COMBINING STACCATISSIMO, LATIN SMALL LETTER B
-0061 1D17E 059A 0316 302A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 
0316 059A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 0316 059A 0062; # 
(a◌𝅾◌֚◌̖◌〪b; a◌〪◌𝅾◌̖◌֚b; a◌〪◌𝅾◌̖◌֚b; a◌〪◌𝅾◌̖◌֚b; a◌〪◌𝅾◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING STACCATISSIMO, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1D17F 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 
1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062; 
# (a◌֚◌̖◌〪◌𝅿b; a◌〪◌̖◌𝅿◌֚b; a◌〪◌̖◌𝅿◌֚b; a◌〪◌̖◌𝅿◌֚b; a◌〪◌̖◌𝅿◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MUSICAL SYMBOL COMBINING MARCATO, LATIN SMALL LETTER B
-0061 1D17F 059A 0316 302A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 
0316 059A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 0316 059A 0062; # 
(a◌𝅿◌֚◌̖◌〪b; a◌〪◌𝅿◌̖◌֚b; a◌〪◌𝅿◌̖◌֚b; a◌〪◌𝅿◌̖◌֚b; a◌〪◌𝅿◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING MARCATO, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1D180 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 
1D180 059A 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 1D180 059A 0062; 
# (a◌֚◌̖◌〪◌𝆀b; a◌〪◌̖◌𝆀◌֚b; a◌〪◌̖◌𝆀◌֚b; a◌〪◌̖◌𝆀◌֚b; a◌〪◌̖◌𝆀◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MUSICAL SYMBOL COMBINING MARCATO-STACCATO, LATIN SMALL LETTER B
-0061 1D180 059A 0316 302A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 
0316 059A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 0316 059A 0062; # 
(a◌𝆀◌֚◌̖◌〪b; a◌〪◌𝆀◌̖◌֚b; a◌〪◌𝆀◌̖◌֚b; a◌〪◌𝆀◌̖◌֚b; a◌〪◌𝆀◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING MARCATO-STACCATO, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1D181 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 
1D181 059A 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 1D181 059A 0062; 
# (a◌֚◌̖◌〪◌𝆁b; a◌〪◌̖◌𝆁◌֚b; a◌〪◌̖◌𝆁◌֚b; a◌〪◌̖◌𝆁◌֚b; a◌〪◌̖◌𝆁◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MUSICAL SYMBOL COMBINING ACCENT-STACCATO, LATIN SMALL LETTER B
-0061 1D181 059A 0316 302A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 
0316 059A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 0316 059A 0062; # 
(a◌𝆁◌֚◌̖◌〪b; a◌〪◌𝆁◌̖◌֚b; a◌〪◌𝆁◌̖◌֚b; a◌〪◌𝆁◌̖◌֚b; a◌〪◌𝆁◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING ACCENT-STACCATO, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1D182 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 
1D182 059A 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 1D182 059A 0062; 
# (a◌֚◌̖◌〪◌𝆂b; a◌〪◌̖◌𝆂◌֚b; a◌〪◌̖◌𝆂◌֚b; a◌〪◌̖◌𝆂◌֚b; a◌〪◌̖◌𝆂◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MUSICAL SYMBOL COMBINING LOURE, LATIN SMALL LETTER B
-0061 1D182 059A 0316 302A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 
0316 059A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 0316 059A 0062; # 
(a◌𝆂◌֚◌̖◌〪b; a◌〪◌𝆂◌̖◌֚b; a◌〪◌𝆂◌̖◌֚b; a◌〪◌𝆂◌̖◌֚b; a◌〪◌𝆂◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING LOURE, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 1DFA 031B 1DCE 1D16E 0062;0061 1DCE 031B 1D16E 1DFA 0062;0061 1DCE 031B 
1D16E 1DFA 0062;0061 1DCE 031B 1D16E 1DFA 0062;0061 1DCE 031B 1D16E 1DFA 0062; 
# (a◌᷺◌̛◌᷎𝅮b; a◌᷎◌̛𝅮◌᷺b; a◌᷎◌̛𝅮◌᷺b; a◌᷎◌̛𝅮◌᷺b; a◌᷎◌̛𝅮◌᷺b; ) LATIN SMALL LETTER 
A, COMBINING DOT BELOW LEFT, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING FLAG-1, LATIN SMALL LETTER B
+0061 1D16E 1DFA 031B 1DCE 0062;0061 1DCE 1D16E 031B 1DFA 0062;0061 1DCE 1D16E 
031B 1DFA 0062;0061 1DCE 1D16E 031B 1DFA 0062;0061 1DCE 1D16E 031B 1DFA 0062; # 
(a𝅮◌᷺◌̛◌᷎b; a◌᷎𝅮◌̛◌᷺b; a◌᷎𝅮◌̛◌᷺b; a◌᷎𝅮◌̛◌᷺b; a◌᷎𝅮◌̛◌᷺b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING FLAG-1, COMBINING DOT BELOW LEFT, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
+0061 1DFA 031B 1DCE 1D16F 0062;0061 1DCE 031B 1D16F 1DFA 0062;0061 1DCE 031B 
1D16F 1DFA 0062;0061 1DCE 031B 1D16F 1DFA 0062;0061 1DCE 031B 1D16F 1DFA 0062; 
# (a◌᷺◌̛◌᷎𝅯b; a◌᷎◌̛𝅯◌᷺b; a◌᷎◌̛𝅯◌᷺b; a◌᷎◌̛𝅯◌᷺b; a◌᷎◌̛𝅯◌᷺b; ) LATIN SMALL LETTER 
A, COMBINING DOT BELOW LEFT, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING FLAG-2, LATIN SMALL LETTER B
+0061 1D16F 1DFA 031B 1DCE 0062;0061 1DCE 1D16F 031B 1DFA 0062;0061 1DCE 1D16F 
031B 1DFA 0062;0061 1DCE 1D16F 031B 1DFA 0062;0061 1DCE 1D16F 031B 1DFA 0062; # 
(a𝅯◌᷺◌̛◌᷎b; a◌᷎𝅯◌̛◌᷺b; a◌᷎𝅯◌̛◌᷺b; a◌᷎𝅯◌̛◌᷺b; a◌᷎𝅯◌̛◌᷺b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING FLAG-2, COMBINING DOT BELOW LEFT, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
+0061 1DFA 031B 1DCE 1D170 0062;0061 1DCE 031B 1D170 1DFA 0062;0061 1DCE 031B 
1D170 1DFA 0062;0061 1DCE 031B 1D170 1DFA 0062;0061 1DCE 031B 1D170 1DFA 0062; 
# (a◌᷺◌̛◌᷎𝅰b; a◌᷎◌̛𝅰◌᷺b; a◌᷎◌̛𝅰◌᷺b; a◌᷎◌̛𝅰◌᷺b; a◌᷎◌̛𝅰◌᷺b; ) LATIN SMALL LETTER 
A, COMBINING DOT BELOW LEFT, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING FLAG-3, LATIN SMALL LETTER B
+0061 1D170 1DFA 031B 1DCE 0062;0061 1DCE 1D170 031B 1DFA 0062;0061 1DCE 1D170 
031B 1DFA 0062;0061 1DCE 1D170 031B 1DFA 0062;0061 1DCE 1D170 031B 1DFA 0062; # 
(a𝅰◌᷺◌̛◌᷎b; a◌᷎𝅰◌̛◌᷺b; a◌᷎𝅰◌̛◌᷺b; a◌᷎𝅰◌̛◌᷺b; a◌᷎𝅰◌̛◌᷺b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING FLAG-3, COMBINING DOT BELOW LEFT, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
+0061 1DFA 031B 1DCE 1D171 0062;0061 1DCE 031B 1D171 1DFA 0062;0061 1DCE 031B 
1D171 1DFA 0062;0061 1DCE 031B 1D171 1DFA 0062;0061 1DCE 031B 1D171 1DFA 0062; 
# (a◌᷺◌̛◌᷎𝅱b; a◌᷎◌̛𝅱◌᷺b; a◌᷎◌̛𝅱◌᷺b; a◌᷎◌̛𝅱◌᷺b; a◌᷎◌̛𝅱◌᷺b; ) LATIN SMALL LETTER 
A, COMBINING DOT BELOW LEFT, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING FLAG-4, LATIN SMALL LETTER B
+0061 1D171 1DFA 031B 1DCE 0062;0061 1DCE 1D171 031B 1DFA 0062;0061 1DCE 1D171 
031B 1DFA 0062;0061 1DCE 1D171 031B 1DFA 0062;0061 1DCE 1D171 031B 1DFA 0062; # 
(a𝅱◌᷺◌̛◌᷎b; a◌᷎𝅱◌̛◌᷺b; a◌᷎𝅱◌̛◌᷺b; a◌᷎𝅱◌̛◌᷺b; a◌᷎𝅱◌̛◌᷺b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING FLAG-4, COMBINING DOT BELOW LEFT, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
+0061 1DFA 031B 1DCE 1D172 0062;0061 1DCE 031B 1D172 1DFA 0062;0061 1DCE 031B 
1D172 1DFA 0062;0061 1DCE 031B 1D172 1DFA 0062;0061 1DCE 031B 1D172 1DFA 0062; 
# (a◌᷺◌̛◌᷎𝅲b; a◌᷎◌̛𝅲◌᷺b; a◌᷎◌̛𝅲◌᷺b; a◌᷎◌̛𝅲◌᷺b; a◌᷎◌̛𝅲◌᷺b; ) LATIN SMALL LETTER 
A, COMBINING DOT BELOW LEFT, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL 
SYMBOL COMBINING FLAG-5, LATIN SMALL LETTER B
+0061 1D172 1DFA 031B 1DCE 0062;0061 1DCE 1D172 031B 1DFA 0062;0061 1DCE 1D172 
031B 1DFA 0062;0061 1DCE 1D172 031B 1DFA 0062;0061 1DCE 1D172 031B 1DFA 0062; # 
(a𝅲◌᷺◌̛◌᷎b; a◌᷎𝅲◌̛◌᷺b; a◌᷎𝅲◌̛◌᷺b; a◌᷎𝅲◌̛◌᷺b; a◌᷎𝅲◌̛◌᷺b; ) LATIN SMALL LETTER A, 
MUSICAL SYMBOL COMBINING FLAG-5, COMBINING DOT BELOW LEFT, COMBINING HORN, 
COMBINING OGONEK ABOVE, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1D17B 0062;0061 1DFA 0316 1D17B 059A 0062;0061 1DFA 0316 
1D17B 059A 0062;0061 1DFA 0316 1D17B 059A 0062;0061 1DFA 0316 1D17B 059A 0062; 
# (a◌֚◌̖◌᷺◌𝅻b; a◌᷺◌̖◌𝅻◌֚b; a◌᷺◌̖◌𝅻◌֚b; a◌᷺◌̖◌𝅻◌֚b; a◌᷺◌̖◌𝅻◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MUSICAL SYMBOL COMBINING ACCENT, LATIN SMALL LETTER B
+0061 1D17B 059A 0316 1DFA 0062;0061 1DFA 1D17B 0316 059A 0062;0061 1DFA 1D17B 
0316 059A 0062;0061 1DFA 1D17B 0316 059A 0062;0061 1DFA 1D17B 0316 059A 0062; # 
(a◌𝅻◌֚◌̖◌᷺b; a◌᷺◌𝅻◌̖◌֚b; a◌᷺◌𝅻◌̖◌֚b; a◌᷺◌𝅻◌̖◌֚b; a◌᷺◌𝅻◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING ACCENT, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1D17C 0062;0061 1DFA 0316 1D17C 059A 0062;0061 1DFA 0316 
1D17C 059A 0062;0061 1DFA 0316 1D17C 059A 0062;0061 1DFA 0316 1D17C 059A 0062; 
# (a◌֚◌̖◌᷺◌𝅼b; a◌᷺◌̖◌𝅼◌֚b; a◌᷺◌̖◌𝅼◌֚b; a◌᷺◌̖◌𝅼◌֚b; a◌᷺◌̖◌𝅼◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MUSICAL SYMBOL COMBINING STACCATO, LATIN SMALL LETTER B
+0061 1D17C 059A 0316 1DFA 0062;0061 1DFA 1D17C 0316 059A 0062;0061 1DFA 1D17C 
0316 059A 0062;0061 1DFA 1D17C 0316 059A 0062;0061 1DFA 1D17C 0316 059A 0062; # 
(a◌𝅼◌֚◌̖◌᷺b; a◌᷺◌𝅼◌̖◌֚b; a◌᷺◌𝅼◌̖◌֚b; a◌᷺◌𝅼◌̖◌֚b; a◌᷺◌𝅼◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING STACCATO, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1D17D 0062;0061 1DFA 0316 1D17D 059A 0062;0061 1DFA 0316 
1D17D 059A 0062;0061 1DFA 0316 1D17D 059A 0062;0061 1DFA 0316 1D17D 059A 0062; 
# (a◌֚◌̖◌᷺◌𝅽b; a◌᷺◌̖◌𝅽◌֚b; a◌᷺◌̖◌𝅽◌֚b; a◌᷺◌̖◌𝅽◌֚b; a◌᷺◌̖◌𝅽◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MUSICAL SYMBOL COMBINING TENUTO, LATIN SMALL LETTER B
+0061 1D17D 059A 0316 1DFA 0062;0061 1DFA 1D17D 0316 059A 0062;0061 1DFA 1D17D 
0316 059A 0062;0061 1DFA 1D17D 0316 059A 0062;0061 1DFA 1D17D 0316 059A 0062; # 
(a◌𝅽◌֚◌̖◌᷺b; a◌᷺◌𝅽◌̖◌֚b; a◌᷺◌𝅽◌̖◌֚b; a◌᷺◌𝅽◌̖◌֚b; a◌᷺◌𝅽◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING TENUTO, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1D17E 0062;0061 1DFA 0316 1D17E 059A 0062;0061 1DFA 0316 
1D17E 059A 0062;0061 1DFA 0316 1D17E 059A 0062;0061 1DFA 0316 1D17E 059A 0062; 
# (a◌֚◌̖◌᷺◌𝅾b; a◌᷺◌̖◌𝅾◌֚b; a◌᷺◌̖◌𝅾◌֚b; a◌᷺◌̖◌𝅾◌֚b; a◌᷺◌̖◌𝅾◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MUSICAL SYMBOL COMBINING STACCATISSIMO, LATIN SMALL LETTER B
+0061 1D17E 059A 0316 1DFA 0062;0061 1DFA 1D17E 0316 059A 0062;0061 1DFA 1D17E 
0316 059A 0062;0061 1DFA 1D17E 0316 059A 0062;0061 1DFA 1D17E 0316 059A 0062; # 
(a◌𝅾◌֚◌̖◌᷺b; a◌᷺◌𝅾◌̖◌֚b; a◌᷺◌𝅾◌̖◌֚b; a◌᷺◌𝅾◌̖◌֚b; a◌᷺◌𝅾◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING STACCATISSIMO, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1D17F 0062;0061 1DFA 0316 1D17F 059A 0062;0061 1DFA 0316 
1D17F 059A 0062;0061 1DFA 0316 1D17F 059A 0062;0061 1DFA 0316 1D17F 059A 0062; 
# (a◌֚◌̖◌᷺◌𝅿b; a◌᷺◌̖◌𝅿◌֚b; a◌᷺◌̖◌𝅿◌֚b; a◌᷺◌̖◌𝅿◌֚b; a◌᷺◌̖◌𝅿◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MUSICAL SYMBOL COMBINING MARCATO, LATIN SMALL LETTER B
+0061 1D17F 059A 0316 1DFA 0062;0061 1DFA 1D17F 0316 059A 0062;0061 1DFA 1D17F 
0316 059A 0062;0061 1DFA 1D17F 0316 059A 0062;0061 1DFA 1D17F 0316 059A 0062; # 
(a◌𝅿◌֚◌̖◌᷺b; a◌᷺◌𝅿◌̖◌֚b; a◌᷺◌𝅿◌̖◌֚b; a◌᷺◌𝅿◌̖◌֚b; a◌᷺◌𝅿◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING MARCATO, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1D180 0062;0061 1DFA 0316 1D180 059A 0062;0061 1DFA 0316 
1D180 059A 0062;0061 1DFA 0316 1D180 059A 0062;0061 1DFA 0316 1D180 059A 0062; 
# (a◌֚◌̖◌᷺◌𝆀b; a◌᷺◌̖◌𝆀◌֚b; a◌᷺◌̖◌𝆀◌֚b; a◌᷺◌̖◌𝆀◌֚b; a◌᷺◌̖◌𝆀◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MUSICAL SYMBOL COMBINING MARCATO-STACCATO, LATIN SMALL LETTER B
+0061 1D180 059A 0316 1DFA 0062;0061 1DFA 1D180 0316 059A 0062;0061 1DFA 1D180 
0316 059A 0062;0061 1DFA 1D180 0316 059A 0062;0061 1DFA 1D180 0316 059A 0062; # 
(a◌𝆀◌֚◌̖◌᷺b; a◌᷺◌𝆀◌̖◌֚b; a◌᷺◌𝆀◌̖◌֚b; a◌᷺◌𝆀◌̖◌֚b; a◌᷺◌𝆀◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING MARCATO-STACCATO, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1D181 0062;0061 1DFA 0316 1D181 059A 0062;0061 1DFA 0316 
1D181 059A 0062;0061 1DFA 0316 1D181 059A 0062;0061 1DFA 0316 1D181 059A 0062; 
# (a◌֚◌̖◌᷺◌𝆁b; a◌᷺◌̖◌𝆁◌֚b; a◌᷺◌̖◌𝆁◌֚b; a◌᷺◌̖◌𝆁◌֚b; a◌᷺◌̖◌𝆁◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MUSICAL SYMBOL COMBINING ACCENT-STACCATO, LATIN SMALL LETTER B
+0061 1D181 059A 0316 1DFA 0062;0061 1DFA 1D181 0316 059A 0062;0061 1DFA 1D181 
0316 059A 0062;0061 1DFA 1D181 0316 059A 0062;0061 1DFA 1D181 0316 059A 0062; # 
(a◌𝆁◌֚◌̖◌᷺b; a◌᷺◌𝆁◌̖◌֚b; a◌᷺◌𝆁◌̖◌֚b; a◌᷺◌𝆁◌̖◌֚b; a◌᷺◌𝆁◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING ACCENT-STACCATO, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1D182 0062;0061 1DFA 0316 1D182 059A 0062;0061 1DFA 0316 
1D182 059A 0062;0061 1DFA 0316 1D182 059A 0062;0061 1DFA 0316 1D182 059A 0062; 
# (a◌֚◌̖◌᷺◌𝆂b; a◌᷺◌̖◌𝆂◌֚b; a◌᷺◌̖◌𝆂◌֚b; a◌᷺◌̖◌𝆂◌֚b; a◌᷺◌̖◌𝆂◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MUSICAL SYMBOL COMBINING LOURE, LATIN SMALL LETTER B
+0061 1D182 059A 0316 1DFA 0062;0061 1DFA 1D182 0316 059A 0062;0061 1DFA 1D182 
0316 059A 0062;0061 1DFA 1D182 0316 059A 0062;0061 1DFA 1D182 0316 059A 0062; # 
(a◌𝆂◌֚◌̖◌᷺b; a◌᷺◌𝆂◌̖◌֚b; a◌᷺◌𝆂◌̖◌֚b; a◌᷺◌𝆂◌̖◌֚b; a◌᷺◌𝆂◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING LOURE, HEBREW ACCENT YETIV, COMBINING GRAVE 
ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1D185 0062;00E0 05AE 1D185 0315 0062;0061 05AE 0300 1D185 
0315 0062;00E0 05AE 1D185 0315 0062;0061 05AE 0300 1D185 0315 0062; # 
(a◌̕◌̀◌֮◌𝆅b; à◌֮◌𝆅◌̕b; a◌֮◌̀◌𝆅◌̕b; à◌֮◌𝆅◌̕b; a◌֮◌̀◌𝆅◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
MUSICAL SYMBOL COMBINING DOIT, LATIN SMALL LETTER B
 0061 1D185 0315 0300 05AE 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 
0300 0315 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 0300 0315 0062; # 
(a◌𝆅◌̕◌̀◌֮b; a◌֮◌𝆅◌̀◌̕b; a◌֮◌𝆅◌̀◌̕b; a◌֮◌𝆅◌̀◌̕b; a◌֮◌𝆅◌̀◌̕b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING DOIT, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1D186 0062;00E0 05AE 1D186 0315 0062;0061 05AE 0300 1D186 
0315 0062;00E0 05AE 1D186 0315 0062;0061 05AE 0300 1D186 0315 0062; # 
(a◌̕◌̀◌֮◌𝆆b; à◌֮◌𝆆◌̕b; a◌֮◌̀◌𝆆◌̕b; à◌֮◌𝆆◌̕b; a◌֮◌̀◌𝆆◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
MUSICAL SYMBOL COMBINING RIP, LATIN SMALL LETTER B
@@ -18581,10 +18718,10 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 1D188 0315 0300 05AE 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 
0300 0315 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 0300 0315 0062; # 
(a◌𝆈◌̕◌̀◌֮b; a◌֮◌𝆈◌̀◌̕b; a◌֮◌𝆈◌̀◌̕b; a◌֮◌𝆈◌̀◌̕b; a◌֮◌𝆈◌̀◌̕b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING SMEAR, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1D189 0062;00E0 05AE 1D189 0315 0062;0061 05AE 0300 1D189 
0315 0062;00E0 05AE 1D189 0315 0062;0061 05AE 0300 1D189 0315 0062; # 
(a◌̕◌̀◌֮◌𝆉b; à◌֮◌𝆉◌̕b; a◌֮◌̀◌𝆉◌̕b; à◌֮◌𝆉◌̕b; a◌֮◌̀◌𝆉◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
MUSICAL SYMBOL COMBINING BEND, LATIN SMALL LETTER B
 0061 1D189 0315 0300 05AE 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 
0300 0315 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 0300 0315 0062; # 
(a◌𝆉◌̕◌̀◌֮b; a◌֮◌𝆉◌̀◌̕b; a◌֮◌𝆉◌̀◌̕b; a◌֮◌𝆉◌̀◌̕b; a◌֮◌𝆉◌̀◌̕b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING BEND, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1D18A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 
1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062; 
# (a◌֚◌̖◌〪◌𝆊b; a◌〪◌̖◌𝆊◌֚b; a◌〪◌̖◌𝆊◌֚b; a◌〪◌̖◌𝆊◌֚b; a◌〪◌̖◌𝆊◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MUSICAL SYMBOL COMBINING DOUBLE TONGUE, LATIN SMALL LETTER B
-0061 1D18A 059A 0316 302A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 
0316 059A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 0316 059A 0062; # 
(a◌𝆊◌֚◌̖◌〪b; a◌〪◌𝆊◌̖◌֚b; a◌〪◌𝆊◌̖◌֚b; a◌〪◌𝆊◌̖◌֚b; a◌〪◌𝆊◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING DOUBLE TONGUE, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1D18B 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 
1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062; 
# (a◌֚◌̖◌〪◌𝆋b; a◌〪◌̖◌𝆋◌֚b; a◌〪◌̖◌𝆋◌֚b; a◌〪◌̖◌𝆋◌֚b; a◌〪◌̖◌𝆋◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MUSICAL SYMBOL COMBINING TRIPLE TONGUE, LATIN SMALL LETTER B
-0061 1D18B 059A 0316 302A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 
0316 059A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 0316 059A 0062; # 
(a◌𝆋◌֚◌̖◌〪b; a◌〪◌𝆋◌̖◌֚b; a◌〪◌𝆋◌̖◌֚b; a◌〪◌𝆋◌̖◌֚b; a◌〪◌𝆋◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING TRIPLE TONGUE, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1D18A 0062;0061 1DFA 0316 1D18A 059A 0062;0061 1DFA 0316 
1D18A 059A 0062;0061 1DFA 0316 1D18A 059A 0062;0061 1DFA 0316 1D18A 059A 0062; 
# (a◌֚◌̖◌᷺◌𝆊b; a◌᷺◌̖◌𝆊◌֚b; a◌᷺◌̖◌𝆊◌֚b; a◌᷺◌̖◌𝆊◌֚b; a◌᷺◌̖◌𝆊◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MUSICAL SYMBOL COMBINING DOUBLE TONGUE, LATIN SMALL LETTER B
+0061 1D18A 059A 0316 1DFA 0062;0061 1DFA 1D18A 0316 059A 0062;0061 1DFA 1D18A 
0316 059A 0062;0061 1DFA 1D18A 0316 059A 0062;0061 1DFA 1D18A 0316 059A 0062; # 
(a◌𝆊◌֚◌̖◌᷺b; a◌᷺◌𝆊◌̖◌֚b; a◌᷺◌𝆊◌̖◌֚b; a◌᷺◌𝆊◌̖◌֚b; a◌᷺◌𝆊◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING DOUBLE TONGUE, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1D18B 0062;0061 1DFA 0316 1D18B 059A 0062;0061 1DFA 0316 
1D18B 059A 0062;0061 1DFA 0316 1D18B 059A 0062;0061 1DFA 0316 1D18B 059A 0062; 
# (a◌֚◌̖◌᷺◌𝆋b; a◌᷺◌̖◌𝆋◌֚b; a◌᷺◌̖◌𝆋◌֚b; a◌᷺◌̖◌𝆋◌֚b; a◌᷺◌̖◌𝆋◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MUSICAL SYMBOL COMBINING TRIPLE TONGUE, LATIN SMALL LETTER B
+0061 1D18B 059A 0316 1DFA 0062;0061 1DFA 1D18B 0316 059A 0062;0061 1DFA 1D18B 
0316 059A 0062;0061 1DFA 1D18B 0316 059A 0062;0061 1DFA 1D18B 0316 059A 0062; # 
(a◌𝆋◌֚◌̖◌᷺b; a◌᷺◌𝆋◌̖◌֚b; a◌᷺◌𝆋◌̖◌֚b; a◌᷺◌𝆋◌̖◌֚b; a◌᷺◌𝆋◌̖◌֚b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING TRIPLE TONGUE, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1D1AA 0062;00E0 05AE 1D1AA 0315 0062;0061 05AE 0300 1D1AA 
0315 0062;00E0 05AE 1D1AA 0315 0062;0061 05AE 0300 1D1AA 0315 0062; # 
(a◌̕◌̀◌֮◌𝆪b; à◌֮◌𝆪◌̕b; a◌֮◌̀◌𝆪◌̕b; à◌֮◌𝆪◌̕b; a◌֮◌̀◌𝆪◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
MUSICAL SYMBOL COMBINING DOWN BOW, LATIN SMALL LETTER B
 0061 1D1AA 0315 0300 05AE 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 
0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062; # 
(a◌𝆪◌̕◌̀◌֮b; a◌֮◌𝆪◌̀◌̕b; a◌֮◌𝆪◌̀◌̕b; a◌֮◌𝆪◌̀◌̕b; a◌֮◌𝆪◌̀◌̕b; ) LATIN SMALL 
LETTER A, MUSICAL SYMBOL COMBINING DOWN BOW, COMBINING COMMA ABOVE RIGHT, 
COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1D1AB 0062;00E0 05AE 1D1AB 0315 0062;0061 05AE 0300 1D1AB 
0315 0062;00E0 05AE 1D1AB 0315 0062;0061 05AE 0300 1D1AB 0315 0062; # 
(a◌̕◌̀◌֮◌𝆫b; à◌֮◌𝆫◌̕b; a◌֮◌̀◌𝆫◌̕b; à◌֮◌𝆫◌̕b; a◌֮◌̀◌𝆫◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
MUSICAL SYMBOL COMBINING UP BOW, LATIN SMALL LETTER B
@@ -18689,6 +18826,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH 
WHITE CIRCLE
 0061 1E135 0315 0300 05AE 0062;0061 05AE 1E135 0300 0315 0062;0061 05AE 1E135 
0300 0315 0062;0061 05AE 1E135 0300 0315 0062;0061 05AE 1E135 0300 0315 0062; # 
(a◌𞄵◌̕◌̀◌֮b; a◌֮◌𞄵◌̀◌̕b; a◌֮◌𞄵◌̀◌̕b; a◌֮◌𞄵◌̀◌̕b; a◌֮◌𞄵◌̀◌̕b; ) LATIN SMALL 
LETTER A, NYIAKENG PUACHUE HMONG TONE-G, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1E136 0062;00E0 05AE 1E136 0315 0062;0061 05AE 0300 1E136 
0315 0062;00E0 05AE 1E136 0315 0062;0061 05AE 0300 1E136 0315 0062; # 
(a◌̕◌̀◌֮◌𞄶b; à◌֮◌𞄶◌̕b; a◌֮◌̀◌𞄶◌̕b; à◌֮◌𞄶◌̕b; a◌֮◌̀◌𞄶◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
NYIAKENG PUACHUE HMONG TONE-D, LATIN SMALL LETTER B
 0061 1E136 0315 0300 05AE 0062;0061 05AE 1E136 0300 0315 0062;0061 05AE 1E136 
0300 0315 0062;0061 05AE 1E136 0300 0315 0062;0061 05AE 1E136 0300 0315 0062; # 
(a◌𞄶◌̕◌̀◌֮b; a◌֮◌𞄶◌̀◌̕b; a◌֮◌𞄶◌̀◌̕b; a◌֮◌𞄶◌̀◌̕b; a◌֮◌𞄶◌̀◌̕b; ) LATIN SMALL 
LETTER A, NYIAKENG PUACHUE HMONG TONE-D, COMBINING COMMA ABOVE RIGHT, COMBINING 
GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 1E2AE 0062;00E0 05AE 1E2AE 0315 0062;0061 05AE 0300 1E2AE 
0315 0062;00E0 05AE 1E2AE 0315 0062;0061 05AE 0300 1E2AE 0315 0062; # 
(a◌̕◌̀◌֮◌𞊮b; à◌֮◌𞊮◌̕b; a◌֮◌̀◌𞊮◌̕b; à◌֮◌𞊮◌̕b; a◌֮◌̀◌𞊮◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
TOTO SIGN RISING TONE, LATIN SMALL LETTER B
+0061 1E2AE 0315 0300 05AE 0062;0061 05AE 1E2AE 0300 0315 0062;0061 05AE 1E2AE 
0300 0315 0062;0061 05AE 1E2AE 0300 0315 0062;0061 05AE 1E2AE 0300 0315 0062; # 
(a◌𞊮◌̕◌̀◌֮b; a◌֮◌𞊮◌̀◌̕b; a◌֮◌𞊮◌̀◌̕b; a◌֮◌𞊮◌̀◌̕b; a◌֮◌𞊮◌̀◌̕b; ) LATIN SMALL 
LETTER A, TOTO SIGN RISING TONE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1E2EC 0062;00E0 05AE 1E2EC 0315 0062;0061 05AE 0300 1E2EC 
0315 0062;00E0 05AE 1E2EC 0315 0062;0061 05AE 0300 1E2EC 0315 0062; # 
(a◌̕◌̀◌֮◌𞋬b; à◌֮◌𞋬◌̕b; a◌֮◌̀◌𞋬◌̕b; à◌֮◌𞋬◌̕b; a◌֮◌̀◌𞋬◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
WANCHO TONE TUP, LATIN SMALL LETTER B
 0061 1E2EC 0315 0300 05AE 0062;0061 05AE 1E2EC 0300 0315 0062;0061 05AE 1E2EC 
0300 0315 0062;0061 05AE 1E2EC 0300 0315 0062;0061 05AE 1E2EC 0300 0315 0062; # 
(a◌𞋬◌̕◌̀◌֮b; a◌֮◌𞋬◌̀◌̕b; a◌֮◌𞋬◌̀◌̕b; a◌֮◌𞋬◌̀◌̕b; a◌֮◌𞋬◌̀◌̕b; ) LATIN SMALL 
LETTER A, WANCHO TONE TUP, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, 
HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1E2ED 0062;00E0 05AE 1E2ED 0315 0062;0061 05AE 0300 1E2ED 
0315 0062;00E0 05AE 1E2ED 0315 0062;0061 05AE 0300 1E2ED 0315 0062; # 
(a◌̕◌̀◌֮◌𞋭b; à◌֮◌𞋭◌̕b; a◌֮◌̀◌𞋭◌̕b; à◌֮◌𞋭◌̕b; a◌֮◌̀◌𞋭◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
WANCHO TONE TUPNI, LATIN SMALL LETTER B
@@ -18697,20 +18836,20 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) 
HALFWIDTH WHITE CIRCLE
 0061 1E2EE 0315 0300 05AE 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 
0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062; # 
(a◌𞋮◌̕◌̀◌֮b; a◌֮◌𞋮◌̀◌̕b; a◌֮◌𞋮◌̀◌̕b; a◌֮◌𞋮◌̀◌̕b; a◌֮◌𞋮◌̀◌̕b; ) LATIN SMALL 
LETTER A, WANCHO TONE KOI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, 
HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1E2EF 0062;00E0 05AE 1E2EF 0315 0062;0061 05AE 0300 1E2EF 
0315 0062;00E0 05AE 1E2EF 0315 0062;0061 05AE 0300 1E2EF 0315 0062; # 
(a◌̕◌̀◌֮◌𞋯b; à◌֮◌𞋯◌̕b; a◌֮◌̀◌𞋯◌̕b; à◌֮◌𞋯◌̕b; a◌֮◌̀◌𞋯◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
WANCHO TONE KOINI, LATIN SMALL LETTER B
 0061 1E2EF 0315 0300 05AE 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 
0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062; # 
(a◌𞋯◌̕◌̀◌֮b; a◌֮◌𞋯◌̀◌̕b; a◌֮◌𞋯◌̀◌̕b; a◌֮◌𞋯◌̀◌̕b; a◌֮◌𞋯◌̀◌̕b; ) LATIN SMALL 
LETTER A, WANCHO TONE KOINI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
-0061 059A 0316 302A 1E8D0 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 
1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062; 
# (a◌֚◌̖◌〪◌𞣐b; a◌〪◌̖◌𞣐◌֚b; a◌〪◌̖◌𞣐◌֚b; a◌〪◌̖◌𞣐◌֚b; a◌〪◌̖◌𞣐◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MENDE KIKAKUI COMBINING NUMBER TEENS, LATIN SMALL LETTER B
-0061 1E8D0 059A 0316 302A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 
0316 059A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 0316 059A 0062; # 
(a◌𞣐◌֚◌̖◌〪b; a◌〪◌𞣐◌̖◌֚b; a◌〪◌𞣐◌̖◌֚b; a◌〪◌𞣐◌̖◌֚b; a◌〪◌𞣐◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER TEENS, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1E8D1 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 
1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062; 
# (a◌֚◌̖◌〪◌𞣑b; a◌〪◌̖◌𞣑◌֚b; a◌〪◌̖◌𞣑◌֚b; a◌〪◌̖◌𞣑◌֚b; a◌〪◌̖◌𞣑◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MENDE KIKAKUI COMBINING NUMBER TENS, LATIN SMALL LETTER B
-0061 1E8D1 059A 0316 302A 0062;0061 302A 1E8D1 0316 059A 0062;0061 302A 1E8D1 
0316 059A 0062;0061 302A 1E8D1 0316 059A 0062;0061 302A 1E8D1 0316 059A 0062; # 
(a◌𞣑◌֚◌̖◌〪b; a◌〪◌𞣑◌̖◌֚b; a◌〪◌𞣑◌̖◌֚b; a◌〪◌𞣑◌̖◌֚b; a◌〪◌𞣑◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER TENS, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1E8D2 0062;0061 302A 0316 1E8D2 059A 0062;0061 302A 0316 
1E8D2 059A 0062;0061 302A 0316 1E8D2 059A 0062;0061 302A 0316 1E8D2 059A 0062; 
# (a◌֚◌̖◌〪◌𞣒b; a◌〪◌̖◌𞣒◌֚b; a◌〪◌̖◌𞣒◌֚b; a◌〪◌̖◌𞣒◌֚b; a◌〪◌̖◌𞣒◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MENDE KIKAKUI COMBINING NUMBER HUNDREDS, LATIN SMALL LETTER B
-0061 1E8D2 059A 0316 302A 0062;0061 302A 1E8D2 0316 059A 0062;0061 302A 1E8D2 
0316 059A 0062;0061 302A 1E8D2 0316 059A 0062;0061 302A 1E8D2 0316 059A 0062; # 
(a◌𞣒◌֚◌̖◌〪b; a◌〪◌𞣒◌̖◌֚b; a◌〪◌𞣒◌̖◌֚b; a◌〪◌𞣒◌̖◌֚b; a◌〪◌𞣒◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER HUNDREDS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1E8D3 0062;0061 302A 0316 1E8D3 059A 0062;0061 302A 0316 
1E8D3 059A 0062;0061 302A 0316 1E8D3 059A 0062;0061 302A 0316 1E8D3 059A 0062; 
# (a◌֚◌̖◌〪◌𞣓b; a◌〪◌̖◌𞣓◌֚b; a◌〪◌̖◌𞣓◌֚b; a◌〪◌̖◌𞣓◌֚b; a◌〪◌̖◌𞣓◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MENDE KIKAKUI COMBINING NUMBER THOUSANDS, LATIN SMALL LETTER B
-0061 1E8D3 059A 0316 302A 0062;0061 302A 1E8D3 0316 059A 0062;0061 302A 1E8D3 
0316 059A 0062;0061 302A 1E8D3 0316 059A 0062;0061 302A 1E8D3 0316 059A 0062; # 
(a◌𞣓◌֚◌̖◌〪b; a◌〪◌𞣓◌̖◌֚b; a◌〪◌𞣓◌̖◌֚b; a◌〪◌𞣓◌̖◌֚b; a◌〪◌𞣓◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER THOUSANDS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1E8D4 0062;0061 302A 0316 1E8D4 059A 0062;0061 302A 0316 
1E8D4 059A 0062;0061 302A 0316 1E8D4 059A 0062;0061 302A 0316 1E8D4 059A 0062; 
# (a◌֚◌̖◌〪◌𞣔b; a◌〪◌̖◌𞣔◌֚b; a◌〪◌̖◌𞣔◌֚b; a◌〪◌̖◌𞣔◌֚b; a◌〪◌̖◌𞣔◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS, LATIN SMALL LETTER B
-0061 1E8D4 059A 0316 302A 0062;0061 302A 1E8D4 0316 059A 0062;0061 302A 1E8D4 
0316 059A 0062;0061 302A 1E8D4 0316 059A 0062;0061 302A 1E8D4 0316 059A 0062; # 
(a◌𞣔◌֚◌̖◌〪b; a◌〪◌𞣔◌̖◌֚b; a◌〪◌𞣔◌̖◌֚b; a◌〪◌𞣔◌̖◌֚b; a◌〪◌𞣔◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
-0061 059A 0316 302A 1E8D5 0062;0061 302A 0316 1E8D5 059A 0062;0061 302A 0316 
1E8D5 059A 0062;0061 302A 0316 1E8D5 059A 0062;0061 302A 0316 1E8D5 059A 0062; 
# (a◌֚◌̖◌〪◌𞣕b; a◌〪◌̖◌𞣕◌֚b; a◌〪◌̖◌𞣕◌֚b; a◌〪◌̖◌𞣕◌֚b; a◌〪◌̖◌𞣕◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS, LATIN SMALL LETTER 
B
-0061 1E8D5 059A 0316 302A 0062;0061 302A 1E8D5 0316 059A 0062;0061 302A 1E8D5 
0316 059A 0062;0061 302A 1E8D5 0316 059A 0062;0061 302A 1E8D5 0316 059A 0062; # 
(a◌𞣕◌֚◌̖◌〪b; a◌〪◌𞣕◌̖◌֚b; a◌〪◌𞣕◌̖◌֚b; a◌〪◌𞣕◌̖◌֚b; a◌〪◌𞣕◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL 
LETTER B
-0061 059A 0316 302A 1E8D6 0062;0061 302A 0316 1E8D6 059A 0062;0061 302A 0316 
1E8D6 059A 0062;0061 302A 0316 1E8D6 059A 0062;0061 302A 0316 1E8D6 059A 0062; 
# (a◌֚◌̖◌〪◌𞣖b; a◌〪◌̖◌𞣖◌֚b; a◌〪◌̖◌𞣖◌֚b; a◌〪◌̖◌𞣖◌֚b; a◌〪◌̖◌𞣖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL 
TONE MARK, MENDE KIKAKUI COMBINING NUMBER MILLIONS, LATIN SMALL LETTER B
-0061 1E8D6 059A 0316 302A 0062;0061 302A 1E8D6 0316 059A 0062;0061 302A 1E8D6 
0316 059A 0062;0061 302A 1E8D6 0316 059A 0062;0061 302A 1E8D6 0316 059A 0062; # 
(a◌𞣖◌֚◌̖◌〪b; a◌〪◌𞣖◌̖◌֚b; a◌〪◌𞣖◌̖◌֚b; a◌〪◌𞣖◌̖◌֚b; a◌〪◌𞣖◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER MILLIONS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1E8D0 0062;0061 1DFA 0316 1E8D0 059A 0062;0061 1DFA 0316 
1E8D0 059A 0062;0061 1DFA 0316 1E8D0 059A 0062;0061 1DFA 0316 1E8D0 059A 0062; 
# (a◌֚◌̖◌᷺◌𞣐b; a◌᷺◌̖◌𞣐◌֚b; a◌᷺◌̖◌𞣐◌֚b; a◌᷺◌̖◌𞣐◌֚b; a◌᷺◌̖◌𞣐◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MENDE KIKAKUI COMBINING NUMBER TEENS, LATIN SMALL LETTER B
+0061 1E8D0 059A 0316 1DFA 0062;0061 1DFA 1E8D0 0316 059A 0062;0061 1DFA 1E8D0 
0316 059A 0062;0061 1DFA 1E8D0 0316 059A 0062;0061 1DFA 1E8D0 0316 059A 0062; # 
(a◌𞣐◌֚◌̖◌᷺b; a◌᷺◌𞣐◌̖◌֚b; a◌᷺◌𞣐◌̖◌֚b; a◌᷺◌𞣐◌̖◌֚b; a◌᷺◌𞣐◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER TEENS, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1E8D1 0062;0061 1DFA 0316 1E8D1 059A 0062;0061 1DFA 0316 
1E8D1 059A 0062;0061 1DFA 0316 1E8D1 059A 0062;0061 1DFA 0316 1E8D1 059A 0062; 
# (a◌֚◌̖◌᷺◌𞣑b; a◌᷺◌̖◌𞣑◌֚b; a◌᷺◌̖◌𞣑◌֚b; a◌᷺◌̖◌𞣑◌֚b; a◌᷺◌̖◌𞣑◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MENDE KIKAKUI COMBINING NUMBER TENS, LATIN SMALL LETTER B
+0061 1E8D1 059A 0316 1DFA 0062;0061 1DFA 1E8D1 0316 059A 0062;0061 1DFA 1E8D1 
0316 059A 0062;0061 1DFA 1E8D1 0316 059A 0062;0061 1DFA 1E8D1 0316 059A 0062; # 
(a◌𞣑◌֚◌̖◌᷺b; a◌᷺◌𞣑◌̖◌֚b; a◌᷺◌𞣑◌̖◌֚b; a◌᷺◌𞣑◌̖◌֚b; a◌᷺◌𞣑◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER TENS, HEBREW ACCENT YETIV, COMBINING 
GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1E8D2 0062;0061 1DFA 0316 1E8D2 059A 0062;0061 1DFA 0316 
1E8D2 059A 0062;0061 1DFA 0316 1E8D2 059A 0062;0061 1DFA 0316 1E8D2 059A 0062; 
# (a◌֚◌̖◌᷺◌𞣒b; a◌᷺◌̖◌𞣒◌֚b; a◌᷺◌̖◌𞣒◌֚b; a◌᷺◌̖◌𞣒◌֚b; a◌᷺◌̖◌𞣒◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MENDE KIKAKUI COMBINING NUMBER HUNDREDS, LATIN SMALL LETTER B
+0061 1E8D2 059A 0316 1DFA 0062;0061 1DFA 1E8D2 0316 059A 0062;0061 1DFA 1E8D2 
0316 059A 0062;0061 1DFA 1E8D2 0316 059A 0062;0061 1DFA 1E8D2 0316 059A 0062; # 
(a◌𞣒◌֚◌̖◌᷺b; a◌᷺◌𞣒◌̖◌֚b; a◌᷺◌𞣒◌̖◌֚b; a◌᷺◌𞣒◌̖◌֚b; a◌᷺◌𞣒◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER HUNDREDS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1E8D3 0062;0061 1DFA 0316 1E8D3 059A 0062;0061 1DFA 0316 
1E8D3 059A 0062;0061 1DFA 0316 1E8D3 059A 0062;0061 1DFA 0316 1E8D3 059A 0062; 
# (a◌֚◌̖◌᷺◌𞣓b; a◌᷺◌̖◌𞣓◌֚b; a◌᷺◌̖◌𞣓◌֚b; a◌᷺◌̖◌𞣓◌֚b; a◌᷺◌̖◌𞣓◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MENDE KIKAKUI COMBINING NUMBER THOUSANDS, LATIN SMALL LETTER B
+0061 1E8D3 059A 0316 1DFA 0062;0061 1DFA 1E8D3 0316 059A 0062;0061 1DFA 1E8D3 
0316 059A 0062;0061 1DFA 1E8D3 0316 059A 0062;0061 1DFA 1E8D3 0316 059A 0062; # 
(a◌𞣓◌֚◌̖◌᷺b; a◌᷺◌𞣓◌̖◌֚b; a◌᷺◌𞣓◌̖◌֚b; a◌᷺◌𞣓◌̖◌֚b; a◌᷺◌𞣓◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER THOUSANDS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1E8D4 0062;0061 1DFA 0316 1E8D4 059A 0062;0061 1DFA 0316 
1E8D4 059A 0062;0061 1DFA 0316 1E8D4 059A 0062;0061 1DFA 0316 1E8D4 059A 0062; 
# (a◌֚◌̖◌᷺◌𞣔b; a◌᷺◌̖◌𞣔◌֚b; a◌᷺◌̖◌𞣔◌֚b; a◌᷺◌̖◌𞣔◌֚b; a◌᷺◌̖◌𞣔◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS, LATIN SMALL LETTER B
+0061 1E8D4 059A 0316 1DFA 0062;0061 1DFA 1E8D4 0316 059A 0062;0061 1DFA 1E8D4 
0316 059A 0062;0061 1DFA 1E8D4 0316 059A 0062;0061 1DFA 1E8D4 0316 059A 0062; # 
(a◌𞣔◌֚◌̖◌᷺b; a◌᷺◌𞣔◌̖◌֚b; a◌᷺◌𞣔◌̖◌֚b; a◌᷺◌𞣔◌̖◌֚b; a◌᷺◌𞣔◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
+0061 059A 0316 1DFA 1E8D5 0062;0061 1DFA 0316 1E8D5 059A 0062;0061 1DFA 0316 
1E8D5 059A 0062;0061 1DFA 0316 1E8D5 059A 0062;0061 1DFA 0316 1E8D5 059A 0062; 
# (a◌֚◌̖◌᷺◌𞣕b; a◌᷺◌̖◌𞣕◌֚b; a◌᷺◌̖◌𞣕◌֚b; a◌᷺◌̖◌𞣕◌֚b; a◌᷺◌̖◌𞣕◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS, LATIN SMALL 
LETTER B
+0061 1E8D5 059A 0316 1DFA 0062;0061 1DFA 1E8D5 0316 059A 0062;0061 1DFA 1E8D5 
0316 059A 0062;0061 1DFA 1E8D5 0316 059A 0062;0061 1DFA 1E8D5 0316 059A 0062; # 
(a◌𞣕◌֚◌̖◌᷺b; a◌᷺◌𞣕◌̖◌֚b; a◌᷺◌𞣕◌̖◌֚b; a◌᷺◌𞣕◌̖◌֚b; a◌᷺◌𞣕◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS, HEBREW ACCENT 
YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL 
LETTER B
+0061 059A 0316 1DFA 1E8D6 0062;0061 1DFA 0316 1E8D6 059A 0062;0061 1DFA 0316 
1E8D6 059A 0062;0061 1DFA 0316 1E8D6 059A 0062;0061 1DFA 0316 1E8D6 059A 0062; 
# (a◌֚◌̖◌᷺◌𞣖b; a◌᷺◌̖◌𞣖◌֚b; a◌᷺◌̖◌𞣖◌֚b; a◌᷺◌̖◌𞣖◌֚b; a◌᷺◌̖◌𞣖◌֚b; ) LATIN SMALL 
LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT 
BELOW LEFT, MENDE KIKAKUI COMBINING NUMBER MILLIONS, LATIN SMALL LETTER B
+0061 1E8D6 059A 0316 1DFA 0062;0061 1DFA 1E8D6 0316 059A 0062;0061 1DFA 1E8D6 
0316 059A 0062;0061 1DFA 1E8D6 0316 059A 0062;0061 1DFA 1E8D6 0316 059A 0062; # 
(a◌𞣖◌֚◌̖◌᷺b; a◌᷺◌𞣖◌̖◌֚b; a◌᷺◌𞣖◌̖◌֚b; a◌᷺◌𞣖◌̖◌֚b; a◌᷺◌𞣖◌̖◌֚b; ) LATIN SMALL 
LETTER A, MENDE KIKAKUI COMBINING NUMBER MILLIONS, HEBREW ACCENT YETIV, 
COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1E944 0062;00E0 05AE 1E944 0315 0062;0061 05AE 0300 1E944 
0315 0062;00E0 05AE 1E944 0315 0062;0061 05AE 0300 1E944 0315 0062; # 
(a◌̕◌̀◌֮◌𞥄b; à◌֮◌𞥄◌̕b; a◌֮◌̀◌𞥄◌̕b; à◌֮◌𞥄◌̕b; a◌֮◌̀◌𞥄◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ADLAM ALIF LENGTHENER, LATIN SMALL LETTER B
 0061 1E944 0315 0300 05AE 0062;0061 05AE 1E944 0300 0315 0062;0061 05AE 1E944 
0300 0315 0062;0061 05AE 1E944 0300 0315 0062;0061 05AE 1E944 0300 0315 0062; # 
(a◌𞥄◌̕◌̀◌֮b; a◌֮◌𞥄◌̀◌̕b; a◌֮◌𞥄◌̀◌̕b; a◌֮◌𞥄◌̀◌̕b; a◌֮◌𞥄◌̀◌̕b; ) LATIN SMALL 
LETTER A, ADLAM ALIF LENGTHENER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE 
ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
 0061 0315 0300 05AE 1E945 0062;00E0 05AE 1E945 0315 0062;0061 05AE 0300 1E945 
0315 0062;00E0 05AE 1E945 0315 0062;0061 05AE 0300 1E945 0315 0062; # 
(a◌̕◌̀◌֮◌𞥅b; à◌֮◌𞥅◌̕b; a◌֮◌̀◌𞥅◌̕b; à◌֮◌𞥅◌̕b; a◌֮◌̀◌𞥅◌̕b; ) LATIN SMALL LETTER 
A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, 
ADLAM VOWEL LENGTHENER, LATIN SMALL LETTER B
diff --git a/admin/unidata/README b/admin/unidata/README
index f5881a1a14..e1129e1866 100644
--- a/admin/unidata/README
+++ b/admin/unidata/README
@@ -32,3 +32,7 @@ http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
 SpecialCasing.txt
 http://unicode.org/Public/UNIDATA/SpecialCasing.txt
 2017-04-20
+
+emoji-data.txt
+https://www.unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
+2021-08-26
diff --git a/admin/unidata/SpecialCasing.txt b/admin/unidata/SpecialCasing.txt
index 2a1a5a1d6b..1c2e968a8c 100644
--- a/admin/unidata/SpecialCasing.txt
+++ b/admin/unidata/SpecialCasing.txt
@@ -1,6 +1,6 @@
-# SpecialCasing-13.0.0.txt
-# Date: 2019-09-08, 23:31:24 GMT
-# © 2019 Unicode®, Inc.
+# SpecialCasing-14.0.0.txt
+# Date: 2021-03-08, 19:35:55 GMT
+# © 2021 Unicode®, Inc.
 # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in 
the U.S. and other countries.
 # For terms of use, see http://www.unicode.org/terms_of_use.html
 #
diff --git a/admin/unidata/UnicodeData.txt b/admin/unidata/UnicodeData.txt
index e22f967bba..b5abef7ed4 100644
--- a/admin/unidata/UnicodeData.txt
+++ b/admin/unidata/UnicodeData.txt
@@ -1525,6 +1525,7 @@
 061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;;
 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
 061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;;
+061D;ARABIC END OF TEXT MARK;Po;0;AL;;;;;N;;;;;
 061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
 0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;;
@@ -2089,6 +2090,47 @@
 0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;;
 0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;;
 086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;;
+0870;ARABIC LETTER ALEF WITH ATTACHED FATHA;Lo;0;AL;;;;;N;;;;;
+0871;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA;Lo;0;AL;;;;;N;;;;;
+0872;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;;
+0873;ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;;
+0874;ARABIC LETTER ALEF WITH ATTACHED KASRA;Lo;0;AL;;;;;N;;;;;
+0875;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA;Lo;0;AL;;;;;N;;;;;
+0876;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0877;ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT;Lo;0;AL;;;;;N;;;;;
+0878;ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT;Lo;0;AL;;;;;N;;;;;
+0879;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW;Lo;0;AL;;;;;N;;;;;
+087A;ARABIC LETTER ALEF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+087B;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT 
ABOVE;Lo;0;AL;;;;;N;;;;;
+087C;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT 
ABOVE;Lo;0;AL;;;;;N;;;;;
+087D;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT 
ABOVE;Lo;0;AL;;;;;N;;;;;
+087E;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT 
RING;Lo;0;AL;;;;;N;;;;;
+087F;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT 
RING;Lo;0;AL;;;;;N;;;;;
+0880;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT 
RING;Lo;0;AL;;;;;N;;;;;
+0881;ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA;Lo;0;AL;;;;;N;;;;;
+0882;ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA;Lo;0;AL;;;;;N;;;;;
+0883;ARABIC TATWEEL WITH OVERSTRUCK HAMZA;Lo;0;AL;;;;;N;;;;;
+0884;ARABIC TATWEEL WITH OVERSTRUCK WAW;Lo;0;AL;;;;;N;;;;;
+0885;ARABIC TATWEEL WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0886;ARABIC LETTER THIN YEH;Lo;0;AL;;;;;N;;;;;
+0887;ARABIC BASELINE ROUND DOT;Lo;0;AL;;;;;N;;;;;
+0888;ARABIC RAISED ROUND DOT;Sk;0;AL;;;;;N;;;;;
+0889;ARABIC LETTER NOON WITH INVERTED SMALL V;Lo;0;AL;;;;;N;;;;;
+088A;ARABIC LETTER HAH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+088B;ARABIC LETTER TAH WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;;
+088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;;
+0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;;
+0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;;
+0898;ARABIC SMALL HIGH WORD AL-JUZ;Mn;230;NSM;;;;;N;;;;;
+0899;ARABIC SMALL LOW WORD ISHMAAM;Mn;220;NSM;;;;;N;;;;;
+089A;ARABIC SMALL LOW WORD IMAALA;Mn;220;NSM;;;;;N;;;;;
+089B;ARABIC SMALL LOW WORD TASHEEL;Mn;220;NSM;;;;;N;;;;;
+089C;ARABIC MADDA WAAJIB;Mn;230;NSM;;;;;N;;;;;
+089D;ARABIC SUPERSCRIPT ALEF MOKHASSAS;Mn;230;NSM;;;;;N;;;;;
+089E;ARABIC DOUBLED MADDA;Mn;230;NSM;;;;;N;;;;;
+089F;ARABIC HALF MADDA OVER MADDA;Mn;230;NSM;;;;;N;;;;;
 08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
 08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
 08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
@@ -2110,6 +2152,7 @@
 08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;;
 08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
 08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+08B5;ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
 08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;
 08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;
 08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;;
@@ -2128,6 +2171,17 @@
 08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
 08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
 08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;
+08C8;ARABIC LETTER GRAF;Lo;0;AL;;;;;N;;;;;
+08C9;ARABIC SMALL FARSI YEH;Lm;0;AL;;;;;N;;;;;
+08CA;ARABIC SMALL HIGH FARSI YEH;Mn;230;NSM;;;;;N;;;;;
+08CB;ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW;Mn;230;NSM;;;;;N;;;;;
+08CC;ARABIC SMALL HIGH WORD SAH;Mn;230;NSM;;;;;N;;;;;
+08CD;ARABIC SMALL HIGH ZAH;Mn;230;NSM;;;;;N;;;;;
+08CE;ARABIC LARGE ROUND DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+08CF;ARABIC LARGE ROUND DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+08D0;ARABIC SUKUN BELOW;Mn;220;NSM;;;;;N;;;;;
+08D1;ARABIC LARGE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;;
+08D2;ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;;
 08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;;
 08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;;
 08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;;
@@ -2786,6 +2840,7 @@
 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3C;TELUGU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
 0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
@@ -2806,6 +2861,7 @@
 0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;;
 0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;;
 0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;;
+0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;;
 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
 0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
@@ -2901,6 +2957,7 @@
 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;;
 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
@@ -5258,6 +5315,7 @@
 170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;;
 170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;;
 170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;;
+170D;TAGALOG LETTER RA;Lo;0;L;;;;;N;;;;;
 170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;;
 170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;;
 1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;;
@@ -5265,6 +5323,8 @@
 1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
 1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
 1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1715;TAGALOG SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;;
+171F;TAGALOG LETTER ARCHAIC RA;Lo;0;L;;;;;N;;;;;
 1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;;
 1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;;
 1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;;
@@ -5285,7 +5345,7 @@
 1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;;
 1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
 1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;;
+1734;HANUNOO SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;;
 1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
 1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;;
 1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;;
@@ -5455,6 +5515,7 @@
 180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;;
 180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;;
 180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
+180F;MONGOLIAN FREE VARIATION SELECTOR FOUR;Mn;0;NSM;;;;;N;;;;;
 1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -6059,6 +6120,20 @@
 1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;;
 1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;;
 1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;;
+1AC1;COMBINING LEFT PARENTHESIS ABOVE LEFT;Mn;230;NSM;;;;;N;;;;;
+1AC2;COMBINING RIGHT PARENTHESIS ABOVE RIGHT;Mn;230;NSM;;;;;N;;;;;
+1AC3;COMBINING LEFT PARENTHESIS BELOW LEFT;Mn;220;NSM;;;;;N;;;;;
+1AC4;COMBINING RIGHT PARENTHESIS BELOW RIGHT;Mn;220;NSM;;;;;N;;;;;
+1AC5;COMBINING SQUARE BRACKETS ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC6;COMBINING NUMBER SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC7;COMBINING INVERTED DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC8;COMBINING PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC9;COMBINING DOUBLE PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;
+1ACA;COMBINING DOUBLE PLUS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+1ACB;COMBINING TRIPLE ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;;
+1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;;
+1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;;
 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;;
 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;;
 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;;
@@ -6135,6 +6210,7 @@
 1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;;
 1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;;
 1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;;
+1B4C;BALINESE LETTER ARCHAIC JNYA;Lo;0;L;;;;;N;;;;;
 1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -6180,6 +6256,8 @@
 1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;;
 1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;;
 1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;;
+1B7D;BALINESE PANTI LANTANG;Po;0;L;;;;;N;;;;;
+1B7E;BALINESE PAMADA LANTANG;Po;0;L;;;;;N;;;;;
 1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;;
 1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;;
 1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;;
@@ -6778,6 +6856,7 @@
 1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;
 1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;
 1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DFA;COMBINING DOT BELOW LEFT;Mn;218;NSM;;;;;N;;;;;
 1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;;
 1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
 1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;;
@@ -7457,6 +7536,7 @@
 20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;;
 20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;;
 20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;;
+20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;;
 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON 
ABOVE;;;;
 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON 
ABOVE;;;;
 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG 
VERTICAL BAR OVERLAY;;;;
@@ -10300,6 +10380,7 @@
 2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
 2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
 2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
+2C2F;GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI;Lu;0;L;;;;;N;;;;2C5F;
 2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
 2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
 2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
@@ -10347,6 +10428,7 @@
 2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
 2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
 2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
+2C5F;GLAGOLITIC SMALL LETTER CAUDATE CHRIVI;Ll;0;L;;;;;N;;;2C2F;;2C2F
 2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61;
 2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60
 2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B;
@@ -10795,6 +10877,17 @@
 2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;;
 2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;;
 2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;;
+2E53;MEDIEVAL EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+2E54;MEDIEVAL QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2E55;LEFT SQUARE BRACKET WITH STROKE;Ps;0;ON;;;;;Y;;;;;
+2E56;RIGHT SQUARE BRACKET WITH STROKE;Pe;0;ON;;;;;Y;;;;;
+2E57;LEFT SQUARE BRACKET WITH DOUBLE STROKE;Ps;0;ON;;;;;Y;;;;;
+2E58;RIGHT SQUARE BRACKET WITH DOUBLE STROKE;Pe;0;ON;;;;;Y;;;;;
+2E59;TOP HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2E5A;TOP HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2E5B;BOTTOM HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2E5C;BOTTOM HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2E5D;OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
@@ -12204,7 +12297,7 @@
 4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
 4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
 4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FFC;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+9FFF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
 A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
 A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
 A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
@@ -14149,6 +14242,8 @@ A7BC;LATIN CAPITAL LETTER GLOTTAL 
I;Lu;0;L;;;;;N;;;;A7BD;
 A7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC
 A7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF;
 A7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE
+A7C0;LATIN CAPITAL LETTER OLD POLISH O;Lu;0;L;;;;;N;;;;A7C1;
+A7C1;LATIN SMALL LETTER OLD POLISH O;Ll;0;L;;;;;N;;;A7C0;;A7C0
 A7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3;
 A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2
 A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794;
@@ -14158,6 +14253,17 @@ A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE 
OVERLAY;Lu;0;L;;;;;N;;;;A7C8;
 A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7
 A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA;
 A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9
+A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1;
+A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0
+A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;;
+A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;;
+A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7;
+A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6
+A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9;
+A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8
+A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L;<super> 0043;;;;N;;;;;
+A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L;<super> 0046;;;;N;;;;;
+A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L;<super> 0051;;;;N;;;;;
 A7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6;
 A7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5
 A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;;
@@ -15794,6 +15900,7 @@ FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY 
BELOW;Sk;0;AL;;;;;N;;;;;
 FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;;
 FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;;
 FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;;
+FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;;
 FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
 FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
 FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
@@ -16159,6 +16266,22 @@ FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL 
FORM;Lo;0;AL;<final> 0627 064B;;;;
 FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 
064B;;;;N;;;;;
 FD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
 FD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD40;ARABIC LIGATURE RAHIMAHU ALLAAH;So;0;ON;;;;;N;;;;;
+FD41;ARABIC LIGATURE RADI ALLAAHU ANH;So;0;ON;;;;;N;;;;;
+FD42;ARABIC LIGATURE RADI ALLAAHU ANHAA;So;0;ON;;;;;N;;;;;
+FD43;ARABIC LIGATURE RADI ALLAAHU ANHUM;So;0;ON;;;;;N;;;;;
+FD44;ARABIC LIGATURE RADI ALLAAHU ANHUMAA;So;0;ON;;;;;N;;;;;
+FD45;ARABIC LIGATURE RADI ALLAAHU ANHUNNA;So;0;ON;;;;;N;;;;;
+FD46;ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH;So;0;ON;;;;;N;;;;;
+FD47;ARABIC LIGATURE ALAYHI AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD48;ARABIC LIGATURE ALAYHIM AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD49;ARABIC LIGATURE ALAYHIMAA AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD4A;ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;;
+FD4B;ARABIC LIGATURE QUDDISA SIRRAH;So;0;ON;;;;;N;;;;;
+FD4C;ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;;
+FD4D;ARABIC LIGATURE ALAYHAA AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD4E;ARABIC LIGATURE TABAARAKA WA-TAAALAA;So;0;ON;;;;;N;;;;;
+FD4F;ARABIC LIGATURE RAHIMAHUM ALLAAH;So;0;ON;;;;;N;;;;;
 FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 
062A 062C 0645;;;;N;;;;;
 FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 
062D 062C;;;;N;;;;;
 FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 
062A 062D 062C;;;;N;;;;;
@@ -16277,6 +16400,7 @@ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL 
FORM;Lo;0;AL;<initial> 0639
 FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 
0635 0645 0645;;;;N;;;;;
 FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 
062E 064A;;;;N;;;;;
 FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 
062C 064A;;;;N;;;;;
+FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;;
 FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED 
FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
 FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED 
FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
 FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 
0647;;;;N;;;;;
@@ -16291,6 +16415,8 @@ FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE 
WASALLAM;Lo;0;AL;<isolated> 0635 0644 06
 FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 
0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
 FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;
 FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;
+FDFE;ARABIC LIGATURE SUBHAANAHU WA TAAALAA;So;0;ON;;;;;N;;;;;
+FDFF;ARABIC LIGATURE AZZA WA JALL;So;0;ON;;;;;N;;;;;
 FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;
 FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;
 FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;
@@ -17798,6 +17924,76 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;;
 10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;;
 1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;;
+10570;VITHKUQI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;10597;
+10571;VITHKUQI CAPITAL LETTER BBE;Lu;0;L;;;;;N;;;;10598;
+10572;VITHKUQI CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;10599;
+10573;VITHKUQI CAPITAL LETTER CE;Lu;0;L;;;;;N;;;;1059A;
+10574;VITHKUQI CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;1059B;
+10575;VITHKUQI CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;1059C;
+10576;VITHKUQI CAPITAL LETTER DHE;Lu;0;L;;;;;N;;;;1059D;
+10577;VITHKUQI CAPITAL LETTER EI;Lu;0;L;;;;;N;;;;1059E;
+10578;VITHKUQI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;1059F;
+10579;VITHKUQI CAPITAL LETTER FE;Lu;0;L;;;;;N;;;;105A0;
+1057A;VITHKUQI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;105A1;
+1057C;VITHKUQI CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;105A3;
+1057D;VITHKUQI CAPITAL LETTER HHA;Lu;0;L;;;;;N;;;;105A4;
+1057E;VITHKUQI CAPITAL LETTER I;Lu;0;L;;;;;N;;;;105A5;
+1057F;VITHKUQI CAPITAL LETTER IJE;Lu;0;L;;;;;N;;;;105A6;
+10580;VITHKUQI CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;105A7;
+10581;VITHKUQI CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;105A8;
+10582;VITHKUQI CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;105A9;
+10583;VITHKUQI CAPITAL LETTER LLA;Lu;0;L;;;;;N;;;;105AA;
+10584;VITHKUQI CAPITAL LETTER ME;Lu;0;L;;;;;N;;;;105AB;
+10585;VITHKUQI CAPITAL LETTER NE;Lu;0;L;;;;;N;;;;105AC;
+10586;VITHKUQI CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;105AD;
+10587;VITHKUQI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;105AE;
+10588;VITHKUQI CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;105AF;
+10589;VITHKUQI CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;105B0;
+1058A;VITHKUQI CAPITAL LETTER RE;Lu;0;L;;;;;N;;;;105B1;
+1058C;VITHKUQI CAPITAL LETTER SE;Lu;0;L;;;;;N;;;;105B3;
+1058D;VITHKUQI CAPITAL LETTER SHE;Lu;0;L;;;;;N;;;;105B4;
+1058E;VITHKUQI CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;105B5;
+1058F;VITHKUQI CAPITAL LETTER THE;Lu;0;L;;;;;N;;;;105B6;
+10590;VITHKUQI CAPITAL LETTER U;Lu;0;L;;;;;N;;;;105B7;
+10591;VITHKUQI CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;105B8;
+10592;VITHKUQI CAPITAL LETTER XE;Lu;0;L;;;;;N;;;;105B9;
+10594;VITHKUQI CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;105BB;
+10595;VITHKUQI CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;105BC;
+10597;VITHKUQI SMALL LETTER A;Ll;0;L;;;;;N;;;10570;;10570
+10598;VITHKUQI SMALL LETTER BBE;Ll;0;L;;;;;N;;;10571;;10571
+10599;VITHKUQI SMALL LETTER BE;Ll;0;L;;;;;N;;;10572;;10572
+1059A;VITHKUQI SMALL LETTER CE;Ll;0;L;;;;;N;;;10573;;10573
+1059B;VITHKUQI SMALL LETTER CHE;Ll;0;L;;;;;N;;;10574;;10574
+1059C;VITHKUQI SMALL LETTER DE;Ll;0;L;;;;;N;;;10575;;10575
+1059D;VITHKUQI SMALL LETTER DHE;Ll;0;L;;;;;N;;;10576;;10576
+1059E;VITHKUQI SMALL LETTER EI;Ll;0;L;;;;;N;;;10577;;10577
+1059F;VITHKUQI SMALL LETTER E;Ll;0;L;;;;;N;;;10578;;10578
+105A0;VITHKUQI SMALL LETTER FE;Ll;0;L;;;;;N;;;10579;;10579
+105A1;VITHKUQI SMALL LETTER GA;Ll;0;L;;;;;N;;;1057A;;1057A
+105A3;VITHKUQI SMALL LETTER HA;Ll;0;L;;;;;N;;;1057C;;1057C
+105A4;VITHKUQI SMALL LETTER HHA;Ll;0;L;;;;;N;;;1057D;;1057D
+105A5;VITHKUQI SMALL LETTER I;Ll;0;L;;;;;N;;;1057E;;1057E
+105A6;VITHKUQI SMALL LETTER IJE;Ll;0;L;;;;;N;;;1057F;;1057F
+105A7;VITHKUQI SMALL LETTER JE;Ll;0;L;;;;;N;;;10580;;10580
+105A8;VITHKUQI SMALL LETTER KA;Ll;0;L;;;;;N;;;10581;;10581
+105A9;VITHKUQI SMALL LETTER LA;Ll;0;L;;;;;N;;;10582;;10582
+105AA;VITHKUQI SMALL LETTER LLA;Ll;0;L;;;;;N;;;10583;;10583
+105AB;VITHKUQI SMALL LETTER ME;Ll;0;L;;;;;N;;;10584;;10584
+105AC;VITHKUQI SMALL LETTER NE;Ll;0;L;;;;;N;;;10585;;10585
+105AD;VITHKUQI SMALL LETTER NJE;Ll;0;L;;;;;N;;;10586;;10586
+105AE;VITHKUQI SMALL LETTER O;Ll;0;L;;;;;N;;;10587;;10587
+105AF;VITHKUQI SMALL LETTER PE;Ll;0;L;;;;;N;;;10588;;10588
+105B0;VITHKUQI SMALL LETTER QA;Ll;0;L;;;;;N;;;10589;;10589
+105B1;VITHKUQI SMALL LETTER RE;Ll;0;L;;;;;N;;;1058A;;1058A
+105B3;VITHKUQI SMALL LETTER SE;Ll;0;L;;;;;N;;;1058C;;1058C
+105B4;VITHKUQI SMALL LETTER SHE;Ll;0;L;;;;;N;;;1058D;;1058D
+105B5;VITHKUQI SMALL LETTER TE;Ll;0;L;;;;;N;;;1058E;;1058E
+105B6;VITHKUQI SMALL LETTER THE;Ll;0;L;;;;;N;;;1058F;;1058F
+105B7;VITHKUQI SMALL LETTER U;Ll;0;L;;;;;N;;;10590;;10590
+105B8;VITHKUQI SMALL LETTER VE;Ll;0;L;;;;;N;;;10591;;10591
+105B9;VITHKUQI SMALL LETTER XE;Ll;0;L;;;;;N;;;10592;;10592
+105BB;VITHKUQI SMALL LETTER Y;Ll;0;L;;;;;N;;;10594;;10594
+105BC;VITHKUQI SMALL LETTER ZE;Ll;0;L;;;;;N;;;10595;;10595
 10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;;
 10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;;
 10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;;
@@ -18139,6 +18335,63 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;;
 10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;;
 10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;;
+10780;MODIFIER LETTER SMALL CAPITAL AA;Lm;0;L;;;;;N;;;;;
+10781;MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON;Lm;0;L;<super> 
02D0;;;;N;;;;;
+10782;MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON;Lm;0;L;<super> 
02D1;;;;N;;;;;
+10783;MODIFIER LETTER SMALL AE;Lm;0;L;<super> 00E6;;;;N;;;;;
+10784;MODIFIER LETTER SMALL CAPITAL B;Lm;0;L;<super> 0299;;;;N;;;;;
+10785;MODIFIER LETTER SMALL B WITH HOOK;Lm;0;L;<super> 0253;;;;N;;;;;
+10787;MODIFIER LETTER SMALL DZ DIGRAPH;Lm;0;L;<super> 02A3;;;;N;;;;;
+10788;MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK;Lm;0;L;<super> 
AB66;;;;N;;;;;
+10789;MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL;Lm;0;L;<super> 02A5;;;;N;;;;;
+1078A;MODIFIER LETTER SMALL DEZH DIGRAPH;Lm;0;L;<super> 02A4;;;;N;;;;;
+1078B;MODIFIER LETTER SMALL D WITH TAIL;Lm;0;L;<super> 0256;;;;N;;;;;
+1078C;MODIFIER LETTER SMALL D WITH HOOK;Lm;0;L;<super> 0257;;;;N;;;;;
+1078D;MODIFIER LETTER SMALL D WITH HOOK AND TAIL;Lm;0;L;<super> 1D91;;;;N;;;;;
+1078E;MODIFIER LETTER SMALL REVERSED E;Lm;0;L;<super> 0258;;;;N;;;;;
+1078F;MODIFIER LETTER SMALL CLOSED REVERSED OPEN E;Lm;0;L;<super> 
025E;;;;N;;;;;
+10790;MODIFIER LETTER SMALL FENG DIGRAPH;Lm;0;L;<super> 02A9;;;;N;;;;;
+10791;MODIFIER LETTER SMALL RAMS HORN;Lm;0;L;<super> 0264;;;;N;;;;;
+10792;MODIFIER LETTER SMALL CAPITAL G;Lm;0;L;<super> 0262;;;;N;;;;;
+10793;MODIFIER LETTER SMALL G WITH HOOK;Lm;0;L;<super> 0260;;;;N;;;;;
+10794;MODIFIER LETTER SMALL CAPITAL G WITH HOOK;Lm;0;L;<super> 029B;;;;N;;;;;
+10795;MODIFIER LETTER SMALL H WITH STROKE;Lm;0;L;<super> 0127;;;;N;;;;;
+10796;MODIFIER LETTER SMALL CAPITAL H;Lm;0;L;<super> 029C;;;;N;;;;;
+10797;MODIFIER LETTER SMALL HENG WITH HOOK;Lm;0;L;<super> 0267;;;;N;;;;;
+10798;MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK;Lm;0;L;<super> 
0284;;;;N;;;;;
+10799;MODIFIER LETTER SMALL LS DIGRAPH;Lm;0;L;<super> 02AA;;;;N;;;;;
+1079A;MODIFIER LETTER SMALL LZ DIGRAPH;Lm;0;L;<super> 02AB;;;;N;;;;;
+1079B;MODIFIER LETTER SMALL L WITH BELT;Lm;0;L;<super> 026C;;;;N;;;;;
+1079C;MODIFIER LETTER SMALL CAPITAL L WITH BELT;Lm;0;L;<super> 1DF04;;;;N;;;;;
+1079D;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT;Lm;0;L;<super> 
A78E;;;;N;;;;;
+1079E;MODIFIER LETTER SMALL LEZH;Lm;0;L;<super> 026E;;;;N;;;;;
+1079F;MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK;Lm;0;L;<super> 
1DF05;;;;N;;;;;
+107A0;MODIFIER LETTER SMALL TURNED Y;Lm;0;L;<super> 028E;;;;N;;;;;
+107A1;MODIFIER LETTER SMALL TURNED Y WITH BELT;Lm;0;L;<super> 1DF06;;;;N;;;;;
+107A2;MODIFIER LETTER SMALL O WITH STROKE;Lm;0;L;<super> 00F8;;;;N;;;;;
+107A3;MODIFIER LETTER SMALL CAPITAL OE;Lm;0;L;<super> 0276;;;;N;;;;;
+107A4;MODIFIER LETTER SMALL CLOSED OMEGA;Lm;0;L;<super> 0277;;;;N;;;;;
+107A5;MODIFIER LETTER SMALL Q;Lm;0;L;<super> 0071;;;;N;;;;;
+107A6;MODIFIER LETTER SMALL TURNED R WITH LONG LEG;Lm;0;L;<super> 
027A;;;;N;;;;;
+107A7;MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX 
HOOK;Lm;0;L;<super> 1DF08;;;;N;;;;;
+107A8;MODIFIER LETTER SMALL R WITH TAIL;Lm;0;L;<super> 027D;;;;N;;;;;
+107A9;MODIFIER LETTER SMALL R WITH FISHHOOK;Lm;0;L;<super> 027E;;;;N;;;;;
+107AA;MODIFIER LETTER SMALL CAPITAL R;Lm;0;L;<super> 0280;;;;N;;;;;
+107AB;MODIFIER LETTER SMALL TC DIGRAPH WITH CURL;Lm;0;L;<super> 02A8;;;;N;;;;;
+107AC;MODIFIER LETTER SMALL TS DIGRAPH;Lm;0;L;<super> 02A6;;;;N;;;;;
+107AD;MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK;Lm;0;L;<super> 
AB67;;;;N;;;;;
+107AE;MODIFIER LETTER SMALL TESH DIGRAPH;Lm;0;L;<super> 02A7;;;;N;;;;;
+107AF;MODIFIER LETTER SMALL T WITH RETROFLEX HOOK;Lm;0;L;<super> 0288;;;;N;;;;;
+107B0;MODIFIER LETTER SMALL V WITH RIGHT HOOK;Lm;0;L;<super> 2C71;;;;N;;;;;
+107B2;MODIFIER LETTER SMALL CAPITAL Y;Lm;0;L;<super> 028F;;;;N;;;;;
+107B3;MODIFIER LETTER GLOTTAL STOP WITH STROKE;Lm;0;L;<super> 02A1;;;;N;;;;;
+107B4;MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE;Lm;0;L;<super> 
02A2;;;;N;;;;;
+107B5;MODIFIER LETTER BILABIAL CLICK;Lm;0;L;<super> 0298;;;;N;;;;;
+107B6;MODIFIER LETTER DENTAL CLICK;Lm;0;L;<super> 01C0;;;;N;;;;;
+107B7;MODIFIER LETTER LATERAL CLICK;Lm;0;L;<super> 01C1;;;;N;;;;;
+107B8;MODIFIER LETTER ALVEOLAR CLICK;Lm;0;L;<super> 01C2;;;;N;;;;;
+107B9;MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lm;0;L;<super> 
1DF0A;;;;N;;;;;
+107BA;MODIFIER LETTER SMALL S WITH CURL;Lm;0;L;<super> 1DF1E;;;;N;;;;;
 10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;;
 10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;;
 10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;;
@@ -19222,6 +19475,32 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
 10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;;
 10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
+10F70;OLD UYGHUR LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10F71;OLD UYGHUR LETTER BETH;Lo;0;R;;;;;N;;;;;
+10F72;OLD UYGHUR LETTER GIMEL-HETH;Lo;0;R;;;;;N;;;;;
+10F73;OLD UYGHUR LETTER WAW;Lo;0;R;;;;;N;;;;;
+10F74;OLD UYGHUR LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10F75;OLD UYGHUR LETTER FINAL HETH;Lo;0;R;;;;;N;;;;;
+10F76;OLD UYGHUR LETTER YODH;Lo;0;R;;;;;N;;;;;
+10F77;OLD UYGHUR LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10F78;OLD UYGHUR LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10F79;OLD UYGHUR LETTER MEM;Lo;0;R;;;;;N;;;;;
+10F7A;OLD UYGHUR LETTER NUN;Lo;0;R;;;;;N;;;;;
+10F7B;OLD UYGHUR LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10F7C;OLD UYGHUR LETTER PE;Lo;0;R;;;;;N;;;;;
+10F7D;OLD UYGHUR LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10F7E;OLD UYGHUR LETTER RESH;Lo;0;R;;;;;N;;;;;
+10F7F;OLD UYGHUR LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10F80;OLD UYGHUR LETTER TAW;Lo;0;R;;;;;N;;;;;
+10F81;OLD UYGHUR LETTER LESH;Lo;0;R;;;;;N;;;;;
+10F82;OLD UYGHUR COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F83;OLD UYGHUR COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10F84;OLD UYGHUR COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F85;OLD UYGHUR COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+10F86;OLD UYGHUR PUNCTUATION BAR;Po;0;R;;;;;N;;;;;
+10F87;OLD UYGHUR PUNCTUATION TWO BARS;Po;0;R;;;;;N;;;;;
+10F88;OLD UYGHUR PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;;
+10F89;OLD UYGHUR PUNCTUATION FOUR DOTS;Po;0;R;;;;;N;;;;;
 10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
 10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;;
 10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
@@ -19381,6 +19660,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
 1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11070;BRAHMI SIGN OLD TAMIL VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11071;BRAHMI LETTER OLD TAMIL SHORT E;Lo;0;L;;;;;N;;;;;
+11072;BRAHMI LETTER OLD TAMIL SHORT O;Lo;0;L;;;;;N;;;;;
+11073;BRAHMI VOWEL SIGN OLD TAMIL SHORT E;Mn;0;NSM;;;;;N;;;;;
+11074;BRAHMI VOWEL SIGN OLD TAMIL SHORT O;Mn;0;NSM;;;;;N;;;;;
+11075;BRAHMI LETTER OLD TAMIL LLA;Lo;0;L;;;;;N;;;;;
 1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;;
 11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
 11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
@@ -19448,6 +19733,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
 110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;;
 110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+110C2;KAITHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
 110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;;
 110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;;
 110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;;
@@ -20385,6 +20671,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
 116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
 116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;;
+116B9;TAKRI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
 116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -20453,6 +20740,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;;
 1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;;
 1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;;
+11740;AHOM LETTER CA;Lo;0;L;;;;;N;;;;;
+11741;AHOM LETTER TTA;Lo;0;L;;;;;N;;;;;
+11742;AHOM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11743;AHOM LETTER DDA;Lo;0;L;;;;;N;;;;;
+11744;AHOM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11745;AHOM LETTER NNA;Lo;0;L;;;;;N;;;;;
+11746;AHOM LETTER LLA;Lo;0;L;;;;;N;;;;;
 11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;;
 11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;;
 11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;;
@@ -20889,6 +21183,22 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;;
 11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;;
 11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;;
+11AB0;CANADIAN SYLLABICS NATTILIK HI;Lo;0;L;;;;;N;;;;;
+11AB1;CANADIAN SYLLABICS NATTILIK HII;Lo;0;L;;;;;N;;;;;
+11AB2;CANADIAN SYLLABICS NATTILIK HO;Lo;0;L;;;;;N;;;;;
+11AB3;CANADIAN SYLLABICS NATTILIK HOO;Lo;0;L;;;;;N;;;;;
+11AB4;CANADIAN SYLLABICS NATTILIK HA;Lo;0;L;;;;;N;;;;;
+11AB5;CANADIAN SYLLABICS NATTILIK HAA;Lo;0;L;;;;;N;;;;;
+11AB6;CANADIAN SYLLABICS NATTILIK SHRI;Lo;0;L;;;;;N;;;;;
+11AB7;CANADIAN SYLLABICS NATTILIK SHRII;Lo;0;L;;;;;N;;;;;
+11AB8;CANADIAN SYLLABICS NATTILIK SHRO;Lo;0;L;;;;;N;;;;;
+11AB9;CANADIAN SYLLABICS NATTILIK SHROO;Lo;0;L;;;;;N;;;;;
+11ABA;CANADIAN SYLLABICS NATTILIK SHRA;Lo;0;L;;;;;N;;;;;
+11ABB;CANADIAN SYLLABICS NATTILIK SHRAA;Lo;0;L;;;;;N;;;;;
+11ABC;CANADIAN SYLLABICS SPE;Lo;0;L;;;;;N;;;;;
+11ABD;CANADIAN SYLLABICS SPI;Lo;0;L;;;;;N;;;;;
+11ABE;CANADIAN SYLLABICS SPO;Lo;0;L;;;;;N;;;;;
+11ABF;CANADIAN SYLLABICS SPA;Lo;0;L;;;;;N;;;;;
 11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;;
 11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;;
 11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;;
@@ -22560,6 +22870,105 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;;
 12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;;
 12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;;
+12F90;CYPRO-MINOAN SIGN CM001;Lo;0;L;;;;;N;;;;;
+12F91;CYPRO-MINOAN SIGN CM002;Lo;0;L;;;;;N;;;;;
+12F92;CYPRO-MINOAN SIGN CM004;Lo;0;L;;;;;N;;;;;
+12F93;CYPRO-MINOAN SIGN CM005;Lo;0;L;;;;;N;;;;;
+12F94;CYPRO-MINOAN SIGN CM006;Lo;0;L;;;;;N;;;;;
+12F95;CYPRO-MINOAN SIGN CM007;Lo;0;L;;;;;N;;;;;
+12F96;CYPRO-MINOAN SIGN CM008;Lo;0;L;;;;;N;;;;;
+12F97;CYPRO-MINOAN SIGN CM009;Lo;0;L;;;;;N;;;;;
+12F98;CYPRO-MINOAN SIGN CM010;Lo;0;L;;;;;N;;;;;
+12F99;CYPRO-MINOAN SIGN CM011;Lo;0;L;;;;;N;;;;;
+12F9A;CYPRO-MINOAN SIGN CM012;Lo;0;L;;;;;N;;;;;
+12F9B;CYPRO-MINOAN SIGN CM012B;Lo;0;L;;;;;N;;;;;
+12F9C;CYPRO-MINOAN SIGN CM013;Lo;0;L;;;;;N;;;;;
+12F9D;CYPRO-MINOAN SIGN CM015;Lo;0;L;;;;;N;;;;;
+12F9E;CYPRO-MINOAN SIGN CM017;Lo;0;L;;;;;N;;;;;
+12F9F;CYPRO-MINOAN SIGN CM019;Lo;0;L;;;;;N;;;;;
+12FA0;CYPRO-MINOAN SIGN CM021;Lo;0;L;;;;;N;;;;;
+12FA1;CYPRO-MINOAN SIGN CM023;Lo;0;L;;;;;N;;;;;
+12FA2;CYPRO-MINOAN SIGN CM024;Lo;0;L;;;;;N;;;;;
+12FA3;CYPRO-MINOAN SIGN CM025;Lo;0;L;;;;;N;;;;;
+12FA4;CYPRO-MINOAN SIGN CM026;Lo;0;L;;;;;N;;;;;
+12FA5;CYPRO-MINOAN SIGN CM027;Lo;0;L;;;;;N;;;;;
+12FA6;CYPRO-MINOAN SIGN CM028;Lo;0;L;;;;;N;;;;;
+12FA7;CYPRO-MINOAN SIGN CM029;Lo;0;L;;;;;N;;;;;
+12FA8;CYPRO-MINOAN SIGN CM030;Lo;0;L;;;;;N;;;;;
+12FA9;CYPRO-MINOAN SIGN CM033;Lo;0;L;;;;;N;;;;;
+12FAA;CYPRO-MINOAN SIGN CM034;Lo;0;L;;;;;N;;;;;
+12FAB;CYPRO-MINOAN SIGN CM035;Lo;0;L;;;;;N;;;;;
+12FAC;CYPRO-MINOAN SIGN CM036;Lo;0;L;;;;;N;;;;;
+12FAD;CYPRO-MINOAN SIGN CM037;Lo;0;L;;;;;N;;;;;
+12FAE;CYPRO-MINOAN SIGN CM038;Lo;0;L;;;;;N;;;;;
+12FAF;CYPRO-MINOAN SIGN CM039;Lo;0;L;;;;;N;;;;;
+12FB0;CYPRO-MINOAN SIGN CM040;Lo;0;L;;;;;N;;;;;
+12FB1;CYPRO-MINOAN SIGN CM041;Lo;0;L;;;;;N;;;;;
+12FB2;CYPRO-MINOAN SIGN CM044;Lo;0;L;;;;;N;;;;;
+12FB3;CYPRO-MINOAN SIGN CM046;Lo;0;L;;;;;N;;;;;
+12FB4;CYPRO-MINOAN SIGN CM047;Lo;0;L;;;;;N;;;;;
+12FB5;CYPRO-MINOAN SIGN CM049;Lo;0;L;;;;;N;;;;;
+12FB6;CYPRO-MINOAN SIGN CM050;Lo;0;L;;;;;N;;;;;
+12FB7;CYPRO-MINOAN SIGN CM051;Lo;0;L;;;;;N;;;;;
+12FB8;CYPRO-MINOAN SIGN CM052;Lo;0;L;;;;;N;;;;;
+12FB9;CYPRO-MINOAN SIGN CM053;Lo;0;L;;;;;N;;;;;
+12FBA;CYPRO-MINOAN SIGN CM054;Lo;0;L;;;;;N;;;;;
+12FBB;CYPRO-MINOAN SIGN CM055;Lo;0;L;;;;;N;;;;;
+12FBC;CYPRO-MINOAN SIGN CM056;Lo;0;L;;;;;N;;;;;
+12FBD;CYPRO-MINOAN SIGN CM058;Lo;0;L;;;;;N;;;;;
+12FBE;CYPRO-MINOAN SIGN CM059;Lo;0;L;;;;;N;;;;;
+12FBF;CYPRO-MINOAN SIGN CM060;Lo;0;L;;;;;N;;;;;
+12FC0;CYPRO-MINOAN SIGN CM061;Lo;0;L;;;;;N;;;;;
+12FC1;CYPRO-MINOAN SIGN CM062;Lo;0;L;;;;;N;;;;;
+12FC2;CYPRO-MINOAN SIGN CM063;Lo;0;L;;;;;N;;;;;
+12FC3;CYPRO-MINOAN SIGN CM064;Lo;0;L;;;;;N;;;;;
+12FC4;CYPRO-MINOAN SIGN CM066;Lo;0;L;;;;;N;;;;;
+12FC5;CYPRO-MINOAN SIGN CM067;Lo;0;L;;;;;N;;;;;
+12FC6;CYPRO-MINOAN SIGN CM068;Lo;0;L;;;;;N;;;;;
+12FC7;CYPRO-MINOAN SIGN CM069;Lo;0;L;;;;;N;;;;;
+12FC8;CYPRO-MINOAN SIGN CM070;Lo;0;L;;;;;N;;;;;
+12FC9;CYPRO-MINOAN SIGN CM071;Lo;0;L;;;;;N;;;;;
+12FCA;CYPRO-MINOAN SIGN CM072;Lo;0;L;;;;;N;;;;;
+12FCB;CYPRO-MINOAN SIGN CM073;Lo;0;L;;;;;N;;;;;
+12FCC;CYPRO-MINOAN SIGN CM074;Lo;0;L;;;;;N;;;;;
+12FCD;CYPRO-MINOAN SIGN CM075;Lo;0;L;;;;;N;;;;;
+12FCE;CYPRO-MINOAN SIGN CM075B;Lo;0;L;;;;;N;;;;;
+12FCF;CYPRO-MINOAN SIGN CM076;Lo;0;L;;;;;N;;;;;
+12FD0;CYPRO-MINOAN SIGN CM078;Lo;0;L;;;;;N;;;;;
+12FD1;CYPRO-MINOAN SIGN CM079;Lo;0;L;;;;;N;;;;;
+12FD2;CYPRO-MINOAN SIGN CM080;Lo;0;L;;;;;N;;;;;
+12FD3;CYPRO-MINOAN SIGN CM081;Lo;0;L;;;;;N;;;;;
+12FD4;CYPRO-MINOAN SIGN CM082;Lo;0;L;;;;;N;;;;;
+12FD5;CYPRO-MINOAN SIGN CM083;Lo;0;L;;;;;N;;;;;
+12FD6;CYPRO-MINOAN SIGN CM084;Lo;0;L;;;;;N;;;;;
+12FD7;CYPRO-MINOAN SIGN CM085;Lo;0;L;;;;;N;;;;;
+12FD8;CYPRO-MINOAN SIGN CM086;Lo;0;L;;;;;N;;;;;
+12FD9;CYPRO-MINOAN SIGN CM087;Lo;0;L;;;;;N;;;;;
+12FDA;CYPRO-MINOAN SIGN CM088;Lo;0;L;;;;;N;;;;;
+12FDB;CYPRO-MINOAN SIGN CM089;Lo;0;L;;;;;N;;;;;
+12FDC;CYPRO-MINOAN SIGN CM090;Lo;0;L;;;;;N;;;;;
+12FDD;CYPRO-MINOAN SIGN CM091;Lo;0;L;;;;;N;;;;;
+12FDE;CYPRO-MINOAN SIGN CM092;Lo;0;L;;;;;N;;;;;
+12FDF;CYPRO-MINOAN SIGN CM094;Lo;0;L;;;;;N;;;;;
+12FE0;CYPRO-MINOAN SIGN CM095;Lo;0;L;;;;;N;;;;;
+12FE1;CYPRO-MINOAN SIGN CM096;Lo;0;L;;;;;N;;;;;
+12FE2;CYPRO-MINOAN SIGN CM097;Lo;0;L;;;;;N;;;;;
+12FE3;CYPRO-MINOAN SIGN CM098;Lo;0;L;;;;;N;;;;;
+12FE4;CYPRO-MINOAN SIGN CM099;Lo;0;L;;;;;N;;;;;
+12FE5;CYPRO-MINOAN SIGN CM100;Lo;0;L;;;;;N;;;;;
+12FE6;CYPRO-MINOAN SIGN CM101;Lo;0;L;;;;;N;;;;;
+12FE7;CYPRO-MINOAN SIGN CM102;Lo;0;L;;;;;N;;;;;
+12FE8;CYPRO-MINOAN SIGN CM103;Lo;0;L;;;;;N;;;;;
+12FE9;CYPRO-MINOAN SIGN CM104;Lo;0;L;;;;;N;;;;;
+12FEA;CYPRO-MINOAN SIGN CM105;Lo;0;L;;;;;N;;;;;
+12FEB;CYPRO-MINOAN SIGN CM107;Lo;0;L;;;;;N;;;;;
+12FEC;CYPRO-MINOAN SIGN CM108;Lo;0;L;;;;;N;;;;;
+12FED;CYPRO-MINOAN SIGN CM109;Lo;0;L;;;;;N;;;;;
+12FEE;CYPRO-MINOAN SIGN CM110;Lo;0;L;;;;;N;;;;;
+12FEF;CYPRO-MINOAN SIGN CM112;Lo;0;L;;;;;N;;;;;
+12FF0;CYPRO-MINOAN SIGN CM114;Lo;0;L;;;;;N;;;;;
+12FF1;CYPRO-MINOAN SIGN CM301;Po;0;L;;;;;N;;;;;
+12FF2;CYPRO-MINOAN SIGN CM302;Po;0;L;;;;;N;;;;;
 13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;
 13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;
 13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;
@@ -24835,6 +25244,95 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 16A6E;MRO DANDA;Po;0;L;;;;;N;;;;;
 16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+16A70;TANGSA LETTER OZ;Lo;0;L;;;;;N;;;;;
+16A71;TANGSA LETTER OC;Lo;0;L;;;;;N;;;;;
+16A72;TANGSA LETTER OQ;Lo;0;L;;;;;N;;;;;
+16A73;TANGSA LETTER OX;Lo;0;L;;;;;N;;;;;
+16A74;TANGSA LETTER AZ;Lo;0;L;;;;;N;;;;;
+16A75;TANGSA LETTER AC;Lo;0;L;;;;;N;;;;;
+16A76;TANGSA LETTER AQ;Lo;0;L;;;;;N;;;;;
+16A77;TANGSA LETTER AX;Lo;0;L;;;;;N;;;;;
+16A78;TANGSA LETTER VZ;Lo;0;L;;;;;N;;;;;
+16A79;TANGSA LETTER VC;Lo;0;L;;;;;N;;;;;
+16A7A;TANGSA LETTER VQ;Lo;0;L;;;;;N;;;;;
+16A7B;TANGSA LETTER VX;Lo;0;L;;;;;N;;;;;
+16A7C;TANGSA LETTER EZ;Lo;0;L;;;;;N;;;;;
+16A7D;TANGSA LETTER EC;Lo;0;L;;;;;N;;;;;
+16A7E;TANGSA LETTER EQ;Lo;0;L;;;;;N;;;;;
+16A7F;TANGSA LETTER EX;Lo;0;L;;;;;N;;;;;
+16A80;TANGSA LETTER IZ;Lo;0;L;;;;;N;;;;;
+16A81;TANGSA LETTER IC;Lo;0;L;;;;;N;;;;;
+16A82;TANGSA LETTER IQ;Lo;0;L;;;;;N;;;;;
+16A83;TANGSA LETTER IX;Lo;0;L;;;;;N;;;;;
+16A84;TANGSA LETTER UZ;Lo;0;L;;;;;N;;;;;
+16A85;TANGSA LETTER UC;Lo;0;L;;;;;N;;;;;
+16A86;TANGSA LETTER UQ;Lo;0;L;;;;;N;;;;;
+16A87;TANGSA LETTER UX;Lo;0;L;;;;;N;;;;;
+16A88;TANGSA LETTER AWZ;Lo;0;L;;;;;N;;;;;
+16A89;TANGSA LETTER AWC;Lo;0;L;;;;;N;;;;;
+16A8A;TANGSA LETTER AWQ;Lo;0;L;;;;;N;;;;;
+16A8B;TANGSA LETTER AWX;Lo;0;L;;;;;N;;;;;
+16A8C;TANGSA LETTER UIZ;Lo;0;L;;;;;N;;;;;
+16A8D;TANGSA LETTER UIC;Lo;0;L;;;;;N;;;;;
+16A8E;TANGSA LETTER UIQ;Lo;0;L;;;;;N;;;;;
+16A8F;TANGSA LETTER UIX;Lo;0;L;;;;;N;;;;;
+16A90;TANGSA LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+16A91;TANGSA LETTER LONG UEX;Lo;0;L;;;;;N;;;;;
+16A92;TANGSA LETTER SHORT UEZ;Lo;0;L;;;;;N;;;;;
+16A93;TANGSA LETTER SHORT AWX;Lo;0;L;;;;;N;;;;;
+16A94;TANGSA LETTER UEC;Lo;0;L;;;;;N;;;;;
+16A95;TANGSA LETTER UEZ;Lo;0;L;;;;;N;;;;;
+16A96;TANGSA LETTER UEQ;Lo;0;L;;;;;N;;;;;
+16A97;TANGSA LETTER UEX;Lo;0;L;;;;;N;;;;;
+16A98;TANGSA LETTER UIUZ;Lo;0;L;;;;;N;;;;;
+16A99;TANGSA LETTER UIUC;Lo;0;L;;;;;N;;;;;
+16A9A;TANGSA LETTER UIUQ;Lo;0;L;;;;;N;;;;;
+16A9B;TANGSA LETTER UIUX;Lo;0;L;;;;;N;;;;;
+16A9C;TANGSA LETTER MZ;Lo;0;L;;;;;N;;;;;
+16A9D;TANGSA LETTER MC;Lo;0;L;;;;;N;;;;;
+16A9E;TANGSA LETTER MQ;Lo;0;L;;;;;N;;;;;
+16A9F;TANGSA LETTER MX;Lo;0;L;;;;;N;;;;;
+16AA0;TANGSA LETTER KA;Lo;0;L;;;;;N;;;;;
+16AA1;TANGSA LETTER KHA;Lo;0;L;;;;;N;;;;;
+16AA2;TANGSA LETTER GA;Lo;0;L;;;;;N;;;;;
+16AA3;TANGSA LETTER NGA;Lo;0;L;;;;;N;;;;;
+16AA4;TANGSA LETTER SA;Lo;0;L;;;;;N;;;;;
+16AA5;TANGSA LETTER YA;Lo;0;L;;;;;N;;;;;
+16AA6;TANGSA LETTER WA;Lo;0;L;;;;;N;;;;;
+16AA7;TANGSA LETTER PA;Lo;0;L;;;;;N;;;;;
+16AA8;TANGSA LETTER NYA;Lo;0;L;;;;;N;;;;;
+16AA9;TANGSA LETTER PHA;Lo;0;L;;;;;N;;;;;
+16AAA;TANGSA LETTER BA;Lo;0;L;;;;;N;;;;;
+16AAB;TANGSA LETTER MA;Lo;0;L;;;;;N;;;;;
+16AAC;TANGSA LETTER NA;Lo;0;L;;;;;N;;;;;
+16AAD;TANGSA LETTER HA;Lo;0;L;;;;;N;;;;;
+16AAE;TANGSA LETTER LA;Lo;0;L;;;;;N;;;;;
+16AAF;TANGSA LETTER HTA;Lo;0;L;;;;;N;;;;;
+16AB0;TANGSA LETTER TA;Lo;0;L;;;;;N;;;;;
+16AB1;TANGSA LETTER DA;Lo;0;L;;;;;N;;;;;
+16AB2;TANGSA LETTER RA;Lo;0;L;;;;;N;;;;;
+16AB3;TANGSA LETTER NHA;Lo;0;L;;;;;N;;;;;
+16AB4;TANGSA LETTER SHA;Lo;0;L;;;;;N;;;;;
+16AB5;TANGSA LETTER CA;Lo;0;L;;;;;N;;;;;
+16AB6;TANGSA LETTER TSA;Lo;0;L;;;;;N;;;;;
+16AB7;TANGSA LETTER GHA;Lo;0;L;;;;;N;;;;;
+16AB8;TANGSA LETTER HTTA;Lo;0;L;;;;;N;;;;;
+16AB9;TANGSA LETTER THA;Lo;0;L;;;;;N;;;;;
+16ABA;TANGSA LETTER XA;Lo;0;L;;;;;N;;;;;
+16ABB;TANGSA LETTER FA;Lo;0;L;;;;;N;;;;;
+16ABC;TANGSA LETTER DHA;Lo;0;L;;;;;N;;;;;
+16ABD;TANGSA LETTER CHA;Lo;0;L;;;;;N;;;;;
+16ABE;TANGSA LETTER ZA;Lo;0;L;;;;;N;;;;;
+16AC0;TANGSA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+16AC1;TANGSA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+16AC2;TANGSA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+16AC3;TANGSA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+16AC4;TANGSA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+16AC5;TANGSA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+16AC6;TANGSA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+16AC7;TANGSA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+16AC8;TANGSA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+16AC9;TANGSA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;;
 16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;;
 16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;;
@@ -26487,6 +26985,19 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;;
 18D00;<Tangut Ideograph Supplement, First>;Lo;0;L;;;;;N;;;;;
 18D08;<Tangut Ideograph Supplement, Last>;Lo;0;L;;;;;N;;;;;
+1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;;
+1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;;
+1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;;
+1AFF3;KATAKANA LETTER MINNAN TONE-5;Lm;0;L;;;;;N;;;;;
+1AFF5;KATAKANA LETTER MINNAN TONE-7;Lm;0;L;;;;;N;;;;;
+1AFF6;KATAKANA LETTER MINNAN TONE-8;Lm;0;L;;;;;N;;;;;
+1AFF7;KATAKANA LETTER MINNAN NASALIZED TONE-1;Lm;0;L;;;;;N;;;;;
+1AFF8;KATAKANA LETTER MINNAN NASALIZED TONE-2;Lm;0;L;;;;;N;;;;;
+1AFF9;KATAKANA LETTER MINNAN NASALIZED TONE-3;Lm;0;L;;;;;N;;;;;
+1AFFA;KATAKANA LETTER MINNAN NASALIZED TONE-4;Lm;0;L;;;;;N;;;;;
+1AFFB;KATAKANA LETTER MINNAN NASALIZED TONE-5;Lm;0;L;;;;;N;;;;;
+1AFFD;KATAKANA LETTER MINNAN NASALIZED TONE-7;Lm;0;L;;;;;N;;;;;
+1AFFE;KATAKANA LETTER MINNAN NASALIZED TONE-8;Lm;0;L;;;;;N;;;;;
 1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;;
 1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
 1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;;
@@ -26774,6 +27285,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;;
 1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;;
 1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;;
+1B11F;HIRAGANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;;
+1B120;KATAKANA LETTER ARCHAIC YI;Lo;0;L;;;;;N;;;;;
+1B121;KATAKANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
+1B122;KATAKANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;;
 1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;;
 1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;;
 1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;;
@@ -27324,6 +27839,191 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;;
 1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;;
 1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;;
+1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON 
LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF03;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF04;ZNAMENNY COMBINING MARK NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF05;ZNAMENNY COMBINING MARK SREDNE ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF06;ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF07;ZNAMENNY COMBINING MARK POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF08;ZNAMENNY COMBINING MARK VYSOKO ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF09;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON 
LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF0A;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF0B;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF0C;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON 
RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF0D;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF0E;ZNAMENNY COMBINING MARK TSATA ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF0F;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF10;ZNAMENNY COMBINING MARK NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF11;ZNAMENNY COMBINING MARK SREDNE ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF12;ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF13;ZNAMENNY COMBINING MARK POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF14;ZNAMENNY COMBINING MARK VYSOKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF15;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON 
RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF16;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF17;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF18;ZNAMENNY COMBINING MARK TSATA S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF19;ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF1A;ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE;Mn;0;NSM;;;;;N;;;;;
+1CF1B;ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF1C;ZNAMENNY COMBINING MARK POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;;
+1CF1D;ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF1E;ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;;
+1CF1F;ZNAMENNY COMBINING MARK GORAZDO VYSOKO;Mn;0;NSM;;;;;N;;;;;
+1CF20;ZNAMENNY COMBINING MARK ZELO;Mn;0;NSM;;;;;N;;;;;
+1CF21;ZNAMENNY COMBINING MARK ON;Mn;0;NSM;;;;;N;;;;;
+1CF22;ZNAMENNY COMBINING MARK RAVNO;Mn;0;NSM;;;;;N;;;;;
+1CF23;ZNAMENNY COMBINING MARK TIKHAYA;Mn;0;NSM;;;;;N;;;;;
+1CF24;ZNAMENNY COMBINING MARK BORZAYA;Mn;0;NSM;;;;;N;;;;;
+1CF25;ZNAMENNY COMBINING MARK UDARKA;Mn;0;NSM;;;;;N;;;;;
+1CF26;ZNAMENNY COMBINING MARK PODVERTKA;Mn;0;NSM;;;;;N;;;;;
+1CF27;ZNAMENNY COMBINING MARK LOMKA;Mn;0;NSM;;;;;N;;;;;
+1CF28;ZNAMENNY COMBINING MARK KUPNAYA;Mn;0;NSM;;;;;N;;;;;
+1CF29;ZNAMENNY COMBINING MARK KACHKA;Mn;0;NSM;;;;;N;;;;;
+1CF2A;ZNAMENNY COMBINING MARK ZEVOK;Mn;0;NSM;;;;;N;;;;;
+1CF2B;ZNAMENNY COMBINING MARK SKOBA;Mn;0;NSM;;;;;N;;;;;
+1CF2C;ZNAMENNY COMBINING MARK RAZSEKA;Mn;0;NSM;;;;;N;;;;;
+1CF2D;ZNAMENNY COMBINING MARK KRYZH ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF30;ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO;Mn;0;NSM;;;;;N;;;;;
+1CF31;ZNAMENNY COMBINING TONAL RANGE MARK SVETLO;Mn;0;NSM;;;;;N;;;;;
+1CF32;ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO;Mn;0;NSM;;;;;N;;;;;
+1CF33;ZNAMENNY COMBINING MARK ZADERZHKA;Mn;0;NSM;;;;;N;;;;;
+1CF34;ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA;Mn;0;NSM;;;;;N;;;;;
+1CF35;ZNAMENNY COMBINING MARK OTSECHKA;Mn;0;NSM;;;;;N;;;;;
+1CF36;ZNAMENNY COMBINING MARK PODCHASHIE;Mn;0;NSM;;;;;N;;;;;
+1CF37;ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL 
STROKE;Mn;0;NSM;;;;;N;;;;;
+1CF38;ZNAMENNY COMBINING MARK CHASHKA;Mn;0;NSM;;;;;N;;;;;
+1CF39;ZNAMENNY COMBINING MARK CHASHKA POLNAYA;Mn;0;NSM;;;;;N;;;;;
+1CF3A;ZNAMENNY COMBINING MARK OBLACHKO;Mn;0;NSM;;;;;N;;;;;
+1CF3B;ZNAMENNY COMBINING MARK SOROCHYA NOZHKA;Mn;0;NSM;;;;;N;;;;;
+1CF3C;ZNAMENNY COMBINING MARK TOCHKA;Mn;0;NSM;;;;;N;;;;;
+1CF3D;ZNAMENNY COMBINING MARK DVOETOCHIE;Mn;0;NSM;;;;;N;;;;;
+1CF3E;ZNAMENNY COMBINING ATTACHING VERTICAL OMET;Mn;0;NSM;;;;;N;;;;;
+1CF3F;ZNAMENNY COMBINING MARK CURVED OMET;Mn;0;NSM;;;;;N;;;;;
+1CF40;ZNAMENNY COMBINING MARK KRYZH;Mn;0;NSM;;;;;N;;;;;
+1CF41;ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR;Mn;0;NSM;;;;;N;;;;;
+1CF42;ZNAMENNY PRIZNAK MODIFIER LEVEL-2;Mn;0;NSM;;;;;N;;;;;
+1CF43;ZNAMENNY PRIZNAK MODIFIER LEVEL-3;Mn;0;NSM;;;;;N;;;;;
+1CF44;ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP;Mn;0;NSM;;;;;N;;;;;
+1CF45;ZNAMENNY PRIZNAK MODIFIER KRYZH;Mn;0;NSM;;;;;N;;;;;
+1CF46;ZNAMENNY PRIZNAK MODIFIER ROG;Mn;0;NSM;;;;;N;;;;;
+1CF50;ZNAMENNY NEUME KRYUK;So;0;L;;;;;N;;;;;
+1CF51;ZNAMENNY NEUME KRYUK TIKHY;So;0;L;;;;;N;;;;;
+1CF52;ZNAMENNY NEUME PARAKLIT;So;0;L;;;;;N;;;;;
+1CF53;ZNAMENNY NEUME DVA V CHELNU;So;0;L;;;;;N;;;;;
+1CF54;ZNAMENNY NEUME KLYUCH;So;0;L;;;;;N;;;;;
+1CF55;ZNAMENNY NEUME ZANOZHEK;So;0;L;;;;;N;;;;;
+1CF56;ZNAMENNY NEUME STOPITSA;So;0;L;;;;;N;;;;;
+1CF57;ZNAMENNY NEUME STOPITSA S OCHKOM;So;0;L;;;;;N;;;;;
+1CF58;ZNAMENNY NEUME PEREVODKA;So;0;L;;;;;N;;;;;
+1CF59;ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF5A;ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA;So;0;L;;;;;N;;;;;
+1CF5B;ZNAMENNY NEUME CHELYUSTKA;So;0;L;;;;;N;;;;;
+1CF5C;ZNAMENNY NEUME PALKA;So;0;L;;;;;N;;;;;
+1CF5D;ZNAMENNY NEUME ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CF5E;ZNAMENNY NEUME GOLUBCHIK BORZY;So;0;L;;;;;N;;;;;
+1CF5F;ZNAMENNY NEUME GOLUBCHIK TIKHY;So;0;L;;;;;N;;;;;
+1CF60;ZNAMENNY NEUME GOLUBCHIK MRACHNY;So;0;L;;;;;N;;;;;
+1CF61;ZNAMENNY NEUME GOLUBCHIK SVETLY;So;0;L;;;;;N;;;;;
+1CF62;ZNAMENNY NEUME GOLUBCHIK TRESVETLY;So;0;L;;;;;N;;;;;
+1CF63;ZNAMENNY NEUME VRAKHIYA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF64;ZNAMENNY NEUME VRAKHIYA MRACHNAYA;So;0;L;;;;;N;;;;;
+1CF65;ZNAMENNY NEUME VRAKHIYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF66;ZNAMENNY NEUME VRAKHIYA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CF67;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF68;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA;So;0;L;;;;;N;;;;;
+1CF69;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF6A;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CF6B;ZNAMENNY NEUME DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CF6C;ZNAMENNY NEUME REVERSED CHELYUSTKA;So;0;L;;;;;N;;;;;
+1CF6D;ZNAMENNY NEUME DERBITSA;So;0;L;;;;;N;;;;;
+1CF6E;ZNAMENNY NEUME KHAMILO;So;0;L;;;;;N;;;;;
+1CF6F;ZNAMENNY NEUME CHASHKA;So;0;L;;;;;N;;;;;
+1CF70;ZNAMENNY NEUME PODCHASHIE;So;0;L;;;;;N;;;;;
+1CF71;ZNAMENNY NEUME SKAMEYTSA MRACHNAYA;So;0;L;;;;;N;;;;;
+1CF72;ZNAMENNY NEUME SKAMEYTSA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF73;ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CF74;ZNAMENNY NEUME SKAMEYTSA TIKHAYA;So;0;L;;;;;N;;;;;
+1CF75;ZNAMENNY NEUME DEMESTVENNY KLYUCH;So;0;L;;;;;N;;;;;
+1CF76;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF77;ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF78;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA;So;0;L;;;;;N;;;;;
+1CF79;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF7A;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF7B;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF7C;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;
+1CF7D;ZNAMENNY NEUME SLOZHITIE;So;0;L;;;;;N;;;;;
+1CF7E;ZNAMENNY NEUME SLOZHITIE S ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF7F;ZNAMENNY NEUME SLOZHITIE ZAKRYTOE;So;0;L;;;;;N;;;;;
+1CF80;ZNAMENNY NEUME SLOZHITIE S KRYZHEM;So;0;L;;;;;N;;;;;
+1CF81;ZNAMENNY NEUME KRYZH;So;0;L;;;;;N;;;;;
+1CF82;ZNAMENNY NEUME ROG;So;0;L;;;;;N;;;;;
+1CF83;ZNAMENNY NEUME FITA;So;0;L;;;;;N;;;;;
+1CF84;ZNAMENNY NEUME KOBYLA;So;0;L;;;;;N;;;;;
+1CF85;ZNAMENNY NEUME ZMEYTSA;So;0;L;;;;;N;;;;;
+1CF86;ZNAMENNY NEUME STATYA;So;0;L;;;;;N;;;;;
+1CF87;ZNAMENNY NEUME STATYA S ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF88;ZNAMENNY NEUME STATYA S KRYZHEM;So;0;L;;;;;N;;;;;
+1CF89;ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM;So;0;L;;;;;N;;;;;
+1CF8A;ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF8B;ZNAMENNY NEUME STATYA ZAKRYTAYA;So;0;L;;;;;N;;;;;
+1CF8C;ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF8D;ZNAMENNY NEUME STATYA S ROGOM;So;0;L;;;;;N;;;;;
+1CF8E;ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI;So;0;L;;;;;N;;;;;
+1CF8F;ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM;So;0;L;;;;;N;;;;;
+1CF90;ZNAMENNY NEUME POLKULIZMY;So;0;L;;;;;N;;;;;
+1CF91;ZNAMENNY NEUME STATYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF92;ZNAMENNY NEUME STRELA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF93;ZNAMENNY NEUME STRELA MRACHNOTIKHAYA;So;0;L;;;;;N;;;;;
+1CF94;ZNAMENNY NEUME STRELA KRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CF95;ZNAMENNY NEUME STRELA POLUPOVODNAYA;So;0;L;;;;;N;;;;;
+1CF96;ZNAMENNY NEUME STRELA POVODNAYA;So;0;L;;;;;N;;;;;
+1CF97;ZNAMENNY NEUME STRELA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF98;ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA;So;0;L;;;;;N;;;;;
+1CF99;ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF9A;ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA;So;0;L;;;;;N;;;;;
+1CF9B;ZNAMENNY NEUME STRELA DVOECHELNAYA;So;0;L;;;;;N;;;;;
+1CF9C;ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CF9D;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CF9E;ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;
+1CF9F;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;
+1CFA0;ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFA1;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE 
ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFA2;ZNAMENNY NEUME STRELA GROMNAYA;So;0;L;;;;;N;;;;;
+1CFA3;ZNAMENNY NEUME STRELA GROMOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CFA4;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE 
ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFA5;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CFA6;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;;
+1CFA7;ZNAMENNY NEUME MECHIK;So;0;L;;;;;N;;;;;
+1CFA8;ZNAMENNY NEUME MECHIK POVODNY;So;0;L;;;;;N;;;;;
+1CFA9;ZNAMENNY NEUME MECHIK KLYUCHEVOY;So;0;L;;;;;N;;;;;
+1CFAA;ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY;So;0;L;;;;;N;;;;;
+1CFAB;ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY;So;0;L;;;;;N;;;;;
+1CFAC;ZNAMENNY NEUME STRELA TRYASOGLASNAYA;So;0;L;;;;;N;;;;;
+1CFAD;ZNAMENNY NEUME STRELA TRYASOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CFAE;ZNAMENNY NEUME STRELA TRYASOSTRELNAYA;So;0;L;;;;;N;;;;;
+1CFAF;ZNAMENNY NEUME OSOKA;So;0;L;;;;;N;;;;;
+1CFB0;ZNAMENNY NEUME OSOKA SVETLAYA;So;0;L;;;;;N;;;;;
+1CFB1;ZNAMENNY NEUME OSOKA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CFB2;ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CFB3;ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CFB4;ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CFB5;ZNAMENNY NEUME STRELA KRYUKOVAYA;So;0;L;;;;;N;;;;;
+1CFB6;ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA;So;0;L;;;;;N;;;;;
+1CFB7;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE 
ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFB8;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE 
ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFB9;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA;So;0;L;;;;;N;;;;;
+1CFBA;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CFBB;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE 
ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFBC;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CFBD;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA 
POVODNAYA;So;0;L;;;;;N;;;;;
+1CFBE;ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA;So;0;L;;;;;N;;;;;
+1CFBF;ZNAMENNY NEUME KUFISMA;So;0;L;;;;;N;;;;;
+1CFC0;ZNAMENNY NEUME OBLAKO;So;0;L;;;;;N;;;;;
+1CFC1;ZNAMENNY NEUME DUDA;So;0;L;;;;;N;;;;;
+1CFC2;ZNAMENNY NEUME NEMKA;So;0;L;;;;;N;;;;;
+1CFC3;ZNAMENNY NEUME PAUK;So;0;L;;;;;N;;;;;
 1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
 1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
 1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
@@ -27801,6 +28501,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;;
 1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;;
 1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;;
+1D1E9;MUSICAL SYMBOL SORI;So;0;ON;;;;;N;;;;;
+1D1EA;MUSICAL SYMBOL KORON;So;0;ON;;;;;N;;;;;
 1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
 1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
 1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
@@ -29671,6 +30373,37 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;;
 1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;;
 1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;;
+1DF00;LATIN SMALL LETTER FENG DIGRAPH WITH TRILL;Ll;0;L;;;;;N;;;;;
+1DF01;LATIN SMALL LETTER REVERSED SCRIPT G;Ll;0;L;;;;;N;;;;;
+1DF02;LATIN LETTER SMALL CAPITAL TURNED G;Ll;0;L;;;;;N;;;;;
+1DF03;LATIN SMALL LETTER REVERSED K;Ll;0;L;;;;;N;;;;;
+1DF04;LATIN LETTER SMALL CAPITAL L WITH BELT;Ll;0;L;;;;;N;;;;;
+1DF05;LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF06;LATIN SMALL LETTER TURNED Y WITH BELT;Ll;0;L;;;;;N;;;;;
+1DF07;LATIN SMALL LETTER REVERSED ENG;Ll;0;L;;;;;N;;;;;
+1DF08;LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX 
HOOK;Ll;0;L;;;;;N;;;;;
+1DF09;LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF0A;LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lo;0;L;;;;;N;;;;;
+1DF0B;LATIN SMALL LETTER ESH WITH DOUBLE BAR;Ll;0;L;;;;;N;;;;;
+1DF0C;LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL;Ll;0;L;;;;;N;;;;;
+1DF0D;LATIN SMALL LETTER TURNED T WITH CURL;Ll;0;L;;;;;N;;;;;
+1DF0E;LATIN LETTER INVERTED GLOTTAL STOP WITH CURL;Ll;0;L;;;;;N;;;;;
+1DF0F;LATIN LETTER STRETCHED C WITH CURL;Ll;0;L;;;;;N;;;;;
+1DF10;LATIN LETTER SMALL CAPITAL TURNED K;Ll;0;L;;;;;N;;;;;
+1DF11;LATIN SMALL LETTER L WITH FISHHOOK;Ll;0;L;;;;;N;;;;;
+1DF12;LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF13;LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF14;LATIN SMALL LETTER ENG WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF15;LATIN SMALL LETTER TURNED R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF16;LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF17;LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF18;LATIN SMALL LETTER EZH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF19;LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1A;LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1B;LATIN SMALL LETTER O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1C;LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1D;LATIN SMALL LETTER C WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1E;LATIN SMALL LETTER S WITH CURL;Ll;0;L;;;;;N;;;;;
 1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;;
 1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;;
 1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;;
@@ -29780,6 +30513,37 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;;
 1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;;
+1E290;TOTO LETTER PA;Lo;0;L;;;;;N;;;;;
+1E291;TOTO LETTER BA;Lo;0;L;;;;;N;;;;;
+1E292;TOTO LETTER TA;Lo;0;L;;;;;N;;;;;
+1E293;TOTO LETTER DA;Lo;0;L;;;;;N;;;;;
+1E294;TOTO LETTER KA;Lo;0;L;;;;;N;;;;;
+1E295;TOTO LETTER GA;Lo;0;L;;;;;N;;;;;
+1E296;TOTO LETTER MA;Lo;0;L;;;;;N;;;;;
+1E297;TOTO LETTER NA;Lo;0;L;;;;;N;;;;;
+1E298;TOTO LETTER NGA;Lo;0;L;;;;;N;;;;;
+1E299;TOTO LETTER SA;Lo;0;L;;;;;N;;;;;
+1E29A;TOTO LETTER CHA;Lo;0;L;;;;;N;;;;;
+1E29B;TOTO LETTER YA;Lo;0;L;;;;;N;;;;;
+1E29C;TOTO LETTER WA;Lo;0;L;;;;;N;;;;;
+1E29D;TOTO LETTER JA;Lo;0;L;;;;;N;;;;;
+1E29E;TOTO LETTER HA;Lo;0;L;;;;;N;;;;;
+1E29F;TOTO LETTER RA;Lo;0;L;;;;;N;;;;;
+1E2A0;TOTO LETTER LA;Lo;0;L;;;;;N;;;;;
+1E2A1;TOTO LETTER I;Lo;0;L;;;;;N;;;;;
+1E2A2;TOTO LETTER BREATHY I;Lo;0;L;;;;;N;;;;;
+1E2A3;TOTO LETTER IU;Lo;0;L;;;;;N;;;;;
+1E2A4;TOTO LETTER BREATHY IU;Lo;0;L;;;;;N;;;;;
+1E2A5;TOTO LETTER U;Lo;0;L;;;;;N;;;;;
+1E2A6;TOTO LETTER E;Lo;0;L;;;;;N;;;;;
+1E2A7;TOTO LETTER BREATHY E;Lo;0;L;;;;;N;;;;;
+1E2A8;TOTO LETTER EO;Lo;0;L;;;;;N;;;;;
+1E2A9;TOTO LETTER BREATHY EO;Lo;0;L;;;;;N;;;;;
+1E2AA;TOTO LETTER O;Lo;0;L;;;;;N;;;;;
+1E2AB;TOTO LETTER AE;Lo;0;L;;;;;N;;;;;
+1E2AC;TOTO LETTER BREATHY AE;Lo;0;L;;;;;N;;;;;
+1E2AD;TOTO LETTER A;Lo;0;L;;;;;N;;;;;
+1E2AE;TOTO SIGN RISING TONE;Mn;230;NSM;;;;;N;;;;;
 1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;;
 1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;;
 1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;;
@@ -29839,6 +30603,34 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;;
+1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;;
+1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;;
+1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;;
+1E7E3;ETHIOPIC SYLLABLE HHYAA;Lo;0;L;;;;;N;;;;;
+1E7E4;ETHIOPIC SYLLABLE HHYEE;Lo;0;L;;;;;N;;;;;
+1E7E5;ETHIOPIC SYLLABLE HHYE;Lo;0;L;;;;;N;;;;;
+1E7E6;ETHIOPIC SYLLABLE HHYO;Lo;0;L;;;;;N;;;;;
+1E7E8;ETHIOPIC SYLLABLE GURAGE HHWA;Lo;0;L;;;;;N;;;;;
+1E7E9;ETHIOPIC SYLLABLE HHWI;Lo;0;L;;;;;N;;;;;
+1E7EA;ETHIOPIC SYLLABLE HHWEE;Lo;0;L;;;;;N;;;;;
+1E7EB;ETHIOPIC SYLLABLE HHWE;Lo;0;L;;;;;N;;;;;
+1E7ED;ETHIOPIC SYLLABLE GURAGE MWI;Lo;0;L;;;;;N;;;;;
+1E7EE;ETHIOPIC SYLLABLE GURAGE MWEE;Lo;0;L;;;;;N;;;;;
+1E7F0;ETHIOPIC SYLLABLE GURAGE QWI;Lo;0;L;;;;;N;;;;;
+1E7F1;ETHIOPIC SYLLABLE GURAGE QWEE;Lo;0;L;;;;;N;;;;;
+1E7F2;ETHIOPIC SYLLABLE GURAGE QWE;Lo;0;L;;;;;N;;;;;
+1E7F3;ETHIOPIC SYLLABLE GURAGE BWI;Lo;0;L;;;;;N;;;;;
+1E7F4;ETHIOPIC SYLLABLE GURAGE BWEE;Lo;0;L;;;;;N;;;;;
+1E7F5;ETHIOPIC SYLLABLE GURAGE KWI;Lo;0;L;;;;;N;;;;;
+1E7F6;ETHIOPIC SYLLABLE GURAGE KWEE;Lo;0;L;;;;;N;;;;;
+1E7F7;ETHIOPIC SYLLABLE GURAGE KWE;Lo;0;L;;;;;N;;;;;
+1E7F8;ETHIOPIC SYLLABLE GURAGE GWI;Lo;0;L;;;;;N;;;;;
+1E7F9;ETHIOPIC SYLLABLE GURAGE GWEE;Lo;0;L;;;;;N;;;;;
+1E7FA;ETHIOPIC SYLLABLE GURAGE GWE;Lo;0;L;;;;;N;;;;;
+1E7FB;ETHIOPIC SYLLABLE GURAGE FWI;Lo;0;L;;;;;N;;;;;
+1E7FC;ETHIOPIC SYLLABLE GURAGE FWEE;Lo;0;L;;;;;N;;;;;
+1E7FD;ETHIOPIC SYLLABLE GURAGE PWI;Lo;0;L;;;;;N;;;;;
+1E7FE;ETHIOPIC SYLLABLE GURAGE PWEE;Lo;0;L;;;;;N;;;;;
 1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;;
 1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;;
 1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;;
@@ -31886,6 +32678,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;;
 1F6D6;HUT;So;0;ON;;;;;N;;;;;
 1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;;
+1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;;
+1F6DE;WHEEL;So;0;ON;;;;;N;;;;;
+1F6DF;RING BUOY;So;0;ON;;;;;N;;;;;
 1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;;
 1F6E1;SHIELD;So;0;ON;;;;;N;;;;;
 1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;;
@@ -32129,6 +32924,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;;
 1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;;
 1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;;
+1F7F0;HEAVY EQUALS SIGN;So;0;ON;;;;;N;;;;;
 1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
 1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
 1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
@@ -32400,6 +33196,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1F976;FREEZING FACE;So;0;ON;;;;;N;;;;;
 1F977;NINJA;So;0;ON;;;;;N;;;;;
 1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;;
+1F979;FACE HOLDING BACK TEARS;So;0;ON;;;;;N;;;;;
 1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;;
 1F97B;SARI;So;0;ON;;;;;N;;;;;
 1F97C;LAB COAT;So;0;ON;;;;;N;;;;;
@@ -32482,6 +33279,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;;
 1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;;
 1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;;
+1F9CC;TROLL;So;0;ON;;;;;N;;;;;
 1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;;
 1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;;
 1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;;
@@ -32639,6 +33437,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;;
 1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;;
 1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;;
+1FA7B;X-RAY;So;0;ON;;;;;N;;;;;
+1FA7C;CRUTCH;So;0;ON;;;;;N;;;;;
 1FA80;YO-YO;So;0;ON;;;;;N;;;;;
 1FA81;KITE;So;0;ON;;;;;N;;;;;
 1FA82;PARACHUTE;So;0;ON;;;;;N;;;;;
@@ -32671,6 +33471,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;;
 1FAA7;PLACARD;So;0;ON;;;;;N;;;;;
 1FAA8;ROCK;So;0;ON;;;;;N;;;;;
+1FAA9;MIRROR BALL;So;0;ON;;;;;N;;;;;
+1FAAA;IDENTIFICATION CARD;So;0;ON;;;;;N;;;;;
+1FAAB;LOW BATTERY;So;0;ON;;;;;N;;;;;
+1FAAC;HAMSA;So;0;ON;;;;;N;;;;;
 1FAB0;FLY;So;0;ON;;;;;N;;;;;
 1FAB1;WORM;So;0;ON;;;;;N;;;;;
 1FAB2;BEETLE;So;0;ON;;;;;N;;;;;
@@ -32678,9 +33482,16 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;;
 1FAB5;WOOD;So;0;ON;;;;;N;;;;;
 1FAB6;FEATHER;So;0;ON;;;;;N;;;;;
+1FAB7;LOTUS;So;0;ON;;;;;N;;;;;
+1FAB8;CORAL;So;0;ON;;;;;N;;;;;
+1FAB9;EMPTY NEST;So;0;ON;;;;;N;;;;;
+1FABA;NEST WITH EGGS;So;0;ON;;;;;N;;;;;
 1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;;
 1FAC1;LUNGS;So;0;ON;;;;;N;;;;;
 1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;;
+1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;;
+1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;;
+1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;;
 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;;
 1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;;
 1FAD2;OLIVE;So;0;ON;;;;;N;;;;;
@@ -32688,6 +33499,24 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1FAD4;TAMALE;So;0;ON;;;;;N;;;;;
 1FAD5;FONDUE;So;0;ON;;;;;N;;;;;
 1FAD6;TEAPOT;So;0;ON;;;;;N;;;;;
+1FAD7;POURING LIQUID;So;0;ON;;;;;N;;;;;
+1FAD8;BEANS;So;0;ON;;;;;N;;;;;
+1FAD9;JAR;So;0;ON;;;;;N;;;;;
+1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;;
+1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;;
+1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;;
+1FAE3;FACE WITH PEEKING EYE;So;0;ON;;;;;N;;;;;
+1FAE4;FACE WITH DIAGONAL MOUTH;So;0;ON;;;;;N;;;;;
+1FAE5;DOTTED LINE FACE;So;0;ON;;;;;N;;;;;
+1FAE6;BITING LIP;So;0;ON;;;;;N;;;;;
+1FAE7;BUBBLES;So;0;ON;;;;;N;;;;;
+1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;;
+1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;;
+1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;;
+1FAF3;PALM DOWN HAND;So;0;ON;;;;;N;;;;;
+1FAF4;PALM UP HAND;So;0;ON;;;;;N;;;;;
+1FAF5;INDEX POINTING AT THE VIEWER;So;0;ON;;;;;N;;;;;
+1FAF6;HEART HANDS;So;0;ON;;;;;N;;;;;
 1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;;
 1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;;
 1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;;
@@ -32901,9 +33730,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
 1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
 20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
-2A6DD;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
+2A6DF;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
 2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
-2B734;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
+2B738;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
 2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;
 2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;;
 2B820;<CJK Ideograph Extension E, First>;Lo;0;L;;;;;N;;;;;
diff --git a/admin/unidata/blocks.awk b/admin/unidata/blocks.awk
index 4ecb233fe7..575f7142f4 100755
--- a/admin/unidata/blocks.awk
+++ b/admin/unidata/blocks.awk
@@ -131,7 +131,7 @@ function name2alias(name   , w, w2) {
     return name
 }
 
-/^[0-9A-F]/ {
+FILENAME ~ "Blocks.txt" && /^[0-9A-F]/ {
     sep = index($1, "..")
     len = length($1)
     s = substr($1,1,sep-1)
@@ -202,6 +202,29 @@ function name2alias(name   , w, w2) {
     }
 }
 
+# The space after 'Emoji' is significant in the next two rules.
+# This purposely and deliberately excludes codepoints <= 00FF
+FILENAME ~ "emoji-data.txt" && /^00[0-9A-F]{2}.*; Emoji / {
+    next
+}
+FILENAME ~ "emoji-data.txt" && /^[0-9A-F].*; Emoji / {
+    sep = index($1, "..")
+    len = length($1)
+    if (sep > 0)  {
+        s = substr($1,1,sep-1)
+        e = substr($1,sep+2,len-sep-1)
+    } else {
+        s = $1
+        e = $1
+    }
+    $1 = ""
+    i++
+    start[i] = s
+    end[i] = e
+    alt[i] = "emoji"
+    name[i] = "Autogenerated emoji"
+}
+
 END {
     print ";;; charscript.el --- character script table  -*- lexical-binding:t 
-*-"
     print ";;; Automatically generated from admin/unidata/Blocks.txt"
@@ -223,6 +246,6 @@ END {
     print "    (or (memq (nth 2 elt) script-list)"
     print "    (setq script-list (cons (nth 2 elt) script-list))))"
     print "  (set-char-table-extra-slot char-script-table 0 (nreverse 
script-list)))"
-    print ""
+    print "\n"
     print "(provide 'charscript)"
 }
diff --git a/admin/unidata/copyright.html b/admin/unidata/copyright.html
index 6bbc16b136..66e54b06fc 100644
--- a/admin/unidata/copyright.html
+++ b/admin/unidata/copyright.html
@@ -118,7 +118,7 @@ pre {
             <ol type="A">
               <li><u><a name="1"></a>Unicode Copyright</u>
               <ol>
-                <li>Copyright © 1991-2020 Unicode, Inc. All rights 
reserved.</li>
+                <li>Copyright © 1991-2021 Unicode, Inc. All rights 
reserved.</li>
               </ol>
               </li>
 
diff --git a/admin/unidata/emoji-data.txt b/admin/unidata/emoji-data.txt
new file mode 100644
index 0000000000..2e9cf75ad4
--- /dev/null
+++ b/admin/unidata/emoji-data.txt
@@ -0,0 +1,1297 @@
+# emoji-data-14.0.0.txt
+# Date: 2021-08-26, 17:22:22 GMT
+# © 2021 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in 
the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Emoji Data for UTS #51
+# Used with Emoji Version 14.0 and subsequent minor revisions (if any)
+#
+# For documentation and usage, see http://www.unicode.org/reports/tr51
+#
+# Format:
+# <codepoint(s)> ; <property> # <comments>
+# Note: there is no guarantee as to the structure of whitespace or comments
+#
+# Characters and sequences are listed in code point order. Users should be 
shown a more natural order.
+# See the CLDR collation order for Emoji.
+
+
+# ================================================
+
+# All omitted code points have Emoji=No
+# @missing: 0000..10FFFF  ; Emoji ; No
+
+0023          ; Emoji                # E0.0   [1] (#️)       hash sign
+002A          ; Emoji                # E0.0   [1] (*️)       asterisk
+0030..0039    ; Emoji                # E0.0  [10] (0️..9️)    digit 
zero..digit nine
+00A9          ; Emoji                # E0.6   [1] (©️)       copyright
+00AE          ; Emoji                # E0.6   [1] (®️)       registered
+203C          ; Emoji                # E0.6   [1] (‼️)       double 
exclamation mark
+2049          ; Emoji                # E0.6   [1] (⁉️)       exclamation 
question mark
+2122          ; Emoji                # E0.6   [1] (™️)       trade mark
+2139          ; Emoji                # E0.6   [1] (ℹ️)       information
+2194..2199    ; Emoji                # E0.6   [6] (↔️..↙️)    left-right 
arrow..down-left arrow
+21A9..21AA    ; Emoji                # E0.6   [2] (↩️..↪️)    right arrow 
curving left..left arrow curving right
+231A..231B    ; Emoji                # E0.6   [2] (⌚..⌛)    watch..hourglass 
done
+2328          ; Emoji                # E1.0   [1] (⌨️)       keyboard
+23CF          ; Emoji                # E1.0   [1] (⏏️)       eject button
+23E9..23EC    ; Emoji                # E0.6   [4] (⏩..⏬)    fast-forward 
button..fast down button
+23ED..23EE    ; Emoji                # E0.7   [2] (⏭️..⏮️)    next track 
button..last track button
+23EF          ; Emoji                # E1.0   [1] (⏯️)       play or pause 
button
+23F0          ; Emoji                # E0.6   [1] (⏰)       alarm clock
+23F1..23F2    ; Emoji                # E1.0   [2] (⏱️..⏲️)    stopwatch..timer 
clock
+23F3          ; Emoji                # E0.6   [1] (⏳)       hourglass not done
+23F8..23FA    ; Emoji                # E0.7   [3] (⏸️..⏺️)    pause 
button..record button
+24C2          ; Emoji                # E0.6   [1] (Ⓜ️)       circled M
+25AA..25AB    ; Emoji                # E0.6   [2] (▪️..▫️)    black small 
square..white small square
+25B6          ; Emoji                # E0.6   [1] (▶️)       play button
+25C0          ; Emoji                # E0.6   [1] (◀️)       reverse button
+25FB..25FE    ; Emoji                # E0.6   [4] (◻️..◾)    white medium 
square..black medium-small square
+2600..2601    ; Emoji                # E0.6   [2] (☀️..☁️)    sun..cloud
+2602..2603    ; Emoji                # E0.7   [2] (☂️..☃️)    umbrella..snowman
+2604          ; Emoji                # E1.0   [1] (☄️)       comet
+260E          ; Emoji                # E0.6   [1] (☎️)       telephone
+2611          ; Emoji                # E0.6   [1] (☑️)       check box with 
check
+2614..2615    ; Emoji                # E0.6   [2] (☔..☕)    umbrella with rain 
drops..hot beverage
+2618          ; Emoji                # E1.0   [1] (☘️)       shamrock
+261D          ; Emoji                # E0.6   [1] (☝️)       index pointing up
+2620          ; Emoji                # E1.0   [1] (☠️)       skull and 
crossbones
+2622..2623    ; Emoji                # E1.0   [2] (☢️..☣️)    
radioactive..biohazard
+2626          ; Emoji                # E1.0   [1] (☦️)       orthodox cross
+262A          ; Emoji                # E0.7   [1] (☪️)       star and crescent
+262E          ; Emoji                # E1.0   [1] (☮️)       peace symbol
+262F          ; Emoji                # E0.7   [1] (☯️)       yin yang
+2638..2639    ; Emoji                # E0.7   [2] (☸️..☹️)    wheel of 
dharma..frowning face
+263A          ; Emoji                # E0.6   [1] (☺️)       smiling face
+2640          ; Emoji                # E4.0   [1] (♀️)       female sign
+2642          ; Emoji                # E4.0   [1] (♂️)       male sign
+2648..2653    ; Emoji                # E0.6  [12] (♈..♓)    Aries..Pisces
+265F          ; Emoji                # E11.0  [1] (♟️)       chess pawn
+2660          ; Emoji                # E0.6   [1] (♠️)       spade suit
+2663          ; Emoji                # E0.6   [1] (♣️)       club suit
+2665..2666    ; Emoji                # E0.6   [2] (♥️..♦️)    heart 
suit..diamond suit
+2668          ; Emoji                # E0.6   [1] (♨️)       hot springs
+267B          ; Emoji                # E0.6   [1] (♻️)       recycling symbol
+267E          ; Emoji                # E11.0  [1] (♾️)       infinity
+267F          ; Emoji                # E0.6   [1] (♿)       wheelchair symbol
+2692          ; Emoji                # E1.0   [1] (⚒️)       hammer and pick
+2693          ; Emoji                # E0.6   [1] (⚓)       anchor
+2694          ; Emoji                # E1.0   [1] (⚔️)       crossed swords
+2695          ; Emoji                # E4.0   [1] (⚕️)       medical symbol
+2696..2697    ; Emoji                # E1.0   [2] (⚖️..⚗️)    balance 
scale..alembic
+2699          ; Emoji                # E1.0   [1] (⚙️)       gear
+269B..269C    ; Emoji                # E1.0   [2] (⚛️..⚜️)    atom 
symbol..fleur-de-lis
+26A0..26A1    ; Emoji                # E0.6   [2] (⚠️..⚡)    warning..high 
voltage
+26A7          ; Emoji                # E13.0  [1] (⚧️)       transgender symbol
+26AA..26AB    ; Emoji                # E0.6   [2] (⚪..⚫)    white 
circle..black circle
+26B0..26B1    ; Emoji                # E1.0   [2] (⚰️..⚱️)    coffin..funeral 
urn
+26BD..26BE    ; Emoji                # E0.6   [2] (⚽..⚾)    soccer 
ball..baseball
+26C4..26C5    ; Emoji                # E0.6   [2] (⛄..⛅)    snowman without 
snow..sun behind cloud
+26C8          ; Emoji                # E0.7   [1] (⛈️)       cloud with 
lightning and rain
+26CE          ; Emoji                # E0.6   [1] (⛎)       Ophiuchus
+26CF          ; Emoji                # E0.7   [1] (⛏️)       pick
+26D1          ; Emoji                # E0.7   [1] (⛑️)       rescue worker’s 
helmet
+26D3          ; Emoji                # E0.7   [1] (⛓️)       chains
+26D4          ; Emoji                # E0.6   [1] (⛔)       no entry
+26E9          ; Emoji                # E0.7   [1] (⛩️)       shinto shrine
+26EA          ; Emoji                # E0.6   [1] (⛪)       church
+26F0..26F1    ; Emoji                # E0.7   [2] (⛰️..⛱️)    
mountain..umbrella on ground
+26F2..26F3    ; Emoji                # E0.6   [2] (⛲..⛳)    fountain..flag in 
hole
+26F4          ; Emoji                # E0.7   [1] (⛴️)       ferry
+26F5          ; Emoji                # E0.6   [1] (⛵)       sailboat
+26F7..26F9    ; Emoji                # E0.7   [3] (⛷️..⛹️)    skier..person 
bouncing ball
+26FA          ; Emoji                # E0.6   [1] (⛺)       tent
+26FD          ; Emoji                # E0.6   [1] (⛽)       fuel pump
+2702          ; Emoji                # E0.6   [1] (✂️)       scissors
+2705          ; Emoji                # E0.6   [1] (✅)       check mark button
+2708..270C    ; Emoji                # E0.6   [5] (✈️..✌️)    
airplane..victory hand
+270D          ; Emoji                # E0.7   [1] (✍️)       writing hand
+270F          ; Emoji                # E0.6   [1] (✏️)       pencil
+2712          ; Emoji                # E0.6   [1] (✒️)       black nib
+2714          ; Emoji                # E0.6   [1] (✔️)       check mark
+2716          ; Emoji                # E0.6   [1] (✖️)       multiply
+271D          ; Emoji                # E0.7   [1] (✝️)       latin cross
+2721          ; Emoji                # E0.7   [1] (✡️)       star of David
+2728          ; Emoji                # E0.6   [1] (✨)       sparkles
+2733..2734    ; Emoji                # E0.6   [2] (✳️..✴️)    eight-spoked 
asterisk..eight-pointed star
+2744          ; Emoji                # E0.6   [1] (❄️)       snowflake
+2747          ; Emoji                # E0.6   [1] (❇️)       sparkle
+274C          ; Emoji                # E0.6   [1] (❌)       cross mark
+274E          ; Emoji                # E0.6   [1] (❎)       cross mark button
+2753..2755    ; Emoji                # E0.6   [3] (❓..❕)    red question 
mark..white exclamation mark
+2757          ; Emoji                # E0.6   [1] (❗)       red exclamation 
mark
+2763          ; Emoji                # E1.0   [1] (❣️)       heart exclamation
+2764          ; Emoji                # E0.6   [1] (❤️)       red heart
+2795..2797    ; Emoji                # E0.6   [3] (➕..➗)    plus..divide
+27A1          ; Emoji                # E0.6   [1] (➡️)       right arrow
+27B0          ; Emoji                # E0.6   [1] (➰)       curly loop
+27BF          ; Emoji                # E1.0   [1] (➿)       double curly loop
+2934..2935    ; Emoji                # E0.6   [2] (⤴️..⤵️)    right arrow 
curving up..right arrow curving down
+2B05..2B07    ; Emoji                # E0.6   [3] (⬅️..⬇️)    left arrow..down 
arrow
+2B1B..2B1C    ; Emoji                # E0.6   [2] (⬛..⬜)    black large 
square..white large square
+2B50          ; Emoji                # E0.6   [1] (⭐)       star
+2B55          ; Emoji                # E0.6   [1] (⭕)       hollow red circle
+3030          ; Emoji                # E0.6   [1] (〰️)       wavy dash
+303D          ; Emoji                # E0.6   [1] (〽️)       part alternation 
mark
+3297          ; Emoji                # E0.6   [1] (㊗️)       Japanese 
“congratulations” button
+3299          ; Emoji                # E0.6   [1] (㊙️)       Japanese “secret” 
button
+1F004         ; Emoji                # E0.6   [1] (🀄)       mahjong red dragon
+1F0CF         ; Emoji                # E0.6   [1] (🃏)       joker
+1F170..1F171  ; Emoji                # E0.6   [2] (🅰️..🅱️)    A button (blood 
type)..B button (blood type)
+1F17E..1F17F  ; Emoji                # E0.6   [2] (🅾️..🅿️)    O button (blood 
type)..P button
+1F18E         ; Emoji                # E0.6   [1] (🆎)       AB button (blood 
type)
+1F191..1F19A  ; Emoji                # E0.6  [10] (🆑..🆚)    CL button..VS 
button
+1F1E6..1F1FF  ; Emoji                # E0.0  [26] (🇦..🇿)    regional indicator 
symbol letter a..regional indicator symbol letter z
+1F201..1F202  ; Emoji                # E0.6   [2] (🈁..🈂️)    Japanese “here” 
button..Japanese “service charge” button
+1F21A         ; Emoji                # E0.6   [1] (🈚)       Japanese “free of 
charge” button
+1F22F         ; Emoji                # E0.6   [1] (🈯)       Japanese 
“reserved” button
+1F232..1F23A  ; Emoji                # E0.6   [9] (🈲..🈺)    Japanese 
“prohibited” button..Japanese “open for business” button
+1F250..1F251  ; Emoji                # E0.6   [2] (🉐..🉑)    Japanese “bargain” 
button..Japanese “acceptable” button
+1F300..1F30C  ; Emoji                # E0.6  [13] (🌀..🌌)    cyclone..milky way
+1F30D..1F30E  ; Emoji                # E0.7   [2] (🌍..🌎)    globe showing 
Europe-Africa..globe showing Americas
+1F30F         ; Emoji                # E0.6   [1] (🌏)       globe showing 
Asia-Australia
+1F310         ; Emoji                # E1.0   [1] (🌐)       globe with 
meridians
+1F311         ; Emoji                # E0.6   [1] (🌑)       new moon
+1F312         ; Emoji                # E1.0   [1] (🌒)       waxing crescent 
moon
+1F313..1F315  ; Emoji                # E0.6   [3] (🌓..🌕)    first quarter 
moon..full moon
+1F316..1F318  ; Emoji                # E1.0   [3] (🌖..🌘)    waning gibbous 
moon..waning crescent moon
+1F319         ; Emoji                # E0.6   [1] (🌙)       crescent moon
+1F31A         ; Emoji                # E1.0   [1] (🌚)       new moon face
+1F31B         ; Emoji                # E0.6   [1] (🌛)       first quarter moon 
face
+1F31C         ; Emoji                # E0.7   [1] (🌜)       last quarter moon 
face
+1F31D..1F31E  ; Emoji                # E1.0   [2] (🌝..🌞)    full moon 
face..sun with face
+1F31F..1F320  ; Emoji                # E0.6   [2] (🌟..🌠)    glowing 
star..shooting star
+1F321         ; Emoji                # E0.7   [1] (🌡️)       thermometer
+1F324..1F32C  ; Emoji                # E0.7   [9] (🌤️..🌬️)    sun behind small 
cloud..wind face
+1F32D..1F32F  ; Emoji                # E1.0   [3] (🌭..🌯)    hot dog..burrito
+1F330..1F331  ; Emoji                # E0.6   [2] (🌰..🌱)    chestnut..seedling
+1F332..1F333  ; Emoji                # E1.0   [2] (🌲..🌳)    evergreen 
tree..deciduous tree
+1F334..1F335  ; Emoji                # E0.6   [2] (🌴..🌵)    palm tree..cactus
+1F336         ; Emoji                # E0.7   [1] (🌶️)       hot pepper
+1F337..1F34A  ; Emoji                # E0.6  [20] (🌷..🍊)    tulip..tangerine
+1F34B         ; Emoji                # E1.0   [1] (🍋)       lemon
+1F34C..1F34F  ; Emoji                # E0.6   [4] (🍌..🍏)    banana..green apple
+1F350         ; Emoji                # E1.0   [1] (🍐)       pear
+1F351..1F37B  ; Emoji                # E0.6  [43] (🍑..🍻)    peach..clinking 
beer mugs
+1F37C         ; Emoji                # E1.0   [1] (🍼)       baby bottle
+1F37D         ; Emoji                # E0.7   [1] (🍽️)       fork and knife 
with plate
+1F37E..1F37F  ; Emoji                # E1.0   [2] (🍾..🍿)    bottle with 
popping cork..popcorn
+1F380..1F393  ; Emoji                # E0.6  [20] (🎀..🎓)    ribbon..graduation 
cap
+1F396..1F397  ; Emoji                # E0.7   [2] (🎖️..🎗️)    military 
medal..reminder ribbon
+1F399..1F39B  ; Emoji                # E0.7   [3] (🎙️..🎛️)    studio 
microphone..control knobs
+1F39E..1F39F  ; Emoji                # E0.7   [2] (🎞️..🎟️)    film 
frames..admission tickets
+1F3A0..1F3C4  ; Emoji                # E0.6  [37] (🎠..🏄)    carousel 
horse..person surfing
+1F3C5         ; Emoji                # E1.0   [1] (🏅)       sports medal
+1F3C6         ; Emoji                # E0.6   [1] (🏆)       trophy
+1F3C7         ; Emoji                # E1.0   [1] (🏇)       horse racing
+1F3C8         ; Emoji                # E0.6   [1] (🏈)       american football
+1F3C9         ; Emoji                # E1.0   [1] (🏉)       rugby football
+1F3CA         ; Emoji                # E0.6   [1] (🏊)       person swimming
+1F3CB..1F3CE  ; Emoji                # E0.7   [4] (🏋️..🏎️)    person lifting 
weights..racing car
+1F3CF..1F3D3  ; Emoji                # E1.0   [5] (🏏..🏓)    cricket game..ping 
pong
+1F3D4..1F3DF  ; Emoji                # E0.7  [12] (🏔️..🏟️)    snow-capped 
mountain..stadium
+1F3E0..1F3E3  ; Emoji                # E0.6   [4] (🏠..🏣)    house..Japanese 
post office
+1F3E4         ; Emoji                # E1.0   [1] (🏤)       post office
+1F3E5..1F3F0  ; Emoji                # E0.6  [12] (🏥..🏰)    hospital..castle
+1F3F3         ; Emoji                # E0.7   [1] (🏳️)       white flag
+1F3F4         ; Emoji                # E1.0   [1] (🏴)       black flag
+1F3F5         ; Emoji                # E0.7   [1] (🏵️)       rosette
+1F3F7         ; Emoji                # E0.7   [1] (🏷️)       label
+1F3F8..1F407  ; Emoji                # E1.0  [16] (🏸..🐇)    badminton..rabbit
+1F408         ; Emoji                # E0.7   [1] (🐈)       cat
+1F409..1F40B  ; Emoji                # E1.0   [3] (🐉..🐋)    dragon..whale
+1F40C..1F40E  ; Emoji                # E0.6   [3] (🐌..🐎)    snail..horse
+1F40F..1F410  ; Emoji                # E1.0   [2] (🐏..🐐)    ram..goat
+1F411..1F412  ; Emoji                # E0.6   [2] (🐑..🐒)    ewe..monkey
+1F413         ; Emoji                # E1.0   [1] (🐓)       rooster
+1F414         ; Emoji                # E0.6   [1] (🐔)       chicken
+1F415         ; Emoji                # E0.7   [1] (🐕)       dog
+1F416         ; Emoji                # E1.0   [1] (🐖)       pig
+1F417..1F429  ; Emoji                # E0.6  [19] (🐗..🐩)    boar..poodle
+1F42A         ; Emoji                # E1.0   [1] (🐪)       camel
+1F42B..1F43E  ; Emoji                # E0.6  [20] (🐫..🐾)    two-hump 
camel..paw prints
+1F43F         ; Emoji                # E0.7   [1] (🐿️)       chipmunk
+1F440         ; Emoji                # E0.6   [1] (👀)       eyes
+1F441         ; Emoji                # E0.7   [1] (👁️)       eye
+1F442..1F464  ; Emoji                # E0.6  [35] (👂..👤)    ear..bust in 
silhouette
+1F465         ; Emoji                # E1.0   [1] (👥)       busts in silhouette
+1F466..1F46B  ; Emoji                # E0.6   [6] (👦..👫)    boy..woman and man 
holding hands
+1F46C..1F46D  ; Emoji                # E1.0   [2] (👬..👭)    men holding 
hands..women holding hands
+1F46E..1F4AC  ; Emoji                # E0.6  [63] (👮..💬)    police 
officer..speech balloon
+1F4AD         ; Emoji                # E1.0   [1] (💭)       thought balloon
+1F4AE..1F4B5  ; Emoji                # E0.6   [8] (💮..💵)    white 
flower..dollar banknote
+1F4B6..1F4B7  ; Emoji                # E1.0   [2] (💶..💷)    euro 
banknote..pound banknote
+1F4B8..1F4EB  ; Emoji                # E0.6  [52] (💸..📫)    money with 
wings..closed mailbox with raised flag
+1F4EC..1F4ED  ; Emoji                # E0.7   [2] (📬..📭)    open mailbox with 
raised flag..open mailbox with lowered flag
+1F4EE         ; Emoji                # E0.6   [1] (📮)       postbox
+1F4EF         ; Emoji                # E1.0   [1] (📯)       postal horn
+1F4F0..1F4F4  ; Emoji                # E0.6   [5] (📰..📴)    newspaper..mobile 
phone off
+1F4F5         ; Emoji                # E1.0   [1] (📵)       no mobile phones
+1F4F6..1F4F7  ; Emoji                # E0.6   [2] (📶..📷)    antenna 
bars..camera
+1F4F8         ; Emoji                # E1.0   [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Emoji                # E0.6   [4] (📹..📼)    video 
camera..videocassette
+1F4FD         ; Emoji                # E0.7   [1] (📽️)       film projector
+1F4FF..1F502  ; Emoji                # E1.0   [4] (📿..🔂)    prayer 
beads..repeat single button
+1F503         ; Emoji                # E0.6   [1] (🔃)       clockwise vertical 
arrows
+1F504..1F507  ; Emoji                # E1.0   [4] (🔄..🔇)    counterclockwise 
arrows button..muted speaker
+1F508         ; Emoji                # E0.7   [1] (🔈)       speaker low volume
+1F509         ; Emoji                # E1.0   [1] (🔉)       speaker medium 
volume
+1F50A..1F514  ; Emoji                # E0.6  [11] (🔊..🔔)    speaker high 
volume..bell
+1F515         ; Emoji                # E1.0   [1] (🔕)       bell with slash
+1F516..1F52B  ; Emoji                # E0.6  [22] (🔖..🔫)    bookmark..water 
pistol
+1F52C..1F52D  ; Emoji                # E1.0   [2] (🔬..🔭)    
microscope..telescope
+1F52E..1F53D  ; Emoji                # E0.6  [16] (🔮..🔽)    crystal 
ball..downwards button
+1F549..1F54A  ; Emoji                # E0.7   [2] (🕉️..🕊️)    om..dove
+1F54B..1F54E  ; Emoji                # E1.0   [4] (🕋..🕎)    kaaba..menorah
+1F550..1F55B  ; Emoji                # E0.6  [12] (🕐..🕛)    one 
o’clock..twelve o’clock
+1F55C..1F567  ; Emoji                # E0.7  [12] (🕜..🕧)    
one-thirty..twelve-thirty
+1F56F..1F570  ; Emoji                # E0.7   [2] (🕯️..🕰️)    
candle..mantelpiece clock
+1F573..1F579  ; Emoji                # E0.7   [7] (🕳️..🕹️)    hole..joystick
+1F57A         ; Emoji                # E3.0   [1] (🕺)       man dancing
+1F587         ; Emoji                # E0.7   [1] (🖇️)       linked paperclips
+1F58A..1F58D  ; Emoji                # E0.7   [4] (🖊️..🖍️)    pen..crayon
+1F590         ; Emoji                # E0.7   [1] (🖐️)       hand with fingers 
splayed
+1F595..1F596  ; Emoji                # E1.0   [2] (🖕..🖖)    middle 
finger..vulcan salute
+1F5A4         ; Emoji                # E3.0   [1] (🖤)       black heart
+1F5A5         ; Emoji                # E0.7   [1] (🖥️)       desktop computer
+1F5A8         ; Emoji                # E0.7   [1] (🖨️)       printer
+1F5B1..1F5B2  ; Emoji                # E0.7   [2] (🖱️..🖲️)    computer 
mouse..trackball
+1F5BC         ; Emoji                # E0.7   [1] (🖼️)       framed picture
+1F5C2..1F5C4  ; Emoji                # E0.7   [3] (🗂️..🗄️)    card index 
dividers..file cabinet
+1F5D1..1F5D3  ; Emoji                # E0.7   [3] (🗑️..🗓️)    
wastebasket..spiral calendar
+1F5DC..1F5DE  ; Emoji                # E0.7   [3] (🗜️..🗞️)    clamp..rolled-up 
newspaper
+1F5E1         ; Emoji                # E0.7   [1] (🗡️)       dagger
+1F5E3         ; Emoji                # E0.7   [1] (🗣️)       speaking head
+1F5E8         ; Emoji                # E2.0   [1] (🗨️)       left speech bubble
+1F5EF         ; Emoji                # E0.7   [1] (🗯️)       right anger bubble
+1F5F3         ; Emoji                # E0.7   [1] (🗳️)       ballot box with 
ballot
+1F5FA         ; Emoji                # E0.7   [1] (🗺️)       world map
+1F5FB..1F5FF  ; Emoji                # E0.6   [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Emoji                # E1.0   [1] (😀)       grinning face
+1F601..1F606  ; Emoji                # E0.6   [6] (😁..😆)    beaming face with 
smiling eyes..grinning squinting face
+1F607..1F608  ; Emoji                # E1.0   [2] (😇..😈)    smiling face with 
halo..smiling face with horns
+1F609..1F60D  ; Emoji                # E0.6   [5] (😉..😍)    winking 
face..smiling face with heart-eyes
+1F60E         ; Emoji                # E1.0   [1] (😎)       smiling face with 
sunglasses
+1F60F         ; Emoji                # E0.6   [1] (😏)       smirking face
+1F610         ; Emoji                # E0.7   [1] (😐)       neutral face
+1F611         ; Emoji                # E1.0   [1] (😑)       expressionless face
+1F612..1F614  ; Emoji                # E0.6   [3] (😒..😔)    unamused 
face..pensive face
+1F615         ; Emoji                # E1.0   [1] (😕)       confused face
+1F616         ; Emoji                # E0.6   [1] (😖)       confounded face
+1F617         ; Emoji                # E1.0   [1] (😗)       kissing face
+1F618         ; Emoji                # E0.6   [1] (😘)       face blowing a kiss
+1F619         ; Emoji                # E1.0   [1] (😙)       kissing face with 
smiling eyes
+1F61A         ; Emoji                # E0.6   [1] (😚)       kissing face with 
closed eyes
+1F61B         ; Emoji                # E1.0   [1] (😛)       face with tongue
+1F61C..1F61E  ; Emoji                # E0.6   [3] (😜..😞)    winking face with 
tongue..disappointed face
+1F61F         ; Emoji                # E1.0   [1] (😟)       worried face
+1F620..1F625  ; Emoji                # E0.6   [6] (😠..😥)    angry face..sad 
but relieved face
+1F626..1F627  ; Emoji                # E1.0   [2] (😦..😧)    frowning face with 
open mouth..anguished face
+1F628..1F62B  ; Emoji                # E0.6   [4] (😨..😫)    fearful 
face..tired face
+1F62C         ; Emoji                # E1.0   [1] (😬)       grimacing face
+1F62D         ; Emoji                # E0.6   [1] (😭)       loudly crying face
+1F62E..1F62F  ; Emoji                # E1.0   [2] (😮..😯)    face with open 
mouth..hushed face
+1F630..1F633  ; Emoji                # E0.6   [4] (😰..😳)    anxious face with 
sweat..flushed face
+1F634         ; Emoji                # E1.0   [1] (😴)       sleeping face
+1F635         ; Emoji                # E0.6   [1] (😵)       face with 
crossed-out eyes
+1F636         ; Emoji                # E1.0   [1] (😶)       face without mouth
+1F637..1F640  ; Emoji                # E0.6  [10] (😷..🙀)    face with medical 
mask..weary cat
+1F641..1F644  ; Emoji                # E1.0   [4] (🙁..🙄)    slightly frowning 
face..face with rolling eyes
+1F645..1F64F  ; Emoji                # E0.6  [11] (🙅..🙏)    person gesturing 
NO..folded hands
+1F680         ; Emoji                # E0.6   [1] (🚀)       rocket
+1F681..1F682  ; Emoji                # E1.0   [2] (🚁..🚂)    
helicopter..locomotive
+1F683..1F685  ; Emoji                # E0.6   [3] (🚃..🚅)    railway 
car..bullet train
+1F686         ; Emoji                # E1.0   [1] (🚆)       train
+1F687         ; Emoji                # E0.6   [1] (🚇)       metro
+1F688         ; Emoji                # E1.0   [1] (🚈)       light rail
+1F689         ; Emoji                # E0.6   [1] (🚉)       station
+1F68A..1F68B  ; Emoji                # E1.0   [2] (🚊..🚋)    tram..tram car
+1F68C         ; Emoji                # E0.6   [1] (🚌)       bus
+1F68D         ; Emoji                # E0.7   [1] (🚍)       oncoming bus
+1F68E         ; Emoji                # E1.0   [1] (🚎)       trolleybus
+1F68F         ; Emoji                # E0.6   [1] (🚏)       bus stop
+1F690         ; Emoji                # E1.0   [1] (🚐)       minibus
+1F691..1F693  ; Emoji                # E0.6   [3] (🚑..🚓)    ambulance..police 
car
+1F694         ; Emoji                # E0.7   [1] (🚔)       oncoming police car
+1F695         ; Emoji                # E0.6   [1] (🚕)       taxi
+1F696         ; Emoji                # E1.0   [1] (🚖)       oncoming taxi
+1F697         ; Emoji                # E0.6   [1] (🚗)       automobile
+1F698         ; Emoji                # E0.7   [1] (🚘)       oncoming automobile
+1F699..1F69A  ; Emoji                # E0.6   [2] (🚙..🚚)    sport utility 
vehicle..delivery truck
+1F69B..1F6A1  ; Emoji                # E1.0   [7] (🚛..🚡)    articulated 
lorry..aerial tramway
+1F6A2         ; Emoji                # E0.6   [1] (🚢)       ship
+1F6A3         ; Emoji                # E1.0   [1] (🚣)       person rowing boat
+1F6A4..1F6A5  ; Emoji                # E0.6   [2] (🚤..🚥)    
speedboat..horizontal traffic light
+1F6A6         ; Emoji                # E1.0   [1] (🚦)       vertical traffic 
light
+1F6A7..1F6AD  ; Emoji                # E0.6   [7] (🚧..🚭)    construction..no 
smoking
+1F6AE..1F6B1  ; Emoji                # E1.0   [4] (🚮..🚱)    litter in bin 
sign..non-potable water
+1F6B2         ; Emoji                # E0.6   [1] (🚲)       bicycle
+1F6B3..1F6B5  ; Emoji                # E1.0   [3] (🚳..🚵)    no 
bicycles..person mountain biking
+1F6B6         ; Emoji                # E0.6   [1] (🚶)       person walking
+1F6B7..1F6B8  ; Emoji                # E1.0   [2] (🚷..🚸)    no 
pedestrians..children crossing
+1F6B9..1F6BE  ; Emoji                # E0.6   [6] (🚹..🚾)    men’s room..water 
closet
+1F6BF         ; Emoji                # E1.0   [1] (🚿)       shower
+1F6C0         ; Emoji                # E0.6   [1] (🛀)       person taking bath
+1F6C1..1F6C5  ; Emoji                # E1.0   [5] (🛁..🛅)    bathtub..left 
luggage
+1F6CB         ; Emoji                # E0.7   [1] (🛋️)       couch and lamp
+1F6CC         ; Emoji                # E1.0   [1] (🛌)       person in bed
+1F6CD..1F6CF  ; Emoji                # E0.7   [3] (🛍️..🛏️)    shopping 
bags..bed
+1F6D0         ; Emoji                # E1.0   [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Emoji                # E3.0   [2] (🛑..🛒)    stop 
sign..shopping cart
+1F6D5         ; Emoji                # E12.0  [1] (🛕)       hindu temple
+1F6D6..1F6D7  ; Emoji                # E13.0  [2] (🛖..🛗)    hut..elevator
+1F6DD..1F6DF  ; Emoji                # E14.0  [3] (🛝..🛟)    playground 
slide..ring buoy
+1F6E0..1F6E5  ; Emoji                # E0.7   [6] (🛠️..🛥️)    hammer and 
wrench..motor boat
+1F6E9         ; Emoji                # E0.7   [1] (🛩️)       small airplane
+1F6EB..1F6EC  ; Emoji                # E1.0   [2] (🛫..🛬)    airplane 
departure..airplane arrival
+1F6F0         ; Emoji                # E0.7   [1] (🛰️)       satellite
+1F6F3         ; Emoji                # E0.7   [1] (🛳️)       passenger ship
+1F6F4..1F6F6  ; Emoji                # E3.0   [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Emoji                # E5.0   [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Emoji                # E11.0  [1] (🛹)       skateboard
+1F6FA         ; Emoji                # E12.0  [1] (🛺)       auto rickshaw
+1F6FB..1F6FC  ; Emoji                # E13.0  [2] (🛻..🛼)    pickup 
truck..roller skate
+1F7E0..1F7EB  ; Emoji                # E12.0 [12] (🟠..🟫)    orange 
circle..brown square
+1F7F0         ; Emoji                # E14.0  [1] (🟰)       heavy equals sign
+1F90C         ; Emoji                # E13.0  [1] (🤌)       pinched fingers
+1F90D..1F90F  ; Emoji                # E12.0  [3] (🤍..🤏)    white 
heart..pinching hand
+1F910..1F918  ; Emoji                # E1.0   [9] (🤐..🤘)    zipper-mouth 
face..sign of the horns
+1F919..1F91E  ; Emoji                # E3.0   [6] (🤙..🤞)    call me 
hand..crossed fingers
+1F91F         ; Emoji                # E5.0   [1] (🤟)       love-you gesture
+1F920..1F927  ; Emoji                # E3.0   [8] (🤠..🤧)    cowboy hat 
face..sneezing face
+1F928..1F92F  ; Emoji                # E5.0   [8] (🤨..🤯)    face with raised 
eyebrow..exploding head
+1F930         ; Emoji                # E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji                # E5.0   [2] (🤱..🤲)    
breast-feeding..palms up together
+1F933..1F93A  ; Emoji                # E3.0   [8] (🤳..🤺)    selfie..person 
fencing
+1F93C..1F93E  ; Emoji                # E3.0   [3] (🤼..🤾)    people 
wrestling..person playing handball
+1F93F         ; Emoji                # E12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Emoji                # E3.0   [6] (🥀..🥅)    wilted 
flower..goal net
+1F947..1F94B  ; Emoji                # E3.0   [5] (🥇..🥋)    1st place 
medal..martial arts uniform
+1F94C         ; Emoji                # E5.0   [1] (🥌)       curling stone
+1F94D..1F94F  ; Emoji                # E11.0  [3] (🥍..🥏)    lacrosse..flying 
disc
+1F950..1F95E  ; Emoji                # E3.0  [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Emoji                # E5.0  [13] (🥟..🥫)    dumpling..canned 
food
+1F96C..1F970  ; Emoji                # E11.0  [5] (🥬..🥰)    leafy 
green..smiling face with hearts
+1F971         ; Emoji                # E12.0  [1] (🥱)       yawning face
+1F972         ; Emoji                # E13.0  [1] (🥲)       smiling face with 
tear
+1F973..1F976  ; Emoji                # E11.0  [4] (🥳..🥶)    partying 
face..cold face
+1F977..1F978  ; Emoji                # E13.0  [2] (🥷..🥸)    ninja..disguised 
face
+1F979         ; Emoji                # E14.0  [1] (🥹)       face holding back 
tears
+1F97A         ; Emoji                # E11.0  [1] (🥺)       pleading face
+1F97B         ; Emoji                # E12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Emoji                # E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Emoji                # E1.0   [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Emoji                # E3.0  [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Emoji                # E5.0   [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Emoji                # E11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A3..1F9A4  ; Emoji                # E13.0  [2] (🦣..🦤)    mammoth..dodo
+1F9A5..1F9AA  ; Emoji                # E12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AB..1F9AD  ; Emoji                # E13.0  [3] (🦫..🦭)    beaver..seal
+1F9AE..1F9AF  ; Emoji                # E12.0  [2] (🦮..🦯)    guide dog..white 
cane
+1F9B0..1F9B9  ; Emoji                # E11.0 [10] (🦰..🦹)    red 
hair..supervillain
+1F9BA..1F9BF  ; Emoji                # E12.0  [6] (🦺..🦿)    safety 
vest..mechanical leg
+1F9C0         ; Emoji                # E1.0   [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Emoji                # E11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Emoji                # E12.0  [8] (🧃..🧊)    beverage box..ice
+1F9CB         ; Emoji                # E13.0  [1] (🧋)       bubble tea
+1F9CC         ; Emoji                # E14.0  [1] (🧌)       troll
+1F9CD..1F9CF  ; Emoji                # E12.0  [3] (🧍..🧏)    person 
standing..deaf person
+1F9D0..1F9E6  ; Emoji                # E5.0  [23] (🧐..🧦)    face with 
monocle..socks
+1F9E7..1F9FF  ; Emoji                # E11.0 [25] (🧧..🧿)    red 
envelope..nazar amulet
+1FA70..1FA73  ; Emoji                # E12.0  [4] (🩰..🩳)    ballet 
shoes..shorts
+1FA74         ; Emoji                # E13.0  [1] (🩴)       thong sandal
+1FA78..1FA7A  ; Emoji                # E12.0  [3] (🩸..🩺)    drop of 
blood..stethoscope
+1FA7B..1FA7C  ; Emoji                # E14.0  [2] (🩻..🩼)    x-ray..crutch
+1FA80..1FA82  ; Emoji                # E12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA83..1FA86  ; Emoji                # E13.0  [4] (🪃..🪆)    boomerang..nesting 
dolls
+1FA90..1FA95  ; Emoji                # E12.0  [6] (🪐..🪕)    ringed 
planet..banjo
+1FA96..1FAA8  ; Emoji                # E13.0 [19] (🪖..🪨)    military 
helmet..rock
+1FAA9..1FAAC  ; Emoji                # E14.0  [4] (🪩..🪬)    mirror ball..hamsa
+1FAB0..1FAB6  ; Emoji                # E13.0  [7] (🪰..🪶)    fly..feather
+1FAB7..1FABA  ; Emoji                # E14.0  [4] (🪷..🪺)    lotus..nest with 
eggs
+1FAC0..1FAC2  ; Emoji                # E13.0  [3] (🫀..🫂)    anatomical 
heart..people hugging
+1FAC3..1FAC5  ; Emoji                # E14.0  [3] (🫃..🫅)    pregnant 
man..person with crown
+1FAD0..1FAD6  ; Emoji                # E13.0  [7] (🫐..🫖)    blueberries..teapot
+1FAD7..1FAD9  ; Emoji                # E14.0  [3] (🫗..🫙)    pouring liquid..jar
+1FAE0..1FAE7  ; Emoji                # E14.0  [8] (🫠..🫧)    melting 
face..bubbles
+1FAF0..1FAF6  ; Emoji                # E14.0  [7] (🫰..🫶)    hand with index 
finger and thumb crossed..heart hands
+
+# Total elements: 1404
+
+# ================================================
+
+# All omitted code points have Emoji_Presentation=No
+# @missing: 0000..10FFFF  ; Emoji_Presentation ; No
+
+231A..231B    ; Emoji_Presentation   # E0.6   [2] (⌚..⌛)    watch..hourglass 
done
+23E9..23EC    ; Emoji_Presentation   # E0.6   [4] (⏩..⏬)    fast-forward 
button..fast down button
+23F0          ; Emoji_Presentation   # E0.6   [1] (⏰)       alarm clock
+23F3          ; Emoji_Presentation   # E0.6   [1] (⏳)       hourglass not done
+25FD..25FE    ; Emoji_Presentation   # E0.6   [2] (◽..◾)    white medium-small 
square..black medium-small square
+2614..2615    ; Emoji_Presentation   # E0.6   [2] (☔..☕)    umbrella with rain 
drops..hot beverage
+2648..2653    ; Emoji_Presentation   # E0.6  [12] (♈..♓)    Aries..Pisces
+267F          ; Emoji_Presentation   # E0.6   [1] (♿)       wheelchair symbol
+2693          ; Emoji_Presentation   # E0.6   [1] (⚓)       anchor
+26A1          ; Emoji_Presentation   # E0.6   [1] (⚡)       high voltage
+26AA..26AB    ; Emoji_Presentation   # E0.6   [2] (⚪..⚫)    white 
circle..black circle
+26BD..26BE    ; Emoji_Presentation   # E0.6   [2] (⚽..⚾)    soccer 
ball..baseball
+26C4..26C5    ; Emoji_Presentation   # E0.6   [2] (⛄..⛅)    snowman without 
snow..sun behind cloud
+26CE          ; Emoji_Presentation   # E0.6   [1] (⛎)       Ophiuchus
+26D4          ; Emoji_Presentation   # E0.6   [1] (⛔)       no entry
+26EA          ; Emoji_Presentation   # E0.6   [1] (⛪)       church
+26F2..26F3    ; Emoji_Presentation   # E0.6   [2] (⛲..⛳)    fountain..flag in 
hole
+26F5          ; Emoji_Presentation   # E0.6   [1] (⛵)       sailboat
+26FA          ; Emoji_Presentation   # E0.6   [1] (⛺)       tent
+26FD          ; Emoji_Presentation   # E0.6   [1] (⛽)       fuel pump
+2705          ; Emoji_Presentation   # E0.6   [1] (✅)       check mark button
+270A..270B    ; Emoji_Presentation   # E0.6   [2] (✊..✋)    raised 
fist..raised hand
+2728          ; Emoji_Presentation   # E0.6   [1] (✨)       sparkles
+274C          ; Emoji_Presentation   # E0.6   [1] (❌)       cross mark
+274E          ; Emoji_Presentation   # E0.6   [1] (❎)       cross mark button
+2753..2755    ; Emoji_Presentation   # E0.6   [3] (❓..❕)    red question 
mark..white exclamation mark
+2757          ; Emoji_Presentation   # E0.6   [1] (❗)       red exclamation 
mark
+2795..2797    ; Emoji_Presentation   # E0.6   [3] (➕..➗)    plus..divide
+27B0          ; Emoji_Presentation   # E0.6   [1] (➰)       curly loop
+27BF          ; Emoji_Presentation   # E1.0   [1] (➿)       double curly loop
+2B1B..2B1C    ; Emoji_Presentation   # E0.6   [2] (⬛..⬜)    black large 
square..white large square
+2B50          ; Emoji_Presentation   # E0.6   [1] (⭐)       star
+2B55          ; Emoji_Presentation   # E0.6   [1] (⭕)       hollow red circle
+1F004         ; Emoji_Presentation   # E0.6   [1] (🀄)       mahjong red dragon
+1F0CF         ; Emoji_Presentation   # E0.6   [1] (🃏)       joker
+1F18E         ; Emoji_Presentation   # E0.6   [1] (🆎)       AB button (blood 
type)
+1F191..1F19A  ; Emoji_Presentation   # E0.6  [10] (🆑..🆚)    CL button..VS 
button
+1F1E6..1F1FF  ; Emoji_Presentation   # E0.0  [26] (🇦..🇿)    regional indicator 
symbol letter a..regional indicator symbol letter z
+1F201         ; Emoji_Presentation   # E0.6   [1] (🈁)       Japanese “here” 
button
+1F21A         ; Emoji_Presentation   # E0.6   [1] (🈚)       Japanese “free of 
charge” button
+1F22F         ; Emoji_Presentation   # E0.6   [1] (🈯)       Japanese 
“reserved” button
+1F232..1F236  ; Emoji_Presentation   # E0.6   [5] (🈲..🈶)    Japanese 
“prohibited” button..Japanese “not free of charge” button
+1F238..1F23A  ; Emoji_Presentation   # E0.6   [3] (🈸..🈺)    Japanese 
“application” button..Japanese “open for business” button
+1F250..1F251  ; Emoji_Presentation   # E0.6   [2] (🉐..🉑)    Japanese “bargain” 
button..Japanese “acceptable” button
+1F300..1F30C  ; Emoji_Presentation   # E0.6  [13] (🌀..🌌)    cyclone..milky way
+1F30D..1F30E  ; Emoji_Presentation   # E0.7   [2] (🌍..🌎)    globe showing 
Europe-Africa..globe showing Americas
+1F30F         ; Emoji_Presentation   # E0.6   [1] (🌏)       globe showing 
Asia-Australia
+1F310         ; Emoji_Presentation   # E1.0   [1] (🌐)       globe with 
meridians
+1F311         ; Emoji_Presentation   # E0.6   [1] (🌑)       new moon
+1F312         ; Emoji_Presentation   # E1.0   [1] (🌒)       waxing crescent 
moon
+1F313..1F315  ; Emoji_Presentation   # E0.6   [3] (🌓..🌕)    first quarter 
moon..full moon
+1F316..1F318  ; Emoji_Presentation   # E1.0   [3] (🌖..🌘)    waning gibbous 
moon..waning crescent moon
+1F319         ; Emoji_Presentation   # E0.6   [1] (🌙)       crescent moon
+1F31A         ; Emoji_Presentation   # E1.0   [1] (🌚)       new moon face
+1F31B         ; Emoji_Presentation   # E0.6   [1] (🌛)       first quarter moon 
face
+1F31C         ; Emoji_Presentation   # E0.7   [1] (🌜)       last quarter moon 
face
+1F31D..1F31E  ; Emoji_Presentation   # E1.0   [2] (🌝..🌞)    full moon 
face..sun with face
+1F31F..1F320  ; Emoji_Presentation   # E0.6   [2] (🌟..🌠)    glowing 
star..shooting star
+1F32D..1F32F  ; Emoji_Presentation   # E1.0   [3] (🌭..🌯)    hot dog..burrito
+1F330..1F331  ; Emoji_Presentation   # E0.6   [2] (🌰..🌱)    chestnut..seedling
+1F332..1F333  ; Emoji_Presentation   # E1.0   [2] (🌲..🌳)    evergreen 
tree..deciduous tree
+1F334..1F335  ; Emoji_Presentation   # E0.6   [2] (🌴..🌵)    palm tree..cactus
+1F337..1F34A  ; Emoji_Presentation   # E0.6  [20] (🌷..🍊)    tulip..tangerine
+1F34B         ; Emoji_Presentation   # E1.0   [1] (🍋)       lemon
+1F34C..1F34F  ; Emoji_Presentation   # E0.6   [4] (🍌..🍏)    banana..green apple
+1F350         ; Emoji_Presentation   # E1.0   [1] (🍐)       pear
+1F351..1F37B  ; Emoji_Presentation   # E0.6  [43] (🍑..🍻)    peach..clinking 
beer mugs
+1F37C         ; Emoji_Presentation   # E1.0   [1] (🍼)       baby bottle
+1F37E..1F37F  ; Emoji_Presentation   # E1.0   [2] (🍾..🍿)    bottle with 
popping cork..popcorn
+1F380..1F393  ; Emoji_Presentation   # E0.6  [20] (🎀..🎓)    ribbon..graduation 
cap
+1F3A0..1F3C4  ; Emoji_Presentation   # E0.6  [37] (🎠..🏄)    carousel 
horse..person surfing
+1F3C5         ; Emoji_Presentation   # E1.0   [1] (🏅)       sports medal
+1F3C6         ; Emoji_Presentation   # E0.6   [1] (🏆)       trophy
+1F3C7         ; Emoji_Presentation   # E1.0   [1] (🏇)       horse racing
+1F3C8         ; Emoji_Presentation   # E0.6   [1] (🏈)       american football
+1F3C9         ; Emoji_Presentation   # E1.0   [1] (🏉)       rugby football
+1F3CA         ; Emoji_Presentation   # E0.6   [1] (🏊)       person swimming
+1F3CF..1F3D3  ; Emoji_Presentation   # E1.0   [5] (🏏..🏓)    cricket game..ping 
pong
+1F3E0..1F3E3  ; Emoji_Presentation   # E0.6   [4] (🏠..🏣)    house..Japanese 
post office
+1F3E4         ; Emoji_Presentation   # E1.0   [1] (🏤)       post office
+1F3E5..1F3F0  ; Emoji_Presentation   # E0.6  [12] (🏥..🏰)    hospital..castle
+1F3F4         ; Emoji_Presentation   # E1.0   [1] (🏴)       black flag
+1F3F8..1F407  ; Emoji_Presentation   # E1.0  [16] (🏸..🐇)    badminton..rabbit
+1F408         ; Emoji_Presentation   # E0.7   [1] (🐈)       cat
+1F409..1F40B  ; Emoji_Presentation   # E1.0   [3] (🐉..🐋)    dragon..whale
+1F40C..1F40E  ; Emoji_Presentation   # E0.6   [3] (🐌..🐎)    snail..horse
+1F40F..1F410  ; Emoji_Presentation   # E1.0   [2] (🐏..🐐)    ram..goat
+1F411..1F412  ; Emoji_Presentation   # E0.6   [2] (🐑..🐒)    ewe..monkey
+1F413         ; Emoji_Presentation   # E1.0   [1] (🐓)       rooster
+1F414         ; Emoji_Presentation   # E0.6   [1] (🐔)       chicken
+1F415         ; Emoji_Presentation   # E0.7   [1] (🐕)       dog
+1F416         ; Emoji_Presentation   # E1.0   [1] (🐖)       pig
+1F417..1F429  ; Emoji_Presentation   # E0.6  [19] (🐗..🐩)    boar..poodle
+1F42A         ; Emoji_Presentation   # E1.0   [1] (🐪)       camel
+1F42B..1F43E  ; Emoji_Presentation   # E0.6  [20] (🐫..🐾)    two-hump 
camel..paw prints
+1F440         ; Emoji_Presentation   # E0.6   [1] (👀)       eyes
+1F442..1F464  ; Emoji_Presentation   # E0.6  [35] (👂..👤)    ear..bust in 
silhouette
+1F465         ; Emoji_Presentation   # E1.0   [1] (👥)       busts in silhouette
+1F466..1F46B  ; Emoji_Presentation   # E0.6   [6] (👦..👫)    boy..woman and man 
holding hands
+1F46C..1F46D  ; Emoji_Presentation   # E1.0   [2] (👬..👭)    men holding 
hands..women holding hands
+1F46E..1F4AC  ; Emoji_Presentation   # E0.6  [63] (👮..💬)    police 
officer..speech balloon
+1F4AD         ; Emoji_Presentation   # E1.0   [1] (💭)       thought balloon
+1F4AE..1F4B5  ; Emoji_Presentation   # E0.6   [8] (💮..💵)    white 
flower..dollar banknote
+1F4B6..1F4B7  ; Emoji_Presentation   # E1.0   [2] (💶..💷)    euro 
banknote..pound banknote
+1F4B8..1F4EB  ; Emoji_Presentation   # E0.6  [52] (💸..📫)    money with 
wings..closed mailbox with raised flag
+1F4EC..1F4ED  ; Emoji_Presentation   # E0.7   [2] (📬..📭)    open mailbox with 
raised flag..open mailbox with lowered flag
+1F4EE         ; Emoji_Presentation   # E0.6   [1] (📮)       postbox
+1F4EF         ; Emoji_Presentation   # E1.0   [1] (📯)       postal horn
+1F4F0..1F4F4  ; Emoji_Presentation   # E0.6   [5] (📰..📴)    newspaper..mobile 
phone off
+1F4F5         ; Emoji_Presentation   # E1.0   [1] (📵)       no mobile phones
+1F4F6..1F4F7  ; Emoji_Presentation   # E0.6   [2] (📶..📷)    antenna 
bars..camera
+1F4F8         ; Emoji_Presentation   # E1.0   [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Emoji_Presentation   # E0.6   [4] (📹..📼)    video 
camera..videocassette
+1F4FF..1F502  ; Emoji_Presentation   # E1.0   [4] (📿..🔂)    prayer 
beads..repeat single button
+1F503         ; Emoji_Presentation   # E0.6   [1] (🔃)       clockwise vertical 
arrows
+1F504..1F507  ; Emoji_Presentation   # E1.0   [4] (🔄..🔇)    counterclockwise 
arrows button..muted speaker
+1F508         ; Emoji_Presentation   # E0.7   [1] (🔈)       speaker low volume
+1F509         ; Emoji_Presentation   # E1.0   [1] (🔉)       speaker medium 
volume
+1F50A..1F514  ; Emoji_Presentation   # E0.6  [11] (🔊..🔔)    speaker high 
volume..bell
+1F515         ; Emoji_Presentation   # E1.0   [1] (🔕)       bell with slash
+1F516..1F52B  ; Emoji_Presentation   # E0.6  [22] (🔖..🔫)    bookmark..water 
pistol
+1F52C..1F52D  ; Emoji_Presentation   # E1.0   [2] (🔬..🔭)    
microscope..telescope
+1F52E..1F53D  ; Emoji_Presentation   # E0.6  [16] (🔮..🔽)    crystal 
ball..downwards button
+1F54B..1F54E  ; Emoji_Presentation   # E1.0   [4] (🕋..🕎)    kaaba..menorah
+1F550..1F55B  ; Emoji_Presentation   # E0.6  [12] (🕐..🕛)    one 
o’clock..twelve o’clock
+1F55C..1F567  ; Emoji_Presentation   # E0.7  [12] (🕜..🕧)    
one-thirty..twelve-thirty
+1F57A         ; Emoji_Presentation   # E3.0   [1] (🕺)       man dancing
+1F595..1F596  ; Emoji_Presentation   # E1.0   [2] (🖕..🖖)    middle 
finger..vulcan salute
+1F5A4         ; Emoji_Presentation   # E3.0   [1] (🖤)       black heart
+1F5FB..1F5FF  ; Emoji_Presentation   # E0.6   [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Emoji_Presentation   # E1.0   [1] (😀)       grinning face
+1F601..1F606  ; Emoji_Presentation   # E0.6   [6] (😁..😆)    beaming face with 
smiling eyes..grinning squinting face
+1F607..1F608  ; Emoji_Presentation   # E1.0   [2] (😇..😈)    smiling face with 
halo..smiling face with horns
+1F609..1F60D  ; Emoji_Presentation   # E0.6   [5] (😉..😍)    winking 
face..smiling face with heart-eyes
+1F60E         ; Emoji_Presentation   # E1.0   [1] (😎)       smiling face with 
sunglasses
+1F60F         ; Emoji_Presentation   # E0.6   [1] (😏)       smirking face
+1F610         ; Emoji_Presentation   # E0.7   [1] (😐)       neutral face
+1F611         ; Emoji_Presentation   # E1.0   [1] (😑)       expressionless face
+1F612..1F614  ; Emoji_Presentation   # E0.6   [3] (😒..😔)    unamused 
face..pensive face
+1F615         ; Emoji_Presentation   # E1.0   [1] (😕)       confused face
+1F616         ; Emoji_Presentation   # E0.6   [1] (😖)       confounded face
+1F617         ; Emoji_Presentation   # E1.0   [1] (😗)       kissing face
+1F618         ; Emoji_Presentation   # E0.6   [1] (😘)       face blowing a kiss
+1F619         ; Emoji_Presentation   # E1.0   [1] (😙)       kissing face with 
smiling eyes
+1F61A         ; Emoji_Presentation   # E0.6   [1] (😚)       kissing face with 
closed eyes
+1F61B         ; Emoji_Presentation   # E1.0   [1] (😛)       face with tongue
+1F61C..1F61E  ; Emoji_Presentation   # E0.6   [3] (😜..😞)    winking face with 
tongue..disappointed face
+1F61F         ; Emoji_Presentation   # E1.0   [1] (😟)       worried face
+1F620..1F625  ; Emoji_Presentation   # E0.6   [6] (😠..😥)    angry face..sad 
but relieved face
+1F626..1F627  ; Emoji_Presentation   # E1.0   [2] (😦..😧)    frowning face with 
open mouth..anguished face
+1F628..1F62B  ; Emoji_Presentation   # E0.6   [4] (😨..😫)    fearful 
face..tired face
+1F62C         ; Emoji_Presentation   # E1.0   [1] (😬)       grimacing face
+1F62D         ; Emoji_Presentation   # E0.6   [1] (😭)       loudly crying face
+1F62E..1F62F  ; Emoji_Presentation   # E1.0   [2] (😮..😯)    face with open 
mouth..hushed face
+1F630..1F633  ; Emoji_Presentation   # E0.6   [4] (😰..😳)    anxious face with 
sweat..flushed face
+1F634         ; Emoji_Presentation   # E1.0   [1] (😴)       sleeping face
+1F635         ; Emoji_Presentation   # E0.6   [1] (😵)       face with 
crossed-out eyes
+1F636         ; Emoji_Presentation   # E1.0   [1] (😶)       face without mouth
+1F637..1F640  ; Emoji_Presentation   # E0.6  [10] (😷..🙀)    face with medical 
mask..weary cat
+1F641..1F644  ; Emoji_Presentation   # E1.0   [4] (🙁..🙄)    slightly frowning 
face..face with rolling eyes
+1F645..1F64F  ; Emoji_Presentation   # E0.6  [11] (🙅..🙏)    person gesturing 
NO..folded hands
+1F680         ; Emoji_Presentation   # E0.6   [1] (🚀)       rocket
+1F681..1F682  ; Emoji_Presentation   # E1.0   [2] (🚁..🚂)    
helicopter..locomotive
+1F683..1F685  ; Emoji_Presentation   # E0.6   [3] (🚃..🚅)    railway 
car..bullet train
+1F686         ; Emoji_Presentation   # E1.0   [1] (🚆)       train
+1F687         ; Emoji_Presentation   # E0.6   [1] (🚇)       metro
+1F688         ; Emoji_Presentation   # E1.0   [1] (🚈)       light rail
+1F689         ; Emoji_Presentation   # E0.6   [1] (🚉)       station
+1F68A..1F68B  ; Emoji_Presentation   # E1.0   [2] (🚊..🚋)    tram..tram car
+1F68C         ; Emoji_Presentation   # E0.6   [1] (🚌)       bus
+1F68D         ; Emoji_Presentation   # E0.7   [1] (🚍)       oncoming bus
+1F68E         ; Emoji_Presentation   # E1.0   [1] (🚎)       trolleybus
+1F68F         ; Emoji_Presentation   # E0.6   [1] (🚏)       bus stop
+1F690         ; Emoji_Presentation   # E1.0   [1] (🚐)       minibus
+1F691..1F693  ; Emoji_Presentation   # E0.6   [3] (🚑..🚓)    ambulance..police 
car
+1F694         ; Emoji_Presentation   # E0.7   [1] (🚔)       oncoming police car
+1F695         ; Emoji_Presentation   # E0.6   [1] (🚕)       taxi
+1F696         ; Emoji_Presentation   # E1.0   [1] (🚖)       oncoming taxi
+1F697         ; Emoji_Presentation   # E0.6   [1] (🚗)       automobile
+1F698         ; Emoji_Presentation   # E0.7   [1] (🚘)       oncoming automobile
+1F699..1F69A  ; Emoji_Presentation   # E0.6   [2] (🚙..🚚)    sport utility 
vehicle..delivery truck
+1F69B..1F6A1  ; Emoji_Presentation   # E1.0   [7] (🚛..🚡)    articulated 
lorry..aerial tramway
+1F6A2         ; Emoji_Presentation   # E0.6   [1] (🚢)       ship
+1F6A3         ; Emoji_Presentation   # E1.0   [1] (🚣)       person rowing boat
+1F6A4..1F6A5  ; Emoji_Presentation   # E0.6   [2] (🚤..🚥)    
speedboat..horizontal traffic light
+1F6A6         ; Emoji_Presentation   # E1.0   [1] (🚦)       vertical traffic 
light
+1F6A7..1F6AD  ; Emoji_Presentation   # E0.6   [7] (🚧..🚭)    construction..no 
smoking
+1F6AE..1F6B1  ; Emoji_Presentation   # E1.0   [4] (🚮..🚱)    litter in bin 
sign..non-potable water
+1F6B2         ; Emoji_Presentation   # E0.6   [1] (🚲)       bicycle
+1F6B3..1F6B5  ; Emoji_Presentation   # E1.0   [3] (🚳..🚵)    no 
bicycles..person mountain biking
+1F6B6         ; Emoji_Presentation   # E0.6   [1] (🚶)       person walking
+1F6B7..1F6B8  ; Emoji_Presentation   # E1.0   [2] (🚷..🚸)    no 
pedestrians..children crossing
+1F6B9..1F6BE  ; Emoji_Presentation   # E0.6   [6] (🚹..🚾)    men’s room..water 
closet
+1F6BF         ; Emoji_Presentation   # E1.0   [1] (🚿)       shower
+1F6C0         ; Emoji_Presentation   # E0.6   [1] (🛀)       person taking bath
+1F6C1..1F6C5  ; Emoji_Presentation   # E1.0   [5] (🛁..🛅)    bathtub..left 
luggage
+1F6CC         ; Emoji_Presentation   # E1.0   [1] (🛌)       person in bed
+1F6D0         ; Emoji_Presentation   # E1.0   [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Emoji_Presentation   # E3.0   [2] (🛑..🛒)    stop 
sign..shopping cart
+1F6D5         ; Emoji_Presentation   # E12.0  [1] (🛕)       hindu temple
+1F6D6..1F6D7  ; Emoji_Presentation   # E13.0  [2] (🛖..🛗)    hut..elevator
+1F6DD..1F6DF  ; Emoji_Presentation   # E14.0  [3] (🛝..🛟)    playground 
slide..ring buoy
+1F6EB..1F6EC  ; Emoji_Presentation   # E1.0   [2] (🛫..🛬)    airplane 
departure..airplane arrival
+1F6F4..1F6F6  ; Emoji_Presentation   # E3.0   [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Emoji_Presentation   # E5.0   [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Emoji_Presentation   # E11.0  [1] (🛹)       skateboard
+1F6FA         ; Emoji_Presentation   # E12.0  [1] (🛺)       auto rickshaw
+1F6FB..1F6FC  ; Emoji_Presentation   # E13.0  [2] (🛻..🛼)    pickup 
truck..roller skate
+1F7E0..1F7EB  ; Emoji_Presentation   # E12.0 [12] (🟠..🟫)    orange 
circle..brown square
+1F7F0         ; Emoji_Presentation   # E14.0  [1] (🟰)       heavy equals sign
+1F90C         ; Emoji_Presentation   # E13.0  [1] (🤌)       pinched fingers
+1F90D..1F90F  ; Emoji_Presentation   # E12.0  [3] (🤍..🤏)    white 
heart..pinching hand
+1F910..1F918  ; Emoji_Presentation   # E1.0   [9] (🤐..🤘)    zipper-mouth 
face..sign of the horns
+1F919..1F91E  ; Emoji_Presentation   # E3.0   [6] (🤙..🤞)    call me 
hand..crossed fingers
+1F91F         ; Emoji_Presentation   # E5.0   [1] (🤟)       love-you gesture
+1F920..1F927  ; Emoji_Presentation   # E3.0   [8] (🤠..🤧)    cowboy hat 
face..sneezing face
+1F928..1F92F  ; Emoji_Presentation   # E5.0   [8] (🤨..🤯)    face with raised 
eyebrow..exploding head
+1F930         ; Emoji_Presentation   # E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji_Presentation   # E5.0   [2] (🤱..🤲)    
breast-feeding..palms up together
+1F933..1F93A  ; Emoji_Presentation   # E3.0   [8] (🤳..🤺)    selfie..person 
fencing
+1F93C..1F93E  ; Emoji_Presentation   # E3.0   [3] (🤼..🤾)    people 
wrestling..person playing handball
+1F93F         ; Emoji_Presentation   # E12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Emoji_Presentation   # E3.0   [6] (🥀..🥅)    wilted 
flower..goal net
+1F947..1F94B  ; Emoji_Presentation   # E3.0   [5] (🥇..🥋)    1st place 
medal..martial arts uniform
+1F94C         ; Emoji_Presentation   # E5.0   [1] (🥌)       curling stone
+1F94D..1F94F  ; Emoji_Presentation   # E11.0  [3] (🥍..🥏)    lacrosse..flying 
disc
+1F950..1F95E  ; Emoji_Presentation   # E3.0  [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Emoji_Presentation   # E5.0  [13] (🥟..🥫)    dumpling..canned 
food
+1F96C..1F970  ; Emoji_Presentation   # E11.0  [5] (🥬..🥰)    leafy 
green..smiling face with hearts
+1F971         ; Emoji_Presentation   # E12.0  [1] (🥱)       yawning face
+1F972         ; Emoji_Presentation   # E13.0  [1] (🥲)       smiling face with 
tear
+1F973..1F976  ; Emoji_Presentation   # E11.0  [4] (🥳..🥶)    partying 
face..cold face
+1F977..1F978  ; Emoji_Presentation   # E13.0  [2] (🥷..🥸)    ninja..disguised 
face
+1F979         ; Emoji_Presentation   # E14.0  [1] (🥹)       face holding back 
tears
+1F97A         ; Emoji_Presentation   # E11.0  [1] (🥺)       pleading face
+1F97B         ; Emoji_Presentation   # E12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Emoji_Presentation   # E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Emoji_Presentation   # E1.0   [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Emoji_Presentation   # E3.0  [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Emoji_Presentation   # E5.0   [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Emoji_Presentation   # E11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A3..1F9A4  ; Emoji_Presentation   # E13.0  [2] (🦣..🦤)    mammoth..dodo
+1F9A5..1F9AA  ; Emoji_Presentation   # E12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AB..1F9AD  ; Emoji_Presentation   # E13.0  [3] (🦫..🦭)    beaver..seal
+1F9AE..1F9AF  ; Emoji_Presentation   # E12.0  [2] (🦮..🦯)    guide dog..white 
cane
+1F9B0..1F9B9  ; Emoji_Presentation   # E11.0 [10] (🦰..🦹)    red 
hair..supervillain
+1F9BA..1F9BF  ; Emoji_Presentation   # E12.0  [6] (🦺..🦿)    safety 
vest..mechanical leg
+1F9C0         ; Emoji_Presentation   # E1.0   [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Emoji_Presentation   # E11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Emoji_Presentation   # E12.0  [8] (🧃..🧊)    beverage box..ice
+1F9CB         ; Emoji_Presentation   # E13.0  [1] (🧋)       bubble tea
+1F9CC         ; Emoji_Presentation   # E14.0  [1] (🧌)       troll
+1F9CD..1F9CF  ; Emoji_Presentation   # E12.0  [3] (🧍..🧏)    person 
standing..deaf person
+1F9D0..1F9E6  ; Emoji_Presentation   # E5.0  [23] (🧐..🧦)    face with 
monocle..socks
+1F9E7..1F9FF  ; Emoji_Presentation   # E11.0 [25] (🧧..🧿)    red 
envelope..nazar amulet
+1FA70..1FA73  ; Emoji_Presentation   # E12.0  [4] (🩰..🩳)    ballet 
shoes..shorts
+1FA74         ; Emoji_Presentation   # E13.0  [1] (🩴)       thong sandal
+1FA78..1FA7A  ; Emoji_Presentation   # E12.0  [3] (🩸..🩺)    drop of 
blood..stethoscope
+1FA7B..1FA7C  ; Emoji_Presentation   # E14.0  [2] (🩻..🩼)    x-ray..crutch
+1FA80..1FA82  ; Emoji_Presentation   # E12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA83..1FA86  ; Emoji_Presentation   # E13.0  [4] (🪃..🪆)    boomerang..nesting 
dolls
+1FA90..1FA95  ; Emoji_Presentation   # E12.0  [6] (🪐..🪕)    ringed 
planet..banjo
+1FA96..1FAA8  ; Emoji_Presentation   # E13.0 [19] (🪖..🪨)    military 
helmet..rock
+1FAA9..1FAAC  ; Emoji_Presentation   # E14.0  [4] (🪩..🪬)    mirror ball..hamsa
+1FAB0..1FAB6  ; Emoji_Presentation   # E13.0  [7] (🪰..🪶)    fly..feather
+1FAB7..1FABA  ; Emoji_Presentation   # E14.0  [4] (🪷..🪺)    lotus..nest with 
eggs
+1FAC0..1FAC2  ; Emoji_Presentation   # E13.0  [3] (🫀..🫂)    anatomical 
heart..people hugging
+1FAC3..1FAC5  ; Emoji_Presentation   # E14.0  [3] (🫃..🫅)    pregnant 
man..person with crown
+1FAD0..1FAD6  ; Emoji_Presentation   # E13.0  [7] (🫐..🫖)    blueberries..teapot
+1FAD7..1FAD9  ; Emoji_Presentation   # E14.0  [3] (🫗..🫙)    pouring liquid..jar
+1FAE0..1FAE7  ; Emoji_Presentation   # E14.0  [8] (🫠..🫧)    melting 
face..bubbles
+1FAF0..1FAF6  ; Emoji_Presentation   # E14.0  [7] (🫰..🫶)    hand with index 
finger and thumb crossed..heart hands
+
+# Total elements: 1185
+
+# ================================================
+
+# All omitted code points have Emoji_Modifier=No
+# @missing: 0000..10FFFF  ; Emoji_Modifier ; No
+
+1F3FB..1F3FF  ; Emoji_Modifier       # E1.0   [5] (🏻..🏿)    light skin 
tone..dark skin tone
+
+# Total elements: 5
+
+# ================================================
+
+# All omitted code points have Emoji_Modifier_Base=No
+# @missing: 0000..10FFFF  ; Emoji_Modifier_Base ; No
+
+261D          ; Emoji_Modifier_Base  # E0.6   [1] (☝️)       index pointing up
+26F9          ; Emoji_Modifier_Base  # E0.7   [1] (⛹️)       person bouncing 
ball
+270A..270C    ; Emoji_Modifier_Base  # E0.6   [3] (✊..✌️)    raised 
fist..victory hand
+270D          ; Emoji_Modifier_Base  # E0.7   [1] (✍️)       writing hand
+1F385         ; Emoji_Modifier_Base  # E0.6   [1] (🎅)       Santa Claus
+1F3C2..1F3C4  ; Emoji_Modifier_Base  # E0.6   [3] (🏂..🏄)    
snowboarder..person surfing
+1F3C7         ; Emoji_Modifier_Base  # E1.0   [1] (🏇)       horse racing
+1F3CA         ; Emoji_Modifier_Base  # E0.6   [1] (🏊)       person swimming
+1F3CB..1F3CC  ; Emoji_Modifier_Base  # E0.7   [2] (🏋️..🏌️)    person lifting 
weights..person golfing
+1F442..1F443  ; Emoji_Modifier_Base  # E0.6   [2] (👂..👃)    ear..nose
+1F446..1F450  ; Emoji_Modifier_Base  # E0.6  [11] (👆..👐)    backhand index 
pointing up..open hands
+1F466..1F46B  ; Emoji_Modifier_Base  # E0.6   [6] (👦..👫)    boy..woman and man 
holding hands
+1F46C..1F46D  ; Emoji_Modifier_Base  # E1.0   [2] (👬..👭)    men holding 
hands..women holding hands
+1F46E..1F478  ; Emoji_Modifier_Base  # E0.6  [11] (👮..👸)    police 
officer..princess
+1F47C         ; Emoji_Modifier_Base  # E0.6   [1] (👼)       baby angel
+1F481..1F483  ; Emoji_Modifier_Base  # E0.6   [3] (💁..💃)    person tipping 
hand..woman dancing
+1F485..1F487  ; Emoji_Modifier_Base  # E0.6   [3] (💅..💇)    nail 
polish..person getting haircut
+1F48F         ; Emoji_Modifier_Base  # E0.6   [1] (💏)       kiss
+1F491         ; Emoji_Modifier_Base  # E0.6   [1] (💑)       couple with heart
+1F4AA         ; Emoji_Modifier_Base  # E0.6   [1] (💪)       flexed biceps
+1F574..1F575  ; Emoji_Modifier_Base  # E0.7   [2] (🕴️..🕵️)    person in suit 
levitating..detective
+1F57A         ; Emoji_Modifier_Base  # E3.0   [1] (🕺)       man dancing
+1F590         ; Emoji_Modifier_Base  # E0.7   [1] (🖐️)       hand with fingers 
splayed
+1F595..1F596  ; Emoji_Modifier_Base  # E1.0   [2] (🖕..🖖)    middle 
finger..vulcan salute
+1F645..1F647  ; Emoji_Modifier_Base  # E0.6   [3] (🙅..🙇)    person gesturing 
NO..person bowing
+1F64B..1F64F  ; Emoji_Modifier_Base  # E0.6   [5] (🙋..🙏)    person raising 
hand..folded hands
+1F6A3         ; Emoji_Modifier_Base  # E1.0   [1] (🚣)       person rowing boat
+1F6B4..1F6B5  ; Emoji_Modifier_Base  # E1.0   [2] (🚴..🚵)    person 
biking..person mountain biking
+1F6B6         ; Emoji_Modifier_Base  # E0.6   [1] (🚶)       person walking
+1F6C0         ; Emoji_Modifier_Base  # E0.6   [1] (🛀)       person taking bath
+1F6CC         ; Emoji_Modifier_Base  # E1.0   [1] (🛌)       person in bed
+1F90C         ; Emoji_Modifier_Base  # E13.0  [1] (🤌)       pinched fingers
+1F90F         ; Emoji_Modifier_Base  # E12.0  [1] (🤏)       pinching hand
+1F918         ; Emoji_Modifier_Base  # E1.0   [1] (🤘)       sign of the horns
+1F919..1F91E  ; Emoji_Modifier_Base  # E3.0   [6] (🤙..🤞)    call me 
hand..crossed fingers
+1F91F         ; Emoji_Modifier_Base  # E5.0   [1] (🤟)       love-you gesture
+1F926         ; Emoji_Modifier_Base  # E3.0   [1] (🤦)       person facepalming
+1F930         ; Emoji_Modifier_Base  # E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji_Modifier_Base  # E5.0   [2] (🤱..🤲)    
breast-feeding..palms up together
+1F933..1F939  ; Emoji_Modifier_Base  # E3.0   [7] (🤳..🤹)    selfie..person 
juggling
+1F93C..1F93E  ; Emoji_Modifier_Base  # E3.0   [3] (🤼..🤾)    people 
wrestling..person playing handball
+1F977         ; Emoji_Modifier_Base  # E13.0  [1] (🥷)       ninja
+1F9B5..1F9B6  ; Emoji_Modifier_Base  # E11.0  [2] (🦵..🦶)    leg..foot
+1F9B8..1F9B9  ; Emoji_Modifier_Base  # E11.0  [2] (🦸..🦹)    
superhero..supervillain
+1F9BB         ; Emoji_Modifier_Base  # E12.0  [1] (🦻)       ear with hearing 
aid
+1F9CD..1F9CF  ; Emoji_Modifier_Base  # E12.0  [3] (🧍..🧏)    person 
standing..deaf person
+1F9D1..1F9DD  ; Emoji_Modifier_Base  # E5.0  [13] (🧑..🧝)    person..elf
+1FAC3..1FAC5  ; Emoji_Modifier_Base  # E14.0  [3] (🫃..🫅)    pregnant 
man..person with crown
+1FAF0..1FAF6  ; Emoji_Modifier_Base  # E14.0  [7] (🫰..🫶)    hand with index 
finger and thumb crossed..heart hands
+
+# Total elements: 132
+
+# ================================================
+
+# All omitted code points have Emoji_Component=No
+# @missing: 0000..10FFFF  ; Emoji_Component ; No
+
+0023          ; Emoji_Component      # E0.0   [1] (#️)       hash sign
+002A          ; Emoji_Component      # E0.0   [1] (*️)       asterisk
+0030..0039    ; Emoji_Component      # E0.0  [10] (0️..9️)    digit 
zero..digit nine
+200D          ; Emoji_Component      # E0.0   [1] (‍)        zero width joiner
+20E3          ; Emoji_Component      # E0.0   [1] (⃣)       combining 
enclosing keycap
+FE0F          ; Emoji_Component      # E0.0   [1] ()        VARIATION 
SELECTOR-16
+1F1E6..1F1FF  ; Emoji_Component      # E0.0  [26] (🇦..🇿)    regional indicator 
symbol letter a..regional indicator symbol letter z
+1F3FB..1F3FF  ; Emoji_Component      # E1.0   [5] (🏻..🏿)    light skin 
tone..dark skin tone
+1F9B0..1F9B3  ; Emoji_Component      # E11.0  [4] (🦰..🦳)    red hair..white 
hair
+E0020..E007F  ; Emoji_Component      # E0.0  [96] (󠀠..󠁿)      tag 
space..cancel tag
+
+# Total elements: 146
+
+# ================================================
+
+# All omitted code points have Extended_Pictographic=No
+# @missing: 0000..10FFFF  ; Extended_Pictographic ; No
+
+00A9          ; Extended_Pictographic# E0.6   [1] (©️)       copyright
+00AE          ; Extended_Pictographic# E0.6   [1] (®️)       registered
+203C          ; Extended_Pictographic# E0.6   [1] (‼️)       double 
exclamation mark
+2049          ; Extended_Pictographic# E0.6   [1] (⁉️)       exclamation 
question mark
+2122          ; Extended_Pictographic# E0.6   [1] (™️)       trade mark
+2139          ; Extended_Pictographic# E0.6   [1] (ℹ️)       information
+2194..2199    ; Extended_Pictographic# E0.6   [6] (↔️..↙️)    left-right 
arrow..down-left arrow
+21A9..21AA    ; Extended_Pictographic# E0.6   [2] (↩️..↪️)    right arrow 
curving left..left arrow curving right
+231A..231B    ; Extended_Pictographic# E0.6   [2] (⌚..⌛)    watch..hourglass 
done
+2328          ; Extended_Pictographic# E1.0   [1] (⌨️)       keyboard
+2388          ; Extended_Pictographic# E0.0   [1] (⎈)       HELM SYMBOL
+23CF          ; Extended_Pictographic# E1.0   [1] (⏏️)       eject button
+23E9..23EC    ; Extended_Pictographic# E0.6   [4] (⏩..⏬)    fast-forward 
button..fast down button
+23ED..23EE    ; Extended_Pictographic# E0.7   [2] (⏭️..⏮️)    next track 
button..last track button
+23EF          ; Extended_Pictographic# E1.0   [1] (⏯️)       play or pause 
button
+23F0          ; Extended_Pictographic# E0.6   [1] (⏰)       alarm clock
+23F1..23F2    ; Extended_Pictographic# E1.0   [2] (⏱️..⏲️)    stopwatch..timer 
clock
+23F3          ; Extended_Pictographic# E0.6   [1] (⏳)       hourglass not done
+23F8..23FA    ; Extended_Pictographic# E0.7   [3] (⏸️..⏺️)    pause 
button..record button
+24C2          ; Extended_Pictographic# E0.6   [1] (Ⓜ️)       circled M
+25AA..25AB    ; Extended_Pictographic# E0.6   [2] (▪️..▫️)    black small 
square..white small square
+25B6          ; Extended_Pictographic# E0.6   [1] (▶️)       play button
+25C0          ; Extended_Pictographic# E0.6   [1] (◀️)       reverse button
+25FB..25FE    ; Extended_Pictographic# E0.6   [4] (◻️..◾)    white medium 
square..black medium-small square
+2600..2601    ; Extended_Pictographic# E0.6   [2] (☀️..☁️)    sun..cloud
+2602..2603    ; Extended_Pictographic# E0.7   [2] (☂️..☃️)    umbrella..snowman
+2604          ; Extended_Pictographic# E1.0   [1] (☄️)       comet
+2605          ; Extended_Pictographic# E0.0   [1] (★)       BLACK STAR
+2607..260D    ; Extended_Pictographic# E0.0   [7] (☇..☍)    
LIGHTNING..OPPOSITION
+260E          ; Extended_Pictographic# E0.6   [1] (☎️)       telephone
+260F..2610    ; Extended_Pictographic# E0.0   [2] (☏..☐)    WHITE 
TELEPHONE..BALLOT BOX
+2611          ; Extended_Pictographic# E0.6   [1] (☑️)       check box with 
check
+2612          ; Extended_Pictographic# E0.0   [1] (☒)       BALLOT BOX WITH X
+2614..2615    ; Extended_Pictographic# E0.6   [2] (☔..☕)    umbrella with rain 
drops..hot beverage
+2616..2617    ; Extended_Pictographic# E0.0   [2] (☖..☗)    WHITE SHOGI 
PIECE..BLACK SHOGI PIECE
+2618          ; Extended_Pictographic# E1.0   [1] (☘️)       shamrock
+2619..261C    ; Extended_Pictographic# E0.0   [4] (☙..☜)    REVERSED ROTATED 
FLORAL HEART BULLET..WHITE LEFT POINTING INDEX
+261D          ; Extended_Pictographic# E0.6   [1] (☝️)       index pointing up
+261E..261F    ; Extended_Pictographic# E0.0   [2] (☞..☟)    WHITE RIGHT 
POINTING INDEX..WHITE DOWN POINTING INDEX
+2620          ; Extended_Pictographic# E1.0   [1] (☠️)       skull and 
crossbones
+2621          ; Extended_Pictographic# E0.0   [1] (☡)       CAUTION SIGN
+2622..2623    ; Extended_Pictographic# E1.0   [2] (☢️..☣️)    
radioactive..biohazard
+2624..2625    ; Extended_Pictographic# E0.0   [2] (☤..☥)    CADUCEUS..ANKH
+2626          ; Extended_Pictographic# E1.0   [1] (☦️)       orthodox cross
+2627..2629    ; Extended_Pictographic# E0.0   [3] (☧..☩)    CHI RHO..CROSS OF 
JERUSALEM
+262A          ; Extended_Pictographic# E0.7   [1] (☪️)       star and crescent
+262B..262D    ; Extended_Pictographic# E0.0   [3] (☫..☭)    FARSI 
SYMBOL..HAMMER AND SICKLE
+262E          ; Extended_Pictographic# E1.0   [1] (☮️)       peace symbol
+262F          ; Extended_Pictographic# E0.7   [1] (☯️)       yin yang
+2630..2637    ; Extended_Pictographic# E0.0   [8] (☰..☷)    TRIGRAM FOR 
HEAVEN..TRIGRAM FOR EARTH
+2638..2639    ; Extended_Pictographic# E0.7   [2] (☸️..☹️)    wheel of 
dharma..frowning face
+263A          ; Extended_Pictographic# E0.6   [1] (☺️)       smiling face
+263B..263F    ; Extended_Pictographic# E0.0   [5] (☻..☿)    BLACK SMILING 
FACE..MERCURY
+2640          ; Extended_Pictographic# E4.0   [1] (♀️)       female sign
+2641          ; Extended_Pictographic# E0.0   [1] (♁)       EARTH
+2642          ; Extended_Pictographic# E4.0   [1] (♂️)       male sign
+2643..2647    ; Extended_Pictographic# E0.0   [5] (♃..♇)    JUPITER..PLUTO
+2648..2653    ; Extended_Pictographic# E0.6  [12] (♈..♓)    Aries..Pisces
+2654..265E    ; Extended_Pictographic# E0.0  [11] (♔..♞)    WHITE CHESS 
KING..BLACK CHESS KNIGHT
+265F          ; Extended_Pictographic# E11.0  [1] (♟️)       chess pawn
+2660          ; Extended_Pictographic# E0.6   [1] (♠️)       spade suit
+2661..2662    ; Extended_Pictographic# E0.0   [2] (♡..♢)    WHITE HEART 
SUIT..WHITE DIAMOND SUIT
+2663          ; Extended_Pictographic# E0.6   [1] (♣️)       club suit
+2664          ; Extended_Pictographic# E0.0   [1] (♤)       WHITE SPADE SUIT
+2665..2666    ; Extended_Pictographic# E0.6   [2] (♥️..♦️)    heart 
suit..diamond suit
+2667          ; Extended_Pictographic# E0.0   [1] (♧)       WHITE CLUB SUIT
+2668          ; Extended_Pictographic# E0.6   [1] (♨️)       hot springs
+2669..267A    ; Extended_Pictographic# E0.0  [18] (♩..♺)    QUARTER 
NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS
+267B          ; Extended_Pictographic# E0.6   [1] (♻️)       recycling symbol
+267C..267D    ; Extended_Pictographic# E0.0   [2] (♼..♽)    RECYCLED PAPER 
SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL
+267E          ; Extended_Pictographic# E11.0  [1] (♾️)       infinity
+267F          ; Extended_Pictographic# E0.6   [1] (♿)       wheelchair symbol
+2680..2685    ; Extended_Pictographic# E0.0   [6] (⚀..⚅)    DIE FACE-1..DIE 
FACE-6
+2690..2691    ; Extended_Pictographic# E0.0   [2] (⚐..⚑)    WHITE FLAG..BLACK 
FLAG
+2692          ; Extended_Pictographic# E1.0   [1] (⚒️)       hammer and pick
+2693          ; Extended_Pictographic# E0.6   [1] (⚓)       anchor
+2694          ; Extended_Pictographic# E1.0   [1] (⚔️)       crossed swords
+2695          ; Extended_Pictographic# E4.0   [1] (⚕️)       medical symbol
+2696..2697    ; Extended_Pictographic# E1.0   [2] (⚖️..⚗️)    balance 
scale..alembic
+2698          ; Extended_Pictographic# E0.0   [1] (⚘)       FLOWER
+2699          ; Extended_Pictographic# E1.0   [1] (⚙️)       gear
+269A          ; Extended_Pictographic# E0.0   [1] (⚚)       STAFF OF HERMES
+269B..269C    ; Extended_Pictographic# E1.0   [2] (⚛️..⚜️)    atom 
symbol..fleur-de-lis
+269D..269F    ; Extended_Pictographic# E0.0   [3] (⚝..⚟)    OUTLINED WHITE 
STAR..THREE LINES CONVERGING LEFT
+26A0..26A1    ; Extended_Pictographic# E0.6   [2] (⚠️..⚡)    warning..high 
voltage
+26A2..26A6    ; Extended_Pictographic# E0.0   [5] (⚢..⚦)    DOUBLED FEMALE 
SIGN..MALE WITH STROKE SIGN
+26A7          ; Extended_Pictographic# E13.0  [1] (⚧️)       transgender symbol
+26A8..26A9    ; Extended_Pictographic# E0.0   [2] (⚨..⚩)    VERTICAL MALE WITH 
STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN
+26AA..26AB    ; Extended_Pictographic# E0.6   [2] (⚪..⚫)    white 
circle..black circle
+26AC..26AF    ; Extended_Pictographic# E0.0   [4] (⚬..⚯)    MEDIUM SMALL WHITE 
CIRCLE..UNMARRIED PARTNERSHIP SYMBOL
+26B0..26B1    ; Extended_Pictographic# E1.0   [2] (⚰️..⚱️)    coffin..funeral 
urn
+26B2..26BC    ; Extended_Pictographic# E0.0  [11] (⚲..⚼)    
NEUTER..SESQUIQUADRATE
+26BD..26BE    ; Extended_Pictographic# E0.6   [2] (⚽..⚾)    soccer 
ball..baseball
+26BF..26C3    ; Extended_Pictographic# E0.0   [5] (⚿..⛃)    SQUARED KEY..BLACK 
DRAUGHTS KING
+26C4..26C5    ; Extended_Pictographic# E0.6   [2] (⛄..⛅)    snowman without 
snow..sun behind cloud
+26C6..26C7    ; Extended_Pictographic# E0.0   [2] (⛆..⛇)    RAIN..BLACK SNOWMAN
+26C8          ; Extended_Pictographic# E0.7   [1] (⛈️)       cloud with 
lightning and rain
+26C9..26CD    ; Extended_Pictographic# E0.0   [5] (⛉..⛍)    TURNED WHITE SHOGI 
PIECE..DISABLED CAR
+26CE          ; Extended_Pictographic# E0.6   [1] (⛎)       Ophiuchus
+26CF          ; Extended_Pictographic# E0.7   [1] (⛏️)       pick
+26D0          ; Extended_Pictographic# E0.0   [1] (⛐)       CAR SLIDING
+26D1          ; Extended_Pictographic# E0.7   [1] (⛑️)       rescue worker’s 
helmet
+26D2          ; Extended_Pictographic# E0.0   [1] (⛒)       CIRCLED CROSSING 
LANES
+26D3          ; Extended_Pictographic# E0.7   [1] (⛓️)       chains
+26D4          ; Extended_Pictographic# E0.6   [1] (⛔)       no entry
+26D5..26E8    ; Extended_Pictographic# E0.0  [20] (⛕..⛨)    ALTERNATE ONE-WAY 
LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD
+26E9          ; Extended_Pictographic# E0.7   [1] (⛩️)       shinto shrine
+26EA          ; Extended_Pictographic# E0.6   [1] (⛪)       church
+26EB..26EF    ; Extended_Pictographic# E0.0   [5] (⛫..⛯)    CASTLE..MAP SYMBOL 
FOR LIGHTHOUSE
+26F0..26F1    ; Extended_Pictographic# E0.7   [2] (⛰️..⛱️)    
mountain..umbrella on ground
+26F2..26F3    ; Extended_Pictographic# E0.6   [2] (⛲..⛳)    fountain..flag in 
hole
+26F4          ; Extended_Pictographic# E0.7   [1] (⛴️)       ferry
+26F5          ; Extended_Pictographic# E0.6   [1] (⛵)       sailboat
+26F6          ; Extended_Pictographic# E0.0   [1] (⛶)       SQUARE FOUR CORNERS
+26F7..26F9    ; Extended_Pictographic# E0.7   [3] (⛷️..⛹️)    skier..person 
bouncing ball
+26FA          ; Extended_Pictographic# E0.6   [1] (⛺)       tent
+26FB..26FC    ; Extended_Pictographic# E0.0   [2] (⛻..⛼)    JAPANESE BANK 
SYMBOL..HEADSTONE GRAVEYARD SYMBOL
+26FD          ; Extended_Pictographic# E0.6   [1] (⛽)       fuel pump
+26FE..2701    ; Extended_Pictographic# E0.0   [4] (⛾..✁)    CUP ON BLACK 
SQUARE..UPPER BLADE SCISSORS
+2702          ; Extended_Pictographic# E0.6   [1] (✂️)       scissors
+2703..2704    ; Extended_Pictographic# E0.0   [2] (✃..✄)    LOWER BLADE 
SCISSORS..WHITE SCISSORS
+2705          ; Extended_Pictographic# E0.6   [1] (✅)       check mark button
+2708..270C    ; Extended_Pictographic# E0.6   [5] (✈️..✌️)    
airplane..victory hand
+270D          ; Extended_Pictographic# E0.7   [1] (✍️)       writing hand
+270E          ; Extended_Pictographic# E0.0   [1] (✎)       LOWER RIGHT PENCIL
+270F          ; Extended_Pictographic# E0.6   [1] (✏️)       pencil
+2710..2711    ; Extended_Pictographic# E0.0   [2] (✐..✑)    UPPER RIGHT 
PENCIL..WHITE NIB
+2712          ; Extended_Pictographic# E0.6   [1] (✒️)       black nib
+2714          ; Extended_Pictographic# E0.6   [1] (✔️)       check mark
+2716          ; Extended_Pictographic# E0.6   [1] (✖️)       multiply
+271D          ; Extended_Pictographic# E0.7   [1] (✝️)       latin cross
+2721          ; Extended_Pictographic# E0.7   [1] (✡️)       star of David
+2728          ; Extended_Pictographic# E0.6   [1] (✨)       sparkles
+2733..2734    ; Extended_Pictographic# E0.6   [2] (✳️..✴️)    eight-spoked 
asterisk..eight-pointed star
+2744          ; Extended_Pictographic# E0.6   [1] (❄️)       snowflake
+2747          ; Extended_Pictographic# E0.6   [1] (❇️)       sparkle
+274C          ; Extended_Pictographic# E0.6   [1] (❌)       cross mark
+274E          ; Extended_Pictographic# E0.6   [1] (❎)       cross mark button
+2753..2755    ; Extended_Pictographic# E0.6   [3] (❓..❕)    red question 
mark..white exclamation mark
+2757          ; Extended_Pictographic# E0.6   [1] (❗)       red exclamation 
mark
+2763          ; Extended_Pictographic# E1.0   [1] (❣️)       heart exclamation
+2764          ; Extended_Pictographic# E0.6   [1] (❤️)       red heart
+2765..2767    ; Extended_Pictographic# E0.0   [3] (❥..❧)    ROTATED HEAVY 
BLACK HEART BULLET..ROTATED FLORAL HEART BULLET
+2795..2797    ; Extended_Pictographic# E0.6   [3] (➕..➗)    plus..divide
+27A1          ; Extended_Pictographic# E0.6   [1] (➡️)       right arrow
+27B0          ; Extended_Pictographic# E0.6   [1] (➰)       curly loop
+27BF          ; Extended_Pictographic# E1.0   [1] (➿)       double curly loop
+2934..2935    ; Extended_Pictographic# E0.6   [2] (⤴️..⤵️)    right arrow 
curving up..right arrow curving down
+2B05..2B07    ; Extended_Pictographic# E0.6   [3] (⬅️..⬇️)    left arrow..down 
arrow
+2B1B..2B1C    ; Extended_Pictographic# E0.6   [2] (⬛..⬜)    black large 
square..white large square
+2B50          ; Extended_Pictographic# E0.6   [1] (⭐)       star
+2B55          ; Extended_Pictographic# E0.6   [1] (⭕)       hollow red circle
+3030          ; Extended_Pictographic# E0.6   [1] (〰️)       wavy dash
+303D          ; Extended_Pictographic# E0.6   [1] (〽️)       part alternation 
mark
+3297          ; Extended_Pictographic# E0.6   [1] (㊗️)       Japanese 
“congratulations” button
+3299          ; Extended_Pictographic# E0.6   [1] (㊙️)       Japanese “secret” 
button
+1F000..1F003  ; Extended_Pictographic# E0.0   [4] (🀀..🀃)    MAHJONG TILE EAST 
WIND..MAHJONG TILE NORTH WIND
+1F004         ; Extended_Pictographic# E0.6   [1] (🀄)       mahjong red dragon
+1F005..1F0CE  ; Extended_Pictographic# E0.0 [202] (🀅..🃎)    MAHJONG TILE GREEN 
DRAGON..PLAYING CARD KING OF DIAMONDS
+1F0CF         ; Extended_Pictographic# E0.6   [1] (🃏)       joker
+1F0D0..1F0FF  ; Extended_Pictographic# E0.0  [48] (🃐..🃿)    
<reserved-1F0D0>..<reserved-1F0FF>
+1F10D..1F10F  ; Extended_Pictographic# E0.0   [3] (🄍..🄏)    CIRCLED ZERO WITH 
SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+1F12F         ; Extended_Pictographic# E0.0   [1] (🄯)       COPYLEFT SYMBOL
+1F16C..1F16F  ; Extended_Pictographic# E0.0   [4] (🅬..🅯)    RAISED MR 
SIGN..CIRCLED HUMAN FIGURE
+1F170..1F171  ; Extended_Pictographic# E0.6   [2] (🅰️..🅱️)    A button (blood 
type)..B button (blood type)
+1F17E..1F17F  ; Extended_Pictographic# E0.6   [2] (🅾️..🅿️)    O button (blood 
type)..P button
+1F18E         ; Extended_Pictographic# E0.6   [1] (🆎)       AB button (blood 
type)
+1F191..1F19A  ; Extended_Pictographic# E0.6  [10] (🆑..🆚)    CL button..VS 
button
+1F1AD..1F1E5  ; Extended_Pictographic# E0.0  [57] (🆭..🇥)    MASK WORK 
SYMBOL..<reserved-1F1E5>
+1F201..1F202  ; Extended_Pictographic# E0.6   [2] (🈁..🈂️)    Japanese “here” 
button..Japanese “service charge” button
+1F203..1F20F  ; Extended_Pictographic# E0.0  [13] (🈃..🈏)    
<reserved-1F203>..<reserved-1F20F>
+1F21A         ; Extended_Pictographic# E0.6   [1] (🈚)       Japanese “free of 
charge” button
+1F22F         ; Extended_Pictographic# E0.6   [1] (🈯)       Japanese 
“reserved” button
+1F232..1F23A  ; Extended_Pictographic# E0.6   [9] (🈲..🈺)    Japanese 
“prohibited” button..Japanese “open for business” button
+1F23C..1F23F  ; Extended_Pictographic# E0.0   [4] (🈼..🈿)    
<reserved-1F23C>..<reserved-1F23F>
+1F249..1F24F  ; Extended_Pictographic# E0.0   [7] (🉉..🉏)    
<reserved-1F249>..<reserved-1F24F>
+1F250..1F251  ; Extended_Pictographic# E0.6   [2] (🉐..🉑)    Japanese “bargain” 
button..Japanese “acceptable” button
+1F252..1F2FF  ; Extended_Pictographic# E0.0 [174] (🉒..🋿)    
<reserved-1F252>..<reserved-1F2FF>
+1F300..1F30C  ; Extended_Pictographic# E0.6  [13] (🌀..🌌)    cyclone..milky way
+1F30D..1F30E  ; Extended_Pictographic# E0.7   [2] (🌍..🌎)    globe showing 
Europe-Africa..globe showing Americas
+1F30F         ; Extended_Pictographic# E0.6   [1] (🌏)       globe showing 
Asia-Australia
+1F310         ; Extended_Pictographic# E1.0   [1] (🌐)       globe with 
meridians
+1F311         ; Extended_Pictographic# E0.6   [1] (🌑)       new moon
+1F312         ; Extended_Pictographic# E1.0   [1] (🌒)       waxing crescent 
moon
+1F313..1F315  ; Extended_Pictographic# E0.6   [3] (🌓..🌕)    first quarter 
moon..full moon
+1F316..1F318  ; Extended_Pictographic# E1.0   [3] (🌖..🌘)    waning gibbous 
moon..waning crescent moon
+1F319         ; Extended_Pictographic# E0.6   [1] (🌙)       crescent moon
+1F31A         ; Extended_Pictographic# E1.0   [1] (🌚)       new moon face
+1F31B         ; Extended_Pictographic# E0.6   [1] (🌛)       first quarter moon 
face
+1F31C         ; Extended_Pictographic# E0.7   [1] (🌜)       last quarter moon 
face
+1F31D..1F31E  ; Extended_Pictographic# E1.0   [2] (🌝..🌞)    full moon 
face..sun with face
+1F31F..1F320  ; Extended_Pictographic# E0.6   [2] (🌟..🌠)    glowing 
star..shooting star
+1F321         ; Extended_Pictographic# E0.7   [1] (🌡️)       thermometer
+1F322..1F323  ; Extended_Pictographic# E0.0   [2] (🌢..🌣)    BLACK 
DROPLET..WHITE SUN
+1F324..1F32C  ; Extended_Pictographic# E0.7   [9] (🌤️..🌬️)    sun behind small 
cloud..wind face
+1F32D..1F32F  ; Extended_Pictographic# E1.0   [3] (🌭..🌯)    hot dog..burrito
+1F330..1F331  ; Extended_Pictographic# E0.6   [2] (🌰..🌱)    chestnut..seedling
+1F332..1F333  ; Extended_Pictographic# E1.0   [2] (🌲..🌳)    evergreen 
tree..deciduous tree
+1F334..1F335  ; Extended_Pictographic# E0.6   [2] (🌴..🌵)    palm tree..cactus
+1F336         ; Extended_Pictographic# E0.7   [1] (🌶️)       hot pepper
+1F337..1F34A  ; Extended_Pictographic# E0.6  [20] (🌷..🍊)    tulip..tangerine
+1F34B         ; Extended_Pictographic# E1.0   [1] (🍋)       lemon
+1F34C..1F34F  ; Extended_Pictographic# E0.6   [4] (🍌..🍏)    banana..green apple
+1F350         ; Extended_Pictographic# E1.0   [1] (🍐)       pear
+1F351..1F37B  ; Extended_Pictographic# E0.6  [43] (🍑..🍻)    peach..clinking 
beer mugs
+1F37C         ; Extended_Pictographic# E1.0   [1] (🍼)       baby bottle
+1F37D         ; Extended_Pictographic# E0.7   [1] (🍽️)       fork and knife 
with plate
+1F37E..1F37F  ; Extended_Pictographic# E1.0   [2] (🍾..🍿)    bottle with 
popping cork..popcorn
+1F380..1F393  ; Extended_Pictographic# E0.6  [20] (🎀..🎓)    ribbon..graduation 
cap
+1F394..1F395  ; Extended_Pictographic# E0.0   [2] (🎔..🎕)    HEART WITH TIP ON 
THE LEFT..BOUQUET OF FLOWERS
+1F396..1F397  ; Extended_Pictographic# E0.7   [2] (🎖️..🎗️)    military 
medal..reminder ribbon
+1F398         ; Extended_Pictographic# E0.0   [1] (🎘)       MUSICAL KEYBOARD 
WITH JACKS
+1F399..1F39B  ; Extended_Pictographic# E0.7   [3] (🎙️..🎛️)    studio 
microphone..control knobs
+1F39C..1F39D  ; Extended_Pictographic# E0.0   [2] (🎜..🎝)    BEAMED ASCENDING 
MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES
+1F39E..1F39F  ; Extended_Pictographic# E0.7   [2] (🎞️..🎟️)    film 
frames..admission tickets
+1F3A0..1F3C4  ; Extended_Pictographic# E0.6  [37] (🎠..🏄)    carousel 
horse..person surfing
+1F3C5         ; Extended_Pictographic# E1.0   [1] (🏅)       sports medal
+1F3C6         ; Extended_Pictographic# E0.6   [1] (🏆)       trophy
+1F3C7         ; Extended_Pictographic# E1.0   [1] (🏇)       horse racing
+1F3C8         ; Extended_Pictographic# E0.6   [1] (🏈)       american football
+1F3C9         ; Extended_Pictographic# E1.0   [1] (🏉)       rugby football
+1F3CA         ; Extended_Pictographic# E0.6   [1] (🏊)       person swimming
+1F3CB..1F3CE  ; Extended_Pictographic# E0.7   [4] (🏋️..🏎️)    person lifting 
weights..racing car
+1F3CF..1F3D3  ; Extended_Pictographic# E1.0   [5] (🏏..🏓)    cricket game..ping 
pong
+1F3D4..1F3DF  ; Extended_Pictographic# E0.7  [12] (🏔️..🏟️)    snow-capped 
mountain..stadium
+1F3E0..1F3E3  ; Extended_Pictographic# E0.6   [4] (🏠..🏣)    house..Japanese 
post office
+1F3E4         ; Extended_Pictographic# E1.0   [1] (🏤)       post office
+1F3E5..1F3F0  ; Extended_Pictographic# E0.6  [12] (🏥..🏰)    hospital..castle
+1F3F1..1F3F2  ; Extended_Pictographic# E0.0   [2] (🏱..🏲)    WHITE 
PENNANT..BLACK PENNANT
+1F3F3         ; Extended_Pictographic# E0.7   [1] (🏳️)       white flag
+1F3F4         ; Extended_Pictographic# E1.0   [1] (🏴)       black flag
+1F3F5         ; Extended_Pictographic# E0.7   [1] (🏵️)       rosette
+1F3F6         ; Extended_Pictographic# E0.0   [1] (🏶)       BLACK ROSETTE
+1F3F7         ; Extended_Pictographic# E0.7   [1] (🏷️)       label
+1F3F8..1F3FA  ; Extended_Pictographic# E1.0   [3] (🏸..🏺)    badminton..amphora
+1F400..1F407  ; Extended_Pictographic# E1.0   [8] (🐀..🐇)    rat..rabbit
+1F408         ; Extended_Pictographic# E0.7   [1] (🐈)       cat
+1F409..1F40B  ; Extended_Pictographic# E1.0   [3] (🐉..🐋)    dragon..whale
+1F40C..1F40E  ; Extended_Pictographic# E0.6   [3] (🐌..🐎)    snail..horse
+1F40F..1F410  ; Extended_Pictographic# E1.0   [2] (🐏..🐐)    ram..goat
+1F411..1F412  ; Extended_Pictographic# E0.6   [2] (🐑..🐒)    ewe..monkey
+1F413         ; Extended_Pictographic# E1.0   [1] (🐓)       rooster
+1F414         ; Extended_Pictographic# E0.6   [1] (🐔)       chicken
+1F415         ; Extended_Pictographic# E0.7   [1] (🐕)       dog
+1F416         ; Extended_Pictographic# E1.0   [1] (🐖)       pig
+1F417..1F429  ; Extended_Pictographic# E0.6  [19] (🐗..🐩)    boar..poodle
+1F42A         ; Extended_Pictographic# E1.0   [1] (🐪)       camel
+1F42B..1F43E  ; Extended_Pictographic# E0.6  [20] (🐫..🐾)    two-hump 
camel..paw prints
+1F43F         ; Extended_Pictographic# E0.7   [1] (🐿️)       chipmunk
+1F440         ; Extended_Pictographic# E0.6   [1] (👀)       eyes
+1F441         ; Extended_Pictographic# E0.7   [1] (👁️)       eye
+1F442..1F464  ; Extended_Pictographic# E0.6  [35] (👂..👤)    ear..bust in 
silhouette
+1F465         ; Extended_Pictographic# E1.0   [1] (👥)       busts in silhouette
+1F466..1F46B  ; Extended_Pictographic# E0.6   [6] (👦..👫)    boy..woman and man 
holding hands
+1F46C..1F46D  ; Extended_Pictographic# E1.0   [2] (👬..👭)    men holding 
hands..women holding hands
+1F46E..1F4AC  ; Extended_Pictographic# E0.6  [63] (👮..💬)    police 
officer..speech balloon
+1F4AD         ; Extended_Pictographic# E1.0   [1] (💭)       thought balloon
+1F4AE..1F4B5  ; Extended_Pictographic# E0.6   [8] (💮..💵)    white 
flower..dollar banknote
+1F4B6..1F4B7  ; Extended_Pictographic# E1.0   [2] (💶..💷)    euro 
banknote..pound banknote
+1F4B8..1F4EB  ; Extended_Pictographic# E0.6  [52] (💸..📫)    money with 
wings..closed mailbox with raised flag
+1F4EC..1F4ED  ; Extended_Pictographic# E0.7   [2] (📬..📭)    open mailbox with 
raised flag..open mailbox with lowered flag
+1F4EE         ; Extended_Pictographic# E0.6   [1] (📮)       postbox
+1F4EF         ; Extended_Pictographic# E1.0   [1] (📯)       postal horn
+1F4F0..1F4F4  ; Extended_Pictographic# E0.6   [5] (📰..📴)    newspaper..mobile 
phone off
+1F4F5         ; Extended_Pictographic# E1.0   [1] (📵)       no mobile phones
+1F4F6..1F4F7  ; Extended_Pictographic# E0.6   [2] (📶..📷)    antenna 
bars..camera
+1F4F8         ; Extended_Pictographic# E1.0   [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Extended_Pictographic# E0.6   [4] (📹..📼)    video 
camera..videocassette
+1F4FD         ; Extended_Pictographic# E0.7   [1] (📽️)       film projector
+1F4FE         ; Extended_Pictographic# E0.0   [1] (📾)       PORTABLE STEREO
+1F4FF..1F502  ; Extended_Pictographic# E1.0   [4] (📿..🔂)    prayer 
beads..repeat single button
+1F503         ; Extended_Pictographic# E0.6   [1] (🔃)       clockwise vertical 
arrows
+1F504..1F507  ; Extended_Pictographic# E1.0   [4] (🔄..🔇)    counterclockwise 
arrows button..muted speaker
+1F508         ; Extended_Pictographic# E0.7   [1] (🔈)       speaker low volume
+1F509         ; Extended_Pictographic# E1.0   [1] (🔉)       speaker medium 
volume
+1F50A..1F514  ; Extended_Pictographic# E0.6  [11] (🔊..🔔)    speaker high 
volume..bell
+1F515         ; Extended_Pictographic# E1.0   [1] (🔕)       bell with slash
+1F516..1F52B  ; Extended_Pictographic# E0.6  [22] (🔖..🔫)    bookmark..water 
pistol
+1F52C..1F52D  ; Extended_Pictographic# E1.0   [2] (🔬..🔭)    
microscope..telescope
+1F52E..1F53D  ; Extended_Pictographic# E0.6  [16] (🔮..🔽)    crystal 
ball..downwards button
+1F546..1F548  ; Extended_Pictographic# E0.0   [3] (🕆..🕈)    WHITE LATIN 
CROSS..CELTIC CROSS
+1F549..1F54A  ; Extended_Pictographic# E0.7   [2] (🕉️..🕊️)    om..dove
+1F54B..1F54E  ; Extended_Pictographic# E1.0   [4] (🕋..🕎)    kaaba..menorah
+1F54F         ; Extended_Pictographic# E0.0   [1] (🕏)       BOWL OF HYGIEIA
+1F550..1F55B  ; Extended_Pictographic# E0.6  [12] (🕐..🕛)    one 
o’clock..twelve o’clock
+1F55C..1F567  ; Extended_Pictographic# E0.7  [12] (🕜..🕧)    
one-thirty..twelve-thirty
+1F568..1F56E  ; Extended_Pictographic# E0.0   [7] (🕨..🕮)    RIGHT SPEAKER..BOOK
+1F56F..1F570  ; Extended_Pictographic# E0.7   [2] (🕯️..🕰️)    
candle..mantelpiece clock
+1F571..1F572  ; Extended_Pictographic# E0.0   [2] (🕱..🕲)    BLACK SKULL AND 
CROSSBONES..NO PIRACY
+1F573..1F579  ; Extended_Pictographic# E0.7   [7] (🕳️..🕹️)    hole..joystick
+1F57A         ; Extended_Pictographic# E3.0   [1] (🕺)       man dancing
+1F57B..1F586  ; Extended_Pictographic# E0.0  [12] (🕻..🖆)    LEFT HAND 
TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE
+1F587         ; Extended_Pictographic# E0.7   [1] (🖇️)       linked paperclips
+1F588..1F589  ; Extended_Pictographic# E0.0   [2] (🖈..🖉)    BLACK 
PUSHPIN..LOWER LEFT PENCIL
+1F58A..1F58D  ; Extended_Pictographic# E0.7   [4] (🖊️..🖍️)    pen..crayon
+1F58E..1F58F  ; Extended_Pictographic# E0.0   [2] (🖎..🖏)    LEFT WRITING 
HAND..TURNED OK HAND SIGN
+1F590         ; Extended_Pictographic# E0.7   [1] (🖐️)       hand with fingers 
splayed
+1F591..1F594  ; Extended_Pictographic# E0.0   [4] (🖑..🖔)    REVERSED RAISED 
HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND
+1F595..1F596  ; Extended_Pictographic# E1.0   [2] (🖕..🖖)    middle 
finger..vulcan salute
+1F597..1F5A3  ; Extended_Pictographic# E0.0  [13] (🖗..🖣)    WHITE DOWN 
POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX
+1F5A4         ; Extended_Pictographic# E3.0   [1] (🖤)       black heart
+1F5A5         ; Extended_Pictographic# E0.7   [1] (🖥️)       desktop computer
+1F5A6..1F5A7  ; Extended_Pictographic# E0.0   [2] (🖦..🖧)    KEYBOARD AND 
MOUSE..THREE NETWORKED COMPUTERS
+1F5A8         ; Extended_Pictographic# E0.7   [1] (🖨️)       printer
+1F5A9..1F5B0  ; Extended_Pictographic# E0.0   [8] (🖩..🖰)    POCKET 
CALCULATOR..TWO BUTTON MOUSE
+1F5B1..1F5B2  ; Extended_Pictographic# E0.7   [2] (🖱️..🖲️)    computer 
mouse..trackball
+1F5B3..1F5BB  ; Extended_Pictographic# E0.0   [9] (🖳..🖻)    OLD PERSONAL 
COMPUTER..DOCUMENT WITH PICTURE
+1F5BC         ; Extended_Pictographic# E0.7   [1] (🖼️)       framed picture
+1F5BD..1F5C1  ; Extended_Pictographic# E0.0   [5] (🖽..🗁)    FRAME WITH 
TILES..OPEN FOLDER
+1F5C2..1F5C4  ; Extended_Pictographic# E0.7   [3] (🗂️..🗄️)    card index 
dividers..file cabinet
+1F5C5..1F5D0  ; Extended_Pictographic# E0.0  [12] (🗅..🗐)    EMPTY NOTE..PAGES
+1F5D1..1F5D3  ; Extended_Pictographic# E0.7   [3] (🗑️..🗓️)    
wastebasket..spiral calendar
+1F5D4..1F5DB  ; Extended_Pictographic# E0.0   [8] (🗔..🗛)    DESKTOP 
WINDOW..DECREASE FONT SIZE SYMBOL
+1F5DC..1F5DE  ; Extended_Pictographic# E0.7   [3] (🗜️..🗞️)    clamp..rolled-up 
newspaper
+1F5DF..1F5E0  ; Extended_Pictographic# E0.0   [2] (🗟..🗠)    PAGE WITH CIRCLED 
TEXT..STOCK CHART
+1F5E1         ; Extended_Pictographic# E0.7   [1] (🗡️)       dagger
+1F5E2         ; Extended_Pictographic# E0.0   [1] (🗢)       LIPS
+1F5E3         ; Extended_Pictographic# E0.7   [1] (🗣️)       speaking head
+1F5E4..1F5E7  ; Extended_Pictographic# E0.0   [4] (🗤..🗧)    THREE RAYS 
ABOVE..THREE RAYS RIGHT
+1F5E8         ; Extended_Pictographic# E2.0   [1] (🗨️)       left speech bubble
+1F5E9..1F5EE  ; Extended_Pictographic# E0.0   [6] (🗩..🗮)    RIGHT SPEECH 
BUBBLE..LEFT ANGER BUBBLE
+1F5EF         ; Extended_Pictographic# E0.7   [1] (🗯️)       right anger bubble
+1F5F0..1F5F2  ; Extended_Pictographic# E0.0   [3] (🗰..🗲)    MOOD 
BUBBLE..LIGHTNING MOOD
+1F5F3         ; Extended_Pictographic# E0.7   [1] (🗳️)       ballot box with 
ballot
+1F5F4..1F5F9  ; Extended_Pictographic# E0.0   [6] (🗴..🗹)    BALLOT SCRIPT 
X..BALLOT BOX WITH BOLD CHECK
+1F5FA         ; Extended_Pictographic# E0.7   [1] (🗺️)       world map
+1F5FB..1F5FF  ; Extended_Pictographic# E0.6   [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Extended_Pictographic# E1.0   [1] (😀)       grinning face
+1F601..1F606  ; Extended_Pictographic# E0.6   [6] (😁..😆)    beaming face with 
smiling eyes..grinning squinting face
+1F607..1F608  ; Extended_Pictographic# E1.0   [2] (😇..😈)    smiling face with 
halo..smiling face with horns
+1F609..1F60D  ; Extended_Pictographic# E0.6   [5] (😉..😍)    winking 
face..smiling face with heart-eyes
+1F60E         ; Extended_Pictographic# E1.0   [1] (😎)       smiling face with 
sunglasses
+1F60F         ; Extended_Pictographic# E0.6   [1] (😏)       smirking face
+1F610         ; Extended_Pictographic# E0.7   [1] (😐)       neutral face
+1F611         ; Extended_Pictographic# E1.0   [1] (😑)       expressionless face
+1F612..1F614  ; Extended_Pictographic# E0.6   [3] (😒..😔)    unamused 
face..pensive face
+1F615         ; Extended_Pictographic# E1.0   [1] (😕)       confused face
+1F616         ; Extended_Pictographic# E0.6   [1] (😖)       confounded face
+1F617         ; Extended_Pictographic# E1.0   [1] (😗)       kissing face
+1F618         ; Extended_Pictographic# E0.6   [1] (😘)       face blowing a kiss
+1F619         ; Extended_Pictographic# E1.0   [1] (😙)       kissing face with 
smiling eyes
+1F61A         ; Extended_Pictographic# E0.6   [1] (😚)       kissing face with 
closed eyes
+1F61B         ; Extended_Pictographic# E1.0   [1] (😛)       face with tongue
+1F61C..1F61E  ; Extended_Pictographic# E0.6   [3] (😜..😞)    winking face with 
tongue..disappointed face
+1F61F         ; Extended_Pictographic# E1.0   [1] (😟)       worried face
+1F620..1F625  ; Extended_Pictographic# E0.6   [6] (😠..😥)    angry face..sad 
but relieved face
+1F626..1F627  ; Extended_Pictographic# E1.0   [2] (😦..😧)    frowning face with 
open mouth..anguished face
+1F628..1F62B  ; Extended_Pictographic# E0.6   [4] (😨..😫)    fearful 
face..tired face
+1F62C         ; Extended_Pictographic# E1.0   [1] (😬)       grimacing face
+1F62D         ; Extended_Pictographic# E0.6   [1] (😭)       loudly crying face
+1F62E..1F62F  ; Extended_Pictographic# E1.0   [2] (😮..😯)    face with open 
mouth..hushed face
+1F630..1F633  ; Extended_Pictographic# E0.6   [4] (😰..😳)    anxious face with 
sweat..flushed face
+1F634         ; Extended_Pictographic# E1.0   [1] (😴)       sleeping face
+1F635         ; Extended_Pictographic# E0.6   [1] (😵)       face with 
crossed-out eyes
+1F636         ; Extended_Pictographic# E1.0   [1] (😶)       face without mouth
+1F637..1F640  ; Extended_Pictographic# E0.6  [10] (😷..🙀)    face with medical 
mask..weary cat
+1F641..1F644  ; Extended_Pictographic# E1.0   [4] (🙁..🙄)    slightly frowning 
face..face with rolling eyes
+1F645..1F64F  ; Extended_Pictographic# E0.6  [11] (🙅..🙏)    person gesturing 
NO..folded hands
+1F680         ; Extended_Pictographic# E0.6   [1] (🚀)       rocket
+1F681..1F682  ; Extended_Pictographic# E1.0   [2] (🚁..🚂)    
helicopter..locomotive
+1F683..1F685  ; Extended_Pictographic# E0.6   [3] (🚃..🚅)    railway 
car..bullet train
+1F686         ; Extended_Pictographic# E1.0   [1] (🚆)       train
+1F687         ; Extended_Pictographic# E0.6   [1] (🚇)       metro
+1F688         ; Extended_Pictographic# E1.0   [1] (🚈)       light rail
+1F689         ; Extended_Pictographic# E0.6   [1] (🚉)       station
+1F68A..1F68B  ; Extended_Pictographic# E1.0   [2] (🚊..🚋)    tram..tram car
+1F68C         ; Extended_Pictographic# E0.6   [1] (🚌)       bus
+1F68D         ; Extended_Pictographic# E0.7   [1] (🚍)       oncoming bus
+1F68E         ; Extended_Pictographic# E1.0   [1] (🚎)       trolleybus
+1F68F         ; Extended_Pictographic# E0.6   [1] (🚏)       bus stop
+1F690         ; Extended_Pictographic# E1.0   [1] (🚐)       minibus
+1F691..1F693  ; Extended_Pictographic# E0.6   [3] (🚑..🚓)    ambulance..police 
car
+1F694         ; Extended_Pictographic# E0.7   [1] (🚔)       oncoming police car
+1F695         ; Extended_Pictographic# E0.6   [1] (🚕)       taxi
+1F696         ; Extended_Pictographic# E1.0   [1] (🚖)       oncoming taxi
+1F697         ; Extended_Pictographic# E0.6   [1] (🚗)       automobile
+1F698         ; Extended_Pictographic# E0.7   [1] (🚘)       oncoming automobile
+1F699..1F69A  ; Extended_Pictographic# E0.6   [2] (🚙..🚚)    sport utility 
vehicle..delivery truck
+1F69B..1F6A1  ; Extended_Pictographic# E1.0   [7] (🚛..🚡)    articulated 
lorry..aerial tramway
+1F6A2         ; Extended_Pictographic# E0.6   [1] (🚢)       ship
+1F6A3         ; Extended_Pictographic# E1.0   [1] (🚣)       person rowing boat
+1F6A4..1F6A5  ; Extended_Pictographic# E0.6   [2] (🚤..🚥)    
speedboat..horizontal traffic light
+1F6A6         ; Extended_Pictographic# E1.0   [1] (🚦)       vertical traffic 
light
+1F6A7..1F6AD  ; Extended_Pictographic# E0.6   [7] (🚧..🚭)    construction..no 
smoking
+1F6AE..1F6B1  ; Extended_Pictographic# E1.0   [4] (🚮..🚱)    litter in bin 
sign..non-potable water
+1F6B2         ; Extended_Pictographic# E0.6   [1] (🚲)       bicycle
+1F6B3..1F6B5  ; Extended_Pictographic# E1.0   [3] (🚳..🚵)    no 
bicycles..person mountain biking
+1F6B6         ; Extended_Pictographic# E0.6   [1] (🚶)       person walking
+1F6B7..1F6B8  ; Extended_Pictographic# E1.0   [2] (🚷..🚸)    no 
pedestrians..children crossing
+1F6B9..1F6BE  ; Extended_Pictographic# E0.6   [6] (🚹..🚾)    men’s room..water 
closet
+1F6BF         ; Extended_Pictographic# E1.0   [1] (🚿)       shower
+1F6C0         ; Extended_Pictographic# E0.6   [1] (🛀)       person taking bath
+1F6C1..1F6C5  ; Extended_Pictographic# E1.0   [5] (🛁..🛅)    bathtub..left 
luggage
+1F6C6..1F6CA  ; Extended_Pictographic# E0.0   [5] (🛆..🛊)    TRIANGLE WITH 
ROUNDED CORNERS..GIRLS SYMBOL
+1F6CB         ; Extended_Pictographic# E0.7   [1] (🛋️)       couch and lamp
+1F6CC         ; Extended_Pictographic# E1.0   [1] (🛌)       person in bed
+1F6CD..1F6CF  ; Extended_Pictographic# E0.7   [3] (🛍️..🛏️)    shopping 
bags..bed
+1F6D0         ; Extended_Pictographic# E1.0   [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Extended_Pictographic# E3.0   [2] (🛑..🛒)    stop 
sign..shopping cart
+1F6D3..1F6D4  ; Extended_Pictographic# E0.0   [2] (🛓..🛔)    STUPA..PAGODA
+1F6D5         ; Extended_Pictographic# E12.0  [1] (🛕)       hindu temple
+1F6D6..1F6D7  ; Extended_Pictographic# E13.0  [2] (🛖..🛗)    hut..elevator
+1F6D8..1F6DC  ; Extended_Pictographic# E0.0   [5] (🛘..🛜)    
<reserved-1F6D8>..<reserved-1F6DC>
+1F6DD..1F6DF  ; Extended_Pictographic# E14.0  [3] (🛝..🛟)    playground 
slide..ring buoy
+1F6E0..1F6E5  ; Extended_Pictographic# E0.7   [6] (🛠️..🛥️)    hammer and 
wrench..motor boat
+1F6E6..1F6E8  ; Extended_Pictographic# E0.0   [3] (🛦..🛨)    UP-POINTING 
MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE
+1F6E9         ; Extended_Pictographic# E0.7   [1] (🛩️)       small airplane
+1F6EA         ; Extended_Pictographic# E0.0   [1] (🛪)       NORTHEAST-POINTING 
AIRPLANE
+1F6EB..1F6EC  ; Extended_Pictographic# E1.0   [2] (🛫..🛬)    airplane 
departure..airplane arrival
+1F6ED..1F6EF  ; Extended_Pictographic# E0.0   [3] (🛭..🛯)    
<reserved-1F6ED>..<reserved-1F6EF>
+1F6F0         ; Extended_Pictographic# E0.7   [1] (🛰️)       satellite
+1F6F1..1F6F2  ; Extended_Pictographic# E0.0   [2] (🛱..🛲)    ONCOMING FIRE 
ENGINE..DIESEL LOCOMOTIVE
+1F6F3         ; Extended_Pictographic# E0.7   [1] (🛳️)       passenger ship
+1F6F4..1F6F6  ; Extended_Pictographic# E3.0   [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Extended_Pictographic# E5.0   [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Extended_Pictographic# E11.0  [1] (🛹)       skateboard
+1F6FA         ; Extended_Pictographic# E12.0  [1] (🛺)       auto rickshaw
+1F6FB..1F6FC  ; Extended_Pictographic# E13.0  [2] (🛻..🛼)    pickup 
truck..roller skate
+1F6FD..1F6FF  ; Extended_Pictographic# E0.0   [3] (🛽..🛿)    
<reserved-1F6FD>..<reserved-1F6FF>
+1F774..1F77F  ; Extended_Pictographic# E0.0  [12] (🝴..🝿)    
<reserved-1F774>..<reserved-1F77F>
+1F7D5..1F7DF  ; Extended_Pictographic# E0.0  [11] (🟕..🟟)    CIRCLED 
TRIANGLE..<reserved-1F7DF>
+1F7E0..1F7EB  ; Extended_Pictographic# E12.0 [12] (🟠..🟫)    orange 
circle..brown square
+1F7EC..1F7EF  ; Extended_Pictographic# E0.0   [4] (🟬..🟯)    
<reserved-1F7EC>..<reserved-1F7EF>
+1F7F0         ; Extended_Pictographic# E14.0  [1] (🟰)       heavy equals sign
+1F7F1..1F7FF  ; Extended_Pictographic# E0.0  [15] (🟱..🟿)    
<reserved-1F7F1>..<reserved-1F7FF>
+1F80C..1F80F  ; Extended_Pictographic# E0.0   [4] (🠌..🠏)    
<reserved-1F80C>..<reserved-1F80F>
+1F848..1F84F  ; Extended_Pictographic# E0.0   [8] (🡈..🡏)    
<reserved-1F848>..<reserved-1F84F>
+1F85A..1F85F  ; Extended_Pictographic# E0.0   [6] (🡚..🡟)    
<reserved-1F85A>..<reserved-1F85F>
+1F888..1F88F  ; Extended_Pictographic# E0.0   [8] (🢈..🢏)    
<reserved-1F888>..<reserved-1F88F>
+1F8AE..1F8FF  ; Extended_Pictographic# E0.0  [82] (🢮..🣿)    
<reserved-1F8AE>..<reserved-1F8FF>
+1F90C         ; Extended_Pictographic# E13.0  [1] (🤌)       pinched fingers
+1F90D..1F90F  ; Extended_Pictographic# E12.0  [3] (🤍..🤏)    white 
heart..pinching hand
+1F910..1F918  ; Extended_Pictographic# E1.0   [9] (🤐..🤘)    zipper-mouth 
face..sign of the horns
+1F919..1F91E  ; Extended_Pictographic# E3.0   [6] (🤙..🤞)    call me 
hand..crossed fingers
+1F91F         ; Extended_Pictographic# E5.0   [1] (🤟)       love-you gesture
+1F920..1F927  ; Extended_Pictographic# E3.0   [8] (🤠..🤧)    cowboy hat 
face..sneezing face
+1F928..1F92F  ; Extended_Pictographic# E5.0   [8] (🤨..🤯)    face with raised 
eyebrow..exploding head
+1F930         ; Extended_Pictographic# E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Extended_Pictographic# E5.0   [2] (🤱..🤲)    
breast-feeding..palms up together
+1F933..1F93A  ; Extended_Pictographic# E3.0   [8] (🤳..🤺)    selfie..person 
fencing
+1F93C..1F93E  ; Extended_Pictographic# E3.0   [3] (🤼..🤾)    people 
wrestling..person playing handball
+1F93F         ; Extended_Pictographic# E12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Extended_Pictographic# E3.0   [6] (🥀..🥅)    wilted 
flower..goal net
+1F947..1F94B  ; Extended_Pictographic# E3.0   [5] (🥇..🥋)    1st place 
medal..martial arts uniform
+1F94C         ; Extended_Pictographic# E5.0   [1] (🥌)       curling stone
+1F94D..1F94F  ; Extended_Pictographic# E11.0  [3] (🥍..🥏)    lacrosse..flying 
disc
+1F950..1F95E  ; Extended_Pictographic# E3.0  [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Extended_Pictographic# E5.0  [13] (🥟..🥫)    dumpling..canned 
food
+1F96C..1F970  ; Extended_Pictographic# E11.0  [5] (🥬..🥰)    leafy 
green..smiling face with hearts
+1F971         ; Extended_Pictographic# E12.0  [1] (🥱)       yawning face
+1F972         ; Extended_Pictographic# E13.0  [1] (🥲)       smiling face with 
tear
+1F973..1F976  ; Extended_Pictographic# E11.0  [4] (🥳..🥶)    partying 
face..cold face
+1F977..1F978  ; Extended_Pictographic# E13.0  [2] (🥷..🥸)    ninja..disguised 
face
+1F979         ; Extended_Pictographic# E14.0  [1] (🥹)       face holding back 
tears
+1F97A         ; Extended_Pictographic# E11.0  [1] (🥺)       pleading face
+1F97B         ; Extended_Pictographic# E12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Extended_Pictographic# E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Extended_Pictographic# E1.0   [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Extended_Pictographic# E3.0  [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Extended_Pictographic# E5.0   [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Extended_Pictographic# E11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A3..1F9A4  ; Extended_Pictographic# E13.0  [2] (🦣..🦤)    mammoth..dodo
+1F9A5..1F9AA  ; Extended_Pictographic# E12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AB..1F9AD  ; Extended_Pictographic# E13.0  [3] (🦫..🦭)    beaver..seal
+1F9AE..1F9AF  ; Extended_Pictographic# E12.0  [2] (🦮..🦯)    guide dog..white 
cane
+1F9B0..1F9B9  ; Extended_Pictographic# E11.0 [10] (🦰..🦹)    red 
hair..supervillain
+1F9BA..1F9BF  ; Extended_Pictographic# E12.0  [6] (🦺..🦿)    safety 
vest..mechanical leg
+1F9C0         ; Extended_Pictographic# E1.0   [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Extended_Pictographic# E11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Extended_Pictographic# E12.0  [8] (🧃..🧊)    beverage box..ice
+1F9CB         ; Extended_Pictographic# E13.0  [1] (🧋)       bubble tea
+1F9CC         ; Extended_Pictographic# E14.0  [1] (🧌)       troll
+1F9CD..1F9CF  ; Extended_Pictographic# E12.0  [3] (🧍..🧏)    person 
standing..deaf person
+1F9D0..1F9E6  ; Extended_Pictographic# E5.0  [23] (🧐..🧦)    face with 
monocle..socks
+1F9E7..1F9FF  ; Extended_Pictographic# E11.0 [25] (🧧..🧿)    red 
envelope..nazar amulet
+1FA00..1FA6F  ; Extended_Pictographic# E0.0 [112] (🨀..🩯)    NEUTRAL CHESS 
KING..<reserved-1FA6F>
+1FA70..1FA73  ; Extended_Pictographic# E12.0  [4] (🩰..🩳)    ballet 
shoes..shorts
+1FA74         ; Extended_Pictographic# E13.0  [1] (🩴)       thong sandal
+1FA75..1FA77  ; Extended_Pictographic# E0.0   [3] (🩵..🩷)    
<reserved-1FA75>..<reserved-1FA77>
+1FA78..1FA7A  ; Extended_Pictographic# E12.0  [3] (🩸..🩺)    drop of 
blood..stethoscope
+1FA7B..1FA7C  ; Extended_Pictographic# E14.0  [2] (🩻..🩼)    x-ray..crutch
+1FA7D..1FA7F  ; Extended_Pictographic# E0.0   [3] (🩽..🩿)    
<reserved-1FA7D>..<reserved-1FA7F>
+1FA80..1FA82  ; Extended_Pictographic# E12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA83..1FA86  ; Extended_Pictographic# E13.0  [4] (🪃..🪆)    boomerang..nesting 
dolls
+1FA87..1FA8F  ; Extended_Pictographic# E0.0   [9] (🪇..🪏)    
<reserved-1FA87>..<reserved-1FA8F>
+1FA90..1FA95  ; Extended_Pictographic# E12.0  [6] (🪐..🪕)    ringed 
planet..banjo
+1FA96..1FAA8  ; Extended_Pictographic# E13.0 [19] (🪖..🪨)    military 
helmet..rock
+1FAA9..1FAAC  ; Extended_Pictographic# E14.0  [4] (🪩..🪬)    mirror ball..hamsa
+1FAAD..1FAAF  ; Extended_Pictographic# E0.0   [3] (🪭..🪯)    
<reserved-1FAAD>..<reserved-1FAAF>
+1FAB0..1FAB6  ; Extended_Pictographic# E13.0  [7] (🪰..🪶)    fly..feather
+1FAB7..1FABA  ; Extended_Pictographic# E14.0  [4] (🪷..🪺)    lotus..nest with 
eggs
+1FABB..1FABF  ; Extended_Pictographic# E0.0   [5] (🪻..🪿)    
<reserved-1FABB>..<reserved-1FABF>
+1FAC0..1FAC2  ; Extended_Pictographic# E13.0  [3] (🫀..🫂)    anatomical 
heart..people hugging
+1FAC3..1FAC5  ; Extended_Pictographic# E14.0  [3] (🫃..🫅)    pregnant 
man..person with crown
+1FAC6..1FACF  ; Extended_Pictographic# E0.0  [10] (🫆..🫏)    
<reserved-1FAC6>..<reserved-1FACF>
+1FAD0..1FAD6  ; Extended_Pictographic# E13.0  [7] (🫐..🫖)    blueberries..teapot
+1FAD7..1FAD9  ; Extended_Pictographic# E14.0  [3] (🫗..🫙)    pouring liquid..jar
+1FADA..1FADF  ; Extended_Pictographic# E0.0   [6] (🫚..🫟)    
<reserved-1FADA>..<reserved-1FADF>
+1FAE0..1FAE7  ; Extended_Pictographic# E14.0  [8] (🫠..🫧)    melting 
face..bubbles
+1FAE8..1FAEF  ; Extended_Pictographic# E0.0   [8] (🫨..🫯)    
<reserved-1FAE8>..<reserved-1FAEF>
+1FAF0..1FAF6  ; Extended_Pictographic# E14.0  [7] (🫰..🫶)    hand with index 
finger and thumb crossed..heart hands
+1FAF7..1FAFF  ; Extended_Pictographic# E0.0   [9] (🫷..🫿)    
<reserved-1FAF7>..<reserved-1FAFF>
+1FC00..1FFFD  ; Extended_Pictographic# E0.0[1022] (🰀..🿽)    
<reserved-1FC00>..<reserved-1FFFD>
+
+# Total elements: 3537
+
+#EOF
diff --git a/configure.ac b/configure.ac
index 418a62fd5e..1146b581cd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3822,40 +3822,44 @@ if test "${with_native_compilation}" != "no"; then
        AC_MSG_ERROR(['--with-native-compilation' requires zlib])
     fi
 
-    # Ensure libgccjit installed by Homebrew can be found.
-    if test -n "$BREW"; then
-      if test -n "`$BREW --prefix --installed libgccjit 2>/dev/null`"; then
-        BREW_LIBGCCJIT_INCLUDE=$(dirname $($BREW ls -v libgccjit | \
-                                              grep libgccjit.h))
-        BREW_LIBGCCJIT_LIB=$(dirname $($BREW ls -v libgccjit| \
-                                          grep libgccjit.so\$))
-        CFLAGS="$CFLAGS -I${BREW_LIBGCCJIT_INCLUDE}"
-        LDFLAGS="$LDFLAGS -L${BREW_LIBGCCJIT_LIB}"
+    SAVE_CFLAGS=$CFLAGS
+    SAVE_LIBS=$LIBS
+
+    if test "${opsys}" = "darwin"; then
+      # Ensure libgccjit installed by Homebrew or macports can be found.
+      if test -n "$BREW"; then
+        if test -n "`$BREW --prefix --installed libgccjit 2>/dev/null`"; then
+          MAC_CFLAGS="-I$(dirname $($BREW ls -v libgccjit | \
+                                                grep libgccjit.h))"
+          MAC_LIBS="-L$(dirname $($BREW ls -v libgccjit| \
+                                            grep libgccjit.so\$))"
+        fi
       fi
-    fi
 
-    # Ensure libgccjit installed by MacPorts can be found.
-    if test -n "$HAVE_MACPORTS"; then
-      # Determine which gcc version has been installed (gcc11, for
-      # instance).
-      PORT_PACKAGE=$(port installed active | grep '^ *gcc@<:@0-9@:>@* ' | \
-                          awk '{ print $1; }')
-      MACPORTS_LIBGCCJIT_INCLUDE=$(dirname $(port contents $PORT_PACKAGE | \
-                                           grep libgccjit.h))
-      MACPORTS_LIBGCCJIT_LIB=$(dirname $(port contents $PORT_PACKAGE | \
-                                              grep libgccjit.dylib))
-      CFLAGS="$CFLAGS -I${MACPORTS_LIBGCCJIT_INCLUDE}"
-      LDFLAGS="$LDFLAGS -L${MACPORTS_LIBGCCJIT_LIB}"
+      if test -n "$HAVE_MACPORTS"; then
+        # Determine which gcc version has been installed (gcc11, for
+        # instance).
+        PORT_PACKAGE=$(port installed active | grep '^ *gcc@<:@0-9@:>@* ' | \
+                            awk '{ print $1; }')
+        if test -n "$PORT_PACKAGE"; then
+          MAC_CFLAGS="-I$(dirname $(port contents $PORT_PACKAGE | \
+                                           grep libgccjit.h))"
+          MAC_LIBS="-L$(dirname $(port contents $PORT_PACKAGE | \
+                                              grep libgccjit.dylib))"
+        fi
+      fi
+
+      if test -n "$MAC_CFLAGS" && test -n "$MAC_LIBS"; then
+        CFLAGS="$CFLAGS ${MAC_CFLAGS}"
+        LIBS="$LIBS ${MAC_LIBS}"
+      fi
     fi
 
     # Check if libgccjit is available.
     AC_CHECK_LIB(gccjit, gcc_jit_context_acquire, [], [libgccjit_not_found])
     AC_CHECK_HEADERS(libgccjit.h, [], [libgccjit_dev_not_found])
-    emacs_save_LIBS=$LIBS
-    LIBS="-lgccjit"
     # Check if libgccjit really works.
     AC_RUN_IFELSE([libgccjit_smoke_test], [], [libgccjit_broken])
-    LIBS=$emacs_save_LIBS
     HAVE_NATIVE_COMP=yes
     case "${opsys}" in
       # mingw32 loads the library dynamically.
@@ -3863,17 +3867,17 @@ if test "${with_native_compilation}" != "no"; then
       # OpenBSD doesn't have libdl, all the functions are in libc
       netbsd|openbsd)
         LIBGCCJIT_LIBS="-lgccjit" ;;
+      darwin)
+        LIBGCCJIT_CFLAGS="${MAC_CFLAGS}"
+        LIBGCCJIT_LIBS="${MAC_LIBS} -lgccjit -ldl";;
       *)
         LIBGCCJIT_LIBS="-lgccjit -ldl" ;;
     esac
     NEED_DYNLIB=yes
     AC_DEFINE(HAVE_NATIVE_COMP, 1, [Define to 1 if native compiler is 
available.])
 
-    # Ensure libgccjit installed by MacPorts can be found.
-    if test -n "$HAVE_MACPORTS"; then
-      LIBGCCJIT_CFLAGS="$LIBGCCJIT_CFLAGS  -I${MACPORTS_LIBGCCJIT_INCLUDE}"
-      LIBGCCJIT_LIBS="-L${MACPORTS_LIBGCCJIT_LIB} $LIBGCCJIT_LIBS"
-    fi
+    CFLAGS=$SAVE_CFLAGS
+    LIBS=$SAVE_LIBS
 fi
 AC_DEFINE_UNQUOTED(NATIVE_ELISP_SUFFIX, ".eln",
   [System extension for native compiled elisp])
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index b7f0bda785..d5177faea9 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -266,6 +266,11 @@ disables auto-saving except in buffers for which 
auto-saving is
 explicitly requested, and when saving files it omits the @code{fsync}
 system call unless otherwise requested.
 
+@vindex backtrace-on-error-noninteractive
+Errors that occur when running a @samp{--batch} Emacs will result in
+an Emacs Lisp backtrace being printed.  To disable this behaviour, set
+@code{backtrace-on-error-noninteractive} to @code{nil}.
+
 @item --script @var{file}
 @opindex --script
 @cindex script mode
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index 9220a2078f..d12033f841 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -2807,12 +2807,12 @@ Type @kbd{C-q}, followed by the key you want to bind, 
to insert @var{char}.
 @cindex early init file
 
   Most customizations for Emacs should be put in the normal init file.
-@xref{Init File}.  However, it is sometimes desirable
-to have customizations that take effect during Emacs startup earlier than the
+@xref{Init File}.  However, it is sometimes necessary
+to have customizations take effect during Emacs startup earlier than the
 normal init file is processed.  Such customizations can be put in the early
 init file, @file{~/.config/emacs/early-init.el} or 
@file{~/.emacs.d/early-init.el}.  This file is loaded before the
 package system and GUI is initialized, so in it you can customize variables
-that affect frame appearance as well as the package initialization process,
+that affect the package initialization process,
 such as @code{package-enable-at-startup}, @code{package-load-list}, and
 @code{package-user-dir}.  Note that variables like @code{package-archives}
 which only affect the installation of new packages, and not the process of
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index d2011ebf97..2fafb43e9f 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -116,7 +116,7 @@ ways to customize it; it corresponds to GNU Emacs version 
@value{EMACSVER}.
 @c See 'manual-html-mono' and 'manual-html-node' in admin/admin.el.
 @ifset WWW_GNU_ORG
 @html
-The homepage for GNU Emacs is at
+The GNU Emacs website is at
 <a href="/software/emacs/">https://www.gnu.org/software/emacs/</a>.<br>
 To view this manual in other formats, click
 <a href="/software/emacs/manual/emacs.html">here</a>.<br>
diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi
index a32181e73b..06e2642638 100644
--- a/doc/emacs/frames.texi
+++ b/doc/emacs/frames.texi
@@ -1281,19 +1281,23 @@ displayed by moving the mouse pointer to the top of the 
screen.
 @section Tab Bars
 @cindex tab bar mode
 @cindex mode, Tab Bar
-@cindex tabs, tabbar
+@cindex tabs, on the Tab Bar
 
   On graphical displays and on text terminals, Emacs can optionally
 display a @dfn{Tab Bar} at the top of each frame, just below the menu
-bar.  The Tab Bar is a row of @dfn{tabs}---buttons that you can click
-to switch between window configurations on that frame.
+bar (@pxref{Menu Bars}) and above or below the tool bar (@pxref{Tool
+Bars}) depending on the variable @code{tab-bar-position}.
+The Tab Bar is a row of @dfn{tabs}---buttons that you can click to
+switch between window configurations.
 
   Each tab on the Tab Bar represents a named persistent window
-configuration.  Its name is composed from the list of names of buffers
-visible in windows of that window configuration.  Clicking on the tab
-switches to the window configuration recorded by the tab; it is a
-configuration of windows and buffers which was previously used in the
-frame when that tab was the current tab.
+configuration of its frame, i.e., how that frame is partitioned into
+windows and which buffer is displayed in each window.  The tab's name
+is composed from the list of names of buffers shown in windows of that
+window configuration.  Clicking on the tab switches to the window
+configuration recorded by the tab; it is a configuration of windows
+and buffers which was previously used in the frame when that tab was
+the current tab.
 
   If you are using the desktop library to save and restore your
 sessions (@pxref{Saving Emacs Sessions}), the tabs from the Tab Bar are
@@ -1302,28 +1306,39 @@ configurations, and will be available after restoring 
the session.
 
 Note that the Tab Bar is different from the Tab Line (@pxref{Tab Line}).
 Whereas tabs on the Tab Line at the top of each window are used to
-switch between buffers, tabs on the Tab Bar at the top of each frame
-are used to switch between window configurations containing several
-windows with buffers.
+switch between buffers in the window, tabs on the Tab Bar at the top
+of each frame are used to switch between window configurations
+containing several windows showing one or more buffers.
 
 @findex tab-bar-mode
-  To toggle the use of tab bars, type @kbd{M-x tab-bar-mode}.  This
+  To toggle the use of Tab Bars, type @kbd{M-x tab-bar-mode}.  This
 command applies to all frames, including frames yet to be created.  To
 control the use of tab bars at startup, customize the variable
-@code{tab-bar-mode}.
+@code{tab-bar-mode} and save your customization.
+
+@findex toggle-frame-tab-bar
+  To toggle the use of the Tab Bar only on the selected frame, type
+@kbd{M-x toggle-frame-tab-bar}.  This command allows to enable the
+display of the Tab Bar on some frames and disable it on others.
 
 @vindex tab-bar-show
   The variable @code{tab-bar-show} controls whether the Tab Bar mode
 is turned on automatically.  If the value is @code{t}, then
 @code{tab-bar-mode} is enabled when using the commands that create new
 tabs.  The value @code{1} hides the tab bar when it has only one tab,
-and shows it again when more tabs are created.  The value @code{nil}
-always keeps the tab bar hidden; in this case it's still possible to
-switch between named window configurations without the tab bar by
-using @kbd{M-x tab-next}, @kbd{M-x tab-switcher}, and other commands
-that provide completion on tab names.  Also it's possible to create
-and close tabs without the tab bar by using commands @kbd{M-x
-tab-new}, @kbd{M-x tab-close}, etc.
+and shows it again when more tabs are created.  More generally, a
+value that is a non-negative integer causes the Tab Bar to be
+displayed only if the number of tabs is greater than that integer.
+The value @code{nil} always keeps the Tab Bar hidden; in this case
+it's still possible to switch between named window configurations
+without displaying the Tab Bar by using @kbd{M-x tab-next}, @kbd{M-x
+tab-switcher}, and other commands that provide completion on tab
+names.  Also it's possible to create and close tabs without the Tab
+Bar by using commands @kbd{M-x tab-new}, @kbd{M-x tab-close}, etc.
+
+  Note that a numerical value of @code{tab-bar-show} can cause the Tab
+Bar to be displayed on some frames, but not on others, depending on
+the number of tabs defined on each frame.
 
 @kindex C-x t
   The prefix key @kbd{C-x t} is analogous to @kbd{C-x 5}.
@@ -1336,29 +1351,41 @@ buffer to select.  The following commands can be used 
to select a buffer
 in a new tab:
 
 @table @kbd
-@item C-x t 2
 @kindex C-x t 2
 @findex tab-new
+@vindex tab-bar-tab-name-function
+@item C-x t 2
 Add a new tab (@code{tab-new}).  You can control the choice of the
 buffer displayed in a new tab by customizing the variable
-@code{tab-bar-new-tab-choice}.
+@code{tab-bar-new-tab-choice}.  You can control the names given by
+default to new tabs by customizing the variable
+@code{tab-bar-tab-name-function}.
 
+@kindex C-x t b
+@findex switch-to-buffer-other-tab
 @item C-x t b @var{bufname} @key{RET}
 Select buffer @var{bufname} in another tab.  This runs
 @code{switch-to-buffer-other-tab}.
 
+@kindex C-x t f
+@findex find-file-other-tab
 @item C-x t f @var{filename} @key{RET}
-Visit file @var{filename} and select its buffer in another tab.  This
-runs @code{find-file-other-tab}.  @xref{Visiting}.
+Visit the file @var{filename} (@pxref{Visiting}) and select its buffer
+in another tab.  This runs @code{find-file-other-tab}.
 
+@kindex C-x t d
+@findex dired-other-tab
 @item C-x t d @var{directory} @key{RET}
-Select a Dired buffer for directory @var{directory} in another tab.
-This runs @code{dired-other-tab}.  @xref{Dired}.
+Edit the specified @var{directory} (@pxref{Dired}) in another tab.
+This runs @code{dired-other-tab}.
 
+@kindex C-x t t
+@findex other-tab-prefix
 @item C-x t t
-A more general prefix command affects the buffer displayed by the next
-command invoked immediately after this prefix command.  It requests
-the buffer of the next command to be displayed in another tab.
+This is a prefix command (@code{other-tab-prefix}) that affects the
+next command invoked immediately after this prefix command.  It
+requests the buffer displayed by the next command to be shown in
+another tab.
 @end table
 
 @vindex tab-bar-new-tab-choice
@@ -1374,17 +1401,18 @@ By default, a new tab is added on the right side of the 
current tab.
   The following commands can be used to delete tabs:
 
 @table @kbd
-@item C-x t 0
 @kindex C-x t 0
 @findex tab-close
-Close the selected tab (@code{tab-close}).  It has no effect if there
+@vindex tab-bar-close-last-tab-choice
+@item C-x t 0
+Close the selected tab (@code{tab-close}).  This has no effect if there
 is only one tab, unless the variable @code{tab-bar-close-last-tab-choice}
 is customized to a non-default value.
 
-@item C-x t 1
 @kindex C-x t 1
 @findex tab-close-other
-Close all tabs on the selected frame, except the selected one.
+@item C-x t 1
+Close all tabs, except the selected tab, on the selected frame.
 @end table
 
 @vindex tab-bar-close-tab-select
@@ -1398,75 +1426,94 @@ a recently used tab.
   The following commands can be used to switch between tabs:
 
 @table @kbd
-@item C-x t o
-@itemx C-@key{TAB}
 @kindex C-x t o
 @kindex C-TAB
 @findex tab-next
-Switch to the next tab.  If you repeat this command, it cycles through
-all the tabs on the selected frame.  With a positive numeric argument
-@var{n}, it switches to the next @var{n}th tab; with a negative
-argument @minus{}@var{n}, it switches back to the previous @var{n}th
-tab.
+@item C-x t o
+@itemx C-@key{TAB}
+Switch to the next tab (@code{tab-next}).  If you repeat this command,
+it cycles through all the tabs on the selected frame.  With a positive
+numeric argument @var{n}, it switches to the @var{n}th next tab; with
+a negative argument @minus{}@var{n}, it switches back to the @var{n}th
+previous tab.
 
-@item S-C-@key{TAB}
 @kindex S-C-TAB
 @findex tab-previous
-Switch to the previous tab.  With a positive numeric argument @var{n},
-it switches to the previous @var{n}th tab; with a negative argument
-@minus{}@var{n}, it switches back to the next @var{n}th tab.
+@item S-C-@key{TAB}
+Switch to the previous tab (@code{tab-previous}).  With a positive
+numeric argument @var{n}, it switches to the @var{n}th previous tab;
+with a negative argument @minus{}@var{n}, it switches to the
+@var{n}th next tab.
 
+@kindex C-x t @key{RET}
+@findex tab-switch
 @item C-x t @key{RET} @var{tabname} @key{RET}
-Switch to the tab by its name, with completion on all tab names.
-Default values are tab names sorted by recency, so you can use
-@kbd{M-n} (@code{next-history-element}) to get the name of the last
-visited tab, the second last, and so on.
-
-@item @var{modifier}-@var{tabnumber}
+Switch to the tab by its name (@code{tab-switch}), with completion on
+all tab names.  The default value and the ``future history'' of tab
+names is sorted by recency, so you can use @kbd{M-n}
+(@code{next-history-element}) to get the name of the last visited tab,
+the second last, and so on.
+
+@kindex C-1, tab bar
+@kindex C-9, tab bar
+@kindex M-1, tab bar
+@kindex M-9, tab bar
 @findex tab-select
-Switch to the tab by its number.  After customizing the variable
-@code{tab-bar-select-tab-modifiers} to specify a @var{modifier} key, you
-can select a tab by its ordinal number using the specified modifier in
-combination with the tab number to select.  To display the tab number
-alongside the tab name, you can customize another variable
-@code{tab-bar-tab-hints}.  This will help you to decide what key to press
-to select the tab by its number.
-
-@item @var{modifier}-@kbd{0}
+@vindex tab-bar-select-tab-modifiers
+@vindex tab-bar-tab-hints
+@item @var{modifier}-@var{tab-number}
+Switch to the tab by its number @var{tab-number} (@code{tab-select}).
+After customizing the variable @code{tab-bar-select-tab-modifiers} to
+specify one or more @var{modifier} keys, you can select a tab by its
+ordinal number using one of the specified modifiers in combination
+with the tab number to select.  The number 9 can be used to select the
+last tab. You can select any modifiers supported by Emacs,
+@pxref{Modifier Keys}.  To display the tab number alongside the tab
+name, you can customize another variable @code{tab-bar-tab-hints}.
+This will help you decide which numerical key to press to select the
+tab by its number.
+
+@kindex C-0, tab bar
+@kindex M-0, tab bar
 @findex tab-recent
-Switch to the recent tab.  The key combination is the modifier key
-defined by @code{tab-bar-select-tab-modifiers} and the key @kbd{0}.
-With a numeric argument @var{n}, switch to the @var{n}th recent tab.
+@item @var{modifier}-@kbd{0}
+Switch to the recent tab (@code{tab-recent}).  The key combination is
+the modifier key defined by @code{tab-bar-select-tab-modifiers} and
+the key @kbd{0}.  With a numeric argument @var{n}, switch to the
+@var{n}th recent tab.
 @end table
 
   The following commands can be used to operate on tabs:
 
 @table @kbd
-@item C-x t r @var{tabname} @key{RET}
+@kindex C-x t r
 @findex tab-rename
-Rename the current tab to @var{tabname}.  You can control the
-programmatic name given to a tab by default by customizing the
-variable @code{tab-bar-tab-name-function}.
+@item C-x t r @var{tabname} @key{RET}
+Rename the current tab to @var{tabname} (@code{tab-rename}).
 
-@item C-x t m
+@kindex C-x t m
 @findex tab-move
-Move the current tab @var{n} positions to the right with a positive
-numeric argument @var{n}.  With a negative argument @minus{}@var{n},
-move the current tab @var{n} positions to the left.
+@item C-x t m
+Move the current tab one position to the right (@code{tab-move}).
+With a positive numeric argument @var{n}, move it that many positions
+to the right; with a negative argument @minus{}@var{n}, move it
+@var{n} positions to the left.
 @end table
 
 @findex tab-bar-history-mode
   You can enable @code{tab-bar-history-mode} to remember window
-configurations used in every tab, and restore them.
+configurations used in every tab, and later restore them.
 
 @table @kbd
-@item tab-bar-history-back
+@findex tab-bar-history-back
+@item M-x tab-bar-history-back
 Restore a previous window configuration used in the current tab.
 This navigates back in the history of window configurations.
 
-@item tab-bar-history-forward
+@findex tab-bar-history-forward
+@item M-x tab-bar-history-forward
 Cancel restoration of the previous window configuration.
-This navigates forward in the history of window configurations.
+This moves forward in the history of window configurations.
 @end table
 
 @node Dialog Boxes
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 4ec2b2d72a..4ee0f32bd5 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -1735,7 +1735,8 @@ the full file name of the file to visit, you can type 
only the file's
 base name (i.e., omit the leading directories).  In addition, the
 completion candidates considered by the command include only the files
 belonging to the current project, and nothing else.  If there's a file
-name at point, this command offers that file as the default to visit.
+name at point, this command offers that file as the first element of
+the ``future history''.
 
 @findex project-find-regexp
   The command @kbd{C-x p g} (@code{project-find-regexp}) is similar to
diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi
index d419a4e24b..570afd5be2 100644
--- a/doc/emacs/package.texi
+++ b/doc/emacs/package.texi
@@ -129,7 +129,7 @@ entails.
 @item w
 @kindex w @r{(Package Menu)}
 @findex package-browse-url
-Open the home page of the package on the current line in a browser
+Open the package website on the current line in a browser
 (@code{package-browse-url}).  @code{browse-url} is used to open the
 browser.
 
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi
index 37a15b6d5f..ec11b0c00f 100644
--- a/doc/emacs/programs.texi
+++ b/doc/emacs/programs.texi
@@ -275,8 +275,10 @@ a non-@code{nil} value.  There is no need to rescan 
because of small
 changes in the text.
 
 @vindex imenu-auto-rescan-maxout
+@vindex imenu-max-index-time
   @code{imenu-auto-rescan} will be disabled in buffers that are larger
-than @code{imenu-auto-rescan-maxout} in bytes.
+than @code{imenu-auto-rescan-maxout} in bytes, and scanning is
+stopped if it takes more than @code{imenu-max-index-time} seconds.
 
 @vindex imenu-sort-function
   You can customize the way the menus are sorted by setting the
diff --git a/doc/lispintro/emacs-lisp-intro.texi 
b/doc/lispintro/emacs-lisp-intro.texi
index 7933ebe58c..7c7005b348 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -238,7 +238,7 @@ supports it in developing GNU and promoting software 
freedom.''
 
 @ifset WWW_GNU_ORG
 @html
-<p>The homepage for GNU Emacs is at
+<p>The GNU Emacs website is at
 <a href="/software/emacs/">https://www.gnu.org/software/emacs/</a>.<br>
 To view this manual in other formats, click
 <a href="/software/emacs/manual/eintr.html">here</a>.
diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi
index e458d76d5d..6548437817 100644
--- a/doc/lispref/debugging.texi
+++ b/doc/lispref/debugging.texi
@@ -1043,9 +1043,9 @@ functions written in Lisp, it cannot profile Emacs 
primitives.
 @cindex benchmarking
 You can measure the time it takes to evaluate individual Emacs Lisp
 forms using the @file{benchmark} library.  See the function
-@code{benchmark-call} as well as the macros
-@code{benchmark-run}, @code{benchmark-run-compiled} and
-@code{benchmark-progn} in @file{benchmark.el}.  You can also use the
+@code{benchmark-call} as well as the macros @code{benchmark-run},
+@code{benchmark-run-compiled}, @code{benchmark-progn} and
+@code{benchmark-call} in @file{benchmark.el}.  You can also use the
 @code{benchmark} command for timing forms interactively.
 
 @c Not worth putting in the printed manual.
diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi
index 55bcf399d8..e9e306fa0d 100644
--- a/doc/lispref/elisp.texi
+++ b/doc/lispref/elisp.texi
@@ -161,7 +161,7 @@ Cover art by Etienne Suvasa.
 
 @ifset WWW_GNU_ORG
 @html
-<p>The homepage for GNU Emacs is at
+<p>The GNU Emacs website is at
 <a href="/software/emacs/">https://www.gnu.org/software/emacs/</a>.<br>
 For information on using Emacs, refer to the
 <a href="/software/emacs/manual/emacs.html">Emacs Manual</a>.<br>
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index d104570452..2dc808e694 100644
--- a/doc/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -1874,7 +1874,7 @@ Interactively, @var{mode} is read from the minibuffer 
using
 @code{read-file-modes} (see below), which lets the user type in either
 an integer or a string representing the permissions symbolically.
 
-@xref{File Attributes}, for the function @code{file-modes}, which
+@xref{Testing Accessibility}, for the function @code{file-modes}, which
 returns the permissions of a file.
 @end deffn
 
diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi
index 0e250d0f59..d3edd63317 100644
--- a/doc/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -337,18 +337,22 @@ by the vector allocation code while iterating over the 
vector blocks.
   It is quite common to use some storage for a while, then release it
 by (for example) killing a buffer or deleting the last pointer to an
 object.  Emacs provides a @dfn{garbage collector} to reclaim this
-abandoned storage.  The garbage collector operates by finding and
-marking all Lisp objects that are still accessible to Lisp programs.
-To begin with, it assumes all the symbols, their values and associated
-function definitions, and any data presently on the stack, are
-accessible.  Any objects that can be reached indirectly through other
-accessible objects are also accessible.
+abandoned storage.  The garbage collector operates, in essence, by
+finding and marking all Lisp objects that are still accessible to Lisp
+programs.  To begin with, it assumes all the symbols, their values and
+associated function definitions, and any data presently on the stack,
+are accessible.  Any objects that can be reached indirectly through
+other accessible objects are also accessible, but this calculation is
+done ``conservatively'', so it may slightly overestimate how many
+objects that are accessible.
 
   When marking is finished, all objects still unmarked are garbage.  No
 matter what the Lisp program or the user does, it is impossible to refer
 to them, since there is no longer a way to reach them.  Their space
 might as well be reused, since no one will miss them.  The second
-(sweep) phase of the garbage collector arranges to reuse them.
+(sweep) phase of the garbage collector arranges to reuse them.  (But
+since the marking was done ``conservatively'', not all unused objects
+are guaranteed to be garbage-collected by any one sweep.)
 
 @c ??? Maybe add something describing weak hash tables here?
 
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index d54c654562..281e987e7f 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -2209,7 +2209,7 @@ Here is an example:
 
 @smallexample
 @group
-(yes-or-no-p "Do you really want to remove everything? ")
+(yes-or-no-p "Do you really want to remove everything?")
 
 ;; @r{After evaluation of the preceding expression,}
 ;;   @r{the following prompt appears,}
diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi
index 0cc2b7ea1c..6980920a7b 100644
--- a/doc/lispref/nonascii.texi
+++ b/doc/lispref/nonascii.texi
@@ -459,7 +459,7 @@ of character properties.  In particular, Emacs supports the
 @uref{https://www.unicode.org/reports/tr23/, Unicode Character Property
 Model}, and the Emacs character property database is derived from the
 Unicode Character Database (@acronym{UCD}).  See the
-@uref{https://www.unicode.org/versions/Unicode12.1.0/ch04.pdf, Character
+@uref{https://www.unicode.org/versions/Unicode14.0.0/ch04.pdf, Character
 Properties chapter of the Unicode Standard}, for a detailed
 description of Unicode character properties and their meaning.  This
 section assumes you are already familiar with that chapter of the
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index 12ddaf04b6..658f742c41 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -813,7 +813,7 @@ Here is an example of how you could use these hooks:
 @smallexample
 @group
 (add-hook 'suspend-hook
-          (lambda () (or (y-or-n-p "Really suspend? ")
+          (lambda () (or (y-or-n-p "Really suspend?")
                          (error "Suspend canceled"))))
 @end group
 (add-hook 'suspend-resume-hook (lambda () (message "Resumed!")
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index 20816ce8ca..4a48d62f6d 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -953,6 +953,24 @@ contain less elements than @var{n}.  @var{n} must be an 
integer.  If
 @end example
 @end defun
 
+@defun seq-union sequence1 sequence2 &optional function
+@cindex sequences, union of
+@cindex union of sequences
+  This function returns a list of the elements that appear either in
+@var{sequence1} or @var{sequence2}.  The elements of the returned list
+are all unique, in the sense that no two elements there will compare
+equal.  If the optional argument @var{function} is non-@code{nil}, it
+should be a function of two arguments to use to compare elements,
+instead of the default @code{equal}.
+
+@example
+@group
+(seq-union [1 2 3] [3 5])
+@result{} (1 2 3 5)
+@end group
+@end example
+@end defun
+
 @defun seq-intersection sequence1 sequence2 &optional function
 @cindex sequences, intersection of
 @cindex intersection of sequences
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 9e0401fffb..f83ca97163 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -1802,7 +1802,12 @@ read, you should set @code{fill-column} to no more than 
70.  Otherwise
 the line will be too long for people to read comfortably, and this can
 make the text seem clumsy.
 
-The default value for @code{fill-column} is 70.
+The default value for @code{fill-column} is 70.  To disable Auto Fill
+mode in a specific mode, you could say something like:
+
+@lisp
+(add-hook 'foo-mode-hook (lambda () (auto-fill-mode -1))
+@end lisp
 @end defopt
 
 @deffn Command set-left-margin from to margin
diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi
index f0eb1079ca..a72ab88cef 100644
--- a/doc/lispref/tips.texi
+++ b/doc/lispref/tips.texi
@@ -398,7 +398,7 @@ with a period.
 @item
 A question asked in the minibuffer with @code{yes-or-no-p} or
 @code{y-or-n-p} should start with a capital letter and end with
-@samp{? }.
+@samp{?}.
 
 @item
 When you mention a default value in a minibuffer prompt,
@@ -767,7 +767,7 @@ Finally, to create a hyperlink to URLs, write the 
single-quoted URL,
 preceded by @samp{URL}.  For example,
 
 @smallexample
-The home page for the GNU project has more information (see URL
+The GNU project wesite has more information (see URL
 `https://www.gnu.org/').
 @end smallexample
 
@@ -789,10 +789,12 @@ the first use of @samp{\\[@dots{}]}.  The text inside the
 @samp{\\<@dots{}>} should be the name of the variable containing the
 local keymap for the major mode.
 
-It is not practical to use @samp{\\[@dots{}]} very many times, because
-display of the documentation string will become slow.  So use this to
-describe the most important commands in your major mode, and then use
-@samp{\\@{@dots{}@}} to display the rest of the mode's keymap.
+Each use of @samp{\\[@dots{}]} slows the display of the documentation
+string by a tiny amount.  If you use a lot of them, these tiny
+slowdowns will add up, and might become tangible, especially on slow
+systems.  So our recommendation is not to over-use them; e.g., try to
+avoid using more than one reference to the same command in the same
+doc string.
 
 @item
 For consistency, phrase the verb in the first sentence of a function's
@@ -1098,9 +1100,9 @@ The name of this field is unfortunate, since people often 
assume it is
 the place to write arbitrary keywords that describe their package,
 rather than just the relevant Finder keywords.
 
-@item Homepage
-@itemx URL
-These lines state the homepage of the library.
+@item URL
+@itemx Homepage
+These lines state the website of the library.
 
 @item Package-Version
 If @samp{Version} is not suitable for use by the package manager, then
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index 3b0331847d..a1d1919b4b 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -300,6 +300,41 @@ that certain variables are dynamically bound 
(@pxref{Dynamic
 Binding}), but it's impractical to @code{defvar} these variables.
 @code{dlet} will temporarily make the bound variables special, execute
 the forms, and then make the variables non-special again.
+@end defspec
+
+@defspec named-let name bindings &rest body
+This special form is a looping construct inspired from the
+Scheme language.  It is similar to @code{let}: It binds the variables in
+@var{bindings}, and then evaluates @var{body}.  However,
+@code{named-let} also binds @var{name} to a
+local function whose formal arguments are the variables in @var{bindings}
+and whose body is @var{body}.  This allows @var{body} to call itself
+recursively by calling
+@var{name}, where the arguments passed to @var{name} are used as the
+new values of the bound variables in the recursive invocation.
+
+Example of a loop summing a list of numbers:
+
+@lisp
+(named-let sum ((numbers '(1 2 3 4))
+                (running-sum 0))
+  (if numbers
+      (sum (cdr numbers) (+ running-sum (car numbers)))
+    running-sum))
+@result{} 10
+@end lisp
+
+@anchor{Tail recursion}
+Recursive calls to @var{name} that occur in @emph{tail
+positions} in @var{body} are guaranteed to be optimised as @emph{tail
+calls}, which means that they will not consume any additional stack
+space no matter how deeply the recursion runs.  Such recursive calls
+will effectively jump to the top of the loop with new values for the
+variables.
+
+A function call is in the tail position if it's the very last thing
+done so that the value returned by the call is the value of @var{body}
+itself, as is the case in the recursive call to @code{sum} above.
 @end defspec
 
   Here is a complete list of the other facilities that create local
diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi
index a0f316f848..5e9c3d7eef 100644
--- a/doc/misc/ede.texi
+++ b/doc/misc/ede.texi
@@ -1556,7 +1556,7 @@ You can also use TRAMP for use with rcp & scp.
 
 @item :web-site-file @*
 
-A file which contains the home page for this project.
+A file which contains the website for this project.
 This file can be relative to slot @code{web-site-directory}.
 This can be a local file, use ange-ftp, EFS, or TRAMP.
 
diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi
index 6eff88b76e..ba1077d0ac 100644
--- a/doc/misc/efaq-w32.texi
+++ b/doc/misc/efaq-w32.texi
@@ -2278,7 +2278,7 @@ In Emacs, you can browse the manual using Info by typing 
@kbd{C-h r},
 and you can view the FAQ by typing @kbd{C-h C-f}. Other resources include:
 
 @itemize
-@item @uref{https://www.gnu.org/software/emacs/, The Emacs homepage}
+@item @uref{https://www.gnu.org/software/emacs/, The Emacs website}
 @item @uref{https://www.gnu.org/software/emacs/manual/, Other Emacs manuals}
 @item @uref{https://www.emacswiki.org/, Emacs Wiki}
 @end itemize
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index d5d1eb5e65..46f78220fe 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -1425,16 +1425,17 @@ of files from Macintosh, Microsoft, and Unix platforms.
 @cindex XEmacs
 
 XEmacs was a branch version of Emacs that is no longer actively
-developed.  XEmacs last released a new version on January 30, 2009,
-and it lacks many important features that exist in Emacs.  Since its
-development has stopped, we do not expect to see any new releases.
+developed.  Originally known as ``Lucid Emacs'', XEmacs was forked
+from a prerelease version of Emacs 19.  XEmacs last released a new
+version on January 30, 2009, which lacks many important features that
+exist in Emacs.  Since its development has stopped, we do not expect
+to see any new releases.
 
 In the past, it was not uncommon for Emacs packages to include code
 for compatibility with XEmacs.  Nowadays, most built-in and third party
 packages have either stopped supporting XEmacs or were developed
 exclusively for Emacs.
 
-XEmacs was initially derived from a prerelease version of Emacs 19.
 If you want to talk about these two versions and distinguish them,
 please call them ``Emacs'' and ``XEmacs.''  To contrast ``XEmacs''
 with ``GNU Emacs'' would be misleading, since XEmacs too has its
@@ -1565,7 +1566,7 @@ capabilities.
 The command @kbd{M-x list-colors-display} pops up a window which
 exhibits all the colors Emacs knows about on the current display.
 
-Syntax highlighting is on by default.
+Syntax highlighting is also on by default on text-only terminals.
 
 @cindex direct color in terminals
 Emacs 26.1 and later support direct color mode in terminals.  If Emacs
diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi
index 9c838a8341..cfe73439f3 100644
--- a/doc/misc/flymake.texi
+++ b/doc/misc/flymake.texi
@@ -1,8 +1,8 @@
 \input texinfo   @c -*-texinfo; coding: utf-8 -*-
 @comment %**start of header
 @setfilename ../../info/flymake.info
-@set VERSION 1.0
-@set UPDATED June 2018
+@set VERSION 1.2
+@set UPDATED September 2021
 @settitle GNU Flymake @value{VERSION}
 @include docstyle.texi
 @syncodeindex pg cp
@@ -11,8 +11,7 @@
 @comment %**end of header
 
 @copying
-This manual is for GNU Flymake (version @value{VERSION}, @value{UPDATED}),
-which is a universal on-the-fly syntax checker for GNU Emacs.
+This manual is for GNU Flymake (version @value{VERSION}, @value{UPDATED}).
 
 Copyright @copyright{} 2004--2021 Free Software Foundation, Inc.
 
@@ -41,6 +40,7 @@ modify this GNU manual.''
 @page
 @vskip 0pt plus 1filll
 @insertcopying
+
 @end titlepage
 
 @contents
@@ -48,6 +48,25 @@ modify this GNU manual.''
 @ifnottex
 @node Top
 @top GNU Flymake
+@end ifnottex
+
+Flymake is a universal on-the-fly syntax checker for Emacs.  When
+enabled, Flymake contacts one or more source @dfn{backends} to
+collect information about problems in the buffer, called
+@dfn{diagnostics}, and visually annotates them with a special face.
+The mode line displays overall status including totals for different
+types of diagnostics.
+
+To learn about using Flymake, @pxref{Using Flymake}.
+
+Flymake is designed to be easily extended to support new backends via
+an Elisp interface.  @xref{Extending Flymake}.
+
+Historically, Flymake used to accept diagnostics from a single
+backend.  Although obsolete, it is still functional.  To learn how to
+use and customize it, @pxref{The legacy Proc backend}.
+
+@ifnottex
 @insertcopying
 @end ifnottex
 
@@ -64,19 +83,34 @@ modify this GNU manual.''
 @cindex overview of flymake
 @cindex using flymake
 
-Flymake is a universal on-the-fly buffer checker implemented as an
-Emacs minor mode.  To use Flymake, you must first activate
-@code{flymake-mode} by using the command @kbd{flymake-mode}.
+Flymake is only useful if at least one @dfn{backend} is configured to
+provide the buffer-checking service.  This is done via the hook
+@code{flymake-diagnostic-functions}.  @xref{Hooks,Hooks,, emacs, The
+Emacs Editor}.
+
+It's possible that some major modes or a third-party package has
+already setup this hook for you, by adding @dfn{backend functions} to
+@code{flymake-diagnostic-functions}.  If you know Elisp you may also
+write your own Flymake backend functions.  @xref{Backend functions}.
 
-When enabled, Flymake collects information about problems in the
-buffer, called @dfn{diagnostics}, from one or more different sources,
-or @dfn{backends}, and then visually annotates the buffer by
-highlighting problematic buffer regions with a special face.
+@menu
+* Starting Flymake::
+* Finding diagnostics::
+* Mode line status::
+* Troubleshooting::
+* Customizable variables::
+@end menu
 
-It also displays an overall buffer status in the mode line containing
-totals for different types of diagnostics.
+@node Starting Flymake
+@section Starting Flymake
+@cindex starting Flymake
 
-Syntax check is done ``on-the-fly''.  It is started whenever
+To use Flymake, activate the minor-mode @code{flymake-mode}.
+Use the command @kbd{flymake-mode} to toggle it on and off.  The
+mode line should indicate its presence via an indicator (@pxref{Mode
+line status}).
+
+Syntax checks happen ``on-the-fly''.  Each check is started whenever:
 
 @itemize @bullet
 @item
@@ -90,50 +124,56 @@ nil;
 @item
 some changes were made to the buffer more than @code{0.5} seconds ago
 (the delay is configurable in @code{flymake-no-changes-timeout}).
-@end itemize
 
-Syntax check can also be started manually by typing the @kbd{M-x
-flymake-start @key{RET}} command.
+@item
+When the user invokes the command @code{flymake-start}.
+@end itemize
 
 If the check detected errors or warnings, the respective buffer
-regions are highlighted.  You can place point on those regions and use
-@kbd{C-h .}  (@code{display-local-help}) to see what the specific
-problem was.  Alternatively, hovering the mouse on those regions
-should also display a tool-tip with the same information.
+regions are highlighted.  @xref{Finding diagnostics}, for how to
+learn what the problems are.
+
+@node Finding diagnostics
+@section Finding diagnostics
 
+@cindex read diagnostic message
+If Flymake has highlighted the buffer, you may hover the mouse on the
+highlighted regions to learn what the specific problem
+is.  Alternatively, place point on the highlighted regions and use the
+commands @code{eldoc} or @code{display-local-help}.
+
+@cindex next and previous diagnostic
+If the diagnostics are outside the visible region of the buffer,
 @code{flymake-goto-next-error} and @code{flymake-goto-prev-error} are
-commands that allow easy navigation to the next/previous erroneous
-regions, respectively.  It might be a good idea to map them to @kbd{M-n}
-and @kbd{M-p} in @code{flymake-mode}, by adding to your init file:
+let you navigate to the next/previous erroneous regions,
+respectively.  It might be a good idea to map them to @kbd{M-n} and
+@kbd{M-p} in @code{flymake-mode}, by adding to your init file:
 
 @lisp
 (define-key flymake-mode-map (kbd "M-n") 'flymake-goto-next-error)
 (define-key flymake-mode-map (kbd "M-p") 'flymake-goto-prev-error)
 @end lisp
 
-Flymake is a universal syntax checker in the sense that it's easily
-extended to support new backends (@pxref{Extending Flymake}).
-
-Historically, Flymake used to accept diagnostics from a single
-backend, albeit a reasonably flexible one.
-
-This backend isn't (yet) obsolete, and so is still available as a
-fallback and active by default (@pxref{The legacy Proc backend}).  It works by
-selecting a syntax check tool from a preconfigured list (compiler for
-C@t{++} files, @command{perl} for Perl files, etc.), and executing it in the
-background, passing it a temporary file which is a copy of the current
-buffer, and parsing the output for known error/warning message
-patterns.
-
-@menu
-* Syntax check statuses::
-* Backend exceptions::
-* Customizable variables::
-@end menu
-
-@node Syntax check statuses
-@section Syntax check statuses
-@cindex Syntax check statuses
+@cindex listing diagnostics
+Sometimes it is useful to have a detailed overview of the diagnostics
+in your files without having to jump to each one.  The commands
+@code{flymake-show-buffer-diagnostics} and
+@code{flymake-show-project-diagnostics} are designed to handle this
+situation.  When invoked, they bring up a separate buffer containing a
+detailed structured listing of multiple diagnostics in the current
+buffer or for the current project, respectively (@pxref{Projects,,,
+emacs, The Emacs Editor}).
+
+The listings is continuously updated as you edit source code, adding or
+removing lines as you make or correct mistakes.  Each line of this
+listing includes the type of the diagnostic, its line and column in
+the file, as well as the diagnostic message.  You may sort the listing
+by each of these columns.
+
+@node Mode line status
+@section Mode line status
+@cindex flymake mode line
+@cindex syntax check status
 
 When enabled, Flymake displays its status in the mode line, which
 provides a visual summary of diagnostic collection.  It may also hint
@@ -157,7 +197,7 @@ delay and Flymake will resume normal operation soon.
 @item @code{!}
 @tab All the configured Flymake backends have disabled themselves: Flymake
 cannot annotate the buffer and action from the user is needed to
-investigate and remedy the situation (@pxref{Backend exceptions}).
+investigate and remedy the situation (@pxref{Troubleshooting}).
 
 @item @code{?}
 @tab There are no applicable Flymake backends for this buffer, thus Flymake
@@ -166,17 +206,24 @@ and add a new backend (@pxref{Extending Flymake}).
 
 @end multitable
 
-@node Backend exceptions
-@section Backend exceptions
+If you would like to customize the appearance of the mode-line, you
+can use the variables @code{flymake-mode-line-format} and
+@code{flymake-mode-line-counter-format} for that purpose.
+@xref{Customizable variables}.
+
+@node Troubleshooting
+@section Troubleshooting
+@cindex troubleshooting
 @cindex backend exceptions
 
 @cindex disabled backends
 @cindex backends, disabled
-Some backends may take longer than others to respond or complete, and
-some may decide to @emph{disable} themselves if they are not suitable
-for the current buffer or encounter some unavoidable problem.  A
-disabled backend is not tried again for future checks of the current
-buffer.
+As Flymake supports multiple simutaneously active external backends,
+is becomes useful to monitor their status.  For example, some backends
+may take longer than others to respond or complete, and some may
+decide to @emph{disable} themselves if they are not suitable for the
+current buffer or encounter some unavoidable problem.  A disabled
+backend is not tried again for future checks of the current buffer.
 
 @findex flymake-reporting-backends
 @findex flymake-running-backends
@@ -186,18 +233,23 @@ The commands @code{flymake-reporting-backends},
 show the backends currently used and those which are disabled.
 
 @cindex reset disabled backends
-Toggling @code{flymake-mode} off and on again, or invoking
-@code{flymake-start} with a prefix argument is one way to reset the
-disabled backend list, so that they will be tried again in the next check.
+Sometimes, re-starting a backend that disabled itself is useful after
+some external roadblock has been removed (for example after the user
+installed a needed syntax-check program).  Invoking
+@code{flymake-start} with a prefix argument is a way to reset the
+disabled backend list, so that they will be tried again in the next
+check.  Manually toggling @code{flymake-mode} off and on again also
+works.
 
 @cindex logging
 @cindex flymake logging
-Flymake also uses a simple logging facility for indicating important
-points in the control flow.  The logging facility sends logging
-messages to the @file{*Flymake log*} buffer.  The information logged
-can be used for resolving various problems related to Flymake.  For
-convenience, a shortcut to this buffer can be found in Flymake's menu,
-accessible from the top menu bar or just left of the status indicator.
+Flymake uses a simple logging facility for indicating important points
+in the control flow.  The logging facility sends logging messages to
+the @file{*Flymake log*} buffer.  The logged information can be used
+for resolving various problems related to Flymake.  For convenience, a
+shortcut to this buffer can be found in Flymake's menu, accessible
+from the top menu bar or just left of the status indicator.  The
+command @code{flymake-switch-to-log-buffer} is another alternative.
 
 @vindex warning-minimum-log-level
 @vindex warning-minimum-level
@@ -217,7 +269,7 @@ configuration of the Flymake user interface.
 Format to use for the Flymake mode line indicator.
 
 @item flymake-mode-line-counter-format
-Mode-line construct for formatting Flymake diagnostic counters inside
+mode line construct for formatting Flymake diagnostic counters inside
 the Flymake mode line indicator.
 
 @item flymake-no-changes-timeout
@@ -270,10 +322,10 @@ Flymake can primarily be extended in one of two ways:
 @enumerate
 @item
 By changing the look and feel of the annotations produced by the
-different backends.
+different backends.  @xref{Flymake error types}.
 
 @item
-By adding a new buffer-checking backend.
+By adding a new buffer-checking backend.  @xref{Backend functions}.
 @end enumerate
 
 The following sections discuss each approach in detail.
@@ -288,10 +340,12 @@ The following sections discuss each approach in detail.
 @cindex customizing error types
 @cindex error types, customization
 
-To customize the appearance of error types, set properties on the
-symbols associated with each diagnostic type.  The standard diagnostic
-symbols are @code{:error}, @code{:warning} and @code{:note} (though
-the backend may define more, @pxref{Backend functions}).
+To customize the appearance of error types, the user must set
+properties on the symbols associated with each diagnostic type.
+
+The three standard diagnostic keyowrd symbols -- @code{:error},
+@code{:warning} and @code{:note} -- have pre-configured appearances.
+However a backend may define more (@pxref{Backend functions}).
 
 The following properties can be set:
 
@@ -489,7 +543,7 @@ manual}) or other asynchronous mechanisms.
 
 In any case, backend functions are expected to return quickly or
 signal an error, in which case the backend is disabled
-(@pxref{Backend exceptions}).
+(@pxref{Troubleshooting}).
 
 If the function returns, Flymake considers the backend to be
 @dfn{running}.  If it has not done so already, the backend is expected
@@ -540,6 +594,7 @@ reports targeting other parts of the buffer remain valid.
 
 @menu
 * Flymake utility functions::
+* Foreign and list-only diagnostics::
 * An annotated example backend::
 @end menu
 
@@ -551,20 +606,26 @@ reports targeting other parts of the buffer remain valid.
 Before delivering them to Flymake, backends create diagnostic objects
 by calling the function @code{flymake-make-diagnostic}.
 
-@deffn Function flymake-make-diagnostic buffer beg end type text
-Make a Flymake diagnostic for @var{buffer}'s region from @var{beg} to
-@var{end}.  @var{type} is a diagnostic symbol (@pxref{Flymake error
-types}), and @var{text} is a description of the problem detected in
-this region.  Currently, it is unspecified behavior to make
-diagnostics for buffers other than the buffer that the Flymake backend
-is responsible for.
+@deffn Function flymake-make-diagnostic locus beg end type text &optional data
+Make a Flymake diagnostic for the region of text in @var{locus}'s
+delimited by @var{beg} and @var{end}.  @var{type} is a diagnostic
+symbol (@pxref{Flymake error types}), and @var{text} is a description
+of the problem detected in this region.  Most commonly @var{locus} is
+the buffer object designating for the current buffer being
+syntax-checked.  However, it may be a string nameing a file relative
+to the current working directory.  @xref{Foreign and list-only
+diagnostics}, for when this may be useful.  Depending on the type of
+@var{locus}, @var{beg} and @var{end} are both either buffer positions
+or conses (@var{line} . @var{col}) which specify the line and column
+of the diagnostic's start and end positions, respectively.
 @end deffn
 
 @cindex access diagnostic object
 These objects' properties can be accessed with the functions
 @code{flymake-diagnostic-backend}, @code{flymake-diagnostic-buffer},
 @code{flymake-diagnostic-text}, @code{flymake-diagnostic-beg},
-@code{flymake-diagnostic-end} and @code{flymake-diagnostic-type}.
+@code{flymake-diagnostic-end}, @code{flymake-diagnostic-type} and
+@code{flymake-diagnostic-data}.
 
 Additionally, the function @code{flymake-diagnostics} will collect
 such objects in the region you specify.
@@ -595,7 +656,7 @@ elisp, The Emacs Lisp Reference Manual}).
 @cindex add a log message
 For troubleshooting purposes, backends may record arbitrary
 exceptional or erroneous situations into the Flymake log
-buffer (@pxref{Backend exceptions}):
+buffer (@pxref{Troubleshooting}):
 
 @deffn Macro flymake-log level msg &optional args
 Log, at level @var{level}, the message @var{msg} formatted with
@@ -604,6 +665,58 @@ Log, at level @var{level}, the message @var{msg} formatted 
with
 used to display the warning in Flymake's log buffer.
 @end deffn
 
+@node Foreign and list-only diagnostics
+@subsection Foreign and list-only diagnostics
+@cindex create diagnostic object for other buffer
+
+It is possible for a given backend's implementation to use
+@code{flymake-make-diagnostic} to create diagnostics for buffers or
+files other than the ``source'' buffer where Flymake was enabled.  For
+instance, this is useful when a given backend has access to
+information about the health of neighboring files that are not yet
+visited or whose diagnostics depend on the current buffer's state.
+There are two alternative ways to go about doing this:
+
+@enumerate
+
+@item
+@cindex foreign diagnostics
+@cindex domestic diagnostics
+If the information about neighboring diagnostics is obtained
+regularly, like when each syntax-checking iteration of a @code{.c}
+file also reports a number of associated problems in an neighboring
+@code{.h} file, it is better to create so-called ``foreign''
+diagnostics.
+
+This is done by passing a file name to @code{flymake-make-diagnostic}
+(@pxref{Flymake utility functions}).  Then, the resulting object is
+simply reported along with the other ``domestic'' diagnostics for the
+source buffer (@pxref{Backend functions}).  When the neighboring file
+is visited as a buffer and Flymake is active there, a number of
+supplemental annotations will appear and automatically update whenever
+as the ``source'' buffer is syntax-checked.
+
+@item
+@cindex list-only diagnostics
+@vindex flymake-list-only-diagnostics
+If information about neighboring diagnostics is obtained infrequently,
+like when running a time-consuming and sporadic check of a large
+project, it is easier for the backend to modify the global variable
+@code{flymake-list-only-diagnostics}.
+
+Flymake will look up this variable when asked to compile project-wide
+lists of diagnostics.  The backend should add one or more alist
+entries that look like (@var{file-name} . @var{diags}).
+@var{file-name} is the absolute name of the neighboring file presumed
+not to be visited in Emacs already, as that would mean that that
+buffer contains more up-to-date information on its diagnostics.
+@var{diags} is a list of diagnostic objects.  When the neighboring
+file @var{file-name} is visited as a buffer and Flymake is activated
+there, the ``list-only'' diagnostics will @emph{not} produce
+annotations for @var{diags}, as Flymake assumes that the Flymake
+activation in the new buffer will take care of that.
+@end enumerate
+
 @node An annotated example backend
 @subsection An annotated example backend
 @cindex example of backend
@@ -1038,7 +1151,7 @@ correct @file{file.h}.
 First matching master file found stops the search.  The master file is then
 patched and saved to disk.  In case no master file is found, syntax check is
 aborted, and corresponding status (@samp{!}) is reported in the mode line.
-@xref{Syntax check statuses}.
+@xref{Mode line status}.
 
 @node Getting the include directories
 @section Getting the include directories
@@ -1064,7 +1177,7 @@ of every syntax check attempt.
 @section Locating the buildfile
 @cindex locating the buildfile
 @cindex buildfile, locating
-@cindex Makefile, locating
+@cindex makefile, locating
 
 The Proc backend can be configured to use different tools for
 performing syntax checks.  For example, it can use direct compiler
diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi
index 28bee11d2b..36c402ab35 100644
--- a/doc/misc/gnus-faq.texi
+++ b/doc/misc/gnus-faq.texi
@@ -1443,7 +1443,7 @@ details.
 
 However, what you really want is the Insidious Big Brother
 Database bbdb. Get it from
-@uref{http://bbdb.sourceforge.net/, bbdb's homepage}.
+@uref{http://bbdb.sourceforge.net/, bbdb's website}.
 Now place the following in @file{~/.gnus.el}, to activate bbdb for Gnus:
 
 @example
@@ -1559,7 +1559,7 @@ if you already use Gnus 5.10, if you still use 5.8.8 or
       "Request confirmation when replying to news."
       (interactive)
       (when (or (not (gnus-news-group-p gnus-newsgroup-name))
-                (y-or-n-p "Really reply by mail to article author? "))
+                (y-or-n-p "Really reply by mail to article author?"))
         ad-do-it))))
 @end example
 @noindent
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 4559ae8e31..5eeffbdeca 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -21898,7 +21898,7 @@ bound to mairix searches and are automatically updated.
 Mairix is a tool for indexing and searching words in locally stored
 mail.  It was written by Richard Curnow and is licensed under the
 GPL@.  Mairix comes with most popular GNU/Linux distributions, but it also
-runs under Windows (with cygwin), macOS and Solaris.  The homepage can
+runs under Windows (with cygwin), macOS and Solaris.  The website can
 be found at
 @uref{http://www.rpcurnow.force9.co.uk/mairix/index.html}
 
diff --git a/doc/misc/mairix-el.texi b/doc/misc/mairix-el.texi
index a571c74487..d0ec552145 100644
--- a/doc/misc/mairix-el.texi
+++ b/doc/misc/mairix-el.texi
@@ -68,7 +68,7 @@ database.
 Mairix is a tool for indexing and searching words in locally stored
 mail.  It was written by Richard Curnow and is licensed under the
 GPL@.  Mairix comes with most popular GNU/Linux distributions, but it also
-runs under Windows (with cygwin), macOS and Solaris.  The homepage can
+runs under Windows (with cygwin), macOS and Solaris.  The website can
 be found at
 @uref{http://www.rpcurnow.force9.co.uk/mairix/index.html}
 
diff --git a/doc/misc/pgg.texi b/doc/misc/pgg.texi
index 82495275fc..e796da6da3 100644
--- a/doc/misc/pgg.texi
+++ b/doc/misc/pgg.texi
@@ -27,7 +27,8 @@ modify this GNU manual.''
 
 @dircategory Emacs network features
 @direntry
-* PGG: (pgg).                   Emacs interface to various PGP implementations.
+* PGG: (pgg).                   An obsolete Emacs interface to various
+                                  PGP implementations.
 @end direntry
 
 @titlepage
diff --git a/doc/misc/rcirc.texi b/doc/misc/rcirc.texi
index ae3a3b13e6..47de523737 100644
--- a/doc/misc/rcirc.texi
+++ b/doc/misc/rcirc.texi
@@ -254,6 +254,10 @@ To make this permanent, add the following to your init 
file:
 
 Use @kbd{C-c C-@key{SPC}} to switch to these buffers.
 
+@vindex rcirc-track-ignore-server-buffer-flag
+If the user wishes to ignore events in the server buffer, set
+@code{rcirc-track-ignore-server-buffer-flag} to a non-nil value.
+
 @node Reference
 @chapter Reference
 @cindex reference
@@ -426,7 +430,13 @@ lost.  The simple solution is to use @kbd{M-x rcirc}.  The 
problem is
 that this opens an @emph{additional} connection, so you'll have two
 copies of every channel buffer, one dead and one live.
 
-The real answer, therefore, is the @code{/reconnect} command.
+One option therefore, is the @code{/reconnect} command.
+
+An other approach is to set @code{rcirc-reconnect-delay} to a value
+greater than 0, and allow rcirc to reconnect when it detects that the
+connection has been closed.  By default it will try to do this three
+times (as specified by @code{rcirc-reconnect-attempts}), before giving
+up.
 @end table
 
 @node Useful IRC commands
@@ -671,6 +681,12 @@ window is showing them), the mode line will now show you 
the abbreviated
 channel or nick name.  Use @kbd{C-c C-@key{SPC}} to switch to these
 buffers.
 
+@cindex rcirc-track-abbrevate-flag
+By default the channel names are abbreviated, set
+@code{rcirc-track-abbrevate-flag} to a non-nil value. This might be
+interesting if the IRC activities are not tracked in the mode line,
+but somewhere else.
+
 @vindex rcirc-mode-hook
 If you prefer not to load @code{rcirc} immediately, you can delay the
 activation of this mode:
@@ -807,6 +823,18 @@ active and only omits a message if the nick has not been 
active.  The
 window @code{rcirc} considers is controlled by the
 @code{rcirc-omit-threshold} variable.
 
+@vindex rcirc-omit-responses-after-join
+Right after connecting to a server, rcirc will also hide all messages
+in @code{rcirc-omit-responses-after-join}, next to
+@code{rcirc-omit-responses}. For example,
+
+@example
+(setq rcirc-omit-responses-after-join '("TOPIC" "NICK"))
+@end example
+
+would hide the topic message and the list of users in the current
+channel right after joining a new channel.
+
 @node Hacking and Tweaking
 @chapter Hacking and Tweaking
 @cindex hacking and tweaking
@@ -819,6 +847,7 @@ Here are some examples of stuff you can do to configure 
@code{rcirc}.
 * Scrolling conservatively::
 * Changing the time stamp format::
 * Defining a new command::
+* Using rcirc with bouncers::
 @end menu
 
 @node Skipping /away messages using handlers
@@ -903,22 +932,53 @@ how to include the date in the time stamp:
 @cindex new commands, defining
 
 Here's a simple new command, @code{/sv}.  With it, you can boast about
-your IRC client.  It shows how you can use @code{defun-rcirc-command} to
+your IRC client.  It shows how you can use @code{rcirc-define-command} to
 define new commands.
 
+@findex rcirc-define-command
 We're waiting for the definition of this command until @code{rcirc} is loaded
-because @code{defun-rcirc-command} is not yet available, and without
+because @code{rcirc-define-command} is not yet available, and without
 @code{rcirc} loaded, the command wouldn't do us much good anyway.
 
 @smallexample
 (with-eval-after-load 'rcirc
-  (defun-rcirc-command sv (arg)
+  (rcirc-define-command sv ()
     "Boast about rcirc."
     (interactive "i")
-    (rcirc-send-message process target
-                         (concat "I use " rcirc-id-string))))
+    (rcirc-send-message process target "I use " rcirc-id-string)))
 @end smallexample
 
+@node Using rcirc with bouncers
+@section Using rcirc with bouncers
+@cindex bouncer
+
+Some bouncers multiplex connections to various servers, but have to
+modify nicks and channel names to make this work. The channel
+@code{#emacs} on @code{irc.libera.chat} becomes
+@code{#emacs/irc.libera.chat}.
+
+@vindex rcirc-nick-filter
+@vindex rcirc-channel-filter
+The options @code{rcirc-nick-filter} and @code{rcirc-channel-filter}
+can be used to make this feel more natural. When set to functions,
+these will be used to change how nicks and channel names are
+displayed. A simple configuration to fix the above example might be:
+
+@smallexample
+(defun my/rcirc-remove-suffix (STR)
+  "Remove suffixes from STR."
+  (save-match-data
+    (if (string-match "/[[:alpha:]]+?\\'" str)
+        (substring str 0 (match-beginning 0))
+      str)))
+
+(setq rcirc-nick-filter #'my/rcirc-remove-suffix
+      rcirc-channel-filter #'local/rcirc-soju-suffix)
+@end smallexample
+
+The effect is that buffer names, nicks in messages, nick-completion
+all strip away the suffix introduced by the bouncer.
+
 @node GNU Free Documentation License
 @appendix GNU Free Documentation License
 @include doclicense.texi
diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi
index 88ca4450d5..8ca5fcca5b 100644
--- a/doc/misc/reftex.texi
+++ b/doc/misc/reftex.texi
@@ -3192,7 +3192,7 @@ with the @kbd{g} key.  To get this behavior, use instead
 
 @AUCTeX{} is without doubt the best major mode for editing @TeX{} and @LaTeX{}
 files with Emacs (@pxref{Top,AUCTeX,,auctex, The AUCTeX User Manual}).
-You can get it from its home page at @value{AUCTEXSITE}, but since
+You can get it from its website at @value{AUCTEXSITE}, but since
 it is available from GNU ELPA, you can simply install it from @kbd{M-x
 list-packages}.
 
@@ -3565,7 +3565,7 @@ With @i{Viper} mode prior to Vipers version 3.01, you 
need to protect
 @cindex Acknowledgments
 @cindex Thanks
 @cindex Bug reports
-@cindex @code{http}, @RefTeX{} home page
+@cindex @code{http}, @RefTeX{} website
 @cindex @code{ftp}, @RefTeX{} site
 
 @c dominik@@science.uva.nl
diff --git a/etc/NEWS b/etc/NEWS
index 50cf0748b1..634d3d86f9 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -128,6 +128,22 @@ of files visited via 'C-x C-f' and other commands.
 
 * Changes in Emacs 28.1
 
+---
+** Emacs now supports Unicode Standard version 14.0.
+
++++
+** New character script 'emoji' has been created.
+Various blocks of codepoints have been split out of the 'symbol'
+script into their own 'emoji' script to allow easier specification of
+their treatment.  Which codepoints are treated as emoji is derived
+from the Unicode specifications.  Also, Emacs will now use "Noto Color
+Emoji" by default for that script.  Use:
+
+(set-fontset-font t 'emoji
+                  '("My New Emoji Font" . "iso10646-1") nil 'prepend)
+
+to change the font used.
+
 +++
 ** New command 'execute-extended-command-for-buffer'.
 This new command, bound to 'M-S-x', works like
@@ -419,14 +435,17 @@ scrolling switches to the previous/next tab, and holding 
the Shift key
 during scrolling moves the tab to the left/right.
 
 ---
-*** The tab bar is frame-local when 'tab-bar-show' is a number.
-You can show/hide the tab bar independently for each frame, according
-to the value of 'tab-bar-show'.
+*** Frame-specific appearance of the tab bar when 'tab-bar-show' is a number.
+When 'tab-bar-show' is a number, the tab bar on different frames can
+be shown or hidden independently, as determined by the number of tabs
+on each frame compared to the numerical value of 'tab-bar-show'.
 
 ---
 *** New command 'toggle-frame-tab-bar'.
 It can be used to enable/disable the tab bar on the currently selected
 frame regardless of the values of 'tab-bar-mode' and 'tab-bar-show'.
+This allows to enable/disable the tab bar independently on different
+frames.
 
 ---
 *** New user option 'tab-bar-format' defines a list of tab bar items.
@@ -1202,7 +1221,7 @@ Thus, packages on nonGNU ELPA will appear by default in 
the list shown
 by 'list-packages'.
 
 ---
-*** '/ s' ('package-menu-filter-by-status') changes parameter handling.
+*** '/ s' ('package-menu-filter-by-status') changed parameter handling.
 The command was documented to take a comma-separated list of statuses
 to filter by, but instead it used the parameter as a regexp.  The
 command has been changed so that it now works as documented, and
@@ -1282,9 +1301,9 @@ the variables 'bookmark-bmenu-use-header-line' and
 'bookmark-bmenu-inline-header-height' are now declared obsolete.
 
 ---
-*** New user option 'bookmark-fontify'.
-If non-nil, setting a bookmark will colorize the current line with
-'bookmark-face'.
+*** New user option 'bookmark-set-fringe-mark'.
+If non-nil, setting a bookmark will set a fringe mark on the current
+line, and jumping to a bookmark will also set this mark.
 
 ---
 *** New user option 'bookmark-menu-confirm-deletion'.
@@ -2122,6 +2141,7 @@ modified flag.  The default is nil, to preserve the old 
behavior.
 
 ** CC Mode
 
++++
 *** Added support for Doxygen documentation style.
 'doxygen' is now a valid 'c-doc-comment-style' which recognises all
 comment styles supported by Doxygen (namely '///', '//!', '/** … */'
@@ -2136,6 +2156,7 @@ use 'doxygen' by default one might evaluate:
 
 or use it in a custom 'c-style'.
 
++++
 *** Added support to line up '?' and ':' of a ternary operator.
 The new 'c-lineup-ternary-bodies' function can be used as a lineup
 function to align question mark and colon which are part of a ternary
@@ -2337,10 +2358,12 @@ This specifies the file in which to save the list of 
known projects.
 This command lets you interactively remove an entry from the list of projects
 in 'project-list-file'.
 
+---
 *** 'project-find-file' now accepts non-existent file names.
 This is to allow easy creation of files inside some nested
 sub-directory.
 
++++
 *** 'project-find-file' doesn't use the string at point as default input.
 Now it's only suggested as part of the "future history".
 
@@ -2500,6 +2523,8 @@ This allows mode-specific alterations to how 
'thing-at-point' works.
 'symbol-at-point') will narrow to the current field (if any) before
 trying to identify the thing at point.
 
+*** New function 'thing-at-mouse'.
+
 ** image-dired
 
 ---
@@ -2515,6 +2540,15 @@ images are marked.
 
 ** Flymake mode
 
++++
+*** New command 'flymake-show-project-diagnostics'
+This lists all diagnostics for buffers in the currently active
+project.  The listing is similar to the one obtained by
+'flymake-show-buffer-diagnostics', but adds a column for the
+project-relative file name.  For backends which support it,
+'flymake-show-project-diagnostics' also lists diagnostics for files
+that have not yet been visited.
+
 +++
 *** New user options to customize Flymake's mode-line.
 The new user option 'flymake-mode-line-format' is a mix of strings and
@@ -2611,13 +2645,22 @@ Interactively, 'C-u C-c C-o' triggers this new optional 
behavior.
 ** ERC
 
 ---
-*** erc-services.el now supports NickServ passwords from auth-source.
+*** NickServ passwords can now be retrieved from auth-source.
 The 'erc-use-auth-source-for-nickserv-password' user option enables
 querying auth-source for NickServ passwords.  To enable this, add the
 following to your init file:
 
-    (setq erc-prompt-for-nickserv-password nil
-          erc-use-auth-source-for-nickserv-password t)
+    (setq erc-use-auth-source-for-nickserv-password t)
+
+---
+*** NickServ identification now prompts for password last.
+When 'erc-prompt-for-nickserv-password' is non-nil, the user used to
+be unconditionally prompted interactively for a password, regardless
+of the value of 'erc-nickserv-passwords', which was effectively
+ignored (same for the new
+'erc-use-auth-source-for-nickserv-password').  This limitation is now
+lifted, and the user is interactively prompted last, after the other
+identification methods have run.
 
 ---
 *** The '/ignore' command will now ask for a timeout to stop ignoring the user.
@@ -2653,6 +2696,13 @@ node "(erc) Connecting" in the ERC manual for more 
details and
 examples on how to specify and use TLS client certificates with
 'erc-tls'.
 
+---
+*** Add 'erc-track-select-mode-line-face' (obsoletes 'erc-track-find-face').
+The 'erc-track-find-face' function of the erc-track module has been
+declared obsolete and rewritten as 'erc-track-select-mode-line-face',
+with different expected arguments (the current and old faces are now
+separated) and clearer documentation.
+
 ** xwidget-webkit mode
 
 *** New xwidget commands.
@@ -2718,6 +2768,44 @@ Variable 'mh-whitelist-preserves-sequences-flag' is 
renamed
 Face 'mh-folder-blacklisted' is renamed 'mh-folder-blocklisted'.
 Face 'mh-folder-whitelisted' is renamed 'mh-folder-allowlisted'.
 
+** Rcirc
+
++++
+*** rcirc now supports SASL authentication.
+
+---
+*** rcirc connects asynchronously
+
+---
+*** Integrate formatting into rcirc-send-string
+The function now accepts a variable number of arguments.
+
++++
+*** Deprecate defun-rcirc-command in favour of rcirc-define-command
+The new macro handles multiple and optional arguments.
+
+---
+*** Add basic IRCv3 support
+This includes support for the capabilities: server-time, batch,
+message-ids, invite-notify, multi-prefix and standard-replies.
+
+---
+*** Add mouse property support to rcirc-track-minor-mode
+
+---
+*** Improve support for IRC markup codes
+
+---
+*** Check auth-sources for server passwords
+
+---
+*** Allow for channels to hide certain message types right after connecting.
+Set rcirc-omit-responses-after-join analogously to rcirc-omit-responses.
+
++++
+*** Implement repeated reconnection strategy
+See rcirc-reconnect-attempts.
+
 ** Miscellaneous
 
 ---
@@ -2738,9 +2826,6 @@ will now restore the original order.
 ---
 *** 'M-left' and 'M-right' now move between columns in 'tabulated-list-mode'.
 
-+++
-*** rcirc now supports SASL authentication.
-
 ---
 *** New variable 'hl-line-overlay-priority'.
 This can be used to change the priority of the hl-line overlays.
@@ -2811,6 +2896,13 @@ after every monthly meeting which takes place on the 
third Thursday,
 or if you would like to attend a virtual meeting scheduled in a
 different timezone causing a difference in the date.
 
+---
+*** New user option 'checkdoc-column-zero-backslash-before-paren'.
+Checkdoc warns if there is a left parenthesis in column zero of a
+documentation string.  That warning can now be disabled by customizing
+this new user option to nil.  This can be useful if you don't expect
+your code to be edited with an Emacs version older than 27.1.
+
 ---
 *** The old non-SMIE indentation of 'sh-mode' has been removed.
 
@@ -2834,6 +2926,13 @@ This previously used to align subsequent lines with the 
last sibling,
 but it now aligns with the first sibling (which is the preferred style
 in Ruby).
 
+** Imenu
+
++++
+*** New user option 'imenu-max-index-time'.
+If creating the imenu index takes longer than specified by this
+variable (default 5 seconds), imenu indexing is stopped.
+
 
 * New Modes and Packages in Emacs 28.1
 
@@ -2868,6 +2967,7 @@ This is a mode for searching a RFC 2229 dictionary server.
 the mouse in 'dictionary-tooltip-dictionary' (which must be customized
 first).
 
+---
 ** Lisp Data mode
 The new command 'lisp-data-mode' enables a major mode for buffers
 composed of Lisp symbolic expressions that do not form a computer
@@ -2896,13 +2996,16 @@ structures.
 This is for symmetry with 'visual-line-mode', which disables
 'truncate-lines'.
 
-** 'electric-indent-mode' now also indents inside strings and comments,
-(unless the indentation function doesn't, of course).
+---
+** 'electric-indent-mode' now also indents inside strings and comments.
+(This only happens when indentation function also supports this.)
+
 To recover the previous behavior you can use:
 
     (add-hook 'electric-indent-functions
               (lambda (_) (if (nth 8 (syntax-ppss)) 'no-indent)))
 
+---
 ** The 'M-o' ('facemenu-keymap') global binding has been removed.
 To restore the old binding, say something like:
 
@@ -2914,6 +3017,7 @@ To restore the old binding, say something like:
 The last two lines are not strictly necessary if you don't care about
 having those two commands on the 'M-o' keymap; see the next section.
 
+---
 ** The 'M-o M-s' and 'M-o M-S' global bindings have been removed.
 Use 'M-x center-line' and 'M-x center-paragraph' instead.  See the
 previous section for how to get back the old bindings.  Alternatively,
@@ -2923,10 +3027,12 @@ before, you can add the following to your init file:
   (define-key global-map "\M-o\M-s" 'center-line)
   (define-key global-map "\M-o\M-S" 'center-paragraph)
 
+---
 ** The 'M-o M-o' global binding has been removed.
 Use 'M-x font-lock-fontify-block' instead, or the new 'C-x x f'
 command, which updates the syntax highlighting in the current buffer.
 
+---
 ** The escape sequence '\e[29~' in Xterm is now mapped to 'menu'.
 Xterm sends this sequence for both 'F16' and 'Menu' keys
 It used to be mapped to 'print' but we couldn't find a terminal
@@ -2940,17 +3046,20 @@ If non-nil (the default), Emacs pushes pasted text onto 
the kill ring
 (if using an xterm-like terminal that supports bracketed paste).
 Setting this to nil inhibits that.
 
-** 'vc-print-branch-log' shows the change log for BRANCH from its root
-directory instead of the default directory.
+---
+** 'vc-print-branch-log' shows the change log from its root directory.
+It previously used to use the default directory.
 
 ---
 ** 'project-shell' and 'shell' now use 'pop-to-buffer-same-window'.
 This is to keep the same behavior as Eshell.
 
-** In 'nroff-mode', 'center-line' is now bound to 'M-o M-s'.
+---
+** In 'nroff-mode', 'center-line' is no longer bound to a key.
 The original key binding was 'M-s', which interfered with I-search,
 since the latter uses 'M-s' as a prefix key of the search prefix map.
 
+---
 ** In 'f90-mode', the backslash character ('\') no longer escapes.
 For about a decade, the backslash character has no longer had a
 special escape syntax in Fortran F90.  To get the old behavior back,
@@ -2958,6 +3067,7 @@ say something like:
 
     (modify-syntax-entry ?\\ "\\" f90-mode-syntax-table)
 
++++
 ** Setting 'fill-column' to nil is obsolete.
 This undocumented use of 'fill-column' is now obsolete.  To disable
 auto filling, turn off 'auto-fill-mode' instead.
@@ -2970,6 +3080,7 @@ file:
 
 * Incompatible Lisp Changes in Emacs 28.1
 
++++
 ** Emacs now prints a backtrace when signaling an error in batch mode.
 This makes debugging Emacs Lisp scripts run in batch mode easier.  To
 get back the old behavior, set the new variable
@@ -2983,6 +3094,7 @@ integer 2.  Such numerals are now read as floats with the 
exponent included:
 2.e6 is now read as the floating-point value 2000000.0.
 That is, '(read-from-string "1.e3")' => '(1000.0 . 4)' now.
 
+---
 ** 'equal' no longer examines some contents of window configurations.
 Instead, it considers window configurations to be equal only if they
 are 'eq'.  To compare contents, use 'compare-window-configurations'
@@ -3011,6 +3123,7 @@ hooks 'kill-buffer-hook', 'kill-buffer-query-functions', 
and
 'buffer-list-update-hook' for the temporary buffers they create.  This
 avoids slowing them down when a lot of these hooks are defined.
 
++++
 ** New face 'child-frame-border' and frame parameter 
'child-frame-border-width'.
 The face and width of child frames borders can now be determined
 separately from those of normal frames.  To minimize backward
@@ -3063,6 +3176,7 @@ replacement text.
 'minibuffer-completion-table' and related variables are now set buffer-locally
 in the minibuffer instead of being set via a global let-binding.
 
+---
 ** XML serialization functions now reject invalid characters.
 Previously, 'xml-print' would produce invalid XML when given a string
 with characters that are not valid in XML (see
@@ -3071,12 +3185,14 @@ https://www.w3.org/TR/xml/#charsets).  Now it rejects 
such strings.
 ---
 ** JSON
 
+---
 *** JSON number parsing is now stricter.
 Numbers with a leading plus sign, leading zeros, or a missing integer
 component are now rejected by 'json-read' and friends.  This makes
 them more compliant with the JSON specification and consistent with
 the native JSON parsing functions.
 
+---
 *** JSON functions support the semantics of RFC 8259.
 The JSON functions 'json-serialize', 'json-insert',
 'json-parse-string', and 'json-parse-buffer' now implement some of the
@@ -3107,8 +3223,10 @@ these cases.
 These were actually rendered obsolete in Emacs 21 but were never
 marked as such.
 
+---
 ** 'pcomplete-ignore-case' is now an obsolete alias of 
'completion-ignore-case'.
 
++++
 ** 'completions-annotations' face is not used when the caller puts own face.
 This affects the suffix specified by completion 'annotation-function'.
 
@@ -3117,7 +3235,8 @@ This affects the suffix specified by completion 
'annotation-function'.
 This is instead of the erroneous 'minibuffer-inactive-mode' it
 formerly had.
 
-** 'make-text-button' no longer text properties of its first argument.
+---
+** 'make-text-button' no longer modifies text properties of its first argument.
 When its first argument is a string, 'make-text-button' no longer
 modifies the string's text properties; instead, it uses and returns
 a copy of the string.  This helps avoid trouble when strings are
@@ -3129,6 +3248,7 @@ If 'minibuffer-allow-text-properties' is non-nil, doing 
completion
 over a table of strings with properties will no longer remove all the
 properties before returning.  This affects things like 'completing-read'.
 
+---
 ** 'dns-query' now consistently uses Lisp integers to represent integers.
 Formerly it made an exception for integer components of SOA records,
 because SOA serial numbers can exceed fixnum ranges on 32-bit platforms.
@@ -3143,6 +3263,7 @@ the Emacs Lisp reference manual for background.
 +++
 ** The error 'ftp-error' belongs also to category 'remote-file-error'.
 
++++
 ** The WHEN argument of 'make-obsolete' and related functions is mandatory.
 The use of those functions without a WHEN argument was marked obsolete
 back in Emacs 23.1.  The affected functions are: 'make-obsolete',
@@ -3163,6 +3284,7 @@ These variables describe facts about the SQL standard and
 product-specific additions.  There should be no need for users to
 customize them.
 
+---
 ** Some locale-related variables have been removed.
 The Lisp variables 'previous-system-messages-locale' and
 'previous-system-time-locale' have been removed, as they were created
@@ -3172,12 +3294,15 @@ by mistake and were not useful to Lisp code.
 ** Function 'lm-maintainer' is replaced with 'lm-maintainers'.
 The former is now declared obsolete.
 
++++
 ** 'facemenu.el' is no longer preloaded.
 To use functions/variables from the package, you now have to say
 '(require 'facemenu)' or similar.
 
+---
 ** 'facemenu-color-alist' is now obsolete, and is not used.
 
+---
 ** The variable 'keyboard-type' is obsolete and not dynamically scoped any 
more.
 
 +++
@@ -3308,9 +3433,9 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el.
 
 ---
 ** Some functions and variables obsolete since Emacs 22 have been removed:
-'gnus-article-hide-pgp-hook', 'gnus-inews-mark-gcc-as-read',
-'gnus-treat-display-xface', 'gnus-treat-strip-pgp',
-'nnmail-spool-file'.
+'erc-current-network', 'gnus-article-hide-pgp-hook',
+'gnus-inews-mark-gcc-as-read', 'gnus-treat-display-xface',
+'gnus-treat-strip-pgp', 'nnmail-spool-file'.
 
 ---
 ** The obsolete function 'thread-alive-p' has been removed.
@@ -3327,6 +3452,19 @@ In Emacs 24.3, the variable 'dbus-event-error-hooks' was 
renamed to
 The old names, which were kept as obsolete aliases of the new names,
 have now been removed.
 
+---
+** 'find-function-source-path' renamed and re-documented.
+The 'find-function' command (and various related commands) were
+documented to respect 'find-function-source-path', and to search for
+objects in files specified by that variable.  It's unclear when this
+actually changed, but at some point (perhaps decades ago) these
+commands started using 'load-history' to determine where symbols had
+been defined (which is much faster).  The doc strings of all the
+affected function has been updated.  'find-function-source-path' was
+still being used by 'find-library' and related commands, so the
+variable has been renamed to 'find-library-source-path', and
+'find-function-source-path' is now an obsolete variable alias.
+
 
 * Lisp Changes in Emacs 28.1
 
@@ -3370,6 +3508,7 @@ It is written as '(:success BODY...)' where BODY is 
executed
 whenever the protected form terminates without error, with the
 specified variable bound to the the value of the protected form.
 
++++
 ** New function 'benchmark-call' to measure the execution time of a function.
 Additionally, the number of repetitions can be expressed as a minimal duration
 in seconds.
@@ -3397,6 +3536,7 @@ If bound to non-nil, a command with '(interactive "e")' 
doesn't signal
 an error when invoked by input event that is not a mouse click (e.g.,
 a key sequence).
 
+---
 ** New variable 'redisplay-skip-initial-frame' to enable batch redisplay tests.
 Setting it to nil forces the redisplay to do its job even in the
 initial frame used in batch mode.
@@ -3468,10 +3608,13 @@ To load the file after byte-compiling, add a call to 
'load' from Lisp
 or use 'M-x emacs-lisp-byte-compile-and-load' interactively.
 
 ** Macroexp
+
 ---
 *** New function 'macroexp-file-name' to know the name of the current file.
+
 ---
 *** New function 'macroexp-compiling-p' to know if we're compiling.
+
 ---
 *** New function 'macroexp-warn-and-return' to help emit warnings.
 This used to be named 'macroexp--warn-and-return' and has proved useful
@@ -3513,11 +3656,13 @@ in better code.
 ---
 *** New function 'pcase-compile-patterns' to write other macros.
 
++++
 *** Added 'cl-type' pattern.
 The new 'cl-type' pattern compares types using 'cl-typep', which allows
 comparing simple types like '(cl-type integer)', as well as forms like
 '(cl-type (integer 0 10))'.
 
++++
 *** New macro 'pcase-setq'.
 This macro is the 'setq' equivalent of 'pcase-let', which allows for
 destructuring patterns in a 'setq' form.
@@ -3585,10 +3730,30 @@ This splits a shell command string into separate 
components,
 respecting quoting with single ('like this') and double ("like this")
 quotes, as well as backslash quoting (like\ this).
 
-** New string manipulation functions added to subr-x.el.
-the functions are 'string-clean-whitespace', 'string-fill',
-'string-limit', 'string-lines', 'string-pad' and
-'string-chop-newline'.
++++
+** New function 'string-clean-whitespace'.
+This removed whitespace from a string
+
++++
+** New function 'string-fill'.
+Word-wrap a string so that no lines are longer that a specific length.
+
++++
+** New function 'string-limit'.
+Return (up to) a specific substring length.
+
++++
+** New function 'string-lines'.
+Return a list of strings representing the individual lines in a
+string.
+
++++
+** New function 'string-pad'.
+Pad a string to a specific length.
+
++++
+** New function 'string-chop-newline'.
+Remove a trailing newline from a string.
 
 +++
 ** New function 'replace-regexp-in-region'.
@@ -3633,6 +3798,7 @@ This is identical to 'ignore', but returns t instead.
 This is identical to 'sxhash-equal' but also accounts for string
 properties.
 
+---
 ** New function 'buffer-line-statistics'.
 This function returns some statistics about the line lengths in a buffer.
 
@@ -3671,8 +3837,7 @@ the current system.
 
 +++
 ** New function 'insert-into-buffer'.
-This is like 'insert-buffer-substring', but works in the opposite
-direction.
+This inserts the contents of the current buffer into another buffer.
 
 +++
 ** New function 'json-available-p'.
@@ -3710,6 +3875,12 @@ This function is like 'require', but searches 
'custom-theme-load-path'
 instead of 'load-path'.  It can be used by Custom themes to load
 supporting Lisp files when 'require' is unsuitable.
 
++++
+** New function 'seq-union'.
+This function takes two sequences and returns a list of all elements
+that appear in either of them, with no two elements that compare equal
+appearing in the result.
+
 +++
 ** New function 'syntax-class-to-char'.
 This does almost the opposite of 'string-to-syntax' -- it returns the
@@ -3816,6 +3987,7 @@ Until it is solved you could ignore such errors by 
performing
 
     (setq debug-ignored-errors (cons 'remote-file-error debug-ignored-errors))
 
++++
 ** New macro 'named-let' added to subr-x.el.
 It provides Scheme's "named let" looping construct.
 
@@ -3828,6 +4000,7 @@ non-nil value to get back the old behavior, whereby after 
reading
 from a subprocess, Emacs would check for output of other subprocesses
 in a way that is likely to read from the same process again.
 
++++
 ** 'set-process-buffer' now updates the process mark.
 The mark will be set to point to the end of the new buffer.
 
@@ -3946,6 +4119,11 @@ The special events 'dbus-event' and 'file-notify' are 
now ignored in
 ** 'start-process-shell-command' and 'start-file-process-shell-command'
 do not support the old calling conventions any longer.
 
++++
+** 'yes-or-no-p' and 'y-or-n-p' PROMPT parameter no longer needs trailing 
space.
+This has been the case since Emacs 24.4 but was not announced or
+documented until now.
+
 +++
 ** The 'uniquify' argument in 'auto-save-file-name-transforms' can be a symbol.
 If this symbol is one of the members of 'secure-hash-algorithms',
@@ -4029,6 +4207,7 @@ form below the header line.  It is enabled by default in
 ---
 ** 'ascii' is now a coding system alias for 'us-ascii'.
 
+---
 ** New coding-systems for EBCDIC variants.
 New coding-systems 'ibm256', 'ibm273', 'ibm274', 'ibm277', 'ibm278',
 'ibm280', 'ibm281', 'ibm284', 'ibm285', 'ibm290', 'ibm297'.  These are
@@ -4091,8 +4270,11 @@ The new variable 'xwidget-webkit-download-dir' says 
where to download to.
 
 ---
 *** New command 'xwidget-webkit-clone-and-split-below'.
+Open a new window below displaying the current URL.
+
+---
 *** New command 'xwidget-webkit-clone-and-split-right'.
-These are used in 'xwidget-webkit-mode'.
+Open a new window to the right displaying the current URL.
 
 ---
 *** New variable 'xwidget-webkit-enable-plugins'.
diff --git a/etc/TODO b/etc/TODO
index 8fe698b0c1..e2d1c19a00 100644
--- a/etc/TODO
+++ b/etc/TODO
@@ -405,7 +405,8 @@ punctuation characters, disregarding the fontsets, should 
be modified
 to exempt Emoji from this rule (since Emoji characters belong to the
 'symbol' script in Emacs), so that use-default-font-for-symbols would
 not have to be tweaked to have Emoji display by default with a capable
-font.
+font. (This has now been implemented, but only one font is currently
+considered, please augment the list).
 
 *** Consider changing the default display of Variation Selectors
 Emacs by default displays the Variation Selector (VS) codepoints not
diff --git a/etc/themes/manoj-dark-theme.el b/etc/themes/manoj-dark-theme.el
index 5a527111d3..0e5fb39119 100644
--- a/etc/themes/manoj-dark-theme.el
+++ b/etc/themes/manoj-dark-theme.el
@@ -23,11 +23,11 @@
 ;;; Commentary:
 
 ;; I spend a lot of time working in front of a screen (many hours in a
-;; dimly lit room) and eye fatigue is an issue. This is a dark color
-;; theme for emacs, which is easier on the eyes than light themes.
+;; dimly lit room) and eye fatigue is an issue.  This is a dark color
+;; theme for Emacs, which is easier on the eyes than light themes.
 
 ;; It does not help that I am blue-green color blind, so subtle
-;; variations are often lost on me. I do want to use color contrast to
+;; variations are often lost on me.  I do want to use color contrast to
 ;; increase productivity, but I also want to avoid the jarring angry
 ;; fruit salad look, and so I am in the process of crafting a logical
 ;; color scheme that is high contrast enough for me, without being too
@@ -35,7 +35,7 @@
 
 ;; In circumstances where there a lot of related faces that can be
 ;; viewed, for example, the Gnus group buffer, consistent and logical
-;; color choices are the only sane option. Gnus groups can be newa
+;; color choices are the only sane option.  Gnus groups can be newa
 ;; (blueish) or mail (greenish), have states (large number of under
 ;; messages, normal, and empty). The large number unread groups have
 ;; highest luminance (appear brighter), and the empty one have lower
@@ -45,25 +45,22 @@
 ;; constant separation -- so all the related groups have the same
 ;; brightness ({mail,news}/{unread,normal,empty}), and a graded
 ;; selection of foreground colors.  It sounds more complicated that it
-;; looks. The eye is drawn naturally to the unread groups, and first
-;; to the mail, then USENET groups (which is my preference).
+;; looks.  The eye is drawn naturally to the unread groups, and first
+;; to the mail, then Usenet groups (which is my preference).
 
 ;; Similar color variations occur for individual messages in a group;
 ;; high scoring messages bubble to the top, and have a higher
 ;; luminance.  This color schema has made me slightly faster at
-;; reading mail/USENET.
+;; reading mail/Usenet.
 
 ;; In the message itself, quoted mail messages from different people
 ;; are color coordinated, with high contrast between citations that are
 ;; close to each other in the hierarchy, so it is less likely that one
 ;; misunderstands who said what in a long conversation.
 
-;; The following scheme covers programming languages, Gnus, Erc, mail,
-;; org-mode, CUA-mode, apt-utils, bbdb, compilation buffers, changelog
-;; mode, diff and ediff, eshell, and more. You need emacs-goodies
-;; package on Debian to use this.  See the wiki page at
-;; https://www.emacswiki.org/cgi-bin/wiki?ColorTheme for details. The
-;; project home page is at https://gna.org/projects/color-theme.
+;; This theme covers programming languages, Gnus, Erc, mail, org-mode,
+;; CUA-mode, apt-utils, bbdb, compilation buffers, changelog mode,
+;; diff and ediff, eshell, and more.
 
 ;;; Code:
 
diff --git a/etc/themes/tango-dark-theme.el b/etc/themes/tango-dark-theme.el
index a8577108ed..1a33676eba 100644
--- a/etc/themes/tango-dark-theme.el
+++ b/etc/themes/tango-dark-theme.el
@@ -20,7 +20,7 @@
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
-;;; Commentary
+;;; Commentary:
 
 ;; The colors in this theme come from the Tango palette, which is in
 ;; the public domain: http://tango.freedesktop.org/
diff --git a/etc/themes/tango-theme.el b/etc/themes/tango-theme.el
index 286561eb4e..9ee2619ce2 100644
--- a/etc/themes/tango-theme.el
+++ b/etc/themes/tango-theme.el
@@ -20,7 +20,7 @@
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
-;;; Commentary
+;;; Commentary:
 
 ;; The colors in this theme come from the Tango palette, which is in
 ;; the public domain: http://tango.freedesktop.org/
diff --git a/lisp/align.el b/lisp/align.el
index a0b626a5c4..2f380a8077 100644
--- a/lisp/align.el
+++ b/lisp/align.el
@@ -787,7 +787,7 @@ See the variable `align-exclude-rules-list' for more 
details.")
   "The current overlays highlighting the text matched by a rule.")
 
 (defvar align-regexp-history nil
-  "Input history for the full user-entered regex in `align-regexp'")
+  "Input history for the full user-entered regex in `align-regexp'.")
 
 ;; Sample extension rule set for vhdl-mode.  This is now obsolete.
 (defcustom align-vhdl-rules-list
diff --git a/lisp/allout-widgets.el b/lisp/allout-widgets.el
index 0e12704088..668e7b91e8 100644
--- a/lisp/allout-widgets.el
+++ b/lisp/allout-widgets.el
@@ -32,7 +32,7 @@
 ;; invoke allout-widgets-mode in a particular allout buffer.  When
 ;; auto-enabled, you can inhibit widget operation in particular allout
 ;; buffers by setting the variable `allout-widgets-mode-inhibit' non-nil in
-;; that file's buffer.  Use emacs *file local variables* to generally
+;; that file's buffer.  Use Emacs *file local variables* to generally
 ;; inhibit for a file.
 ;;
 ;; See the `allout-widgets-mode' docstring for more details.
@@ -55,7 +55,7 @@
 ;; bindings for easy outline navigation and exposure control, extending
 ;; outline hot-spot navigation (see `allout-mode' docstring for details).
 ;;
-;; Developers note: Our use of emacs widgets is unconventional.  We
+;; Developers note: Our use of Emacs widgets is unconventional.  We
 ;; decorate existing text rather than substituting for it, to
 ;; piggy-back on existing allout operation.  This employs the C-coded
 ;; efficiencies of widget-apply, widget-get, and widget-put, along
@@ -87,7 +87,7 @@
   "Allout extension that highlights outline structure graphically.
 
 Customize `allout-widgets-auto-activation' to activate allout-widgets
-with allout-mode."
+with `allout-mode'."
   :group 'allout)
 ;;;_  > defgroup allout-widgets-developer
 (defgroup allout-widgets-developer nil
@@ -96,19 +96,19 @@ with allout-mode."
 ;;;_  ; some functions a bit early, for allout-auto-activation dependency:
 ;;;_  > allout-widgets-mode-enable
 (defun allout-widgets-mode-enable ()
-  "Enable allout-widgets-mode in allout-mode buffers.
+  "Enable `allout-widgets-mode' in `allout-mode' buffers.
 
 See `allout-widgets-mode-inhibit' for per-file/per-buffer
-inhibition of allout-widgets-mode."
+inhibition of `allout-widgets-mode'."
   (add-hook 'allout-mode-off-hook #'allout-widgets-mode-off)
   (add-hook 'allout-mode-on-hook #'allout-widgets-mode-on)
   t)
 ;;;_  > allout-widgets-mode-disable
 (defun allout-widgets-mode-disable ()
-  "Disable allout-widgets-mode in allout-mode buffers.
+  "Disable `allout-widgets-mode' in `allout-mode' buffers.
 
 See `allout-widgets-mode-inhibit' for per-file/per-buffer
-inhibition of allout-widgets-mode."
+inhibition of `allout-widgets-mode'."
   (remove-hook 'allout-mode-off-hook #'allout-widgets-mode-off)
   (remove-hook 'allout-mode-on-hook #'allout-widgets-mode-on)
   t)
@@ -384,7 +384,7 @@ onto the front.")
  )
 ;;;_    = allout-doing-exposure-undo-processor nil
 (defvar allout-undo-exposure-in-progress nil
-  "Maintained true during `allout-widgets-exposure-undo-processor'")
+  "Maintained true during `allout-widgets-exposure-undo-processor'.")
 ;;;_   , Widget-specific outline text format
 ;;;_    = allout-escaped-prefix-regexp
 (defvar-local allout-escaped-prefix-regexp ""
@@ -1450,7 +1450,7 @@ recursive operation."
   )
 ;;;_  > allout-new-item-widget ()
 (defsubst allout-new-item-widget ()
-  "create a new item widget, not yet situated anywhere."
+  "Create a new item widget, not yet situated anywhere."
   (if allout-widgets-maintain-tally
       ;; all the extra overhead is incurred only when doing the
       ;; maintenance, except the condition, which can't be avoided.
diff --git a/lisp/allout.el b/lisp/allout.el
index 0625ea68ab..bb36524658 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -26,7 +26,7 @@
 ;;; Commentary:
 
 ;; Allout outline minor mode provides extensive outline formatting and
-;; and manipulation beyond standard emacs outline mode.  Some features:
+;; and manipulation beyond standard Emacs outline mode.  Some features:
 ;;
 ;;  - Classic outline-mode topic-oriented navigation and exposure adjustment
 ;;  - Topic-oriented editing including coherent topic and subtopic
@@ -35,7 +35,7 @@
 ;;  - Customizable bullet format -- enables programming-language specific
 ;;    outlining, for code-folding editing.  (Allout code itself is to try it;
 ;;    formatted as an outline -- do ESC-x eval-buffer in allout.el; but
-;;    emacs local file variables need to be enabled when the
+;;    Emacs local file variables need to be enabled when the
 ;;    file was visited -- see `enable-local-variables'.)
 ;;  - Configurable per-file initial exposure settings
 ;;  - Symmetric-key and key-pair topic encryption.  Encryption is via the
@@ -242,7 +242,7 @@ prevails."
     )
   "Allout-mode functions bound to keys without any added prefix.
 
-This is in contrast to the majority of allout-mode bindings on
+This is in contrast to the majority of `allout-mode' bindings on
 `allout-prefixed-keybindings', whose bindings are created with a
 preceding command key.
 
@@ -288,7 +288,7 @@ Control whether and how allout outline mode is automatically
 activated when files are visited with non-nil buffer-specific
 file variable `allout-layout'.
 
-When allout-auto-activation is \"On\" (t), allout mode is
+When `allout-auto-activation' is \"On\" (t), allout mode is
 activated in buffers with non-nil `allout-layout', and the
 specified layout is applied.
 
@@ -382,7 +382,7 @@ in individual buffers if you want to inhibit auto-fill only 
in particular
 buffers.  (You could use a function on `allout-mode-hook' to inhibit
 auto-fill according, eg, to the major mode.)
 
-If you don't set this and auto-fill-mode is enabled, allout will use the
+If you don't set this and `auto-fill-mode' is enabled, allout will use the
 value that `normal-auto-fill-function', if any, when allout mode starts, or
 else allout's special hanging-indent maintaining auto-fill function,
 `allout-auto-fill'."
@@ -460,7 +460,7 @@ advance as follows:
  - if the cursor is on the first column of the headline:
    then it goes to the start of the headline within the item body.
 
-In this fashion, you can use the beginning-of-line command to do
+In this fashion, you can use the `beginning-of-line' command to do
 its normal job and then, when repeated, advance through the
 entry, cycling back to start.
 
@@ -882,7 +882,7 @@ has been customized to enable this behavior), `allout-mode' 
will be
 automatically activated.  The layout dictated by the value will be used to
 set the initial exposure when `allout-mode' is activated.
 
-*You should not setq-default this variable non-nil unless you want every
+*You should not `setq-default' this variable non-nil unless you want every
 visited file to be treated as an allout file.*
 
 The value would typically be set by a file local variable.  For
@@ -1321,21 +1321,21 @@ The settings are stored on 
`allout-mode-prior-settings'."
       (if qualifier
           (cond ((eq qualifier 'extend)
                  (if (not (listp prior-value))
-                     (error "extension of non-list prior value attempted")
+                     (error "Extension of non-list prior value attempted")
                    (set name (cons value prior-value))))
                 ((eq qualifier 'append)
                  (if (not (listp prior-value))
-                     (error "appending of non-list prior value attempted")
+                     (error "Appending of non-list prior value attempted")
                    (set name (append prior-value (list value)))))
-                (t (error "unrecognized setting qualifier `%s' encountered"
+                (t (error "Unrecognized setting qualifier `%s' encountered"
                           qualifier)))
         (set name value)))))
 ;;;_   > allout-do-resumptions ()
 (defun allout-do-resumptions ()
   "Resume all name/value settings registered by `allout-add-resumptions'.
 
-This is used when concluding allout-mode, to resume selected variables to
-their settings before allout-mode was started."
+This is used when concluding `allout-mode', to resume selected variables to
+their settings before `allout-mode' was started."
 
     (while allout-mode-prior-settings
       (let* ((pair (pop allout-mode-prior-settings))
@@ -1601,7 +1601,7 @@ So `allout-post-command-business' should not reactivate 
it...")
   ;; the _transient_ opening of invisible text during isearch -- is keyed to
   ;; presence of the isearch-open-invisible property -- even though this
   ;; property controls the isearch _arrival_ behavior.  This is the case at
-  ;; least in emacs 21, 22.1, and xemacs 21.4.
+  ;; least in emacs 21, 22.1.
   (put 'allout-exposure-category 'isearch-open-invisible
        #'allout-isearch-end-handler)
   (put 'allout-exposure-category 'insert-in-front-hooks
@@ -2129,7 +2129,7 @@ to return the current depth."
   allout-recent-depth)
 ;;;_  > allout-recent-prefix ()
 (defsubst allout-recent-prefix ()
-  "Like `allout-recent-depth', but returns text of last encountered prefix.
+  "Like `allout-recent-depth', but return text of last encountered prefix.
 
 All outline functions which directly do string matches to assess
 headings set the variables `allout-recent-prefix-beginning' and
@@ -2139,7 +2139,7 @@ to return the current prefix."
                                   allout-recent-prefix-end))
 ;;;_  > allout-recent-bullet ()
 (defmacro allout-recent-bullet ()
-  "Like `allout-recent-prefix', but returns bullet of last encountered prefix.
+  "Like `allout-recent-prefix', but return bullet of last encountered prefix.
 
 All outline functions which directly do string matches to assess
 headings set the variables `allout-recent-prefix-beginning' and
@@ -3145,7 +3145,7 @@ Returns resulting position, else nil if none found."
        (start-arg arg)
        (backward (> 0 arg)))
     (if (= 0 start-depth)
-       (error "No siblings, not in a topic..."))
+        (error "No siblings, not in a topic"))
     (if backward (setq arg (* -1 arg)))
     (allout-back-to-current-heading)
     (while (and (not (zerop arg))
@@ -3185,7 +3185,7 @@ are mapped to the command of the corresponding 
control-key on the
 `allout-mode-map-value'.")
 ;;;_   = allout-command-counter
 (defvar-local allout-command-counter 0
-  "Counter that monotonically increases in allout-mode buffers.
+  "Counter that monotonically increases in `allout-mode' buffers.
 
 Set by `allout-pre-command-business', to support allout addons in
 coordinating with allout activity.")
@@ -3325,7 +3325,6 @@ See `allout-auto-activation' for setup instructions."
 ;;;_  - Topic Format Assessment
 ;;;_   > allout-solicit-alternate-bullet (depth &optional current-bullet)
 (defun allout-solicit-alternate-bullet (depth &optional current-bullet)
-
   "Prompt for and return a bullet char as an alternative to the current one.
 
 Offer one suitable for current depth DEPTH as default."
@@ -5057,7 +5056,6 @@ Examples:
       max-pos)))
 ;;;_   > allout-old-expose-topic (spec &rest followers)
 (defun allout-old-expose-topic (spec &rest followers)
-
   "Deprecated.  Use `allout-expose-topic' (with different schema
 format) instead.
 
@@ -5089,7 +5087,7 @@ elements of the list are nested SPECs, dictating the 
specific exposure
 for the corresponding offspring of the topic.
 
 Optional FOLLOWERS arguments dictate exposure for succeeding siblings."
-
+  (declare (obsolete allout-expose-topic "28.1"))
   (interactive "xExposure spec: ")
   (let ((inhibit-field-text-motion t)
         (depth (allout-current-depth))
@@ -5807,7 +5805,7 @@ See `allout-toggle-current-subtree-encryption' for more 
details."
            (after-bullet-pos (point))
            (was-encrypted
             (progn (if (= (point-max) after-bullet-pos)
-                       (error "no body to encrypt"))
+                       (error "No body to encrypt"))
                    (allout-encrypted-topic-p)))
            (was-collapsed (if (not (search-forward "\n" nil t))
                               nil
@@ -6032,7 +6030,7 @@ signal."
 
     ;; validate result -- non-empty
     (if (not result-text)
-        (error "%scryption failed." (if decrypt "De" "En")))
+        (error "%scryption failed" (if decrypt "De" "En")))
 
 
     (when (eq keypair-mode 'prompt-save)
diff --git a/lisp/ansi-color.el b/lisp/ansi-color.el
index 79dc821ea1..79b1c9912f 100644
--- a/lisp/ansi-color.el
+++ b/lisp/ansi-color.el
@@ -43,7 +43,7 @@
 ;; The "Graphic Rendition Combination Mode (GRCM)" implemented is
 ;; "cumulative mode" as defined in section 7.2.8.  Cumulative mode
 ;; means that whenever possible, SGR control sequences are combined
-;; (ie. blue and bold).
+;; (i.e. blue and bold).
 
 ;; The basic functions are:
 ;;
diff --git a/lisp/apropos.el b/lisp/apropos.el
index a1470537d9..513175d751 100644
--- a/lisp/apropos.el
+++ b/lisp/apropos.el
@@ -78,7 +78,7 @@ This option only controls the default behavior.  Each of the 
above
 commands also has an optional argument to request a more extensive search.
 
 Additionally, this option makes the function `apropos-library'
-include key-binding information in its output."
+include keybinding information in its output."
   :type 'boolean)
 
 (defface apropos-symbol
diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el
index 71ad7bd0c5..5576ae3505 100644
--- a/lisp/arc-mode.el
+++ b/lisp/arc-mode.el
@@ -1759,7 +1759,7 @@ This doesn't recover lost files, it just undoes changes 
in the buffer itself."
             neh        ;beginning of next extension header (level 1 and 2)
             mode uid gid dir prname
             gname uname modtime moddate)
-       (if (= hdrlvl 3) (error "can't handle lzh level 3 header type"))
+        (if (= hdrlvl 3) (error "Can't handle lzh level 3 header type"))
        (when (or (= hdrlvl 0) (= hdrlvl 1))
          (setq fnlen   (get-byte (+ p 21))) ;filename length
          (setq efnname (let ((str (buffer-substring (+ p 22) (+ p 22 fnlen)))) 
;filename from offset 22
diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el
index 914f8d2f1b..162a3ec23c 100644
--- a/lisp/auth-source-pass.el
+++ b/lisp/auth-source-pass.el
@@ -176,7 +176,7 @@ CONTENTS is the contents of a password-store formatted 
file."
                         lines))))
 
 (defun auth-source-pass--do-debug (&rest msg)
-  "Call `auth-source-do-debug` with MSG and a prefix."
+  "Call `auth-source-do-debug' with MSG and a prefix."
   (apply #'auth-source-do-debug
          (cons (concat "auth-source-pass: " (car msg))
                (cdr msg))))
diff --git a/lisp/auth-source.el b/lisp/auth-source.el
index 6919738398..8d6ebd39dc 100644
--- a/lisp/auth-source.el
+++ b/lisp/auth-source.el
@@ -79,9 +79,8 @@
 
 ;;;###autoload
 (defcustom auth-source-cache-expiry 7200
-  "How many seconds passwords are cached, or nil to disable
-expiring.  Overrides `password-cache-expiry' through a
-let-binding."
+  "How many seconds passwords are cached, or nil to disable expiring.
+Overrides `password-cache-expiry' through a let-binding."
   :version "24.1"
   :type '(choice (const :tag "Never" nil)
                  (const :tag "All Day" 86400)
@@ -353,7 +352,7 @@ backend starts with the first element on the list and stops 
as
 soon as a function returns non-nil.")
 
 (defun auth-source-backend-parse (entry)
-  "Create an auth-source-backend from an ENTRY in `auth-sources'."
+  "Create an `auth-source-backend' from an ENTRY in `auth-sources'."
 
   (let ((backend
          (run-hook-with-args-until-success 
'auth-source-backend-parser-functions
@@ -823,7 +822,7 @@ Returns t or nil for forgotten or not found."
   (password-cache-remove (auth-source-format-cache-entry spec)))
 
 (defun auth-source-forget+ (&rest spec)
-  "Forget any cached data matching SPEC.  Returns forgotten count.
+  "Forget any cached data matching SPEC.  Return forgotten count.
 
 This is not a full `auth-source-search' spec but works similarly.
 For instance, \(:host \"myhost\" \"yourhost\") would find all the
@@ -1198,7 +1197,7 @@ FILE is the file from which we obtained this token."
     (mapcar #'1- string)))
 
 (defun auth-source--pad (string length)
-  "Pad string S to a modulo of LENGTH."
+  "Pad STRING to a modulo of LENGTH."
   (let ((pad (- length (mod (length string) length))))
     (concat string (make-string pad pad))))
 
@@ -1573,8 +1572,7 @@ collection that's a Google Chrome entry for the 
git.gnus.org site
 authentication tokens:
 
  (let ((auth-sources \\='(\"secrets:Login\")))
-    (auth-source-search :max 1 :signon_realm \"https://git.gnus.org/Git\";))
-"
+    (auth-source-search :max 1 :signon_realm \"https://git.gnus.org/Git\";))"
 
   ;; TODO
   ;; (secrets-delete-item coll elt)
@@ -1875,8 +1873,7 @@ And this one looks for the first item in the internet 
keychain
 entries for git.gnus.org:
 
  (let ((auth-sources \\='(macos-keychain-internet\")))
-    (auth-source-search :max 1 :host \"git.gnus.org\"))
-"
+    (auth-source-search :max 1 :host \"git.gnus.org\"))"
   ;; TODO
   (cl-assert (not create) nil
           "The macOS Keychain auth-source backend doesn't support creation 
yet")
@@ -1941,7 +1938,7 @@ entries for git.gnus.org:
 
 
 (defun auth-source--decode-octal-string (string)
-  "Convert octal string to utf-8 string.  E.g: 'a\134b' to 'a\b'"
+  "Convert octal STRING to utf-8 string.  E.g: 'a\134b' to 'a\b'."
   (let ((list (string-to-list string))
         (size (length string)))
     (decode-coding-string
diff --git a/lisp/autoarg.el b/lisp/autoarg.el
index 7c2c6f1030..b52a4305be 100644
--- a/lisp/autoarg.el
+++ b/lisp/autoarg.el
@@ -104,7 +104,7 @@ For example:
 `6 9 a' inserts 69 `a's into the buffer.
 `6 9 \\[autoarg-terminate] \\[autoarg-terminate]' inserts `69' into the buffer 
and
 then invokes the normal binding of \\[autoarg-terminate].
-`C-u \\[autoarg-terminate]' invokes the normal binding of 
\\[autoarg-terminate] four times.
+`\\[universal-argument] \\[autoarg-terminate]' invokes the normal binding of 
\\[autoarg-terminate] four times.
 
 \\{autoarg-mode-map}"
   :lighter" Aarg" :global t :group 'keyboard)
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index 9197eadf22..c8fe205946 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -36,7 +36,7 @@
 ;; buffer contains no unsaved changes.
 ;;
 ;; Auto-Revert Mode can be activated for individual buffers.  Global
-;; Auto-Revert Mode applies to all file buffers. (If the user option
+;; Auto-Revert Mode applies to all file buffers.  (If the user option
 ;; `global-auto-revert-non-file-buffers' is non-nil, it also applies
 ;; to some non-file buffers.  This option is disabled by default.)
 ;;
@@ -72,7 +72,7 @@
 ;; at the end of the buffer in that window, even if the window is not
 ;; selected.  This way, you can use Auto-Revert Mode to `tail' a file.
 ;; Just put point at the end of the buffer and it will stay there.
-;; These rules apply to file buffers. For non-file buffers, the
+;; These rules apply to file buffers.  For non-file buffers, the
 ;; behavior may be mode dependent.
 ;;
 ;; While you can use Auto-Revert Mode to tail a file, this package
@@ -853,8 +853,8 @@ This is an internal function used by Auto-Revert Mode."
   "Return a prioritized list of buffers to maybe auto-revert.
 The differences between this return value and the reference
 variable `auto-revert-buffer-list' include: 1) this has more
-entries when in global-auto-revert-mode; 2) this prioritizes
-buffers not reverted last time due to user interruption. "
+entries when in `global-auto-revert-mode'; 2) this prioritizes
+buffers not reverted last time due to user interruption."
   (let ((bufs (delq nil
                     ;; Buffers with remote contents shall be reverted only
                     ;; if the connection is established already.
@@ -881,7 +881,7 @@ buffers not reverted last time due to user interruption. "
     (nreverse (nconc new remaining))))
 
 (defun auto-revert-buffer (buf)
-  "Revert a single buffer.
+  "Revert a single buffer BUF.
 
 This is performed as specified by Auto-Revert and Global
 Auto-Revert Modes."
diff --git a/lisp/bindings.el b/lisp/bindings.el
index b8bf0c1a6f..4dfc9a908c 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -614,20 +614,20 @@ By default, this shows the information specified by 
`global-mode-string'.")
        (list `(quote ,standard-mode-line-format))))
 
 
-(defun mode-line-unbury-buffer (event) "\
-Call `unbury-buffer' in this window."
+(defun mode-line-unbury-buffer (event)
+  "Call `unbury-buffer' in this window."
   (interactive "e")
   (with-selected-window (posn-window (event-start event))
     (unbury-buffer)))
 
-(defun mode-line-bury-buffer (event) "\
-Like `bury-buffer', but temporarily select EVENT's window."
+(defun mode-line-bury-buffer (event)
+  "Like `bury-buffer', but temporarily select EVENT's window."
   (interactive "e")
   (with-selected-window (posn-window (event-start event))
     (bury-buffer)))
 
-(defun mode-line-other-buffer () "\
-Switch to the most recently selected buffer other than the current one."
+(defun mode-line-other-buffer ()
+  "Switch to the most recently selected buffer other than the current one."
   (interactive)
   (switch-to-buffer (other-buffer) nil t))
 
diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index b340d379b3..ac63c8f1b0 100644
--- a/lisp/bookmark.el
+++ b/lisp/bookmark.el
@@ -173,10 +173,8 @@ A non-nil value may result in truncated bookmark names."
   "Time before `bookmark-bmenu-search' updates the display."
   :type  'number)
 
-(defcustom bookmark-fontify t
-  "Whether to colorize a bookmarked line.
-If non-nil, setting a bookmark will colorize the current line with
-`bookmark-face'."
+(defcustom bookmark-set-fringe-mark t
+  "Whether to set a fringe mark at bookmarked lines."
   :type  'boolean
   :version "28.1")
 
@@ -189,16 +187,16 @@ If non-nil, setting a bookmark will colorize the current 
line with
 (defface bookmark-face
   '((((class grayscale)
       (background light))
-     :background "DimGray")
+     :foreground "DimGray")
     (((class grayscale)
       (background dark))
-     :background "LightGray")
+     :foreground "LightGray")
     (((class color)
       (background light))
-     :foreground "White" :background "DarkOrange1")
+     :background "White" :foreground "DarkOrange1")
     (((class color)
       (background dark))
-     :foreground "Black" :background "DarkOrange1"))
+     :background "Black" :foreground "DarkOrange1"))
   "Face used to highlight current line."
   :version "28.1")
 
@@ -281,7 +279,7 @@ STR-BEFORE-POS is buffer text that immediately precedes POS.
 ANNOTATION is a string that describes the bookmark.
   See options `bookmark-use-annotations' and
   `bookmark-automatically-show-annotations'.
-HANDLER is a function that provides the bookmark-jump behavior for a
+HANDLER is a function that provides the `bookmark-jump' behavior for a
 specific kind of bookmark instead of the default `bookmark-default-handler'.
 This is the case for Info bookmarks, for instance.  HANDLER must accept
 a bookmark as its single argument.
@@ -455,18 +453,24 @@ In other words, return all information but the name."
 (defvar bookmark-history nil
   "The history list for bookmark functions.")
 
-(defun bookmark--fontify ()
+(define-fringe-bitmap 'bookmark-fringe-mark
+  "\x3c\x7e\xff\xff\xff\xff\x7e\x3c")
+
+(defun bookmark--set-fringe-mark ()
   "Apply a colorized overlay to the bookmarked location.
-See user option `bookmark-fontify'."
-  (let ((bm (make-overlay (point-at-bol)
-                          (min (point-max) (1+ (point-at-eol))))))
+See user option `bookmark-set-fringe-mark'."
+  (let ((bm (make-overlay (point-at-bol) (1+ (point-at-bol)))))
     (overlay-put bm 'category 'bookmark)
-    (overlay-put bm 'face 'bookmark-face)))
+    (overlay-put bm 'evaporate t)
+    (overlay-put bm 'before-string
+                 (propertize
+                  "x" 'display
+                  `(left-fringe bookmark-fringe-mark bookmark-face)))))
 
-(defun bookmark--unfontify (bm)
+(defun bookmark--remove-fringe-mark (bm)
   "Remove a bookmark's colorized overlay.
 BM is a bookmark as returned from function `bookmark-get-bookmark'.
-See user option `bookmark-fontify'."
+See user option `bookmark-set-fringe'."
   (let ((filename (cdr (assq 'filename bm)))
         (pos (cdr (assq 'position bm)))
         overlays found temp)
@@ -475,7 +479,7 @@ See user option `bookmark-fontify'."
       (dolist (buf (buffer-list))
         (with-current-buffer buf
           (when (equal filename buffer-file-name)
-            (setq overlays (overlays-at pos))
+            (setq overlays (overlays-in pos pos))
             (while (and (not found) (setq temp (pop overlays)))
               (when (eq 'bookmark (overlay-get temp 'category))
                 (delete-overlay (setq found temp))))))))))
@@ -565,8 +569,8 @@ old one."
         ;; no prefix arg means just overwrite old bookmark.
         (let ((bm (bookmark-get-bookmark stripped-name)))
           ;; First clean up if previously location was fontified.
-          (when bookmark-fontify
-            (bookmark--unfontify bm))
+          (when bookmark-set-fringe-mark
+            (bookmark--remove-fringe-mark bm))
           ;; Modify using the new (NAME . ALIST) format.
           (setcdr bm alist))
 
@@ -882,8 +886,8 @@ still there, in order, if the topmost one is ever deleted."
            ;; Ask for an annotation buffer for this bookmark
            (when bookmark-use-annotations
              (bookmark-edit-annotation str))
-           (when bookmark-fontify
-             (bookmark--fontify))))
+           (when bookmark-set-fringe-mark
+             (bookmark--set-fringe-mark))))
     (setq bookmark-yank-point nil)
     (setq bookmark-current-buffer nil)))
 
@@ -904,11 +908,11 @@ To yank words from the text of the buffer and use them as 
part of the
 bookmark name, type C-w while setting a bookmark.  Successive C-w's
 yank successive words.
 
-Typing C-u inserts (at the bookmark name prompt) the name of the last
+Typing \\[universal-argument] inserts (at the bookmark name prompt) the name 
of the last
 bookmark used in the document where the new bookmark is being set;
 this helps you use a single bookmark name to track progress through a
 large document.  If there is no prior bookmark for this document, then
-C-u inserts an appropriate name based on the buffer or file.
+\\[universal-argument] inserts an appropriate name based on the buffer or file.
 
 Use \\[bookmark-delete] to remove bookmarks (you give it a name and
 it removes only the first instance of a bookmark with that name from
@@ -937,11 +941,11 @@ To yank words from the text of the buffer and use them as 
part of the
 bookmark name, type C-w while setting a bookmark.  Successive C-w's
 yank successive words.
 
-Typing C-u inserts (at the bookmark name prompt) the name of the last
+Typing \\[universal-argument] inserts (at the bookmark name prompt) the name 
of the last
 bookmark used in the document where the new bookmark is being set;
 this helps you use a single bookmark name to track progress through a
 large document.  If there is no prior bookmark for this document, then
-C-u inserts an appropriate name based on the buffer or file.
+\\[universal-argument] inserts an appropriate name based on the buffer or file.
 
 Use \\[bookmark-delete] to remove bookmarks (you give it a name and
 it removes only the first instance of a bookmark with that name from
@@ -1152,14 +1156,14 @@ and then show any annotations for this bookmark."
     (if win (set-window-point win (point))))
   ;; FIXME: we used to only run bookmark-after-jump-hook in
   ;; `bookmark-jump' itself, but in none of the other commands.
-  (when bookmark-fontify
-    (let ((overlays (overlays-at (point)))
+  (when bookmark-set-fringe-mark
+    (let ((overlays (overlays-in (point) (point)))
           temp found)
       (while (and (not found) (setq temp (pop overlays)))
         (when (eq 'bookmark (overlay-get temp 'category))
           (setq found t)))
       (unless found
-        (bookmark--fontify))))
+        (bookmark--set-fringe-mark))))
   (run-hooks 'bookmark-after-jump-hook)
   (if bookmark-automatically-show-annotations
       ;; if there is an annotation for this bookmark,
@@ -1423,7 +1427,7 @@ probably because we were called from there."
   (bookmark-maybe-historicize-string bookmark-name)
   (bookmark-maybe-load-default-file)
   (let ((will-go (bookmark-get-bookmark bookmark-name 'noerror)))
-    (bookmark--unfontify will-go)
+    (bookmark--remove-fringe-mark will-go)
     (setq bookmark-alist (delq will-go bookmark-alist))
     ;; Added by db, nil bookmark-current-bookmark if the last
     ;; occurrence has been deleted
@@ -1490,7 +1494,7 @@ is greater than `bookmark-alist-modification-count'."
   "Save currently defined bookmarks in FILE.
 FILE defaults to `bookmark-default-file'.
 With prefix PARG, query user for a file to save in.
-If MAKE-DEFAULT is non-nil (interactively with prefix C-u C-u)
+If MAKE-DEFAULT is non-nil (interactively with prefix \\[universal-argument] 
\\[universal-argument])
 the file we save in becomes the new default in the current Emacs
 session (without affecting the value of `bookmark-default-file'.).
 
diff --git a/lisp/bs.el b/lisp/bs.el
index 494bc42618..ccb06bbdba 100644
--- a/lisp/bs.el
+++ b/lisp/bs.el
@@ -4,6 +4,8 @@
 ;; Author: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience
+;; Old-Version: 1.17
+;; URL: http://www.geekware.de/software/emacs
 
 ;; This file is part of GNU Emacs.
 
@@ -22,9 +24,6 @@
 
 ;;; Commentary:
 
-;; Version: 1.17
-;; X-URL: http://www.geekware.de/software/emacs
-;;
 ;; The bs-package contains a main function bs-show for popping up a
 ;; buffer in a way similar to `list-buffers' and `electric-buffer-list':
 ;; The new buffer offers a Buffer Selection Menu for manipulating
diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el
index db4751a9fb..0e913ddfdb 100644
--- a/lisp/calc/calc-aent.el
+++ b/lisp/calc/calc-aent.el
@@ -49,7 +49,7 @@
 (declare-function math-to-percentsigns "calccomp" (x))
 
 (defvar calc-quick-calc-history nil
-  "The history list for quick-calc.")
+  "The history list for `quick-calc'.")
 
 ;;;###autoload
 (defun calc-do-quick-calc (&optional insert)
diff --git a/lisp/calc/calc-bin.el b/lisp/calc/calc-bin.el
index 503ed77702..a1f4ca43e7 100644
--- a/lisp/calc/calc-bin.el
+++ b/lisp/calc/calc-bin.el
@@ -202,7 +202,7 @@
 (defun math-power-of-2 (n)    ;  [I I] [Public]
   (if (natnump n)
       (ash 1 n)
-    (error "argument must be a natural number")))
+    (error "Argument must be a natural number")))
 
 (defun math-integer-log2 (n)    ; [I I] [Public]
   (and (natnump n)
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el
index 45337e187b..dbe2f689d8 100644
--- a/lisp/calc/calc-ext.el
+++ b/lisp/calc/calc-ext.el
@@ -3418,7 +3418,7 @@ If X is not an error form, return 1."
 
 ;;; Users can redefine this in their init files.
 (defvar calc-keypad-user-menu nil
-  "If non-nil, this describes an additional menu for calc-keypad.
+  "If non-nil, this describes an additional menu for `calc-keypad'.
 It should contain a list of three rows.
 Each row should be a list of six keys.
 Each key should be a list of a label string, plus a Calc command name spec.
diff --git a/lisp/calc/calc-map.el b/lisp/calc/calc-map.el
index 16a2bd89ca..d12d05f305 100644
--- a/lisp/calc/calc-map.el
+++ b/lisp/calc/calc-map.el
@@ -139,7 +139,7 @@
 
 (defvar calc-verify-arglist t)
 (defun calc-map-stack ()
-  "This is meant to be called by calc-keypad mode."
+  "This is meant to be called by `calc-keypad' mode."
   (interactive)
   (let ((calc-verify-arglist nil))
     (calc-unread-command ?\$)
diff --git a/lisp/calc/calc-menu.el b/lisp/calc/calc-menu.el
index 516f62d7b6..eed20a89a4 100644
--- a/lisp/calc/calc-menu.el
+++ b/lisp/calc/calc-menu.el
@@ -19,6 +19,8 @@
 
 ;;; Commentary:
 
+;;; Code:
+
 (defvar calc-arithmetic-menu
   (list "Arithmetic"
         (list "Basic"
diff --git a/lisp/calc/calc-misc.el b/lisp/calc/calc-misc.el
index b573c53f41..c8394e8c2f 100644
--- a/lisp/calc/calc-misc.el
+++ b/lisp/calc/calc-misc.el
@@ -102,8 +102,7 @@ Miscellaneous:
   0  (zero) calc-reset.  Reset Calc stack and modes to default state.
 
 Press `*' twice (`C-x * *') to turn Calc on or off using the same
-Calc user interface as before (either C-x * C or C-x * K; initially C-x * C).
-"
+Calc user interface as before (either C-x * C or C-x * K; initially C-x * C)."
   (interactive "P")
   (calc-check-defines)
   (if calc-dispatch-help
diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el
index 8b6f063703..fd6f3a7b67 100644
--- a/lisp/calc/calc-units.el
+++ b/lisp/calc/calc-units.el
@@ -529,7 +529,7 @@ If COMP or STD is non-nil, put that in the units table 
instead."
   (calc-slow-wrapper
    (let* ((expr (calc-top-n 1)))
      (unless (math-units-in-expr-p expr t)
-       (error "No units in expression."))
+       (error "No units in expression"))
      (let* ((old-units (math-extract-units expr))
             (defunits (math-get-default-units expr))
             units
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 800ec7a6a3..afb43c0f33 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -252,7 +252,7 @@
 
 (defcustom calc-embedded-announce-formula
   "%Embed\n\\(% .*\n\\)*"
-  "A regular expression which is sure to be followed by a calc-embedded 
formula."
+  "A regular expression which is sure to be followed by a `calc-embedded' 
formula."
   :type '(regexp))
 
 (defcustom calc-embedded-announce-formula-alist
@@ -278,12 +278,12 @@
 
 (defcustom calc-embedded-close-formula
   
"\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n"
-  "Regexp for the closing delimiter of a formula used by calc-embedded."
+  "Regexp for the closing delimiter of a formula used by `calc-embedded'."
   :type '(regexp))
 
 (defcustom calc-embedded-open-close-formula-alist
   nil
-  "Alist of major modes with pairs of formula delimiters used by 
calc-embedded."
+  "Alist of major modes with pairs of formula delimiters used by 
`calc-embedded'."
   :type '(alist :key-type (symbol :tag "Major mode")
                 :value-type (list (regexp :tag "Opening formula delimiter")
                                   (regexp :tag "Closing formula delimiter"))))
@@ -348,13 +348,13 @@ See calc-embedded-open-plain."
 
 (defcustom calc-embedded-open-mode
   "% "
-  "A string which should precede calc-embedded mode annotations.
+  "A string which should precede `calc-embedded' mode annotations.
 This is not required to be present for user-written mode annotations."
   :type '(string))
 
 (defcustom calc-embedded-close-mode
   "\n"
-  "A string which should follow calc-embedded mode annotations.
+  "A string which should follow `calc-embedded' mode annotations.
 This is not required to be present for user-written mode annotations."
   :type '(string))
 
@@ -387,43 +387,35 @@ This is not required to be present for user-written mode 
annotations."
   :type '(string)
   :version "26.2")
 
-(defcustom calc-gnuplot-plot-command
-  nil
+(defcustom calc-gnuplot-plot-command nil
   "Name of command for displaying GNUPLOT output; %s = file name to print."
   :type '(choice (string) (sexp)))
 
-(defcustom calc-gnuplot-print-command
-  "lp %s"
+(defcustom calc-gnuplot-print-command "lp %s"
   "Name of command for printing GNUPLOT output; %s = file name to print."
   :type '(choice (string) (sexp)))
 
-(defcustom calc-multiplication-has-precedence
-  t
-  "If non-nil, multiplication has precedence over division
-in normal mode."
+(defcustom calc-multiplication-has-precedence t
+  "If non-nil, multiplication has precedence over division in normal mode."
   :type 'boolean)
 
-(defcustom calc-ensure-consistent-units
-  nil
+(defcustom calc-ensure-consistent-units nil
   "If non-nil, make sure new units are consistent with current units
 when converting units."
   :version "24.3"
   :type 'boolean)
 
-(defcustom calc-context-sensitive-enter
-  nil
+(defcustom calc-context-sensitive-enter nil
   "If non-nil, the stack element under the cursor will be copied by 
`calc-enter'
 and deleted by `calc-pop'."
   :version "24.4"
   :type 'boolean)
 
-(defcustom calc-undo-length
-  100
+(defcustom calc-undo-length 100
   "The number of undo steps that will be preserved when Calc is quit."
   :type 'integer)
 
-(defcustom calc-highlight-selections-with-faces
-  nil
+(defcustom calc-highlight-selections-with-faces nil
   "If non-nil, use a separate face to indicate selected sub-formulas.
 If option `calc-show-selections' is non-nil, then selected sub-formulas are
 shown by displaying the rest of the formula in `calc-nonselected-face'.
@@ -432,14 +424,12 @@ by displaying the sub-formula in `calc-selected-face'."
   :version "24.1"
   :type 'boolean)
 
-(defcustom calc-lu-field-reference
-  "20 uPa"
+(defcustom calc-lu-field-reference "20 uPa"
   "The default reference level for logarithmic units (field)."
   :version "24.1"
   :type '(string))
 
-(defcustom calc-lu-power-reference
-  "mW"
+(defcustom calc-lu-power-reference "mW"
   "The default reference level for logarithmic units (power)."
   :version "24.1"
   :type '(string))
@@ -496,7 +486,7 @@ This setting only applies to floats in normal display 
mode.")
   "List of strings for Y prefix help.")
 
 (defvar calc-loaded-settings-file nil
-  "t if `calc-settings-file' has been loaded yet.")
+  "Return t if `calc-settings-file' has been loaded yet.")
 
 
 (defvar calc-mode-var-list '()
@@ -961,7 +951,7 @@ Used by `calc-user-invocation'.")
 (defvar calc-lang-allow-percentsigns nil
   "A list of languages which allow percent signs in variable names.")
 (defvar calc-lang-c-type-hex nil
-  "Languages in which octal and hex numbers are written with leading 0 and 
0x,")
+  "Languages in which octal and hex numbers are written with leading 0 and 
0x.")
 (defvar calc-lang-brackets-are-subscripts nil
   "Languages in which subscripts are indicated by brackets.")
 (defvar calc-lang-parens-are-subscripts nil
@@ -1311,8 +1301,7 @@ Notations:  3.14e6     3.14 * 10^6
            <1 jan 91> Date form (enter using \\=' key)
 
 
-\\{calc-mode-map}
-"
+\\{calc-mode-map}"
   (interactive)
   (mapc (lambda (v)
           ;; FIXME: Why (set-default v (symbol-value v)) ?!?!?
@@ -1383,12 +1372,12 @@ Notations:  3.14e6     3.14 * 10^6
     map))
 
 (defun calc--header-line (long short width &optional fudge)
-  "Return a Calc header line appropriate for the buffer width.
+  "Return a Calc header line appropriate for the buffer WIDTH.
 
 LONG is a desired text for a wide window, SHORT is a desired
 abbreviated text, and width is the buffer width, which will be
 some fraction of the 'parent' window width (At the time of
-writing, 2/3 for calc, 1/3 for trail). The optional FUDGE is a
+writing, 2/3 for calc, 1/3 for trail).  The optional FUDGE is a
 trial-and-error adjustment number for the edge-cases at the
 border of the two cases."
   ;; TODO: This could be called as part of a 'window-resize' hook.
@@ -1410,7 +1399,7 @@ border of the two cases."
 This mode is used by the *Calc Trail* buffer, which records all results
 obtained by the GNU Emacs Calculator.
 
-Calculator commands beginning with the `t' key are used to manipulate
+Calculator commands beginning with the t key are used to manipulate
 the Trail.
 
 This buffer uses the same key map as the *Calculator* buffer; calculator
@@ -1501,7 +1490,7 @@ See `window-dedicated-p' for what that means."
   (calc nil t interactive))
 
 (defun calc-same-interface (arg)
-  "Invoke the Calculator using the most recent interface (calc or 
calc-keypad)."
+  "Invoke the Calculator using the most recent interface (`calc' or 
`calc-keypad')."
   (interactive "P")
   (if (and (equal (buffer-name) "*Gnuplot Trail*")
           (> (recursion-depth) 0))
@@ -1578,7 +1567,7 @@ or a list containing a character position and an error 
message in string form."
   "Invoke the Calculator in \"visual keypad\" mode.
 This is most useful in the X window system.
 In this mode, click on the Calc \"buttons\" using the left mouse button.
-Or, position the cursor manually and do M-x calc-keypad-press."
+Or, position the cursor manually and do \\[calc-keypad-press]."
   (interactive "p")
   (require 'calc-ext)
   (calc-do-keypad calc-full-mode interactive))
diff --git a/lisp/calculator.el b/lisp/calculator.el
index 99c9b6290c..415e0b4c77 100644
--- a/lisp/calculator.el
+++ b/lisp/calculator.el
@@ -1475,8 +1475,7 @@ a multiplication."
       (calculator-put-value (calculator-string-to-number str)))))
 
 (defun calculator-register-read-with-preview (prompt)
-  "Similar to `register-read-with-preview' but for calculator
-registers."
+  "Similar to `register-read-with-preview' but for calculator registers."
   (let ((register-alist calculator-registers)
         (register-preview-delay 1)
         (register-preview-function
diff --git a/lisp/calendar/cal-tex.el b/lisp/calendar/cal-tex.el
index 7b55d420c3..75e106cb37 100644
--- a/lisp/calendar/cal-tex.el
+++ b/lisp/calendar/cal-tex.el
@@ -263,7 +263,7 @@ Optional string ARGS are included as options for the article
 document class with inclusion of default values \"12pt\" for
 size, and \"a4paper\" for paper unless size or paper are already
 specified in ARGS.  When ARGS is omitted, by default the option
-\"12pt,a4paper\" is passed. When ARGS has any other value, then
+\"12pt,a4paper\" is passed.  When ARGS has any other value, then
 no option is passed to the class.
 
 Insert the \"\\usepackage{geometry}\" directive when ARGS
diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el
index 7c929ebed0..ebce2ae3dd 100644
--- a/lisp/calendar/calendar.el
+++ b/lisp/calendar/calendar.el
@@ -119,11 +119,11 @@
 ;; Calendar has historically relied heavily on dynamic scoping.
 ;; Concretely, this manifests in the use of references to let-bound variables
 ;; in Custom vars as well as code in diary files.
-;; `eval` is hence the core of the culprit.  It's used on:
+;; 'eval' is hence the core of the culprit.  It's used on:
 ;; - calendar-date-display-form
 ;; - calendar-time-display-form
 ;; - calendar-chinese-time-zone
-;; - in cal-dst's there are various calls to `eval' but they seem not to refer
+;; - in cal-dst's there are various calls to 'eval' but they seem not to refer
 ;;   to let-bound variables, surprisingly.
 ;; - calendar-date-echo-text
 ;; - calendar-mode-line-format
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index eaee2e9d95..312d5e2f38 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -1749,7 +1749,7 @@ entries.  ENTRY-MAIN is the first line of the diary 
entry."
 (defun icalendar--convert-float-to-ical (nonmarker entry-main)
   "Convert float diary entry to iCalendar format -- partially unsupported!
 
-  FIXME! DAY from diary-float yet unimplemented.
+  FIXME! DAY from `diary-float' yet unimplemented.
 
   NONMARKER is a regular expression matching the start of non-marking
   entries.  ENTRY-MAIN is the first line of the diary entry."
diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el
index 371d10631c..51a2751132 100644
--- a/lisp/calendar/todo-mode.el
+++ b/lisp/calendar/todo-mode.el
@@ -1846,9 +1846,9 @@ consist of the last todo items and the first done items."
 This inserts a new todo item into a category.
 
 With no prefix argument ARG, add the item to the current
-category; with one prefix argument (`C-u'), prompt for a category
-from the current todo file; with two prefix arguments (`C-u
-C-u'), first prompt for a todo file, then a category in that
+category; with one prefix argument (\\[universal-argument]), prompt for a 
category
+from the current todo file; with two prefix arguments (\\[universal-argument]
+\\[universal-argument]), first prompt for a todo file, then a category in that
 file.  If a non-existing category is entered, ask whether to add
 it to the todo file; if answered affirmatively, add the category
 and insert the item there.
@@ -3969,14 +3969,14 @@ See `todo-set-top-priorities' for more details."
 The categories can be any of those in the current todo file.
 
 With numerical prefix ARG show at most ARG top priority items
-from each category.  With `C-u' as prefix argument show the
+from each category.  With \\[universal-argument] as prefix argument show the
 numbers of top priority items specified by category in
 `todo-top-priorities-overrides', if this has an entry for the file(s);
 otherwise show `todo-top-priorities' items per category in the
 file(s).  With no prefix argument, if a top priorities file for
 the current todo file has previously been saved (see
 `todo-save-filtered-items-buffer'), visit this file; if there is
-no such file, build the list as with prefix argument `C-u'.
+no such file, build the list as with prefix argument \\[universal-argument].
 
   The prefix ARG regulates how many top priorities from
 each category to show, as described above."
@@ -3990,14 +3990,14 @@ in `todo-filter-files', or if this nil, in the files 
chosen from
 a file selection dialog that pops up in this case.
 
 With numerical prefix ARG show at most ARG top priority items
-from each category in each file.  With `C-u' as prefix argument
+from each category in each file.  With \\[universal-argument] as prefix 
argument
 show the numbers of top priority items specified in
 `todo-top-priorities-overrides', if this is non-nil; otherwise show
 `todo-top-priorities' items per category.  With no prefix
 argument, if a top priorities file for the chosen todo files
 exists (see `todo-save-filtered-items-buffer'), visit this file;
 if there is no such file, do the same as with prefix argument
-`C-u'."
+\\[universal-argument]."
   (interactive "P")
   (todo-filter-items 'top arg t))
 
@@ -6543,8 +6543,8 @@ Filtered Items mode following todo (not done) items."
     map)
   "Todo Filtered Items mode keymap.")
 
-(easy-menu-define
-  todo-menu todo-mode-map "Todo Menu"
+(easy-menu-define todo-menu todo-mode-map
+  "Todo Menu."
   '("Todo"
     ("Navigation"
      ["Next Item"            todo-next-item t]
diff --git a/lisp/cedet/ede/auto.el b/lisp/cedet/ede/auto.el
index ee9d0116af..da6a3f3e90 100644
--- a/lisp/cedet/ede/auto.el
+++ b/lisp/cedet/ede/auto.el
@@ -69,7 +69,7 @@ into memory.")
   (let* ((fc (oref dirmatch fromconfig))
         (found (cond ((stringp fc) fc)
                      ((functionp fc) (funcall fc))
-                     (t (error "Unknown dirmatch object match style.")))))
+                      (t (error "Unknown dirmatch object match style")))))
     (expand-file-name found)
     ))
 
@@ -129,7 +129,7 @@ into memory.")
 
      ;; Error if none others known
      (t
-      (error "Unknown dirmatch object match style.")))
+      (error "Unknown dirmatch object match style")))
     ))
 
 (declare-function ede-directory-safe-p "ede")
diff --git a/lisp/cedet/ede/base.el b/lisp/cedet/ede/base.el
index 103a37045c..004da6b95d 100644
--- a/lisp/cedet/ede/base.el
+++ b/lisp/cedet/ede/base.el
@@ -212,7 +212,7 @@ You can also use TRAMP for use with rcp & scp.")
                  :label "Web Page File"
                  :group name
                  :documentation
-                 "A file which contains the home page for this project.
+                  "A file which contains the website for this project.
 This file can be relative to slot `web-site-directory'.
 This can be a local file, use ange-ftp, EFS, or TRAMP.")
    (ftp-site :initarg :ftp-site
@@ -267,7 +267,7 @@ and target specific elements such as build variables.")
         '(
           [ "Update Version" ede-update-version ede-object ]
           [ "Version Control Status" ede-vc-project-directory ede-object ]
-          [ "Edit Project Homepage" ede-edit-web-page
+           [ "Edit Project Website" ede-edit-web-page
             (and ede-object (oref (ede-toplevel) web-site-file)) ]
           [ "Browse Project URL" ede-web-browse-home
             (and ede-object
diff --git a/lisp/cedet/ede/cpp-root.el b/lisp/cedet/ede/cpp-root.el
index 652d6476f0..fd37e53ed4 100644
--- a/lisp/cedet/ede/cpp-root.el
+++ b/lisp/cedet/ede/cpp-root.el
@@ -103,7 +103,7 @@
 ;;
 ;; If the cpp-root project style is right for you, but you want a
 ;; dynamic loader, instead of hard-coding values in your .emacs, you
-;; can do that too, but you will need to write some lisp code.
+;; can do that too, but you will need to write some Lisp code.
 ;;
 ;; To do that, you need to add an entry to the
 ;; `ede-project-class-files' list, and also provide two functions to
diff --git a/lisp/cedet/ede/makefile-edit.el b/lisp/cedet/ede/makefile-edit.el
index d696594549..709963d6fa 100644
--- a/lisp/cedet/ede/makefile-edit.el
+++ b/lisp/cedet/ede/makefile-edit.el
@@ -30,7 +30,7 @@
 ;; Formatting of a makefile
 ;;
 ;; 1) Creating an automakefile, stick in a top level comment about
-;;    being created by emacs
+;;    being created by Emacs.
 ;; 2) Leave order of variable contents alone, except for SOURCE
 ;;    SOURCE always keep in the order of .c, .h, the other stuff.
 
diff --git a/lisp/cedet/ede/proj-elisp.el b/lisp/cedet/ede/proj-elisp.el
index 7e0f5a8934..7a3b36f30f 100644
--- a/lisp/cedet/ede/proj-elisp.el
+++ b/lisp/cedet/ede/proj-elisp.el
@@ -54,8 +54,8 @@ load path."
 Each package name will be loaded with `require'.
 Each package's directory should also appear in :aux-packages via a package 
name.")
    )
-  "This target consists of a group of lisp files.
-A lisp target may be one general program with many separate lisp files in it.")
+  "This target consists of a group of Lisp files.
+A Lisp target may be one general program with many separate Lisp files in it.")
 
 (cl-defmethod ede-proj-makefile-insert-rules :after ((this 
ede-proj-target-elisp))
     "Insert rules needed by THIS target.
diff --git a/lisp/cedet/ede/proj.el b/lisp/cedet/ede/proj.el
index c8c34d092f..1352e5c193 100644
--- a/lisp/cedet/ede/proj.el
+++ b/lisp/cedet/ede/proj.el
@@ -562,7 +562,7 @@ Converts all symbols into the objects to be used."
          ;; Provide a good error msg.
          (unless comp
            (error "Could not find compiler match for source code extension 
\"%s\".
-You may need to add support for this type of file."
+You may need to add support for this type of file"
                   (if sources
                       (file-name-extension (car sources))
                     "")))
diff --git a/lisp/cedet/ede/project-am.el b/lisp/cedet/ede/project-am.el
index 258917f01b..e7f5640c07 100644
--- a/lisp/cedet/ede/project-am.el
+++ b/lisp/cedet/ede/project-am.el
@@ -130,7 +130,7 @@ other meta-variable based on this name.")
 (defclass project-am-program (project-am-objectcode)
   ((ldadd :initarg :ldadd :documentation "Additional LD args."
          :initform nil))
-  "A top level program to build")
+  "A top level program to build.")
 
 (defclass project-am-header (project-am-target)
   ()
@@ -154,7 +154,7 @@ other meta-variable based on this name.")
 
 (defclass project-am-lib (project-am-objectcode)
   nil
-  "A top level library to build")
+  "A top level library to build.")
 
 (defclass project-am-lisp (project-am-target)
   ()
@@ -705,7 +705,7 @@ Strip out duplicates, and recurse on variables."
   (oset this source (makefile-macro-file-list (project-am-macro this))))
 
 (cl-defmethod project-rescan ((this project-am-lisp))
-  "Rescan the lisp sources."
+  "Rescan the Lisp sources."
   (oset this source (makefile-macro-file-list (project-am-macro this))))
 
 (cl-defmethod project-rescan ((this project-am-header))
diff --git a/lisp/cedet/ede/source.el b/lisp/cedet/ede/source.el
index 5dbad4fcc0..338b03d25d 100644
--- a/lisp/cedet/ede/source.el
+++ b/lisp/cedet/ede/source.el
@@ -91,12 +91,12 @@ that they are willing to use.")
       (ede-want-file-auxiliary-p this filename)))
 
 (cl-defmethod ede-want-file-source-p ((this ede-sourcecode) filename)
-  "Return non-nil if THIS will take FILENAME as an auxiliary ."
+  "Return non-nil if THIS will take FILENAME as an auxiliary."
   (let ((case-fold-search nil))
     (string-match (oref this sourcepattern) filename)))
 
 (cl-defmethod ede-want-file-auxiliary-p ((this ede-sourcecode) filename)
-  "Return non-nil if THIS will take FILENAME as an auxiliary ."
+  "Return non-nil if THIS will take FILENAME as an auxiliary."
   (let ((case-fold-search nil))
     (and (slot-boundp this 'auxsourcepattern)
         (oref this auxsourcepattern)
diff --git a/lisp/cedet/ede/system.el b/lisp/cedet/ede/system.el
index 8ef38f0d33..1300ba9011 100644
--- a/lisp/cedet/ede/system.el
+++ b/lisp/cedet/ede/system.el
@@ -34,7 +34,7 @@
 
 ;;;###autoload
 (defun ede-web-browse-home ()
-  "Browse the home page of the current project."
+  "Browse the website of the current project."
   (interactive)
   (if (not (ede-toplevel))
       (error "No project"))
diff --git a/lisp/cedet/mode-local.el b/lisp/cedet/mode-local.el
index 247f78ecff..02d69a1686 100644
--- a/lisp/cedet/mode-local.el
+++ b/lisp/cedet/mode-local.el
@@ -773,11 +773,11 @@ SYMBOL is a function that can be overridden."
 (defconst xref-mode-local-find-overloadable-regexp
   "(define-overload\\(able-function\\)? +%s"
   "Regexp used by `xref-find-definitions' when searching for a
-  mode-local overloadable function definition.")
+mode-local overloadable function definition.")
 
 (defun xref-mode-local-find-override (meta-name)
   "Function used by `xref-find-definitions' when searching for an
-  override of a mode-local overloadable function.
+override of a mode-local overloadable function.
 META-NAME is a cons (OVERLOADABLE-SYMBOL . MAJOR-MODE)."
   (let* ((override (car meta-name))
         (mode (cdr meta-name))
diff --git a/lisp/cedet/semantic.el b/lisp/cedet/semantic.el
index fb443fa4a3..205d6a812a 100644
--- a/lisp/cedet/semantic.el
+++ b/lisp/cedet/semantic.el
@@ -271,7 +271,7 @@ a parse of the buffer.")
 (defsubst semantic-error-if-unparsed ()
   "Raise an error if current buffer was not parsed by Semantic."
   (unless semantic-new-buffer-fcn-was-run
-    (error "Buffer was not parsed by Semantic.")))
+    (error "Buffer was not parsed by Semantic")))
 
 (defsubst semantic--umatched-syntax-needs-refresh-p  ()
   "Return non-nil if the unmatched syntax cache needs a refresh.
diff --git a/lisp/cedet/semantic/analyze/complete.el 
b/lisp/cedet/semantic/analyze/complete.el
index ccf405d62e..1e8cd9af08 100644
--- a/lisp/cedet/semantic/analyze/complete.el
+++ b/lisp/cedet/semantic/analyze/complete.el
@@ -107,7 +107,7 @@ in a buffer."
     ;; Buffer was not parsed by Semantic.
     ;; Raise error if called interactively.
     (when (called-interactively-p 'any)
-      (error "Buffer was not parsed by Semantic."))))
+      (error "Buffer was not parsed by Semantic"))))
 
 (defvar semantic--prefixtypes)
 
diff --git a/lisp/cedet/semantic/bovine/c.el b/lisp/cedet/semantic/bovine/c.el
index e7ecb61513..c7d59def1f 100644
--- a/lisp/cedet/semantic/bovine/c.el
+++ b/lisp/cedet/semantic/bovine/c.el
@@ -1937,7 +1937,7 @@ For types with a :parent, create faux namespaces to put 
TAG into."
 
 (define-mode-local-override semanticdb-find-table-for-include c-mode
   (includetag &optional table)
-  "For a single INCLUDETAG found in TABLE, find a `semanticdb-table' object
+  "For a single INCLUDETAG found in TABLE, find a `semanticdb-table' object.
 INCLUDETAG is a semantic TAG of class `include'.
 TABLE is a semanticdb table that identifies where INCLUDETAG came from.
 TABLE is optional if INCLUDETAG has an overlay of :filename attribute.
@@ -2034,7 +2034,7 @@ for arguments compared."
   (if blankok t (semantic--tag-similar-names-p-default tag1 tag2 nil)))
 
 (define-mode-local-override semantic--tag-similar-types-p c-mode (tag1 tag2)
-  "For c-mode, deal with TAG1 and TAG2 being used in different namespaces.
+  "For `c-mode', deal with TAG1 and TAG2 being used in different namespaces.
 In this case, one type will be shorter than the other.  Instead
 of fully resolving all namespaces currently in scope for both
 types, we simply compare as many elements as the shorter type
@@ -2064,7 +2064,7 @@ provides."
 
 (define-mode-local-override semantic--tag-attribute-similar-p c-mode
   (attr value1 value2 ignorable-attributes)
-  "For c-mode, allow function :arguments to ignore the :name attributes."
+  "For `c-mode', allow function :arguments to ignore the :name attributes."
   (cond ((eq attr :arguments)
         (semantic--tag-attribute-similar-p-default attr value1 value2
                                                    (cons :name 
ignorable-attributes)))
diff --git a/lisp/cedet/semantic/bovine/debug.el 
b/lisp/cedet/semantic/bovine/debug.el
index 47850a5d1f..64ccbb4519 100644
--- a/lisp/cedet/semantic/bovine/debug.el
+++ b/lisp/cedet/semantic/bovine/debug.el
@@ -113,7 +113,7 @@ LEXTOKEN, is a token returned by the lexer which is being 
matched."
              :documentation
              "An error condition caught in an action.")
    )
-  "Debugger frame representation of a lisp error thrown during parsing.")
+  "Debugger frame representation of a Lisp error thrown during parsing.")
 
 (defun semantic-create-bovine-debug-error-frame (condition)
   "Create an error frame for bovine debugger.
diff --git a/lisp/cedet/semantic/complete.el b/lisp/cedet/semantic/complete.el
index d6ef796047..6cfbdd5f03 100644
--- a/lisp/cedet/semantic/complete.el
+++ b/lisp/cedet/semantic/complete.el
@@ -198,7 +198,7 @@ Argument COLLECTOR is an object which can be used to 
calculate
 a list of possible hits.  See `semantic-completion-collector-engine'
 for details on COLLECTOR.
 Argument DISPLAYER is an object used to display a list of possible
-completions for a given prefix.  See`semantic-completion-display-engine'
+completions for a given prefix.  See `semantic-completion-display-engine'
 for details on DISPLAYER.
 PROMPT is a string to prompt with.
 DEFAULT-TAG is a semantic tag or string to use as the default value.
@@ -746,7 +746,7 @@ Argument COLLECTOR is an object which can be used to 
calculate
 a list of possible hits.  See `semantic-completion-collector-engine'
 for details on COLLECTOR.
 Argument DISPLAYER is an object used to display a list of possible
-completions for a given prefix.  See`semantic-completion-display-engine'
+completions for a given prefix.  See `semantic-completion-display-engine'
 for details on DISPLAYER.
 BUFFER is the buffer in which completion will take place.
 START is a location for the start of the full symbol.
@@ -930,7 +930,7 @@ inserted into the current context.")
 
 (cl-defmethod semantic-collector-calculate-completions-raw
   ((obj semantic-collector-analyze-completions) prefix _completionlist)
-  "calculate the completions for prefix from COMPLETIONLIST."
+  "Calculate the completions for prefix from COMPLETIONLIST."
   ;; if there are no completions yet, calculate them.
   (if (not (slot-boundp obj 'first-pass-completions))
       (oset obj first-pass-completions
diff --git a/lisp/cedet/semantic/db-el.el b/lisp/cedet/semantic/db-el.el
index 41e48b0bc3..c9ae68e9fa 100644
--- a/lisp/cedet/semantic/db-el.el
+++ b/lisp/cedet/semantic/db-el.el
@@ -328,7 +328,7 @@ Like `semanticdb-find-tags-for-completion-method' for Emacs 
Lisp."
 ;;
 (cl-defmethod semanticdb-find-tags-external-children-of-type-method
   ((_table semanticdb-table-emacs-lisp) type &optional tags)
-  "Find all nonterminals which are child elements of TYPE
+  "Find all nonterminals which are child elements of TYPE.
 Optional argument TAGS is a list of tags to search.
 Return a list of tags."
   (if tags (cl-call-next-method)
diff --git a/lisp/cedet/semantic/db-find.el b/lisp/cedet/semantic/db-find.el
index c96a426280..61baaa020f 100644
--- a/lisp/cedet/semantic/db-find.el
+++ b/lisp/cedet/semantic/db-find.el
@@ -315,7 +315,7 @@ Default action as described in 
`semanticdb-find-translate-path'."
 
 ;;;###autoload
 (define-overloadable-function semanticdb-find-table-for-include (includetag 
&optional table)
-  "For a single INCLUDETAG found in TABLE, find a `semanticdb-table' object
+  "For a single INCLUDETAG found in TABLE, find a `semanticdb-table' object.
 INCLUDETAG is a semantic TAG of class `include'.
 TABLE is a semanticdb table that identifies where INCLUDETAG came from.
 TABLE is optional if INCLUDETAG has an overlay of :filename attribute."
diff --git a/lisp/cedet/semantic/db-typecache.el 
b/lisp/cedet/semantic/db-typecache.el
index c0fee3b2bd..03158171a2 100644
--- a/lisp/cedet/semantic/db-typecache.el
+++ b/lisp/cedet/semantic/db-typecache.el
@@ -547,8 +547,7 @@ found tag to be loaded."
 (cl-defmethod semanticdb-typecache-for-database ((db 
semanticdb-project-database)
                                              &optional mode)
   "Return the typecache for the project database DB.
-If there isn't one, create it.
-"
+If there isn't one, create it."
   (let ((lmode (or mode major-mode))
        (cache (semanticdb-get-typecache db))
        (stream nil)
diff --git a/lisp/cedet/semantic/debug.el b/lisp/cedet/semantic/debug.el
index 4f96746166..c13952265e 100644
--- a/lisp/cedet/semantic/debug.el
+++ b/lisp/cedet/semantic/debug.el
@@ -108,7 +108,7 @@ These buffers are brought into view when layout occurs.")
             :documentation
             "Any active overlays being used to show the debug position.")
    )
-  "Controls action when in `semantic-debug-mode'")
+  "Controls action when in `semantic-debug-mode'.")
 
 ;; Methods
 (cl-defmethod semantic-debug-set-frame ((iface semantic-debug-interface) frame)
@@ -559,10 +559,8 @@ down to your parser later."
 (cl-defmethod semantic-debug-parser-frames ((_parser semantic-debug-parser))
   "Return a list of frames for the current parser.
 A frame is of the form:
-  ( .. .what ? .. )
-"
-  (error "Parser has not implemented frame values")
-  )
+  ( .. .what ? .. )"
+  (error "Parser has not implemented frame values"))
 
 
 (provide 'semantic/debug)
diff --git a/lisp/cedet/semantic/decorate/include.el 
b/lisp/cedet/semantic/decorate/include.el
index a3bf4e252f..ae2895c2b9 100644
--- a/lisp/cedet/semantic/decorate/include.el
+++ b/lisp/cedet/semantic/decorate/include.el
@@ -66,7 +66,7 @@ Used by the decoration style: 
`semantic-decoration-on-includes'."
 (easy-menu-define
   semantic-decoration-on-include-menu
   semantic-decoration-on-include-map
-  "Include Menu"
+  "Include Menu."
   (list
    "Include"
    ["What Is This?" semantic-decoration-include-describe
@@ -124,7 +124,7 @@ Used by the decoration style: 
`semantic-decoration-on-unknown-includes'."
 (easy-menu-define
   semantic-decoration-on-unknown-include-menu
   semantic-decoration-on-unknown-include-map
-  "Unknown Include Menu"
+  "Unknown Include Menu."
   (list
    "Unknown Include"
    ["What Is This?" semantic-decoration-unknown-include-describe
@@ -179,7 +179,7 @@ Used by the decoration style: 
`semantic-decoration-on-fileless-includes'."
 (easy-menu-define
   semantic-decoration-on-fileless-include-menu
   semantic-decoration-on-fileless-include-map
-  "Fileless Include Menu"
+  "Fileless Include Menu."
   (list
    "Fileless Include"
    ["What Is This?" semantic-decoration-fileless-include-describe
@@ -234,7 +234,7 @@ Used by the decoration style: 
`semantic-decoration-on-unparsed-includes'."
 (easy-menu-define
   semantic-decoration-on-unparsed-include-menu
   semantic-decoration-on-unparsed-include-map
-  "Unparsed Include Menu"
+  "Unparsed Include Menu."
   (list
    "Unparsed Include"
    ["What Is This?" semantic-decoration-unparsed-include-describe
@@ -514,9 +514,7 @@ See the Semantic manual node on SemanticDB for more about 
search paths.")
 Argument EVENT describes the event that caused this function to be called."
   (interactive "e")
   (let* ((startwin (selected-window))
-        ;; This line has an issue in XEmacs.
-        (win (semantic-event-window event))
-        )
+         (win (semantic-event-window event)))
     (select-window win t)
     (save-excursion
       ;(goto-char (window-start win))
@@ -557,9 +555,7 @@ searches, but you cannot visit this include.\n\n")
 Argument EVENT describes the event that caused this function to be called."
   (interactive "e")
   (let* ((startwin (selected-window))
-        ;; This line has an issue in XEmacs.
-        (win (semantic-event-window event))
-        )
+         (win (semantic-event-window event)))
     (select-window win t)
     (save-excursion
       ;(goto-char (window-start win))
diff --git a/lisp/cedet/semantic/dep.el b/lisp/cedet/semantic/dep.el
index efebe21a94..0694b9c232 100644
--- a/lisp/cedet/semantic/dep.el
+++ b/lisp/cedet/semantic/dep.el
@@ -133,7 +133,7 @@ Changes made by this function are not persistent."
 ;;;###autoload
 (defun semantic-remove-system-include (dir &optional mode)
   "Add a system include DIR to path for MODE.
-Modifies a mode-local version of`semantic-dependency-system-include-path'.
+Modifies a mode-local version of `semantic-dependency-system-include-path'.
 
 Changes made by this function are not persistent."
   (interactive (list
diff --git a/lisp/cedet/semantic/ede-grammar.el 
b/lisp/cedet/semantic/ede-grammar.el
index 19d4184fa4..9a4d412d5d 100644
--- a/lisp/cedet/semantic/ede-grammar.el
+++ b/lisp/cedet/semantic/ede-grammar.el
@@ -185,7 +185,7 @@ max-lisp-eval-depth 700)'\n"
 
 (cl-defmethod ede-proj-makefile-insert-dist-dependencies ((this 
semantic-ede-proj-target-grammar))
   "Insert dist dependencies, or intermediate targets.
-This makes sure that all grammar lisp files are created before the dist
+This makes sure that all grammar Lisp files are created before the dist
 runs, so they are always up to date.
 Argument THIS is the target that should insert stuff."
   (cl-call-next-method)
diff --git a/lisp/cedet/semantic/fw.el b/lisp/cedet/semantic/fw.el
index 4ad70ff7c6..16e8ce8de9 100644
--- a/lisp/cedet/semantic/fw.el
+++ b/lisp/cedet/semantic/fw.el
@@ -284,7 +284,7 @@ later installation should be done in MODE hook."
 (defvar semantic-current-input-throw-symbol nil
   "The current throw symbol for `semantic-exit-on-input'.")
 (defvar semantic--on-input-start-marker nil
-  "The marker when starting a semantic-exit-on-input form.")
+  "The marker when starting a `semantic-exit-on-input' form.")
 
 (defmacro semantic-exit-on-input (symbol &rest forms)
   "Using SYMBOL as an argument to `throw', execute FORMS.
diff --git a/lisp/cedet/semantic/grammar.el b/lisp/cedet/semantic/grammar.el
index 4c3bb6c238..33c66da9a6 100644
--- a/lisp/cedet/semantic/grammar.el
+++ b/lisp/cedet/semantic/grammar.el
@@ -840,7 +840,7 @@ If optional argument FORCE is non-nil, unconditionally 
re-generate the
 Lisp code."
   (interactive "P")
   (unless (semantic-active-p)
-    (error "You have to activate semantic-mode to create a package."))
+    (error "You have to activate semantic-mode to create a package"))
   (setq force (or force current-prefix-arg))
   (semantic-fetch-tags)
   (let* (
diff --git a/lisp/cedet/semantic/idle.el b/lisp/cedet/semantic/idle.el
index b883573a30..b1805f720d 100644
--- a/lisp/cedet/semantic/idle.el
+++ b/lisp/cedet/semantic/idle.el
@@ -102,7 +102,6 @@ it is unlikely the user would be ready to type again right 
away."
 
 (defun semantic-idle-scheduler-setup-timers ()
   "Lazy initialization of the auto parse idle timer."
-  ;; REFRESH THIS FUNCTION for XEMACS FOIBLES
   (or (timerp semantic-idle-scheduler-timer)
       (setq semantic-idle-scheduler-timer
             (run-with-idle-timer
@@ -1071,7 +1070,7 @@ be called."
 (easy-menu-define
   semantic-idle-breadcrumbs-popup-menu
   semantic-idle-breadcrumbs-popup-map
-  "Semantic Breadcrumbs Mode Menu"
+  "Semantic Breadcrumbs Mode Menu."
   (list
    "Breadcrumb Tag"
    (vector
diff --git a/lisp/cedet/semantic/symref/grep.el 
b/lisp/cedet/semantic/symref/grep.el
index 180d779a78..53745b429a 100644
--- a/lisp/cedet/semantic/symref/grep.el
+++ b/lisp/cedet/semantic/symref/grep.el
@@ -39,7 +39,7 @@
    )
   "A symref tool implementation using grep.
 This tool uses EDE to find the root of the project, then executes
-find-grep in the project.  The output is parsed for hits and
+`find-grep' in the project.  The output is parsed for hits and
 those hits returned.")
 
 (defvar semantic-symref-filepattern-alist
@@ -87,7 +87,7 @@ Optional argument MODE specifies the `major-mode' to test."
         (if (null (cdr pat))
             args
           `("(" ,@args
-            ,@(mapcan (lambda (s) `("-o" "-name" ,s)) pat)
+            ,@(mapcan (lambda (s) `("-o" "-name" ,s)) (cdr pat))
             ")"))))))
 
 (defvar semantic-symref-grep-flags)
@@ -150,15 +150,8 @@ This shell should support pipe redirect syntax."
                            "-l ")
                           ((eq (oref tool searchtype) 'regexp)
                            "-nE ")
-                          (t "-n ")))
-         (greppat (cond ((eq (oref tool searchtype) 'regexp)
-                         (oref tool searchfor))
-                        (t
-                         ;; Can't use the word boundaries: Grep
-                         ;; doesn't always agree with the language
-                         ;; syntax on those.
-                         (format "\\(^\\|\\W\\)%s\\(\\W\\|$\\)"
-                                 (oref tool searchfor)))))
+                          (t "-nw ")))
+         (greppat (oref tool searchfor))
         ;; Misc
         (b (get-buffer-create "*Semantic SymRef*"))
         (ans nil)
diff --git a/lisp/cedet/semantic/symref/list.el 
b/lisp/cedet/semantic/symref/list.el
index 2e447bbc58..b1b36132b3 100644
--- a/lisp/cedet/semantic/symref/list.el
+++ b/lisp/cedet/semantic/symref/list.el
@@ -152,7 +152,7 @@ Display the references in `semantic-symref-results-mode'."
 
 (easy-menu-define semantic-symref-list-menu
   semantic-symref-results-mode-map
-  "Symref Mode Menu"
+  "Symref Mode Menu."
   semantic-symref-list-menu-entries)
 
 (defcustom semantic-symref-auto-expand-results nil
diff --git a/lisp/cedet/semantic/tag.el b/lisp/cedet/semantic/tag.el
index b6386d71db..a86ed020bb 100644
--- a/lisp/cedet/semantic/tag.el
+++ b/lisp/cedet/semantic/tag.el
@@ -119,8 +119,7 @@ Statement that represents a file from which more tags can 
be found.
 Statement that declares this file's package name.
 @item code
 Code that has not name or binding to any other symbol, such as in a script.
-@end table
-"
+@end table"
   (nth 1 tag))
 
 (defsubst semantic-tag-attributes (tag)
@@ -703,7 +702,7 @@ It is safe for FILTER to modify the input tag and return 
it."
 
 It is safe to modify ATTR, and return a permutation of that list.
 
-FILTER takes TAG as an argument, and should returns a semantic-tag.
+FILTER takes TAG as an argument, and should return a semantic-tag.
 It is safe for FILTER to modify the input tag and return it."
   (when (car attrs)
     (when (not (symbolp (car attrs))) (error "Bad Attribute List in tag"))
@@ -716,7 +715,7 @@ It is safe for FILTER to modify the input tag and return 
it."
 
 It is safe to modify VALUE, and return a permutation of that list.
 
-FILTER takes TAG as an argument, and should returns a semantic-tag.
+FILTER takes TAG as an argument, and should return a semantic-tag.
 It is safe for FILTER to modify the input tag and return it."
   (cond
    ;; Another tag.
@@ -735,7 +734,7 @@ It is safe for FILTER to modify the input tag and return 
it."
 
 It is safe to modify the TAGS list, and return a permutation of that list.
 
-FILTER takes TAG as an argument, and should returns a semantic-tag.
+FILTER takes TAG as an argument, and should return a semantic-tag.
 It is safe for FILTER to modify the input tag and return it."
   (when (car tags)
     (if (semantic-tag-p (car tags))
@@ -1309,12 +1308,12 @@ This function is overridable with the symbol 
`insert-foreign-tag'."
 ;;; Support log modes here
 (define-mode-local-override semantic-insert-foreign-tag
   log-edit-mode (foreign-tag)
-  "Insert foreign tags into log-edit mode."
+  "Insert foreign tags into `log-edit' mode."
   (insert (concat "(" (semantic-format-tag-name foreign-tag) "): ")))
 
 (define-mode-local-override semantic-insert-foreign-tag
   change-log-mode (foreign-tag)
-  "Insert foreign tags into log-edit mode."
+  "Insert foreign tags into `log-edit' mode."
   (insert (concat "(" (semantic-format-tag-name foreign-tag) "): ")))
 
 
diff --git a/lisp/cedet/semantic/util-modes.el 
b/lisp/cedet/semantic/util-modes.el
index 106862837a..5ce1108044 100644
--- a/lisp/cedet/semantic/util-modes.el
+++ b/lisp/cedet/semantic/util-modes.el
@@ -565,7 +565,7 @@ to indicate a parse in progress."
 (easy-menu-define
   semantic-stickyfunc-popup-menu
   semantic-stickyfunc-mode-map
-  "Stickyfunc Menu"
+  "Stickyfunc Menu."
   '("Stickyfunc Mode"  :visible (progn nil)
     [ "Copy Headerline Tag" senator-copy-tag
       :active (semantic-current-tag)
@@ -837,7 +837,7 @@ Used by `semantic-highlight-func-mode'.")
 (easy-menu-define
   semantic-highlight-func-popup-menu
   semantic-highlight-func-mode-map
-  "Highlight-Func Menu"
+  "Highlight-Func Menu."
   '("Highlight-Func Mode"  :visible (progn nil)
     [ "Copy Tag" senator-copy-tag
       :active (semantic-current-tag)
diff --git a/lisp/cedet/srecode/ctxt.el b/lisp/cedet/srecode/ctxt.el
index c49237b94c..fe887c281c 100644
--- a/lisp/cedet/srecode/ctxt.el
+++ b/lisp/cedet/srecode/ctxt.el
@@ -60,7 +60,7 @@ Some useful context values used by the provided srecode 
templates are:
            \"pure\" - and those virtual items are pure virtual
      \"type\"     - In or near type declarations.
      \"comment\"  - In a comment in a block of code
-     -- these items show up at the end of the context list. --
+     -- these items show up at the end of the context list.  --
      \"public\", \"protected\", \"private\" -
                   In or near a section of public/protected/private entries.
   \"code\" - In a block of code.
diff --git a/lisp/cedet/srecode/dictionary.el b/lisp/cedet/srecode/dictionary.el
index 5da045e17f..d6dfc58411 100644
--- a/lisp/cedet/srecode/dictionary.el
+++ b/lisp/cedet/srecode/dictionary.el
@@ -410,7 +410,7 @@ OTHERDICT."
   "Return information about DICT's value for NAME.
 DICT is a dictionary, and NAME is a string that is treated as the
 name of an entry in the dictionary.  If such an entry exists, its
-value is returned.  Otherwise, nil is returned. Normally, the
+value is returned.  Otherwise, nil is returned.  Normally, the
 lookup is recursive in the sense that the parent of DICT is
 searched for NAME if it is not found in DICT.  This recursive
 lookup can be disabled by the optional argument NON-RECURSIVE.
diff --git a/lisp/cedet/srecode/semantic.el b/lisp/cedet/srecode/semantic.el
index 101246cae6..fbb6984dc1 100644
--- a/lisp/cedet/srecode/semantic.el
+++ b/lisp/cedet/srecode/semantic.el
@@ -201,7 +201,7 @@ variable default values, and other things."
   (let ((tag (or srecode-semantic-selected-tag
                 (srecode-semantic-tag-from-kill-ring))))
     (when (not tag)
-      (error "No tag for current template.  Use the semantic kill-ring."))
+      (error "No tag for current template.  Use the semantic kill-ring"))
     (srecode-semantic-apply-tag-to-dict
      (srecode-semantic-tag (semantic-tag-name tag)
                           :prime tag)
diff --git a/lisp/cmuscheme.el b/lisp/cmuscheme.el
index 18087da9ac..0910ea6187 100644
--- a/lisp/cmuscheme.el
+++ b/lisp/cmuscheme.el
@@ -33,15 +33,15 @@
 ;; merge them into the master source.
 ;;
 ;; NOTE: MIT Cscheme, when invoked with the -emacs flag, has a special user
-;; interface that communicates process state back to the superior emacs by
+;; interface that communicates process state back to the superior Emacs by
 ;; outputting special control sequences.  The Emacs package, xscheme.el, has
 ;; lots and lots of special purpose code to read these control sequences, and
 ;; so is very tightly integrated with the cscheme process.  The cscheme
 ;; interrupt handler and debugger read single character commands in cbreak
 ;; mode; when this happens, xscheme.el switches to special keymaps that bind
-;; the single letter command keys to emacs functions that directly send the
+;; the single letter command keys to Emacs functions that directly send the
 ;; character to the scheme process.  Cmuscheme mode does *not* provide this
-;; functionality. If you are a cscheme user, you may prefer to use the
+;; functionality.  If you are a cscheme user, you may prefer to use the
 ;; xscheme.el/cscheme -emacs interaction.
 ;;
 ;; Here's a summary of the pros and cons, as I see them.
@@ -159,7 +159,7 @@
 The following commands are available:
 \\{inferior-scheme-mode-map}
 
-A Scheme process can be fired up with M-x run-scheme.
+A Scheme process can be fired up with \\[run-scheme].
 
 Customization: Entry to this mode runs the hooks on `comint-mode-hook' and
 `inferior-scheme-mode-hook' (in that order).
diff --git a/lisp/comint.el b/lisp/comint.el
index 02878cc641..56d4420e60 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -191,7 +191,7 @@ wish to put something like the following in your init file:
             (define-key comint-mode-map [remap kill-whole-line]
               \\='comint-kill-whole-line)))
 
-If you sometimes use comint-mode on text-only terminals or with `emacs -nw',
+If you sometimes use `comint-mode' on text-only terminals or with `emacs -nw',
 you might wish to use another binding for `comint-kill-whole-line'."
   :type 'boolean
   :group 'comint
diff --git a/lisp/completion.el b/lisp/completion.el
index 93a869e86f..e36c722841 100644
--- a/lisp/completion.el
+++ b/lisp/completion.el
@@ -178,7 +178,7 @@
 ;;    Inserts a completion at point
 ;;
 ;;  completion-initialize
-;;    Loads the completions file and sets up so that exiting emacs will
+;;    Loads the completions file and sets up so that exiting Emacs will
 ;;  save them.
 ;;
 ;;  save-completions-to-file &optional filename
@@ -207,7 +207,7 @@
 ;;   Add package prefix smarts (for Common Lisp)
 ;;   Add autoprompting of possible completions after every keystroke (fast
 ;;      terminals only !)
-;;   Add doc. to texinfo
+;;   Add documentation to texinfo
 ;;
 ;;
 ;;-----------------------------------------------
diff --git a/lisp/composite.el b/lisp/composite.el
index 6f654df15a..a16c0cc237 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -864,7 +864,7 @@ Auto Composition mode in all buffers (this is the default)."
   "Toggle Auto Composition mode in all buffers.
 
 For more information on Auto Composition mode, see
-`auto-composition-mode' ."
+`auto-composition-mode'."
   :global t
   :variable (default-value 'auto-composition-mode))
 
diff --git a/lisp/delim-col.el b/lisp/delim-col.el
index cd945d8de4..ac78e568da 100644
--- a/lisp/delim-col.el
+++ b/lisp/delim-col.el
@@ -5,7 +5,7 @@
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Old-Version: 2.1
 ;; Keywords: convenience text
-;; X-URL: https://www.emacswiki.org/emacs/ViniciusJoseLatorre
+;; URL: https://www.emacswiki.org/emacs/ViniciusJoseLatorre
 
 ;; This file is part of GNU Emacs.
 
@@ -276,7 +276,7 @@ See the `delimit-columns-str-before',
 `delimit-columns-before', `delimit-columns-after',
 `delimit-columns-separator', `delimit-columns-format' and
 `delimit-columns-extra' variables for customization of the
-look. "
+look."
   (interactive "*r")
   (if rectangle-mark-mode
       ;; Delegate to delimit-columns-rectangle when called with a
diff --git a/lisp/descr-text.el b/lisp/descr-text.el
index f5e467d37e..7ab90d08ac 100644
--- a/lisp/descr-text.el
+++ b/lisp/descr-text.el
@@ -97,7 +97,7 @@ into help buttons that call `describe-text-category' or
 ;;; Describe-Text Commands.
 
 (defun describe-text-category (category)
-  "Describe a text property category."
+  "Describe a text property CATEGORY."
   (interactive "SCategory: ")
   (help-setup-xref (list #'describe-text-category category)
                   (called-interactively-p 'interactive))
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index c728642917..53fbcfb6d0 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -2340,9 +2340,9 @@ If DIRECTORY already exists, signal an error."
 ;;;###autoload
 (defun dired-create-empty-file (file)
   "Create an empty file called FILE.
- Add a new entry for the new file in the Dired buffer.
- Parent directories of FILE are created as needed.
- If FILE already exists, signal an error."
+Add a new entry for the new file in the Dired buffer.
+Parent directories of FILE are created as needed.
+If FILE already exists, signal an error."
   (interactive (list (read-file-name "Create empty file: ")))
   (let* ((expanded (expand-file-name file))
          new)
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index 380e47786f..9f9f170173 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -340,8 +340,8 @@ A `.' is automatically prepended to EXTENSION when not 
present.
 EXTENSION may also be a list of extensions instead of a single one.
 Optional MARKER-CHAR is marker to use.
 Interactively, ask for EXTENSION.
-Prefixed with one C-u, unmark files instead.
-Prefixed with two C-u's, prompt for MARKER-CHAR and mark files with it."
+Prefixed with one \\[universal-argument], unmark files instead.
+Prefixed with two \\[universal-argument]'s, prompt for MARKER-CHAR and mark 
files with it."
   (interactive (dired--mark-suffix-interactive-spec))
   (unless (listp extension)
     (setq extension (list extension)))
@@ -365,8 +365,8 @@ prepends `.' when not present.
 SUFFIX may also be a list of suffixes instead of a single one.
 Optional MARKER-CHAR is marker to use.
 Interactively, ask for SUFFIX.
-Prefixed with one C-u, unmark files instead.
-Prefixed with two C-u's, prompt for MARKER-CHAR and mark files with it."
+Prefixed with one \\[universal-argument], unmark files instead.
+Prefixed with two \\[universal-argument]'s, prompt for MARKER-CHAR and mark 
files with it."
   (interactive (dired--mark-suffix-interactive-spec))
   (unless (listp suffix)
     (setq suffix (list suffix)))
diff --git a/lisp/dired.el b/lisp/dired.el
index 958677cd0c..266a03e6cc 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -315,12 +315,12 @@ new Dired buffers."
 
 (defcustom dired-always-read-filesystem nil
   "Non-nil means revert buffers visiting files before searching them.
- By default,  commands like `dired-mark-files-containing-regexp' will
- search any buffers visiting the marked files without reverting them,
- even if they were changed on disk.  When this option is non-nil, such
- buffers are always reverted in a temporary buffer before searching
- them: the search is performed on the temporary buffer, the original
- buffer visiting the file is not modified."
+By default,  commands like `dired-mark-files-containing-regexp' will
+search any buffers visiting the marked files without reverting them,
+even if they were changed on disk.  When this option is non-nil, such
+buffers are always reverted in a temporary buffer before searching
+them: the search is performed on the temporary buffer, the original
+buffer visiting the file is not modified."
   :type 'boolean
   :version "26.1"
   :group 'dired)
@@ -1019,27 +1019,27 @@ If DIRNAME is already in a Dired buffer, that buffer is 
used without refresh."
 ;;;###autoload (define-key ctl-x-4-map "d" 'dired-other-window)
 ;;;###autoload
 (defun dired-other-window (dirname &optional switches)
-  "\"Edit\" directory DIRNAME.  Like `dired' but selects in another window."
+  "\"Edit\" directory DIRNAME.  Like `dired' but select in another window."
   (interactive (dired-read-dir-and-switches "in other window "))
   (switch-to-buffer-other-window (dired-noselect dirname switches)))
 
 ;;;###autoload (define-key ctl-x-5-map "d" 'dired-other-frame)
 ;;;###autoload
 (defun dired-other-frame (dirname &optional switches)
-  "\"Edit\" directory DIRNAME.  Like `dired' but makes a new frame."
+  "\"Edit\" directory DIRNAME.  Like `dired' but make a new frame."
   (interactive (dired-read-dir-and-switches "in other frame "))
   (switch-to-buffer-other-frame (dired-noselect dirname switches)))
 
 ;;;###autoload (define-key tab-prefix-map "d" 'dired-other-tab)
 ;;;###autoload
 (defun dired-other-tab (dirname &optional switches)
-  "\"Edit\" directory DIRNAME.  Like `dired' but makes a new tab."
+  "\"Edit\" directory DIRNAME.  Like `dired' but make a new tab."
   (interactive (dired-read-dir-and-switches "in other tab "))
   (switch-to-buffer-other-tab (dired-noselect dirname switches)))
 
 ;;;###autoload
 (defun dired-noselect (dir-or-list &optional switches)
-  "Like `dired' but returns the Dired buffer as value, does not select it."
+  "Like `dired' but return the Dired buffer as value, do not select it."
   (or dir-or-list (setq dir-or-list default-directory))
   ;; This loses the distinction between "/foo/*/" and "/foo/*" that
   ;; some shells make:
@@ -1616,7 +1616,7 @@ see `dired-use-ls-dired' for more details.")
       (dired-insert-set-properties content-point (point)))))
 
 (defun dired-insert-set-properties (beg end)
-  "Add various text properties to the lines in the region."
+  "Add various text properties to the lines in the region, from BEG to END."
   (save-excursion
     (goto-char beg)
     (while (< (point) end)
@@ -2193,8 +2193,9 @@ Do so according to the former subdir alist 
OLD-SUBDIR-ALIST."
     ["Delete Image Tag..." image-dired-delete-tag
      :help "Delete image tag from current or marked files"]))
 
-(defun dired-context-menu (menu)
-  (when (mouse-posn-property (event-start last-input-event) 'dired-filename)
+(defun dired-context-menu (menu click)
+  "Populate MENU with Dired mode commands at CLICK."
+  (when (mouse-posn-property (event-start click) 'dired-filename)
     (define-key menu [dired-separator] menu-bar-separator)
     (let ((easy-menu (make-sparse-keymap "Immediate")))
       (easy-menu-define nil easy-menu nil
@@ -2878,7 +2879,7 @@ If SUBDIRS is non-nil, also include the dired buffers of
 directories below DIR.
 The list is in reverse order of buffer creation, most recent last.
 As a side effect, killed dired buffers for DIR are removed from
-dired-buffers."
+`dired-buffers'."
   (setq dir (file-name-as-directory dir))
   (let (result buf)
     (dolist (elt dired-buffers)
@@ -4190,7 +4191,7 @@ The idea is to set this buffer-locally in special Dired 
buffers.")
 (defcustom dired-switches-in-mode-line nil
   "How to indicate `dired-actual-switches' in mode-line.
 Possible values:
- * `nil':    Indicate name-or-date sort order, if possible.
+ * nil:      Indicate name-or-date sort order, if possible.
              Else show full switches.
  * `as-is':  Show full switches.
  * Integer:  Show only the first N chars of full switches.
diff --git a/lisp/dnd.el b/lisp/dnd.el
index e641b2843a..44316154b0 100644
--- a/lisp/dnd.el
+++ b/lisp/dnd.el
@@ -77,7 +77,7 @@ and is the default except for MS-Windows."
 
 
 (defcustom dnd-open-file-other-window nil
-  "If non-nil, always use find-file-other-window to open dropped files."
+  "If non-nil, always use `find-file-other-window' to open dropped files."
   :version "22.1"
   :type 'boolean)
 
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index a0ffcac9f8..0896bd13eb 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -41,7 +41,7 @@
 ;;
 ;;     C-x C-f ~/path/to/document RET
 ;;
-;; and the document will be converted and displayed, if your emacs supports PNG
+;; and the document will be converted and displayed, if your Emacs supports PNG
 ;; images.  With `C-c C-c' you can toggle between the rendered images
 ;; representation and the source text representation of the document.
 ;;
@@ -788,7 +788,7 @@ OpenDocument format)."
         (doc-view-reconvert-doc)))))
 
 (defun doc-view-shrink (factor)
-  "Shrink the document."
+  "Shrink the document by FACTOR."
   (interactive (list doc-view-shrink-factor))
   (doc-view-enlarge (/ 1.0 factor)))
 
@@ -809,7 +809,7 @@ OpenDocument format)."
 FACTOR defaults to `doc-view-shrink-factor'.
 
 The actual adjustment made depends on the final component of the
-key-binding used to invoke the command, with all modifiers removed:
+keybinding used to invoke the command, with all modifiers removed:
 
    +, =   Increase the image scale by FACTOR
    -      Decrease the image scale by FACTOR
@@ -1197,7 +1197,7 @@ Start by converting PAGES, and then the rest."
 
 (defun doc-view-current-cache-doc-pdf ()
   "Return the name of the doc.pdf in the current cache dir.
-  This file exists only if the current document isn't a PDF or PS file 
already."
+This file exists only if the current document isn't a PDF or PS file already."
   (expand-file-name "doc.pdf" (doc-view--current-cache-dir)))
 
 (defun doc-view-doc->txt (txt callback)
diff --git a/lisp/dos-fns.el b/lisp/dos-fns.el
index e0a533c637..07c77faa23 100644
--- a/lisp/dos-fns.el
+++ b/lisp/dos-fns.el
@@ -290,14 +290,14 @@ and `dos-set-register-value', which see."
 ;; set screen size.
 
 (defun dos-mode25 ()
-  "Changes the number of screen rows to 25."
+  "Change the number of screen rows to 25."
   (interactive)
   (set-frame-size (selected-frame) 80 25))
 
 (define-obsolete-function-alias 'mode25 'dos-mode25 "24.1")
 
 (defun dos-mode4350 ()
-  "Changes the number of rows to 43 or 50.
+  "Change the number of rows to 43 or 50.
 Emacs always tries to set the screen height to 50 rows first.
 If this fails, it will try to set it to 43 rows, on the assumption
 that your video hardware might not support 50-line mode."
diff --git a/lisp/edmacro.el b/lisp/edmacro.el
index e18aad1c3f..8ee413acd0 100644
--- a/lisp/edmacro.el
+++ b/lisp/edmacro.el
@@ -337,7 +337,7 @@ or nil, use a compact 80-column format."
        (funcall finish-hook)))))
 
 (defun edmacro-insert-key (key)
-  "Insert the written name of a key in the buffer."
+  "Insert the written name of a KEY in the buffer."
   (interactive "kKey to insert: ")
   (if (bolp)
       (insert (edmacro-format-keys key t) "\n")
diff --git a/lisp/elec-pair.el b/lisp/elec-pair.el
index d8c377a2ef..82db8dbfc7 100644
--- a/lisp/elec-pair.el
+++ b/lisp/elec-pair.el
@@ -238,9 +238,9 @@ inside a comment or string."
     (self-insert-command 1)))
 
 (cl-defmacro electric-pair--with-uncached-syntax ((table &optional start) 
&rest body)
-  "Like `with-syntax-table', but flush the syntax-ppss cache afterwards.
+  "Like `with-syntax-table', but flush the `syntax-ppss' cache afterwards.
 Use this instead of (with-syntax-table TABLE BODY) when BODY
-contains code which may update the syntax-ppss cache.  This
+contains code which may update the `syntax-ppss' cache.  This
 includes calling `parse-partial-sexp' and any sexp-based movement
 functions when `parse-sexp-lookup-properties' is non-nil.  The
 cache is flushed from position START, defaulting to point."
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index 8e8d0e2265..1f276c7f7a 100644
--- a/lisp/emacs-lisp/advice.el
+++ b/lisp/emacs-lisp/advice.el
@@ -36,12 +36,12 @@
 ;; @ Introduction:
 ;; ===============
 ;; This package implements a full-fledged Lisp-style advice mechanism
-;; for Emacs Lisp. Advice is a clean and efficient way to modify the
+;; for Emacs Lisp.  Advice is a clean and efficient way to modify the
 ;; behavior of Emacs Lisp functions without having to keep  personal
-;; modified copies of such functions around. A great number of such
+;; modified copies of such functions around.  A great number of such
 ;; modifications can be achieved by treating the original function as a
 ;; black box and specifying a different execution environment for it
-;; with a piece of advice. Think of a piece of advice as a kind of fancy
+;; with a piece of advice.  Think of a piece of advice as a kind of fancy
 ;; hook that you can attach to any function/macro/subr.
 
 ;; @ Highlights:
@@ -95,7 +95,7 @@
 ;; @ Restrictions:
 ;; ===============
 ;; - Advised functions/macros/subrs will only exhibit their advised behavior
-;;   when they are invoked via their function cell. This means that advice will
+;;   when they are invoked via their function cell.  This means that advice 
will
 ;;   not work for the following:
 ;;   + advised subrs that are called directly from other subrs or C-code
 ;;   + advised subrs that got replaced with their byte-code during
@@ -107,7 +107,7 @@
 ;; ==========
 ;; This package is an extension and generalization of packages such as
 ;; insert-hooks.el written by Noah S. Friedman, and advise.el written by
-;; Raul J. Acevedo. Some ideas used in here come from these packages,
+;; Raul J. Acevedo.  Some ideas used in here come from these packages,
 ;; others come from the various Lisp advice mechanisms I've come across
 ;; so far, and a few are simply mine.
 
@@ -235,10 +235,10 @@
 ;; found in the list of before/around/after advices will be used.
 
 ;; <flags> is a list of symbols that specify further information about the
-;; advice. All flags can be specified with unambiguous initial substrings.
+;; advice.  All flags can be specified with unambiguous initial substrings.
 ;;   `activate': Specifies that the advice information of the advised
 ;;              function should be activated right after this advice has been
-;;              defined. In forward advices `activate' will be ignored.
+;;              defined.  In forward advices `activate' will be ignored.
 ;;   `protect': Specifies that this advice should be protected against
 ;;              non-local exits and errors in preceding code/advices.
 ;;   `compile': Specifies that the advised function should be byte-compiled.
@@ -347,7 +347,7 @@
 ;; argument list redefinition given in a piece of advice.  While this simple
 ;; method might be sufficient in many cases, it has the disadvantage that it
 ;; is not very portable because it hardcodes the argument names into the
-;; advice. If the definition of the original function changes the advice
+;; advice.  If the definition of the original function changes the advice
 ;; might break even though the code might still be correct.  Situations like
 ;; that arise, for example, if one advises a subr like `eval-region' which
 ;; gets redefined in a non-advice style into a function by the edebug
@@ -443,7 +443,7 @@
 ;; of the advised function we need a mapping mechanism that maps this
 ;; argument list onto that of the original function.  Hence SYM and
 ;; NEWDEF have to be properly mapped onto the &rest variable when the
-;; original definition is called. Advice automatically takes care of
+;; original definition is called.  Advice automatically takes care of
 ;; that mapping, hence, the advice programmer can specify an argument
 ;; list without having to know about the exact structure of the
 ;; original argument list as long as the new argument list takes a
@@ -467,7 +467,7 @@
 ;; The advised definition will get compiled either if `ad-activate' was called
 ;; interactively with a prefix argument, or called explicitly with its second
 ;; argument as t, or, if `ad-default-compilation-action' justifies it according
-;; to the current system state. If the advised definition was
+;; to the current system state.  If the advised definition was
 ;; constructed during "preactivation" (see below) then that definition will
 ;; be already compiled because it was constructed during byte-compilation of
 ;; the file that contained the `defadvice' with the `preactivate' flag.
@@ -707,7 +707,7 @@
 ;; @@ Adding a piece of advice with `ad-add-advice':
 ;; =================================================
 ;; The non-interactive function `ad-add-advice' can be used to add a piece of
-;; advice to some function without using `defadvice'. This is useful if advice
+;; advice to some function without using `defadvice'.  This is useful if advice
 ;; has to be added somewhere by a function (also look at `ad-make-advice').
 
 ;; @@ Activation/deactivation advices, file load hooks:
@@ -739,7 +739,7 @@
 ;;     A piece of advice gets defined with `defadvice' and added to the
 ;;     `advice-info' property of a function.
 ;; - Enablement:
-;;     Every piece of advice has an enablement flag associated with it. Only
+;;     Every piece of advice has an enablement flag associated with it.  Only
 ;;     enabled advices are considered during construction of an advised
 ;;     definition.
 ;; - Activation:
@@ -808,9 +808,9 @@
 ;;                     argument access text macros to get/set the values of
 ;;                     actual arguments at a certain position
 ;;   ad-arg-bindings   text macro that returns the actual names, values
-;;                     and types of the arguments as a list of bindings. The
+;;                     and types of the arguments as a list of bindings.  The
 ;;                     order of the bindings corresponds to the order of the
-;;                     arguments. The individual fields of every binding (name,
+;;                     arguments.  The individual fields of every binding 
(name,
 ;;                     value and type) can be accessed with the function
 ;;                     `ad-arg-binding-field' (see example above).
 ;;   ad-do-it          text macro that identifies the place where the original
@@ -839,20 +839,20 @@
 ;; use the macro `defadvice' which takes a function name, a list of advice
 ;; specifiers and a list of body forms as arguments.  The first element of
 ;; the advice specifiers is the class of the advice, the second is its name,
-;; the third its position and the rest are some flags. The class of our
+;; the third its position and the rest are some flags.  The class of our
 ;; first advice is `before', its name is `fg-add2', its position among the
 ;; currently defined before advices (none so far) is `first', and the advice
-;; will be `activate'ed immediately. Advice names are global symbols, hence,
-;; the name space conventions used for function names should be applied. All
+;; will be `activate'ed immediately.  Advice names are global symbols, hence,
+;; the name space conventions used for function names should be applied.  All
 ;; advice names in this tutorial will be prefixed with `fg' for `Foo Games'
 ;; (because everybody has the right to be inconsistent all the function names
 ;; used in this tutorial do NOT follow this convention).
 ;;
 ;; In the body of an advice we can refer to the argument variables of the
-;; original function by name. Here we add 1 to X so the effect of calling
+;; original function by name.  Here we add 1 to X so the effect of calling
 ;; `foo' will be to actually add 2. All of the advice definitions below only
 ;; have one body form for simplicity, but there is no restriction to that
-;; extent. Every piece of advice can have a documentation string which will
+;; extent.  Every piece of advice can have a documentation string which will
 ;; be combined with the documentation of the original function.
 ;;
 ;; (defadvice foo (before fg-add2 first activate)
@@ -866,11 +866,11 @@
 ;; @@ Specifying the position of an advice:
 ;; ========================================
 ;; Now we define the second before advice which will cancel the effect of
-;; the previous advice. This time we specify the position as 0 which is
-;; equivalent to `first'. A number can be used to specify the zero-based
-;; position of an advice among the list of advices in the same class. This
+;; the previous advice.  This time we specify the position as 0 which is
+;; equivalent to `first'.  A number can be used to specify the zero-based
+;; position of an advice among the list of advices in the same class.  This
 ;; time we already have one before advice hence the position specification
-;; actually has an effect. So, after the following definition the position
+;; actually has an effect.  So, after the following definition the position
 ;; of the previous advice will be 1 even though we specified it with `first'
 ;; above, the reason for this is that the position argument is relative to
 ;; the currently defined pieces of advice which by now has changed.
@@ -886,7 +886,7 @@
 ;; @@ Redefining a piece of advice:
 ;; ================================
 ;; Now we define an advice with the same class and same name but with a
-;; different position. Defining an advice in a class in which an advice with
+;; different position.  Defining an advice in a class in which an advice with
 ;; that name already exists is interpreted as a redefinition of that
 ;; particular advice, in which case the position argument will be ignored
 ;; and the previous position of the redefined piece of advice is used.
@@ -919,7 +919,7 @@
 ;; =================================
 ;; We can make a function interactive (or change its interactive behavior)
 ;; by specifying an interactive form in one of the before or around
-;; advices (there could also be body forms in this advice). The particular
+;; advices (there could also be body forms in this advice).  The particular
 ;; definition always assigns 5 as an argument to X which gives us 6 as a
 ;; result when we call foo interactively:
 ;;
@@ -945,13 +945,13 @@
 ;;
 ;; @@ Around advices:
 ;; ==================
-;; Now we'll try some `around' advices. An around advice is a wrapper around
-;; the original definition. It can shadow or establish bindings for the
+;; Now we'll try some `around' advices.  An around advice is a wrapper around
+;; the original definition.  It can shadow or establish bindings for the
 ;; original definition, and it can look at and manipulate the value returned
-;; by the original function. The position of the special keyword `ad-do-it'
-;; specifies where the code of the original function will be executed. The
+;; by the original function.  The position of the special keyword `ad-do-it'
+;; specifies where the code of the original function will be executed.  The
 ;; keyword can appear multiple times which will result in multiple calls of
-;; the original function in the resulting advised code. Note, that if we don't
+;; the original function in the resulting advised code.  Note, that if we don't
 ;; specify a position argument (i.e., `first', `last' or a number), then
 ;; `first' (or 0) is the default):
 ;;
@@ -967,7 +967,7 @@
 ;; Around advices are assembled like onion skins where the around advice
 ;; with position 0 is the outermost skin and the advice at the last position
 ;; is the innermost skin which is directly wrapped around the call of the
-;; original definition of the function. Hence, after the next `defadvice' we
+;; original definition of the function.  Hence, after the next `defadvice' we
 ;; will first multiply X by 2 then add 1 and then call the original
 ;; definition (i.e., add 1 again):
 ;;
@@ -984,8 +984,8 @@
 ;; =================================
 ;; In every `defadvice' so far we have used the flag `activate' to activate
 ;; the advice immediately after its definition, and that's what we want in
-;; most cases. However, if we define multiple pieces of advice for a single
-;; function then activating every advice immediately is inefficient. A
+;; most cases.  However, if we define multiple pieces of advice for a single
+;; function then activating every advice immediately is inefficient.  A
 ;; better way to do this is to only activate the last defined advice.
 ;; For example:
 ;;
@@ -1077,7 +1077,7 @@
 ;; neutralize the effect of the advice of one of the packages.
 ;;
 ;; The following disables the after advice `fg-times-x' in the function `foo'.
-;; All that does is to change a flag for this particular advice. All the
+;; All that does is to change a flag for this particular advice.  All the
 ;; other information defining it will be left unchanged (e.g., its relative
 ;; position in this advice class, etc.).
 ;;
@@ -1094,9 +1094,9 @@
 ;; 24
 ;;
 ;; If we want to disable all multiplication advices in `foo' we can use a
-;; regular expression that matches the names of such advices. Actually, any
+;; regular expression that matches the names of such advices.  Actually, any
 ;; advice name that contains a match for the regular expression will be
-;; called a match. A special advice class `any' can be used to consider
+;; called a match.  A special advice class `any' can be used to consider
 ;; all advice classes:
 ;;
 ;; (ad-disable-advice 'foo 'any "^fg-.*times")
@@ -1122,7 +1122,7 @@
 ;; 9
 ;;
 ;; The following will activate all currently active advised functions that
-;; contain some advice matched by the regular expression. This is a save
+;; contain some advice matched by the regular expression.  This is a save
 ;; way to update the activation of advised functions whose advice changed
 ;; in some way or other without accidentally also activating currently
 ;; inactive functions:
@@ -1136,7 +1136,7 @@
 ;;
 ;; Another use for the dis/enablement mechanism is to define a piece of advice
 ;; and keep it "dormant" until a particular condition is satisfied, i.e., until
-;; then the advice will not be used during activation. The `disable' flag lets
+;; then the advice will not be used during activation.  The `disable' flag lets
 ;; one do that with `defadvice':
 ;;
 ;; (defadvice foo (before fg-1-more dis)
@@ -1165,7 +1165,7 @@
 ;; ===========
 ;; Advised definitions get cached to allow efficient activation/deactivation
 ;; without having to reconstruct them if nothing in the advice-info of a
-;; function has changed. The following idiom can be used to temporarily
+;; function has changed.  The following idiom can be used to temporarily
 ;; deactivate functions that have a piece of advice defined by a certain
 ;; package (we save the old definition to check out caching):
 ;;
@@ -1350,9 +1350,9 @@
 ;; @@ Portable argument access:
 ;; ============================
 ;; So far, we always used the actual argument variable names to access an
-;; argument in a piece of advice. For many advice applications this is
-;; perfectly ok and keeps advices simple. However, it decreases portability
-;; of advices because it assumes specific argument variable names. For example,
+;; argument in a piece of advice.  For many advice applications this is
+;; perfectly ok and keeps advices simple.  However, it decreases portability
+;; of advices because it assumes specific argument variable names.  For 
example,
 ;; if one advises a subr such as `eval-region' which then gets redefined by
 ;; some package (e.g., edebug) into a function with different argument names,
 ;; then a piece of advice written for `eval-region' that was written with
@@ -1360,7 +1360,7 @@
 ;;
 ;; Argument access text macros allow one to access arguments of an advised
 ;; function in a portable way without having to worry about all these
-;; possibilities. These macros will be translated into the proper access forms
+;; possibilities.  These macros will be translated into the proper access forms
 ;; at activation time, hence, argument access will be as efficient as if
 ;; the arguments had been used directly in the definition of the advice.
 ;;
@@ -1386,7 +1386,7 @@
 ;; (fuu 1 1 1)
 ;; 6
 ;;
-;; Now suppose somebody redefines `fuu' with a rest argument. Our advice
+;; Now suppose somebody redefines `fuu' with a rest argument.  Our advice
 ;; will still work because we used access macros (note, that automatic
 ;; advice activation is still in effect, hence, the redefinition of `fuu'
 ;; will automatically activate all its advice):
@@ -1444,9 +1444,9 @@
 ;; give it an extra argument that controls the advised code, for example, one
 ;; might want to make an interactive function sensitive to a prefix argument.
 ;; For such cases `defadvice' allows the specification of an argument list
-;; for the advised function. Similar to the redefinition of interactive
+;; for the advised function.  Similar to the redefinition of interactive
 ;; behavior, the first argument list specification found in the list of before/
-;; around/after advices will be used. Of course, the specified argument list
+;; around/after advices will be used.  Of course, the specified argument list
 ;; should be downward compatible with the original argument list, otherwise
 ;; functions that call the advised function with the original argument list
 ;; in mind will break.
@@ -1457,9 +1457,9 @@
 ;; fii
 ;;
 ;; Now we advise `fii' to use an optional second argument that controls the
-;; amount of incrementing. A list following the (optional) position
+;; amount of incrementing.  A list following the (optional) position
 ;; argument of the advice will be interpreted as an argument list
-;; specification. This means you cannot specify an empty argument list, and
+;; specification.  This means you cannot specify an empty argument list, and
 ;; why would you want to anyway?
 ;;
 ;; (defadvice fii (before fg-inc-x (x &optional incr) act)
@@ -1476,22 +1476,22 @@
 ;; @@ Advising interactive subrs:
 ;; ==============================
 ;; For the most part there is no difference between advising functions and
-;; advising subrs. There is one situation though where one might have to write
-;; slightly different advice code for subrs than for functions. This case
+;; advising subrs.  There is one situation though where one might have to write
+;; slightly different advice code for subrs than for functions.  This case
 ;; arises when one wants to access subr arguments in a before/around advice
 ;; when the arguments were determined by an interactive call to the subr.
 ;; Advice cannot determine what `interactive' form determines the interactive
 ;; behavior of the subr, hence, when it calls the original definition in an
 ;; interactive subr invocation it has to use `call-interactively' to generate
-;; the proper interactive behavior. Thus up to that call the arguments of the
-;; interactive subr will be nil. For example, the following advice for
+;; the proper interactive behavior.  Thus up to that call the arguments of the
+;; interactive subr will be nil.  For example, the following advice for
 ;; `kill-buffer' will not work in an interactive invocation...
 ;;
 ;; (defadvice kill-buffer (before fg-kill-buffer-hook first act preact comp)
 ;;   (my-before-kill-buffer-hook (ad-get-arg 0)))
 ;; kill-buffer
 ;;
-;; ...because the buffer argument will be nil in that case. The way out of
+;; ...because the buffer argument will be nil in that case.  The way out of
 ;; this dilemma is to provide an `interactive' specification that mirrors
 ;; the interactive behavior of the unadvised subr, for example, the following
 ;; will do the right thing even when `kill-buffer' is called interactively:
@@ -1508,10 +1508,10 @@
 ;; For an advised macro instead of evaluating the original definition we
 ;; use `macroexpand', that is, changing argument values and binding
 ;; environments by pieces of advice has an affect during macro expansion
-;; but not necessarily during evaluation. In particular, any side effects
+;; but not necessarily during evaluation.  In particular, any side effects
 ;; of pieces of advice will occur during macro expansion.  To also affect
 ;; the behavior during evaluation time one has to change the value of
-;; `ad-return-value' in a piece of after advice. For example:
+;; `ad-return-value' in a piece of after advice.  For example:
 ;;
 ;; (defmacro foom (x)
 ;;   `(list ,x))
@@ -1562,7 +1562,7 @@
 ;; because it allows one to influence macro expansion as well as evaluation.
 ;; In general, advising macros should be a rather rare activity anyway, in
 ;; particular, because compile-time macro expansion takes away a lot of the
-;; flexibility and effectiveness of the advice mechanism. Macros that were
+;; flexibility and effectiveness of the advice mechanism.  Macros that were
 ;; compile-time expanded before the advice was activated will of course never
 ;; exhibit the advised behavior.
 
diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el
index aca5dcba62..6d698ffb6f 100644
--- a/lisp/emacs-lisp/byte-run.el
+++ b/lisp/emacs-lisp/byte-run.el
@@ -422,12 +422,12 @@ was first made obsolete, for example a date or a release 
number."
                                            &optional docstring)
   "Set OBSOLETE-NAME's function definition to CURRENT-NAME and mark it 
obsolete.
 
-\(define-obsolete-function-alias \\='old-fun \\='new-fun \"22.1\" \"old-fun's 
doc.\")
+\(define-obsolete-function-alias \\='old-fun \\='new-fun \"28.1\" \"old-fun's 
doc.\")
 
 is equivalent to the following two lines of code:
 
 \(defalias \\='old-fun \\='new-fun \"old-fun's doc.\")
-\(make-obsolete \\='old-fun \\='new-fun \"22.1\")
+\(make-obsolete \\='old-fun \\='new-fun \"28.1\")
 
 WHEN should be a string indicating when the function was first
 made obsolete, for example a date or a release number.
@@ -462,7 +462,7 @@ made obsolete, for example a date or a release number.
 This macro evaluates all its parameters, and both OBSOLETE-NAME
 and CURRENT-NAME should be symbols, so a typical usage would look like:
 
-  (define-obsolete-variable-alias 'foo-thing 'bar-thing \"27.1\")
+  (define-obsolete-variable-alias 'foo-thing 'bar-thing \"28.1\")
 
 This macro uses `defvaralias' and `make-obsolete-variable' (which see).
 See the Info node `(elisp)Variable Aliases' for more details.
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 47b3c82456..776e84dfeb 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -26,7 +26,7 @@
 
 ;;; Commentary:
 
-;; The Emacs Lisp byte compiler.  This crunches lisp source into a sort
+;; The Emacs Lisp byte compiler.  This crunches Lisp source into a sort
 ;; of p-code (`lapcode') which takes up less space and can be interpreted
 ;; faster.  [`LAP' == `Lisp Assembly Program'.]
 ;; The user entry points are byte-compile-file and byte-recompile-directory.
@@ -319,7 +319,7 @@ Elements of the list may be:
   lexical     global/dynamic variables lacking a prefix.
   lexical-dynamic
               lexically bound variable declared dynamic elsewhere
-  make-local  calls to make-variable-buffer-local that may be incorrect.
+  make-local  calls to `make-variable-buffer-local' that may be incorrect.
   mapcar      mapcar called for effect.
   constants   let-binding of, or assignment to, constants/nonvariables.
   docstrings  docstrings that are too wide (longer than
@@ -3562,7 +3562,7 @@ for symbols generated by the byte compiler itself."
   "Warn if symbol VAR refers to a free variable.
 VAR must not be lexically bound.
 If optional argument ASSIGNMENT is non-nil, this is treated as an
-assignment (i.e. `setq'). "
+assignment (i.e. `setq')."
   (unless (or (not (byte-compile-warning-enabled-p 'free-vars var))
               (boundp var)
               (memq var byte-compile-bound-variables)
@@ -4335,7 +4335,7 @@ that suppresses all warnings during execution of BODY."
    (and (symbolp obj2) (macroexp-const-p obj1) (cons obj2 (eval obj1)))))
 
 (defun byte-compile--common-test (test-1 test-2)
-  "Most specific common test of `eq', `eql' and `equal'"
+  "Most specific common test of `eq', `eql' and `equal'."
   (cond ((or (eq test-1 'equal) (eq test-2 'equal)) 'equal)
         ((or (eq test-1 'eql)   (eq test-2 'eql))   'eql)
         (t                                          'eq)))
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el
index 3abbf71687..ba29e4ec85 100644
--- a/lisp/emacs-lisp/cconv.el
+++ b/lisp/emacs-lisp/cconv.el
@@ -32,7 +32,7 @@
 ;; Here is a brief explanation how this code works.
 ;; Firstly, we analyze the tree by calling cconv-analyze-form.
 ;; This function finds all mutated variables, all functions that are suitable
-;; for lambda lifting and all variables captured by closure. It passes the tree
+;; for lambda lifting and all variables captured by closure.  It passes the 
tree
 ;; once, returning a list of three lists.
 ;;
 ;; Then we calculate the intersection of the first and third lists returned by
diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el
index bec4ad9250..83a9d3ea6a 100644
--- a/lisp/emacs-lisp/check-declare.el
+++ b/lisp/emacs-lisp/check-declare.el
@@ -119,7 +119,7 @@ don't know how to recognize (e.g. some macros)."
 (autoload 'byte-compile-arglist-signature "bytecomp")
 
 (defgroup check-declare nil
-  "Check declare-function statements."
+  "Check `declare-function' statements."
   :group 'tools)
 
 (defcustom check-declare-ext-errors nil
@@ -230,8 +230,8 @@ fset\\|\\(?:cl-\\)?defmethod\\)\\>" type)
     errlist))
 
 (defun check-declare-sort (alist)
-  "Sort a list with elements FILE (FNFILE ...).
-Returned list has elements FNFILE (FILE ...)."
+  "Sort list ALIST with elements FILE (FNFILE ...).
+Return list with elements FNFILE (FILE ...)."
   (let (file fnfile rest sort a)
     (dolist (e alist)
       (setq file (car e))
diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el
index 00cc7777e1..01f2c0d95f 100644
--- a/lisp/emacs-lisp/checkdoc.el
+++ b/lisp/emacs-lisp/checkdoc.el
@@ -249,11 +249,18 @@ with these words enabled."
   "List of words that are correct when spell-checking Lisp documentation.")
 ;;;###autoload(put 'checkdoc-ispell-list-words 'safe-local-variable 
#'checkdoc-list-of-strings-p)
 
-(defcustom checkdoc-max-keyref-before-warn 10
-  "The number of \\ [command-to-keystroke] tokens allowed in a doc string.
+(defcustom checkdoc-max-keyref-before-warn nil
+  "If non-nil, number of \\\\=[command-to-keystroke] tokens allowed in a doc 
string.
 Any more than this and a warning is generated suggesting that the construct
-\\ {keymap} be used instead."
-  :type 'integer)
+\\\\={keymap} be used instead.  If the value is nil, never warn.
+
+It used to not be practical to use `\\\\=[...]' very many times,
+because display of the documentation string would become slow.
+This is not an issue on modern machines, unless you have
+thousands of substitutions."
+  :type '(choice (const nil)
+                 integer)
+  :version "28.1")
 
 (defcustom checkdoc-arguments-in-order-flag nil
   "Non-nil means warn if arguments appear out of order.
@@ -304,13 +311,25 @@ variable `checkdoc-common-verbs-wrong-voice' if you wish 
to add your own."
 Do not set this by hand, use a function like `checkdoc-current-buffer'
 with a universal argument.")
 
-(defcustom checkdoc-symbol-words nil
+(defcustom checkdoc-symbol-words
+  '("beginning-of-line" "byte-code" "command-line" "end-of-line"
+    "major-mode" "syntax-table" "top-level" "user-error"
+    "version-control" "window-system")
   "A list of symbol names (strings) which also happen to make good words.
 These words are ignored when unquoted symbols are searched for.
 This should be set in an Emacs Lisp file's local variables."
-  :type '(repeat (symbol :tag "Word")))
+  :type '(repeat (string :tag "Word"))
+  :version "28.1")
 ;;;###autoload(put 'checkdoc-symbol-words 'safe-local-variable 
#'checkdoc-list-of-strings-p)
 
+(defcustom checkdoc-column-zero-backslash-before-paren t
+  "Non-nil means to warn if there is no '\\' before '(' in column zero.
+This backslash is no longer needed on Emacs 27.1 or later.
+
+See Info node `(elisp) Documentation Tips' for background."
+  :type 'boolean
+  :version "28.1")
+
 ;;;###autoload
 (defun checkdoc-list-of-strings-p (obj)
   "Return t when OBJ is a list of strings."
@@ -320,7 +339,7 @@ This should be set in an Emacs Lisp file's local variables."
        (not (memq nil (mapcar #'stringp obj)))))
 
 (defvar checkdoc-proper-noun-list
-  '("ispell" "xemacs" "emacs" "lisp")
+  '("emacs" "lisp" "dired")
   "List of words (not capitalized) which should be capitalized.")
 
 (defvar checkdoc-proper-noun-regexp
@@ -352,8 +371,11 @@ This should be set in an Emacs Lisp file's local 
variables."
     ("converts" . "convert")
     ("creates" . "create")
     ("destroys" . "destroy")
+    ("determines" . "determine")
     ("disables" . "disable")
+    ("echoes" . "echo")
     ("executes" . "execute")
+    ("extends" . "extend")
     ("evals" . "evaluate")
     ("evaluates" . "evaluate")
     ("finds" . "find")
@@ -378,7 +400,7 @@ This should be set in an Emacs Lisp file's local variables."
     ("looks" . "look")
     ("makes" . "make")
     ("marks" . "mark")
-    ("matches" . "match")
+    ;;("matches" . "match") ; Leads to almost only false positives.
     ("moves" . "move")
     ("notifies" . "notify")
     ("offers" . "offer")
@@ -404,6 +426,7 @@ This should be set in an Emacs Lisp file's local variables."
     ("signifies" . "signify")
     ("sorts" . "sort")
     ("starts" . "start")
+    ("steps" . "step")
     ("stores" . "store")
     ("switches" . "switch")
     ("tells" . "tell")
@@ -1402,16 +1425,17 @@ buffer, otherwise stop after the first error."
              (match-beginning 1)
              (match-end 1)))))
      ;; * Check for '(' in column 0.
-     (save-excursion
-       (when (re-search-forward "^(" e t)
-        (if (checkdoc-autofix-ask-replace (match-beginning 0)
-                                          (match-end 0)
-                                          (format-message "Escape this `('? ")
-                                          "\\(")
-            nil
-          (checkdoc-create-error
-           "Open parenthesis in column 0 should be escaped"
-           (match-beginning 0) (match-end 0)))))
+     (when checkdoc-column-zero-backslash-before-paren
+       (save-excursion
+         (when (re-search-forward "^(" e t)
+           (if (checkdoc-autofix-ask-replace (match-beginning 0)
+                                     (match-end 0)
+                                     (format-message "Escape this `('? ")
+                                     "\\(")
+               nil
+             (checkdoc-create-error
+              "Open parenthesis in column 0 should be escaped"
+              (match-beginning 0) (match-end 0))))))
      ;; * Do not start or end a documentation string with whitespace.
      (let (start end)
        (if (or (if (looking-at "\"\\([ \t\n]+\\)")
@@ -1533,21 +1557,19 @@ mouse-[0-3]\\)\\)\\>"))
               " embedded in doc string.  Use \\\\<keymap> & \\\\[function] "
               "instead")
              (match-beginning 1) (match-end 1) t))))
-     ;; It is not practical to use `\\[...]' very many times, because
-     ;; display of the documentation string will become slow.  So use this
-     ;; to describe the most important commands in your major mode, and
-     ;; then use `\\{...}' to display the rest of the mode's keymap.
-     (save-excursion
-       (if (and (re-search-forward "\\\\\\\\\\[\\w+" e t
-                                  (1+ checkdoc-max-keyref-before-warn))
-               (not (re-search-forward "\\\\\\\\{\\w+}" e t)))
-          (checkdoc-create-error
-           "Too many occurrences of \\[function].  Use \\{keymap} instead"
-           s (marker-position e))))
+     ;; Optionally warn about too many command substitutions.
+     (when checkdoc-max-keyref-before-warn
+       (save-excursion
+         (if (and (re-search-forward "\\\\\\\\\\[\\w+" e t
+                                     (1+ checkdoc-max-keyref-before-warn))
+                  (not (re-search-forward "\\\\\\\\{\\w+}" e t)))
+             (checkdoc-create-error
+              "Too many occurrences of \\[function].  Use \\{keymap} instead"
+              s (marker-position e)))))
      ;; Ambiguous quoted symbol.  When a symbol is both bound and fbound,
      ;; and is referred to in documentation, it should be prefixed with
      ;; something to disambiguate it.  This check must be before the
-     ;; 80 column check because it will probably break that.
+     ;; 80 column check because it might break that.
      (save-excursion
        (let ((case-fold-search t)
             (ret nil) mb me)
@@ -1998,6 +2020,35 @@ The text checked is between START and LIMIT."
          (setq c (1+ c)))
        (and (< 0 c) (= (% c 2) 0))))))
 
+(defun checkdoc-in-abbreviation-p (begin)
+  "Return non-nil if point is at an abbreviation.
+Examples of abbreviations handled: \"e.g.\", \"i.e.\", \"cf.\"."
+  (save-excursion
+    (goto-char begin)
+    (condition-case nil
+        (progn
+          (forward-sexp -1)
+          ;; Piece of an abbreviation.
+          (looking-at
+           (rx (or letter     ; single letter, as in "a."
+                   (seq
+                    ;; There might exist an escaped parenthesis, as
+                    ;; this is often used in docstrings.  In this
+                    ;; case, `forward-sexp' will have skipped over it,
+                    ;; so we need to skip it here too.
+                    (? "\\(")
+                    ;; The abbreviations:
+                    (or (seq (any "cC") "f")              ; cf.
+                        (seq (any "eE") ".g")             ; e.g.
+                        (seq (any "iI") "." (any "eE")))) ; i.e.
+                   "etc"                                  ; etc.
+                   "vs"                                   ; vs.
+                   ;; Some non-standard or less common ones that we
+                   ;; might as well ignore.
+                   "Inc" "Univ" "misc" "resp")
+               ".")))
+      (error t))))
+
 (defun checkdoc-proper-noun-region-engine (begin end)
   "Check all text between BEGIN and END for lower case proper nouns.
 These are Emacs centric proper nouns which should be capitalized for
@@ -2060,16 +2111,7 @@ If the offending word is in a piece of quoted text, then 
it is skipped."
                     (e (match-end 1)))
                 (unless (or (checkdoc-in-sample-code-p begin end)
                             (checkdoc-in-example-string-p begin end)
-                            (save-excursion
-                              (goto-char b)
-                              (condition-case nil
-                                  (progn
-                                    (forward-sexp -1)
-                                    ;; piece of an abbreviation
-                                    ;; FIXME etc
-                                    (looking-at
-                                     
"\\([a-zA-Z]\\|[iI]\\.?e\\|[eE]\\.?g\\|[cC]f\\)\\."))
-                                (error t))))
+                            (checkdoc-in-abbreviation-p b))
                   (if (checkdoc-autofix-ask-replace
                        b e
                        "There should be two spaces after a period.  Fix? "
diff --git a/lisp/emacs-lisp/cl-indent.el b/lisp/emacs-lisp/cl-indent.el
index c88e15d5a8..9d8aae2844 100644
--- a/lisp/emacs-lisp/cl-indent.el
+++ b/lisp/emacs-lisp/cl-indent.el
@@ -162,9 +162,9 @@ is set to `defun'.")
     (error t)))
 
 (defun lisp-indent-find-method (symbol &optional no-compat)
-  "Find the lisp indentation function for SYMBOL.
+  "Find the Lisp indentation function for SYMBOL.
 If NO-COMPAT is non-nil, do not retrieve indenters intended for
-the standard lisp indent package."
+the standard Lisp indent package."
   (or (and (derived-mode-p 'emacs-lisp-mode)
            (get symbol 'common-lisp-indent-function-for-elisp))
       (get symbol 'common-lisp-indent-function)
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 4ea583d28f..16308b3a59 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -3277,7 +3277,7 @@ the form NAME which is a shorthand for (NAME NAME)."
 (defun cl-struct-sequence-type (struct-type)
   "Return the sequence used to build STRUCT-TYPE.
 STRUCT-TYPE is a symbol naming a struct type.  Return `record',
-`vector`, or `list' if STRUCT-TYPE is a struct type, nil otherwise."
+`vector', or `list' if STRUCT-TYPE is a struct type, nil otherwise."
   (declare (side-effect-free t) (pure t))
   (cl--struct-class-type (cl--struct-get-class struct-type)))
 
diff --git a/lisp/emacs-lisp/copyright.el b/lisp/emacs-lisp/copyright.el
index d2e4891ace..9da370a725 100644
--- a/lisp/emacs-lisp/copyright.el
+++ b/lisp/emacs-lisp/copyright.el
@@ -120,7 +120,7 @@ When this is `function', only ask when called 
non-interactively."
     (re-search-forward regexp bound noerror count)))
 
 (defun copyright-start-point ()
-  "Return point-min or point-max, depending on `copyright-at-end-flag'."
+  "Return `point-min' or `point-max', depending on `copyright-at-end-flag'."
   (if copyright-at-end-flag
       (point-max)
     (point-min)))
@@ -135,7 +135,7 @@ When this is `function', only ask when called 
non-interactively."
 (defun copyright-find-copyright ()
   "Return non-nil if a copyright header suitable for updating is found.
 The header must match `copyright-regexp' and `copyright-names-regexp', if set.
-This function sets the match-data that `copyright-update-year' uses."
+This function sets the match data that `copyright-update-year' uses."
   (widen)
   (goto-char (copyright-start-point))
   ;; In case the regexp is rejected.  This is useful because
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index f76ae3fe69..8da9fb7682 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -390,7 +390,7 @@ Include the reason for debugger entry from ARGS."
         (`(set ,buffer) (format "setting %s in buffer %s to %s"
                                 symbol buffer
                                 (backtrace-print-to-string newval)))
-        (_ (error "unrecognized watchpoint triggered %S" (cdr args))))
+        (_ (error "Unrecognized watchpoint triggered %S" (cdr args))))
       ": ")
      (insert ?\n))
     ;; Debugger entered for an error.
diff --git a/lisp/emacs-lisp/disass.el b/lisp/emacs-lisp/disass.el
index 712fa51170..6c019e7387 100644
--- a/lisp/emacs-lisp/disass.el
+++ b/lisp/emacs-lisp/disass.el
@@ -114,7 +114,7 @@ redefine OBJECT if it is a symbol."
     (if (eq (car-safe obj) 'byte-code)
        (setq obj `(lambda () ,obj)))
     (when (consp obj)
-      (unless (functionp obj) (error "not a function"))
+      (unless (functionp obj) (error "Not a function"))
       (if (assq 'byte-code obj)
           nil
         (if interactive-p (message (if name
@@ -183,7 +183,7 @@ redefine OBJECT if it is a symbol."
 
 
 (defun disassemble-1 (obj indent)
-  "Prints the byte-code call OBJ in the current buffer.
+  "Print the byte-code call OBJ in the current buffer.
 OBJ should be a call to BYTE-CODE generated by the byte compiler."
   (let (bytes constvec)
     (if (consp obj)
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index d9b5ea74f6..dfbae746cc 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -32,7 +32,7 @@
 ;; natural for the minor-mode end-users.
 
 ;; For each mode, easy-mmode defines the following:
-;; <mode>      : The minor mode predicate. A buffer-local variable.
+;; <mode>      : The minor mode predicate.  A buffer-local variable.
 ;; <mode>-map  : The keymap possibly associated to <mode>.
 ;;       see `define-minor-mode' documentation
 ;;
@@ -182,7 +182,7 @@ BODY contains code to execute each time the mode is enabled 
or disabled.
                 be assigned to PLACE.  If you specify a :variable, this 
function
                 does not define a MODE variable (nor any of the terms used
                in :variable).
-:after-hook     A single lisp form which is evaluated after the mode hooks
+:after-hook     A single Lisp form which is evaluated after the mode hooks
                 have been run.  It should not be quoted.
 
 For example, you could write
diff --git a/lisp/emacs-lisp/eieio-custom.el b/lisp/emacs-lisp/eieio-custom.el
index d7d078b2d9..4813ce8c33 100644
--- a/lisp/emacs-lisp/eieio-custom.el
+++ b/lisp/emacs-lisp/eieio-custom.el
@@ -333,7 +333,7 @@ Optional argument GROUP is the sub-group of slots to 
display."
   (let ((map (make-sparse-keymap)))
     (set-keymap-parent map widget-keymap)
     map)
-  "Keymap for EIEIO Custom mode")
+  "Keymap for EIEIO Custom mode.")
 
 (define-derived-mode eieio-custom-mode fundamental-mode "EIEIO Custom"
   "Major mode for customizing EIEIO objects.
diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index cec89cf3bc..21f262adc6 100644
--- a/lisp/emacs-lisp/eldoc.el
+++ b/lisp/emacs-lisp/eldoc.el
@@ -437,7 +437,7 @@ return any documentation.")
 (defvar eldoc-display-functions
   '(eldoc-display-in-echo-area eldoc-display-in-buffer)
   "Hook of functions tasked with displaying ElDoc results.
-Each function is passed two arguments: DOCS and INTERACTIVE. DOCS
+Each function is passed two arguments: DOCS and INTERACTIVE.  DOCS
 is a list (DOC ...) where DOC looks like (STRING :KEY VALUE :KEY2
 VALUE2 ...).  STRING is a string containing the documentation's
 text and the remainder of DOC is an optional list of
diff --git a/lisp/emacs-lisp/elp.el b/lisp/emacs-lisp/elp.el
index c2b026dc82..8c33b7c994 100644
--- a/lisp/emacs-lisp/elp.el
+++ b/lisp/emacs-lisp/elp.el
@@ -407,11 +407,11 @@ original definition, use \\[elp-restore-function] or 
\\[elp-restore-all]."
   (>= (aref vec1 0) (aref vec2 0)))
 
 (defun elp-sort-by-total-time (vec1 vec2)
-  "Predicate to sort by highest total time spent in function. See `sort'."
+  "Predicate to sort by highest total time spent in function.  See `sort'."
   (>= (aref vec1 1) (aref vec2 1)))
 
 (defun elp-sort-by-average-time (vec1 vec2)
-  "Predicate to sort by highest average time spent in function. See `sort'."
+  "Predicate to sort by highest average time spent in function.  See `sort'."
   (>= (aref vec1 2) (aref vec2 2)))
 
 (defsubst elp-pack-number (number width)
diff --git a/lisp/emacs-lisp/ewoc.el b/lisp/emacs-lisp/ewoc.el
index d3ace97945..ca29b6d8c9 100644
--- a/lisp/emacs-lisp/ewoc.el
+++ b/lisp/emacs-lisp/ewoc.el
@@ -55,7 +55,7 @@
 ;;
 ;; Ewoc can be considered as the `view' part of a model-view-controller.
 ;;
-;; A `element' can be any lisp object.  When you use the ewoc
+;; An `element' can be any Lisp object.  When you use the ewoc
 ;; package you specify a pretty-printer, a function that inserts
 ;; a printable representation of the element in the buffer.  (The
 ;; pretty-printer should use "insert" and not
@@ -67,7 +67,7 @@
 ;; fixed when the ewoc is created).  The header and the footer
 ;; are constant strings.  They appear before and after the elements.
 ;;
-;; Ewoc does not affect the mode of the buffer in any way. It
+;; Ewoc does not affect the mode of the buffer in any way.  It
 ;; merely makes it easy to connect an underlying data representation
 ;; to the buffer contents.
 ;;
@@ -117,7 +117,7 @@
     (unless (eq dll L) L)))
 
 (defun ewoc--node-nth (dll n)
-  "Return the Nth node from the doubly linked list `dll'.
+  "Return the Nth node from the doubly linked list DLL.
 N counts from zero.  If N is negative, return the -(N+1)th last element.
 If N is out of range, return nil.
 Thus, (ewoc--node-nth dll 0) returns the first node,
diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el
index 7bc3e6b25f..303039d653 100644
--- a/lisp/emacs-lisp/find-func.el
+++ b/lisp/emacs-lisp/find-func.el
@@ -145,13 +145,16 @@ in which case the function is called with one argument 
(the object
 we're looking for) and it should search for it.")
 (put 'find-function-regexp-alist 'risky-local-variable t)
 
-(defcustom find-function-source-path nil
-  "The default list of directories where `find-function' searches.
+(define-obsolete-variable-alias 'find-function-source-path
+  'find-library-source-path "28.1")
+(defcustom find-library-source-path nil
+  "The default list of directories where `find-library' searches.
 
-If this variable is nil then `find-function' searches `load-path' by
+If this variable is nil then `find-library' searches `load-path' by
 default."
   :type '(repeat directory)
-  :group 'find-function)
+  :group 'find-function
+  :version "28.1")
 
 (defcustom find-function-recenter-line 1
   "The window line-number from which to start displaying a symbol definition.
@@ -200,20 +203,20 @@ LIBRARY should be a string (the name of the library)."
     (setq library (gethash (file-name-nondirectory library) 
comp-eln-to-el-h))))
   (or
    (locate-file library
-                (or find-function-source-path load-path)
+                (or find-library-source-path load-path)
                 (find-library-suffixes))
    (locate-file library
-                (or find-function-source-path load-path)
+                (or find-library-source-path load-path)
                 load-file-rep-suffixes)
    (when (file-name-absolute-p library)
      (let ((rel (find-library--load-name library)))
        (when rel
          (or
           (locate-file rel
-                       (or find-function-source-path load-path)
+                       (or find-library-source-path load-path)
                        (find-library-suffixes))
           (locate-file rel
-                       (or find-function-source-path load-path)
+                       (or find-library-source-path load-path)
                        load-file-rep-suffixes)))))
    (find-library--from-load-history library)
    (signal 'file-error (list "Can't find library" library))))
@@ -286,7 +289,10 @@ TYPE should be nil to find a function, or `defvar' to find 
a variable."
 (defun find-library (library)
   "Find the Emacs Lisp source of LIBRARY.
 
-Interactively, prompt for LIBRARY using the one at or near point."
+Interactively, prompt for LIBRARY using the one at or near point.
+
+This function searches `find-library-source-path' if non-nil, and
+`load-path' otherwise."
   (interactive (list (read-library-name)))
   (prog1
       (switch-to-buffer (find-file-noselect (find-library-name library)))
@@ -297,9 +303,9 @@ Interactively, prompt for LIBRARY using the one at or near 
point."
   "Read and return a library name, defaulting to the one near point.
 
 A library name is the filename of an Emacs Lisp library located
-in a directory under `load-path' (or `find-function-source-path',
+in a directory under `load-path' (or `find-library-source-path',
 if non-nil)."
-  (let* ((dirs (or find-function-source-path load-path))
+  (let* ((dirs (or find-library-source-path load-path))
          (suffixes (find-library-suffixes))
          (table (apply-partially 'locate-file-completion-table
                                  dirs suffixes))
@@ -521,11 +527,7 @@ the buffer, returns (BUFFER).
 
 If FUNCTION is a built-in function, this function normally
 attempts to find it in the Emacs C sources; however, if LISP-ONLY
-is non-nil, signal an error instead.
-
-If the file where FUNCTION is defined is not known, then it is
-searched for in `find-function-source-path' if non-nil, otherwise
-in `load-path'."
+is non-nil, signal an error instead."
   (if (not function)
     (error "You didn't specify a function"))
   (let ((func-lib (find-function-library function lisp-only t)))
@@ -589,8 +591,6 @@ near point (selected by `function-called-at-point') in a 
buffer and
 places point before the definition.
 Set mark before moving, if the buffer already existed.
 
-The library where FUNCTION is defined is searched for in
-`find-function-source-path', if non-nil, otherwise in `load-path'.
 See also `find-function-recenter-line' and `find-function-after-hook'."
   (interactive (find-function-read))
   (find-function-do-it function nil 'switch-to-buffer))
@@ -617,10 +617,7 @@ See `find-function' for more details."
 
 Finds the library containing the definition of VARIABLE in a buffer and
 the point of the definition.  The buffer is not selected.
-If the variable's definition can't be found in the buffer, return (BUFFER).
-
-The library where VARIABLE is defined is searched for in FILE or
-`find-function-source-path', if non-nil, otherwise in `load-path'."
+If the variable's definition can't be found in the buffer, return (BUFFER)."
   (if (not variable)
       (error "You didn't specify a variable")
     (let ((library (or file
@@ -638,8 +635,6 @@ places point before the definition.
 
 Set mark before moving, if the buffer already existed.
 
-The library where VARIABLE is defined is searched for in
-`find-function-source-path', if non-nil, otherwise in `load-path'.
 See also `find-function-recenter-line' and `find-function-after-hook'."
   (interactive (find-function-read 'defvar))
   (find-function-do-it variable 'defvar 'switch-to-buffer))
@@ -666,10 +661,7 @@ See `find-variable' for more details."
 If the definition can't be found in the buffer, return (BUFFER).
 TYPE says what type of definition: nil for a function, `defvar' for a
 variable, `defface' for a face.  This function does not switch to the
-buffer nor display it.
-
-The library where SYMBOL is defined is searched for in FILE or
-`find-function-source-path', if non-nil, otherwise in `load-path'."
+buffer nor display it."
   (cond
    ((not symbol)
     (error "You didn't specify a symbol"))
@@ -693,8 +685,6 @@ places point before the definition.
 
 Set mark before moving, if the buffer already existed.
 
-The library where FACE is defined is searched for in
-`find-function-source-path', if non-nil, otherwise in `load-path'.
 See also `find-function-recenter-line' and `find-function-after-hook'."
   (interactive (find-function-read 'defface))
   (find-function-do-it face 'defface 'switch-to-buffer))
@@ -765,7 +755,7 @@ See `find-function-on-key'."
 
 ;;;###autoload
 (defun find-function-setup-keys ()
-  "Define some key bindings for the find-function family of functions."
+  "Define some key bindings for the `find-function' family of functions."
   (define-key ctl-x-map "F" 'find-function)
   (define-key ctl-x-4-map "F" 'find-function-other-window)
   (define-key ctl-x-5-map "F" 'find-function-other-frame)
diff --git a/lisp/emacs-lisp/generator.el b/lisp/emacs-lisp/generator.el
index 4ae20ba420..2acf939bed 100644
--- a/lisp/emacs-lisp/generator.el
+++ b/lisp/emacs-lisp/generator.el
@@ -467,7 +467,7 @@ DYNAMIC-VAR bound to STATIC-VAR."
           (guard (cps--special-form-p name))
           (guard (not (memq name cps-standard-special-forms))))
      name                               ; Shut up byte compiler
-     (error "special form %S incorrect or not supported" form))
+     (error "Special form %S incorrect or not supported" form))
 
     ;; Process regular function applications with nontrivial
     ;; parameters, converting them to applications of trivial
@@ -633,7 +633,7 @@ modified copy."
                          ;; If we're exiting non-locally (error, quit,
                          ;; etc.)  close the iterator.
                          ,(cps--make-close-iterator-form terminal-state)))))
-                  (t (error "unknown iterator operation %S" op))))))
+                  (t (error "Unknown iterator operation %S" op))))))
          ,(when finalizer-symbol
             '(funcall iterator
                       :stash-finalizer
@@ -711,7 +711,7 @@ iterator cannot supply more values."
 
 (defun iter-close (iterator)
   "Terminate an iterator early.
-Run any unwind-protect handlers in scope at the point ITERATOR
+Run any `unwind-protect' handlers in scope at the point ITERATOR
 is blocked."
   (funcall iterator :close nil))
 
diff --git a/lisp/emacs-lisp/let-alist.el b/lisp/emacs-lisp/let-alist.el
index 433b37d792..2d634b7b03 100644
--- a/lisp/emacs-lisp/let-alist.el
+++ b/lisp/emacs-lisp/let-alist.el
@@ -57,7 +57,7 @@
 ;;       .site.contents))
 ;;
 ;; If you nest `let-alist' invocations, the inner one can't access
-;; the variables of the outer one. You can, however, access alists
+;; the variables of the outer one.  You can, however, access alists
 ;; inside the original alist by using dots inside the symbol, as
 ;; displayed in the example above by the `.site.contents'.
 ;;
@@ -137,7 +137,7 @@ essentially expands to
       .site.contents))
 
 If you nest `let-alist' invocations, the inner one can't access
-the variables of the outer one. You can, however, access alists
+the variables of the outer one.  You can, however, access alists
 inside the original alist by using dots inside the symbol, as
 displayed in the example above."
   (declare (indent 1) (debug t))
diff --git a/lisp/emacs-lisp/lisp-mnt.el b/lisp/emacs-lisp/lisp-mnt.el
index df14a5cd49..b27c7e78a8 100644
--- a/lisp/emacs-lisp/lisp-mnt.el
+++ b/lisp/emacs-lisp/lisp-mnt.el
@@ -498,13 +498,14 @@ absent, return nil."
           "" (buffer-substring-no-properties
               start (lm-commentary-end))))))))
 
-(defun lm-homepage (&optional file)
-  "Return the homepage in file FILE, or current buffer if FILE is nil."
+(defun lm-website (&optional file)
+  "Return the website in file FILE, or current buffer if FILE is nil."
   (let ((page (lm-with-file file
-               (lm-header "\\(?:x-\\)?\\(?:homepage\\|url\\)"))))
+                (lm-header "\\(?:x-\\)?\\(?:url\\|homepage\\)"))))
     (if (and page (string-match "^<.+>$" page))
        (substring page 1 -1)
       page)))
+(defalias 'lm-homepage 'lm-website) ; for backwards-compatibility
 
 ;;; Verification and synopses
 
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 51fb88502a..b3b1efc8d2 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -462,8 +462,8 @@ This will generate compile-time constants from BINDINGS."
          ;; Ineffective backslashes (typically in need of doubling).
          ("\\(\\\\\\)\\([^\"\\]\\)"
           (1 (elisp--font-lock-backslash) prepend))
-         ;; Words inside ‘’ and `' tend to be symbol names.
-         (,(concat "[`‘]\\(" lisp-mode-symbol-regexp "\\)['’]")
+         ;; Words inside ‘’, '' and `' tend to be symbol names.
+         (,(concat "[`‘']\\(" lisp-mode-symbol-regexp "\\)['’]")
           (1 font-lock-constant-face prepend))
          ;; Constant values.
          (,(concat "\\_<:" lisp-mode-symbol-regexp "\\_>")
@@ -624,7 +624,7 @@ Value for `adaptive-fill-function'."
   (if (looking-at "\\s-+\"[^\n\"]+\"\\s-*$") ""))
 
 ;; Maybe this should be discouraged/obsoleted and users should be
-;; encouraged to use `lisp-data-mode` instead.
+;; encouraged to use 'lisp-data-mode' instead.
 (defun lisp-mode-variables (&optional lisp-syntax keywords-case-insensitive
                                       elisp)
   "Common initialization routine for lisp modes.
@@ -824,7 +824,7 @@ function is `common-lisp-indent-function'."
   "Return Parse-Partial-Sexp State at POS, defaulting to point.
 Like `syntax-ppss' but includes the character address of the last
 complete sexp in the innermost containing list at position
-2 (counting from 0).  This is important for lisp indentation."
+2 (counting from 0).  This is important for Lisp indentation."
   (unless pos (setq pos (point)))
   (let ((pss (syntax-ppss pos)))
     (if (nth 9 pss)
diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el
index 61c1ea490f..1e4fdd126c 100644
--- a/lisp/emacs-lisp/macroexp.el
+++ b/lisp/emacs-lisp/macroexp.el
@@ -243,19 +243,19 @@ is executed without being compiled first."
     (while arglist
       (cond ((eq (car arglist) '&optional)
              ;; ok, I'll let this slide because funcall_lambda() does...
-             ;; (if optionalp (error "multiple &optional keywords in %s" name))
+             ;; (if optionalp (error "Multiple &optional keywords in %s" name))
              (if restp (error "&optional found after &rest in %s" name))
              (if (null (cdr arglist))
-                 (error "nothing after &optional in %s" name))
+                 (error "Nothing after &optional in %s" name))
              (setq optionalp t))
             ((eq (car arglist) '&rest)
              ;; ...but it is by no stretch of the imagination a reasonable
              ;; thing that funcall_lambda() allows (&rest x y) and
              ;; (&rest x &optional y) in arglists.
              (if (null (cdr arglist))
-                 (error "nothing after &rest in %s" name))
+                 (error "Nothing after &rest in %s" name))
              (if (cdr (cdr arglist))
-                 (error "multiple vars after &rest in %s" name))
+                 (error "Multiple vars after &rest in %s" name))
              (setq restp t))
             (restp
              (setq bindings (cons (list (car arglist)
diff --git a/lisp/emacs-lisp/nadvice.el b/lisp/emacs-lisp/nadvice.el
index 41a9c7242b..a2a5aaed04 100644
--- a/lisp/emacs-lisp/nadvice.el
+++ b/lisp/emacs-lisp/nadvice.el
@@ -245,7 +245,7 @@ WHERE is a symbol to select an entry in 
`advice--where-alist'."
                           (list (advice--remove-function rest function)))))))
 
 (defvar advice--buffer-local-function-sample nil
-  "keeps an example of the special \"run the default value\" functions.
+  "Keeps an example of the special \"run the default value\" functions.
 These functions play the same role as t in buffer-local hooks, and to recognize
 them, we keep a sample here against which to compare.  Each instance is
 different, but `function-equal' will hopefully ignore those differences.")
diff --git a/lisp/emacs-lisp/package-x.el b/lisp/emacs-lisp/package-x.el
index 2e327d16de..0175857b7f 100644
--- a/lisp/emacs-lisp/package-x.el
+++ b/lisp/emacs-lisp/package-x.el
@@ -34,7 +34,7 @@
 ;; (possibly one on a remote machine, accessed via Tramp).
 
 ;; Then call M-x package-upload-file, which prompts for a file to
-;; upload. Alternatively, M-x package-upload-buffer uploads the
+;; upload.  Alternatively, M-x package-upload-buffer uploads the
 ;; current buffer, if it's visiting a package file.
 
 ;; Once a package is uploaded, users can access it via the Package
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 617e941dba..7418b580e8 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -2807,8 +2807,8 @@ either a full name or nil, and EMAIL is a valid email 
address."
   "Menu for `package-menu-mode'."
   '("Package"
     ["Describe Package" package-menu-describe-package :help "Display 
information about this package"]
-    ["Open Package Homepage" package-browse-url
-     :help "Open the homepage of this package"]
+    ["Open Package Website" package-browse-url
+     :help "Open the website of this package"]
     ["Help" package-menu-quick-help :help "Show short key binding help for 
package-menu-mode"]
     "--"
     ["Refresh Package List" revert-buffer
@@ -3601,8 +3601,10 @@ packages list, respectively."
 
 (defun package-menu-execute (&optional noquery)
   "Perform marked Package Menu actions.
-Packages marked for installation are downloaded and installed;
-packages marked for deletion are removed.
+Packages marked for installation are downloaded and installed,
+packages marked for deletion are removed,
+and packages marked for upgrading are downloaded and upgraded.
+
 Optional argument NOQUERY non-nil means do not ask the user to confirm."
   (interactive nil package-menu-mode)
   (package--ensure-package-menu-mode)
@@ -4228,7 +4230,7 @@ beginning of the line."
             (package-desc-summary package-desc))))
 
 (defun package-browse-url (desc &optional secondary)
-  "Open the home page of the package under point in a browser.
+  "Open the website of the package under point in a browser.
 `browse-url' is used to determine the browser to be used.
 If SECONDARY (interactively, the prefix), use the secondary browser."
   (interactive (list (tabulated-list-get-id)
@@ -4238,7 +4240,7 @@ If SECONDARY (interactively, the prefix), use the 
secondary browser."
     (user-error "No package here"))
   (let ((url (cdr (assoc :url (package-desc-extras desc)))))
     (unless url
-      (user-error "No home page for %s" (package-desc-name desc)))
+      (user-error "No website for %s" (package-desc-name desc)))
     (if secondary
        (funcall browse-url-secondary-browser-function url)
       (browse-url url))))
diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el
index 63b187be02..c6173c710f 100644
--- a/lisp/emacs-lisp/pcase.el
+++ b/lisp/emacs-lisp/pcase.el
@@ -86,7 +86,7 @@
         (funcall pf (and me (symbolp me) (edebug-get-spec me))))))
 
 (defun pcase--get-macroexpander (s)
-  "Return the macroexpander for pcase pattern head S, or nil"
+  "Return the macroexpander for pcase pattern head S, or nil."
   (get s 'pcase-macroexpander))
 
 ;;;###autoload
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index f0dc283f57..ae5988296d 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -467,6 +467,18 @@ negative integer or 0, nil is returned."
         (setq sequence (seq-drop sequence n)))
       (nreverse result))))
 
+;;;###autoload
+(cl-defgeneric seq-union (sequence1 sequence2 &optional testfn)
+  "Return a list of all elements that appear in either SEQUENCE1 or SEQUENCE2.
+Equality is defined by TESTFN if non-nil or by `equal' if nil."
+  (let* ((accum (lambda (acc elt)
+                  (if (seq-contains-p acc elt testfn)
+                      acc
+                    (cons elt acc))))
+         (result (seq-reduce accum sequence2
+                          (seq-reduce accum sequence1 '()))))
+    (nreverse result)))
+
 ;;;###autoload
 (cl-defgeneric seq-intersection (sequence1 sequence2 &optional testfn)
   "Return a list of the elements that appear in both SEQUENCE1 and SEQUENCE2.
diff --git a/lisp/emacs-lisp/shadow.el b/lisp/emacs-lisp/shadow.el
index 02f2ad3d81..e2a24e9949 100644
--- a/lisp/emacs-lisp/shadow.el
+++ b/lisp/emacs-lisp/shadow.el
@@ -31,13 +31,13 @@
 ;; a file with the same name in a later load-path directory.  When
 ;; this is unintentional, it may result in problems that could have
 ;; been easily avoided.  This occurs often (to me) when installing a
-;; new version of emacs and something in the site-lisp directory
-;; has been updated and added to the emacs distribution.  The old
-;; version, now outdated, shadows the new one. This is obviously
+;; new version of Emacs and something in the site-lisp directory
+;; has been updated and added to the Emacs distribution.  The old
+;; version, now outdated, shadows the new one.  This is obviously
 ;; undesirable.
 ;;
 ;; The `list-load-path-shadows' function was run when you installed
-;; this version of emacs. To run it by hand in emacs:
+;; this version of Emacs.  To run it by hand in emacs:
 ;;
 ;;     M-x list-load-path-shadows
 ;;
@@ -181,7 +181,7 @@ See the documentation for `list-load-path-shadows' for 
further information."
   "Keywords to highlight in `load-path-shadows-mode'.")
 
 (define-derived-mode load-path-shadows-mode fundamental-mode "LP-Shadows"
-  "Major mode for load-path shadows buffer."
+  "Major mode for `load-path' shadows buffer."
   (setq-local font-lock-defaults
               '((load-path-shadows-font-lock-keywords)))
   (setq buffer-undo-list t
diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el
index 7d4a69f42a..3e0d5aef02 100644
--- a/lisp/emacs-lisp/shortdoc.el
+++ b/lisp/emacs-lisp/shortdoc.el
@@ -809,6 +809,8 @@ There can be any number of :example/:result elements."
    :eval (seq-remove #'numberp '(1 2 c d 5)))
   (seq-group-by
    :eval (seq-group-by #'cl-plusp '(-1 2 3 -4 -5 6)))
+  (seq-union
+   :eval (seq-union '(1 2 3) '(3 5)))
   (seq-difference
    :eval (seq-difference '(1 2 3) '(2 3 4)))
   (seq-intersection
@@ -889,6 +891,9 @@ There can be any number of :example/:result elements."
    :eg-result 67)
   (char-after
    :eval (char-after 45))
+  (get-byte
+   :no-eval (get-byte 45)
+   :eg-result-string "#xff")
   "Altering Buffers"
   (delete-region
    :no-value (delete-region (point-min) (point-max)))
diff --git a/lisp/emacs-lisp/testcover.el b/lisp/emacs-lisp/testcover.el
index e75f15140a..f5a624bb61 100644
--- a/lisp/emacs-lisp/testcover.el
+++ b/lisp/emacs-lisp/testcover.el
@@ -20,7 +20,6 @@
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
-
 ;;; Commentary:
 
 ;; * Use `testcover-start' to instrument a Lisp file for coverage testing.
@@ -62,6 +61,8 @@
 ;;   error if these "potentially" 1-valued forms actually return differing
 ;;   values.
 
+;;; Code:
+
 (eval-when-compile (require 'cl-lib))
 (require 'edebug)
 (provide 'testcover)
@@ -80,8 +81,9 @@
 (defcustom testcover-constants
   '(nil t emacs-build-time emacs-version emacs-major-version
     emacs-minor-version)
-  "Variables whose values never change.  No brown splotch is shown for
-these.  This list is quite incomplete!"
+  "Variables whose values never change.
+No brown splotch is shown for these.  This list is quite
+incomplete!"
   :group 'testcover
   :type '(repeat variable))
 
@@ -103,8 +105,8 @@ incomplete!  Notes: Nobody ever changes the current global 
map."
 
 (defcustom testcover-noreturn-functions
   '(error noreturn throw signal)
-  "Subset of `testcover-1value-functions' -- these never return.  We mark
-them as having returned nil just before calling them."
+  "Subset of `testcover-1value-functions' -- these never return.
+We mark them as having returned nil just before calling them."
   :group 'testcover
   :type '(repeat symbol))
 
@@ -126,25 +128,26 @@ side-effect-free functions should be here."
     set set-default set-marker-insertion-type setq setq-default
     with-current-buffer with-output-to-temp-buffer with-syntax-table
     with-temp-buffer with-temp-file with-temp-message with-timeout)
-  "Functions whose return value is the same as their last argument.  No
-brown splotch is shown for these if the last argument is a constant or a
-call to one of the `testcover-1value-functions'.  This list is probably
-incomplete!"
+  "Functions whose return value is the same as their last argument.
+No brown splotch is shown for these if the last argument is a
+constant or a call to one of the `testcover-1value-functions'.
+This list is probably incomplete!"
   :group 'testcover
   :type '(repeat symbol))
 
 (defcustom testcover-prog1-functions
   '(prog1 unwind-protect)
-  "Functions whose return value is the same as their first argument.  No
-brown splotch is shown for these if the first argument is a constant or a
-call to one of the `testcover-1value-functions'."
+  "Functions whose return value is the same as their first argument.
+No brown splotch is shown for these if the first argument is a
+constant or a call to one of the `testcover-1value-functions'."
   :group 'testcover
   :type '(repeat symbol))
 
 (defcustom testcover-potentially-1value-functions
   '(add-hook and beep or remove-hook unless when)
-  "Functions that are potentially 1-valued.  No brown splotch if actually
-1-valued, no error if actually multi-valued."
+  "Functions that are potentially 1-valued.
+No brown splotch if actually 1-valued, no error if actually
+multi-valued."
   :group 'testcover
   :type '(repeat symbol))
 
@@ -164,8 +167,7 @@ call to one of the `testcover-1value-functions'."
 ;;;=========================================================================
 
 (defvar testcover-module-constants nil
-  "Symbols declared with defconst in the last file processed by
-`testcover-start'.")
+  "Symbols declared with defconst in the last file processed by 
`testcover-start'.")
 
 (defvar testcover-module-1value-functions nil
   "Symbols declared with defun in the last file processed by
@@ -388,7 +390,7 @@ coverage tests.  This function creates many overlays."
     (error nil)))  ;Ignore "No such buffer" errors
 
 (defun testcover-next-mark ()
-  "Moves point to next line in current buffer that has a splotch."
+  "Move point to next line in current buffer that has a splotch."
   (interactive)
   (goto-char (next-overlay-change (point)))
   (end-of-line))
diff --git a/lisp/emacs-lisp/thunk.el b/lisp/emacs-lisp/thunk.el
index 7e349d22a4..6f2e42af50 100644
--- a/lisp/emacs-lisp/thunk.el
+++ b/lisp/emacs-lisp/thunk.el
@@ -30,7 +30,7 @@
 ;; forms.
 ;;
 ;; Use `thunk-delay' to delay the evaluation of a form (requires
-;; lexical-binding), and `thunk-force' to evaluate it. The result of
+;; lexical-binding), and `thunk-force' to evaluate it.  The result of
 ;; the evaluation is cached, and only happens once.
 ;;
 ;; Here is an example of a form which evaluation is delayed:
diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el
index 54f881bde8..b662049960 100644
--- a/lisp/emulation/cua-base.el
+++ b/lisp/emulation/cua-base.el
@@ -67,7 +67,7 @@
 
 ;; In addition to using the shifted movement keys, you can also use
 ;; [C-space] to start the region and use unshifted movement keys to extend
-;; it. To cancel the region, use [C-space] or [C-g].
+;; it.  To cancel the region, use [C-space] or [C-g].
 
 ;; If you prefer to use the standard Emacs cut, copy, paste, and undo
 ;; bindings, customize cua-enable-cua-keys to nil.
@@ -116,7 +116,7 @@
 ;; "register commands".
 ;;
 ;; CUA's register support is activated by providing a numeric
-;; prefix argument to the C-x, C-c, and C-v commands. For example,
+;; prefix argument to the C-x, C-c, and C-v commands.  For example,
 ;; to copy the selected region to register 2, enter [M-2 C-c].
 ;; Or if you have activated the keypad prefix mode, enter [kp-2 C-c].
 ;;
@@ -182,7 +182,7 @@
 ;; If you type a normal (self-inserting) character when the rectangle is
 ;; active, the character is inserted on the "current side" of every line
 ;; of the rectangle.  The "current side" is the side on which the cursor
-;; is currently located. If the rectangle is only 1 column wide,
+;; is currently located.  If the rectangle is only 1 column wide,
 ;; insertion will be performed to the left when the cursor is at the
 ;; bottom of the rectangle.  So, for example, to comment out an entire
 ;; paragraph like this one, just place the cursor on the first character
@@ -360,7 +360,7 @@ managers, so try setting this to nil, if prefix override 
doesn't work."
   :type 'boolean)
 
 (defcustom cua-paste-pop-rotate-temporarily nil
-  "If non-nil, \\[cua-paste-pop] only rotates the kill-ring temporarily.
+  "If non-nil, \\[cua-paste-pop] only rotates the kill ring temporarily.
 This means that both \\[yank] and the first \\[yank-pop] in a sequence always
 insert the most recently killed text.  Each immediately following 
\\[cua-paste-pop]
 replaces the previous text with the next older element on the `kill-ring'.
@@ -1140,7 +1140,7 @@ If ARG is the atom `-', scroll upward by nearly full 
screen."
       def nil))
 
 (defvar cua-global-keymap (make-sparse-keymap)
-  "Global keymap for cua-mode; users may add to this keymap.")
+  "Global keymap for `cua-mode'; users may add to this keymap.")
 
 (defvar cua--cua-keys-keymap (make-sparse-keymap))
 (defvar cua--prefix-override-keymap (make-sparse-keymap))
diff --git a/lisp/emulation/edt-mapper.el b/lisp/emulation/edt-mapper.el
index a723dbdbb9..8a42f89315 100644
--- a/lisp/emulation/edt-mapper.el
+++ b/lisp/emulation/edt-mapper.el
@@ -55,7 +55,7 @@
 
 ;;  Usage:
 
-;;  Simply load this file into emacs and run the function edt-mapper,
+;;  Simply load this file into Emacs and run the function edt-mapper,
 ;;  using the following command.
 
 ;;    emacs -q -l edt-mapper -f edt-mapper
@@ -82,8 +82,8 @@
 
 ;;  Sometimes, edt-mapper will ignore a key you press, and just
 ;;  continue to prompt for the same key.  This can happen when your
-;;  window manager sucks up the key and doesn't pass it on to emacs,
-;;  or it could be an emacs bug.  Either way, there's nothing that
+;;  window manager sucks up the key and doesn't pass it on to Emacs,
+;;  or it could be an Emacs bug.  Either way, there's nothing that
 ;;  edt-mapper can do about it.  You must press RETURN, to skip the
 ;;  current key and continue.  Later, you and/or your local Emacs guru
 ;;  can try to figure out why the key is being ignored.
diff --git a/lisp/emulation/keypad.el b/lisp/emulation/keypad.el
index 56202c7fff..4500faae57 100644
--- a/lisp/emulation/keypad.el
+++ b/lisp/emulation/keypad.el
@@ -27,7 +27,7 @@
 ;;
 ;; With the following setup, the keypad can be used for numeric data
 ;; entry when NumLock is off, and to give numeric prefix arguments to
-;; emacs commands, when NumLock is on.
+;; Emacs commands, when NumLock is on.
 ;;
 ;;  keypad-setup         => Plain Numeric Keypad
 ;;  keypad-numlock-setup => Prefix numeric args
@@ -203,7 +203,7 @@ keys are bound.
  `S-cursor' Bind shifted keypad keys to the shifted cursor movement keys.
  `cursor'   Bind keypad keys to the cursor movement keys.
  `numeric'  Plain numeric keypad, i.e. 0 .. 9 and .  (or DECIMAL arg)
- `none'     Removes all bindings for keypad keys in function-key-map;
+ `none'     Removes all bindings for keypad keys in `function-key-map';
             this enables any user-defined bindings for the keypad keys
             in the global and local keymaps.
 
diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el
index 728f790a96..c3b36f10ae 100644
--- a/lisp/emulation/viper-cmd.el
+++ b/lisp/emulation/viper-cmd.el
@@ -91,7 +91,7 @@
                                     space return
                                     delete backspace
                                     )
-                                    "Movement commands")
+                                     "Movement commands.")
 ;; define viper-movement-command-p
 (viper-test-com-defun viper-movement-command)
 
@@ -487,7 +487,7 @@
   (viper-change-state-to-vi))
 
 (defun viper-set-mode-vars-for (state)
-  "Sets Viper minor mode variables to put Viper's state STATE in effect."
+  "Set Viper minor mode variables to put Viper's state STATE in effect."
 
   ;; Emacs state
   (setq viper-vi-minibuffer-minor-mode      nil
@@ -1197,7 +1197,7 @@ as a Meta key and any number of multiple escapes are 
allowed."
   )
 
 (defsubst viper-yank-last-insertion ()
-  "Inserts the text saved by the previous viper-save-last-insertion command."
+  "Insert the text saved by the previous viper-save-last-insertion command."
   (condition-case nil
       (insert viper-last-insertion)
     (error nil)))
@@ -1500,7 +1500,7 @@ Doesn't change viper-command-ring in any way, so `.' will 
work as before
 executing this command.
 This command is supposed to be bound to a two-character Vi macro where
 the second character is a digit 0 to 9.  The digit indicates which
-history command to execute. `<char>0' is equivalent to `.', `<char>1'
+history command to execute.  `<char>0' is equivalent to `.', `<char>1'
 invokes the command before that, etc."
   (interactive)
   (let* ((viper-intermediate-command 'repeating-display-destructive-command)
@@ -3838,7 +3838,7 @@ Null string will repeat previous search."
 ;; yank and pop
 
 (defsubst viper-yank (text)
-  "Yank TEXT silently.  This works correctly with Emacs's yank-pop command."
+  "Yank TEXT silently.  This works correctly with Emacs's `yank-pop' command."
     (insert text)
     (setq this-command 'yank))
 
@@ -4510,7 +4510,7 @@ One can use \\=`\\=` and \\='\\=' to temporarily jump 1 
step back."
 
 
 (defun viper-set-expert-level (&optional dont-change-unless)
-  "Sets the expert level for a Viper user.
+  "Set the expert level for a Viper user.
 Can be called interactively to change (temporarily or permanently) the
 current expert level.
 
diff --git a/lisp/emulation/viper-ex.el b/lisp/emulation/viper-ex.el
index 55930e7e6b..e93666956c 100644
--- a/lisp/emulation/viper-ex.el
+++ b/lisp/emulation/viper-ex.el
@@ -2176,7 +2176,7 @@ Please contact your system administrator. "))))))
        (goto-char beg)))))
 
 (defun ex-compile ()
-  "Reads args from the command line, then runs make with the args.
+  "Read args from the command line, then run make with the args.
 If no args are given, then it runs the last compile command.
 Type `mak ' (including the space) to run make with no args."
   (let (args)
diff --git a/lisp/emulation/viper-keym.el b/lisp/emulation/viper-keym.el
index 4a9070e84b..75b627ea6a 100644
--- a/lisp/emulation/viper-keym.el
+++ b/lisp/emulation/viper-keym.el
@@ -86,8 +86,8 @@ major mode in effect."
   "Keymap for user-defined local bindings.
 Useful for changing bindings such as ZZ in certain major modes.
 For instance, in letter-mode, one may want to bind ZZ to
-mh-send-letter.  In a newsreader such as gnus, tin, or rn, ZZ could be bound
-to save-buffers-kill-emacs then post article, etc.")
+`mh-send-letter'.  In a newsreader such as gnus, tin, or rn, ZZ could be bound
+to `save-buffers-kill-emacs' then post article, etc.")
 (put 'viper-vi-local-user-map 'permanent-local t)
 
 (defvar viper-vi-global-user-map (make-sparse-keymap)
@@ -491,7 +491,7 @@ ALIST is of the form ((KEY . FUNC) (KEY . FUNC) ...)
 Normally, this would be called from a hook to a major mode or
 on a per buffer basis.
 Usage:
-      (viper-add-local-keys state \\='((key-str . func) (key-str . func)...))  
 "
+      (viper-add-local-keys state \\='((key-str . func) (key-str . func)...))"
 
   (let (map)
     (cond ((eq state 'vi-state)
@@ -520,7 +520,7 @@ Usage:
 (defun viper-zap-local-keys ()
   "Unconditionally reset Viper viper-*-local-user-map's.
 Rarely useful, but if you made a mistake by switching to a mode that adds
-undesirable local keys, e.g., comint-mode, then this function can restore
+undesirable local keys, e.g., `comint-mode', then this function can restore
 sanity."
   (interactive)
   (setq viper-vi-local-user-map (make-sparse-keymap)
diff --git a/lisp/emulation/viper-macs.el b/lisp/emulation/viper-macs.el
index 94ab817892..fb60f6a545 100644
--- a/lisp/emulation/viper-macs.el
+++ b/lisp/emulation/viper-macs.el
@@ -166,7 +166,7 @@ a key is a symbol, e.g., `a', `\\1', `f2', etc., or a list, 
e.g.,
        (if (member
             key
             '(?\b ?\d '^? '^H (control h) (control \?) backspace delete))
-           (setq key-seq (viper-subseq key-seq 0 (- (length key-seq) 2))))
+            (setq key-seq (seq-subseq key-seq 0 (- (length key-seq) 2))))
        (setq message
              (format
               ":map%s %s"
@@ -230,9 +230,9 @@ a key is a symbol, e.g., `a', `\\1', `f2', etc., or a list, 
e.g.,
        (cond ((member
                key
                '(?\b ?\d '^? '^H (control h) (control \?) backspace delete))
-              (setq key-seq (viper-subseq key-seq 0 (- (length key-seq) 2))))
+               (setq key-seq (cl-subseq key-seq 0 (- (length key-seq) 2))))
              ((member key '(tab (control i) ?\t))
-              (setq key-seq (viper-subseq key-seq 0 (1- (length key-seq))))
+               (setq key-seq (cl-subseq key-seq 0 (1- (length key-seq))))
               (setq message
                     (format
                      ":unmap%s %s"
@@ -611,7 +611,7 @@ mistakes in macro names to be passed to this function is to 
use
 
     (if (null macro-alist-elt)
        (setq macro-alist-elt (car next-best-match)
-             unmatched-suffix (viper-subseq event-seq (cdr next-best-match))))
+              unmatched-suffix (cl-subseq event-seq (cdr next-best-match))))
 
     (cond ((null macro-alist-elt))
          ((setq macro-body (viper-kbd-buf-definition macro-alist-elt)))
@@ -693,7 +693,7 @@ mistakes in macro names to be passed to this function is to 
use
   (let ((len1 (length seq1))
        (len2 (length seq2)))
     (if (<= len1 len2)
-       (equal seq1 (viper-subseq seq2 0 len1)))))
+        (equal seq1 (cl-subseq seq2 0 len1)))))
 
 ;; find the longest common prefix
 (defun viper-common-seq-prefix (&rest seqs)
@@ -757,7 +757,7 @@ mistakes in macro names to be passed to this function is to 
use
       (setq macro-def (car lis)
            def-len (length (car macro-def)))
       (if (and (>= str-len def-len)
-              (equal (car macro-def) (viper-subseq str 0 def-len)))
+               (equal (car macro-def) (cl-subseq str 0 def-len)))
          (if (or (viper-kbd-buf-definition macro-def)
                  (viper-kbd-mode-definition macro-def)
                  (viper-kbd-global-definition macro-def))
diff --git a/lisp/emulation/viper-mous.el b/lisp/emulation/viper-mous.el
index 83fc5afafa..98b123a7f4 100644
--- a/lisp/emulation/viper-mous.el
+++ b/lisp/emulation/viper-mous.el
@@ -116,7 +116,7 @@ considered related."
   (buffer-name (viper-mouse-click-window-buffer click)))
 
 (defsubst viper-mouse-click-posn (click)
-  "Returns position of a click."
+  "Return position of a click."
   (declare (obsolete nil "27.1"))
   (posn-point (event-start click)))
 
diff --git a/lisp/emulation/viper-util.el b/lisp/emulation/viper-util.el
index 51f7406ad2..8ff1cf91c0 100644
--- a/lisp/emulation/viper-util.el
+++ b/lisp/emulation/viper-util.el
@@ -927,7 +927,7 @@ Otherwise return the normal value."
                 (t key)))
 
          ((listp key)
-          (setq modifiers (viper-subseq key 0 (1- (length key)))
+           (setq modifiers (cl-subseq key 0 (1- (length key)))
                 base-key (viper-seq-last-elt key)
                 base-key-name (symbol-name base-key)
                 char-p (= (length base-key-name) 1))
@@ -1345,32 +1345,7 @@ This option is appropriate if you like Emacs-style 
words."
       (not (eq (get-char-property (point) 'field)
               (get-char-property (1- (point)) 'field)))))
 
-
-;; this is copied from cl-extra.el
-;; Return the subsequence of SEQ from START to END.
-;; If END is omitted, it defaults to the length of the sequence.
-;; If START or END is negative, it counts from the end.
-(defun viper-subseq (seq start &optional end)
-  (if (stringp seq) (substring seq start end)
-    (let (len)
-      (and end (< end 0) (setq end (+ end (setq len (length seq)))))
-      (if (< start 0) (setq start (+ start (or len (setq len (length seq))))))
-      (cond ((listp seq)
-            (if (> start 0) (setq seq (nthcdr start seq)))
-            (if end
-                (let ((res nil))
-                  (while (>= (setq end (1- end)) start)
-                    (push (pop seq) res))
-                  (nreverse res))
-              (copy-sequence seq)))
-           (t
-            (or end (setq end (or len (length seq))))
-            (let ((res (make-vector (max (- end start) 0) nil))
-                  (i 0))
-              (while (< start end)
-                (aset res i (aref seq start))
-                (setq i (1+ i) start (1+ start)))
-              res))))))
+(define-obsolete-function-alias 'viper-subseq #'cl-subseq "28.1")
 
 (provide 'viper-util)
 ;;; viper-util.el ends here
diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el
index cce5117433..6ba265f8ab 100644
--- a/lisp/emulation/viper.el
+++ b/lisp/emulation/viper.el
@@ -15,7 +15,7 @@
 ;; of the bug report be sent to the maintainer's email address.
 
 (defconst viper-version "3.14.2 of July 4, 2013"
-  "The current version of Viper")
+  "The current version of Viper.")
 
 ;; This file is part of GNU Emacs.
 
@@ -516,7 +516,7 @@ If Viper is enabled, turn it off.  Otherwise, turn it on."
 
 ;;;###autoload
 (defun viper-mode ()
-  "Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'."
+  "Turn on Viper emulation of Vi in Emacs.  See Info node `(viper)Top'."
   (interactive)
   (if (not noninteractive)
       (progn
diff --git a/lisp/epa-hook.el b/lisp/epa-hook.el
index 9ad952c681..99a432c236 100644
--- a/lisp/epa-hook.el
+++ b/lisp/epa-hook.el
@@ -24,7 +24,7 @@
 ;;; Code:
 
 (defgroup epa-file nil
-  "The EasyPG Assistant hooks for transparent file encryption"
+  "The EasyPG Assistant hooks for transparent file encryption."
   :version "23.1"
   :group 'epa)
 
diff --git a/lisp/epa.el b/lisp/epa.el
index 2698b39ffe..ed1dae3e8a 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -30,7 +30,7 @@
 ;;; Options
 
 (defgroup epa nil
-  "The EasyPG Assistant"
+  "The EasyPG Assistant."
   :version "23.1"
   :link '(custom-manual "(epa) Top")
   :group 'epg)
diff --git a/lisp/erc/erc-autoaway.el b/lisp/erc/erc-autoaway.el
index 1a13aa95cd..bbab37fd5d 100644
--- a/lisp/erc/erc-autoaway.el
+++ b/lisp/erc/erc-autoaway.el
@@ -183,7 +183,7 @@ See `erc-auto-discard-away'."
 
 (defcustom erc-autoaway-idle-seconds 1800
   "Number of seconds after which ERC will set you automatically away.
-If you are changing this variable using lisp instead of customizing it,
+If you are changing this variable using Lisp instead of customizing it,
 you have to run `erc-autoaway-reestablish-idletimer' afterwards."
   :set (lambda (sym val)
         (set-default sym val)
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 6d84665873..ad9719380a 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -950,15 +950,22 @@ PROCs `process-buffer' is `current-buffer' when this 
function is called."
   (unless (string= string "") ;; Ignore empty strings
     (save-match-data
       (let* ((tag-list (when (eq (aref string 0) ?@)
-                         (substring string 1 (string-search " " string))))
+                         (substring string 1
+                                    (if (>= emacs-major-version 28)
+                                        (string-search " " string)
+                                      (string-match " " string)))))
              (msg (make-erc-response :unparsed string :tags (when tag-list
                                                               (erc-parse-tags
                                                                tag-list))))
              (string (if tag-list
-                         (substring string (+ 1 (string-search " " string)))
+                         (substring string (+ 1 (if (>= emacs-major-version 28)
+                                                    (string-search " " string)
+                                                  (string-match " " string))))
                        string))
              (posn (if (eq (aref string 0) ?:)
-                       (string-search " " string)
+                       (if (>= emacs-major-version 28)
+                           (string-search " " string)
+                         (string-match " " string))
                      0)))
 
         (setf (erc-response.sender msg)
@@ -968,7 +975,9 @@ PROCs `process-buffer' is `current-buffer' when this 
function is called."
 
         (setf (erc-response.command msg)
               (let* ((bposn (string-match "[^ \n]" string posn))
-                     (eposn (string-search " " string bposn)))
+                     (eposn (if (>= emacs-major-version 28)
+                                (string-search " " string bposn)
+                              (string-match " " string bposn))))
                 (setq posn (and eposn
                                 (string-match "[^ \n]" string eposn)))
                 (substring string bposn eposn)))
@@ -976,7 +985,9 @@ PROCs `process-buffer' is `current-buffer' when this 
function is called."
         (while (and posn
                     (not (eq (aref string posn) ?:)))
           (push (let* ((bposn posn)
-                       (eposn (string-search " " string bposn)))
+                       (eposn (if (>= emacs-major-version 28)
+                                  (string-search " " string bposn)
+                                (string-match " " string bposn))))
                   (setq posn (and eposn
                                   (string-match "[^ \n]" string eposn)))
                   (substring string bposn eposn))
diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el
index 5953471ae8..040606ea85 100644
--- a/lisp/erc/erc-button.el
+++ b/lisp/erc/erc-button.el
@@ -24,7 +24,7 @@
 
 ;;; Commentary:
 
-;; Heavily borrowed from gnus-art.el. Thanks to the original authors.
+;; Heavily borrowed from gnus-art.el.  Thanks to the original authors.
 ;; This buttonizes nicks and other stuff to make it all clickable.
 ;; To enable, add to your init file:
 ;; (require 'erc-button)
@@ -165,7 +165,7 @@ REGEXP is the string matching text around the button or a 
symbol
 BUTTON is the number of the regexp grouping actually matching the
   button.  This is ignored if REGEXP is \\='nicknames.
 
-FORM is a lisp expression which must eval to true for the button to
+FORM is a Lisp expression which must eval to true for the button to
   be added.
 
 CALLBACK is the function to call when the user push this button.
@@ -194,9 +194,10 @@ PAR is a number of a regexp grouping whose text will be 
passed to
                         :inline t
                         (integer :tag "Regexp section number")))))
 
-(defcustom erc-emacswiki-url "https://www.emacswiki.org/cgi-bin/wiki.pl?";
-  "URL of the EmacsWiki Homepage."
-  :type 'string)
+(defcustom erc-emacswiki-url "https://www.emacswiki.org/emacs/";
+  "URL of the EmacsWiki website."
+  :type 'string
+  :version "28.1")
 
 (defcustom erc-emacswiki-lisp-url "https://www.emacswiki.org/elisp/";
   "URL of the EmacsWiki ELisp area."
diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el
index de72624aaa..b80f1832d7 100644
--- a/lisp/erc/erc-dcc.el
+++ b/lisp/erc/erc-dcc.el
@@ -187,7 +187,9 @@ compared with `erc-nick-equal-p' which is IRC 
case-insensitive."
                             (plist-get elt prop)))
             ;; if the property exists and is equal, we continue, else, try the
             ;; next element of the list
-            (or (and (eq prop :nick) (string-search "!" val)
+            (or (and (eq prop :nick) (if (>= emacs-major-version 28)
+                                         (string-search "!" val)
+                                       (string-match "!" val))
                      test (string-equal test val))
                 (and (eq prop :nick)
                      test val
@@ -630,8 +632,13 @@ that subcommand."
 
 (define-inline erc-dcc-unquote-filename (filename)
   (inline-quote
-   (string-replace "\\\\" "\\"
-                   (string-replace "\\\"" "\"" ,filename))))
+   (if (>= emacs-major-version 28)
+       (string-replace
+        "\\\\" "\\"
+        (string-replace "\\\"" "\"" ,filename))
+     (replace-regexp-in-string
+      "\\\\\\\\" "\\"
+      (replace-regexp-in-string "\\\\\"" "\"" ,filename t t) t t))))
 
 (defun erc-dcc-handle-ctcp-send (proc query nick login host to)
   "This is called if a CTCP DCC SEND subcommand is sent to the client.
diff --git a/lisp/erc/erc-ibuffer.el b/lisp/erc/erc-ibuffer.el
index 31e59a6d3e..95eab04044 100644
--- a/lisp/erc/erc-ibuffer.el
+++ b/lisp/erc/erc-ibuffer.el
@@ -38,17 +38,16 @@
   :group 'erc)
 
 (defcustom erc-ibuffer-keyword-char ?k
-  "Char used to indicate a channel which had keyword traffic lately (hidden)."
+  "Char indicating a channel which had keyword traffic lately (hidden)."
   :type 'character)
 (defcustom erc-ibuffer-pal-char ?p
-  "Char used to indicate a channel which had pal traffic lately (hidden)."
+  "Char indicating a channel which had pal traffic lately (hidden)."
   :type 'character)
 (defcustom erc-ibuffer-fool-char ?f
-  "Char used to indicate a channel which had fool traffic lately (hidden)."
+  "Char indicating a channel which had fool traffic lately (hidden)."
   :type 'character)
 (defcustom erc-ibuffer-dangerous-host-char ?d
-  "Char used to indicate a channel which had dangerous-host traffic lately
-\(hidden)."
+  "Char indicating a channel which had dangerous-host traffic lately (hidden)."
   :type 'character)
 
 (define-ibuffer-filter erc-server
diff --git a/lisp/erc/erc-join.el b/lisp/erc/erc-join.el
index 2ad9c8bd94..a4986918b6 100644
--- a/lisp/erc/erc-join.el
+++ b/lisp/erc/erc-join.el
@@ -34,6 +34,7 @@
 
 (require 'erc)
 (require 'auth-source)
+(require 'erc-networks)
 
 (defgroup erc-autojoin nil
   "Enable autojoining."
@@ -54,8 +55,12 @@
 (defcustom erc-autojoin-channels-alist nil
   "Alist of channels to autojoin on IRC networks.
 Every element in the alist has the form (SERVER . CHANNELS).
-SERVER is a regexp matching the server, and channels is the
-list of channels to join.
+SERVER is a regexp matching the server, and channels is the list
+of channels to join.  SERVER can also be a symbol, in which case
+it is matched against the value of `erc-network' instead of
+`erc-server-announced-name' or `erc-session-server' (this can be
+useful when connecting to an IRC proxy that relays several
+networks under the same server).
 
 If the channel(s) require channel keys for joining, the passwords
 are found via auth-source.  For instance, if you use ~/.authinfo
@@ -117,6 +122,15 @@ This is called from a timer set up by 
`erc-autojoin-channels'."
       (erc-log "Delayed autojoin started (no ident success detected yet)")
       (erc-autojoin-channels server nick))))
 
+(defun erc-autojoin-server-match (candidate)
+  "Match the current network or server against CANDIDATE
+This should be a key from `erc-autojoin-channels-alist'."
+  (or (eq candidate (erc-network))
+      (and (stringp candidate)
+          (string-match-p candidate
+                           (or erc-server-announced-name
+                              erc-session-server)))))
+
 (defun erc-autojoin-after-ident (_network _nick)
   "Autojoin channels in `erc-autojoin-channels-alist'.
 This function is run from `erc-nickserv-identified-hook'."
@@ -131,7 +145,7 @@ This function is run from `erc-nickserv-identified-hook'."
       ;; We may already be in these channels, e.g. because the
       ;; autojoin timer went off.
       (dolist (l erc-autojoin-channels-alist)
-       (when (string-match (car l) server)
+       (when (erc-autojoin-server-match (car l))
          (dolist (chan (cdr l))
            (unless (erc-member-ignore-case chan joined)
              (erc-server-join-channel server chan)))))))
@@ -150,15 +164,14 @@ This function is run from `erc-nickserv-identified-hook'."
     ;; `erc-autojoin-timing' is `connect':
     (let ((server (or erc-session-server erc-server-announced-name)))
       (dolist (l erc-autojoin-channels-alist)
-        (when (string-match-p (car l) server)
+        (when (erc-autojoin-server-match (car l))
          (dolist (chan (cdr l))
            (let ((buffer
                    (car (erc-buffer-filter
                          (lambda ()
                            (let ((current (erc-default-target)))
                              (and (stringp current)
-                                  (string-match-p (car l)
-                                                  (or erc-session-server 
erc-server-announced-name))
+                                  (erc-autojoin-server-match (car l))
                                   (string-equal (erc-downcase chan)
                                                 (erc-downcase current)))))))))
              (when (or (not buffer)
@@ -168,20 +181,30 @@ This function is run from `erc-nickserv-identified-hook'."
   ;; Return nil to avoid stomping on any other hook funcs.
   nil)
 
+(defun erc-autojoin-current-server ()
+  "Compute the current server for lookup in `erc-autojoin-channels-alist'.
+Respects `erc-autojoin-domain-only'."
+  (let ((server (or erc-server-announced-name erc-session-server)))
+    (if (and erc-autojoin-domain-only
+            (string-match "[^.\n]+\\.\\([^.\n]+\\.[^.\n]+\\)$" server))
+       (match-string 1 server)
+      server)))
+
 (defun erc-autojoin-add (proc parsed)
   "Add the channel being joined to `erc-autojoin-channels-alist'."
   (let* ((chnl (erc-response.contents parsed))
         (nick (car (erc-parse-user (erc-response.sender parsed))))
         (server (with-current-buffer (process-buffer proc)
-                  (or erc-session-server erc-server-announced-name))))
+                  (erc-autojoin-current-server))))
     (when (erc-current-nick-p nick)
-      (when (and erc-autojoin-domain-only
-                (string-match "[^.\n]+\\.\\([^.\n]+\\.[^.\n]+\\)$" server))
-       (setq server (match-string 1 server)))
-      (let ((elem (assoc server erc-autojoin-channels-alist)))
+      (let ((elem (or (assoc (erc-network) erc-autojoin-channels-alist)
+                     (assoc server erc-autojoin-channels-alist))))
        (if elem
            (unless (member chnl (cdr elem))
              (setcdr elem (cons chnl (cdr elem))))
+         ;; This always keys on server, not network -- user can
+         ;; override by simply adding a network to
+         ;; `erc-autojoin-channels-alist'
          (setq erc-autojoin-channels-alist
                (cons (list server chnl)
                      erc-autojoin-channels-alist))))))
@@ -196,12 +219,10 @@ This function is run from `erc-nickserv-identified-hook'."
   (let* ((chnl (car (erc-response.command-args parsed)))
         (nick (car (erc-parse-user (erc-response.sender parsed))))
         (server (with-current-buffer (process-buffer proc)
-                  (or erc-session-server erc-server-announced-name))))
+                  (erc-autojoin-current-server))))
     (when (erc-current-nick-p nick)
-      (when (and erc-autojoin-domain-only
-                (string-match "[^.\n]+\\.\\([^.\n]+\\.[^.\n]+\\)$" server))
-       (setq server (match-string 1 server)))
-      (let ((elem (assoc server erc-autojoin-channels-alist)))
+      (let ((elem (or (assoc (erc-network) erc-autojoin-channels-alist)
+                     (assoc server erc-autojoin-channels-alist))))
        (when elem
          (setcdr elem (delete chnl (cdr elem)))
          (unless (cdr elem)
diff --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el
index 43fbca3e66..fb50e84f65 100644
--- a/lisp/erc/erc-match.el
+++ b/lisp/erc/erc-match.el
@@ -24,7 +24,7 @@
 
 ;;; Commentary:
 
-;; This file includes stuff to work with pattern matching in ERC. If
+;; This file includes stuff to work with pattern matching in ERC.  If
 ;; you were used to customizing erc-fools, erc-keywords, erc-pals,
 ;; erc-dangerous-hosts and the like, this file contains these
 ;; customizable variables.
diff --git a/lisp/erc/erc-netsplit.el b/lisp/erc/erc-netsplit.el
index 9cfb947003..994f2d07c3 100644
--- a/lisp/erc/erc-netsplit.el
+++ b/lisp/erc/erc-netsplit.el
@@ -52,7 +52,7 @@ netsplits, so that it can filter the JOIN messages on a 
netjoin too."
    (remove-hook 'erc-timer-hook #'erc-netsplit-timer)))
 
 (defcustom erc-netsplit-show-server-mode-changes-flag nil
-  "Set to t to enable display of server mode changes."
+  "Non-nil means to enable display of server mode changes."
   :type 'boolean)
 
 (defcustom erc-netsplit-debug nil
@@ -61,8 +61,7 @@ netsplits, so that it can filter the JOIN messages on a 
netjoin too."
 
 (defcustom erc-netsplit-regexp
   "^[^ @!\"\n]+\\.[^ @!\n]+ [^ @!\n]+\\.[^ @!\"\n]+$"
-  "This regular expression should match quit reasons produced
-by netsplits."
+  "This regular expression should match quit reasons produced by netsplits."
   :type 'regexp)
 
 (defcustom erc-netsplit-hook nil
diff --git a/lisp/erc/erc-networks.el b/lisp/erc/erc-networks.el
index 54502b2df0..1c7742afd2 100644
--- a/lisp/erc/erc-networks.el
+++ b/lisp/erc/erc-networks.el
@@ -45,7 +45,7 @@
 ;; Variables
 
 (defgroup erc-networks nil
-  "IRC Networks"
+  "IRC Networks."
   :group 'erc)
 
 (defcustom erc-server-alist
@@ -720,7 +720,7 @@ NET is a symbol naming that IRC network and
 MATCHER is used to find a corresponding network to a server while
   connected to it.  If it is regexp, it's used to match against
   `erc-server-announced-name'.  It can also be a function (predicate).
-  Then it is executed with the server buffer as current-buffer."
+  Then it is executed with the server buffer as current buffer."
   :type '(repeat
          (list :tag "Network"
                (symbol :tag "Network name")
@@ -755,15 +755,6 @@ server name and search for a match in 
`erc-networks-alist'."
   "Return the value of `erc-network' for the current server."
   (erc-with-server-buffer erc-network))
 
-(defun erc-current-network ()
-  "Deprecated.  Use `erc-network' instead.
-Return the name of this server's network as a symbol."
-  (erc-with-server-buffer
-    (intern (downcase (symbol-name erc-network)))))
-
-(make-obsolete 'erc-current-network 'erc-network
-               "Obsolete since erc-networks 1.5")
-
 (defun erc-network-name ()
   "Return the name of the current network as a string."
   (erc-with-server-buffer (symbol-name erc-network)))
diff --git a/lisp/erc/erc-pcomplete.el b/lisp/erc/erc-pcomplete.el
index 8ea37c7f29..43330755a8 100644
--- a/lisp/erc/erc-pcomplete.el
+++ b/lisp/erc/erc-pcomplete.el
@@ -44,7 +44,7 @@
 (require 'time-date)
 
 (defgroup erc-pcomplete nil
-  "Programmable completion for ERC"
+  "Programmable completion for ERC."
   :group 'erc)
 
 (defcustom erc-pcomplete-nick-postfix ":"
diff --git a/lisp/erc/erc-replace.el b/lisp/erc/erc-replace.el
index 3f69c4cb9c..90c0ee6f8a 100644
--- a/lisp/erc/erc-replace.el
+++ b/lisp/erc/erc-replace.el
@@ -37,7 +37,7 @@
 (require 'erc)
 
 (defgroup erc-replace nil
-  "Replace text from incoming messages"
+  "Replace text from incoming messages."
   :group 'erc)
 
 (defcustom erc-replace-alist nil
diff --git a/lisp/erc/erc-ring.el b/lisp/erc/erc-ring.el
index 666fd58592..52285a8343 100644
--- a/lisp/erc/erc-ring.el
+++ b/lisp/erc/erc-ring.el
@@ -79,7 +79,7 @@ STATE-OR-STRING should be a string or an erc-input object."
   (setq erc-input-ring-index nil))
 
 (defun erc-clear-input-ring ()
-  "Remove all entries from the input ring, then call garbage-collect.
+  "Remove all entries from the input ring, then call `garbage-collect'.
 You might use this for security purposes if you have typed a command
 containing a password."
   (interactive)
diff --git a/lisp/erc/erc-services.el b/lisp/erc/erc-services.el
index 61006e0c02..adb3f521cd 100644
--- a/lisp/erc/erc-services.el
+++ b/lisp/erc/erc-services.el
@@ -169,9 +169,8 @@ You can also use \\[erc-nickserv-identify-mode] to change 
modes."
 
 (defcustom erc-use-auth-source-for-nickserv-password nil
   "Query auth-source for a password when identifiying to NickServ.
-This option has an no effect if `erc-prompt-for-nickserv-password'
-is non-nil, and passwords from `erc-nickserv-passwords' take
-precedence."
+Passwords from `erc-nickserv-passwords' take precedence.  See
+function `erc-nickserv-get-password'."
   :version "28.1"
   :type 'boolean)
 
@@ -405,85 +404,114 @@ password for this nickname, otherwise try to send it 
automatically."
                 identify-regex
                 (string-match identify-regex msg))
        (erc-log "NickServ IDENTIFY request detected")
-       (erc-nickserv-call-identify-function nick)
+        (erc-nickserv-identify nil nick)
        nil))))
 
 (defun erc-nickserv-identify-on-connect (_server nick)
   "Identify to Nickserv after the connection to the server is established."
-  (unless (or (and (null erc-nickserv-passwords)
-                   (null erc-prompt-for-nickserv-password)
-                   (null erc-use-auth-source-for-nickserv-password))
-              (and (eq erc-nickserv-identify-mode 'both)
-                   (erc-nickserv-alist-regexp (erc-network))))
-    (erc-nickserv-call-identify-function nick)))
+  (unless (and (eq erc-nickserv-identify-mode 'both)
+               (erc-nickserv-alist-regexp (erc-network)))
+    (erc-nickserv-identify nil nick)))
 
 (defun erc-nickserv-identify-on-nick-change (nick _old-nick)
   "Identify to Nickserv whenever your nick changes."
-  (unless (or (and (null erc-nickserv-passwords)
-                   (null erc-prompt-for-nickserv-password)
-                   (null erc-use-auth-source-for-nickserv-password))
-              (and (eq erc-nickserv-identify-mode 'both)
-                   (erc-nickserv-alist-regexp (erc-network))))
-    (erc-nickserv-call-identify-function nick)))
-
-(defun erc-nickserv-get-password (nickname)
-  "Return the password for NICKNAME from configured sources.
-
-It uses `erc-nickserv-passwords' and additionally auth-source
-when `erc-use-auth-source-for-nickserv-password' is not nil."
-  (or
-   (when erc-nickserv-passwords
-     (cdr (assoc nickname
-                 (nth 1 (assoc (erc-network)
-                               erc-nickserv-passwords)))))
-   (when erc-use-auth-source-for-nickserv-password
-     (let* ((secret (nth 0 (auth-source-search
-                            :max 1 :require '(:secret)
-                            :host (erc-with-server-buffer erc-session-server)
-                            :port (format ; ensure we have a string
-                                   "%s" (erc-with-server-buffer 
erc-session-port))
-                            :user nickname))))
-       (when secret
-         (let ((passwd (plist-get secret :secret)))
-           (if (functionp passwd) (funcall passwd) passwd)))))))
-
-(defun erc-nickserv-call-identify-function (nickname)
-  "Call `erc-nickserv-identify'.
-Either call it interactively or run it with NICKNAME's password,
-depending on the value of `erc-prompt-for-nickserv-password'."
-  (if erc-prompt-for-nickserv-password
-      (call-interactively 'erc-nickserv-identify)
-    (erc-nickserv-identify (erc-nickserv-get-password nickname))))
+  (unless (and (eq erc-nickserv-identify-mode 'both)
+               (erc-nickserv-alist-regexp (erc-network)))
+    (erc-nickserv-identify nil nick)))
+
+(defun erc-nickserv-get-password (nick)
+  "Return the password for NICK from configured sources.
+First, a password for NICK is looked up in
+`erc-nickserv-passwords'.  Then, it is looked up in auth-source
+if `erc-use-auth-source-for-nickserv-password' is not nil.
+Finally, interactively prompt the user, if
+`erc-prompt-for-nickserv-password' is true.
+
+As soon as some source returns a password, the sequence of
+lookups stops and this function returns it (or returns nil if it
+is empty).  Otherwise, no corresponding password was found, and
+it returns nil."
+  (let (network server port)
+    ;; Fill in local vars, switching to the server buffer once only
+    (erc-with-server-buffer
+     (setq network erc-network
+           server erc-session-server
+           port erc-session-port))
+    (let ((ret
+           (or
+            (when erc-nickserv-passwords
+              (cdr (assoc nick
+                          (cl-second (assoc network
+                                            erc-nickserv-passwords)))))
+            (when erc-use-auth-source-for-nickserv-password
+              (let ((secret (cl-first (auth-source-search
+                                       :max 1 :require '(:secret)
+                                       :host server
+                                       ;; Ensure a string for :port
+                                       :port (format "%s" port)
+                                       :user nick))))
+                (when secret
+                  (let ((passwd (plist-get secret :secret)))
+                    (if (functionp passwd) (funcall passwd) passwd)))))
+            (when erc-prompt-for-nickserv-password
+              (read-passwd
+               (format "NickServ password for %s on %s (RET to cancel): "
+                       nick network))))))
+      (when (and ret (not (string= ret "")))
+        ret))))
 
 (defvar erc-auto-discard-away)
 
-;;;###autoload
-(defun erc-nickserv-identify (password)
+(defun erc-nickserv-send-identify (nick password)
   "Send an \"identify <PASSWORD>\" message to NickServ.
-When called interactively, read the password using `read-passwd'."
+Returns t if the message could be sent, nil otherwise."
+  (let* ((erc-auto-discard-away nil)
+         (network (erc-network))
+         (nickserv-info (assoc network erc-nickserv-alist))
+         (nickserv (or (erc-nickserv-alist-nickserv nil nickserv-info)
+                       "NickServ"))
+         (identify-word (or (erc-nickserv-alist-ident-keyword
+                             nil nickserv-info)
+                            "IDENTIFY"))
+         (nick (if (erc-nickserv-alist-use-nick-p nil nickserv-info)
+                   (concat nick " ")
+                 ""))
+         (msgtype (or (erc-nickserv-alist-ident-command nil nickserv-info)
+                      "PRIVMSG")))
+    (erc-message msgtype
+                 (concat nickserv " " identify-word " " nick password))))
+
+(defun erc-nickserv-call-identify-function (nickname)
+  "Call `erc-nickserv-identify' with NICKNAME."
+  (declare (obsolete erc-nickserv-identify "28.1"))
+  (erc-nickserv-identify nil nickname))
+
+;;;###autoload
+(defun erc-nickserv-identify (&optional password nick)
+  "Identify to NickServ immediately.
+Identification will either use NICK or the current nick if not
+provided, and some password obtained through
+`erc-nickserv-get-password' (which see).  If no password can be
+found, an error is reported trough `erc-error'.
+
+Interactively, the user will be prompted for NICK, an empty
+string meaning to default to the current nick.
+
+Returns t if the identify message could be sent, nil otherwise."
   (interactive
-   (list (read-passwd
-         (format "NickServ password for %s on %s (RET to cancel): "
-                 (erc-current-nick)
-                 (or (and (erc-network)
-                          (symbol-name (erc-network)))
-                     "Unknown network")))))
-  (when (and password (not (string= "" password)))
-    (let* ((erc-auto-discard-away nil)
-          (network (erc-network))
-          (nickserv-info (assoc network erc-nickserv-alist))
-          (nickserv (or (erc-nickserv-alist-nickserv nil nickserv-info)
-                        "NickServ"))
-          (identify-word (or (erc-nickserv-alist-ident-keyword
-                              nil nickserv-info)
-                             "IDENTIFY"))
-          (nick (if (erc-nickserv-alist-use-nick-p nil nickserv-info)
-                    (concat (erc-current-nick) " ")
-                  ""))
-          (msgtype (or (erc-nickserv-alist-ident-command nil nickserv-info)
-                       "PRIVMSG")))
-      (erc-message msgtype
-                  (concat nickserv " " identify-word " " nick password)))))
+   (list
+    nil
+    (read-from-minibuffer "Nickname: " nil nil nil
+                          'erc-nick-history-list (erc-current-nick))))
+  (unless (and nick (not (string= nick "")))
+    (setq nick (erc-current-nick)))
+  (unless password
+    (setq password (erc-nickserv-get-password nick)))
+  (if password
+      (erc-nickserv-send-identify nick password)
+    (erc-error "Cannot find a password for nickname %s"
+               nick)
+    nil))
 
 (provide 'erc-services)
 
diff --git a/lisp/erc/erc-sound.el b/lisp/erc/erc-sound.el
index 92759d206a..e835c45af8 100644
--- a/lisp/erc/erc-sound.el
+++ b/lisp/erc/erc-sound.el
@@ -128,8 +128,9 @@ See also `play-sound-file'."
     (erc-log (format "Playing sound file %S" filepath))))
 
 (defun erc-toggle-sound (&optional arg)
-  "Toggles playing sounds on and off.  With positive argument,
-  turns them on.  With any other argument turns sounds off."
+  "Toggles playing sounds on and off.
+With positive argument, turns them on.  With any other argument
+turns sounds off."
   (interactive "P")
   (cond ((and (numberp arg) (> arg 0))
         (setq erc-play-sound t))
diff --git a/lisp/erc/erc-speedbar.el b/lisp/erc/erc-speedbar.el
index e61e741302..84854e3be5 100644
--- a/lisp/erc/erc-speedbar.el
+++ b/lisp/erc/erc-speedbar.el
@@ -139,7 +139,9 @@ This will add a speedbar major display mode."
        t))))
 
 (defun erc-speedbar-expand-server (text server indent)
-  (cond ((string-search "+" text)
+  (cond ((if (>= emacs-major-version 28)
+             (string-search "+" text)
+           (string-match "\\+" text))
         (speedbar-change-expand-button-char ?-)
         (if (speedbar-with-writable
               (save-excursion
@@ -147,7 +149,10 @@ This will add a speedbar major display mode."
                 (erc-speedbar-channel-buttons nil (1+ indent) server)))
             (speedbar-change-expand-button-char ?-)
           (speedbar-change-expand-button-char ??)))
-       ((string-search "-" text)       ;we have to contract this node
+       (;; we have to contract this node
+         (if (>= emacs-major-version 28)
+             (string-search "-" text)
+           (string-match "-" text))
         (speedbar-change-expand-button-char ?+)
         (speedbar-delete-subblock indent))
        (t (error "Ooops... not sure what to do")))
@@ -184,7 +189,9 @@ This will add a speedbar major display mode."
   "For the line matching TEXT, in CHANNEL, expand or contract a line.
 INDENT is the current indentation level."
   (cond
-   ((string-search "+" text)
+   ((if (>= emacs-major-version 28)
+        (string-search "+" text)
+      (string-match "\\+" text))
     (speedbar-change-expand-button-char ?-)
     (speedbar-with-writable
      (save-excursion
@@ -233,7 +240,9 @@ INDENT is the current indentation level."
             (speedbar-with-writable
              (dolist (entry names)
                (erc-speedbar-insert-user entry ?+ (1+ indent))))))))))
-   ((string-search "-" text)
+   ((if (>= emacs-major-version 28)
+        (string-search "-" text)
+      (string-match "-" text))
     (speedbar-change-expand-button-char ?+)
     (speedbar-delete-subblock indent))
    (t (error "Ooops... not sure what to do")))
@@ -284,7 +293,9 @@ The update is only done when the channel is actually 
expanded already."
        (erc-speedbar-expand-channel "+" buffer 1)))))
 
 (defun erc-speedbar-expand-user (text token indent)
-  (cond ((string-search "+" text)
+  (cond ((if (>= emacs-major-version 28)
+             (string-search "+" text)
+           (string-match "\\+" text))
         (speedbar-change-expand-button-char ?-)
         (speedbar-with-writable
           (save-excursion
@@ -307,7 +318,9 @@ The update is only done when the channel is actually 
expanded already."
                  nil nil nil nil
                  info nil nil nil
                  (1+ indent)))))))
-       ((string-search "-" text)
+       ((if (>= emacs-major-version 28)
+             (string-search "-" text)
+           (string-match "-" text))
         (speedbar-change-expand-button-char ?+)
         (speedbar-delete-subblock indent))
        (t (error "Ooops... not sure what to do")))
diff --git a/lisp/erc/erc-spelling.el b/lisp/erc/erc-spelling.el
index 950a821e3c..ddfaafb048 100644
--- a/lisp/erc/erc-spelling.el
+++ b/lisp/erc/erc-spelling.el
@@ -24,7 +24,7 @@
 
 ;;; Commentary:
 
-;; This is an ERC module to enable flyspell mode in ERC buffers. This
+;; This is an ERC module to enable flyspell mode in ERC buffers.  This
 ;; ensures correct behavior of flyspell, and even sets up a
 ;; channel-local dictionary if so required.
 
diff --git a/lisp/erc/erc-status-sidebar.el b/lisp/erc/erc-status-sidebar.el
index a75a74bb6f..a6ad856bfd 100644
--- a/lisp/erc/erc-status-sidebar.el
+++ b/lisp/erc/erc-status-sidebar.el
@@ -274,7 +274,7 @@ to the `window-configuration-change-hook'."
       (apply #'window-preserve-size (selected-window) t t nil))))
 
 (define-derived-mode erc-status-sidebar-mode special-mode "ERC Sidebar"
-  "Major mode for ERC status sidebar"
+  "Major mode for ERC status sidebar."
   ;; Don't scroll the buffer horizontally, if a channel name is
   ;; obscured then the window can be resized.
   (setq-local auto-hscroll-mode nil)
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index 2364d45d6f..eb2a9712ac 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -262,14 +262,22 @@ nil            - don't add to mode line."
 
 (defvar erc-modified-channels-alist nil
   "An ALIST used for tracking channel modification activity.
-Each element looks like (BUFFER COUNT FACE) where BUFFER is a buffer
-object of the channel the entry corresponds to, COUNT is a number
-indicating how often activity was noticed, and FACE is the face to use
-when displaying the buffer's name.  See `erc-track-faces-priority-list',
-and `erc-track-showcount'.
-
-Entries in this list should only happen for buffers where activity occurred
-while the buffer was not visible.")
+Each element is a list of the form (BUFFER COUNT . FACE) where
+BUFFER is a buffer object of the channel the entry corresponds
+to, COUNT is a number indicating how often activity was noticed,
+and FACE is a face (or a list of faces, combined as usual) to use
+when displaying the buffer's name in the mode line.
+
+Entries in this list are only added/updated for buffers that were
+not visible when activity occurred in them, and are removed for
+each buffer as soon as it becomes visible again (or if the server
+is disconnected, provided `erc-track-remove-disconnected-buffers'
+is true).
+
+For how the face is chosen for a buffer, see
+`erc-track-select-mode-line-face' and
+`erc-track-priority-faces-only'.  For how buffers are then
+displayed in the mode line, see `erc-modified-channels-display'.")
 
 (defcustom erc-track-showcount nil
   "If non-nil, count of unseen messages will be shown for each channel."
@@ -538,8 +546,7 @@ keybindings will not do anything useful."
        (erc-track-minor-mode -1)))))
 
 (defcustom erc-track-when-inactive nil
-  "Enable channel tracking even for visible buffers, if you are
-inactive."
+  "Enable channel tracking even for visible buffers, if you are inactive."
   :type 'boolean
   :set (lambda (sym val)
         (if erc-track-mode
@@ -590,9 +597,10 @@ only consider active buffers visible.")
     (erc-modified-channels-update)))
 
 (defvar erc-modified-channels-update-inside nil
-  "Variable to prevent running `erc-modified-channels-update' multiple
-times.  Without it, you cannot debug `erc-modified-channels-display',
-because the debugger also causes changes to the window-configuration.")
+  "Variable to prevent running `erc-modified-channels-update' multiple times.
+Without it, you cannot debug `erc-modified-channels-display',
+because the debugger also causes changes to the
+window-configuration.")
 
 (defun erc-modified-channels-update (&rest _args)
   "This function updates the information in `erc-modified-channels-alist'
@@ -622,8 +630,14 @@ ARGS are ignored."
   "The face to use when mouse is over channel names in the mode line.")
 
 (defun erc-make-mode-line-buffer-name (string buffer &optional faces count)
-  "Return STRING as a button that switches to BUFFER when clicked.
-If FACES are provided, color STRING with them."
+  "Return a button that switches to BUFFER when clicked.
+STRING is the string in the button.  It is possibly suffixed with
+the number of unread messages, according to variables
+`erc-track-showcount' and `erc-track-showcount-string'.
+
+If `erc-track-use-faces' is true and FACES are provided, format
+STRING with them. When the mouse hovers above the button, STRING
+is displayed according to `erc-track-mouse-face'."
   ;; We define a new sparse keymap every time, because 1. this data
   ;; structure is very small, the alternative would require us to
   ;; defvar a keymap, 2. the user is not interested in customizing it
@@ -720,37 +734,49 @@ Use `erc-make-mode-line-buffer-name' to create buttons."
     (erc-modified-channels-display)))
 
 (defun erc-track-find-face (faces)
-  "Return the face to use in the mode line from the faces in FACES.
-If `erc-track-faces-priority-list' is set, the one from FACES who
-is first in that list will be used.  If nothing matches or if
-`erc-track-faces-priority-list' is not set, the default mode-line
-faces will be used.
-
-If `erc-track-faces-normal-list' is non-nil, use it to produce a
-blinking effect that indicates channel activity when the first
-element in FACES and the highest-ranking face among the rest of
-FACES are both members of `erc-track-faces-normal-list'.
-
-If one of the faces is a list, then it will be ranked according
-to its highest-tanking face member.  A list of faces including
-that member will take priority over just the single member
-element."
+  "Return the face to use in the mode line."
+  (declare (obsolete erc-track-select-mode-line-face "28.1"))
+  (erc-track-select-mode-line-face (car faces) (cdr faces)))
+
+(defun erc-track-select-mode-line-face (cur-face new-faces)
+  "Return the face to use in the mode line.
+
+CUR-FACE is the face currently used in the mode line (for the
+current buffer).  NEW-FACES is the list of new faces that have
+just been seen (in the current buffer).
+
+Initially, the selected face is the one with highest priority in
+`erc-track-faces-priority-list' (i.e., the one closest to the
+front of the list) among CUR-FACE and NEW-FACES.  If nothing
+matches (including if `erc-track-faces-priority-list' is not
+set), the default mode-line faces will be used (NIL is returned).
+
+If the selected face is still CUR-FACE (highest priority), and
+the highest priority face in NEW-FACES alone is different (which
+necessarily means it has lower priority than CUR-FACE), and both
+are in `erc-track-faces-normal-list', then the latter is selected
+instead.  This has the effect of allowing the current mode line
+face, if a member of `erc-track-faces-normal-list', to be
+replaced with another with lower priority face from NEW-FACES, if
+that face with highest priority in NEW-FACES is also a member of
+`erc-track-faces-normal-list'."
   (let ((choice (catch 'face
-                 (dolist (candidate erc-track-faces-priority-list)
-                   (when (member candidate faces)
-                     (throw 'face candidate)))))
-       (no-first (and erc-track-faces-normal-list
-                      (catch 'face
-                        (dolist (candidate erc-track-faces-priority-list)
-                          (when (member candidate (cdr faces))
-                            (throw 'face candidate)))))))
-    (cond ((null choice)
-          nil)
-         ((and (member choice erc-track-faces-normal-list)
-               (member no-first erc-track-faces-normal-list))
-          no-first)
-         (t
-          choice))))
+                  (dolist (candidate erc-track-faces-priority-list)
+                    (when (or (equal candidate cur-face)
+                              (member candidate new-faces))
+                      (throw 'face candidate))))))
+    (when choice
+      (if (and (equal choice cur-face)
+               (member choice erc-track-faces-normal-list))
+          (let ((only-in-new
+                 (catch 'face
+                   (dolist (candidate erc-track-faces-priority-list)
+                     (when (member candidate new-faces)
+                       (throw 'face candidate))))))
+            (if (member only-in-new erc-track-faces-normal-list)
+                only-in-new
+              choice))
+        choice))))
 
 (defun erc-track-modified-channels ()
   "Hook function for `erc-insert-post-hook' to check if the current
@@ -790,17 +816,17 @@ is in `erc-mode'."
                ;; Add buffer, faces and counts
                (setq erc-modified-channels-alist
                      (cons (cons (current-buffer)
-                                 (cons 1 (erc-track-find-face faces)))
+                                 (cons
+                                   1 (erc-track-select-mode-line-face
+                                      nil faces)))
                            erc-modified-channels-alist))
              ;; Else modify the face for the buffer, if necessary.
              (when faces
                (let* ((cell (assq (current-buffer)
                                   erc-modified-channels-alist))
                       (old-face (cddr cell))
-                      (new-face (erc-track-find-face
-                                 (if old-face
-                                     (cons old-face faces)
-                                   faces))))
+                      (new-face (erc-track-select-mode-line-face
+                                  old-face faces)))
                  (setcdr cell (cons (1+ (cadr cell)) new-face)))))
            ;; And display it
            (erc-modified-channels-display)))
diff --git a/lisp/erc/erc-truncate.el b/lisp/erc/erc-truncate.el
index ff33fbc557..2c4002f0ee 100644
--- a/lisp/erc/erc-truncate.el
+++ b/lisp/erc/erc-truncate.el
@@ -25,8 +25,8 @@
 ;;; Commentary:
 
 ;; This implements buffer truncation (and optional log file writing
-;; support for the Emacs IRC client. Use `erc-truncate-mode' to switch
-;; on. Use `erc-enable-logging' to enable logging of the stuff which
+;; support for the Emacs IRC client.  Use `erc-truncate-mode' to switch
+;; on.  Use `erc-enable-logging' to enable logging of the stuff which
 ;; is getting truncated.
 
 ;;; Code:
@@ -34,7 +34,7 @@
 (require 'erc)
 
 (defgroup erc-truncate nil
-  "Truncate buffers when they reach a certain size"
+  "Truncate buffers when they reach a certain size."
   :group 'erc)
 
 (defcustom erc-max-buffer-size 30000
diff --git a/lisp/erc/erc-xdcc.el b/lisp/erc/erc-xdcc.el
index e1b9f0de3a..c17eb59da3 100644
--- a/lisp/erc/erc-xdcc.el
+++ b/lisp/erc/erc-xdcc.el
@@ -68,7 +68,7 @@ being evaluated and should return strings."
 
 ;;;###autoload
 (defun erc-xdcc-add-file (file)
-  "Add a file to `erc-xdcc-files'."
+  "Add FILE to `erc-xdcc-files'."
   (interactive "fFilename to add to XDCC: ")
   (if (file-exists-p file)
       (add-to-list 'erc-xdcc-files file)))
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index e0fda41f8e..d08796a78d 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -80,32 +80,32 @@
   :group 'applications)
 
 (defgroup erc-buffers nil
-  "Creating new ERC buffers"
+  "Creating new ERC buffers."
   :group 'erc)
 
 (defgroup erc-display nil
-  "Settings for how various things are displayed"
+  "Settings for how various things are displayed."
   :group 'erc)
 
 (defgroup erc-mode-line-and-header nil
-  "Displaying information in the mode-line and header"
+  "Displaying information in the mode-line and header."
   :group 'erc-display)
 
 (defgroup erc-ignore nil
-  "Ignoring certain messages"
+  "Ignoring certain messages."
   :group 'erc)
 
 (defgroup erc-lurker nil
-  "Hide specified message types sent by lurkers"
+  "Hide specified message types sent by lurkers."
   :version "24.3"
   :group 'erc-ignore)
 
 (defgroup erc-query nil
-  "Using separate buffers for private discussions"
+  "Using separate buffers for private discussions."
   :group 'erc)
 
 (defgroup erc-quit-and-part nil
-  "Quitting and parting channels"
+  "Quitting and parting channels."
   :group 'erc)
 
 (defgroup erc-paranoia nil
@@ -113,7 +113,7 @@
   :group 'erc)
 
 (defgroup erc-scripts nil
-  "Running scripts at startup and with /LOAD"
+  "Running scripts at startup and with /LOAD."
   :group 'erc)
 
 (require 'erc-backend)
@@ -280,9 +280,9 @@ indicate it has handled the input."
   :type 'hook)
 
 (defcustom erc-join-hook nil
-  "Hook run when we join a channel.  Hook functions are called
-without arguments, with the current buffer set to the buffer of
-the new channel.
+  "Hook run when we join a channel.
+Hook functions are called without arguments, with the current
+buffer set to the buffer of the new channel.
 
 See also `erc-server-JOIN-functions', `erc-part-hook'."
   :group 'erc-hooks
@@ -533,10 +533,10 @@ Removes all users in the current channel.  This is called 
by
               (erc-channel-user-voice (cdr cdata))))))))
 
 (defun erc-get-channel-user-list ()
-  "Return a list of users in the current channel.  Each element
-of the list is of the form (USER . CHANNEL-DATA), where USER is
-an erc-server-user struct, and CHANNEL-DATA is either nil or an
-erc-channel-user struct.
+  "Return a list of users in the current channel.
+Each element of the list is of the form (USER . CHANNEL-DATA),
+where USER is an erc-server-user struct, and CHANNEL-DATA is
+either nil or an erc-channel-user struct.
 
 See also: `erc-sort-channel-users-by-activity'."
   (let (users)
@@ -816,7 +816,7 @@ set if some hacker is trying to flood you away."
 
 (defcustom erc-system-name nil
   "Use this as the name of your system.
-If nil, ERC will call `system-name' to get this information."
+If nil, ERC will call function `system-name' to get this information."
   :group 'erc
   :type '(choice (const :tag "Default system name" nil)
                  string))
@@ -1487,8 +1487,8 @@ Defaults to the server buffer."
   "IRC port to use if it cannot be detected otherwise.")
 
 (defconst erc-default-port-tls 6697
-  "IRC port to use for encrypted connections if it cannot be
-  detected otherwise.")
+  "IRC port to use for encrypted connections if it cannot be \
+detected otherwise.")
 
 (defcustom erc-join-buffer 'buffer
   "Determines how to display a newly created IRC buffer.
@@ -1732,20 +1732,11 @@ FORMS will be evaluated in all buffers having the 
process PROCESS and
 where PRED matches or in all buffers of the server process if PRED is
 nil."
   (declare (indent 1) (debug (form form body)))
-  ;; Make the evaluation have the correct order
-  (let ((pre (make-symbol "pre"))
-        (pro (make-symbol "pro")))
-    `(let* ((,pro ,process)
-            (,pre ,pred)
-            (res (mapcar (lambda (buffer)
-                           (with-current-buffer buffer
-                             ,@forms))
-                         (erc-buffer-list ,pre
-                                          ,pro))))
-       ;; Silence the byte-compiler by binding the result of mapcar to
-       ;; a variable.
-       (ignore res)
-       res)))
+  (macroexp-let2 nil pred pred
+    `(erc-buffer-filter (lambda ()
+                          (when (or (not ,pred) (funcall ,pred))
+                            ,@forms))
+                        ,process)))
 
 (define-obsolete-function-alias 'erc-iswitchb #'erc-switch-to-buffer "25.1")
 (defun erc--switch-to-buffer (&optional arg)
@@ -2312,6 +2303,22 @@ message instead, to make debugging easier."
 
 ;;; Debugging the protocol
 
+(defvar erc-debug-irc-protocol-time-format "%FT%T.%6N%z "
+  "Timestamp format string for protocol logger.")
+
+(defconst erc-debug-irc-protocol-version "1"
+  "Protocol log format version number.
+This exists to help tooling track changes to the format.
+
+In version 1, everything before and including the first double CRLF is
+front matter, which must also be CRLF terminated.  Lines beginning with
+three asterisks must be ignored as comments.  Other lines should be
+interpreted as email-style headers.  Folding is not supported.  A second
+double CRLF, if present, signals the end of a log.  Session resumption
+is not supported.  Logger lines must adhere to the following format:
+TIMESTAMP PEER-NAME FLOW-INDICATOR IRC-MESSAGE CRLF.  Outgoing messages
+are indicated with a >> and incoming with a <<.")
+
 (defvar erc-debug-irc-protocol nil
   "If non-nil, log all IRC protocol traffic to the buffer \"*erc-protocol*\".
 
@@ -2333,32 +2340,32 @@ This only has any effect if `erc-debug-irc-protocol' is 
non-nil.
 
 The buffer is created if it doesn't exist.
 
-If OUTBOUND is non-nil, STRING is being sent to the IRC server
-and appears in face `erc-input-face' in the buffer."
+If OUTBOUND is non-nil, STRING is being sent to the IRC server and
+appears in face `erc-input-face' in the buffer.  Lines must already
+contain CRLF endings.  Peer is identified by the most precise label
+available at run time, starting with the network name, followed by the
+announced host name, and falling back to the dialed <server>:<port>."
   (when erc-debug-irc-protocol
-    (let ((network-name (or (ignore-errors (erc-network-name))
-                            "???")))
+    (let ((esid (or (and (fboundp 'erc-network)
+                         (erc-network)
+                         (erc-network-name))
+                    erc-server-announced-name
+                    (format "%s:%s" erc-session-server erc-session-port)))
+          (ts (when erc-debug-irc-protocol-time-format
+                (format-time-string erc-debug-irc-protocol-time-format))))
       (with-current-buffer (get-buffer-create "*erc-protocol*")
         (save-excursion
           (goto-char (point-max))
           (let ((inhibit-read-only t))
-            (insert (if (not outbound)
-                        ;; Cope with the fact that string might
-                        ;; contain multiple lines of text.
-                        (let ((lines (delete "" (split-string string
-                                                              "\n\\|\r\n")))
-                              (result ""))
-                          (dolist (line lines)
-                            (setq result (concat result network-name
-                                                 " << " line "\n")))
-                          result)
-                      (propertize
-                       (concat network-name " >> " string
-                               (if (/= ?\n
-                                       (aref string
-                                             (1- (length string))))
-                                   "\n"))
-                       'font-lock-face 'erc-input-face)))))
+            (insert (if outbound
+                        (concat ts esid " >> " string)
+                      ;; Cope with multi-line messages
+                      (let ((lines (split-string string "[\r\n]+" t))
+                            result)
+                        (dolist (line lines)
+                          (setq result (concat result ts esid
+                                               " << " line "\r\n")))
+                        result)))))
         (let ((orig-win (selected-window))
               (debug-buffer-window (get-buffer-window (current-buffer) t)))
           (when debug-buffer-window
@@ -2377,9 +2384,16 @@ If ARG is non-nil, show the *erc-protocol* buffer."
     (with-current-buffer buf
       (view-mode-enter)
       (when (null (current-local-map))
-        (let ((inhibit-read-only t))
-          (insert (erc-make-notice "This buffer displays all IRC protocol 
traffic exchanged with each server.\n"))
-          (insert (erc-make-notice "Kill this buffer to terminate protocol 
logging.\n\n")))
+        (let ((inhibit-read-only t)
+              (msg (list
+                    (concat "Version: " erc-debug-irc-protocol-version)
+                    (concat "Emacs-Version: " emacs-version)
+                    (erc-make-notice
+                     (concat "This buffer displays all IRC protocol "
+                             "traffic exchanged with servers."))
+                    (erc-make-notice "Kill it to disable logging.")
+                    (erc-make-notice "Press `t' to toggle."))))
+          (insert (string-join msg "\r\n")))
         (use-local-map (make-sparse-keymap))
         (local-set-key (kbd "t") 'erc-toggle-debug-irc-protocol))
       (add-hook 'kill-buffer-hook
@@ -2387,10 +2401,12 @@ If ARG is non-nil, show the *erc-protocol* buffer."
                 nil 'local)
       (goto-char (point-max))
       (let ((inhibit-read-only t))
-        (insert (erc-make-notice
-                 (format "IRC protocol logging %s at %s -- Press `t' to toggle 
logging.\n"
+        (insert (if erc-debug-irc-protocol "\r\n" "")
+                (erc-make-notice
+                 (format "IRC protocol logging %s at %s"
                          (if erc-debug-irc-protocol "disabled" "enabled")
-                         (current-time-string))))))
+                         (current-time-string)))
+                (if erc-debug-irc-protocol "\r\n" "\r\n\r\n"))))
     (setq erc-debug-irc-protocol (not erc-debug-irc-protocol))
     (if (and arg
              (not (get-buffer-window "*erc-protocol*" t)))
@@ -2583,9 +2599,8 @@ See also `erc-lurker-trim-nicks'."
 Returns NICK unmodified unless `erc-lurker-trim-nicks' is
 non-nil."
   (if erc-lurker-trim-nicks
-      (replace-regexp-in-string
-       (regexp-opt-charset (string-to-list erc-lurker-ignore-chars))
-       "" nick)
+      (string-trim-right
+       nick (rx-to-string `(+ (in ,@(string-to-list 
erc-lurker-ignore-chars)))))
     nick))
 
 (defcustom erc-lurker-hide-list nil
@@ -3597,7 +3612,9 @@ If S is non-nil, it will be used as the quit reason."
 If S is non-nil, it will be used as the quit reason."
   (or s
       (if (fboundp 'yow)
-          (string-replace "\n" "" (yow))
+          (if (>= emacs-major-version 28)
+              (string-replace "\n" "" (yow))
+            (replace-regexp-in-string "\n" "" (yow)))
         (erc-quit/part-reason-default))))
 
 (make-obsolete 'erc-quit-reason-zippy "it will be removed." "24.4")
@@ -3624,7 +3641,9 @@ If S is non-nil, it will be used as the part reason."
 If S is non-nil, it will be used as the quit reason."
   (or s
       (if (fboundp 'yow)
-          (string-replace "\n" "" (yow))
+          (if (>= emacs-major-version 28)
+              (string-replace "\n" "" (yow))
+            (replace-regexp-in-string "\n" "" (yow)))
         (erc-quit/part-reason-default))))
 
 (make-obsolete 'erc-part-reason-zippy "it will be removed." "24.4")
@@ -3722,7 +3741,7 @@ the message given by REASON."
   (condition-case nil
       (erc :server server :nick (erc-current-nick))
     (error
-     (erc-error "Cannot find host %s." server)))
+     (erc-error "Cannot find host: `%s'" server)))
   t)
 (put 'erc-cmd-SERVER 'process-not-needed t)
 
@@ -4471,7 +4490,7 @@ also `erc-format-nick-function'."
       (propertize prefix 'font-lock-face 'erc-default-face))))
 
 (defun erc-echo-notice-in-default-buffer (s parsed buffer _sender)
-  "Echos a private notice in the default buffer, namely the
+  "Echo a private notice in the default buffer, namely the
 target buffer specified by BUFFER, or there is no target buffer,
 the server buffer.  This function is designed to be added to
 either `erc-echo-notice-hook' or `erc-echo-notice-always-hook',
@@ -4480,30 +4499,32 @@ and always returns t."
   t)
 
 (defun erc-echo-notice-in-target-buffer (s parsed buffer _sender)
-  "Echos a private notice in BUFFER, if BUFFER is non-nil.  This
-function is designed to be added to either `erc-echo-notice-hook'
-or `erc-echo-notice-always-hook', and returns non-nil if BUFFER
-is non-nil."
+  "Echo a private notice in BUFFER, if BUFFER is non-nil.
+This function is designed to be added to either
+`erc-echo-notice-hook' or `erc-echo-notice-always-hook', and
+returns non-nil if BUFFER is non-nil."
   (if buffer
       (progn (erc-display-message parsed nil buffer s) t)
     nil))
 
 (defun erc-echo-notice-in-minibuffer (s _parsed _buffer _sender)
-  "Echos a private notice in the minibuffer.  This function is
-designed to be added to either `erc-echo-notice-hook' or
-`erc-echo-notice-always-hook', and always returns t."
+  "Echo a private notice in the minibuffer.
+This function is designed to be added to either
+`erc-echo-notice-hook' or `erc-echo-notice-always-hook', and
+always returns t."
   (message "%s" (concat "NOTICE: " s))
   t)
 
 (defun erc-echo-notice-in-server-buffer (s parsed _buffer _sender)
-  "Echos a private notice in the server buffer.  This function is
-designed to be added to either `erc-echo-notice-hook' or
-`erc-echo-notice-always-hook', and always returns t."
+  "Echo a private notice in the server buffer.
+This function is designed to be added to either
+`erc-echo-notice-hook' or `erc-echo-notice-always-hook', and
+always returns t."
   (erc-display-message parsed nil nil s)
   t)
 
 (defun erc-echo-notice-in-active-non-server-buffer (s parsed _buffer _sender)
-  "Echos a private notice in the active buffer if the active
+  "Echo a private notice in the active buffer if the active
 buffer is not the server buffer.  This function is designed to be
 added to either `erc-echo-notice-hook' or
 `erc-echo-notice-always-hook', and returns non-nil if the active
@@ -4513,14 +4534,15 @@ buffer is not the server buffer."
     nil))
 
 (defun erc-echo-notice-in-active-buffer (s parsed _buffer _sender)
-  "Echos a private notice in the active buffer.  This function is
-designed to be added to either `erc-echo-notice-hook' or
-`erc-echo-notice-always-hook', and always returns t."
+  "Echo a private notice in the active buffer.
+This function is designed to be added to either
+`erc-echo-notice-hook' or `erc-echo-notice-always-hook', and
+always returns t."
   (erc-display-message parsed nil 'active s)
   t)
 
 (defun erc-echo-notice-in-user-buffers (s parsed _buffer sender)
-  "Echos a private notice in all of the buffers for which SENDER
+  "Echo a private notice in all of the buffers for which SENDER
 is a member.  This function is designed to be added to either
 `erc-echo-notice-hook' or `erc-echo-notice-always-hook', and
 returns non-nil if there is at least one buffer for which the
@@ -4534,7 +4556,7 @@ See also: `erc-echo-notice-in-first-user-buffer',
       nil)))
 
 (defun erc-echo-notice-in-user-and-target-buffers (s parsed buffer sender)
-  "Echos a private notice in BUFFER and in all of the buffers for
+  "Echo a private notice in BUFFER and in all of the buffers for
 which SENDER is a member.  This function is designed to be added
 to either `erc-echo-notice-hook' or
 `erc-echo-notice-always-hook', and returns non-nil if there is
@@ -4550,7 +4572,7 @@ See also: `erc-echo-notice-in-user-buffers',
       nil)))
 
 (defun erc-echo-notice-in-first-user-buffer (s parsed _buffer sender)
-  "Echos a private notice in one of the buffers for which SENDER
+  "Echo a private notice in one of the buffers for which SENDER
 is a member.  This function is designed to be added to either
 `erc-echo-notice-hook' or `erc-echo-notice-always-hook', and
 returns non-nil if there is at least one buffer for which the
@@ -5011,10 +5033,11 @@ See also: `erc-update-user'."
 
 (defun erc-update-user (user &optional new-nick
                              host login full-name info)
-  "Update user info for USER.  USER must be an erc-server-user
-struct.  Any of NEW-NICK, HOST, LOGIN, FULL-NAME, INFO which are
-non-nil and not equal to the existing values for USER are used to
-replace the stored values in USER.
+  "Update user info for USER.
+USER must be an erc-server-user struct.  Any of NEW-NICK, HOST,
+LOGIN, FULL-NAME, INFO which are non-nil and not equal to the
+existing values for USER are used to replace the stored values in
+USER.
 
 If, and only if, a change is made,
 `erc-channel-members-changed-hook' is run for each channel for
@@ -5551,9 +5574,9 @@ submitted line to be intentional."
   string insertp sendp)
 
 (defun erc-send-input (input)
-  "Treat INPUT as typed in by the user.  It is assumed that the input
-and the prompt is already deleted.
-This returns non-nil only if we actually send anything."
+  "Treat INPUT as typed in by the user.
+It is assumed that the input and the prompt is already deleted.
+Return non-nil only if we actually send anything."
   ;; Handle different kinds of inputs
   (cond
    ;; Ignore empty input
@@ -5587,7 +5610,9 @@ This returns non-nil only if we actually send anything."
       (when (and (erc-input-sendp state)
                 erc-send-this)
        (let ((string (erc-input-string state)))
-          (if (or (string-search "\n" string)
+          (if (or (if (>= emacs-major-version 28)
+                      (string-search "\n" string)
+                    (string-match "\n" string))
                   (not (string-match erc-command-regexp string)))
               (mapc
                (lambda (line)
@@ -6528,13 +6553,21 @@ if `erc-away' is non-nil."
                                   (fill-region (point-min) (point-max))
                                   (buffer-string))))
                  (setq header-line-format
-                       (string-replace
-                        "%"
-                        "%%"
-                        (if face
-                            (propertize header 'help-echo help-echo
-                                        'face face)
-                          (propertize header 'help-echo help-echo))))))
+                       (if (>= emacs-major-version 28)
+                           (string-replace
+                            "%"
+                            "%%"
+                            (if face
+                                (propertize header 'help-echo help-echo
+                                            'face face)
+                              (propertize header 'help-echo help-echo)))
+                         (replace-regexp-in-string
+                          "%"
+                          "%%"
+                          (if face
+                              (propertize header 'help-echo help-echo
+                                          'face face)
+                            (propertize header 'help-echo help-echo)))))))
               (t (setq header-line-format
                        (if face
                            (propertize header 'face face)
@@ -6804,7 +6837,9 @@ functions."
               nick user host channel
               (if (not (string= reason ""))
                   (format ": %s"
-                          (string-replace "%" "%%" reason))
+                          (if (>= emacs-major-version 28)
+                              (string-replace "%" "%%" reason)
+                            (replace-regexp-in-string "%" "%%" reason)))
                 "")))))
 
 
diff --git a/lisp/eshell/em-basic.el b/lisp/eshell/em-basic.el
index 64fc7e7f03..af5550b11d 100644
--- a/lisp/eshell/em-basic.el
+++ b/lisp/eshell/em-basic.el
@@ -164,7 +164,7 @@ or `eshell-printn' for display."
         (set-default-file-modes
          (- 511 (car (read-from-string
                       (concat "?\\" (number-to-string (car args)))))))
-       (error "setting umask symbolically is not yet implemented"))
+       (error "Setting umask symbolically is not yet implemented"))
      (eshell-print
       "Warning: umask changed for all new files created by Emacs.\n"))
    nil))
diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el
index e36f2d0c7f..ba12e43a3c 100644
--- a/lisp/eshell/em-glob.el
+++ b/lisp/eshell/em-glob.el
@@ -91,7 +91,7 @@ This option slows down recursive glob processing by quite a 
bit."
 
 (defcustom eshell-error-if-no-glob nil
   "If non-nil, it is an error for a glob pattern not to match.
- This mimics the behavior of zsh if non-nil, but bash if nil."
+This mimics the behavior of zsh if non-nil, but bash if nil."
   :type 'boolean
   :group 'eshell-glob)
 
@@ -266,7 +266,7 @@ the form:
 
 ;; FIXME does this really need to abuse eshell-glob-matches, message-shown?
 (defun eshell-glob-entries (path globs &optional recurse-p)
-  "Glob the entries in PATHS, possibly recursing if RECURSE-P is non-nil."
+  "Glob the entries in PATH, possibly recursing if RECURSE-P is non-nil."
   (let* ((entries (ignore-errors
                    (file-name-all-completions "" path)))
         (case-fold-search eshell-glob-case-insensitive)
diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el
index d82946add0..aa158fa24c 100644
--- a/lisp/eshell/em-hist.el
+++ b/lisp/eshell/em-hist.el
@@ -402,7 +402,7 @@ variable `eshell-input-filter' returns non-nil when called 
on the
 command.
 
 This function is supposed to be called from the minibuffer, presumably
-as a minibuffer-exit-hook."
+as a `minibuffer-exit-hook'."
   (eshell-add-input-to-history
    (buffer-substring (minibuffer-prompt-end) (point-max))))
 
diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el
index 3d7c43b404..57146bb126 100644
--- a/lisp/eshell/em-ls.el
+++ b/lisp/eshell/em-ls.el
@@ -35,10 +35,10 @@
 ;;;###autoload
 (progn
 (defgroup eshell-ls nil
-  "This module implements the \"ls\" utility fully in Lisp.  If it is
-passed any unrecognized command switches, it will revert to the
-operating system's version.  This version of \"ls\" uses text
-properties to colorize its output based on the setting of
+  "This module implements the \"ls\" utility fully in Lisp.
+If it is passed any unrecognized command switches, it will revert
+to the operating system's version.  This version of \"ls\" uses
+text properties to colorize its output based on the setting of
 `eshell-ls-use-colors'."
   :tag "Implementation of `ls' in Lisp"
   :group 'eshell-module))
@@ -476,9 +476,9 @@ name should be displayed as, etc.  Think of it as cooking a 
FILEINFO."
   fileinfo)
 
 (defun eshell-ls-file (fileinfo &optional size-width copy-fileinfo)
-  "Output FILE in long format.
-FILE may be a string, or a cons cell whose car is the filename and
-whose cdr is the list of file attributes."
+  "Output FILEINFO in long format.
+FILEINFO may be a string, or a cons cell whose car is the
+filename and whose cdr is the list of file attributes."
   (if (not (cdr fileinfo))
       (funcall error-func (format "%s: No such file or directory\n"
                                  (car fileinfo)))
diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el
index def52f42e5..639098a9b9 100644
--- a/lisp/eshell/em-pred.el
+++ b/lisp/eshell/em-pred.el
@@ -258,7 +258,7 @@ EXAMPLES:
   (eshell-pred-mode))
 
 (defun eshell-apply-modifiers (lst predicates modifiers)
-  "Apply to LIST a series of PREDICATES and MODIFIERS."
+  "Apply to list LST a series of PREDICATES and MODIFIERS."
   (let (stringified)
     (if (stringp lst)
        (setq lst (list lst)
diff --git a/lisp/eshell/em-rebind.el b/lisp/eshell/em-rebind.el
index fa61fffaec..d70444ea10 100644
--- a/lisp/eshell/em-rebind.el
+++ b/lisp/eshell/em-rebind.el
@@ -168,7 +168,7 @@ This is default behavior of shells like bash."
 
 (defun eshell-lock-local-map (&optional arg)
   "Lock or unlock the current local keymap.
-Within a prefix arg, set the local keymap to its normal value, and
+With prefix ARG, set the local keymap to its normal value, and
 lock it at that."
   (interactive "P")
   (if (or arg (not eshell-lock-keymap))
diff --git a/lisp/eshell/em-smart.el b/lisp/eshell/em-smart.el
index d1c83db188..dffc8f804b 100644
--- a/lisp/eshell/em-smart.el
+++ b/lisp/eshell/em-smart.el
@@ -131,7 +131,7 @@ only if that output can be presented in its entirely in the 
Eshell window."
   :group 'eshell-smart)
 
 (defcustom eshell-smart-space-goes-to-end t
-  "If non-nil, space will go to end of buffer when point-max is visible.
+  "If non-nil, space will go to end of buffer when `point-max' is visible.
 That is, if a command is running and the user presses SPACE at a time
 when the end of the buffer is visible, point will go to the end of the
 buffer and smart-display will be turned off (that is, subsequently
@@ -195,7 +195,7 @@ The options are `begin', `after' or `end'."
 
 ;; This is called by window-scroll-functions with two arguments.
 (defun eshell-smart-scroll-window (wind _start)
-  "Scroll the given Eshell window accordingly."
+  "Scroll the given Eshell window WIND accordingly."
   (unless eshell-currently-handling-window
     (let ((inhibit-point-motion-hooks t)
          (eshell-currently-handling-window t))
diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el
index 7e48a9c757..5b400c74fc 100644
--- a/lisp/eshell/em-unix.el
+++ b/lisp/eshell/em-unix.el
@@ -968,7 +968,7 @@ Show wall-clock time elapsed during execution of COMMAND.")
       (set-window-configuration eshell-diff-window-config)))
 
 (defun nil-blank-string (string)
-  "Return STRING, or nil if STRING contains only non-blank characters."
+  "Return STRING, or nil if STRING contains only blank characters."
   (cond
     ((string-match "[^[:blank:]]" string) string)
     (nil)))
diff --git a/lisp/eshell/esh-arg.el b/lisp/eshell/esh-arg.el
index 3cf80e4518..1990c0cfa5 100644
--- a/lisp/eshell/esh-arg.el
+++ b/lisp/eshell/esh-arg.el
@@ -203,7 +203,7 @@ treated as a literal character."
   (setq eshell-current-modifiers nil))
 
 (defun eshell-finish-arg (&optional argument)
-  "Finish the current argument being processed."
+  "Finish the current ARGUMENT being processed."
   (if argument
       (setq eshell-current-argument argument))
   (throw 'eshell-arg-done t))
diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el
index 90a8f85665..1aac95e0b4 100644
--- a/lisp/eshell/esh-cmd.el
+++ b/lisp/eshell/esh-cmd.el
@@ -1236,10 +1236,10 @@ or an external command."
       (eshell-external-command command args))))
 
 (defun eshell-exec-lisp (printer errprint func-or-form args form-p)
-  "Execute a lisp FUNC-OR-FORM, maybe passing ARGS.
+  "Execute a Lisp FUNC-OR-FORM, maybe passing ARGS.
 PRINTER and ERRPRINT are functions to use for printing regular
 messages, and errors.  FORM-P should be non-nil if FUNC-OR-FORM
-represent a lisp form; ARGS will be ignored in that case."
+represent a Lisp form; ARGS will be ignored in that case."
   (eshell-condition-case err
       (let ((result
              (save-current-buffer
diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el
index 9930e0884c..fa149dd46e 100644
--- a/lisp/eshell/esh-ext.el
+++ b/lisp/eshell/esh-ext.el
@@ -110,7 +110,7 @@ wholly ignored."
 (autoload 'eshell-parse-command "esh-cmd")
 
 (defsubst eshell-invoke-batch-file (&rest args)
-  "Invoke a .BAT or .CMD file on DOS/Windows systems."
+  "Invoke a .BAT or .CMD file on MS-DOS/MS-Windows systems."
   ;; since CMD.EXE can't handle forward slashes in the initial
   ;; argument...
   (setcar args (subst-char-in-string ?/ ?\\ (car args)))
diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el
index 0e98aa0049..c2471912ab 100644
--- a/lisp/eshell/esh-io.el
+++ b/lisp/eshell/esh-io.el
@@ -34,7 +34,7 @@
 ;;;_* Redirect to a Buffer or Process
 ;;
 ;; Buffers and processes can be named with '#<buffer buffer-name>' and
-;; '#<process process-name>', respectively. As a shorthand,
+;; '#<process process-name>', respectively.  As a shorthand,
 ;; '#<buffer-name>' without the explicit "buffer" arg is equivalent to
 ;; '#<buffer buffer-name>'.
 ;;
@@ -94,7 +94,7 @@ though they were files."
 Currently this is standard input, output and error.  But even all of
 these Emacs does not currently support with asynchronous processes
 \(which is what eshell uses so that you can continue doing work in
-other buffers) ."
+other buffers)."
   :type 'integer
   :group 'eshell-io)
 
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index f9dbce9770..a9775b7c56 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -499,7 +499,7 @@ and the hook `eshell-exit-hook'."
     (yank)))
 
 (defun eshell-bol ()
-  "Goes to the beginning of line, then skips past the prompt, if any."
+  "Go to the beginning of line, then skip past the prompt, if any."
   (interactive)
   (beginning-of-line)
   (and eshell-skip-prompt-function
diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el
index 101ac86034..c66ad00072 100644
--- a/lisp/eshell/eshell.el
+++ b/lisp/eshell/eshell.el
@@ -33,15 +33,15 @@
 ;; @ A high degree of configurability
 ;;
 ;; @ The ability to have the same shell on every system Emacs has been
-;;   ported to. Since Eshell imposes no external requirements, and
+;;   ported to.  Since Eshell imposes no external requirements, and
 ;;   relies upon only the Lisp functions exposed by Emacs, it is quite
-;;   operating system independent. Several of the common UNIX
+;;   operating system independent.  Several of the common UNIX
 ;;   commands, such as ls, mv, rm, ln, etc., have been implemented in
 ;;   Lisp in order to provide a more consistent work environment.
 ;;
 ;; For those who might be using an older version of Eshell, version
-;; 2.1 represents an entirely new, module-based architecture. It
-;; supports most of the features offered by modern shells. Here is a
+;; 2.1 represents an entirely new, module-based architecture.  It
+;; supports most of the features offered by modern shells.  Here is a
 ;; brief list of some of its more visible features:
 ;;
 ;; @ Command argument completion (tcsh, zsh)
@@ -136,7 +136,7 @@
 ;;   errors, such as 'dri' for `dir'.  Since executing non-existent
 ;;   programs is rarely the intention of the user, eshell could prompt
 ;;   for the replacement string, and then record that in a database of
-;;   known misspellings. (Note: The typo at the beginning of this
+;;   known misspellings.  (Note: The typo at the beginning of this
 ;;   paragraph wasn't discovered until two months after I wrote the
 ;;   text; it was not intentional).
 ;;
@@ -240,7 +240,7 @@ session.  Return the buffer selected (or created).
 
 With a nonnumeric prefix arg, create a new session.
 
-With a numeric prefix arg (as in `C-u 42 M-x eshell RET'), switch
+With a numeric prefix arg (as in `\\[universal-argument] 42 \\[eshell]'), 
switch
 to the session with that number, or create it if it doesn't
 already exist.
 
diff --git a/lisp/expand.el b/lisp/expand.el
index 1b722014f8..deeec8c59d 100644
--- a/lisp/expand.el
+++ b/lisp/expand.el
@@ -88,7 +88,7 @@
 
 ;;; Samples:
 
-(define-skeleton expand-c-for-skeleton "For loop skeleton"
+(define-skeleton expand-c-for-skeleton "For loop skeleton."
   "Loop var: "
   "for(" str _ @ "=0; " str @ "; " str @ ") {" \n
   @ _ \n
diff --git a/lisp/face-remap.el b/lisp/face-remap.el
index 5914ee4a20..c84742be5a 100644
--- a/lisp/face-remap.el
+++ b/lisp/face-remap.el
@@ -23,7 +23,6 @@
 
 ;;; Commentary:
 
-;;
 ;; This file defines some simple operations that can be used for
 ;; maintaining the `face-remapping-alist' in a cooperative way.  This is
 ;; especially important for the `default' face.
@@ -52,8 +51,6 @@
 ;; mode setting face remappings, e.g., of the default face.
 ;;
 ;; All modifications cause face-remapping-alist to be made buffer-local.
-;;
-
 
 ;;; Code:
 
@@ -218,13 +215,13 @@ Each positive or negative step scales the default face 
height by this amount."
   :version "23.1")
 
 (defvar-local text-scale-mode-remapping nil
-  "Current remapping cookie for text-scale-mode.")
+  "Current remapping cookie for `text-scale-mode'.")
 
 (defvar-local text-scale-mode-lighter "+0"
-  "Lighter displayed for text-scale-mode in mode-line minor-mode list.")
+  "Lighter displayed for `text-scale-mode' in mode-line minor-mode list.")
 
 (defvar-local text-scale-mode-amount 0
-  "Number of steps that text-scale-mode will increase/decrease text height.")
+  "Number of steps that `text-scale-mode' will increase/decrease text height.")
 
 (defvar-local text-scale-remap-header-line nil
   "If non-nil, text scaling may change font size of header lines too.")
@@ -352,7 +349,7 @@ See `text-scale-increase' for more details."
 INC may be passed as a numeric prefix argument.
 
 The actual adjustment made depends on the final component of the
-key-binding used to invoke the command, with all modifiers removed:
+keybinding used to invoke the command, with all modifiers removed:
 
    +, =   Increase the height of the default face by one step
    -      Decrease the height of the default face by one step
diff --git a/lisp/ffap.el b/lisp/ffap.el
index 84dcc04a71..b6e419b2d6 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -1114,7 +1114,7 @@ like)."
 
 (defun ffap-search-backward-file-end (&optional dir-separator end)
   "Search backward position point where file would probably end.
-Optional DIR-SEPARATOR defaults to \"/\". The search maximum is
+Optional DIR-SEPARATOR defaults to \"/\".  The search maximum is
 `line-end-position' or optional END point.
 
 Suppose the cursor is somewhere that might be near end of file,
@@ -1190,7 +1190,7 @@ Call `ffap-search-backward-file-end' to refine the ending 
point."
 
 (defun ffap-dir-separator-near-point ()
   "Search backward and forward for closest slash or backlash in line.
-Return string slash or backslash. Point is moved to closest position."
+Return string slash or backslash.  Point is moved to closest position."
   (let ((point (point))
        str pos)
     (when (looking-at ".*?/")
diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index 4fc7f0a8ec..a0c3758238 100644
--- a/lisp/filenotify.el
+++ b/lisp/filenotify.el
@@ -19,7 +19,7 @@
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
-;;; Commentary
+;;; Commentary:
 
 ;; This package is an abstraction layer from the different low-level
 ;; file notification packages `inotify', `kqueue', `gfilenotify' and
diff --git a/lisp/files-x.el b/lisp/files-x.el
index 9e1954256a..c7cc076f84 100644
--- a/lisp/files-x.el
+++ b/lisp/files-x.el
@@ -673,7 +673,7 @@ in order."
 (defun hack-connection-local-variables (criteria)
   "Read connection-local variables according to CRITERIA.
 Store the connection-local variables in buffer local
-variable`connection-local-variables-alist'.
+variable `connection-local-variables-alist'.
 
 This does nothing if `enable-connection-local-variables' is nil."
   (when enable-connection-local-variables
diff --git a/lisp/files.el b/lisp/files.el
index 7e4bdab507..b113ff32f2 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1108,7 +1108,7 @@ customize the variable `user-emacs-directory-warning'."
 (defun exec-path ()
   "Return list of directories to search programs to run in remote subprocesses.
 The remote host is identified by `default-directory'.  For remote
-hosts that do not support subprocesses, this returns `nil'.
+hosts that do not support subprocesses, this returns nil.
 If `default-directory' is a local directory, this function returns
 the value of the variable `exec-path'."
   (let ((handler (find-file-name-handler default-directory 'exec-path)))
@@ -2526,7 +2526,14 @@ A buffer may be modified in several ways after reading 
into the buffer,
 due to Emacs features such as format decoding, character code
 conversion, `find-file-hook', automatic uncompression, etc.
 
-This function ensures that none of these modifications will take place."
+This function ensures that none of these modifications will take place.
+
+Unlike `find-file-literally', this function does not make the
+buffer unibyte, so if this function is used when handling
+binary (non-character) data, it can be convenient to make the
+buffer unibyte first.  This isn't, strictly speaking, necessary,
+because multibyte buffers can also deal with raw bytes.  See info
+node `(elisp)Character Codes' for details."
   (let ((format-alist nil)
        (after-insert-file-functions nil)
        (coding-system-for-read 'no-conversion)
@@ -4425,8 +4432,8 @@ variables will override modes."
           (t -2))))
 
 (defun dir-locals--sort-variables (variables)
-  "Sorts VARIABLES so that applying them in order has the right effect.
-The variables are compared by dir-locals--get-sort-score.
+  "Sort VARIABLES so that applying them in order has the right effect.
+The variables are compared by `dir-locals--get-sort-score'.
 Directory entries are then recursively sorted using the same
 criteria."
   (setq variables (sort variables
@@ -7608,7 +7615,7 @@ normally equivalent short `-D' option is just passed on to
                  ;; Replace "total" with "total used in directory" to
                  ;; avoid confusion.
                  (replace-match "total used in directory" nil nil nil 1)
-                 (let ((available (get-free-disk-space ".")))
+                 (let ((available (get-free-disk-space file)))
                    (when available
                      (end-of-line)
                      (insert " available " available))))))))))
diff --git a/lisp/filesets.el b/lisp/filesets.el
index 8e9fae80f6..63f0e8ba3f 100644
--- a/lisp/filesets.el
+++ b/lisp/filesets.el
@@ -607,7 +607,7 @@ the filename."
        (:ignore-on-read-text t)
        ;; (:constraintp ,pic-cmd)
        ))))
-  "Association list of file patterns and external viewers for use with
+  "Alist of file patterns and external viewers for use with
 `filesets-find-or-display-file'.
 
 Has the form ((FILE-PATTERN VIEWER PROPERTIES) ...), VIEWER being either a
@@ -1848,7 +1848,7 @@ User will be queried, if no fileset name is provided."
       (filesets-goto-homepage)))
 
 (defun filesets-goto-homepage ()
-  "Show filesets's homepage."
+  "Show filesets's website."
   (interactive)
   (browse-url filesets-homepage))
 
diff --git a/lisp/find-file.el b/lisp/find-file.el
index 4fd4f4e06b..4d520c01cc 100644
--- a/lisp/find-file.el
+++ b/lisp/find-file.el
@@ -32,7 +32,7 @@
 ;;
 ;; Many people maintain their include file in a directory separate to their
 ;; src directory, and very often you may be editing a file and have a need to
-;; visit the "other file". This package searches through a set of directories
+;; visit the "other file".  This package searches through a set of directories
 ;; to find that file.
 ;;
 ;; THE "OTHER FILE", or "corresponding file", generally has the same basename,
@@ -44,14 +44,14 @@
 ;;
 ;; If the current file has a .cc extension, ff-find-other-file will attempt
 ;; to look for a .hh file, and then a .h file in some directory as described
-;; below. The mechanism here is to replace the matched part of the original
+;; below.  The mechanism here is to replace the matched part of the original
 ;; filename with each of the corresponding extensions in turn.
 ;;
 ;; Alternatively, there are situations where the filename of the other file
-;; cannot be determined easily with regexps. For example, a .c file may
+;; cannot be determined easily with regexps.  For example, a .c file may
 ;; have two corresponding .h files, for its public and private parts, or
 ;; the filename for the .c file contains part of the pathname of the .h
-;; file, as between src/fooZap.cc and include/FOO/zap.hh. In that case, the
+;; file, as between src/fooZap.cc and include/FOO/zap.hh.  In that case, the
 ;; format above can be changed to include a function to be called when the
 ;; current file matches the regexp:
 ;;
@@ -59,7 +59,7 @@
 ;;     ("\\.hh\\'"  hh-function))
 ;;
 ;; These functions must return a list consisting of the possible names of the
-;; corresponding file, with or without path. There is no real need for more
+;; corresponding file, with or without path.  There is no real need for more
 ;; than one function, and one could imagine the following value for cc-other-
 ;; file-alist:
 ;;
@@ -78,13 +78,13 @@
 ;;
 ;; This means that the corresponding file will be searched for first in
 ;; the current directory, then in ../../src, then in one of the directories
-;; under ../include, and so on. The star is _not_ a general wildcard
+;; under ../include, and so on.  The star is _not_ a general wildcard
 ;; character: it just indicates that the subdirectories of this directory
-;; must each be searched in turn. Environment variables will be expanded in
+;; must each be searched in turn.  Environment variables will be expanded in
 ;; the ff-search-directories variable.
 ;;
 ;; If the point is on a #include line, the file to be #included is searched
-;; for in the same manner. This can be disabled with the ff-ignore-include
+;; for in the same manner.  This can be disabled with the ff-ignore-include
 ;; variable, or by calling ff-get-other-file instead of ff-find-other-file.
 ;;
 ;; If the file was not found, ff-find-other-file will prompt you for where
diff --git a/lisp/find-lisp.el b/lisp/find-lisp.el
index 2f43293603..6062bd2643 100644
--- a/lisp/find-lisp.el
+++ b/lisp/find-lisp.el
@@ -24,21 +24,21 @@
 ;;; Commentary:
 ;;
 ;; This is a very generalized form of find; it basically implements a
-;; recursive directory descent. The conditions which bound the search
+;; recursive directory descent.  The conditions which bound the search
 ;; are expressed as predicates, and I have not addressed the question
 ;; of how to wrap up the common chores that find does in a simpler
 ;; format than writing code for all the various predicates.
 ;;
 ;; Some random thoughts are to express simple queries directly with
 ;; user-level functions, and perhaps use some kind of forms interface
-;; for medium-level queries. Really complicated queries can be
+;; for medium-level queries.  Really complicated queries can be
 ;; expressed in Lisp.
 ;;
 
 ;;; Todo
 ;;
 ;; It would be nice if we could sort the results without running the find
-;; again. Maybe that could work by storing the original file attributes?
+;; again.  Maybe that could work by storing the original file attributes?
 
 ;;; Code:
 
diff --git a/lisp/finder.el b/lisp/finder.el
index 555506db22..c2b9a6d0ef 100644
--- a/lisp/finder.el
+++ b/lisp/finder.el
@@ -379,7 +379,7 @@ FILE should be in a form suitable for passing to 
`locate-library'."
    (list
     (completing-read "Library name: "
                     (apply-partially 'locate-file-completion-table
-                                      (or find-function-source-path load-path)
+                                      (or find-library-source-path load-path)
                                       (find-library-suffixes)))))
   (let ((str (lm-commentary (find-library-name file))))
     (or str (error "Can't find any Commentary section"))
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index c00a62a160..a4ab897f6f 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -697,7 +697,7 @@ comments, and to fontify `and', `or' and `not' words as 
keywords.
 
 The above procedure will only add the keywords for C mode, not
 for modes derived from C mode.  To add them for derived modes too,
-pass nil for MODE and add the call to c-mode-hook.
+pass nil for MODE and add the call to `c-mode-hook'.
 
 For example:
 
@@ -1039,7 +1039,7 @@ The function is given three parameters, the standard BEG, 
END, and OLD-LEN
 from `after-change-functions'.  It should return either a cons of the beginning
 and end buffer positions \(in that order) of the region to refontify, or nil
 \(which directs the caller to fontify a default region).
-This function should preserve the match-data.
+This function should preserve the match data.
 The region it returns may start or end in the middle of a line.")
 
 (defun font-lock-fontify-buffer (&optional interactively)
@@ -1103,7 +1103,7 @@ Called with two arguments BEG and END.")
 (defun font-lock-debug-fontify ()
   "Reinitialize the font-lock machinery and (re-)fontify the buffer.
 This functions is a convenience functions when developing font
-locking for a mode, and is not meant to be called from lisp functions."
+locking for a mode, and is not meant to be called from Lisp functions."
   (declare (interactive-only t))
   (interactive)
   ;; Make font-lock recalculate all the mode-specific data.
@@ -1124,7 +1124,7 @@ portion of the buffer."
              (or beg (point-min)) (or end (point-max)))))
 
 (defun font-lock-update (&optional arg)
-  "Updates the syntax highlighting in this buffer.
+  "Update the syntax highlighting in this buffer.
 Refontify the accessible portion of this buffer, or enable Font Lock mode
 in this buffer if it is currently disabled.  With prefix ARG, toggle Font
 Lock mode."
@@ -2341,7 +2341,7 @@ This should be an integer.  Used in 
`cpp-font-lock-keywords'.")
   "Font lock keywords for C preprocessor directives.
 `c-mode', `c++-mode' and `objc-mode' have their own font lock keywords
 for C preprocessor directives.  This definition is for the other modes
-in which C preprocessor directives are used. e.g. `asm-mode' and
+in which C preprocessor directives are used, e.g. `asm-mode' and
 `ld-script-mode'.")
 
 (provide 'font-lock)
diff --git a/lisp/forms.el b/lisp/forms.el
index 46f4df9b6c..e1de011133 100644
--- a/lisp/forms.el
+++ b/lisp/forms.el
@@ -88,7 +88,7 @@
 ;;     constructed.  The current fields are available to the function
 ;;     in the variable `forms-fields', they should *NOT* be modified.
 ;;
-;;   - a lisp symbol, that must evaluate to one of the above.
+;;   - a Lisp symbol, that must evaluate to one of the above.
 ;;
 ;; Optional variables which may be set in the control file:
 ;;
@@ -357,7 +357,7 @@ This variable is for use by the filter routines only.
 The contents may NOT be modified.")
 
 (defcustom forms-use-text-properties t
-  "Non-nil means to use text properties. "
+  "Non-nil means to use text properties."
   :type 'boolean)
 
 (defcustom forms-insert-after nil
@@ -376,7 +376,7 @@ Also, initial position is at last record."
 ;;; Internal variables.
 
 (defvar forms--file-buffer nil
-  "Buffer which holds the file data")
+  "Buffer which holds the file data.")
 
 (defvar forms--total-records 0
   "Total number of records in the data file.")
@@ -410,7 +410,7 @@ Also, initial position is at last record."
   "Forms parser routine.")
 
 (defvar-local forms--mode-setup nil
-  "To keep track of forms-mode being set-up.")
+  "To keep track of `forms-mode' being set-up.")
 
 (defvar forms--dynamic-text nil
   "Array that holds dynamic texts to insert between fields.")
@@ -453,8 +453,7 @@ Commands:                        Equivalent keys in 
read-only mode:
  C-c C-p        forms-prev-record          p
  C-c C-r        forms-search-reverse       r
  C-c C-s        forms-search-forward       s
- C-c C-x        forms-exit                 x
-"
+ C-c C-x        forms-exit                 x"
   (interactive)
 
   ;; This is not a simple major mode, as usual.  Therefore, forms-mode
@@ -1392,8 +1391,7 @@ Commands:                        Equivalent keys in 
read-only mode:
   (define-key map [prior] #'forms-prev-record)
   (define-key map [begin] #'forms-first-record)
   (define-key map [last] #'forms-last-record)
-  (define-key map [backtab] #'forms-prev-field)
-  )
+  (define-key map [backtab] #'forms-prev-field))
 
 ;;; Changed functions
 
@@ -1435,8 +1433,8 @@ Commands:                        Equivalent keys in 
read-only mode:
   "   \\[describe-mode]:help"))))
 
 (defun forms--trans (subj arg rep)
-  "Translate in SUBJ all chars ARG into char REP.  ARG and REP should
- be single-char strings."
+  "Translate in SUBJ all chars ARG into char REP.
+ARG and REP should be single-char strings."
   (let ((i 0)
        (re (regexp-quote arg))
        (k (string-to-char rep)))
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index cbe3505cd1..961965d928 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -161,7 +161,7 @@ enable expiration per categories, topics, and groups."
 
 (defcustom gnus-agent-expire-unagentized-dirs t
   "Whether expiration should expire in unagentized directories.
-Have gnus-agent-expire scan the directories under
+Have `gnus-agent-expire' scan the directories under
 \(gnus-agent-directory) for groups that are no longer agentized.
 When found, offer to remove them."
   :version "22.1"
@@ -622,7 +622,7 @@ manipulated as follows:
 
 The gnus-agentize function is now called internally by gnus when
 gnus-agent is set.  If you wish to avoid calling gnus-agentize,
-customize gnus-agent to nil.
+customize `gnus-agent' to nil.
 
 This will modify the `gnus-setup-news-hook', and
 `message-send-mail-real-function' variables, and install the Gnus agent
@@ -1703,8 +1703,8 @@ and that there are no duplicates."
 
 (defun gnus-agent-flush-server (&optional server-or-method)
   "Flush all agent index files for every subscribed group within
-  the given SERVER-OR-METHOD.  When called with nil, the current
-  value of gnus-command-method identifies the server."
+the given SERVER-OR-METHOD.  When called with nil, the current
+value of gnus-command-method identifies the server."
   (let* ((gnus-command-method (if server-or-method
                                  (gnus-server-to-method server-or-method)
                                gnus-command-method))
@@ -2153,8 +2153,9 @@ doesn't exist, to valid the overview buffer."
 (defvar gnus-agent-file-loading-local nil)
 
 (defun gnus-agent-load-local (&optional method)
-  "Load the METHOD'S local file.  The local file contains min/max
-article counts for each of the method's subscribed groups."
+  "Load the METHOD'S local file.
+The local file contains min/max article counts for each of the
+method's subscribed groups."
   (let ((gnus-command-method (or method gnus-command-method)))
     (when (or (null gnus-agent-article-local-times)
              (zerop gnus-agent-article-local-times)
@@ -2171,9 +2172,9 @@ article counts for each of the method's subscribed 
groups."
     gnus-agent-article-local))
 
 (defun gnus-agent-read-and-cache-local (file)
-  "Load and read FILE then bind its contents to
-gnus-agent-article-local.  If that variable had `dirty' (also known as
-modified) original contents, they are first saved to their own file."
+  "Load and read FILE then bind its contents to `gnus-agent-article-local'.
+If that variable had `dirty' (also known as modified) original
+contents, they are first saved to their own file."
   (if (and gnus-agent-article-local
            (gethash "+dirty" gnus-agent-article-local))
       (gnus-agent-save-local))
@@ -2224,7 +2225,7 @@ modified) original contents, they are first saved to 
their own file."
     hashtb))
 
 (defun gnus-agent-save-local (&optional force)
-  "Save gnus-agent-article-local under it method's agent.lib directory."
+  "Save `gnus-agent-article-local' under it method's agent.lib directory."
   (let ((hashtb gnus-agent-article-local))
     (when (and hashtb
                (or force (gethash "+dirty" hashtb)))
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index c4fa1e960b..7076dbedf2 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -610,17 +610,17 @@ The recommended coding systems are `utf-8', 
`iso-2022-7bit' and so on,
 which can safely encode any characters in text.  This is used by the
 commands including:
 
-* gnus-summary-save-article-file
-* gnus-summary-save-article-body-file
-* gnus-summary-write-article-file
-* gnus-summary-write-article-body-file
+* `gnus-summary-save-article-file'
+* `gnus-summary-save-article-body-file'
+* `gnus-summary-write-article-file'
+* `gnus-summary-write-article-body-file'
 
 and the functions to which you may set `gnus-default-article-saver':
 
-* gnus-summary-save-in-file
-* gnus-summary-save-body-in-file
-* gnus-summary-write-to-file
-* gnus-summary-write-body-to-file
+* `gnus-summary-save-in-file'
+* `gnus-summary-save-body-in-file'
+* `gnus-summary-write-to-file'
+* `gnus-summary-write-body-to-file'
 
 Those commands and functions save just text displayed in the article
 buffer to a file if the value of this variable is non-nil.  Note that
@@ -8519,8 +8519,7 @@ whose names match REGEXP.
 For example:
 \((\"chinese\" . gnus-decode-encoded-word-region-by-guess)
  mail-decode-encoded-word-region
- (\"chinese\" . rfc1843-decode-region))
-")
+ (\"chinese\" . rfc1843-decode-region))")
 
 (defvar gnus-decode-header-methods-cache nil)
 
diff --git a/lisp/gnus/gnus-diary.el b/lisp/gnus/gnus-diary.el
index e2cbca9007..7ecc97262a 100644
--- a/lisp/gnus/gnus-diary.el
+++ b/lisp/gnus/gnus-diary.el
@@ -21,15 +21,11 @@
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
-
 ;;; Commentary:
 
 ;; Contents management by FCM version 0.1.
 
-;; Description:
-;; ===========
-
-;; gnus-diary is a utility toolkit used on top of the nndiary back end. It is
+;; gnus-diary is a utility toolkit used on top of the nndiary back end.  It is
 ;; now fully documented in the Gnus manual.
 
 ;;; Code:
diff --git a/lisp/gnus/gnus-dired.el b/lisp/gnus/gnus-dired.el
index af0b782202..e9eddae942 100644
--- a/lisp/gnus/gnus-dired.el
+++ b/lisp/gnus/gnus-dired.el
@@ -92,7 +92,7 @@ See `mail-user-agent' for more information."
 
 ;;;###autoload
 (defun turn-on-gnus-dired-mode ()
-  "Convenience method to turn on gnus-dired-mode."
+  "Convenience method to turn on `gnus-dired-mode'."
   (interactive)
   (gnus-dired-mode 1))
 
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index c1b46d6e9e..bedae0f564 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -4421,9 +4421,9 @@ group."
 (defun gnus-group-find-new-groups (&optional arg)
   "Search for new groups and add them.
 Each new group will be treated with `gnus-subscribe-newsgroup-method'.
-With 1 C-u, use the `ask-server' method to query the server for new
+With 1 \\[universal-argument], use the `ask-server' method to query the server 
for new
 groups.
-With 2 C-u's, use most complete method possible to query the server
+With 2 \\[universal-argument]'s, use most complete method possible to query 
the server
 for new groups, and subscribe the new groups as zombies."
   (interactive "p" gnus-group-mode)
   (let ((new-groups (gnus-find-new-newsgroups (or arg 1)))
diff --git a/lisp/gnus/gnus-icalendar.el b/lisp/gnus/gnus-icalendar.el
index 5294b83d9e..b6e5e7f786 100644
--- a/lisp/gnus/gnus-icalendar.el
+++ b/lisp/gnus/gnus-icalendar.el
@@ -107,19 +107,19 @@
          :accessor gnus-icalendar-event:opt-participants
          :initform nil
          :type (or null t)))
-  "generic iCalendar Event class")
+  "Generic iCalendar Event class.")
 
 (defclass gnus-icalendar-event-request (gnus-icalendar-event)
   nil
-  "iCalendar class for REQUEST events")
+  "iCalendar class for REQUEST events.")
 
 (defclass gnus-icalendar-event-cancel (gnus-icalendar-event)
   nil
-  "iCalendar class for CANCEL events")
+  "iCalendar class for CANCEL events.")
 
 (defclass gnus-icalendar-event-reply (gnus-icalendar-event)
   nil
-  "iCalendar class for REPLY events")
+  "iCalendar class for REPLY events.")
 
 (cl-defmethod gnus-icalendar-event:recurring-p ((event gnus-icalendar-event))
   "Return t if EVENT is recurring."
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index 01053797b3..255c11f137 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -613,8 +613,7 @@ If BUFFER, insert the article in that group."
 Returns the article number of the message.
 
 If GROUP is not already selected, the message will be the only one in
-the group's summary.
-"
+the group's summary."
   ;; TODO: is there a way to know at this point whether the group will
   ;; be newly-selected?  If so we could clean up the logic at the end
   ;;
diff --git a/lisp/gnus/gnus-ml.el b/lisp/gnus/gnus-ml.el
index 3b2b5a07c1..ee3abf2f7b 100644
--- a/lisp/gnus/gnus-ml.el
+++ b/lisp/gnus/gnus-ml.el
@@ -127,7 +127,7 @@ If FORCE is non-nil, replace the old ones."
          (t (gnus-message 1 "no list-unsubscribe in this group")))))
 
 (defun gnus-mailing-list-post ()
-  "Post message (really useful ?)"
+  "Post message (really useful ?)."
   (interactive)
   (let ((list-post
         (with-current-buffer gnus-original-article-buffer
diff --git a/lisp/gnus/gnus-mlspl.el b/lisp/gnus/gnus-mlspl.el
index 6adda2ed14..878e879cd7 100644
--- a/lisp/gnus/gnus-mlspl.el
+++ b/lisp/gnus/gnus-mlspl.el
@@ -75,7 +75,7 @@ match any of the group-specified splitting rules.  See
 
 ;;;###autoload
 (defun gnus-group-split-update (&optional catch-all)
-  "Computes nnmail-split-fancy from group params and CATCH-ALL.
+  "Computes `nnmail-split-fancy' from group params and CATCH-ALL.
 It does this by calling (gnus-group-split-fancy nil nil CATCH-ALL).
 
 If CATCH-ALL is nil, `gnus-group-split-default-catch-all-group' is used
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index ef89e6e9fc..66501ef7d5 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -33,7 +33,7 @@
 (require 'gnus-util)
 
 (defcustom gnus-post-method 'current
-  "Preferred method for posting USENET news.
+  "Preferred method for posting Usenet news.
 
 If this variable is `current' (which is the default), Gnus will use
 the \"current\" select method when posting.  If it is `native', Gnus
@@ -303,7 +303,7 @@ If nil, the address field will always be empty after 
invoking
 
 (defcustom gnus-message-highlight-citation
   t ;; gnus-treat-highlight-citation ;; gnus-cite dependency
-  "Enable highlighting of different citation levels in message-mode."
+  "Enable highlighting of different citation levels in `message-mode'."
   :version "23.1" ;; No Gnus
   :group 'gnus-cite
   :group 'gnus-message
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index 0468d72edd..9b76f98322 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -772,7 +772,7 @@ possible.  Uses `gnus-registry-split-strategy'."
         nil))))
 
 (defun gnus-registry-follow-group-p (group)
-  "Determines if a group name should be followed.
+  "Determine if a group name should be followed.
 Consults `gnus-registry-unfollowed-groups' and
 `nnmail-split-fancy-with-parent-ignore-groups'."
   (and group
@@ -789,7 +789,7 @@ Consults `gnus-registry-unfollowed-groups' and
 ;; we do special logic for ignoring to accept regular expressions and
 ;; nnmail-split-fancy-with-parent-ignore-groups as well
 (defun gnus-registry-ignore-group-p (group)
-  "Determines if a group name should be ignored.
+  "Determine if a group name should be ignored.
 Consults `gnus-registry-ignored-groups' and
 `nnmail-split-fancy-with-parent-ignore-groups'."
   (and group
diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el
index 5b746a8efa..dc81dfc5f6 100644
--- a/lisp/gnus/gnus-salt.el
+++ b/lisp/gnus/gnus-salt.el
@@ -51,7 +51,7 @@
 
 (defcustom gnus-pick-elegant-flow t
   "If non-nil, `gnus-pick-start-reading' runs
- `gnus-summary-next-group' when no articles have been picked."
+`gnus-summary-next-group' when no articles have been picked."
   :type 'boolean
   :group 'gnus-summary-pick)
 
diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el
index f40da9e9c4..0626e8bde5 100644
--- a/lisp/gnus/gnus-score.el
+++ b/lisp/gnus/gnus-score.el
@@ -1093,7 +1093,7 @@ EXTRA is the possible non-standard header."
 
 (defun gnus-summary-current-score (arg)
   "Return the score of the current article.
-  With prefix ARG, return the total score of the current (sub)thread."
+With prefix ARG, return the total score of the current (sub)thread."
   (interactive "P" gnus-article-mode gnus-summary-mode)
   (message "%s" (if arg
                    (gnus-thread-total-score
diff --git a/lisp/gnus/gnus-search.el b/lisp/gnus/gnus-search.el
index 2a8069d400..9c83d5fa37 100644
--- a/lisp/gnus/gnus-search.el
+++ b/lisp/gnus/gnus-search.el
@@ -132,7 +132,7 @@ transformed."
 
 (defcustom gnus-search-ignored-newsgroups ""
   "A regexp to match newsgroups in the active file that should
-  be skipped when searching."
+be skipped when searching."
   :version "24.1"
   :type 'regexp)
 
@@ -172,8 +172,7 @@ This variable can also be set per-server."
   :type 'regexp)
 
 (defcustom gnus-search-swish++-raw-queries-p nil
-  "If t, all Swish++ engines will only accept raw search query
-  strings."
+  "If t, all Swish++ engines will only accept raw search query strings."
   :type 'boolean
   :version "28.1")
 
@@ -217,8 +216,7 @@ This variable can also be set per-server."
   :version "28.1")
 
 (defcustom gnus-search-swish-e-raw-queries-p nil
-  "If t, all Swish-e engines will only accept raw search query
-  strings."
+  "If t, all Swish-e engines will only accept raw search query strings."
   :type 'boolean
   :version "28.1")
 
@@ -266,8 +264,7 @@ This variable can also be set per-server."
   :version "28.1")
 
 (defcustom gnus-search-namazu-raw-queries-p nil
-  "If t, all Namazu engines will only accept raw search query
-  strings."
+  "If t, all Namazu engines will only accept raw search query strings."
   :type 'boolean
   :version "28.1")
 
@@ -305,14 +302,12 @@ This variable can also be set per-server."
   :version "28.1")
 
 (defcustom gnus-search-notmuch-raw-queries-p nil
-  "If t, all Notmuch engines will only accept raw search query
-  strings."
+  "If t, all Notmuch engines will only accept raw search query strings."
   :type 'boolean
   :version "28.1")
 
 (defcustom gnus-search-imap-raw-queries-p nil
-  "If t, all IMAP engines will only accept raw search query
-  strings."
+  "If t, all IMAP engines will only accept raw search query strings."
   :version "28.1"
   :type 'boolean)
 
@@ -350,8 +345,7 @@ This variable can also be set per-server."
   :type 'regexp)
 
 (defcustom gnus-search-mairix-raw-queries-p nil
-  "If t, all Mairix engines will only accept raw search query
-  strings."
+  "If t, all Mairix engines will only accept raw search query strings."
   :version "28.1"
   :type 'boolean)
 
@@ -403,7 +397,7 @@ expressions.  Key is most often a mail header, but there are
 other keys.  Value is a string, quoted if it contains spaces.
 Key and value are separated by a colon, no space.  Expressions
 are implicitly ANDed; the \"or\" keyword can be used to
-OR. \"not\" will negate the following expression, or keys can be
+OR.  \"not\" will negate the following expression, or keys can be
 prefixed with a \"-\".  The \"near\" operator will work for
 engines that understand it; other engines will convert it to
 \"or\".  Parenthetical groups work as expected.
@@ -413,7 +407,7 @@ header.
 
 Search keys can be expanded with TAB during entry, or left
 abbreviated so long as they remain unambiguous, ie \"f\" will
-search the \"from\" header. \"s\" will raise an error.
+search the \"from\" header.  \"s\" will raise an error.
 
 Other keys:
 
@@ -433,7 +427,7 @@ It's also possible to use Gnus' internal marks, ie 
\"mark:R\"
 will be interpreted as mark:read.
 
 \"tag\" will search tags -- right now that's translated to
-\"keyword\" in IMAP, and left as \"tag\" for notmuch. At some
+\"keyword\" in IMAP, and left as \"tag\" for notmuch.  At some
 point this should also be used to search marks in the Gnus
 registry.
 
diff --git a/lisp/gnus/gnus-sieve.el b/lisp/gnus/gnus-sieve.el
index eeedf7ff35..d173decbb6 100644
--- a/lisp/gnus/gnus-sieve.el
+++ b/lisp/gnus/gnus-sieve.el
@@ -61,8 +61,9 @@ For example: \"nnimap:mailbox\""
   :type 'boolean)
 
 (defcustom gnus-sieve-update-shell-command "echo put %f | sieveshell %s"
-  "Shell command to execute after updating your Sieve script.  The following
-formatting characters are recognized:
+  "Shell command to execute after updating your Sieve script.
+
+The following formatting characters are recognized:
 
 %f    Script's file name (gnus-sieve-file)
 %s    Server name (from gnus-sieve-select-method)"
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el
index 1c75abb6f4..115efa9805 100644
--- a/lisp/gnus/gnus-srvr.el
+++ b/lisp/gnus/gnus-srvr.el
@@ -204,7 +204,7 @@ If nil, a faster, but more primitive, buffer is used 
instead."
   '((((class color) (background light)) (:foreground "ForestGreen" 
:inverse-video t :italic t))
     (((class color) (background dark)) (:foreground "PaleGreen" :inverse-video 
t :italic t))
     (t (:inverse-video t :italic t)))
-  "Face used for displaying the Cloud Host"
+  "Face used for displaying the Cloud Host."
   :group 'gnus-server-visual)
 
 (defface gnus-server-opened
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index 4bbeb24dc3..e32cfc0d61 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -1068,9 +1068,9 @@ If no function returns `non-nil', call 
`gnus-subscribe-zombies'."
 Each new newsgroup will be treated with `gnus-subscribe-newsgroup-method'.
 The `-n' option line from .newsrc is respected.
 
-With 1 C-u, use the `ask-server' method to query the server for new
+With 1 \\[universal-argument], use the `ask-server' method to query the server 
for new
 groups.
-With 2 C-u's, use most complete method possible to query the server
+With 2 \\[universal-argument]'s, use most complete method possible to query 
the server
 for new groups, and subscribe the new groups as zombies."
   (interactive "p" gnus-group-mode)
   (let* ((gnus-subscribe-newsgroup-method
@@ -2340,9 +2340,9 @@ If FORCE is non-nil, the .newsrc file is read."
 
 (defun gnus-convert-mark-converter-prompt (converter no-prompt)
   "Indicate whether CONVERTER requires `gnus-convert-old-newsrc' to
-  display the conversion prompt.  NO-PROMPT may be nil (prompt),
-  t (no prompt), or any form that can be called as a function.
-  The form should return either t or nil."
+display the conversion prompt.  NO-PROMPT may be nil (prompt),
+t (no prompt), or any form that can be called as a function.
+The form should return either t or nil."
   (put converter 'gnus-convert-no-prompt no-prompt))
 
 (defun gnus-convert-converter-needs-prompt (converter)
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index c28e38e315..2ddd3d2a7e 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -1723,8 +1723,7 @@ For example:
 \(setq gnus-newsgroup-variables
      \\='(message-use-followup-to
        (gnus-visible-headers .
-        \"^From:\\\\|^Newsgroups:\\\\|^Subject:\\\\|^Date:\\\\|^To:\")))
-")
+         \"^From:\\\\|^Newsgroups:\\\\|^Subject:\\\\|^Date:\\\\|^To:\")))")
 
 (eval-when-compile
   ;; Bind features so that require will believe that gnus-sum has
@@ -3146,8 +3145,9 @@ You can also post articles and send mail from this 
buffer.  To
 follow up an article, type `\\[gnus-summary-followup]'.  To mail a reply to 
the author
 of an article, type `\\[gnus-summary-reply]'.
 
-There are approx. one gazillion commands you can execute in this
-buffer; read the Info manual for more information (`\\[gnus-info-find-node]').
+There are approximately one gazillion commands you can execute in
+this buffer; read the Info manual for more
+information (`\\[gnus-info-find-node]').
 
 The following commands are available:
 
@@ -6843,7 +6843,7 @@ Also do horizontal recentering."
 
 (defun gnus-forward-line-ignore-invisible (n)
   "Move N lines forward (backward if N is negative).
-Like forward-line, but skip over (and don't count) invisible lines."
+Like `forward-line', but skip over (and don't count) invisible lines."
   (let (done)
     (while (and (> n 0) (not done))
       ;; If the following character is currently invisible,
@@ -9839,11 +9839,11 @@ article currently."
   "Force redisplaying of the current article.
 If ARG (the prefix) is a number, show the article with the charset
 defined in `gnus-summary-show-article-charset-alist', or the charset
-input.
+input.\\<gnus-summary-mode-map>
 If ARG (the prefix) is non-nil and not a number, show the article,
 but without running any of the article treatment functions
-article.  Normally, the keystroke is `C-u g'.  When using `C-u
-C-u g', show the raw article."
+article.  Normally, the keystroke is `\\[universal-argument] 
\\[gnus-summary-show-article]'.  When using `\\[universal-argument]
+\\[universal-argument] \\[gnus-summary-show-article]', show the raw article."
   (interactive "P" gnus-summary-mode)
   (cond
    ((numberp arg)
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 70ae81d95e..fb285962d6 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -533,7 +533,7 @@ ARGS are passed to `message'."
 
 (defun gnus-extract-references (references)
   "Return a list of Message-IDs in REFERENCES (in In-Reply-To
-  format), trimmed to only contain the Message-IDs."
+format), trimmed to only contain the Message-IDs."
   (let ((ids (gnus-split-references references))
        refs)
     (dolist (id ids)
@@ -1528,8 +1528,8 @@ sequence, this is like `mapcar'.  With several, it is 
like the Common Lisp
      (t emacs-version))))
 
 (defun gnus-rename-file (old-path new-path &optional trim)
-  "Rename OLD-PATH as NEW-PATH.  If TRIM, recursively delete
-empty directories from OLD-PATH."
+  "Rename OLD-PATH as NEW-PATH.
+If TRIM, recursively delete empty directories from OLD-PATH."
   (when (file-exists-p old-path)
     (let* ((old-dir (file-name-directory old-path))
           ;; (old-name (file-name-nondirectory old-path))
@@ -1549,7 +1549,7 @@ empty directories from OLD-PATH."
                          (concat old-dir "..")))))))))
 
 (defun gnus-set-file-modes (filename mode &optional flag)
-  "Wrapper for set-file-modes."
+  "Wrapper for `set-file-modes'."
   (ignore-errors
     (set-file-modes filename mode flag)))
 
diff --git a/lisp/gnus/gnus-uu.el b/lisp/gnus/gnus-uu.el
index 6c926384c9..f7b761ee33 100644
--- a/lisp/gnus/gnus-uu.el
+++ b/lisp/gnus/gnus-uu.el
@@ -354,12 +354,12 @@ didn't work, and overwrite existing files.  Otherwise, 
ask each time."
 ;; Commands.
 
 (defun gnus-uu-decode-uu (&optional n)
-  "Uudecodes the current article."
+  "Uudecode the current article."
   (interactive "P" gnus-article-mode gnus-summary-mode)
   (gnus-uu-decode-with-method #'gnus-uu-uustrip-article n))
 
 (defun gnus-uu-decode-uu-and-save (n dir)
-  "Decodes and saves the resulting file."
+  "Decode and save the resulting file."
   (interactive
    (list current-prefix-arg
         (file-name-as-directory
@@ -370,12 +370,12 @@ didn't work, and overwrite existing files.  Otherwise, 
ask each time."
   (gnus-uu-decode-with-method #'gnus-uu-uustrip-article n dir nil nil t))
 
 (defun gnus-uu-decode-unshar (&optional n)
-  "Unshars the current article."
+  "Unshar the current article."
   (interactive "P" gnus-article-mode gnus-summary-mode)
   (gnus-uu-decode-with-method #'gnus-uu-unshar-article n nil nil 'scan t))
 
 (defun gnus-uu-decode-unshar-and-save (n dir)
-  "Unshars and saves the current article."
+  "Unshar and save the current article."
   (interactive
    (list current-prefix-arg
         (file-name-as-directory
@@ -386,7 +386,7 @@ didn't work, and overwrite existing files.  Otherwise, ask 
each time."
   (gnus-uu-decode-with-method #'gnus-uu-unshar-article n dir nil 'scan t))
 
 (defun gnus-uu-decode-save (n file)
-  "Saves the current article."
+  "Save the current article."
   (interactive
    (list current-prefix-arg
         (if gnus-uu-save-separate-articles
@@ -399,7 +399,7 @@ didn't work, and overwrite existing files.  Otherwise, ask 
each time."
   (gnus-uu-decode-with-method #'gnus-uu-save-article n nil t))
 
 (defun gnus-uu-decode-binhex (n dir)
-  "Unbinhexes the current article."
+  "Unbinhex the current article."
   (interactive
    (list current-prefix-arg
         (file-name-as-directory
@@ -425,13 +425,13 @@ didn't work, and overwrite existing files.  Otherwise, 
ask each time."
   (gnus-uu-decode-with-method #'gnus-uu-yenc-article n dir nil t))
 
 (defun gnus-uu-decode-uu-view (&optional n)
-  "Uudecodes and views the current article."
+  "Uudecode and view the current article."
   (interactive "P" gnus-article-mode gnus-summary-mode)
   (let ((gnus-view-pseudos (or gnus-view-pseudos 'automatic)))
     (gnus-uu-decode-uu n)))
 
 (defun gnus-uu-decode-uu-and-save-view (n dir)
-  "Decodes, views and saves the resulting file."
+  "Decode, view and save the resulting file."
   (interactive
    (list current-prefix-arg
         (read-file-name "Uudecode, view and save in dir: "
@@ -442,13 +442,13 @@ didn't work, and overwrite existing files.  Otherwise, 
ask each time."
     (gnus-uu-decode-uu-and-save n dir)))
 
 (defun gnus-uu-decode-unshar-view (&optional n)
-  "Unshars and views the current article."
+  "Unshar and view the current article."
   (interactive "P" gnus-article-mode gnus-summary-mode)
   (let ((gnus-view-pseudos (or gnus-view-pseudos 'automatic)))
     (gnus-uu-decode-unshar n)))
 
 (defun gnus-uu-decode-unshar-and-save-view (n dir)
-  "Unshars and saves the current article."
+  "Unshar and save the current article."
   (interactive
    (list current-prefix-arg
         (read-file-name "Unshar, view and save in dir: "
@@ -459,7 +459,7 @@ didn't work, and overwrite existing files.  Otherwise, ask 
each time."
     (gnus-uu-decode-unshar-and-save n dir)))
 
 (defun gnus-uu-decode-save-view (n file)
-  "Saves and views the current article."
+  "Save and view the current article."
   (interactive
    (list current-prefix-arg
         (if gnus-uu-save-separate-articles
@@ -472,7 +472,7 @@ didn't work, and overwrite existing files.  Otherwise, ask 
each time."
     (gnus-uu-decode-save n file)))
 
 (defun gnus-uu-decode-binhex-view (n file)
-  "Unbinhexes and views the current article."
+  "Unbinhex and view the current article."
   (interactive
    (list current-prefix-arg
         (read-file-name "Unbinhex, view and save in dir: "
@@ -488,7 +488,7 @@ didn't work, and overwrite existing files.  Otherwise, ask 
each time."
 ;; Digest and forward articles
 
 (defun gnus-uu-digest-mail-forward (&optional n post)
-  "Digests and forwards all articles in this series."
+  "Digest and forward all articles in this series."
   (interactive "P" gnus-article-mode gnus-summary-mode)
   (gnus-uu-initialize)
   (let ((gnus-uu-save-in-digest t)
@@ -643,7 +643,7 @@ When called interactively, prompt for REGEXP."
   (gnus-uu-mark-region (point-min) (point-max) t))
 
 (defun gnus-uu-mark-thread ()
-  "Marks all articles downwards in this thread."
+  "Mark all articles downwards in this thread."
   (interactive nil gnus-article-mode gnus-summary-mode)
   (gnus-save-hidden-threads
     (let ((level (gnus-summary-thread-level)))
@@ -654,7 +654,7 @@ When called interactively, prompt for REGEXP."
   (gnus-summary-position-point))
 
 (defun gnus-uu-unmark-thread ()
-  "Unmarks all articles downwards in this thread."
+  "Unmark all articles downwards in this thread."
   (interactive nil gnus-article-mode gnus-summary-mode)
   (let ((level (gnus-summary-thread-level)))
     (while (and (gnus-summary-remove-process-mark
@@ -747,7 +747,7 @@ When called interactively, prompt for REGEXP."
     (gnus-uu-decode-postscript n)))
 
 (defun gnus-uu-decode-postscript-and-save (n dir)
-  "Extracts PostScript and saves the current article."
+  "Extract PostScript and save the current article."
   (interactive (list current-prefix-arg
                     (file-name-as-directory
                      (read-directory-name "Save in dir: "
@@ -758,7 +758,7 @@ When called interactively, prompt for REGEXP."
                              n dir nil nil t))
 
 (defun gnus-uu-decode-postscript-and-save-view (n dir)
-  "Decodes, views and saves the resulting file."
+  "Decode, view and save the resulting file."
   (interactive (list current-prefix-arg
                     (read-file-name "Where do you want to save the file(s)? "
                                     gnus-uu-default-dir
@@ -1606,7 +1606,7 @@ Gnus might fail to display all of it.")
                                 gnus-uu-unshar-warning))
                        (goto-char (point-min))
                        (display-buffer buffer)
-                       (yes-or-no-p "This is a shell archive, unshar it? "))
+                        (yes-or-no-p "This is a shell archive, unshar it?"))
                    (kill-buffer buffer))
                (setq state (list 'error))))))
        (unless (memq 'error state)
@@ -1925,7 +1925,7 @@ is t."
                          (gnus-uu-post-insert-binary)))))
 
 (defun gnus-uu-post-insert-binary-in-article ()
-  "Inserts an encoded file in the buffer.
+  "Insert an encoded file in the buffer.
 The user will be asked for a file name."
   (interactive)
   (save-excursion
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index d52bd26a2c..7c983344de 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -1114,7 +1114,7 @@ that case, just return a fully prefixed name of the group 
--
 (defcustom gnus-secondary-servers nil
   "List of NNTP servers that the user can choose between interactively.
 To make Gnus query you for a server, you have to give `gnus' a
-non-numeric prefix - `C-u M-x gnus', in short."
+non-numeric prefix - `\\[universal-argument] \\[gnus]', in short."
   :group 'gnus-server
   :type '(repeat string))
 (make-obsolete-variable 'gnus-secondary-servers 'gnus-select-method "24.1")
@@ -2140,8 +2140,9 @@ instance, to switch off all visual things except menus, 
you can say:
 
 Valid elements include `summary-highlight', `group-highlight',
 `article-highlight', `mouse-face', `summary-menu', `group-menu',
-`article-menu', `tree-highlight', `menu', `highlight', `browse-menu',
-`server-menu', `page-marker', `tree-menu', `binary-menu', and`pick-menu'."
+`article-menu', `tree-highlight', `menu', `highlight',
+`browse-menu', `server-menu', `page-marker', `tree-menu',
+`binary-menu', and `pick-menu'."
   :group 'gnus-meta
   :group 'gnus-visual
   :type '(set (const summary-highlight)
@@ -2216,7 +2217,7 @@ covered by that variable."
 (defcustom gnus-agent t
   "Whether we want to use the Gnus agent or not.
 
-You may customize gnus-agent to disable its use.  However, some
+You may customize `gnus-agent' to disable its use.  However, some
 back ends have started to use the agent as a client-side cache.
 Disabling the agent may result in noticeable loss of performance."
   :version "22.1"
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index bff1b2a60d..4a754b9856 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -3841,7 +3841,7 @@ text was killed."
   "Caesar rotate all letters in the current buffer by 13 places.
 Used to encode/decode possibly offensive messages (commonly in rec.humor).
 With prefix arg, specifies the number of places to rotate each letter forward.
-Mail and USENET news headers are not rotated unless WIDE is non-nil."
+Mail and Usenet news headers are not rotated unless WIDE is non-nil."
   (interactive (if current-prefix-arg
                   (list (prefix-numeric-value current-prefix-arg))
                 (list nil))
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index a7219ede94..ffbead3398 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -227,7 +227,7 @@ interactive command."
 ;;;###autoload
 (defun describe-function (function)
   "Display the full documentation of FUNCTION (a symbol).
-When called from lisp, FUNCTION may also be a function object."
+When called from Lisp, FUNCTION may also be a function object."
   (interactive (help-fns--describe-function-or-command-prompt))
 
   ;; We save describe-function-orig-buffer on the help xref stack, so
@@ -263,7 +263,7 @@ When called from lisp, FUNCTION may also be a function 
object."
 ;;;###autoload
 (defun describe-command (command)
   "Display the full documentation of COMMAND (a symbol).
-When called from lisp, COMMAND may also be a function object."
+When called from Lisp, COMMAND may also be a function object."
   (interactive (help-fns--describe-function-or-command-prompt 'is-command))
   (describe-function command))
 
@@ -1641,7 +1641,7 @@ BUFFER defaults to the current buffer."
           ((char-table-p value) "deeper char-table ...")
           (t (condition-case nil
                  (category-set-mnemonics value)
-               (error "invalid"))))))
+                (error "Invalid"))))))
 
 ;;;###autoload
 (defun describe-categories (&optional buffer)
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index 08182b71be..551cf7e1a3 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -70,7 +70,8 @@
     ["Customize" help-customize
      :help "Customize variable or face"]))
 
-(defun help-mode-context-menu (menu)
+(defun help-mode-context-menu (menu click)
+  "Populate MENU with Help mode commands at CLICK."
   (define-key menu [help-mode-separator] menu-bar-separator)
   (let ((easy-menu (make-sparse-keymap "Help-Mode")))
     (easy-menu-define nil easy-menu nil
@@ -85,12 +86,7 @@
       (when (consp item)
         (define-key menu (vector (car item)) (cdr item)))))
 
-  (when (and
-         ;; First check if `help-fns--list-local-commands'
-         ;; used `where-is-internal' to call this function
-         ;; with wrong `last-input-event'.
-         (eq (current-buffer) (window-buffer (posn-window (event-start 
last-input-event))))
-         (mouse-posn-property (event-start last-input-event) 'mouse-face))
+  (when (mouse-posn-property (event-start click) 'mouse-face)
     (define-key menu [help-mode-push-button]
       '(menu-item "Follow Link" (lambda (event)
                                   (interactive "e")
@@ -815,7 +811,7 @@ See `help-make-xrefs'."
 
 (defun help-do-xref (_pos function args)
   "Call the help cross-reference function FUNCTION with args ARGS.
-Things are set up properly so that the resulting help-buffer has
+Things are set up properly so that the resulting help buffer has
 a proper [back] button."
   ;; There is a reference at point.  Follow it.
   (let ((help-xref-following t))
diff --git a/lisp/hexl.el b/lisp/hexl.el
index 8bfc1fb89e..4a7bf9479a 100644
--- a/lisp/hexl.el
+++ b/lisp/hexl.el
@@ -93,7 +93,7 @@ as that will override any bit grouping options set here."
   "Face used in address area of Hexl mode buffer.")
 
 (defface hexl-ascii-region
-  ;; Copied from `header-line`.  We used to inherit from it, but that
+  ;; Copied from 'header-line'.  We used to inherit from it, but that
   ;; looks awful when the headerline is given a variable-pitch font or
   ;; (even worse) a 3D look.
   '((((class color grayscale) (background light))
@@ -539,7 +539,7 @@ This function is intended to be used as eldoc callback."
        (+ N (/ N (/ hexl-bits 4))) )) ) ; char offset into hexl display line
 
 (defun hexl-goto-address (address)
-  "Go to hexl-mode (decimal) address ADDRESS.
+  "Go to `hexl-mode' (decimal) address ADDRESS.
 Signal error if ADDRESS is out of range."
   (interactive "nAddress: ")
   (if (or (< address 0) (> address hexl-max-address))
diff --git a/lisp/hippie-exp.el b/lisp/hippie-exp.el
index 4fadbbe418..9720709038 100644
--- a/lisp/hippie-exp.el
+++ b/lisp/hippie-exp.el
@@ -38,7 +38,7 @@
 ;;
 ;;  If the variable `hippie-expand-verbose' is non-nil, `hippie-expand'
 ;;  outputs in a message which try-function in the list that is used
-;;  currently (ie. was used currently and will be tried first the next
+;;  currently (i.e. was used currently and will be tried first the next
 ;;  time).
 ;;  The variable `hippie-expand-max-buffers' determines in how many
 ;;  buffers, apart from the current, to search for expansions in.  It
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index 907ee8d63f..7c95baf8cd 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -693,7 +693,7 @@ To evaluate a form without viewing the buffer, see 
`ibuffer-do-eval'."
 (defun ibuffer-included-in-filters-p (buf filters)
   "Return non-nil if BUF passes all FILTERS.
 
-BUF is a lisp buffer object, and FILTERS is a list of filter
+BUF is a Lisp buffer object, and FILTERS is a list of filter
 specifications with the same structure as
 `ibuffer-filtering-qualifiers'."
   (not
@@ -714,7 +714,7 @@ where operand d is itself a cons cell, or nil.  Returns d."
 (defun ibuffer-included-in-filter-p (buf filter)
   "Return non-nil if BUF pass FILTER.
 
-BUF is a lisp buffer object, and FILTER is a filter
+BUF is a Lisp buffer object, and FILTER is a filter
 specification, with the same structure as an element of the list
 `ibuffer-filtering-qualifiers'."
   (if (eq (car filter) 'not)
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 0fa5f36734..01033474d3 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -165,7 +165,7 @@ icompletion is occurring."
   "Overlay used to display the list of completions.")
 
 (defvar icomplete--initial-input nil
-  "Initial input in the minibuffer when icomplete-mode was activated.
+  "Initial input in the minibuffer when `icomplete-mode' was activated.
 Used to implement the option `icomplete-show-matches-on-no-input'.")
 
 (defun icomplete-post-command-hook ()
diff --git a/lisp/ido.el b/lisp/ido.el
index b81a9db5eb..7c2d2eb0d7 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -834,7 +834,7 @@ Each function on the list may modify the dynamically bound 
variable
   :type 'hook)
 
 (defcustom ido-rewrite-file-prompt-functions nil
-  "List of functions to run when the find-file prompt is created.
+  "List of functions to run when the `find-file' prompt is created.
 Each function on the list may modify the following dynamically bound
 variables:
   dirname   - the (abbreviated) directory name
@@ -3620,7 +3620,7 @@ Uses and updates `ido-dir-file-cache'."
 
 
 (defun ido-make-file-list-1 (dir &optional merged)
-  "Return list of non-ignored files in DIR
+  "Return list of non-ignored files in DIR.
 If MERGED is non-nil, each file is cons'ed with DIR."
   (and (or (ido-is-tramp-root dir) (ido-is-unc-root dir)
           (file-directory-p dir))
@@ -4397,7 +4397,7 @@ For details of keybindings, see `ido-find-file'."
 
 ;;;###autoload
 (defun ido-dired-other-window ()
-  "\"Edit\" a directory.  Like `ido-dired' but selects in another window.
+  "\"Edit\" a directory.  Like `ido-dired' but select in another window.
 The directory is selected interactively by typing a substring.
 For details of keybindings, see `ido-find-file'."
   (interactive)
@@ -4408,7 +4408,7 @@ For details of keybindings, see `ido-find-file'."
 
 ;;;###autoload
 (defun ido-dired-other-frame ()
-  "\"Edit\" a directory.  Like `ido-dired' but makes a new frame.
+  "\"Edit\" a directory.  Like `ido-dired' but make a new frame.
 The directory is selected interactively by typing a substring.
 For details of keybindings, see `ido-find-file'."
   (interactive)
diff --git a/lisp/iimage.el b/lisp/iimage.el
index 192530a8e6..b18dd841fc 100644
--- a/lisp/iimage.el
+++ b/lisp/iimage.el
@@ -50,7 +50,7 @@
   :group 'image)
 
 (defcustom iimage-mode-image-search-path nil
-  "List of directories to search for image files for iimage-mode."
+  "List of directories to search for image files for `iimage-mode'."
   :type '(choice (const nil) (repeat directory)))
 
 (defvar iimage-mode-image-filename-regex
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index 69ef7015cc..4a326cdc69 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -1241,7 +1241,7 @@ will have the line where the image appears (if any) 
marked.
 If no such buffer exists, it will be opened."
   (interactive)
   (unless buffer-file-name
-    (error "The current buffer doesn't visit a file."))
+    (error "Current buffer is not visiting a file"))
   (image-mode--mark-file buffer-file-name #'dired-mark "marked"))
 
 (defun image-mode-unmark-file ()
@@ -1253,7 +1253,7 @@ any).
 If no such buffer exists, it will be opened."
   (interactive)
   (unless buffer-file-name
-    (error "The current buffer doesn't visit a file."))
+    (error "Current buffer is not visiting a file"))
   (image-mode--mark-file buffer-file-name #'dired-unmark "unmarked"))
 
 (declare-function dired-mark "dired" (arg &optional interactive))
diff --git a/lisp/image.el b/lisp/image.el
index 494c26a8a3..6e1dbbdf5c 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -817,7 +817,7 @@ in which case you might want to use 
`image-default-frame-delay'."
        (cons images delay)))))
 
 (defun image-animated-p (image)
-  "Like `image-multi-frame-p', but returns nil if no delay is specified."
+  "Like `image-multi-frame-p', but return nil if no delay is specified."
   (let ((multi (image-multi-frame-p image)))
     (and (cdr multi) multi)))
 
diff --git a/lisp/imenu.el b/lisp/imenu.el
index 2024bb1e06..788755a2d7 100644
--- a/lisp/imenu.el
+++ b/lisp/imenu.el
@@ -85,7 +85,8 @@ This might not yet be honored by all index-building 
functions."
   :type 'boolean)
 
 (defcustom imenu-auto-rescan-maxout 600000
-  "Imenu auto-rescan is disabled in buffers larger than this size (in bytes)."
+  "Imenu auto-rescan is disabled in buffers larger than this size (in bytes).
+Also see `imenu-max-index-time'."
   :type 'integer
   :version "26.2")
 
@@ -153,6 +154,11 @@ uses `imenu--generic-function')."
   :type 'boolean
   :version "24.4")
 
+(defcustom imenu-max-index-time 5
+  "Max time to use when creating imenu indices."
+  :type 'number
+  :version "28.1")
+
 ;;;###autoload
 (defvar-local imenu-generic-expression nil
   "List of definition matchers for creating an Imenu index.
@@ -520,10 +526,13 @@ The alternate method, which is the one most often used, 
is to call
   (cond ((and imenu-prev-index-position-function
              imenu-extract-index-name-function)
         (let ((index-alist '()) (pos (point-max))
+               (start (float-time))
               name)
           (goto-char pos)
           ;; Search for the function
-          (while (funcall imenu-prev-index-position-function)
+          (while (and (funcall imenu-prev-index-position-function)
+                       ;; Don't use an excessive amount of time.
+                       (< (- (float-time) start) imenu-max-index-time))
              (unless (< (point) pos)
                (error "Infinite loop at %s:%d: 
imenu-prev-index-position-function does not move point" (buffer-name) pos))
              (setq pos (point))
@@ -576,6 +585,7 @@ depending on PATTERNS."
                                  (not (local-variable-p 'font-lock-defaults)))
                              imenu-case-fold-search
                            (nth 2 font-lock-defaults)))
+        (start-time (float-time))
         (old-table (syntax-table))
         (table (copy-syntax-table (syntax-table)))
         (slist imenu-syntax-alist))
@@ -618,7 +628,13 @@ depending on PATTERNS."
                                     (not invis))))))
                          ;; Exit the loop if we get an empty match,
                          ;; because it means a bad regexp was specified.
-                         (not (= (match-beginning 0) (match-end 0))))
+                         (not (= (match-beginning 0) (match-end 0)))
+                          ;; Don't take an excessive amount of time.
+                          (or (< (- (float-time) start-time)
+                                 imenu-max-index-time)
+                              (progn
+                                (message "`imenu-max-index-time' exceeded")
+                                nil)))
                (setq start (point))
                ;; Record the start of the line in which the match starts.
                ;; That's the official position of this definition.
diff --git a/lisp/info-xref.el b/lisp/info-xref.el
index e2e3e30ca2..f791927ee1 100644
--- a/lisp/info-xref.el
+++ b/lisp/info-xref.el
@@ -242,18 +242,18 @@ buffer's line and column of point."
                                        node t t))
 
   (if (not (string-match "\\`([^)]*)" node))
-      (info-xref-output-error "no `(file)' part at start of node: %s\n" node)
+      (info-xref-output-error "No `(file)' part at start of node: %s\n" node)
     (let ((file (match-string 0 node)))
 
       (if (string-equal "()" file)
-          (info-xref-output-error "empty filename part: %s" node)
+          (info-xref-output-error "Empty filename part: %s" node)
 
         ;; see if the file exists, if haven't looked before
         (unless (assoc file info-xref-xfile-alist)
           (let ((found (info-xref-goto-node-p file)))
             (push (cons file found) info-xref-xfile-alist)
             (unless found
-              (info-xref-output-error "not available to check: %s\n    (this 
reported once per file)" file))))
+              (info-xref-output-error "Not available to check: %s\n    (this 
reported once per file)" file))))
 
         ;; if the file exists, try the node
         (cond ((not (cdr (assoc file info-xref-xfile-alist)))
@@ -262,7 +262,7 @@ buffer's line and column of point."
                (cl-incf info-xref-good))
               (t
                (cl-incf info-xref-bad)
-               (info-xref-output-error "no such node: %s" node)))))))
+               (info-xref-output-error "No such node: %s" node)))))))
 
 
 ;;-----------------------------------------------------------------------------
diff --git a/lisp/info.el b/lisp/info.el
index c09c75ad48..8c08eaec3c 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -4151,7 +4151,8 @@ If FORK is non-nil, it is passed to `Info-goto-node'."
    "---"
    ["Exit" quit-window :help "Stop reading Info"]))
 
-(defun Info-context-menu (menu)
+(defun Info-context-menu (menu click)
+  "Populate MENU with Info commands at CLICK."
   (define-key menu [Info-separator] menu-bar-separator)
   (let ((easy-menu (make-sparse-keymap "Info")))
     (easy-menu-define nil easy-menu nil
@@ -4164,7 +4165,7 @@ If FORK is non-nil, it is passed to `Info-goto-node'."
       (when (consp item)
         (define-key menu (vector (car item)) (cdr item)))))
 
-  (when (mouse-posn-property (event-start last-input-event) 'mouse-face)
+  (when (mouse-posn-property (event-start click) 'mouse-face)
     (define-key menu [Info-mouse-follow-nearest-node]
       '(menu-item "Follow Link" Info-mouse-follow-nearest-node
                   :help "Follow a link where you click")))
diff --git a/lisp/informat.el b/lisp/informat.el
index bac09752b7..b552e8532a 100644
--- a/lisp/informat.el
+++ b/lisp/informat.el
@@ -446,7 +446,7 @@ Check that every node pointer points to an existing node."
 
 ;;;###autoload
 (defun batch-info-validate ()
-  "Runs `Info-validate' on the files remaining on the command line.
+  "Run `Info-validate' on the files remaining on the command line.
 Must be used only with -batch, and kills Emacs on completion.
 Each file will be processed even if an error occurred previously.
 For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\""
diff --git a/lisp/international/characters.el b/lisp/international/characters.el
index 97bf31acfc..a877722f4e 100644
--- a/lisp/international/characters.el
+++ b/lisp/international/characters.el
@@ -214,6 +214,9 @@ with L, LRE, or LRO Unicode bidi character type.")
 (modify-category-entry '(#x31F0 . #x31FF) ?K)
 (modify-category-entry '(#x30A0 . #x30FA) ?\|)
 (modify-category-entry #x30FF ?\|)
+(modify-category-entry '(#x1AFF0 . #x1B000) ?K)
+(modify-category-entry '(#x1B120 . #x1B122) ?K)
+(modify-category-entry '(#x1B164 . #x1B167) ?K)
 
 ;; Hiragana block
 (modify-category-entry '(#x3040 . #x309F) ?H)
@@ -221,8 +224,12 @@ with L, LRE, or LRO Unicode bidi character type.")
 (modify-category-entry #x309F ?\|)
 (modify-category-entry #x30A0 ?H)
 (modify-category-entry #x30FC ?H)
+(modify-category-entry #x1B001 ?H)
+(modify-category-entry #x1B11F ?H)
+(modify-category-entry '(#x1B150 . #x1B152) ?H)
+(modify-category-entry '(#x1B002 . #x1B11E) ?H) ; Hentiagana
 
-(modify-category-entry '(#x1B000 . #x1B1FF) ?j)
+(modify-category-entry '(#x1AFF0 . #x1B1FF) ?j)
 
 
 ;; JISX0208
@@ -295,7 +302,7 @@ with L, LRE, or LRO Unicode bidi character type.")
     (map-charset-chars #'modify-category-entry (car charsets) ?b)
     (setq charsets (cdr charsets))))
 (modify-category-entry '(#x600 . #x6ff) ?b)
-(modify-category-entry '(#x8a0 . #x8ff) ?b)
+(modify-category-entry '(#x870 . #x8ff) ?b)
 (modify-category-entry '(#xfb50 . #xfdff) ?b)
 (modify-category-entry '(#xfe70 . #xfefe) ?b)
 
@@ -306,7 +313,9 @@ with L, LRE, or LRO Unicode bidi character type.")
 ;; Ethiopic character set
 
 (modify-category-entry '(#x1200 . #x1399) ?e)
-(modify-category-entry '(#x2d80 . #x2dde) ?e)
+(modify-category-entry '(#X2D80 . #X2DDE) ?e)
+(modify-category-entry '(#xAB01 . #xAB2E) ?e)
+(modify-category-entry '(#x1E7E0 . #x1E7FE) ?e)
 (let ((chars '(?፡ ?። ?፣ ?፤ ?፥ ?፦ ?፧ ?፨)))
   (while chars
     (modify-syntax-entry (car chars) ".")
@@ -580,6 +589,12 @@ with L, LRE, or LRO Unicode bidi character type.")
     (modify-category-entry c ?l)
     (setq c (1+ c)))
 
+  ;; Latin Extended-G
+  (setq c #x1DF00)
+  (while (<= c #x1DFFF)
+    (modify-category-entry c ?l)
+    (setq c (1+ c)))
+
   ;; Greek
   (modify-category-entry '(#x0370 . #x03FF) ?g)
 
@@ -1016,7 +1031,7 @@ with L, LRE, or LRO Unicode bidi character type.")
           (#x0D41 . #x0D44)
           (#x0D4D . #x0D4D)
           (#x0D62 . #x0D63)
-           (#x0D81 . #x0D81)
+          (#x0D81 . #x0D81)
           (#x0DCA . #x0DCA)
           (#x0DD2 . #x0DD6)
           (#x0E31 . #x0E31)
@@ -1045,7 +1060,7 @@ with L, LRE, or LRO Unicode bidi character type.")
           (#x1085 . #x1086)
           (#x108D . #x108D)
           (#x109D . #x109D)
-           (#x1160 . #x11FF)
+          (#x1160 . #x11FF)
           (#x135D . #x135F)
           (#x1712 . #x1714)
           (#x1732 . #x1734)
@@ -1111,7 +1126,7 @@ with L, LRE, or LRO Unicode bidi character type.")
           (#xA806 . #xA806)
           (#xA80B . #xA80B)
           (#xA825 . #xA826)
-           (#xA82C . #xA82C)
+          (#xA82C . #xA82C)
           (#xA8C4 . #xA8C5)
           (#xA8E0 . #xA8F1)
           (#xA926 . #xA92D)
@@ -1136,7 +1151,7 @@ with L, LRE, or LRO Unicode bidi character type.")
           (#xABE5 . #xABE5)
           (#xABE8 . #xABE8)
           (#xABED . #xABED)
-           (#xD7B0 . #xD7FB)
+          (#xD7B0 . #xD7FB)
           (#xFB1E . #xFB1E)
           (#xFE00 . #xFE0F)
           (#xFE20 . #xFE2F)
@@ -1148,7 +1163,7 @@ with L, LRE, or LRO Unicode bidi character type.")
           (#x10A01 . #x10A0F)
           (#x10A38 . #x10A3F)
           (#x10AE5 . #x10AE6)
-           (#x10EAB . #x10EAC)
+          (#x10EAB . #x10EAC)
           (#x11001 . #x11001)
           (#x11038 . #x11046)
           (#x1107F . #x11081)
@@ -1162,7 +1177,7 @@ with L, LRE, or LRO Unicode bidi character type.")
           (#x11180 . #x11181)
           (#x111B6 . #x111BE)
           (#x111CA . #x111CC)
-           (#x111CF . #x111CF)
+          (#x111CF . #x111CF)
           (#x1122F . #x11231)
           (#x11234 . #x11234)
           (#x11236 . #x11237)
@@ -1194,9 +1209,9 @@ with L, LRE, or LRO Unicode bidi character type.")
           (#x1171D . #x1171F)
           (#x11722 . #x11725)
           (#x11727 . #x1172B)
-           (#x1193B . #x1193C)
-           (#x1193E . #x1193E)
-           (#x11943 . #x11943)
+          (#x1193B . #x1193C)
+          (#x1193E . #x1193E)
+          (#x11943 . #x11943)
           (#x11C30 . #x11C36)
           (#x11C38 . #x11C3D)
           (#x11C92 . #x11CA7)
@@ -1206,7 +1221,7 @@ with L, LRE, or LRO Unicode bidi character type.")
           (#x16AF0 . #x16AF4)
           (#x16B30 . #x16B36)
           (#x16F8F . #x16F92)
-           (#x16FE4 . #x16FE4)
+          (#x16FE4 . #x16FE4)
           (#x1BC9D . #x1BC9E)
           (#x1BCA0 . #x1BCA3)
           (#x1D167 . #x1D169)
@@ -1280,18 +1295,19 @@ with L, LRE, or LRO Unicode bidi character type.")
           (#xFF01 . #xFF60)
           (#xFFE0 . #xFFE6)
           (#x16FE0 . #x16FE4)
-           (#x16FF0 . #x16FF1)
+          (#x16FF0 . #x16FF1)
           (#x17000 . #x187F7)
           (#x18800 . #x18AFF)
-           (#x18B00 . #x18CD5)
+          (#x18B00 . #x18CD5)
+          (#x1AFF0 . #x1AFFF)
           (#x1B000 . #x1B152)
-           (#x1B164 . #x1B167)
-           (#x1B170 . #x1B2FB)
+          (#x1B164 . #x1B167)
+          (#x1B170 . #x1B2FB)
           (#x1F004 . #x1F004)
           (#x1F0CF . #x1F0CF)
           (#x1F18E . #x1F18E)
           (#x1F191 . #x1F19A)
-           (#x1F1AD . #x1F1AD)
+          (#x1F1AD . #x1F1AD)
           (#x1F200 . #x1F320)
           (#x1F32D . #x1F335)
           (#x1F337 . #x1F37C)
@@ -1316,27 +1332,26 @@ with L, LRE, or LRO Unicode bidi character type.")
           (#x1F680 . #x1F6C5)
           (#x1F6CC . #x1F6CC)
           (#x1F6D0 . #x1F6D2)
-           (#x1F6D5 . #x1F6D7)
+          (#x1F6D5 . #x1F6D7)
+          (#x1F6DD . #x1F6DF)
           (#x1F6EB . #x1F6EC)
           (#x1F6F4 . #x1F6FC)
-           (#x1F7E0 . #x1F7EB)
+          (#x1F7E0 . #x1F7F0)
           (#x1F90C . #x1F93A)
-           (#x1F93C . #x1F945)
-           (#x1F947 . #x1F978)
-          (#x1F97A . #x1F9CB)
-           (#x1F9A5 . #x1F9AA)
-           (#x1F9AE . #x1F9CA)
-           (#x1F9CD . #x1F9FF)
-           (#x1FA00 . #x1FA53)
-           (#x1FA60 . #x1FA6D)
-           (#x1FA70 . #x1FA74)
-           (#x1FA78 . #x1FA7A)
-           (#x1FA80 . #x1FA86)
-           (#x1FA90 . #x1FAA8)
-           (#x1FAB0 . #x1FAB6)
-           (#x1FAC0 . #x1FAC2)
-           (#x1FAD0 . #x1FAD6)
-           (#x1FB00 . #x1FB92)
+          (#x1F93C . #x1F945)
+          (#x1F947 . #x1F9FF)
+          (#x1FA00 . #x1FA53)
+          (#x1FA60 . #x1FA6D)
+          (#x1FA70 . #x1FA74)
+          (#x1FA78 . #x1FA7C)
+          (#x1FA80 . #x1FA86)
+          (#x1FA90 . #x1FAAC)
+          (#x1FAB0 . #x1FABA)
+          (#x1FAC0 . #x1FAC5)
+          (#x1FAD0 . #x1FAD9)
+          (#x1FAE0 . #x1FAE7)
+          (#x1FAF0 . #x1FAF6)
+          (#x1FB00 . #x1FB92)
           (#x20000 . #x2FFFF)
           (#x30000 . #x3FFFF))))
   (dolist (elt l)
@@ -1401,7 +1416,7 @@ with L, LRE, or LRO Unicode bidi character type.")
 
 (defun use-default-char-width-table ()
   "Internal use only.
-Setup char-width-table appropriate for non-CJK language environment."
+Setup `char-width-table' appropriate for non-CJK language environment."
   (while (char-table-parent char-width-table)
     (setq char-width-table (char-table-parent char-width-table))))
 
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 3deaff9677..4ec641dca8 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -191,7 +191,7 @@
        (kanbun #x319D)
        (han #x5B57)
        (yi #xA288)
-        (javanese #xA980)
+       (javanese #xA980)
        (cham #xAA00)
        (tai-viet #xAA80)
        (hangul #xAC00)
@@ -209,9 +209,10 @@
        (deseret #x10400)
        (shavian #x10450)
        (osmanya #x10480)
-        (osage #x104B0)
+       (osage #x104B0)
        (elbasan #x10500)
        (caucasian-albanian #x10530)
+       (vithkuqi #x10570)
        (linear-a #x10600)
        (cypriot-syllabary #x10800)
        (palmyrene #x10860)
@@ -220,79 +221,85 @@
        (lydian #x10920)
        (kharoshthi #x10A00)
        (manichaean #x10AC0)
-        (hanifi-rohingya #x10D00)
-        (yezidi #x10E80)
-        (old-sogdian #x10F00)
-        (sogdian #x10F30)
-        (chorasmian #x10FB0)
-        (elymaic #x10FE0)
+       (hanifi-rohingya #x10D00)
+       (yezidi #x10E80)
+       (old-sogdian #x10F00)
+       (sogdian #x10F30)
+       (chorasmian #x10FB0)
+       (elymaic #x10FE0)
+       (old-uyghur #x10F70)
        (mahajani #x11150)
        (sinhala-archaic-number #x111E1)
        (khojki #x11200)
        (khudawadi #x112B0)
        (grantha #x11305)
-        (newa #x11400)
+       (newa #x11400)
        (tirhuta #x11481)
        (siddham #x11580)
        (modi #x11600)
        (takri #x11680)
-        (dogra #x11800)
+       (dogra #x11800)
        (warang-citi #x118A1)
-        (dives-akuru #x11900)
-        (nandinagari #x119a0)
-        (zanabazar-square #x11A00)
-        (soyombo #x11A50)
+       (dives-akuru #x11900)
+       (nandinagari #x119a0)
+       (zanabazar-square #x11A00)
+       (soyombo #x11A50)
        (pau-cin-hau #x11AC0)
-        (bhaiksuki #x11C00)
-        (marchen #x11C72)
-        (masaram-gondi #x11D00)
-        (gunjala-gondi #x11D60)
-        (makasar #x11EE0)
+       (bhaiksuki #x11C00)
+       (marchen #x11C72)
+       (masaram-gondi #x11D00)
+       (gunjala-gondi #x11D60)
+       (makasar #x11EE0)
        (cuneiform #x12000)
        (cuneiform-numbers-and-punctuation #x12400)
+       (cypro-minoan #x12F90)
        (egyptian #x13000)
        (mro #x16A40)
+       (tangsa #x16A70 #x16AC0)
        (bassa-vah #x16AD0)
        (pahawh-hmong #x16B11)
-        (medefaidrin #x16E40)
-        (tangut #x17000)
-        (tangut-components #x18800)
-        (khitan-small-script #x18B00)
-        (nushu #x1B170)
+       (medefaidrin #x16E40)
+       (tangut #x17000)
+       (tangut-components #x18800)
+       (khitan-small-script #x18B00)
+       (nushu #x1B170)
        (duployan-shorthand #x1BC20)
+       (znamenny-musical-notation #x1CF00 #x1CF42 #x1CF50)
        (byzantine-musical-symbol #x1D000)
        (musical-symbol #x1D100)
        (ancient-greek-musical-notation #x1D200)
        (tai-xuan-jing-symbol #x1D300)
        (counting-rod-numeral #x1D360)
-        (nyiakeng-puachue-hmong #x1e100)
-        (wancho #x1e2c0)
+       (nyiakeng-puachue-hmong #x1e100)
+       (toto #x1E290)
+       (wancho #x1e2c0)
        (mende-kikakui #x1E810)
-        (adlam #x1E900)
-        (indic-siyaq-number #x1ec71)
-        (ottoman-siyaq-number #x1ed01)
+       (adlam #x1E900)
+       (indic-siyaq-number #x1ec71)
+       (ottoman-siyaq-number #x1ed01)
        (mahjong-tile #x1F000)
-       (domino-tile #x1F030)))
+       (domino-tile #x1F030)
+        (emoji #x1F300 #x1F600 #xFE0F)))
 
 (defvar otf-script-alist)
 
-;; The below was synchronized with the latest Aug 16, 2018 version of
+;; The below was synchronized with the latest Oct 8, 2020 version of
 ;; https://docs.microsoft.com/en-us/typography/opentype/spec/scripttags
 (setq otf-script-alist
       '((adlm . adlam)
-        (ahom . ahom)
-        (hluw . anatolian)
-        (arab . arabic)
+       (ahom . ahom)
+       (hluw . anatolian)
+       (arab . arabic)
        (armi . aramaic)
        (armn . armenian)
        (avst . avestan)
        (bali . balinese)
        (bamu . bamum)
-        (bass . bassa-vah)
+       (bass . bassa-vah)
        (batk . batak)
        (bng2 . bengali)
        (beng . bengali)
-        (bhks . bhaiksuki)
+       (bhks . bhaiksuki)
        (bopo . bopomofo)
        (brah . brahmi)
        (brai . braille)
@@ -301,10 +308,11 @@
        (byzm . byzantine-musical-symbol)
        (cans . canadian-aboriginal)
        (cari . carian)
-        (aghb . caucasian-albanian)
+       (aghb . caucasian-albanian)
        (cakm . chakma)
        (cham . cham)
        (cher . cherokee)
+       (chrs . chorasmian)
        (copt . coptic)
        (xsux . cuneiform)
        (cprt . cypriot)
@@ -312,29 +320,31 @@
        (dsrt . deseret)
        (deva . devanagari)
        (dev2 . devanagari)
-        (dogr . dogra)
-        (dupl . duployan-shorthand)
+       (diak . dives-akuru)
+       (dogr . dogra)
+       (dupl . duployan-shorthand)
        (egyp . egyptian)
-        (elba . elbasan)
+       (elba . elbasan)
+       (elym . elymaic)
        (ethi . ethiopic)
        (geor . georgian)
        (glag . glagolitic)
        (goth . gothic)
-        (gran . grantha)
+       (gran . grantha)
        (grek . greek)
        (gujr . gujarati)
        (gjr2 . gujarati)
-        (gong . gunjala-gondi)
+       (gong . gunjala-gondi)
        (guru . gurmukhi)
        (gur2 . gurmukhi)
        (hani . han)
        (hang . hangul)
        (jamo . hangul)
-        (rohg . hanifi-rohingya)
+       (rohg . hanifi-rohingya)
        (hano . hanunoo)
-        (hatr . hatran)
+       (hatr . hatran)
        (hebr . hebrew)
-        (hung . old-hungarian)
+       (hung . old-hungarian)
        (phli . inscriptional-pahlavi)
        (prti . inscriptional-parthian)
        (java . javanese)
@@ -344,77 +354,79 @@
        (kana . kana)   ; Hiragana
        (kali . kayah-li)
        (khar . kharoshthi)
+       (kits . khitan-small-script)
        (khmr . khmer)
-        (khoj . khojki)
-        (sind . khudawadi)
+       (khoj . khojki)
+       (sind . khudawadi)
        (lao\  . lao)
        (latn . latin)
        (lepc . lepcha)
        (limb . limbu)
        (lina . linear_a)
        (linb . linear_b)
-        (lisu . lisu)
-        (lyci . lycian)
-        (lydi . lydian)
-        (mahj . mahajani)
-        (maka . makasar)
-        (marc . marchen)
+       (lisu . lisu)
+       (lyci . lycian)
+       (lydi . lydian)
+       (mahj . mahajani)
+       (maka . makasar)
+       (marc . marchen)
        (mlym . malayalam)
        (mlm2 . malayalam)
        (mand . mandaic)
-        (mani . manichaean)
-        (gonm . masaram-gondi)
+       (mani . manichaean)
+       (gonm . masaram-gondi)
        (math . mathematical)
-        (medf . medefaidrin)
+       (medf . medefaidrin)
        (mtei . meetei-mayek)
-        (mend . mende-kikakui)
+       (mend . mende-kikakui)
        (merc . meroitic)
        (mero . meroitic)
-        (plrd . miao)
-        (modi . modi)
+       (plrd . miao)
+       (modi . modi)
        (mong . mongolian)
-        (mroo . mro)
-        (mult . multani)
+       (mroo . mro)
+       (mult . multani)
        (musc . musical-symbol)
        (mym2 . burmese)
        (mymr . burmese)
-        (nbat . nabataean)
-        (newa . newa)
+       (nbat . nabataean)
+       (newa . newa)
        (nko\  . nko)
-        (nshu . nushu)
+       (nshu . nushu)
+       (hmnp . nyiakeng-puachue-hmong)
        (ogam . ogham)
        (olck . ol-chiki)
-       (ital . old_italic)
-       (xpeo . old_persian)
-        (narb . old-north-arabian)
-        (perm . old-permic)
-        (sogo . old-sogdian)
+       (ital . old-italic)
+       (xpeo . old-persian)
+       (narb . old-north-arabian)
+       (perm . old-permic)
+       (sogo . old-sogdian)
        (sarb . old-south-arabian)
        (orkh . old-turkic)
        (orya . oriya)
        (ory2 . oriya)
-        (osge . osage)
+       (osge . osage)
        (osma . osmanya)
-        (hmng . pahawh-hmong)
-        (palm . palmyrene)
-        (pauc . pau-cin-hau)
+       (hmng . pahawh-hmong)
+       (palm . palmyrene)
+       (pauc . pau-cin-hau)
        (phag . phags-pa)
-        (phli . inscriptional-pahlavi)
+       (phli . inscriptional-pahlavi)
        (phnx . phoenician)
-        (phlp . psalter-pahlavi)
-        (prti . inscriptional-parthian)
+       (phlp . psalter-pahlavi)
+       (prti . inscriptional-parthian)
        (rjng . rejang)
        (runr . runic)
        (samr . samaritan)
        (saur . saurashtra)
        (shrd . sharada)
        (shaw . shavian)
-        (sidd . siddham)
-        (sgnw . sutton-sign-writing)
+       (sidd . siddham)
+       (sgnw . sutton-sign-writing)
        (sinh . sinhala)
-        (sogd . sogdian)
+       (sogd . sogdian)
        (sora . sora-sompeng)
-        (soyo . soyombo)
+       (soyo . soyombo)
        (sund . sundanese)
        (sylo . syloti_nagri)
        (syrc . syriac)
@@ -427,19 +439,21 @@
        (takr . takri)
        (taml . tamil)
        (tml2 . tamil)
-        (tang . tangut)
+       (tang . tangut)
        (telu . telugu)
        (tel2 . telugu)
        (thaa . thaana)
        (thai . thai)
        (tibt . tibetan)
        (tfng . tifinagh)
-        (tirh . tirhuta)
+       (tirh . tirhuta)
        (ugar . ugaritic)
        (vai\  . vai)
-        (wara . warang-citi)
-       (yi\ \   . yi)
-        (zanb . zanabazar-square)))
+       (wcho . wancho)
+       (wara . warang-citi)
+       (yezi . yezidi)
+       (yi\ \   . yi)
+       (zanb . zanabazar-square)))
 
 ;; Set standard fontname specification of characters in the default
 ;; fontset to find an appropriate font for each script/charset.  The
@@ -740,6 +754,7 @@
                    shavian
                    osmanya
                    osage
+                    vithkuqi
                    cypriot-syllabary
                    phoenician
                    lydian
@@ -748,22 +763,27 @@
                    manichaean
                     chorasmian
                    elymaic
+                    old-uyghur
                    makasar
                     dives-akuru
                    cuneiform-numbers-and-punctuation
                    cuneiform
                    egyptian
+                    tangsa
                    bassa-vah
                    pahawh-hmong
                    medefaidrin
+                    znamenny-musical-notation
                    byzantine-musical-symbol
                    musical-symbol
                    ancient-greek-musical-notation
                    tai-xuan-jing-symbol
                    counting-rod-numeral
+                    toto
                    adlam
                    mahjong-tile
-                   domino-tile))
+                   domino-tile
+                    emoji))
     (set-fontset-font "fontset-default"
                      script (font-spec :registry "iso10646-1" :script script)
                      nil 'append))
@@ -904,6 +924,9 @@
     (set-fontset-font "fontset-default" symbol-subgroup
                       "-*-fixed-medium-*-*-*-*-*-*-*-*-*-iso10646-1"
                       nil 'prepend))
+  ;; This sets up the Emoji codepoints to use prettier fonts.
+  (set-fontset-font "fontset-default" 'emoji
+                    '("Noto Color Emoji" . "iso10646-1") nil 'prepend)
 
   ;; Append CJK fonts for characters other than han, kana, cjk-misc.
   ;; Append fonts for scripts whose name is also a charset name.
diff --git a/lisp/international/iso-cvt.el b/lisp/international/iso-cvt.el
index ead7c8aa61..f0bfe9f682 100644
--- a/lisp/international/iso-cvt.el
+++ b/lisp/international/iso-cvt.el
@@ -22,7 +22,7 @@
 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
-;; This lisp code is a general framework for translating various
+;; This Lisp code is a general framework for translating various
 ;; representations of the same data.
 ;; among other things it can be used to translate TeX, HTML, and compressed
 ;; files to ISO 8859-1.  It can also be used to translate different charsets
@@ -37,7 +37,7 @@
 
 ;; SEE ALSO:
 ; If you are interested in questions related to using the ISO 8859-1
-; characters set (configuring emacs, Unix, etc. to use ISO), then you
+; characters set (configuring Emacs, Unix, etc. to use ISO), then you
 ; can get the ISO 8859-1 FAQ via anonymous ftp from
 ; ftp.vlsivie.tuwien.ac.at in /pub/8bit/FAQ-ISO-8859-1
 
diff --git a/lisp/international/latexenc.el b/lisp/international/latexenc.el
index ff7cddcb26..9449b3bb85 100644
--- a/lisp/international/latexenc.el
+++ b/lisp/international/latexenc.el
@@ -31,13 +31,13 @@
 
 ;; If this fails it will search for AUCTeX's TeX-master or tex-mode's
 ;; tex-main-file variable in the local variables section and visit
-;; that file to get the coding system from the master file. This check
+;; that file to get the coding system from the master file.  This check
 ;; can be disabled by setting `latexenc-dont-use-TeX-master-flag' to
 ;; t.
 
 ;; If we have still not found a coding system we will try to use the
 ;; standard tex-mode's `tex-guess-main-file' and get the coding system
-;; from the main file. This check can be disabled by setting
+;; from the main file.  This check can be disabled by setting
 ;; `latexenc-dont-use-tex-guess-main-file-flag' to t.
 
 ;; The functionality is enabled by adding the function
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index abccc4f72c..a0a6557c95 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -3094,15 +3094,15 @@ on encoding."
                ;; (#x18800 . #x18AFF) Tangut Components
                ;; (#x18B00 . #x18CFF) Khitan Small Script
                ;; (#x18D00 . #x18D0F) Tangut Ideograph Supplement
-              ;; (#x18D10 . #x1AFFF) unused
-              (#x1B000 . #x1B11F)
-               ;; (#x1B120 . #x1B14F) unused
+              ;; (#x18D10 . #x1AFEF) unused
+              (#x1AFF0 . #x1B12F)
+               ;; (#x1B130 . #x1B14F) unused
                (#x1B150 . #x1B16F)
                (#x1B170 . #x1B2FF)
               ;; (#x1B300 . #x1BBFF) unused
                (#x1BC00 . #x1BCAF)
-              ;; (#x1BCB0 . #x1CFFF) unused
-              (#x1D000 . #x1FFFF)
+              ;; (#x1BCB0 . #x1CEFF) unused
+              (#x1CF00 . #x1FFFF)
               ;; (#x20000 . #xDFFFF) CJK Ideograph Extension A, B, etc, unused
               (#xE0000 . #xE01FF)))
             (gc-cons-threshold (max gc-cons-threshold 10000000))
diff --git a/lisp/international/mule-diag.el b/lisp/international/mule-diag.el
index 864cd3ce01..862c577bd5 100644
--- a/lisp/international/mule-diag.el
+++ b/lisp/international/mule-diag.el
@@ -882,7 +882,7 @@ The IGNORED argument is ignored."
   ;; the current line.
   (beginning-of-line)
   (let ((from (mule--kbd-at (point)))
-       (to (if (looking-at "[^.]*[.]* ")
+       (to (if (looking-at "[^.]+[.][.] ")
                (mule--kbd-at (match-end 0)))))
     (if (re-search-forward "[ \t]*$" nil t)
        (delete-region (match-beginning 0) (match-end 0)))
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index 1a53237f14..ee116976ea 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -1148,7 +1148,7 @@ Value is a list of transformed arguments."
              (,(plist-get props 'decode) . ,(plist-get props 'encode))
              ,properties ,eol-type))
      (t
-      (error "unsupported XEmacs style make-coding-style arguments: %S"
+      (error "Unsupported XEmacs style make-coding-style arguments: %S"
             `(,name ,type ,doc-string ,props))))))
 
 (defun merge-coding-systems (first second)
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index 5d1311530a..c0e53d26fb 100644
--- a/lisp/international/quail.el
+++ b/lisp/international/quail.el
@@ -2020,7 +2020,7 @@ minibuffer and the selected frame has no other windows)."
   (bury-buffer quail-completion-buf)
 
   ;; Then, show the guidance.
-  (when (and 
+  (when (and
          ;; Don't try to display guidance on an expired minibuffer.  This
          ;; would go into an infinite wait rather than executing the user's
          ;; command.  Bug #45792.
diff --git a/lisp/isearch.el b/lisp/isearch.el
index efa7db6fe9..af6217b7ca 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -133,6 +133,8 @@ tab, a carriage return (control-M), a newline, and `]+'.  
Don't
 add any capturing groups into this value; that can change the
 numbering of existing capture groups in unexpected ways."
   :type '(choice (const :tag "Match Spaces Literally" nil)
+                 (const :tag "Tabs and spaces" "[ \t]+")
+                 (const :tag "Tabs, spaces and line breaks" "[ \t\n]+")
                 regexp)
   :version "28.1")
 
@@ -2001,7 +2003,8 @@ Move point to the beginning of the buffer and search 
forwards from the top.
 \\<isearch-mode-map>
 With a numeric argument, go to the ARGth absolute occurrence counting from
 the beginning of the buffer.  To find the next relative occurrence forwards,
-type \\[isearch-repeat-forward] with a numeric argument."
+type \\[isearch-repeat-forward] with a numeric argument.
+You might want to use `isearch-allow-motion' instead of this command."
   (interactive "p")
   (if (and arg (< arg 0))
       (isearch-end-of-buffer (abs arg))
@@ -2009,8 +2012,11 @@ type \\[isearch-repeat-forward] with a numeric argument."
     ;; don't forward char in isearch-repeat
     (setq isearch-just-started t)
     (goto-char (point-min))
-    (let ((isearch-repeat-on-direction-change nil))
-      (isearch-repeat 'forward arg))))
+    (let ((current-direction (if isearch-forward 'forward 'backward))
+          (isearch-repeat-on-direction-change nil))
+      (isearch-repeat 'forward arg)
+      (unless (eq current-direction (if isearch-forward 'forward 'backward))
+        (isearch-repeat current-direction)))))
 
 (defun isearch-end-of-buffer (&optional arg)
   "Go to the last occurrence of the current search string.
@@ -2018,14 +2024,18 @@ Move point to the end of the buffer and search 
backwards from the bottom.
 \\<isearch-mode-map>
 With a numeric argument, go to the ARGth absolute occurrence counting from
 the end of the buffer.  To find the next relative occurrence backwards,
-type \\[isearch-repeat-backward] with a numeric argument."
+type \\[isearch-repeat-backward] with a numeric argument.
+You might want to use `isearch-allow-motion' instead of this command."
   (interactive "p")
   (if (and arg (< arg 0))
       (isearch-beginning-of-buffer (abs arg))
     (setq isearch-just-started t)
     (goto-char (point-max))
-    (let ((isearch-repeat-on-direction-change nil))
-      (isearch-repeat 'backward arg))))
+    (let ((current-direction (if isearch-forward 'forward 'backward))
+          (isearch-repeat-on-direction-change nil))
+      (isearch-repeat 'backward arg)
+      (unless (eq current-direction (if isearch-forward 'forward 'backward))
+        (isearch-repeat current-direction)))))
 
 
 ;;; Toggles for `isearch-regexp-function' and `search-default-mode'.
@@ -2935,13 +2945,13 @@ See also the related option `isearch-allow-motion'."
   :group 'isearch)
 
 (put 'beginning-of-buffer 'isearch-motion
-     '((lambda () (goto-char (point-min))) . forward))
+     (cons (lambda () (goto-char (point-min))) 'forward))
 (put 'end-of-buffer 'isearch-motion
-     '((lambda () (goto-char (point-max))) . backward))
+     (cons (lambda () (goto-char (point-max)) (recenter -1 t)) 'backward))
 (put 'scroll-up-command 'isearch-motion
-     '((lambda () (goto-char (window-end)) (recenter 1 t)) . forward))
+     (cons (lambda () (goto-char (window-end)) (recenter 0 t)) 'forward))
 (put 'scroll-down-command 'isearch-motion
-     '((lambda () (goto-char (window-start)) (recenter -1 t)) . backward))
+     (cons (lambda () (goto-char (window-start)) (recenter -1 t)) 'backward))
 
 (defcustom isearch-allow-motion nil
   "Whether to allow movement between isearch matches by cursor motion commands.
@@ -3074,7 +3084,10 @@ See more for options in `search-exit-option'."
      ;; Handle motion command functions.
      ((and isearch-allow-motion
            (symbolp this-command)
-           (get this-command 'isearch-motion))
+           (get this-command 'isearch-motion)
+           ;; Don't override `isearch-yank-on-move' used below.
+           (not (and (eq isearch-yank-on-move 'shift)
+                     this-command-keys-shift-translated)))
       (let* ((property (get this-command 'isearch-motion))
              (function (car property))
              (current-direction (if isearch-forward 'forward 'backward))
diff --git a/lisp/jsonrpc.el b/lisp/jsonrpc.el
index f1fb6c1dda..6b5abcbd7c 100644
--- a/lisp/jsonrpc.el
+++ b/lisp/jsonrpc.el
@@ -239,7 +239,7 @@ The caller can expect SUCCESS-FN or ERROR-FN to be called 
with a
 JSONRPC `:result' or `:error' object, respectively.  If this
 doesn't happen after TIMEOUT seconds (defaults to
 `jrpc-default-request-timeout'), the caller can expect TIMEOUT-FN
-to be called with no arguments. The default values of SUCCESS-FN,
+to be called with no arguments.  The default values of SUCCESS-FN,
 ERROR-FN and TIMEOUT-FN simply log the events into
 `jsonrpc-events-buffer'.
 
@@ -363,7 +363,7 @@ expected to understand JSONRPC messages with basic 
HTTP-style
 enveloping headers such as \"Content-Length:\".
 
 :ON-SHUTDOWN (optional), a function of one argument, the
-connection object, called when the process dies .")
+connection object, called when the process dies.")
 
 (cl-defmethod initialize-instance ((conn jsonrpc-process-connection) slots)
   (cl-call-next-method)
diff --git a/lisp/kermit.el b/lisp/kermit.el
index fdab7e5a50..25f1f300f3 100644
--- a/lisp/kermit.el
+++ b/lisp/kermit.el
@@ -29,7 +29,7 @@
 ;; is that I can log onto machines with primitive operating systems (VMS and
 ;; ATT system V :-), and still have the features of shell-mode available for
 ;; command history, etc.  It's also handy to be able to run a file transfer in
-;; an emacs window.  The transfer is in the "background", but you can also
+;; an Emacs window.  The transfer is in the "background", but you can also
 ;; monitor or stop it easily.
 
 ;; The ^\ key is bound to a function for sending escape sequences to kermit,
diff --git a/lisp/kmacro.el b/lisp/kmacro.el
index 8821e35c2d..a39f433cdc 100644
--- a/lisp/kmacro.el
+++ b/lisp/kmacro.el
@@ -22,7 +22,7 @@
 
 ;;; Commentary:
 
-;; The kmacro package provides the user interface to emacs' basic
+;; The kmacro package provides the user interface to Emacs' basic
 ;; keyboard macro functionality.  With kmacro, two function keys are
 ;; dedicated to keyboard macros, by default F3 and F4.
 
@@ -144,7 +144,7 @@ macro to be executed before appending to it."
 
 
 (defcustom kmacro-repeat-no-prefix t
-  "Allow repeating certain macro commands without entering the C-x C-k prefix."
+  "Allow repeating certain macro commands without entering the 
\\[kmacro-keymap] prefix."
   :type 'boolean)
 
 (defcustom kmacro-call-repeat-key t
@@ -728,7 +728,7 @@ With \\[universal-argument], call second macro in macro 
ring."
 
 
 (defun kmacro-end-or-call-macro-repeat (arg)
-  "As `kmacro-end-or-call-macro' but allows repeat without repeating prefix."
+  "As `kmacro-end-or-call-macro' but allow repeat without repeating prefix."
   (interactive "P")
   (let ((keys (kmacro-get-repeat-prefix)))
     (kmacro-end-or-call-macro arg t)
diff --git a/lisp/language/ind-util.el b/lisp/language/ind-util.el
index 8d4b2a826e..6f579f2383 100644
--- a/lisp/language/ind-util.el
+++ b/lisp/language/ind-util.el
@@ -487,7 +487,7 @@
    c trans-c))
 
 (defun indian-make-hash (table trans-table)
-  "Indian Transliteration Hash for decode/encode"
+  "Indian Transliteration Hash for decode/encode."
   (let* ((encode-hash (make-hash-table :test 'equal))
         (decode-hash (make-hash-table :test 'equal))
         (hashtbls (cons encode-hash decode-hash))
@@ -809,11 +809,11 @@
   ;; only Devanagari is supported now.
   (concat "[" (char-to-string #x0900)
           "-" (char-to-string #x097f) "]")
-  "Regexp that matches to conversion")
+  "Regexp that matches to conversion.")
 
 (defun indian-ucs-to-iscii-region (from to)
-  "Converts the indian UCS characters in the region to ISCII.
-Returns new end position."
+  "Convert the indian UCS characters in the region to ISCII.
+Return new end position."
   (interactive "r")
   ;; only Devanagari is supported now.
   (save-excursion
@@ -828,8 +828,8 @@ Returns new end position."
       (point-max))))
 
 (defun indian-iscii-to-ucs-region (from to)
-  "Converts the ISCII characters in the region to UCS.
-Returns new end position."
+  "Convert the ISCII characters in the region to UCS.
+Return new end position."
   (interactive "r")
   ;; only Devanagari is supported now.
   (save-excursion
diff --git a/lisp/language/thai-word.el b/lisp/language/thai-word.el
index 5d0389c28d..d12064958e 100644
--- a/lisp/language/thai-word.el
+++ b/lisp/language/thai-word.el
@@ -64,7 +64,6 @@
 ;;   the sale, use or other dealings in this Software without prior
 ;;   written authorization of the copyright holder.
 
-
 ;;; Commentary:
 
 ;; This file implements an algorithm to find Thai word breaks using a
@@ -76,6 +75,8 @@
 ;; which means that you can easily index the list character by
 ;; character.
 
+;;; Code:
+
 (defvar thai-word-table
   (let ((table (list 'thai-words)))
     (dolist (elt
@@ -10740,8 +10741,8 @@
 
 
 (defun thai-update-word-table (file &optional append)
-  "Update Thai word table by replacing the current word list with
-FILE.  If called with a prefix argument, FILE is appended instead to
+  "Update Thai word table by replacing the current word list with FILE.
+If called with a prefix argument, FILE is appended instead to
 the current word list."
   (interactive "FThai word table file: \nP")
   (let ((buf (generate-new-buffer "*thai-work*"))
@@ -11041,20 +11042,20 @@ If COUNT is negative, move point forward (- COUNT) 
words."
 
 
 (defun thai-kill-word (arg)
-  "Like kill-word but pay attention to Thai word boundaries.
+  "Like `kill-word' but pay attention to Thai word boundaries.
 With argument, do this that many times."
   (interactive "p")
   (kill-region (point) (progn (thai-forward-word arg) (point))))
 
 
 (defun thai-backward-kill-word (arg)
-  "Like backward-kill-word but pay attention to Thai word boundaries."
+  "Like `backward-kill-word' but pay attention to Thai word boundaries."
   (interactive "p")
   (thai-kill-word (- arg)))
 
 
 (defun thai-transpose-words (arg)
-  "Like transpose-words but pay attention to Thai word boundaries."
+  "Like `transpose-words' but pay attention to Thai word boundaries."
   (interactive "*p")
   (transpose-subr 'thai-forward-word arg))
 
diff --git a/lisp/language/tibet-util.el b/lisp/language/tibet-util.el
index ddf4a0c0fb..1f7a1edcad 100644
--- a/lisp/language/tibet-util.el
+++ b/lisp/language/tibet-util.el
@@ -281,8 +281,9 @@ The returned string has no composition information."
 ;;;###autoload
 (defun tibetan-decompose-region (from to)
   "Decompose Tibetan text in the region FROM and TO.
-This is different from decompose-region because precomposed Tibetan characters
-are decomposed into normal Tibetan character sequences."
+This is different from `decompose-region' because precomposed
+Tibetan characters are decomposed into normal Tibetan character
+sequences."
   (interactive "r")
   (save-restriction
     (narrow-to-region from to)
@@ -301,8 +302,9 @@ are decomposed into normal Tibetan character sequences."
 ;;;###autoload
 (defun tibetan-decompose-string (str)
   "Decompose Tibetan string STR.
-This is different from decompose-string because precomposed Tibetan characters
-are decomposed into normal Tibetan character sequences."
+This is different from `decompose-string' because precomposed
+Tibetan characters are decomposed into normal Tibetan character
+sequences."
   (let ((new "")
        (len (length str))
        (idx 0)
@@ -332,7 +334,7 @@ See also the documentation of the function 
`tibetan-decompose-region'."
 ;;;###autoload
 (defun tibetan-compose-buffer ()
   "Composes Tibetan character components in the buffer.
-See also docstring of the function tibetan-compose-region."
+See also docstring of the function `tibetan-compose-region'."
   (interactive)
   (make-local-variable 'tibetan-decomposed)
   (tibetan-compose-region (point-min) (point-max))
diff --git a/lisp/language/tv-util.el b/lisp/language/tv-util.el
index 207d76f47c..d380630c0a 100644
--- a/lisp/language/tv-util.el
+++ b/lisp/language/tv-util.el
@@ -21,12 +21,11 @@
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
-;;; Code
+;;; Code:
 
-;; Regexp matching with a sequence of Tai Viet characters.
-(defconst tai-viet-re "[\xaa80-\xaac2\xaadb-\xaadf]+")
+(defconst tai-viet-re "[\xaa80-\xaac2\xaadb-\xaadf]+"
+  "Regexp matching with a sequence of Tai Viet characters.")
 
-;; Char-table of information about glyph type of Tai Viet characters.
 (defconst tai-viet-glyph-info
   (let ((table (make-char-table nil))
        (specials '((right-overhang . "ꪊꪋꪌꪍꪏꪓꪖꪜꪞꪡꪤꪨ")
@@ -43,7 +42,8 @@
            (chars (cdr elt)))
        (dotimes (i (length chars))
          (aset table (aref chars i) category))))
-    table))
+    table)
+  "Char-table of information about glyph type of Tai Viet characters.")
 
 (defun tai-viet-compose-string (from to string)
   "Compose Tai Viet characters in STRING between indices FROM and TO."
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el
index 542cbef9f5..9cd5c9bfa8 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -1592,7 +1592,7 @@ For example:
 `6 9 a' inserts 69 `a's into the buffer.
 `6 9 \\[autoarg-terminate] \\[autoarg-terminate]' inserts `69' into the buffer 
and
 then invokes the normal binding of \\[autoarg-terminate].
-`C-u \\[autoarg-terminate]' invokes the normal binding of 
\\[autoarg-terminate] four times.
+`\\[universal-argument] \\[autoarg-terminate]' invokes the normal binding of 
\\[autoarg-terminate] four times.
 
 \\{autoarg-mode-map}
 
@@ -8735,7 +8735,7 @@ BODY contains code to execute each time the mode is 
enabled or disabled.
   It is executed after toggling the mode, and before running MODE-hook.
   Before the actual body code, you can write keyword arguments, i.e.
   alternating keywords and values.  If you provide BODY, then you must
-  provide at least one keyword argument (e.g. `:lighter nil`).
+  provide at least one keyword argument (e.g. `:lighter nil').
   The following special keywords are supported (other keywords are passed
   to `defcustom' if the minor mode is global):
 
diff --git a/lisp/leim/quail/persian.el b/lisp/leim/quail/persian.el
index cb1f6e3c78..d058cfa61c 100644
--- a/lisp/leim/quail/persian.el
+++ b/lisp/leim/quail/persian.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
 ;; Author: Mohsen BANAN <libre@mohsen.1.banan.byname.net>
-;; X-URL: http://mohsen.1.banan.byname.net/contact
+;; URL: http://mohsen.1.banan.byname.net/contact
 
 ;; Keywords: multilingual, input method, Farsi, Persian, keyboard
 
diff --git a/lisp/leim/quail/sami.el b/lisp/leim/quail/sami.el
index 6c9b2d99cc..0f0bae9eca 100644
--- a/lisp/leim/quail/sami.el
+++ b/lisp/leim/quail/sami.el
@@ -33,7 +33,7 @@
 ;; - skolt-sami-prefix
 ;; - kildin-sami-prefix
 
-;;; Code
+;;; Code:
 
 (require 'quail)
 
diff --git a/lisp/leim/quail/vnvni.el b/lisp/leim/quail/vnvni.el
index faccc0afc5..57e0dfd820 100644
--- a/lisp/leim/quail/vnvni.el
+++ b/lisp/leim/quail/vnvni.el
@@ -303,3 +303,5 @@ and postfix: E66 -> E6, a55 -> a5, etc.
 ;; Local Variables:
 ;; coding: utf-8
 ;; End:
+
+;;; vnvni.el ends here
diff --git a/lisp/loadup.el b/lisp/loadup.el
index 158c02ecea..0ea441de01 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -520,7 +520,7 @@ lost after dumping")))
                         ((equal dump-mode "dump") "emacs")
                         ((equal dump-mode "bootstrap") "emacs")
                         ((equal dump-mode "pbootstrap") "bootstrap-emacs.pdmp")
-                        (t (error "unrecognized dump mode %s" dump-mode)))))
+                        (t (error "Unrecognized dump mode %s" dump-mode)))))
       (when (and (featurep 'native-compile)
                  (equal dump-mode "pdump"))
         ;; Don't enable this before bootstrap is completed, as the
diff --git a/lisp/locate.el b/lisp/locate.el
index c4dbe2af02..008d65e055 100644
--- a/lisp/locate.el
+++ b/lisp/locate.el
@@ -25,7 +25,7 @@
 ;; Search a database of files and use dired commands on the result.
 ;;
 ;; Locate.el provides an interface to a program which searches a
-;; database of file names. By default, this program is the GNU locate
+;; database of file names.  By default, this program is the GNU locate
 ;; command, but it could also be the BSD-style find command, or even a
 ;; user specified command.
 ;;
@@ -39,7 +39,7 @@
 ;;   To use a more complicated expression, create a function which
 ;; takes a string (the name to find) as input and returns a list.
 ;; The first element should be the command to be executed, the remaining
-;; elements should be the arguments (including the name to find). Then put
+;; elements should be the arguments (including the name to find).  Then put
 ;;
 ;; (setq locate-make-command-line 'my-locate-command-line)
 ;;
@@ -47,25 +47,25 @@
 ;; my-locate-command-line.
 ;;
 ;; You should make sure that whichever command you use works correctly
-;; from a shell prompt. GNU locate and BSD find expect the file databases
+;; from a shell prompt.  GNU locate and BSD find expect the file databases
 ;; to either be in standard places or located via environment variables.
 ;; If the latter, make sure these environment variables are set in
 ;; your emacs process.
 ;;
 ;; Locate-mode assumes that each line output from the locate-command
 ;; consists exactly of a file name, possibly preceded or trailed by
-;; whitespace. If your file database has other information on the line (for
+;; whitespace.  If your file database has other information on the line (for
 ;; example, the file size), you will need to redefine the function
 ;; `locate-get-file-positions' to return a list consisting of the first
 ;; character in the file name and the last character in the file name.
 ;;
 ;; To use locate-mode, simply type M-x locate and then the string
-;; you wish to find. You can use almost all of the dired commands in
+;; you wish to find.  You can use almost all of the dired commands in
 ;; the resulting *Locate* buffer.  It is worth noting that your commands
-;; do not, of course, affect the file database. For example, if you
+;; do not, of course, affect the file database.  For example, if you
 ;; compress a file in the locate buffer, the actual file will be
 ;; compressed, but the entry in the file database will not be
-;; affected. Consequently, the database and the filesystem will be out
+;; affected.  Consequently, the database and the filesystem will be out
 ;; of sync until the next time the database is updated.
 ;;
 ;; The command `locate-with-filter' keeps only lines matching a
diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el
index 9041b9ac0f..8e81f79e42 100644
--- a/lisp/ls-lisp.el
+++ b/lisp/ls-lisp.el
@@ -599,7 +599,7 @@ to a non-nil value."
   "Return t if versioned string S1 should sort before versioned string S2.
 
 Case is significant if `ls-lisp-ignore-case' is nil.
-This is the same as string-lessp (with the exception of case
+This is the same as `string-lessp' (with the exception of case
 insensitivity), but sequences of digits are compared numerically,
 as a whole, in the same manner as the `strverscmp' function available
 in some standard C libraries does."
diff --git a/lisp/macros.el b/lisp/macros.el
index faa1f0bd35..689c4210cd 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -26,7 +26,7 @@
 
 ;; Extension commands for keyboard macros.  These permit you to assign
 ;; a name to the last-defined keyboard macro, expand and insert the
-;; lisp corresponding to a macro, query the user from within a macro,
+;; Lisp corresponding to a macro, query the user from within a macro,
 ;; or apply a macro to each line in the reason.
 
 ;;; Code:
diff --git a/lisp/mail/blessmail.el b/lisp/mail/blessmail.el
index f380f0df29..23fddfd167 100644
--- a/lisp/mail/blessmail.el
+++ b/lisp/mail/blessmail.el
@@ -27,7 +27,7 @@
 ;; which (on systems that need it) is used during installation
 ;; to give appropriate permissions to movemail.
 ;;
-;; It has to be done from lisp in order to be sure of getting the
+;; It has to be done from Lisp in order to be sure of getting the
 ;; correct value of rmail-spool-directory.
 
 ;;; Code:
diff --git a/lisp/mail/feedmail.el b/lisp/mail/feedmail.el
index cec573642e..608062fba4 100644
--- a/lisp/mail/feedmail.el
+++ b/lisp/mail/feedmail.el
@@ -7,7 +7,7 @@
 ;; Author: Bill Carpenter <bill@carpenter.ORG>
 ;; Version: 11
 ;; Keywords: email, queue, mail, sendmail, message, spray, smtp, draft
-;; X-URL: <URL:http://www.carpenter.org/feedmail/feedmail.html>
+;; URL: http://www.carpenter.org/feedmail/feedmail.html
 
 ;;; Commentary:
 
@@ -47,7 +47,7 @@
 ;; A NOTE TO THOSE WHO WOULD CHANGE THIS CODE...  Since it is PD,
 ;; you're within your rights to do whatever you want.  If you do
 ;; publish a new version with your changes in it, please (1) insert
-;; lisp comments describing the changes, (2) insert lisp comments
+;; Lisp comments describing the changes, (2) insert Lisp comments
 ;; that clearly delimit where your changes are, (3) email me a copy
 ;; (I can't always consistently follow the relevant usenet groups),
 ;; and (4) use a version number that is based on the version you're
@@ -128,7 +128,7 @@
 ;;    --- you can generate/modify an X-Mailer: message header
 ;;
 ;; After a long list of options below, you will find the function
-;; feedmail-send-it. Hers's the best way to use the stuff in this
+;; feedmail-send-it.  Hers's the best way to use the stuff in this
 ;; file:
 ;;
 ;; Save this file as feedmail.el somewhere on your elisp loadpath;
@@ -157,7 +157,7 @@
 ;; If you are wondering how to send your messages to some SMTP server
 ;; (which is not really a feedmail-specific issue), you are probably
 ;; looking for smtpmail.el, and it is probably already present in your
-;; emacs installation.  Look at smtpmail.el for how to set that up, and
+;; Emacs installation.  Look at smtpmail.el for how to set that up, and
 ;; then do this to hook it into feedmail:
 ;;
 ;;     (autoload 'feedmail-buffer-to-smtpmail "feedmail" nil t)
@@ -939,7 +939,7 @@ a message you see a bit later.
 There is a separate queue for draft messages, intended to prevent
 you from accidentally sending incomplete messages.  The queues are
 disk-based and intended for later transmission.  The messages are
-queued in their raw state as they appear in the mail-mode buffer and
+queued in their raw state as they appear in the `mail-mode' buffer and
 can be arbitrarily edited later, before sending, by visiting the
 appropriate file in the queue directory (and setting the buffer to
 mail-mode or whatever).  If you visit a file in the queue directory
@@ -1286,7 +1286,7 @@ of casual real use only to the feedmail developer."
   "Duration of pause after feedmail-debug messages.
 After some messages are divulged, it may be helpful to pause before
 something else obliterates them.  This value controls the duration of
-the pause.  If the value is nil or 0, the sit-for is not done, which
+the pause.  If the value is nil or 0, the `sit-for' is not done, which
 has the effect of not pausing at all.  Debug messages can be seen after
 the fact in the messages buffer."
   :version "24.1"
@@ -3149,7 +3149,7 @@ been weeded out."
         (sit-for feedmail-queue-chatty-sit-for))))
 
 (defun feedmail-find-eoh (&optional noerror)
-  "Internal; finds the end of message header fields, returns mark just before 
it."
+  "Internal; find the end of message header fields, return mark just before 
it."
   ;; all this funny business with line endings is to account for CRLF
   ;; weirdness that I don't think I'll ever figure out
   (feedmail-say-debug ">in-> feedmail-find-eoh %s" noerror)
diff --git a/lisp/mail/footnote.el b/lisp/mail/footnote.el
index b765602281..716348a9c1 100644
--- a/lisp/mail/footnote.el
+++ b/lisp/mail/footnote.el
@@ -39,15 +39,15 @@
 ;;     commands.
 ;; + more language styles.
 ;; + The key sequence 'C-c ! a C-y C-c ! b' should auto-fill the
-;;   footnote in adaptive fill mode. This does not seem to be a bug in
+;;   footnote in adaptive fill mode.  This does not seem to be a bug in
 ;;   `adaptive-fill' because it behaves that way on all point movements
 ;; + Handle footmode mode elegantly in all modes, even if that means refuses to
-;;   accept the burden. For example, in a programming language mode, footnotes
+;;   accept the burden.  For example, in a programming language mode, footnotes
 ;;   should be commented.
 ;; + Manually autofilling the a first footnote should not cause it to
 ;;   wrap into the footnote section tag
 ;;   + Current solution adds a second newline after the section tag, so it is
-;;     clearly a separate paragraph. There may be stylistic objections to this.
+;;     clearly a separate paragraph.  There may be stylistic objections to 
this.
 ;; + Footnotes with multiple paragraphs should not have their first
 ;;   line out-dented.
 ;; + Upon leaving footnote area, perform an auto-fill on an entire
@@ -55,7 +55,7 @@
 ;;   + fill-paragraph takes arg REGION, but seemingly only when called
 ;;     interactively.
 ;; + At some point, it became necessary to change `footnote-section-tag-regexp'
-;;   to remove its trailing space. (Adaptive fill side-effect?)
+;;   to remove its trailing space.  (Adaptive fill side-effect?)
 ;; + useful for lazy testing
 ;;   (setq footnote-narrow-to-footnotes-when-editing t)
 ;;   (setq footnote-section-tag "Footnotes: ")
@@ -151,7 +151,7 @@ has no effect on buffers already displaying footnotes."
 (defcustom footnote-align-to-fn-text t
   "How to left-align footnote text.
 If nil, footnote text is to be aligned flush left with left side
-of the footnote number. If non-nil, footnote text is to be aligned
+of the footnote number.  If non-nil, footnote text is to be aligned
 left with the first character of footnote text."
   :type  'boolean)
 
@@ -243,7 +243,7 @@ Wrapping around the alphabet implies successive repetitions 
of letters."
   "List of roman numerals with their values.")
 
 (defconst footnote-roman-upper-regexp (upcase footnote-roman-lower-regexp)
-  "Regexp of roman numerals.  Not complete")
+  "Regexp of roman numerals.  Not complete.")
 
 (defun footnote--roman-upper (n)
   "Generic Roman number footnoting."
@@ -380,8 +380,8 @@ Use Unicode characters for footnoting."
   (concat "[" (apply #'concat footnote-hebrew-symbolic) "]"))
 
 (defun footnote--hebrew-symbolic (n)
-  "Only 22 elements, per the style of eg. 'פירוש שפתי חכמים על רש״י'.
-Proceeds from `י' to `כ', from `צ' to `ק'. After `ת', rolls over to `א'."
+  "Only 22 elements, per the style of e.g. 'פירוש שפתי חכמים על רש״י'.
+Proceeds from `י' to `כ', from `צ' to `ק'.  After `ת', rolls over to `א'."
   (nth (mod (1- n) 22) footnote-hebrew-symbolic))
 
 ;;; list of all footnote styles
@@ -679,7 +679,7 @@ instead, if applicable."
 (defun footnote--get-area-point-max ()
   "Return the end of footnote area.
 This is either `point-max' or the start of a `.signature' string, as
-defined by variable `footnote-signature-separator'. If there is no
+defined by variable `footnote-signature-separator'.  If there is no
 footnote area, returns `point-max'."
   (save-excursion (footnote--goto-char-point-max)))
 
diff --git a/lisp/mail/mailabbrev.el b/lisp/mail/mailabbrev.el
index 5cb4a7469a..62d9b12bb2 100644
--- a/lisp/mail/mailabbrev.el
+++ b/lisp/mail/mailabbrev.el
@@ -76,10 +76,10 @@
 ;; should make sure your version does before including verbose addresses like
 ;; this.  One solution to this, if you are on a system whose /bin/mail doesn't
 ;; work that way, (and you still want to be able to /bin/mail to send mail in
-;; addition to emacs) is to define minimal aliases (without full names) in
+;; addition to Emacs) is to define minimal aliases (without full names) in
 ;; your .mailrc file, and use define-mail-abbrev to redefine them when sending
-;; mail from emacs; this way, mail sent from /bin/mail will work, and mail
-;; sent from emacs will be pretty.
+;; mail from Emacs; this way, mail sent from /bin/mail will work, and mail
+;; sent from Emacs will be pretty.
 ;;
 ;; Aliases in the mailrc file may be nested.  If you define aliases like
 ;;     alias group1 fred ethel
@@ -98,7 +98,7 @@
 ;; normally cannot contain hyphens, but this code works around that for the
 ;; specific case of mail-alias word-abbrevs.
 ;;
-;; To read in the contents of another .mailrc-type file from emacs, use the
+;; To read in the contents of another .mailrc-type file from Emacs, use the
 ;; command Meta-X merge-mail-abbrevs.  The rebuild-mail-abbrevs command is
 ;; similar, but will delete existing aliases first.
 ;;
@@ -363,7 +363,7 @@ double-quotes."
 
 (defun mail-resolve-all-aliases-1 (sym &optional so-far)
   (if (memq sym so-far)
-      (error "mail alias loop detected: %s"
+      (error "Mail alias loop detected: %s"
             (mapconcat #'symbol-name (cons sym so-far) " <- ")))
   (let ((definition (and (boundp sym) (symbol-value sym))))
     (if definition
@@ -388,7 +388,7 @@ double-quotes."
 (defun mail-abbrev-expand-hook ()
   "For use as the fourth arg to `define-abbrev'.
 After expanding a mail-abbrev, if Auto Fill mode is on and we're past the
-fill-column, break the line at the previous comma, and indent the next line
+`fill-column', break the line at the previous comma, and indent the next line
 with a space."
   (when auto-fill-function
     (let (p)
diff --git a/lisp/mail/mailclient.el b/lisp/mail/mailclient.el
index 5c153ce1c1..e6833806d9 100644
--- a/lisp/mail/mailclient.el
+++ b/lisp/mail/mailclient.el
@@ -198,7 +198,7 @@ The mail client is taken to be the handler of mailto URLs."
                   ((string= character-coding "quoted-printable")
                    (mail-unquote-printable-region (point-min) (point-max)
                                                   nil nil t))
-                  (t (error "unsupported Content-Transfer-Encoding: %s"
+                   (t (error "Unsupported Content-Transfer-Encoding: %s"
                             character-coding)))
                  (decode-coding-region (point-min) (point-max) coding-system))
                (mailclient-encode-string-as-url
diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el
index 6d83414058..a36ccd98dc 100644
--- a/lisp/mail/mspools.el
+++ b/lisp/mail/mspools.el
@@ -29,7 +29,7 @@
 ;; to be read in them.  It assumes that new mail for the file `folder'
 ;; is written by the filter to a file called `folder.spool'.  (If the
 ;; file writes directly to `folder' you may lose mail if new mail
-;; arrives whilst you are reading the folder in emacs, hence the use
+;; arrives whilst you are reading the folder in Emacs, hence the use
 ;; of a spool file.)  For example, the following procmail recipe puts
 ;; any mail with `emacs' in the subject line into the spool file
 ;; `emacs.spool', ready to go into the folder `emacs'.
@@ -342,7 +342,7 @@ This is useful if `mspools-update' is nil."
   (kill-buffer mspools-buffer))
 
 (define-derived-mode mspools-mode special-mode "MSpools"
-  "Major mode for output from mspools-show.
+  "Major mode for output from `mspools-show'.
 \\<mspools-mode-map>Move point to one of the items in this buffer, then use
 \\[mspools-visit-spool] to go to the spool that the current line refers to.
 \\[revert-buffer] to regenerate the list of spools.
diff --git a/lisp/mail/reporter.el b/lisp/mail/reporter.el
index 4b70582a26..2983a11d74 100644
--- a/lisp/mail/reporter.el
+++ b/lisp/mail/reporter.el
@@ -36,7 +36,7 @@
 ;; reporter.el was written primarily for Emacs Lisp package authors so
 ;; that their users can more easily report bugs.  When invoked,
 ;; `reporter-submit-bug-report' will set up an outgoing mail buffer
-;; with the appropriate bug report address, including a lisp
+;; with the appropriate bug report address, including a Lisp
 ;; expression the maintainer of the package can evaluate to completely
 ;; reproduce the environment in which the bug was observed (e.g. by
 ;; using `eval-last-sexp').  This package proved especially useful
@@ -158,7 +158,7 @@ composed.")
       (error indent-enclosing-p))))
 
 (defun reporter-lisp-indent (_indent-point state)
-  "A better lisp indentation style for bug reporting."
+  "A better Lisp indentation style for bug reporting."
   (save-excursion
     (goto-char (1+ (nth 1 state)))
     (current-column)))
diff --git a/lisp/mail/rmail-spam-filter.el b/lisp/mail/rmail-spam-filter.el
index fbac9e0cc0..75a6c72369 100644
--- a/lisp/mail/rmail-spam-filter.el
+++ b/lisp/mail/rmail-spam-filter.el
@@ -72,6 +72,8 @@
 ;;; rmail-spam-filter such that the spam is rejected by
 ;;; rmail-spam-filter itself.
 
+;;; Code:
+
 (require 'rmail)
 (require 'rmailsum)
 
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 8a38337773..9fbc9ba180 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -207,8 +207,7 @@ or `-k' to enable Kerberos authentication."
 
 (defvar rmail-remote-password-error "invalid usercode or password\\|
 unknown user name or bad password\\|Authentication 
failed\\|MU_ERR_AUTH_FAILURE"
-  "Regular expression matching incorrect-password POP or IMAP server error
-messages.
+  "Regexp matching incorrect-password POP or IMAP server error messages.
 If you get an incorrect-password error that this expression does not match,
 please report it with \\[report-emacs-bug].")
 
@@ -4483,7 +4482,7 @@ TEXT and INDENT are not used."
 
 (defun rmail-get-remote-password (imap user host)
   "Get the password for retrieving mail from a POP or IMAP server.
-If none has been set, the password is found via auth-source. If
+If none has been set, the password is found via auth-source.  If
 you use ~/.authinfo as your auth-source backend, then put
 something like the following in that file:
 
diff --git a/lisp/mail/rmailout.el b/lisp/mail/rmailout.el
index 4c23686909..91f86a234d 100644
--- a/lisp/mail/rmailout.el
+++ b/lisp/mail/rmailout.el
@@ -434,7 +434,7 @@ AS-SEEN is non-nil if we are copying the message \"as 
seen\"."
 
 (defun rmail-output-to-rmail-buffer (tembuf msg)
   "Copy message in TEMBUF into the current Rmail buffer.
-Do what is necessary to make Rmail know about the new message. then
+Do what is necessary to make Rmail know about the new message, then
 display message number MSG."
   (save-excursion
     (rmail-swap-buffers-maybe)
diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el
index d545b0c3f1..f393ac773f 100644
--- a/lisp/mail/supercite.el
+++ b/lisp/mail/supercite.el
@@ -1299,7 +1299,7 @@ use it instead of `sc-citation-root-regexp'."
 (defvar sc-fill-begin 1
   "Buffer position to begin filling.")
 (defvar sc-fill-line-prefix ""
-  "Fill prefix of previous line")
+  "Fill prefix of previous line.")
 
 ;; filling
 (defun sc-fill-if-different (&optional prefix)
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 8def1575b2..d863f34df1 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -2772,7 +2772,7 @@ This is the keyboard interface to \\[mouse-buffer-menu]."
     km))
 
 (defun menu-bar-define-mouse-key (map key def)
-  "Like `define-key', but adds all possible prefixes for the mouse."
+  "Like `define-key', but add all possible prefixes for the mouse."
   (define-key map (vector key) def)
   (mapc (lambda (prefix) (define-key map (vector prefix key) def))
         ;; This list only needs to contain special window areas that
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
index 375072b9d8..9cbc8cfb73 100644
--- a/lisp/mh-e/mh-e.el
+++ b/lisp/mh-e/mh-e.el
@@ -26,11 +26,8 @@
 
 ;; MH-E is an Emacs interface to the MH mail system.
 
-;; MH-E is supported in GNU Emacs 21 and higher, as well as XEmacs 21
-;; (except for versions 21.5.9-21.5.16). It is compatible with MH
-;; versions 6.8.4 and higher, all versions of nmh, and GNU mailutils
-;; 1.0 and higher. Gnus is also required; version 5.10 or higher is
-;; recommended.
+;; MH-E is compatible with MH versions 6.8.4 and higher, all versions
+;; of nmh, and GNU mailutils 1.0 and higher.
 
 ;; MH (Message Handler) is a powerful mail reader. See
 ;; https://rand-mh.sourceforge.io/.
@@ -49,12 +46,6 @@
 ;;   (global-set-key "\C-xm" 'mh-smail)
 ;;   (global-set-key "\C-x4m" 'mh-smail-other-window)
 
-;; If Emacs can't find mh-rmail or mh-smail, add the following to ~/.emacs:
-;;   (require 'mh-autoloads)
-
-;; If you want to customize MH-E before explicitly loading it, add this:
-;;   (require 'mh-cus-load)
-
 ;; Mailing Lists:
 ;;   mh-e-users@lists.sourceforge.net
 ;;   mh-e-announce@lists.sourceforge.net
@@ -794,14 +785,16 @@ is described by the variable `mh-variants'."
 (defun mh-variant-gnu-mh-info (dir)
   "Return info for GNU mailutils MH variant in DIR.
 This assumes that a temporary buffer is set up."
-  ;; 'mhparam -version' output:
+  ;; Sample '-version' outputs:
   ;; mhparam (GNU mailutils 0.3.2)
-  (let ((mhparam (expand-file-name "mhparam" dir)))
-    (when (mh-file-command-p mhparam)
+  ;; install-mh (GNU Mailutils 2.2)
+  ;; install-mh (GNU Mailutils 3.7)
+  (let ((install-mh (expand-file-name "install-mh" dir)))
+    (when (mh-file-command-p install-mh)
       (erase-buffer)
-      (call-process mhparam nil '(t nil) nil "-version")
+      (call-process install-mh nil '(t nil) nil "-version")
       (goto-char (point-min))
-      (when (search-forward-regexp "mhparam (\\(GNU [Mm]ailutils \\S +\\))"
+      (when (search-forward-regexp "install-mh (\\(GNU [Mm]ailutils \\S +\\))"
                                    nil t)
         (let ((version (match-string 1))
               (mh-progs dir))
@@ -815,14 +808,15 @@ This assumes that a temporary buffer is set up."
 
 (defun mh-variant-nmh-info (dir)
   "Return info for nmh variant in DIR assuming a temporary buffer is set up."
-  ;; `mhparam -version' outputs:
+  ;; Sample '-version' outputs:
   ;; mhparam -- nmh-1.1-RC1 [compiled on chaak at Fri Jun 20 11:03:28 PDT 2003]
-  (let ((mhparam (expand-file-name "mhparam" dir)))
-    (when (mh-file-command-p mhparam)
+  ;; install-mh -- nmh-1.7.1 built October 26, 2019 on build-server-000
+  (let ((install-mh (expand-file-name "install-mh" dir)))
+    (when (mh-file-command-p install-mh)
       (erase-buffer)
-      (call-process mhparam nil '(t nil) nil "-version")
+      (call-process install-mh nil '(t nil) nil "-version")
       (goto-char (point-min))
-      (when (search-forward-regexp "mhparam -- nmh-\\(\\S +\\)" nil t)
+      (when (search-forward-regexp "install-mh -- nmh-\\(\\S +\\)" nil t)
         (let ((version (format "nmh %s" (match-string 1)))
               (mh-progs dir))
           `(,version
diff --git a/lisp/midnight.el b/lisp/midnight.el
index 8b798926c1..b3adbf0017 100644
--- a/lisp/midnight.el
+++ b/lisp/midnight.el
@@ -26,7 +26,7 @@
 ;; To use the file, put (require 'midnight) into your .emacs.  Then, at
 ;; midnight, Emacs will run the normal hook `midnight-hook'.  You can
 ;; put whatever you like there, say, `calendar'; by default there is
-;; only one function there - `clean-buffer-list'. It will kill the
+;; only one function there - `clean-buffer-list'.  It will kill the
 ;; buffers matching `clean-buffer-list-kill-buffer-names' and
 ;; `clean-buffer-list-kill-regexps' and the buffers which where last
 ;; displayed more than `clean-buffer-list-delay-general' days ago,
diff --git a/lisp/minibuf-eldef.el b/lisp/minibuf-eldef.el
index 30273fab1b..f67ec353c8 100644
--- a/lisp/minibuf-eldef.el
+++ b/lisp/minibuf-eldef.el
@@ -160,7 +160,7 @@ The prompt and initial input should already have been 
inserted."
 ;; post-command-hook to swap prompts when necessary
 (defun minibuf-eldef-update-minibuffer ()
   "Update a minibuffer's prompt to include a default only when applicable.
-This is intended to be used as a minibuffer post-command-hook for
+This is intended to be used as a minibuffer `post-command-hook' for
 `minibuffer-electric-default-mode'; the minibuffer should have already
 been set up by `minibuf-eldef-setup-minibuffer'."
   (unless (eq minibuf-eldef-showing-default-in-prompt
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 68e4fa17fc..9668e7c732 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -1807,7 +1807,9 @@ Return nil if there is no valid completion, else t."
     (_     t)))
 
 (defface completions-annotations '((t :inherit (italic shadow)))
-  "Face to use for annotations in the *Completions* buffer.")
+  "Face to use for annotations in the *Completions* buffer.
+This face is only used if the strings used for completions
+doesn't already specify a face.")
 
 (defcustom completions-format 'horizontal
   "Define the appearance and sorting of completions.
@@ -2683,12 +2685,12 @@ Such values are treated as in `read-from-minibuffer', 
but are normally
 not useful in this function.)
 
 Third arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
-the current input method and the setting of`enable-multibyte-characters'.
+the current input method and the setting of `enable-multibyte-characters'.
 
 If `inhibit-interaction' is non-nil, this function will signal an
 `inhibited-interaction' error."
   (read-from-minibuffer prompt initial minibuffer-local-ns-map
-                       nil minibuffer-history nil inherit-input-method))
+                       nil 'minibuffer-history nil inherit-input-method))
 
 ;;; Major modes for the minibuffer
 
diff --git a/lisp/mouse-copy.el b/lisp/mouse-copy.el
index 14fbb51b27..38c85064f3 100644
--- a/lisp/mouse-copy.el
+++ b/lisp/mouse-copy.el
@@ -75,7 +75,7 @@
 ;; <http://www.zip.com.au/~cs/app/wily/auug.html>.  I'd like
 ;; to incorporate some of these ideas into mouse-copy.  The only
 ;; lose is that this is not the current Emacs Way Of Doing Things, so
-;; there would be a learning curve for existing emacs users.
+;; there would be a learning curve for existing Emacs users.
 ;;
 ;;
 ;; Thanks:
@@ -110,7 +110,7 @@ The problem occurs under XFree86-3.1.1 (X11R6pl11) but not 
under X11R5,
 and under post-19.29 but not early versions of Emacs.
 
 19.29 and 19.30 seems to drop mouse drag events
-sometimes. (Reproducible under XFree86-3.1.1 (X11R6pl11) and
+sometimes.  (Reproducible under XFree86-3.1.1 (X11R6pl11) and
 XFree86-3.1.2 under Linux 1.2.x.  Doesn't occur under X11R5 and SunOS
 4.1.1.)
 
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 8c6fb2c71b..f33a73f03f 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -281,11 +281,12 @@ not it is actually displayed."
 
 (defcustom context-menu-functions '(context-menu-undo
                                     context-menu-region
+                                    context-menu-middle-separator
                                     context-menu-local
                                     context-menu-minor)
   "List of functions that produce the contents of the context menu.
-Each function receives the menu as its argument and should return
-the same menu with changes such as added new menu items."
+Each function receives the menu and the mouse click event as its arguments
+and should return the same menu with changes such as added new menu items."
   :type '(repeat
           (choice (function-item context-menu-undo)
                   (function-item context-menu-region)
@@ -304,24 +305,47 @@ the same menu with changes such as added new menu items."
   :type '(choice (const nil) function)
   :version "28.1")
 
-(defun context-menu-map ()
-  "Return composite menu map."
-  (let ((menu (make-sparse-keymap (propertize "Context Menu" 'hide t))))
-    (let ((fun (mouse-posn-property (event-start last-input-event)
-                                    'context-menu-function)))
-      (if (functionp fun)
-          (setq menu (funcall fun menu))
-        (run-hook-wrapped 'context-menu-functions
-                          (lambda (fun)
-                            (setq menu (funcall fun menu))
-                            nil))))
-    ;; TODO: remove double separators
+(defun context-menu-map (&optional click)
+  "Return menu map constructed for context near mouse CLICK.
+The menu is populated by calling functions from `context-menu-functions'.
+Each function receives the menu and the mouse click event
+and returns the same menu after adding own menu items to the composite menu.
+When there is a text property `context-menu-function' at CLICK,
+it overrides all functions from `context-menu-functions'.
+At the end, it's possible to modify the final menu by specifying
+the function `context-menu-filter-function'."
+  (let* ((menu (make-sparse-keymap (propertize "Context Menu" 'hide t)))
+         (click (or click last-input-event))
+         (fun (mouse-posn-property (event-start click)
+                                   'context-menu-function)))
+
+    (if (functionp fun)
+        (setq menu (funcall fun menu click))
+      (run-hook-wrapped 'context-menu-functions
+                        (lambda (fun)
+                          (setq menu (funcall fun menu click))
+                          nil)))
+
+    ;; Remove duplicate separators
+    (let ((l menu))
+      (while l
+        (when (and (equal (cdr-safe (car l)) menu-bar-separator)
+                   (equal (cdr-safe (cadr l)) menu-bar-separator))
+          (setcdr l (cddr l)))
+        (setq l (cdr l))))
+
     (when (functionp context-menu-filter-function)
-      (setq menu (funcall context-menu-filter-function menu)))
+      (setq menu (funcall context-menu-filter-function menu click)))
     menu))
 
-(defun context-menu-toolbar (menu)
-  "Tool bar menu items."
+(defun context-menu-middle-separator (menu _click)
+  "Add separator to the middle of the context menu.
+Some context functions add menu items below the separator."
+  (define-key-after menu [middle-separator] menu-bar-separator)
+  menu)
+
+(defun context-menu-toolbar (menu _click)
+  "Populate MENU with submenus from the tool bar."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-toolbar] menu-bar-separator)
   (map-keymap (lambda (key binding)
@@ -331,8 +355,8 @@ the same menu with changes such as added new menu items."
               (lookup-key global-map [tool-bar]))
   menu)
 
-(defun context-menu-global (menu)
-  "Global submenus."
+(defun context-menu-global (menu _click)
+  "Populate MENU with submenus from the global menu."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-global] menu-bar-separator)
   (map-keymap (lambda (key binding)
@@ -342,8 +366,8 @@ the same menu with changes such as added new menu items."
               (lookup-key global-map [menu-bar]))
   menu)
 
-(defun context-menu-local (menu)
-  "Major mode submenus."
+(defun context-menu-local (menu _click)
+  "Populate MENU with submenus provided by major mode."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-local] menu-bar-separator)
   (let ((keymap (local-key-binding [menu-bar])))
@@ -355,8 +379,8 @@ the same menu with changes such as added new menu items."
                   keymap)))
   menu)
 
-(defun context-menu-minor (menu)
-  "Minor modes submenus."
+(defun context-menu-minor (menu _click)
+  "Populate MENU with submenus provided by minor modes."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-minor] menu-bar-separator)
   (dolist (mode (reverse (minor-mode-key-binding [menu-bar])))
@@ -368,8 +392,8 @@ the same menu with changes such as added new menu items."
                   (cdr mode))))
   menu)
 
-(defun context-menu-buffers (menu)
-  "Submenus with buffers."
+(defun context-menu-buffers (menu _click)
+  "Populate MENU with the buffer submenus to buffer switching."
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
   (define-key-after menu [separator-buffers] menu-bar-separator)
   (map-keymap (lambda (key binding)
@@ -379,95 +403,90 @@ the same menu with changes such as added new menu items."
               (mouse-buffer-menu-keymap))
   menu)
 
-(defun context-menu-vc (menu)
-  "Version Control menu."
+(defun context-menu-vc (menu _click)
+  "Populate MENU with Version Control commands."
   (define-key-after menu [separator-vc] menu-bar-separator)
   (define-key-after menu [vc-menu] vc-menu-entry)
   menu)
 
-(defun context-menu-undo (menu)
-  "Undo menu."
-  (when (cddr menu)
-    (define-key-after menu [separator-undo] menu-bar-separator))
-  (define-key-after menu [undo]
-    '(menu-item "Undo" undo
-                :visible (and (not buffer-read-only)
-                              (not (eq t buffer-undo-list))
-                              (if (eq last-command 'undo)
-                                  (listp pending-undo-list)
-                                (consp buffer-undo-list)))
-                :help "Undo last edits"))
-  (define-key-after menu [undo-redo]
-    '(menu-item "Redo" undo-redo
-                :visible (and (not buffer-read-only)
-                              (undo--last-change-was-undo-p buffer-undo-list))
-                :help "Redo last undone edits"))
+(defun context-menu-undo (menu _click)
+  "Populate MENU with undo commands."
+  (define-key-after menu [separator-undo] menu-bar-separator)
+  (when (and (not buffer-read-only)
+             (not (eq t buffer-undo-list))
+             (if (eq last-command 'undo)
+                 (listp pending-undo-list)
+               (consp buffer-undo-list)))
+    (define-key-after menu [undo]
+      '(menu-item "Undo" undo
+                  :help "Undo last edits")))
+  (when (and (not buffer-read-only)
+             (undo--last-change-was-undo-p buffer-undo-list))
+    (define-key-after menu [undo-redo]
+      '(menu-item "Redo" undo-redo
+                  :help "Redo last undone edits")))
   menu)
 
-(defun context-menu-region (menu)
-  "Region commands menu."
-  (when (cddr menu)
-    (define-key-after menu [separator-region] menu-bar-separator))
-  (define-key-after menu [cut]
-    '(menu-item "Cut" kill-region
-                :visible (and mark-active (not buffer-read-only))
-                :help
-                "Cut (kill) text in region between mark and current position"))
-  (define-key-after menu [copy]
-    ;; ns-win.el said: Substitute a Copy function that works better
-    ;; under X (for GNUstep).
-    `(menu-item "Copy" ,(if (featurep 'ns)
-                            'ns-copy-including-secondary
-                          'kill-ring-save)
-                :visible mark-active
-                :help "Copy text in region between mark and current position"
-                :keys ,(if (featurep 'ns)
-                           "\\[ns-copy-including-secondary]"
-                         "\\[kill-ring-save]")))
-  (define-key-after menu [paste]
-    `(menu-item "Paste" mouse-yank-at-click
-                :visible (funcall
-                          ',(lambda ()
-                              (and (or
-                                    (gui-backend-selection-exists-p 'CLIPBOARD)
-                                    (if (featurep 'ns) ; like paste-from-menu
-                                        (cdr yank-menu)
-                                      kill-ring))
-                                   (not buffer-read-only))))
-                :help "Paste (yank) text most recently cut/copied"))
-  (define-key-after menu (if (featurep 'ns) [select-paste]
-                           [paste-from-menu])
-    ;; ns-win.el said: Change text to be more consistent with
-    ;; surrounding menu items `paste', etc."
-    `(menu-item ,(if (featurep 'ns) "Select and Paste" "Paste from Kill Menu")
-                yank-menu
-                :visible (and (cdr yank-menu) (not buffer-read-only))
-                :help "Choose a string from the kill ring and paste it"))
-  (define-key-after menu [clear]
-    '(menu-item "Clear" delete-active-region
-                :visible (and mark-active
-                              (not buffer-read-only))
-                :help
-                "Delete the text in region between mark and current position"))
+(defun context-menu-region (menu _click)
+  "Populate MENU with region commands."
+  (define-key-after menu [separator-region] menu-bar-separator)
+  (when (and mark-active (not buffer-read-only))
+    (define-key-after menu [cut]
+      '(menu-item "Cut" kill-region
+                  :help
+                  "Cut (kill) text in region between mark and current 
position")))
+  (when mark-active
+    (define-key-after menu [copy]
+      ;; ns-win.el said: Substitute a Copy function that works better
+      ;; under X (for GNUstep).
+      `(menu-item "Copy" ,(if (featurep 'ns)
+                              'ns-copy-including-secondary
+                            'kill-ring-save)
+                  :help "Copy text in region between mark and current position"
+                  :keys ,(if (featurep 'ns)
+                             "\\[ns-copy-including-secondary]"
+                           "\\[kill-ring-save]"))))
+  (when (and (or (gui-backend-selection-exists-p 'CLIPBOARD)
+                 (if (featurep 'ns) ; like paste-from-menu
+                     (cdr yank-menu)
+                   kill-ring))
+             (not buffer-read-only))
+    (define-key-after menu [paste]
+      `(menu-item "Paste" mouse-yank-at-click
+                  :help "Paste (yank) text most recently cut/copied")))
+  (when (and (cdr yank-menu) (not buffer-read-only))
+    (define-key-after menu (if (featurep 'ns) [select-paste]
+                             [paste-from-menu])
+      ;; ns-win.el said: Change text to be more consistent with
+      ;; surrounding menu items `paste', etc."
+      `(menu-item ,(if (featurep 'ns) "Select and Paste" "Paste from Kill 
Menu")
+                  yank-menu
+                  :help "Choose a string from the kill ring and paste it")))
+  (when (and mark-active (not buffer-read-only))
+    (define-key-after menu [clear]
+      '(menu-item "Clear" delete-active-region
+                  :help
+                  "Delete text in region between mark and current position")))
   (define-key-after menu [mark-whole-buffer]
     '(menu-item "Select All" mark-whole-buffer
                 :help "Mark the whole buffer for a subsequent cut/copy"))
   menu)
 
-(defun context-menu-ffap (menu)
-  "File at point menu."
+(defun context-menu-ffap (menu click)
+  "Populate MENU with commands that find file at point."
   (save-excursion
-    (mouse-set-point last-input-event)
+    (mouse-set-point click)
     (when (ffap-guess-file-name-at-point)
       (define-key menu [ffap-separator] menu-bar-separator)
       (define-key menu [ffap-at-mouse]
         '(menu-item "Find File or URL" ffap-at-mouse
-                    :help "Find file or URL guessed from text around mouse 
click"))))
+                    :help "Find file or URL from text around mouse click"))))
   menu)
 
 (defvar context-menu-entry
   `(menu-item ,(purecopy "Context Menu") ignore
-              :filter (lambda (_) (context-menu-map))))
+              :filter (lambda (_) (context-menu-map)))
+  "Menu item that creates the context menu and can be bound to a mouse key.")
 
 (defvar context-menu-mode-map
   (let ((map (make-sparse-keymap)))
@@ -1580,8 +1599,15 @@ The region will be defined with mark and point."
      t (lambda ()
          (setq track-mouse old-track-mouse)
          (setq auto-hscroll-mode auto-hscroll-mode-saved)
-         (deactivate-mark)
-         (pop-mark)))))
+         ;; Don't deactivate the mark when the context menu was invoked
+         ;; by down-mouse-3 immediately after down-mouse-1 and without
+         ;; releasing the mouse button with mouse-1. This allows to use
+         ;; region-related context menu to operate on the selected region.
+         (unless (and context-menu-mode
+                      (eq (car-safe (aref (this-command-keys-vector) 0))
+                          'down-mouse-3))
+           (deactivate-mark)
+           (pop-mark))))))
 
 (defun mouse--drag-set-mark-and-point (start click click-count)
   (let* ((range (mouse-start-end start click click-count))
diff --git a/lisp/mpc.el b/lisp/mpc.el
index 029f0ca8f4..1f4cb4fe9c 100644
--- a/lisp/mpc.el
+++ b/lisp/mpc.el
@@ -197,10 +197,10 @@ numerically rather than lexicographically."
 (defcustom mpc-host
   (concat (or (getenv "MPD_HOST") "localhost")
           (if (getenv "MPD_PORT") (concat ":" (getenv "MPD_PORT"))))
-  "Host (and port) where the Music Player Daemon is running.  The
-format is \"HOST\", \"HOST:PORT\", \"PASSWORD@HOST\" or
-\"PASSWORD@HOST:PORT\" where PASSWORD defaults to no password, PORT
-defaults to 6600 and HOST defaults to localhost."
+  "Host (and port) where the Music Player Daemon is running.
+The format is \"HOST\", \"HOST:PORT\", \"PASSWORD@HOST\" or
+\"PASSWORD@HOST:PORT\" where PASSWORD defaults to no password,
+PORT defaults to 6600 and HOST defaults to localhost."
   :type 'string)
 
 (defvar mpc-proc nil)
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index c51766d168..25ae20702a 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -230,7 +230,7 @@
 ;;
 ;; 1. For dired to work on a host which marks symlinks with a trailing @ in
 ;;    an ls -alF listing, you need to (setq dired-ls-F-marks-symlinks t).
-;;    Most UNIX systems do not do this, but ULTRIX does. If you think that
+;;    Most UNIX systems do not do this, but ULTRIX does.  If you think that
 ;;    there is a chance you might connect to an ULTRIX machine (such as
 ;;    prep.ai.mit.edu), then set this variable accordingly.  This will have
 ;;    the side effect that dired will have problems with symlinks whose names
@@ -241,34 +241,34 @@
 ;;    frequently, and ange-ftp seems to be unable to guess its host-type,
 ;;    then setting the appropriate host-type regexp
 ;;    (ange-ftp-vms-host-regexp, ange-ftp-mts-host-regexp, or
-;;    ange-ftp-cms-host-regexp) accordingly should help. Also, please report
+;;    ange-ftp-cms-host-regexp) accordingly should help.  Also, please report
 ;;    ange-ftp's inability to recognize the host-type as a bug.
 ;;
 ;; 3. For slow connections, you might get "listing unreadable" error
 ;;    messages, or get an empty buffer for a file that you know has something
-;;    in it. The solution is to increase the value of ange-ftp-retry-time.
+;;    in it.  The solution is to increase the value of ange-ftp-retry-time.
 ;;    Its default value is 5 which is plenty for reasonable connections.
 ;;    However, for some transatlantic connections I set this to 20.
 ;;
-;; 4. Beware of compressing files on non-UNIX hosts. Ange-ftp will do it by
+;; 4. Beware of compressing files on non-UNIX hosts.  Ange-ftp will do it by
 ;;    copying the file to the local machine, compressing it there, and then
-;;    sending it back. Binary file transfers between machines of different
-;;    architectures can be a risky business. Test things out first on some
-;;    test files. See "Bugs" below. Also, note that ange-ftp copies files by
-;;    moving them through the local machine. Again, be careful when doing
+;;    sending it back.  Binary file transfers between machines of different
+;;    architectures can be a risky business.  Test things out first on some
+;;    test files.  See "Bugs" below.  Also, note that ange-ftp copies files by
+;;    moving them through the local machine.  Again, be careful when doing
 ;;    this with binary files on non-Unix machines.
 ;;
 ;; 5. Beware that dired over ftp will use your setting of dired-no-confirm
 ;;    (list of dired commands for which confirmation is not asked).  You
 ;;    might want to reconsider your setting of this variable, because you
 ;;    might want confirmation for more commands on remote direds than on
-;;    local direds. For example, I strongly recommend that you not include
-;;    compress and uncompress in this list. If there is enough demand it
+;;    local direds.  For example, I strongly recommend that you not include
+;;    compress and uncompress in this list.  If there is enough demand it
 ;;    might be a good idea to have an alist ange-ftp-dired-no-confirm of
 ;;    pairs ( TYPE . LIST ), where TYPE is an operating system type and LIST
 ;;    is a list of commands for which confirmation would be suppressed.  Then
 ;;    remote dired listings would take their (buffer-local) value of
-;;    dired-no-confirm from this alist. Who votes for this?
+;;    dired-no-confirm from this alist.  Who votes for this?
 
 ;; ---------------------------------------------------------------------
 ;; Non-UNIX support:
@@ -277,7 +277,7 @@
 ;; VMS support:
 ;;
 ;; Ange-ftp has full support for VMS hosts.  It should be able to
-;; automatically recognize any VMS machine. However, if it fails to do
+;; automatically recognize any VMS machine.  However, if it fails to do
 ;; this, you can use the command ange-ftp-add-vms-host.  Also, you can
 ;; set the variable ange-ftp-vms-host-regexp in your init file.  We
 ;; would be grateful if you would report any failures to automatically
@@ -308,46 +308,46 @@
 ;;    Therefore, to access a VMS file, you must enter the filename with upper
 ;;    case letters.
 ;; 2. To access the latest version of file under VMS, you use the filename
-;;    without the ";" and version number. You should always edit the latest
-;;    version of a file. If you want to edit an earlier version, copy it to a
-;;    new file first. This has nothing to do with ange-ftp, but is simply
-;;    good VMS operating practice. Therefore, to edit FILE.TXT;3 (say 3 is
-;;    latest version), do C-x C-f /ymir.claremont.edu:FILE.TXT. If you
+;;    without the ";" and version number.  You should always edit the latest
+;;    version of a file.  If you want to edit an earlier version, copy it to a
+;;    new file first.  This has nothing to do with ange-ftp, but is simply
+;;    good VMS operating practice.  Therefore, to edit FILE.TXT;3 (say 3 is
+;;    latest version), do C-x C-f /ymir.claremont.edu:FILE.TXT.  If you
 ;;    inadvertently do C-x C-f /ymir.claremont.edu:FILE.TXT;3, you will find
 ;;    that VMS will not allow you to save the file because it will refuse to
 ;;    overwrite FILE.TXT;3, but instead will want to create FILE.TXT;4, and
-;;    attach the buffer to this file. To get out of this situation, M-x
+;;    attach the buffer to this file.  To get out of this situation, M-x
 ;;    write-file /ymir.claremont.edu:FILE.TXT will attach the buffer to
-;;    latest version of the file. For this reason, in dired "f"
+;;    latest version of the file.  For this reason, in dired "f"
 ;;    (dired-find-file), always loads the file sans version, whereas "v",
-;;    (dired-view-file), always loads the explicit version number. The
+;;    (dired-view-file), always loads the explicit version number.  The
 ;;    reasoning being that it reasonable to view old versions of a file, but
 ;;    not to edit them.
 ;; 3. EMACS has a feature in which it does environment variable substitution
-;;    in filenames. Therefore, to enter a $ in a filename, you must quote it
+;;    in filenames.  Therefore, to enter a $ in a filename, you must quote it
 ;;    by typing $$.
 
 ;; MTS support:
 ;;
 ;; Ange-ftp has full support for hosts running
 ;; the Michigan terminal system.  It should be able to automatically
-;; recognize any MTS machine. However, if it fails to do this, you can use
+;; recognize any MTS machine.  However, if it fails to do this, you can use
 ;; the command ange-ftp-add-mts-host.  As well, you can set the variable
-;; ange-ftp-mts-host-regexp in your init file. We would be grateful if you
+;; ange-ftp-mts-host-regexp in your init file.  We would be grateful if you
 ;; would report any failures to automatically recognize a MTS host as a bug.
 ;;
 ;; Filename syntax:
 ;;
-;; MTS filenames are entered in a UNIX-y way. For example, if your account
+;; MTS filenames are entered in a UNIX-y way.  For example, if your account
 ;; was YYYY, the file FILE in the account XXXX: on mtsg.ubc.ca would be
 ;; entered as
 ;;   /YYYY@mtsg.ubc.ca:/XXXX:/FILE
-;; In other words, MTS accounts are treated as UNIX directories. Of course,
+;; In other words, MTS accounts are treated as UNIX directories.  Of course,
 ;; to access a file in another account, you must have access permission for
 ;; it.  If FILE were in your own account, then you could enter it in a
 ;; relative name fashion as
 ;;   /YYYY@mtsg.ubc.ca:FILE
-;; MTS filenames can be up to 12 characters. Like UNIX, the structure of the
+;; MTS filenames can be up to 12 characters.  Like UNIX, the structure of the
 ;; filename does not contain a TYPE (i.e. it can have as many "."'s as you
 ;; like.) MTS filenames are always in upper case, and hence be sure to enter
 ;; them as such! MTS is not case sensitive, but an EMACS running under UNIX
@@ -359,37 +359,37 @@
 ;; CMS.  It should be able to automatically recognize any CMS machine.
 ;; However, if it fails to do this, you can use the command
 ;; ange-ftp-add-cms-host.  As well, you can set the variable
-;; ange-ftp-cms-host-regexp in your init file. We would be grateful if you
+;; ange-ftp-cms-host-regexp in your init file.  We would be grateful if you
 ;; would report any failures to automatically recognize a CMS host as a bug.
 ;;
 ;; Filename syntax:
 ;;
-;; CMS filenames are entered in a UNIX-y way. In other words, minidisks are
-;; treated as UNIX directories. For example to access the file READ.ME in
+;; CMS filenames are entered in a UNIX-y way.  In other words, minidisks are
+;; treated as UNIX directories.  For example to access the file READ.ME in
 ;; minidisk *.311 on cuvmb.cc.columbia.edu, you would enter
 ;;   /anonymous@cuvmb.cc.columbia.edu:/*.311/READ.ME
 ;; If *.301 is the default minidisk for this account, you could access
 ;; FOO.BAR on this minidisk as
 ;;   /anonymous@cuvmb.cc.columbia.edu:FOO.BAR
 ;; CMS filenames are of the form FILE.TYPE, where both FILE and TYPE can be
-;; up to 8 characters. Again, beware that CMS filenames are always upper
+;; up to 8 characters.  Again, beware that CMS filenames are always upper
 ;; case, and hence must be entered as such.
 ;;
 ;; Tips:
 ;; 1. CMS machines, with the exception of anonymous accounts, nearly always
-;;    need an account password. To have ange-ftp send an account password,
+;;    need an account password.  To have ange-ftp send an account password,
 ;;    you can either include it in your .netrc file, or use
 ;;    ange-ftp-set-account.
-;; 2. Ange-ftp cannot send "write passwords" for a minidisk. Hopefully, we
+;; 2. Ange-ftp cannot send "write passwords" for a minidisk.  Hopefully, we
 ;;    can fix this.
 ;;
 ;; BS2000 support:
 ;;
 ;; Ange-ftp has full support for BS2000 hosts.  It should be able to
-;; automatically recognize any BS2000 machine. However, if it fails to
+;; automatically recognize any BS2000 machine.  However, if it fails to
 ;; do this, you can use the command ange-ftp-add-bs2000-host.  As well,
 ;; you can set the variable ange-ftp-bs2000-host-regexp in your .emacs
-;; file. We would be grateful if you would report any failures to auto-
+;; file.  We would be grateful if you would report any failures to auto-
 ;; matically recognize a BS2000 host as a bug.
 ;;
 ;; If you want to access the POSIX subsystem on BS2000 you MUST use
@@ -436,10 +436,10 @@
 ;;    Therefore, to access a BS2000 file, you must enter the filename with
 ;;    upper case letters.
 ;; 2. EMACS has a feature in which it does environment variable substitution
-;;    in filenames. Therefore, to enter a $ in a filename, you must quote it
+;;    in filenames.  Therefore, to enter a $ in a filename, you must quote it
 ;;    by typing $$.
 ;; 3. BS2000 machines, with the exception of anonymous accounts, nearly
-;;    always need an account password. To have ange-ftp send an account
+;;    always need an account password.  To have ange-ftp send an account
 ;;    password, you can either include it in your .netrc file, or use
 ;;    ange-ftp-set-account.
 ;;
@@ -457,15 +457,15 @@
 ;;
 ;; 2. Some combinations of FTP clients and servers break and get out of sync
 ;;    when asked to list a non-existent directory.  Some of the ai.mit.edu
-;;    machines cause this problem for some FTP clients. Using
+;;    machines cause this problem for some FTP clients.  Using
 ;;    ange-ftp-kill-ftp-process can restart the ftp process, which
 ;;    should get things back in sync.
 ;;
 ;; 3. Ange-ftp does not check to make sure that when creating a new file,
 ;;    you provide a valid filename for the remote operating system.
 ;;    If you do not, then the remote FTP server will most likely
-;;    translate your filename in some way. This may cause ange-ftp to
-;;    get confused about what exactly is the name of the file. The
+;;    translate your filename in some way.  This may cause ange-ftp to
+;;    get confused about what exactly is the name of the file.  The
 ;;    most common causes of this are using lower case filenames on systems
 ;;    which support only upper case, and using filenames which are too
 ;;    long.
@@ -479,39 +479,39 @@
 ;;    disgusting way around this problem is to talk to the FTP process via
 ;;    rlogin which does the 'right' things with pty's.
 ;;
-;; 6. For CMS support, we send too many cd's. Since cd's are cheap, I haven't
-;;    worried about this too much. Eventually, we should have some caching
+;; 6. For CMS support, we send too many cd's.  Since cd's are cheap, I haven't
+;;    worried about this too much.  Eventually, we should have some caching
 ;;    of the current minidisk.
 ;;
 ;; 7. Some CMS machines do not assign a default minidisk when you ftp them as
-;;    anonymous. It is then necessary to guess a valid minidisk name, and cd
-;;    to it. This is (understandably) beyond ange-ftp.
+;;    anonymous.  It is then necessary to guess a valid minidisk name, and cd
+;;    to it.  This is (understandably) beyond ange-ftp.
 ;;
 ;; 8. Remote to remote copying of files on non-Unix machines can be risky.
 ;;    Depending on the variable ange-ftp-binary-file-name-regexp, ange-ftp
-;;    will use binary mode for the copy. Between systems of different
+;;    will use binary mode for the copy.  Between systems of different
 ;;    architecture, this still may not be enough to guarantee the integrity
-;;    of binary files. Binary file transfers from VMS machines are
-;;    particularly problematical. Should ange-ftp-binary-file-name-regexp be
+;;    of binary files.  Binary file transfers from VMS machines are
+;;    particularly problematical.  Should ange-ftp-binary-file-name-regexp be
 ;;    an alist of OS type, regexp pairs?
 ;;
 ;; 9. The code to do compression of files over ftp is not as careful as it
-;;    should be. It deletes the old remote version of the file, before
+;;    should be.  It deletes the old remote version of the file, before
 ;;    actually checking if the local to remote transfer of the compressed
-;;    file succeeds. Of course to delete the original version of the file
+;;    file succeeds.  Of course to delete the original version of the file
 ;;    after transferring the compressed version back is also dangerous,
 ;;    because some OS's have severe restrictions on the length of filenames,
 ;;    and when the compressed version is copied back the "-Z" or ".Z" may be
-;;    truncated. Then, ange-ftp would delete the only remaining version of
+;;    truncated.  Then, ange-ftp would delete the only remaining version of
 ;;    the file.  Maybe ange-ftp should make backups when it compresses files
 ;;    (of course, the backup "~" could also be truncated off, sigh...).
 ;;    Suggestions?
 ;;
 ;; 10. If a dir listing is attempted for an empty directory on (at least
-;;     some) VMS hosts, an ftp error is given. This is really an ftp bug, and
+;;     some) VMS hosts, an ftp error is given.  This is really an ftp bug, and
 ;;     I don't know how to get ange-ftp work to around it.
 ;;
-;; 11. Bombs on filenames that start with a space. Deals well with filenames
+;; 11. Bombs on filenames that start with a space.  Deals well with filenames
 ;;     containing spaces, but beware that the remote ftpd may not like them
 ;;     much.
 ;;
@@ -519,13 +519,13 @@
 ;;     It needs to be reimplemented by modifying the parse-...-listing
 ;;     functions to convert the directory listing to ls -l format.
 ;;
-;; 13. The famous @ bug. As mentioned above in TIPS, ULTRIX marks symlinks
-;;     with a trailing @ in a ls -alF listing. In order to account for this
+;; 13. The famous @ bug.  As mentioned above in TIPS, ULTRIX marks symlinks
+;;     with a trailing @ in a ls -alF listing.  In order to account for this
 ;;     ange-ftp looks to chop trailing @'s off of symlink names when it is
-;;     parsing a listing with the F switch. This will cause ange-ftp to
+;;     parsing a listing with the F switch.  This will cause ange-ftp to
 ;;     incorrectly get the name of a symlink on a non-ULTRIX host if its name
-;;     ends in an @. ange-ftp will correct itself if you take F out of the
-;;     dired ls switches (C-u s will allow you to edit the switches). The
+;;     ends in an @.  ange-ftp will correct itself if you take F out of the
+;;     dired ls switches (C-u s will allow you to edit the switches).  The
 ;;     dired buffer will be automatically reverted, which will allow ange-ftp
 ;;     to fix its files hashtable.  A cookie to anyone who can think of a
 ;;     fast, sure-fire way to recognize ULTRIX over ftp.
@@ -576,26 +576,26 @@
 ;; and the current code should eventually be made compliant.
 ;;
 ;; nil = local host type, whatever that is (probably unix).
-;;       Think nil as in "not a remote host". This value is used by
+;;       Think nil as in "not a remote host".  This value is used by
 ;;       ange-ftp-dired-host-type for local buffers.
 ;;
-;; t = a remote host of unknown type. Think t as in true, it's remote.
+;; t = a remote host of unknown type.  Think t as in true, it's remote.
 ;;     Currently, `unix' is used as the default remote host type.
 ;;     Maybe we should use t.
 ;;
 ;; TYPE = a remote host of TYPE type.
 ;;
 ;; TYPE:LIST = a remote host of TYPE type, using a specialized ftp listing
-;;             program called list. This is currently only used for Unix
+;;             program called list.  This is currently only used for Unix
 ;;             dl (descriptive listings), when ange-ftp-dired-host-type
 ;;             is set to `unix:dl'.
 
 ;; Bug report codes:
 ;;
 ;; Because of their naive faith in this code, there are certain situations
-;; which the writers of this program believe could never happen. However,
+;; which the writers of this program believe could never happen.  However,
 ;; being realists they have put calls to `error' in the program at these
-;; points. These errors provide a code, which is an integer, greater than 1.
+;; points.  These errors provide a code, which is an integer, greater than 1.
 ;; To aid debugging.  the error codes, and the functions in which they reside
 ;; are listed below.
 ;;
@@ -1025,7 +1025,7 @@ or nil meaning don't change it."
   "Buffer name to hold directory listing data received from FTP process.")
 
 (defvar ange-ftp-netrc-modtime nil
-  "Last modified time of the netrc file from file-attributes.")
+  "Last modified time of the netrc file from `file-attributes'.")
 
 (defvar ange-ftp-user-hashtable (make-hash-table :test 'equal)
   "Hash table holding associations between HOST, USER pairs.")
@@ -2641,7 +2641,7 @@ away in the internal cache."
                    (ange-ftp-error host user
                                    (concat "DIR failed: " (cdr result)))))
              (ange-ftp-del-tmp-name temp))))
-      (error "Should never happen. Please report. Bug ref. no.: 1"))))
+      (error "This should never happen; please report this as a bug"))))
 
 ;;;; ------------------------------------------------------------
 ;;;; Directory information caching support.
@@ -5134,7 +5134,7 @@ NEWNAME should be the name to give the new compressed or 
uncompressed file.")
                           (concat "/" drive "/"))
                      dir (and dir "/")
                      file))
-         (error "name %s didn't match" name))
+          (error "Name %s didn't match" name))
       (let (drive dir file tmp quote)
        (if (string-match "\\`\".+\"\\'" name)
            (setq name (substring name 1 -1)
@@ -5662,7 +5662,7 @@ Other orders of $ and _ seem to all work just fine.")
              (setq file (match-string 2 name))
              (concat (and acct (concat "/" acct "/"))
                      file))
-         (error "name %s didn't match" name))
+          (error "Name %s didn't match" name))
       (if (string-match "\\`/\\([^:]+:\\)/\\(.*\\)\\'" name)
          (concat (match-string 1 name) (match-string 2 name))
        ;; Let's hope that mts will recognize it anyway.
@@ -6096,7 +6096,7 @@ Other orders of $ and _ seem to all work just fine.")
               (and pubset (concat "_/" pubset "/"))
               (and userid (concat userid "/"))
               filename))
-         (error "name %s didn't match" name))
+          (error "Name %s didn't match" name))
       ;; and here we (maybe) have to remove the inserted "_/" 'cause
       ;; of our prevention of the special escape prefix above:
       (if (string-match (concat "^/_/") name)
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index bf77ecc7af..b21c66ef14 100644
--- a/lisp/net/browse-url.el
+++ b/lisp/net/browse-url.el
@@ -1754,11 +1754,11 @@ from `browse-url-elinks-wrapper'."
     (define-key map [mouse-2] #'browse-url-button-open)
     (define-key map "w" #'browse-url-button-copy)
     map)
-  "The keymap used for browse-url buttons.")
+  "The keymap used for `browse-url' buttons.")
 
 (defface browse-url-button
   '((t :inherit link))
-  "Face for browse-url buttons (i.e., links)."
+  "Face for `browse-url' buttons (i.e., links)."
   :version "27.1")
 
 (defun browse-url-add-buttons ()
diff --git a/lisp/net/dictionary.el b/lisp/net/dictionary.el
index 0f42af0911..85467cd782 100644
--- a/lisp/net/dictionary.el
+++ b/lisp/net/dictionary.el
@@ -25,9 +25,9 @@
 ;; dictionary allows you to interact with dictionary servers.
 ;; Use M-x customize-group dictionary to modify user settings.
 ;;
-;; Main functions for interaction are:
-;; dictionary        - opens a new dictionary buffer
-;; dictionary-search - search for the definition of a word
+;; Main commands for interaction are:
+;; M-x dictionary        - opens a new dictionary buffer
+;; M-x dictionary-search - search for the definition of a word
 ;;
 ;; You can find more information in the README file of the GitHub
 ;; repository https://github.com/myrkr/dictionary-el
@@ -58,11 +58,11 @@ the existing connection."
   (set-default name value))
 
 (defgroup dictionary nil
-  "Client for accessing the dictd server based dictionaries"
+  "Client for accessing the dictd server based dictionaries."
   :group 'hypermedia)
 
 (defgroup dictionary-proxy nil
-  "Proxy configuration options for the dictionary client"
+  "Proxy configuration options for the dictionary client."
   :group 'dictionary)
 
 (defcustom dictionary-server
@@ -943,7 +943,6 @@ If PATTERN is omitted, it defaults to \"[ 
\\f\\t\\n\\r\\v]+\"."
 
 (defun dictionary-set-dictionary (param &optional more)
   "Select the dictionary which is the car of PARAM as new default."
-
   (if more
       (dictionary-display-more-info param)
     (let ((dictionary (car param)))
@@ -1051,7 +1050,6 @@ If PATTERN is omitted, it defaults to \"[ 
\\f\\t\\n\\r\\v]+\"."
 
 (defun dictionary-do-matching (word dictionary strategy function)
   "Find matches for WORD with STRATEGY in DICTIONARY and display them with 
FUNCTION."
-
   (message "Lookup matching words for %s in %s using %s"
           word dictionary strategy)
   (dictionary-send-command
@@ -1211,7 +1209,6 @@ allows editing it."
                (save-excursion
                  (mouse-set-point event)
                  (current-word)))))
-    (selected-window)
     (dictionary-popup-matching-words word)))
 
 ;;;###autoload
@@ -1315,9 +1312,9 @@ allows editing it."
   "Turn off or on support for the dictionary tooltip mode.
 
 It is normally internally called with 1 to enable support for the
-tooltip mode. The hook function will check the value of the
-variable dictionary-tooltip-mode to decide if some action must be
-taken. When disabling the tooltip mode the value of this variable
+tooltip mode.  The hook function will check the value of the
+variable `dictionary-tooltip-mode' to decide if some action must be
+taken.  When disabling the tooltip mode the value of this variable
 will be set to nil."
   (interactive)
   (tooltip-mode on)
@@ -1348,10 +1345,10 @@ active it will overwrite that mode for the current 
buffer."
 
 ;;;###autoload
 (defun global-dictionary-tooltip-mode (&optional arg)
-  "Enable/disable dictionary-tooltip-mode for all buffers.
+  "Enable/disable `dictionary-tooltip-mode' for all buffers.
 
-Internally it provides a default for the dictionary-tooltip-mode.
-It can be overwritten for each buffer using dictionary-tooltip-mode.
+Internally it provides a default for the `dictionary-tooltip-mode'.
+It can be overwritten for each buffer using `dictionary-tooltip-mode'.
 
 Note: (global-dictionary-tooltip-mode 0) will not disable the mode
 any buffer where (dictionary-tooltip-mode 1) has been called."
@@ -1368,5 +1365,26 @@ any buffer where (dictionary-tooltip-mode 1) has been 
called."
                     (if on #'dictionary-tooltip-track-mouse #'ignore))
     on))
 
+;;; Context menu support
+
+(defun dictionary-search-word-at-mouse (event)
+  (interactive "e")
+  (let ((word (save-window-excursion
+               (save-excursion
+                 (mouse-set-point event)
+                 (current-word)))))
+    (dictionary-search word)))
+
+(defun context-menu-dictionary (menu click)
+  "Populate MENU with dictionary commands at CLICK."
+  (when (thing-at-mouse click 'word)
+    (define-key menu [dictionary-separator] menu-bar-separator)
+    (define-key menu [dictionary-search-word-at-mouse]
+      '(menu-item "Dictionary Search" dictionary-search-word-at-mouse
+                  :help "Search the word at mouse click in dictionary")))
+  menu)
+
+(add-hook 'context-menu-functions 'context-menu-dictionary 15)
+
 (provide 'dictionary)
 ;;; dictionary.el ends here
diff --git a/lisp/net/eudc.el b/lisp/net/eudc.el
index 517913ff01..5c451c6556 100644
--- a/lisp/net/eudc.el
+++ b/lisp/net/eudc.el
@@ -25,7 +25,7 @@
 ;;; Commentary:
 ;;    This package provides a common interface to query directory servers using
 ;;    different protocols such as LDAP, CCSO PH/QI or BBDB.  Queries can be
-;;    made through an interactive form or inline. Inline query strings in
+;;    made through an interactive form or inline.  Inline query strings in
 ;;    buffers are expanded with appropriately formatted query results
 ;;    (especially used to expand email addresses in message buffers).  EUDC
 ;;    also interfaces with the BBDB package to let you register query results
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 90301e92ac..c1202974f4 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -36,7 +36,7 @@
 (eval-when-compile (require 'subr-x))
 
 (defgroup eww nil
-  "Emacs Web Wowser"
+  "Emacs Web Wowser."
   :version "25.1"
   :link '(custom-manual "(eww) Top")
   :group 'web
@@ -668,9 +668,12 @@ Currently this means either text/html or 
application/xhtml+xml."
                   ("home" . :home)
                   ("contents" . :contents)
                   ("up" . :up)))))
-    (and href
-        where
-        (plist-put eww-data (cdr where) href))))
+    (when (and href where)
+      (when (memq (cdr where) '(:next :previous))
+        ;; Multi-page isearch support.
+        (setq-local multi-isearch-next-buffer-function
+                    #'eww-isearch-next-buffer))
+      (plist-put eww-data (cdr where) href))))
 
 (defvar eww-redirect-level 1)
 
@@ -840,6 +843,8 @@ Currently this means either text/html or 
application/xhtml+xml."
     (remove-overlays)
     (erase-buffer))
   (setq bidi-paragraph-direction nil)
+  ;; May be set later if there's a next/prev link.
+  (setq-local multi-isearch-next-buffer-function nil)
   (unless (eq major-mode 'eww-mode)
     (eww-mode)))
 
@@ -1021,7 +1026,8 @@ the like."
         ["Toggle Paragraph Direction" eww-toggle-paragraph-direction]))
     map))
 
-(defun eww-context-menu (menu)
+(defun eww-context-menu (menu click)
+  "Populate MENU with eww commands at CLICK."
   (define-key menu [eww-separator] menu-bar-separator)
   (let ((easy-menu (make-sparse-keymap "Eww")))
     (easy-menu-define nil easy-menu nil
@@ -1035,8 +1041,8 @@ the like."
       (when (consp item)
         (define-key menu (vector (car item)) (cdr item)))))
 
-  (when (or (mouse-posn-property (event-start last-input-event) 'shr-url)
-            (mouse-posn-property (event-start last-input-event) 'image-url))
+  (when (or (mouse-posn-property (event-start click) 'shr-url)
+            (mouse-posn-property (event-start click) 'image-url))
     (define-key menu [shr-mouse-browse-url-new-window]
       `(menu-item "Follow URL in new window" ,(if browse-url-new-window-flag
                                                   'shr-mouse-browse-url
@@ -1080,8 +1086,6 @@ the like."
     (setq-local tool-bar-map eww-tool-bar-map))
   ;; desktop support
   (setq-local desktop-save-buffer #'eww-desktop-misc-data)
-  ;; multi-page isearch support
-  (setq-local multi-isearch-next-buffer-function #'eww-isearch-next-buffer)
   (setq truncate-lines t)
   (setq-local thing-at-point-provider-alist
               (append thing-at-point-provider-alist
diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el
index 43dd9dc15c..7b1ea2e765 100644
--- a/lisp/net/gnutls.el
+++ b/lisp/net/gnutls.el
@@ -226,7 +226,7 @@ trust and key files, and priority string."
            trustfiles crlfiles keylist min-prime-bits
            verify-flags verify-error verify-hostname-error
            &allow-other-keys)
-  "Negotiate a SSL/TLS connection.  Returns proc.  Signals gnutls-error.
+  "Negotiate a SSL/TLS connection.  Return proc.  Signal gnutls-error.
 
 Note that arguments are passed CL style, :type TYPE instead of just TYPE.
 
diff --git a/lisp/net/goto-addr.el b/lisp/net/goto-addr.el
index 2c43d0f753..848bad3b0d 100644
--- a/lisp/net/goto-addr.el
+++ b/lisp/net/goto-addr.el
@@ -124,8 +124,9 @@ will have no effect.")
     m)
   "Keymap to hold goto-addr's mouse key defs under highlighted URLs.")
 
-(defun goto-address-context-menu (menu)
-  (when (mouse-posn-property (event-start last-input-event) 'goto-address)
+(defun goto-address-context-menu (menu click)
+  "Populate MENU with `goto-address' commands at CLICK."
+  (when (mouse-posn-property (event-start click) 'goto-address)
     (define-key menu [goto-address-separator] menu-bar-separator)
     (define-key menu [goto-address-at-mouse]
       '(menu-item "Follow Link" goto-address-at-mouse
diff --git a/lisp/net/ldap.el b/lisp/net/ldap.el
index 7997bf3c90..8b63dce211 100644
--- a/lisp/net/ldap.el
+++ b/lisp/net/ldap.el
@@ -51,7 +51,8 @@ a separator."
 
 (defcustom ldap-default-port nil
   "Default TCP port for LDAP connections.
-Initialized from the LDAP library at build time. Default value is 389."
+Initialized from the LDAP library at build time.
+Default value is 389."
   :type '(choice (const :tag "Use library default" nil)
                 (integer :tag "Port number")))
 
diff --git a/lisp/net/mailcap.el b/lisp/net/mailcap.el
index 5473ba7e69..83d0eeef9f 100644
--- a/lisp/net/mailcap.el
+++ b/lisp/net/mailcap.el
@@ -93,7 +93,7 @@ The elements of the list are alists of the following structure
    (type   . MIME-TYPE)
    (test   . TEST))
 
-where VIEWER is either a lisp command, e.g., a major-mode, or a
+where VIEWER is either a Lisp command, e.g., a major mode, or a
 string containing a shell command for viewing files of the
 defined MIME-TYPE.  In case of a shell command, %s will be
 replaced with the file.
@@ -101,7 +101,7 @@ replaced with the file.
 MIME-TYPE is a regular expression being matched against the
 actual MIME type.  It is implicitly surrounded with ^ and $.
 
-TEST is a lisp form which is evaluated in order to test if the
+TEST is a Lisp form which is evaluated in order to test if the
 entry should be chosen.  The `test' entry is optional.
 
 When selecting a viewer for a given MIME type, the first viewer
diff --git a/lisp/net/mairix.el b/lisp/net/mairix.el
index 727aa55de5..3feb089ad0 100644
--- a/lisp/net/mairix.el
+++ b/lisp/net/mairix.el
@@ -24,7 +24,7 @@
 
 ;; This is an interface to the mairix mail search engine.  Mairix is
 ;; written by Richard Curnow and is licensed under the GPL.  See the
-;; home page for details:
+;; Mairix website for details:
 ;;
 ;; http://www.rpcurnow.force9.co.uk/mairix/
 ;;
diff --git a/lisp/net/nsm.el b/lisp/net/nsm.el
index 1d9ee6db86..2ac1df1d58 100644
--- a/lisp/net/nsm.el
+++ b/lisp/net/nsm.el
@@ -34,7 +34,7 @@
 (defvar nsm-temporary-host-settings nil)
 
 (defgroup nsm nil
-  "Network Security Manager"
+  "Network Security Manager."
   :version "25.1"
   :group 'comm)
 
@@ -446,8 +446,8 @@ this check has no effect on GnuTLS >= 3.2.0.
 
 Reference:
 
-[1]: Schneier, Bruce (1996). Applied Cryptography (Second ed.). John
-Wiley & Sons. ISBN 0-471-11709-9.
+[1]: Schneier, Bruce (1996).  Applied Cryptography (Second ed.).
+John Wiley & Sons.  ISBN 0-471-11709-9.
 [2]: N. Mavrogiannopoulos, FSF (Apr 2015).  \"GnuTLS NEWS -- History
 of user-visible changes.\" Version 3.4.0,
 `https://gitlab.com/gnutls/gnutls/blob/master/NEWS'"
@@ -466,7 +466,7 @@ man-in-the-middle attacks.
 
 Reference:
 
-GnuTLS authors (2018). \"GnuTLS Manual 4.3.3 Anonymous
+GnuTLS authors (2018).  \"GnuTLS Manual 4.3.3 Anonymous
 authentication\",
 `https://www.gnutls.org/manual/gnutls.html#Anonymous-authentication'"
   (let ((kx (plist-get status :key-exchange)))
diff --git a/lisp/net/quickurl.el b/lisp/net/quickurl.el
index 2574c8cb63..046953faf6 100644
--- a/lisp/net/quickurl.el
+++ b/lisp/net/quickurl.el
@@ -24,19 +24,19 @@
 ;;; Commentary:
 ;;
 ;; This package provides a simple method of inserting a URL based on the
-;; text at point in the current buffer. This is part of an on-going effort
+;; text at point in the current buffer.  This is part of an on-going effort
 ;; to increase the information I provide people while reducing the amount
-;; of typing I need to do. No-doubt there are undiscovered Emacs packages
+;; of typing I need to do.  No-doubt there are undiscovered Emacs packages
 ;; out there that do all of this and do it better, feel free to point me to
 ;; them, in the mean time I'm having fun playing with Emacs Lisp.
 ;;
 ;; The URLs are stored in an external file as a list of either cons cells,
-;; or lists. A cons cell entry looks like this:
+;; or lists.  A cons cell entry looks like this:
 ;;
 ;;    (<Lookup> . <URL>)
 ;;
 ;; where <Lookup> is a string that acts as the keyword lookup and <URL> is
-;; the URL associated with it. An example might be:
+;; the URL associated with it.  An example might be:
 ;;
 ;;    ("GNU" . "https://www.gnu.org/";)
 ;;
@@ -45,8 +45,8 @@
 ;;    (<Lookup> <URL> <Comment>)
 ;;
 ;; where <Lookup> and <URL> are the same as with the cons cell and <Comment>
-;; is any text you like that describes the URL. This description will be
-;; used when presenting a list of URLS using `quickurl-list'. An example
+;; is any text you like that describes the URL.  This description will be
+;; used when presenting a list of URLS using `quickurl-list'.  An example
 ;; might be:
 ;;
 ;;    ("FSF" "https://www.fsf.org/"; "The Free Software Foundation")
@@ -215,8 +215,8 @@ Note that this function is a setfable place."
 (defun quickurl-url-comment (url)
   "Get the comment from a URL.
 
-If the URL has no comment an empty string is returned. Also note that this
-function is a setfable place."
+If the URL has no comment an empty string is returned.  Also note
+that this function is a setfable place."
   (declare
    (gv-setter (lambda (store)
                 `(if (quickurl-url-commented-p ,url)
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 9d242c47cd..bc67562d2d 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -60,9 +60,9 @@
 
 (defcustom rcirc-server-alist
   (if (gnutls-available-p)
-      '(("irc.libera.chat" :channels ("#rcirc")
+      '(("irc.libera.chat" :channels ("#emacs" "#rcirc")
          :port 6697 :encryption tls))
-    '(("irc.libera.chat" :channels ("#rcirc"))))
+    '(("irc.libera.chat" :channels ("#emacs" "#rcirc"))))
   "An alist of IRC connections to establish when running `rcirc'.
 Each element looks like (SERVER-NAME PARAMETERS).
 
@@ -194,16 +194,15 @@ If nil, no maximum is applied."
   "Responses which will be hidden when `rcirc-omit-mode' is enabled."
   :type '(repeat string))
 
-(defcustom rcirc-omit-after-reconnect
-  '("JOIN" "TOPIC" "NAMES")
-  "Types of messages to hide right after reconnecting."
+(defcustom rcirc-omit-responses-after-join '()
+  "Types of messages to hide right after joining a channel."
   :type '(repeat string)
   :version "28.1")
 
-(defvar-local rcirc-reconncting nil
-  "Non-nil means we have just reconnected.
+(defvar-local rcirc-joined nil
+  "Non-nil means we have just connected.
 This is used to hide the message types enumerated in
-`rcirc-supress-after-reconnect'.")
+`rcirc-omit-responses-after-join'.")
 
 (defvar-local rcirc-prompt-start-marker nil
   "Marker indicating the beginning of the message prompt.")
@@ -215,11 +214,8 @@ Uninteresting lines are those whose responses are listed in
 `rcirc-omit-responses'."
   :lighter " Omit"
   (if rcirc-omit-mode
-      (progn
-       (add-to-invisibility-spec '(rcirc-omit . nil))
-       (message "Rcirc-Omit mode enabled"))
-    (remove-from-invisibility-spec '(rcirc-omit . nil))
-    (message "Rcirc-Omit mode disabled"))
+      (add-to-invisibility-spec '(rcirc-omit . nil))
+    (remove-from-invisibility-spec '(rcirc-omit . nil)))
   (dolist (window (get-buffer-window-list (current-buffer)))
     (with-selected-window window
       (recenter (when (> (point) rcirc-prompt-start-marker) -1)))))
@@ -413,6 +409,21 @@ will be killed."
   :version "28.1"
   :type 'function)
 
+(defcustom rcirc-channel-filter #'identity
+  "Function applied to channels before displaying."
+  :version "28.1"
+  :type 'function)
+
+(defcustom rcirc-track-ignore-server-buffer-flag nil
+  "Non-nil means activities in the server buffer are not traced."
+  :version "28.1"
+  :type 'boolean)
+
+(defcustom rcirc-display-server-buffer t
+  "Non-nil means the server buffer should be shown on connecting."
+  :version "28.1"
+  :type 'boolean)
+
 (defvar-local rcirc-nick nil
   "The nickname used for the current connection.")
 
@@ -512,10 +523,12 @@ If ARG is non-nil, instead prompt for connection 
parameters."
                                                           :channels)
                                                " "))
                        "[, ]+" t))
-             (encryption (rcirc-prompt-for-encryption server-plist)))
-       (rcirc-connect server port nick user-name
-                      rcirc-default-full-name
-                      channels password encryption))
+             (encryption (rcirc-prompt-for-encryption server-plist))
+             (process (rcirc-connect server port nick user-name
+                                    rcirc-default-full-name
+                                    channels password encryption)))
+       (when rcirc-display-server-buffer
+          (pop-to-buffer-same-window (process-buffer process))))
     ;; connect to servers in `rcirc-server-alist'
     (let (connected-servers)
       (dolist (c rcirc-server-alist)
@@ -544,9 +557,11 @@ If ARG is non-nil, instead prompt for connection 
parameters."
                  (setq connected p)))
              (if (not connected)
                  (condition-case nil
-                     (rcirc-connect server port nick user-name
-                                     full-name channels password encryption
-                                     server-alias)
+                     (let ((process (rcirc-connect server port nick user-name
+                                                    full-name channels 
password encryption
+                                                    server-alias)))
+                        (when rcirc-display-server-buffer
+                          (pop-to-buffer-same-window (process-buffer 
process))))
                    (quit (message "Quit connecting to %s"
                                    (or server-alias server))))
                (with-current-buffer (process-buffer connected)
@@ -595,6 +610,8 @@ FULL-NAME STARTUP-CHANNELS PASSWORD ENCRYPTION 
SERVER-ALIAS).
 See `rcirc-connect' for more details on these variables.")
 (defvar-local rcirc-process nil
   "Network process for the current connection.")
+(defvar-local rcirc-last-connect-time nil
+  "The last time the buffer was connected.")
 
 ;;; IRCv3 capability negotiation 
(https://ircv3.net/specs/extensions/capability-negotiation)
 (defvar rcirc-implemented-capabilities
@@ -604,6 +621,16 @@ See `rcirc-connect' for more details on these variables.")
     "message-ids"                       
;https://ircv3.net/specs/extensions/message-ids
     "invite-notify"                     
;https://ircv3.net/specs/extensions/invite-notify
     "sasl"                              
;https://ircv3.net/specs/extensions/sasl-3.1
+    "multi-prefix"                      
;https://ircv3.net/specs/extensions/multi-prefix
+    "standard-replies"                  
;https://ircv3.net/specs/extensions/standard-replies
+    ;; The following capabilities should be implemented as soon as
+    ;; their specifications are undrafted:
+    ;;
+    ;; "reply"                             
;https://ircv3.net/specs/client-tags/reply
+    ;; "react"                             
;https://ircv3.net/specs/client-tags/react
+    ;; "multiline"                         
;https://ircv3.net/specs/extensions/multiline
+    ;; "chathistory"                       
;https://ircv3.net/specs/extensions/chathistory
+    ;; "channel-rename"                    
;https://ircv3.net/specs/extensions/channel-rename
     )
   "A list of capabilities that rcirc supports.")
 (defvar-local rcirc-requested-capabilities nil
@@ -611,7 +638,7 @@ See `rcirc-connect' for more details on these variables.")
 (defvar-local rcirc-acked-capabilities nil
   "A list of capabilities that the server supports.")
 (defvar-local rcirc-finished-sasl t
-  "Check whether SASL authentication has completed")
+  "Check whether SASL authentication has completed.")
 
 (defun rcirc-get-server-method (server)
   "Return authentication method for SERVER."
@@ -644,69 +671,61 @@ that are joined after authentication."
     (message "Connecting to %s..." (or server-alias server))
     (let* ((inhibit-eol-conversion)
            (port-number (if port
-                           (if (stringp port)
-                               (string-to-number port)
-                             port)
-                         rcirc-default-port))
-          (nick (or nick rcirc-default-nick))
-          (user-name (or user-name rcirc-default-user-name))
-          (full-name (or full-name rcirc-default-full-name))
-          (startup-channels startup-channels)
-           (use-sasl (eq (rcirc-get-server-method server) 'sasl))
-           (process (open-network-stream
+                            (if (stringp port)
+                                (string-to-number port)
+                              port)
+                          rcirc-default-port))
+           (nick (or nick rcirc-default-nick))
+           (user-name (or user-name rcirc-default-user-name))
+           (full-name (or full-name rcirc-default-full-name))
+           (startup-channels startup-channels)
+
+           process)
+
+      ;; Ensure any previous process is killed
+      (when-let ((old-process (get-process (or server-alias server))))
+        (set-process-sentinel old-process #'ignore)
+        (delete-process process))
+
+      ;; Set up process
+      (setq process (open-network-stream
                      (or server-alias server) nil server port-number
-                     :type (or encryption 'plain))))
-      ;; set up process
+                     :type (or encryption 'plain)
+                     :nowait t))
       (set-process-coding-system process 'raw-text 'raw-text)
-      (switch-to-buffer (rcirc-generate-new-buffer-name process nil))
-      (set-process-buffer process (current-buffer))
-      (unless (eq major-mode 'rcirc-mode)
-        (rcirc-mode process nil))
-      (set-process-sentinel process 'rcirc-sentinel)
-      (set-process-filter process 'rcirc-filter)
-
-      (setq rcirc-connection-info
-           (list server port nick user-name full-name startup-channels
-                 password encryption server-alias))
-      (setq rcirc-process process)
-      (setq rcirc-server server)
-      (setq rcirc-server-name (or server-alias server)) ; Update when we get 
001 response.
-      (setq rcirc-nick-table (make-hash-table :test 'equal))
-      (setq rcirc-nick nick)
-      (setq rcirc-startup-channels startup-channels)
-      (setq rcirc-last-server-message-time (current-time))
-
-      (setq rcirc-connecting t)
-
-      (add-hook 'auto-save-hook 'rcirc-log-write)
-      (when use-sasl
-        (rcirc-send-string process "CAP REQ sasl"))
-
-      (when use-sasl
-        (setq-local rcirc-finished-sasl nil))
-      ;; identify
-      (dolist (cap rcirc-implemented-capabilities)
-        (rcirc-send-string process "CAP" "REQ" : cap)
-        (push cap rcirc-requested-capabilities))
-      (unless (zerop (length password))
-        (rcirc-send-string process "PASS" password))
-      (rcirc-send-string process "NICK" nick)
-      (rcirc-send-string process "USER" user-name "0" "*" : full-name)
-      ;; Setup sasl, and initiate authentication.
-      (when (and rcirc-auto-authenticate-flag
-                 use-sasl)
-        (rcirc-send-string process "AUTHENTICATE" "PLAIN"))
-
-      ;; setup ping timer if necessary
-      (unless rcirc-keepalive-timer
-       (setq rcirc-keepalive-timer
-             (run-at-time 0 (/ rcirc-timeout-seconds 2) 'rcirc-keepalive)))
-
-      (message "Connecting to %s...done" (or server-alias server))
-      (setq mode-line-process nil)
-
-      ;; return process object
-      process)))
+      (with-current-buffer (get-buffer-create (rcirc-generate-new-buffer-name 
process nil))
+        (set-process-buffer process (current-buffer))
+        (unless (eq major-mode 'rcirc-mode)
+          (rcirc-mode process nil))
+        (set-process-sentinel process #'rcirc-sentinel)
+        (set-process-filter process #'rcirc-filter)
+
+        (setq rcirc-connection-info
+              (list server port nick user-name full-name startup-channels
+                    password encryption server-alias))
+        (setq rcirc-process process)
+        (setq rcirc-server server)
+        (setq rcirc-server-name (or server-alias server)) ; Update when we get 
001 response.
+        (setq rcirc-nick-table (make-hash-table :test 'equal))
+        (setq rcirc-nick nick)
+        (setq rcirc-startup-channels startup-channels)
+        (setq rcirc-last-server-message-time (current-time))
+        (setq rcirc-last-connect-time (current-time))
+
+        ;; Check if the immediate process state
+        (sit-for .1)
+        (cond
+         ((eq (process-status process) 'failed)
+          (setq mode-line-process ":disconnected")
+          (setq rcirc-connecting nil))
+         ((eq (process-status process) 'connect)
+          (setq mode-line-process ":connecting")
+          (setq rcirc-connecting t)))
+
+        (add-hook 'auto-save-hook #'rcirc-log-write)
+
+        ;; return process object
+        process))))
 
 (defmacro with-rcirc-process-buffer (process &rest body)
   "Evaluate BODY in the buffer of PROCESS."
@@ -795,31 +814,112 @@ When 0, do not auto-reconnect."
   :version "25.1"
   :type 'integer)
 
-(defvar-local rcirc-last-connect-time nil
-  "The last time the buffer was connected.")
+(defcustom rcirc-reconnect-attempts 3
+  "Number of times a reconnection should be attempted."
+  :version "28.1"
+  :type 'integer)
+
+(defvar-local rcirc-failed-attempts 0
+  "Number of times reconnecting has failed.")
+
+(defvar-local rcirc-reconnection-timer nil
+  "Timer used for reconnecting.")
+
+(defun rcirc-reconnect (process &optional quiet)
+  "Attempt to reconnect connection to PROCESS.
+If QUIET is non-nil, no not emit a message."
+  (with-rcirc-process-buffer process
+    (catch 'exit
+      (if (rcirc--connection-open-p process)
+          (throw 'exit (or quiet (message "Server process is alive")))
+        (delete-process process))
+      (let ((conn-info rcirc-connection-info))
+       (setf (nth 5 conn-info)
+             (cl-remove-if-not #'rcirc-channel-p
+                               (mapcar #'car rcirc-buffer-alist)))
+        (dolist (buffer (mapcar #'cdr rcirc-buffer-alist))
+         (when (buffer-live-p buffer)
+            (with-current-buffer buffer
+             (setq mode-line-process ":connecting"))))
+       (let ((nprocess (apply #'rcirc-connect conn-info)))
+          (when (and (< rcirc-failed-attempts rcirc-reconnect-attempts)
+                     (eq (process-status nprocess) 'failed))
+            (setq rcirc-failed-attempts (1+ rcirc-failed-attempts))
+            (rcirc-print nprocess "*rcirc*" "ERROR" nil
+                        (format "Failed to reconnect (%d/%d)..."
+                                 rcirc-failed-attempts
+                                 rcirc-reconnect-attempts))
+            (setq rcirc-reconnection-timer
+                  (run-at-time rcirc-timeout-seconds nil
+                               #'rcirc-reconnect process t))))))))
 
 (defun rcirc-sentinel (process sentinel)
   "Called when PROCESS receives SENTINEL."
   (let ((sentinel (string-replace "\n" "" sentinel)))
     (rcirc-debug process (format "SENTINEL: %S %S\n" process sentinel))
     (with-rcirc-process-buffer process
-      (dolist (buffer (cons nil (mapcar 'cdr rcirc-buffer-alist)))
-       (with-current-buffer (or buffer (current-buffer))
-         (rcirc-print process "rcirc.el" "ERROR" rcirc-target
-                      (format "%s: %s (%S)"
-                              (process-name process)
-                              sentinel
-                              (process-status process))
-                       (not rcirc-target))
-         (rcirc-disconnect-buffer)))
-      (when (and (string= sentinel "deleted")
-                 (< 0 rcirc-reconnect-delay))
+      (cond
+       ((string= sentinel "open")
+        (let* ((server (nth 0 rcirc-connection-info))
+               (user-name (nth 3 rcirc-connection-info))
+               (full-name (nth 4 rcirc-connection-info))
+               (password (nth 6 rcirc-connection-info))
+               (server-alias (nth 8 rcirc-connection-info))
+               (use-sasl (eq (rcirc-get-server-method server) 'sasl)))
+
+          ;; Prepare SASL authentication
+          (when use-sasl
+            (rcirc-send-string process "CAP REQ sasl")
+            (setq-local rcirc-finished-sasl nil))
+
+          ;; Capability negotiation
+          (dolist (cap rcirc-implemented-capabilities)
+            (rcirc-send-string process "CAP" "REQ" : cap)
+            (push cap rcirc-requested-capabilities))
+
+          ;; Identify user
+          (unless (zerop (length password))
+            (rcirc-send-string process "PASS" password))
+          (rcirc-send-string process "NICK" rcirc-nick)
+          (rcirc-send-string process "USER" user-name "0" "*" : full-name)
+
+          ;; Setup sasl, and initiate authentication.
+          (when (and rcirc-auto-authenticate-flag
+                     use-sasl)
+            (rcirc-send-string process "AUTHENTICATE" "PLAIN"))
+
+          ;; Setup ping timer if necessary
+          (unless rcirc-keepalive-timer
+            (setq rcirc-keepalive-timer
+                  (run-at-time 0 (/ rcirc-timeout-seconds 2) 
#'rcirc-keepalive)))
+
+          ;; Reset previous reconnection attempts
+          (setq rcirc-failed-attempts 0)
+          (when rcirc-reconnection-timer
+            (cancel-timer rcirc-reconnection-timer)
+            (setq rcirc-reconnection-timer nil))
+
+          (message "Connecting to %s...done" (or server-alias server))
+          (dolist (buffer (cons nil (mapcar 'cdr rcirc-buffer-alist)))
+           (with-current-buffer (or buffer (current-buffer))
+             (setq mode-line-process nil)))))
+       ((string= sentinel "deleted")
         (let ((now (current-time)))
-          (when (or (null rcirc-last-connect-time)
-                   (time-less-p rcirc-reconnect-delay
-                                (time-subtract now rcirc-last-connect-time)))
-            (setq rcirc-last-connect-time now)
-            (rcirc-cmd-reconnect nil))))
+          (with-rcirc-process-buffer process
+            (when (and (< 0 rcirc-reconnect-delay)
+                       (time-less-p rcirc-reconnect-delay
+                                   (time-subtract now 
rcirc-last-connect-time)))
+              (setq rcirc-last-connect-time now)
+              (rcirc-reconnect process)))))
+       ((dolist (buffer (cons nil (mapcar 'cdr rcirc-buffer-alist)))
+         (with-current-buffer (or buffer (current-buffer))
+           (rcirc-print process "*rcirc*" "ERROR" rcirc-target
+                        (format "%s: %s (%S)"
+                                (process-name process)
+                                sentinel
+                                (process-status process))
+                         (not rcirc-target))
+           (rcirc-disconnect-buffer)))))
       (run-hook-with-args 'rcirc-sentinel-functions process sentinel))))
 
 (defun rcirc-disconnect-buffer (&optional buffer)
@@ -879,7 +979,7 @@ Function is called with PROCESS, COMMAND, SENDER, ARGS and 
LINE.")
       (condition-case err
           (rcirc-process-server-response-1 process text)
         (error
-         (rcirc-print process "RCIRC" "ERROR" nil
+         (rcirc-print process "*rcirc*" "ERROR" nil
                       (format "\"%s\" %s" text err) t)))
     (rcirc-process-server-response-1 process text)))
 
@@ -1054,7 +1154,7 @@ With no argument or nil as argument, use the current 
buffer."
   (let ((buffer (or buffer (and (buffer-live-p rcirc-server-buffer)
                                rcirc-server-buffer))))
     (if buffer
-        (with-current-buffer buffer rcirc-process)
+        (buffer-local-value 'rcirc-process buffer)
       rcirc-process)))
 
 (defun rcirc-server-name (process)
@@ -1258,7 +1358,8 @@ Each element looks like (FILENAME . TEXT).")
 This number is independent of the number of lines in the buffer.")
 
 (defun rcirc-mode (process target)
-  "Major mode for IRC channel buffers.
+  "Initialize an IRC buffer for writing with TARGET.
+PROCESS is the process object used for communication.
 
 \\{rcirc-mode-map}"
   ;; FIXME: Use define-derived-mode.
@@ -1281,7 +1382,6 @@ This number is independent of the number of lines in the 
buffer.")
   (setq rcirc-last-post-time (current-time))
   (setq-local fill-paragraph-function 'rcirc-fill-paragraph)
   (setq rcirc-current-line 0)
-  (setq rcirc-last-connect-time (current-time))
 
   (use-hard-newlines t)
 
@@ -1320,8 +1420,7 @@ This number is independent of the number of lines in the 
buffer.")
   (when target                         ; skip server buffer
     (let ((buffer (current-buffer)))
       (with-rcirc-process-buffer process
-       (setq rcirc-buffer-alist (cons (cons target buffer)
-                                      rcirc-buffer-alist))))
+        (push (cons target buffer) rcirc-buffer-alist)))
     (rcirc-update-short-buffer-names))
 
   (add-hook 'completion-at-point-functions
@@ -1464,10 +1563,11 @@ Create the buffer if it doesn't exist."
                           (rcirc-generate-new-buffer-name process target))))
          (with-current-buffer new-buffer
             (unless (eq major-mode 'rcirc-mode)
-             (rcirc-mode process target)))
+             (rcirc-mode process target))
             (setq mode-line-process nil)
-           (rcirc-put-nick-channel process (rcirc-nick process) target
-                                   rcirc-current-line)
+            (setq rcirc-joined (current-time)))
+         (rcirc-put-nick-channel process (rcirc-nick process) target
+                                 rcirc-current-line)
          new-buffer)))))
 
 (defun rcirc-send-input ()
@@ -1522,6 +1622,11 @@ The argument JUSTIFY is passed on to `fill-region'."
 
 (defun rcirc-process-message (line)
   "Process LINE as a message to be sent."
+  (when (and (null rcirc-target)
+             (string-match
+              (rx bos (group (+? nonl)) "@" (+ nonl) eos)
+              (buffer-name)))
+    (setq rcirc-target (match-string 1 (buffer-name))))
   (if (not rcirc-target)
       (message "Not joined (no target)")
     (delete-region rcirc-prompt-end-marker (point))
@@ -1625,6 +1730,9 @@ extracted."
     ("ACTION"  . "[%N %m]")
     ("COMMAND" . "%m")
     ("ERROR"   . "%fw!!! %m")
+    ("FAIL"   . "(%fwFAIL%f-) %m")
+    ("WARN"   . "(%fwWARN%f-) %m")
+    ("NOTE"   . "(%fwNOTE%f-) %m")
     (t         . "%fp*** %fs%n %r %m"))
   "An alist of formats used for printing responses.
 The format is looked up using the response-type as a key;
@@ -1742,8 +1850,9 @@ Returns nil if the information is not recorded.
 PROCESS is the process object for the current connection."
   (let ((chanbuf (rcirc-get-buffer process target)))
     (when chanbuf
-      (cdr (assoc-string nick (with-current-buffer chanbuf
-                               rcirc-recent-quit-alist))))))
+      (cdr (assoc-string nick (buffer-local-value
+                               'rcirc-recent-quit-alist
+                               chanbuf))))))
 
 (defun rcirc-last-line (process nick target)
   "Return the line from the last activity from NICK in TARGET.
@@ -1858,9 +1967,9 @@ connection."
              (let ((last-activity-lines (rcirc-elapsed-lines process sender 
target)))
                (if (and (not (string= (rcirc-nick process) sender))
                         (or (member response rcirc-omit-responses)
-                             (if (member response rcirc-omit-after-reconnect)
-                                 rcirc-reconncting
-                               (setq rcirc-reconncting nil)))
+                             (and (member response 
rcirc-omit-responses-after-join)
+                                  (< (time-to-seconds (time-since 
rcirc-joined))
+                                     1)))
                         (or (not last-activity-lines)
                             (< rcirc-omit-threshold last-activity-lines)))
                   (put-text-property (point-min) (point-max)
@@ -2008,7 +2117,8 @@ PROCESS is the process object for the current connection."
   "Return the nick from USER.  Remove any non-nick junk."
   (save-match-data
     (if (string-match (concat "^[" rcirc-nick-prefix-chars
-                             "]?\\([^! ]+\\)!?") (or user ""))
+                             "]*\\([^! ]+\\)!?")
+                      (or user ""))
        (match-string 1 user)
       user)))
 
@@ -2119,6 +2229,11 @@ This function does not alter the INPUT string."
     map)
   "Keymap for rcirc track minor mode.")
 
+(defcustom rcirc-track-abbrevate-flag t
+  "Non-nil means `rcirc-track-minor-mode' should abbreviate names."
+  :version "28.1"
+  :type 'boolean)
+
 ;;;###autoload
 (define-minor-mode rcirc-track-minor-mode
   "Global minor mode for tracking activity in rcirc buffers."
@@ -2176,7 +2291,7 @@ This function does not alter the INPUT string."
   "Bury all RCIRC buffers."
   (interactive)
   (dolist (buf (buffer-list))
-    (when (eq 'rcirc-mode (with-current-buffer buf major-mode))
+    (when (eq 'rcirc-mode (buffer-local-value 'major-mode buf))
       (bury-buffer buf)         ; buffers not shown
       (quit-windows-on buf))))  ; buffers shown in a window
 
@@ -2216,13 +2331,15 @@ activity.  Only run if the buffer is not visible and
   (with-current-buffer buffer
     (let ((old-activity rcirc-activity)
          (old-types rcirc-activity-types))
-      (when (not (get-buffer-window (current-buffer) t))
+      (when (and (not (get-buffer-window (current-buffer) t))
+                 (not (and rcirc-track-ignore-server-buffer-flag
+                           (eq rcirc-server-buffer (current-buffer)))))
        (setq rcirc-activity
              (sort (if (memq (current-buffer) rcirc-activity) rcirc-activity
                       (cons (current-buffer) rcirc-activity))
                    (lambda (b1 b2)
-                     (let ((t1 (with-current-buffer b1 rcirc-last-post-time))
-                           (t2 (with-current-buffer b2 rcirc-last-post-time)))
+                     (let ((t1 (buffer-local-value 'rcirc-last-post-time b1))
+                           (t2 (buffer-local-value 'rcirc-last-post-time b2)))
                        (time-less-p t2 t1)))))
        (cl-pushnew type rcirc-activity-types)
        (unless (and (equal rcirc-activity old-activity)
@@ -2299,7 +2416,12 @@ activity.  Only run if the buffer is not visible and
 (defun rcirc-short-buffer-name (buffer)
   "Return a short name for BUFFER to use in the mode line indicator."
   (with-current-buffer buffer
-    (or rcirc-short-buffer-name (buffer-name))))
+    (funcall rcirc-channel-filter
+             (replace-regexp-in-string
+              "@.*?\\'" ""
+              (or (and rcirc-track-abbrevate-flag
+                       rcirc-short-buffer-name)
+                  (buffer-name))))))
 
 (defun rcirc-visible-buffers ()
   "Return a list of the visible buffers that are in `rcirc-mode'."
@@ -2408,7 +2530,7 @@ prefix with another element in PAIRS."
            (when (and (listp x) (listp (cadr x)))
              (setcdr x (if (> (length (cdr x)) 1)
                            (rcirc-make-trees (cdr x))
-                          (setcdr x (list (cdadr x)))))))
+                         (setcdr x (list (cdadr x)))))))
          alist)))
 
 ;;; /commands these are called with 3 args: PROCESS, TARGET, which is
@@ -2441,23 +2563,23 @@ that, an interactive form can specified."
                    (insert "\\(.*?\\)")
                    (insert "[[:space:]]*\\'")
                    (buffer-string)))
-         (argument (gensym))
+         (argument (make-symbol "arglist"))
          documentation
          interactive-spec)
     (when (stringp (car body))
       (setq documentation (pop body)))
     (when (eq (car-safe (car-safe body)) 'interactive)
-      (setq interactive-spec (cdr (pop body))))
+      (setq interactive-spec (cadr (pop body))))
     `(progn
        (defun ,fn-name (,argument &optional process target)
          ,(concat documentation
                   "\n\nNote: If PROCESS or TARGET are nil, the values given"
                  "\nby `rcirc-buffer-process' and `rcirc-target' will be 
used.")
-         (interactive (list ,@interactive-spec))
+         (interactive ,interactive-spec)
          (unless (if (listp ,argument)
                      (<= ,required (length ,argument) ,total)
                    (string-match ,regexp ,argument))
-           (user-error "Malformed input (%s): %S" ',command ',argument))
+           (user-error "Malformed input (%s): %S" ',command ,argument))
          (let ((process (or process (rcirc-buffer-process)))
               (target (or target rcirc-target)))
            (ignore target process)
@@ -2533,18 +2655,8 @@ to `rcirc-default-part-reason'."
 (rcirc-define-command reconnect ()
   "Reconnect to current server."
   (interactive "i")
-  (with-rcirc-server-buffer
-    (cond
-     (rcirc-connecting (message "Already connecting"))
-     ((process-live-p process) (message "Server process is alive"))
-     (t (let ((conn-info rcirc-connection-info))
-         (setf (nth 5 conn-info)
-               (cl-remove-if-not #'rcirc-channel-p
-                                 (mapcar #'car rcirc-buffer-alist)))
-          (dolist (buf (nth 5 conn-info))
-            (with-current-buffer (cdr (assoc buf rcirc-buffer-alist))
-              (setq rcirc-reconncting t)))
-         (apply #'rcirc-connect conn-info))))))
+  (setq rcirc-failed-attempts 0)
+  (rcirc-reconnect process))
 
 (rcirc-define-command nick (nick)
   "Change nick to NICK."
@@ -2564,8 +2676,8 @@ With a prefix arg, prompt for new topic."
   (interactive (list (and current-prefix-arg
                           (read-string "List names in channel: "))))
   (if (> (length topic) 0)
-      (rcirc-send-string process "TOPIC" : topic)
-    (rcirc-send-string process "TOPIC")))
+      (rcirc-send-string process "TOPIC" target : topic)
+    (rcirc-send-string process "TOPIC" target)))
 
 (rcirc-define-command whois (nick)
   "Request information from server about NICK."
@@ -3046,11 +3158,11 @@ connection."
       ;; already open buffer (after getting kicked e.g.)
       (setq mode-line-process nil))
 
-    (rcirc-print process sender "JOIN" channel "")
+    (rcirc-print process sender "JOIN" (funcall rcirc-channel-filter channel) 
"")
 
     ;; print in private chat buffer if it exists
     (when (rcirc-get-buffer (rcirc-buffer-process) sender)
-      (rcirc-print process sender "JOIN" sender channel))))
+      (rcirc-print process sender "JOIN" sender (funcall rcirc-channel-filter 
channel)))))
 
 ;; PART and KICK are handled the same way
 (defun rcirc-handler-PART-or-KICK (process _response channel _sender nick 
_args)
@@ -3079,10 +3191,10 @@ PROCESS is the process object for the current 
connection."
   (let* ((channel (car args))
         (reason (cadr args))
         (message (concat channel " " reason)))
-    (rcirc-print process sender "PART" channel message)
+    (rcirc-print process sender "PART" (funcall rcirc-channel-filter channel) 
message)
     ;; print in private chat buffer if it exists
     (when (rcirc-get-buffer (rcirc-buffer-process) sender)
-      (rcirc-print process sender "PART" sender message))
+      (rcirc-print process sender "PART" (funcall rcirc-channel-filter 
channel) message))
 
     (rcirc-handler-PART-or-KICK process "PART" channel sender sender reason)))
 
@@ -3094,7 +3206,7 @@ PROCESS is the process object for the current connection."
         (nick (cadr args))
         (reason (nth 2 args))
         (message (concat nick " " channel " " reason)))
-    (rcirc-print process sender "KICK" channel message t)
+    (rcirc-print process sender "KICK" (funcall rcirc-channel-filter channel) 
message t)
     ;; print in private chat buffer if it exists
     (when (rcirc-get-buffer (rcirc-buffer-process) nick)
       (rcirc-print process sender "KICK" nick message))
@@ -3124,7 +3236,7 @@ PROCESS is the process object for the current connection."
   (rcirc-ignore-update-automatic sender)
   (mapc (lambda (channel)
          ;; broadcast quit message each channel
-         (rcirc-print process sender "QUIT" channel (apply 'concat args))
+         (rcirc-print process sender "QUIT" (funcall rcirc-channel-filter 
channel) (apply 'concat args))
          ;; record nick in quit table if they recently spoke
          (rcirc-maybe-remember-nick-quit process sender channel))
        (rcirc-nick-channels process sender))
@@ -3145,13 +3257,16 @@ PROCESS is the process object for the current 
connection."
     ;; print message to nick's channels
     (dolist (target channels)
       (rcirc-print process sender "NICK" target new-nick))
-    ;; update private chat buffer, if it exists
-    (let ((chat-buffer (rcirc-get-buffer process old-nick)))
-      (when chat-buffer
-       (with-current-buffer chat-buffer
-         (rcirc-print process sender "NICK" old-nick new-nick)
-         (setq rcirc-target new-nick)
-         (rename-buffer (rcirc-generate-new-buffer-name process new-nick)))))
+    ;; update chat buffer, if it exists
+    (when-let ((chat-buffer (rcirc-get-buffer process old-nick)))
+      (with-current-buffer chat-buffer
+       (rcirc-print process sender "NICK" old-nick new-nick)
+       (setq rcirc-target new-nick)
+       (rename-buffer (rcirc-generate-new-buffer-name process new-nick)))
+      (setf rcirc-buffer-alist
+            (cons (cons new-nick chat-buffer)
+                  (delq (assoc-string old-nick rcirc-buffer-alist t)
+                        rcirc-buffer-alist))))
     ;; remove old nick and add new one
     (with-rcirc-process-buffer process
       (let ((v (gethash old-nick rcirc-nick-table)))
@@ -3234,7 +3349,7 @@ RFC1459."
     (with-current-buffer buffer
       (let ((setter (nth 2 args))
            (time (current-time-string
-                   (string-to-number (cadddr args)))))
+                  (string-to-number (cadddr args)))))
        (rcirc-print process sender "TOPIC" (cadr args)
                     (format "%s (%s on %s)" rcirc-topic setter time))))))
 
@@ -3344,7 +3459,7 @@ Passwords are stored in `rcirc-authinfo' (which see)."
            (server (car i))
            (nick (nth 2 i))
            (method (cadr i))
-            (args (cdddr i)))
+           (args (cdddr i)))
        (when (and (string-match server rcirc-server))
           (if (and (memq method '(nickserv chanserv bitlbee))
                    (string-match nick rcirc-nick))
@@ -3381,6 +3496,8 @@ process object for the current connection."
   (let ((self (buffer-local-value 'rcirc-nick rcirc-process))
         (target (car args))
         (chan (cadr args)))
+    ;; `rcirc-channel-filter' is not used here because joining
+    ;; requires an unfiltered name.
     (if (string= target self)
         (rcirc-print process sender "INVITE" nil
                      (format "%s invited you to %s"
@@ -3451,7 +3568,7 @@ is the process object for the current connection."
     (let ((subcmd (cadr args)))
       (dolist (cap (cddr args))
         (cond ((string= subcmd "ACK")
-               (push cap rcirc-acked-capabilities)
+               (push (intern (downcase cap)) rcirc-acked-capabilities)
                (setq rcirc-requested-capabilities
                      (delete cap rcirc-requested-capabilities)))
               ((string= subcmd "NAK")
@@ -3525,13 +3642,36 @@ PROCESS is the process object for the current 
connection."
             "\0" (rcirc-get-server-password rcirc-server)))))
 
 (defun rcirc-handler-900 (process sender args _text)
-  "Respond to a successful authentication response."
+  "Respond to a successful authentication response.
+SENDER is passed on to `rcirc-handler-generic'.  PROCESS is the
+process object for the current connection."
   (rcirc-handler-generic process "900" sender args nil)
   (when (not rcirc-finished-sasl)
     (setq-local rcirc-finished-sasl t)
     (rcirc-send-string process "CAP" "END"))
   (rcirc-join-channels-post-auth process))
 
+(defun rcirc-handler-FAIL (process _sender args _text)
+  "Display a FAIL message, as indicated by ARGS.
+PROCESS is the process object for the current connection."
+  (rcirc-print process nil "FAIL" nil
+               (mapconcat #'identity args " ")
+               t))
+
+(defun rcirc-handler-WARN (process _sender args _text)
+  "Display a WARN message, as indicated by ARGS.
+PROCESS is the process object for the current connection."
+  (rcirc-print process nil "WARN" nil
+               (mapconcat #'identity args " ")
+               t))
+
+(defun rcirc-handler-NOTE (process _sender args _text)
+  "Display a NOTE message, as indicated by ARGS.
+PROCESS is the process object for the current connection."
+  (rcirc-print process nil "NOTE" nil
+               (mapconcat #'identity args " ")
+               t))
+
 
 (defgroup rcirc-faces nil
   "Faces for rcirc."
diff --git a/lisp/net/sasl-cram.el b/lisp/net/sasl-cram.el
index 4022a35b39..2427f4976e 100644
--- a/lisp/net/sasl-cram.el
+++ b/lisp/net/sasl-cram.el
@@ -24,6 +24,8 @@
 
 ;;; Commentary:
 
+;;; Code:
+
 (require 'sasl)
 (require 'hmac-md5)
 
diff --git a/lisp/net/sasl-digest.el b/lisp/net/sasl-digest.el
index 5afc195d4b..3696f526b5 100644
--- a/lisp/net/sasl-digest.el
+++ b/lisp/net/sasl-digest.el
@@ -29,9 +29,9 @@
 ;; It is caller's responsibility to base64-decode challenges and
 ;; base64-encode responses in IMAP4 AUTHENTICATE command.
 ;;
-;; Passphrase should be longer than 16 bytes. (See RFC 2195)
+;; Passphrase should be longer than 16 bytes.  (See RFC 2195)
 
-;;; Commentary:
+;;; Code:
 
 (require 'sasl)
 (require 'hmac-md5)
diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el
index 4102b9d322..4217c219ad 100644
--- a/lisp/net/secrets.el
+++ b/lisp/net/secrets.el
@@ -159,7 +159,7 @@
   "Whether there is a daemon offering the Secret Service API.")
 
 (defvar secrets-debug nil
-  "Write debug messages")
+  "Write debug messages.")
 
 (defconst secrets-service "org.freedesktop.secrets"
   "The D-Bus name used to talk to Secret Service.")
diff --git a/lisp/net/shr-color.el b/lisp/net/shr-color.el
index eb78a259a8..aa92c365f8 100644
--- a/lisp/net/shr-color.el
+++ b/lisp/net/shr-color.el
@@ -30,7 +30,7 @@
 (eval-when-compile (require 'cl-lib))
 
 (defgroup shr-color nil
-  "Simple HTML Renderer colors"
+  "Simple HTML Renderer colors."
   :group 'shr)
 
 (defcustom shr-color-visible-luminance-min 40
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index 85d81b6bbc..a8e15c1e0a 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -43,7 +43,7 @@
 (require 'text-property-search)
 
 (defgroup shr nil
-  "Simple HTML Renderer"
+  "Simple HTML Renderer."
   :version "25.1"
   :group 'web)
 
diff --git a/lisp/net/sieve-manage.el b/lisp/net/sieve-manage.el
index 1f08a15e57..64544bcf15 100644
--- a/lisp/net/sieve-manage.el
+++ b/lisp/net/sieve-manage.el
@@ -410,7 +410,7 @@ If BUFFER is nil, the current buffer is used."
 
 (defun sieve-manage-capability (&optional name value buffer)
   "Check if capability NAME of server BUFFER match VALUE.
-If it does, return the server value of NAME. If not returns nil.
+If it does, return the server value of NAME.  If not return nil.
 If VALUE is nil, do not check VALUE and return server value.
 If NAME is nil, return the full server list of capabilities."
   (with-current-buffer (or buffer (current-buffer))
diff --git a/lisp/net/sieve-mode.el b/lisp/net/sieve-mode.el
index 0e8fdc0a90..70cebd3039 100644
--- a/lisp/net/sieve-mode.el
+++ b/lisp/net/sieve-mode.el
@@ -132,7 +132,7 @@
     (modify-syntax-entry ?\} "){" st)
     (modify-syntax-entry ?\" "\"" st)
     st)
-  "Syntax table in use in sieve-mode buffers.")
+  "Syntax table in use in `sieve-mode' buffers.")
 
 
 ;; Key map definition
diff --git a/lisp/net/sieve.el b/lisp/net/sieve.el
index 6d571a0a30..99bc0a7acd 100644
--- a/lisp/net/sieve.el
+++ b/lisp/net/sieve.el
@@ -224,7 +224,7 @@ require \"fileinto\";
              (substitute-command-keys "\\[sieve-upload]"))))
 
 (defmacro sieve-change-region (&rest body)
-  "Turns off sieve-region before executing BODY, then re-enables it after.
+  "Turn off sieve-region before executing BODY, then re-enables it after.
 Used to bracket operations which move point in the sieve-buffer."
   (declare (indent 0) (debug t))
   `(progn
diff --git a/lisp/net/snmp-mode.el b/lisp/net/snmp-mode.el
index ae878ef3a5..10892ebf61 100644
--- a/lisp/net/snmp-mode.el
+++ b/lisp/net/snmp-mode.el
@@ -328,7 +328,7 @@ Tab indents for C code.
 Comments start with -- and end with newline or another --.
 Delete converts tabs to spaces as it moves back.
 \\{snmp-mode-map}
-Turning on snmp-mode runs the hooks in `snmp-common-mode-hook', then
+Turning on `snmp-mode' runs the hooks in `snmp-common-mode-hook', then
 `snmp-mode-hook'."
   (interactive)
 
@@ -361,7 +361,7 @@ Tab indents for C code.
 Comments start with -- and end with newline or another --.
 Delete converts tabs to spaces as it moves back.
 \\{snmp-mode-map}
-Turning on snmp-mode runs the hooks in `snmp-common-mode-hook',
+Turning on `snmp-mode' runs the hooks in `snmp-common-mode-hook',
 then `snmpv2-mode-hook'."
   (interactive)
 
diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el
index de1cd9d320..6e10b5c4e3 100644
--- a/lisp/net/soap-client.el
+++ b/lisp/net/soap-client.el
@@ -8,7 +8,7 @@
 ;; Version: 3.2.0
 ;; Keywords: soap, web-services, comm, hypermedia
 ;; Package: soap-client
-;; Homepage: https://github.com/alex-hhh/emacs-soap-client
+;; URL: https://github.com/alex-hhh/emacs-soap-client
 ;; Package-Requires: ((cl-lib "0.6.1"))
 ;;FIXME: Put in `Package-Requires:' the Emacs version we expect.
 
diff --git a/lisp/net/soap-inspect.el b/lisp/net/soap-inspect.el
index 6f9ce6a2d6..2192a68791 100644
--- a/lisp/net/soap-inspect.el
+++ b/lisp/net/soap-inspect.el
@@ -6,7 +6,7 @@
 ;; Created: October 2010
 ;; Keywords: soap, web-services, comm, hypermedia
 ;; Package: soap-client
-;; Homepage: https://github.com/alex-hhh/emacs-soap-client
+;; URL: https://github.com/alex-hhh/emacs-soap-client
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/net/socks.el b/lisp/net/socks.el
index 78a261fd83..7ac8bbbf1b 100644
--- a/lisp/net/socks.el
+++ b/lisp/net/socks.el
@@ -453,7 +453,7 @@ When ATYPE indicates an IP, param ADDRESS must be given as 
raw bytes."
 
 ;; Replacement functions for open-network-stream, etc.
 (defvar socks-noproxy nil
-  "List of regexps matching hosts that we should not socksify connections to")
+  "List of regexps matching hosts that we should not socksify connections to.")
 
 (defun socks-find-route (host _service)
   (let ((route socks-server)
diff --git a/lisp/net/telnet.el b/lisp/net/telnet.el
index bb65ecaa98..9aa5d50d6c 100644
--- a/lisp/net/telnet.el
+++ b/lisp/net/telnet.el
@@ -83,8 +83,9 @@ LOGIN-NAME, which is optional, says what to log in as on that 
machine.")
   "Program to run to open a telnet connection.")
 
 (defvar telnet-initial-count -50
-  "Initial value of `telnet-count'.  Should be set to the negative of the
-number of terminal writes telnet will make setting up the host connection.")
+  "Initial value of `telnet-count'.
+Should be set to the negative of the number of terminal writes
+telnet will make setting up the host connection.")
 
 (defvar telnet-maximum-count 4
   "Maximum value `telnet-count' can have.
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index a35ac37a20..46064a8574 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -361,7 +361,7 @@ arguments to pass to the OPERATION."
     (tramp-message vec 5 "Finding a suitable `ls' command")
     (cond
      ;; Support Android derived systems where "ls" command is provided
-     ;; by GNU Coreutils. Force "ls" to print one column and set
+     ;; by GNU Coreutils.  Force "ls" to print one column and set
      ;; time-style to imitate other "ls" flavors.
      ((tramp-adb-send-command-and-check
        vec (concat "ls --time-style=long-iso "
@@ -548,7 +548,7 @@ But handle the case, if the \"test\" command is not 
available."
               (or (eq mustbenew 'excl)
                   (not
                    (y-or-n-p
-                    (format "File %s exists; overwrite anyway? " filename)))))
+                    (format "File %s exists; overwrite anyway?" filename)))))
       (tramp-error v 'file-already-exists filename))
 
     (let ((file-locked (eq (file-locked-p lockname) t))
diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el
index 67798e892a..5e2e1f0602 100644
--- a/lisp/net/tramp-archive.el
+++ b/lisp/net/tramp-archive.el
@@ -190,7 +190,7 @@ It must be supported by libarchive(3).")
 
 ;; In older Emacsen (prior 27.1), `tramp-archive-autoload-file-name-regexp'
 ;; is not autoloaded.  So we cannot expect it to be known in
-;; tramp-loaddefs.el. But it exists, when tramp-archive.el is loaded.
+;; tramp-loaddefs.el.  But it exists, when tramp-archive.el is loaded.
 ;;;###tramp-autoload
 (defconst tramp-archive-file-name-regexp
   (ignore-errors (tramp-archive-autoload-file-name-regexp))
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
index 6278fd302a..bfd928731a 100644
--- a/lisp/net/tramp-cmds.el
+++ b/lisp/net/tramp-cmds.el
@@ -312,7 +312,7 @@ The remote connection identified by SOURCE is flushed by
      (if (null connections)
         (tramp-user-error nil "There are no remote connections.")
        (setq source
-            ;; Likely, the source remote connection is broken. So we
+            ;; Likely, the source remote connection is broken.  So we
             ;; shall avoid any action on it.
             (let (non-essential)
               (completing-read-default
@@ -717,7 +717,7 @@ the debug buffer(s).")
        (setq buffer-read-only t)
        (goto-char (point-min))
 
-       (when (y-or-n-p "Do you want to append the buffer(s)? ")
+       (when (y-or-n-p "Do you want to append the buffer(s)?")
          ;; OK, let's send.  First we delete the buffer list.
          (kill-buffer nil)
          (switch-to-buffer curbuf)
diff --git a/lisp/net/tramp-crypt.el b/lisp/net/tramp-crypt.el
index fdb2907ec3..5f86767ef9 100644
--- a/lisp/net/tramp-crypt.el
+++ b/lisp/net/tramp-crypt.el
@@ -517,7 +517,7 @@ kept in their encrypted form."
              tramp-crypt-encfs-config
              (directory-files name nil directory-files-no-dot-files-regexp))
             (yes-or-no-p
-             "There exist encrypted files, do you want to continue? "))
+             "There exist encrypted files, do you want to continue?"))
     (setq tramp-crypt-directories (delete name tramp-crypt-directories))
     (tramp-register-file-name-handlers)))
 
diff --git a/lisp/net/tramp-ftp.el b/lisp/net/tramp-ftp.el
index fa2df89e49..11ccdc8a4c 100644
--- a/lisp/net/tramp-ftp.el
+++ b/lisp/net/tramp-ftp.el
@@ -120,15 +120,15 @@ pass to the OPERATION."
                 (nth 2 tramp-file-name-structure)
                 (nth 4 tramp-file-name-structure)))
          ;; ange-ftp uses `ange-ftp-ftp-name-arg' and `ange-ftp-ftp-name-res'
-         ;; for optimization in `ange-ftp-ftp-name'. If Tramp wasn't active,
+         ;; for optimization in `ange-ftp-ftp-name'.  If Tramp wasn't active,
          ;; there could be incorrect values from previous calls in case the
-         ;; "ftp" method is used in the Tramp file name. So we unset
+         ;; "ftp" method is used in the Tramp file name.  So we unset
          ;; those values.
          (ange-ftp-ftp-name-arg "")
          (ange-ftp-ftp-name-res nil))
       (cond
        ;; If argument is a symlink, `file-directory-p' and
-       ;; `file-exists-p' call the traversed file recursively. So we
+       ;; `file-exists-p' call the traversed file recursively.  So we
        ;; cannot disable the file-name-handler this case.  We set the
        ;; connection property "started" in order to put the remote
        ;; location into the cache, which is helpful for further
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 25deead813..5f0e7bcd98 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -1815,10 +1815,8 @@ a downcased host name only."
                             (message "%s" message)
                           (pop-to-buffer (current-buffer)))
                         (if (yes-or-no-p
-                             (concat
-                              (buffer-substring
-                               (line-beginning-position) (point))
-                              " "))
+                             (buffer-substring
+                              (line-beginning-position) (point)))
                             0 1)))))
 
                ;; When QUIT is raised, we shall return this
@@ -1840,7 +1838,7 @@ a downcased host name only."
   (ignore-errors
     (let ((signal-name (dbus-event-member-name last-input-event))
          (elt mount-info))
-      ;; Jump over the first elements of the mount info. Since there
+      ;; Jump over the first elements of the mount info.  Since there
       ;; were changes in the entries, we cannot access dedicated
       ;; elements.
       (while (stringp (car elt)) (setq elt (cdr elt)))
@@ -1936,7 +1934,7 @@ a downcased host name only."
              :session tramp-gvfs-service-daemon tramp-gvfs-path-mounttracker
              tramp-gvfs-interface-mounttracker tramp-gvfs-listmounts))
          nil)
-       ;; Jump over the first elements of the mount info. Since there
+       ;; Jump over the first elements of the mount info.  Since there
        ;; were changes in the entries, we cannot access dedicated
        ;; elements.
        (while (stringp (car elt)) (setq elt (cdr elt)))
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index dc049782fd..fbb122e721 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -202,7 +202,7 @@ The string is used in `tramp-methods'.")
                 (tramp-copy-program         "rsync")
                 (tramp-copy-args            (("-t" "%k") ("-p") ("-r") ("-s")
                                             ("-c")))
-                (tramp-copy-env             (("RSYNC_RSH") ("ssh" "%c")))
+                (tramp-copy-env             (("RSYNC_RSH") ("ssh") ("%c")))
                 (tramp-copy-keep-date       t)
                 (tramp-copy-keep-tmpfile    t)
                 (tramp-copy-recursive       t)))
@@ -244,14 +244,14 @@ The string is used in `tramp-methods'.")
  (add-to-list 'tramp-methods
               `("telnet"
                 (tramp-login-program        "telnet")
-                (tramp-login-args           (("%h") ("%p")))
+                (tramp-login-args           (("%h") ("%p") ("%n")))
                 (tramp-remote-shell         ,tramp-default-remote-shell)
                 (tramp-remote-shell-login   ("-l"))
                 (tramp-remote-shell-args    ("-c"))))
  (add-to-list 'tramp-methods
               `("nc"
                 (tramp-login-program        "telnet")
-                (tramp-login-args           (("%h") ("%p")))
+                (tramp-login-args           (("%h") ("%p") ("%n")))
                 (tramp-remote-shell         ,tramp-default-remote-shell)
                 (tramp-remote-shell-login   ("-l"))
                 (tramp-remote-shell-args    ("-c"))
@@ -280,13 +280,14 @@ The string is used in `tramp-methods'.")
                 (tramp-connection-timeout   10)))
  (add-to-list 'tramp-methods
               `("sudo"
-                (tramp-login-program        "sudo")
+                (tramp-login-program        "env")
                 ;; The password template must be masked.  Otherwise,
                 ;; it could be interpreted as password prompt if the
                 ;; remote host echoes the command.
-                (tramp-login-args           (("-u" "%u") ("-s") ("-H")
-                                            ("-p" 
"P\"\"a\"\"s\"\"s\"\"w\"\"o\"\"r\"\"d\"\":")
-                                             ("%l")))
+               ;; The "-p" argument doesn't work reliably, see Bug#50594.
+                (tramp-login-args           
(("SUDO_PROMPT=P\"\"a\"\"s\"\"s\"\"w\"\"o\"\"r\"\"d\"\":")
+                                             ("sudo") ("-u" "%u") ("-s") ("-H")
+                                            ("%l")))
                 (tramp-remote-shell         ,tramp-default-remote-shell)
                 (tramp-remote-shell-login   ("-l"))
                 (tramp-remote-shell-args    ("-c"))
@@ -1063,7 +1064,7 @@ component is used as the target of the symlink."
                         (not
                          (yes-or-no-p
                           (format
-                           "File %s already exists; make it a link anyway? "
+                           "File %s already exists; make it a link anyway?"
                            localname)))))
                (tramp-error v 'file-already-exists localname)
              (delete-file linkname)))
@@ -1072,7 +1073,7 @@ component is used as the target of the symlink."
 
          ;; Right, they are on the same host, regardless of user,
          ;; method, etc.  We now make the link on the remote
-         ;; machine. This will occur as the user that TARGET belongs to.
+         ;; machine.  This will occur as the user that TARGET belongs to.
          (and (tramp-send-command-and-check
                v (format "cd %s" (tramp-shell-quote-argument cwd)))
                (tramp-send-command-and-check
@@ -1824,7 +1825,7 @@ ID-FORMAT valid values are `string' and `integer'."
                  (and (numberp ok-if-already-exists)
                       (not (yes-or-no-p
                             (format
-                             "File %s already exists; make it a link anyway? "
+                             "File %s already exists; make it a link anyway?"
                              v2-localname)))))
              (tramp-error v2 'file-already-exists newname)
            (delete-file newname)))
@@ -2230,7 +2231,7 @@ the uid and gid from FILENAME."
                ;; Save exit.
                (ignore-errors (delete-file tmpfile)))))))))
 
-      ;; Set the time and mode. Mask possible errors.
+      ;; Set the time and mode.  Mask possible errors.
       (ignore-errors
          (when keep-date
            (tramp-compat-set-file-times
@@ -2747,7 +2748,7 @@ the result will be a local, non-Tramp, file name."
 
 ;;; Remote commands:
 
-;; We use BUFFER also as connection buffer during setup. Because of
+;; We use BUFFER also as connection buffer during setup.  Because of
 ;; this, its original contents must be saved, and restored once
 ;; connection has been setup.
 (defun tramp-sh-handle-make-process (&rest args)
@@ -3268,7 +3269,7 @@ implementation will be used."
               (or (eq mustbenew 'excl)
                   (not
                    (y-or-n-p
-                    (format "File %s exists; overwrite anyway? " filename)))))
+                    (format "File %s exists; overwrite anyway?" filename)))))
       (tramp-error v 'file-already-exists filename))
 
     (let ((file-locked (eq (file-locked-p lockname) t))
@@ -3999,7 +4000,7 @@ Returns the absolute file name of PROGNAME, if found, and 
nil otherwise.
 This function expects to be in the right *tramp* buffer."
   (with-current-buffer (tramp-get-connection-buffer vec)
     (let (result)
-      ;; Check whether the executable is in $PATH. "which(1)" does not
+      ;; Check whether the executable is in $PATH.  "which(1)" does not
       ;; report always a correct error code; therefore we check the
       ;; number of words it returns.  "SunOS 5.10" (and maybe "SunOS
       ;; 5.11") have problems with this command, we disable the call
@@ -4903,6 +4904,8 @@ connection if a previous connection has died for some 
reason."
                 (tramp-error vec 'file-error "`tramp-encoding-shell' not set"))
              (let* ((current-host tramp-system-name)
                     (target-alist (tramp-compute-multi-hops vec))
+                    ;; Needed for `tramp-get-remote-null-device'.
+                    (previous-hop nil)
                     ;; We will apply `tramp-ssh-controlmaster-options'
                     ;; only for the first hop.
                     (options (tramp-ssh-controlmaster-options vec))
@@ -5015,6 +5018,8 @@ connection if a previous connection has died for some 
reason."
                        hop 'tramp-login-args
                        ?h (or l-host "") ?u (or l-user "") ?p (or l-port "")
                        ?c (format-spec options (format-spec-make ?t tmpfile))
+                       ?n (concat
+                           "2>" (tramp-get-remote-null-device previous-hop))
                        ?l (concat remote-shell " " extra-args " -i"))
                       ;; A restricted shell does not allow "exec".
                       (when r-shell '("&&" "exit" "||" "exit")))
@@ -5030,10 +5035,12 @@ connection if a previous connection has died for some 
reason."
                     tramp-actions-before-shell
                     (or connection-timeout tramp-connection-timeout))
                    (tramp-message
-                    vec 3 "Found remote shell prompt on `%s'" l-host))
-                 ;; Next hop.
-                 (setq options ""
-                       target-alist (cdr target-alist)))
+                    vec 3 "Found remote shell prompt on `%s'" l-host)
+
+                   ;; Next hop.
+                   (setq options ""
+                         target-alist (cdr target-alist)
+                         previous-hop hop)))
 
                ;; Activate session timeout.
                (when (tramp-get-connection-property p "session-timeout" nil)
@@ -5793,8 +5800,8 @@ This command is returned only if 
`delete-by-moving-to-trash' is non-nil."
 ;; Some predefined connection properties.
 (defun tramp-get-inline-compress (vec prop size)
   "Return the compress command related to PROP.
-PROP is either `inline-compress' or `inline-decompress'. SIZE is
-the length of the file to be compressed.
+PROP is either `inline-compress' or `inline-decompress'.
+SIZE is the length of the file to be compressed.
 
 If no corresponding command is found, nil is returned."
   (when (and (integerp tramp-inline-compress-start-size)
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index 5cfe874f00..5c2d7d008a 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -48,7 +48,7 @@
                   ;; Another guess.  We might implement a better check later 
on.
                   (tramp-case-insensitive t)))))
 
-;; Add a default for `tramp-default-user-alist'. Rule: For the SMB method,
+;; Add a default for `tramp-default-user-alist'.  Rule: For the SMB method,
 ;; the anonymous user is chosen.
 ;;;###tramp-autoload
 (tramp--with-startup
@@ -83,7 +83,7 @@ call, letting the SMB client use the default one."
 They are added to the `tramp-smb-program' call via \"--option '...'\".
 
 For example, if the deprecated SMB1 protocol shall be used, add to
-this variable (\"client min protocol=NT1\") ."
+this variable \"client min protocol=NT1\"."
   :group 'tramp
   :type '(repeat string)
   :version "28.1")
@@ -376,7 +376,7 @@ arguments to pass to the OPERATION."
                (and (numberp ok-if-already-exists)
                     (not (yes-or-no-p
                           (format
-                           "File %s already exists; make it a link anyway? "
+                           "File %s already exists; make it a link anyway?"
                            v2-localname)))))
            (tramp-error v2 'file-already-exists newname)
          (delete-file newname)))
@@ -1247,7 +1247,7 @@ component is used as the target of the symlink."
                  (and (numberp ok-if-already-exists)
                       (not (yes-or-no-p
                             (format
-                             "File %s already exists; make it a link anyway? "
+                             "File %s already exists; make it a link anyway?"
                              localname)))))
              (tramp-error v 'file-already-exists localname)
            (delete-file linkname)))
@@ -1526,7 +1526,7 @@ component is used as the target of the symlink."
          (tramp-error
           v 'file-error "Error while changing file's mode %s" filename))))))
 
-;; We use BUFFER also as connection buffer during setup. Because of
+;; We use BUFFER also as connection buffer during setup.  Because of
 ;; this, its original contents must be saved, and restored once
 ;; connection has been setup.
 (defun tramp-smb-handle-start-file-process (name buffer program &rest args)
@@ -1603,7 +1603,7 @@ errors for shares like \"C$/\", which are common in 
Microsoft Windows."
               (or (eq mustbenew 'excl)
                   (not
                    (y-or-n-p
-                    (format "File %s exists; overwrite anyway? " filename)))))
+                    (format "File %s exists; overwrite anyway?" filename)))))
       (tramp-error v 'file-already-exists filename))
 
     (let ((file-locked (eq (file-locked-p lockname) t))
@@ -1703,7 +1703,7 @@ If VEC has no cifs capabilities, exchange \"/\" by 
\"\\\\\"."
 
       localname)))
 
-;; Share names of a host are cached. It is very unlikely that the
+;; Share names of a host are cached.  It is very unlikely that the
 ;; shares do change during connection.
 (defun tramp-smb-get-file-entries (directory)
   "Read entries which match DIRECTORY.
@@ -2049,7 +2049,10 @@ If ARGUMENT is non-nil, use it as argument for
            (let* ((coding-system-for-read nil)
                   (process-connection-type tramp-process-connection-type)
                   (p (let ((default-directory
-                             (tramp-compat-temporary-file-directory)))
+                             (tramp-compat-temporary-file-directory))
+                           (process-environment
+                            (cons (concat "TERM=" tramp-terminal-type)
+                                  process-environment)))
                        (apply #'start-process
                               (tramp-get-connection-name vec)
                               (tramp-get-connection-buffer vec)
@@ -2200,5 +2203,7 @@ Removes smb prompt.  Returns nil if an error message has 
appeared."
 ;;
 ;; * Try to remove the inclusion of dummy "" directory.  Seems to be at
 ;;   several places, especially in `tramp-smb-handle-insert-directory'.
+;;
+;; * Keep a separate connection process per share.
 
 ;;; tramp-smb.el ends here
diff --git a/lisp/net/tramp-sshfs.el b/lisp/net/tramp-sshfs.el
index c5b84a6e4e..0019ac014f 100644
--- a/lisp/net/tramp-sshfs.el
+++ b/lisp/net/tramp-sshfs.el
@@ -292,7 +292,7 @@ arguments to pass to the OPERATION."
               (or (eq mustbenew 'excl)
                   (not
                    (y-or-n-p
-                    (format "File %s exists; overwrite anyway? " filename)))))
+                    (format "File %s exists; overwrite anyway?" filename)))))
       (tramp-error v 'file-already-exists filename))
 
     (let ((file-locked (eq (file-locked-p lockname) t)))
diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el
index 051d145c2a..516d46da37 100644
--- a/lisp/net/tramp-sudoedit.el
+++ b/lisp/net/tramp-sudoedit.el
@@ -190,7 +190,7 @@ arguments to pass to the OPERATION."
                  (and (numberp ok-if-already-exists)
                       (not (yes-or-no-p
                             (format
-                             "File %s already exists; make it a link anyway? "
+                             "File %s already exists; make it a link anyway?"
                              v2-localname)))))
              (tramp-error v2 'file-already-exists newname)
            (delete-file newname)))
@@ -632,7 +632,7 @@ component is used as the target of the symlink."
                       (not
                        (yes-or-no-p
                         (format
-                         "File %s already exists; make it a link anyway? "
+                         "File %s already exists; make it a link anyway?"
                          localname)))))
              (tramp-error v 'file-already-exists localname)
            (delete-file linkname)))
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 0182248dfa..93ec8d6934 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -861,7 +861,7 @@ Used in `tramp-make-tramp-file-name'.")
 
 (defvar tramp-prefix-regexp nil ;Initialized when defining `tramp-syntax'!
   "Regexp matching the very beginning of Tramp file names.
-Should always start with \"^\". Derived from `tramp-prefix-format'.")
+Should always start with \"^\".  Derived from `tramp-prefix-format'.")
 
 (defconst tramp-method-regexp-alist
   '((default    . "[[:alnum:]-]+")
@@ -1929,7 +1929,7 @@ The outline level is equal to the verbosity of the Tramp 
message."
 (put #'tramp-trace-buffer-name 'tramp-suppress-trace t)
 
 (defvar tramp-trace-functions nil
-  "A list of non-Tramp functions to be traced with tramp-verbose > 10.")
+  "A list of non-Tramp functions to be traced with `tramp-verbose' > 10.")
 
 (defun tramp-debug-message (vec fmt-string &rest arguments)
   "Append message to debug buffer of VEC.
@@ -2379,7 +2379,7 @@ For definition of that list see 
`tramp-set-completion-function'."
 
 ;; Inodes don't exist for some file systems.  Therefore we must
 ;; generate virtual ones.  Used in `find-buffer-visiting'.  The method
-;; applied might be not so efficient (Ange-FTP uses hashes). But
+;; applied might be not so efficient (Ange-FTP uses hashes).  But
 ;; performance isn't the major issue given that file transfer will
 ;; take time.
 (defvar tramp-inodes 0
@@ -2908,7 +2908,7 @@ not in completion mode."
 ;; I misuse a little bit the `tramp-file-name' structure in order to
 ;; handle completion possibilities for partial methods / user names /
 ;; host names.  Return value is a list of `tramp-file-name' structures
-;; according to possible completions. If "localname" is non-nil it
+;; according to possible completions.  If "localname" is non-nil it
 ;; means there shouldn't be a completion anymore.
 
 ;; Expected results:
@@ -3288,7 +3288,7 @@ User is always nil."
              (and (numberp ok-if-already-exists)
                   (not (yes-or-no-p
                         (format
-                         "File %s already exists; make it a link anyway? "
+                         "File %s already exists; make it a link anyway?"
                          localname)))))
          (tramp-error v 'file-already-exists newname)
        (delete-file newname)))
@@ -3463,7 +3463,7 @@ User is always nil."
     (or ;; Maybe there is a default value.
      (tramp-get-method-parameter v 'tramp-case-insensitive)
 
-     ;; There isn't. So we must check, in case there's a connection already.
+     ;; There isn't.  So we must check, in case there's a connection already.
      (and (file-remote-p filename nil 'connected)
           (with-tramp-connection-property v "case-insensitive"
            (ignore-errors
@@ -3694,7 +3694,7 @@ User is always nil."
                          (yes-or-no-p
                           (concat
                            "Backup file on local temporary directory, "
-                           "do you want to continue? ")))))
+                           "do you want to continue?")))))
          (tramp-error v 'file-error "Unsafe backup file name"))))))
 
 (defun tramp-handle-insert-directory
@@ -3915,7 +3915,7 @@ Return nil when there is no lockfile."
                            (yes-or-no-p
                             (concat
                              "Lock file on local temporary directory, "
-                             "do you want to continue? ")))))
+                             "do you want to continue?")))))
            (tramp-error v 'file-error "Unsafe lock file name")))
 
        ;; Do the lock.
@@ -4274,13 +4274,13 @@ support symbolic links."
        ((eq async-shell-command-buffer 'confirm-kill-process)
        ;; If will kill a process, query first.
        (if (yes-or-no-p
-            "A command is running in the default buffer.  Kill it? ")
+            "A command is running in the default buffer.  Kill it?")
            (kill-process p)
          (tramp-user-error p "Shell command in progress")))
        ((eq async-shell-command-buffer 'confirm-new-buffer)
        ;; If will create a new buffer, query first.
        (if (yes-or-no-p
-            "A command is running in the default buffer.  Use a new buffer? ")
+            "A command is running in the default buffer.  Use a new buffer?")
             (setq output-buffer (generate-new-buffer bname))
          (tramp-user-error p "Shell command in progress")))
        ((eq async-shell-command-buffer 'new-buffer)
@@ -4289,7 +4289,7 @@ support symbolic links."
        ((eq async-shell-command-buffer 'confirm-rename-buffer)
        ;; If will rename the buffer, query first.
        (if (yes-or-no-p
-            "A command is running in the default buffer.  Rename it? ")
+            "A command is running in the default buffer.  Rename it?")
            (progn
              (with-current-buffer output-buffer
                (rename-uniquely))
@@ -4492,7 +4492,7 @@ of."
               (or (eq mustbenew 'excl)
                   (not
                    (y-or-n-p
-                    (format "File %s exists; overwrite anyway? " filename)))))
+                    (format "File %s exists; overwrite anyway?" filename)))))
       (tramp-error v 'file-already-exists filename))
 
     (let ((file-locked (eq (file-locked-p lockname) t))
@@ -5468,7 +5468,7 @@ this file, if that variable is non-nil."
                          (yes-or-no-p
                           (concat
                            "Autosave file on local temporary directory, "
-                           "do you want to continue? ")))))
+                           "do you want to continue?")))))
          (tramp-error v 'file-error "Unsafe autosave file name"))))))
 
 (defun tramp-subst-strs-in-string (alist string)
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index 8ad641ee45..8baf0780c2 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -29,7 +29,7 @@
 
 ;;; Commentary:
 
-;; Convenience functions around the Tramp version. Partly generated
+;; Convenience functions around the Tramp version.  Partly generated
 ;; during Tramp configuration.
 
 ;;; Code:
diff --git a/lisp/net/webjump.el b/lisp/net/webjump.el
index 4baa657c0a..d14d382aac 100644
--- a/lisp/net/webjump.el
+++ b/lisp/net/webjump.el
@@ -79,10 +79,10 @@
      ;; GNU FTP Mirror List from https://www.gnu.org/order/ftp.html
      [mirrors "https://ftp.gnu.org/pub/gnu/";
               "https://ftpmirror.gnu.org";])
-    ("GNU Project Home Page" . "www.gnu.org")
+    ("GNU Project Website" . "www.gnu.org")
 
     ;; Emacs.
-    ("Emacs Home Page" .
+    ("Emacs Website" .
      "www.gnu.org/software/emacs/emacs.html")
     ("Savannah Emacs page" .
      "savannah.gnu.org/projects/emacs")
diff --git a/lisp/net/zeroconf.el b/lisp/net/zeroconf.el
index d5da73bd85..98be0e0158 100644
--- a/lisp/net/zeroconf.el
+++ b/lisp/net/zeroconf.el
@@ -104,7 +104,7 @@
 (require 'dbus)
 
 (defvar zeroconf-debug nil
-  "Write messages during service discovery")
+  "Write messages during service discovery.")
 
 (defconst zeroconf-service-avahi "org.freedesktop.Avahi"
   "The D-Bus name used to talk to Avahi.")
@@ -375,7 +375,7 @@ type used when registering FUNCTION."
 (defun zeroconf-get-service (name type)
   "Return the service description of service NAME as list.
 NAME must be a string.  The service must be of service type
-TYPE. The resulting list has the format
+TYPE.  The resulting list has the format
 
   (INTERFACE PROTOCOL NAME TYPE DOMAIN FLAGS)."
   ;; Due to the service browser, all known services are kept in
@@ -387,7 +387,7 @@ TYPE. The resulting list has the format
 (defun zeroconf-resolve-service (service)
   "Return all service attributes SERVICE as list.
 NAME must be a string.  The service must be of service type
-TYPE. The resulting list has the format
+TYPE.  The resulting list has the format
 
   (INTERFACE PROTOCOL NAME TYPE DOMAIN HOST APROTOCOL ADDRESS PORT TXT FLAGS)."
   (let* ((name (zeroconf-service-name service))
diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index b458f0356d..52e7f09b69 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -161,11 +161,11 @@ comments always start in column zero.")
 
 (defvar-local comment-combine-change-calls t
   "If non-nil (the default), use `combine-change-calls' around
-  calls of `comment-region-function' and
-  `uncomment-region-function'.  This Substitutes a single call to
-  each of the hooks `before-change-functions' and
-  `after-change-functions' in place of those hooks being called
-  for each individual buffer change.")
+calls of `comment-region-function' and
+`uncomment-region-function'.  This Substitutes a single call to
+each of the hooks `before-change-functions' and
+`after-change-functions' in place of those hooks being called
+for each individual buffer change.")
 
 (defvar comment-region-function 'comment-region-default
   "Function to comment a region.
diff --git a/lisp/notifications.el b/lisp/notifications.el
index ebd74dd3ef..c1b83dc155 100644
--- a/lisp/notifications.el
+++ b/lisp/notifications.el
@@ -168,7 +168,7 @@ Various PARAMS can be set:
  :sound-file     The path to a sound file to play when the notification pops 
up.
  :sound-name     A themable named sound from the freedesktop.org sound naming
                  specification to play when the notification pops up.
-                 Similar to icon-name,only for sounds. An example would
+                 Similar to icon-name, only for sounds.  An example would
                  be \"message-new-instant\".
  :suppress-sound Causes the server to suppress playing any sounds, if it has
                  that ability.
diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el
index 405f803325..c5c9dfb2af 100644
--- a/lisp/nxml/nxml-mode.el
+++ b/lisp/nxml/nxml-mode.el
@@ -106,9 +106,10 @@ nor UTF-8."
 (defcustom nxml-prefer-utf-16-little-to-big-endian-flag (eq system-type
                                                            'windows-nt)
   "Non-nil means prefer little-endian to big-endian byte-order for UTF-16.
-This is used only for saving a buffer; when reading the byte-order is
-auto-detected. It may be relevant both when there is no encoding declaration
-and when the encoding declaration specifies `UTF-16'."
+This is used only for saving a buffer; when reading the
+byte-order is auto-detected.  It may be relevant both when there
+is no encoding declaration and when the encoding declaration
+specifies `UTF-16'."
   :group 'nxml
   :type 'boolean
   :safe #'booleanp)
@@ -392,11 +393,11 @@ reference.")
     (define-key map "/" 'nxml-electric-slash)
     (define-key map "\M-\t" 'completion-at-point)
     map)
-  "Keymap for nxml-mode.")
+  "Keymap for `nxml-mode'.")
 
 (defvar nxml-font-lock-keywords
   '(nxml-fontify-matcher)
-  "Default font lock keywords for nxml-mode.")
+  "Default font lock keywords for `nxml-mode'.")
 
 (defsubst nxml-set-face (start end face)
   (when (and face (< start end))
@@ -576,7 +577,7 @@ Many aspects this mode can be customized using
     string)
 
 (defun nxml-cleanup ()
-  "Clean up after nxml-mode."
+  "Clean up after `nxml-mode'."
   ;; Disable associated minor modes.
   (rng-validate-mode -1)
   ;; Clean up fontification.
@@ -2269,7 +2270,7 @@ ENDP is t in the former case, nil in the latter."
 (defun nxml-dynamic-markup-word ()
   "Dynamically markup the word before point.
 This attempts to find a tag to put around the word before point based
-on the contents of the current buffer. The end-tag will be inserted at
+on the contents of the current buffer.  The end-tag will be inserted at
 point.  The start-tag will be inserted at or before the beginning of
 the word before point; the contents of the current buffer is used to
 decide where.
diff --git a/lisp/nxml/nxml-ns.el b/lisp/nxml/nxml-ns.el
index e33140c0a4..93ffb215fb 100644
--- a/lisp/nxml/nxml-ns.el
+++ b/lisp/nxml/nxml-ns.el
@@ -95,7 +95,7 @@ Return nil if there is no default namespace."
   (caar nxml-ns-state))
 
 (defun nxml-ns-set-default (ns)
-  "Changes the current default namespace.
+  "Change the current default namespace.
 The change will be in effect until the end of the current element.
 NS is a symbol or nil."
   (setq nxml-ns-state
diff --git a/lisp/nxml/nxml-outln.el b/lisp/nxml/nxml-outln.el
index c265b19cf0..681b297b48 100644
--- a/lisp/nxml/nxml-outln.el
+++ b/lisp/nxml/nxml-outln.el
@@ -40,7 +40,7 @@
 ;; For state 3 it is t.
 ;; The special display is achieved by using overlays.  The overlays
 ;; are computed from the nxml-outline-state property by
-;; `nxml-refresh-outline'. There overlays all have a category property
+;; `nxml-refresh-outline'.  There overlays all have a category property
 ;; with an nxml-outline-display property with value t.
 ;;
 ;; For a section to be recognized as such, the following conditions must
@@ -445,7 +445,7 @@ non-transparent child section."
        (cond ((not (nxml-section-tag-forward))
               (if (null tag-qnames)
                   nil
-                (nxml-outline-error "missing end-tag %s"
+                 (nxml-outline-error "Missing end-tag %s"
                                     (car tag-qnames))))
              ;; section end-tag
              ((nxml-token-end-tag-p)
@@ -455,9 +455,9 @@ non-transparent child section."
                          xmltok-start))
               (let ((qname (xmltok-end-tag-qname)))
                 (unless tag-qnames
-                  (nxml-outline-error "extra end-tag %s" qname))
+                   (nxml-outline-error "Extra end-tag %s" qname))
                 (unless (string= (car tag-qnames) qname)
-                  (nxml-outline-error "mismatched end-tag; expected %s, got %s"
+                   (nxml-outline-error "Mismatched end-tag; expected %s, got 
%s"
                                       (car tag-qnames)
                                       qname)))
               (cond ((> transparent-depth 0)
@@ -938,7 +938,7 @@ If unbalanced section tags are found, signal an 
`nxml-outline-error'."
                       (setq found t))
                   (let ((qname (xmltok-start-tag-qname)))
                     (unless (string= (car open-tags) qname)
-                      (nxml-outline-error "mismatched end-tag"))
+                       (nxml-outline-error "Mismatched end-tag"))
                     (setq open-tags (cdr open-tags)))))
               (goto-char section-start-pos)
               (and (not found)
diff --git a/lisp/nxml/nxml-rap.el b/lisp/nxml/nxml-rap.el
index 6f742746e9..fa127da874 100644
--- a/lisp/nxml/nxml-rap.el
+++ b/lisp/nxml/nxml-rap.el
@@ -22,14 +22,14 @@
 
 ;;; Commentary:
 
-;; This uses xmltok.el to do XML parsing. The fundamental problem is
-;; how to handle changes. We don't want to maintain a complete parse
+;; This uses xmltok.el to do XML parsing.  The fundamental problem is
+;; how to handle changes.  We don't want to maintain a complete parse
 ;; tree.  We also don't want to reparse from the start of the document
 ;; on every keystroke.  However, it is not possible in general to
 ;; parse an XML document correctly starting at a random point in the
 ;; middle.  The main problems are comments, CDATA sections and
 ;; processing instructions: these can all contain things that are
-;; indistinguishable from elements. Literals in the prolog are also a
+;; indistinguishable from elements.  Literals in the prolog are also a
 ;; problem.  Attribute value literals are not a problem because
 ;; attribute value literals cannot contain less-than signs.
 ;;
@@ -47,14 +47,14 @@
 ;; we have found.
 ;;
 ;; The prolog has to be parsed specially, so we also keep track of the
-;; end of the prolog in `nxml-prolog-end'. The prolog is reparsed on
+;; end of the prolog in `nxml-prolog-end'.  The prolog is reparsed on
 ;; every change to the prolog.  This won't work well if people try to
-;; edit huge internal subsets. Hopefully that will be rare.
+;; edit huge internal subsets.  Hopefully that will be rare.
 ;;
 ;; We rely on the `syntax-propertize-function' machinery to keep track
 ;; of the changes in the buffer.  Fontification also relies on correct
 ;; `syntax-table' properties.  This means that scanning for these
-;; constructs had better be quick.  Fortunately it is. Firstly, the
+;; constructs had better be quick.  Fortunately it is.  Firstly, the
 ;; typical proportion of comments, CDATA sections and processing
 ;; instructions is small relative to other things.  Secondly, to scan
 ;; we just search for the regexp <[!?].
@@ -191,7 +191,7 @@ Leave point unmoved if it is not inside anything special."
 (defun nxml-scan-element-forward (from &optional up)
   "Scan forward from FROM over a single balanced element.
 Point must be between tokens.  Return the position of the end of
-the tag that ends the element. `xmltok-start' will contain the
+the tag that ends the element.  `xmltok-start' will contain the
 position of the start of the tag.  If UP is non-nil, then scan
 past end-tag of element containing point.  If no element is
 found, return nil.  If a well-formedness error prevents scanning,
@@ -242,7 +242,7 @@ expected `%s'"
 (defun nxml-scan-element-backward (from &optional up bound)
   "Scan backward from FROM over a single balanced element.
 Point must be between tokens.  Return the position of the end of
-the tag that starts the element. `xmltok-start' will contain the
+the tag that starts the element.  `xmltok-start' will contain the
 position of the start of the tag.  If UP is non-nil, then scan
 past start-tag of element containing point.  If BOUND is non-nil,
 then don't scan back past BOUND.  If no element is found, return
diff --git a/lisp/nxml/rng-nxml.el b/lisp/nxml/rng-nxml.el
index d70a346159..35faae3062 100644
--- a/lisp/nxml/rng-nxml.el
+++ b/lisp/nxml/rng-nxml.el
@@ -35,7 +35,7 @@
 (require 'sgml-mode)
 
 (defcustom rng-nxml-auto-validate-flag t
-  "Non-nil means automatically turn on validation with nxml-mode."
+  "Non-nil means automatically turn on validation with `nxml-mode'."
   :type 'boolean
   :group 'relax-ng)
 
diff --git a/lisp/nxml/rng-valid.el b/lisp/nxml/rng-valid.el
index a5eb893c55..fca666115a 100644
--- a/lisp/nxml/rng-valid.el
+++ b/lisp/nxml/rng-valid.el
@@ -25,15 +25,15 @@
 ;; For usage information, see the documentation for rng-validate-mode.
 ;;
 ;; This file provides a minor mode that continually validates a buffer
-;; against a RELAX NG schema. The validation state is used to support
-;; schema-sensitive editing as well as validation. Validation is
+;; against a RELAX NG schema.  The validation state is used to support
+;; schema-sensitive editing as well as validation.  Validation is
 ;; performed while Emacs is idle.  XML parsing is done using
-;; xmltok.el. This file is responsible for checking that end-tags
+;; xmltok.el.  This file is responsible for checking that end-tags
 ;; match their start-tags.  Namespace processing is handled by
-;; nxml-ns.el. The RELAX NG Compact Syntax schema is parsed into
+;; nxml-ns.el.  The RELAX NG Compact Syntax schema is parsed into
 ;; internal form by rng-cmpct.el.  This internal form is described by
 ;; rng-pttrn.el.  Validation of the document by matching against this
-;; internal form is done by rng-match.el. Handling of W3C XML Schema
+;; internal form is done by rng-match.el.  Handling of W3C XML Schema
 ;; datatypes is delegated by rng-match.el to rng-xsd.el.  The minor
 ;; mode is intended to be used in conjunction with the nxml major
 ;; mode, but does not have to be.
@@ -44,11 +44,11 @@
 ;; parse and validate it from start to end.  As we parse and validate
 ;; the buffer, we periodically cache the state.  The state has three
 ;; components: the stack of open elements, the namespace processing
-;; state and the RELAX NG validation state. The state is cached as the
+;; state and the RELAX NG validation state.  The state is cached as the
 ;; value of the rng-state text property on the closing greater-than of
 ;; tags (but at intervals, not on every tag).  We keep track of the
 ;; position up to which cached state is known to be correct by adding
-;; a function to the buffer's after-change-functions. This is stored
+;; a function to the buffer's after-change-functions.  This is stored
 ;; in the rng-validate-up-to-date-end variable.  The first way in
 ;; which we make validation incremental is obvious: we start
 ;; validation from the first cached state before
@@ -59,7 +59,7 @@
 ;; minimizing destructive changes to the objects storing the state.
 ;; When state is changed, we use the old state to create new objects
 ;; representing the new state rather than destructively modifying the
-;; objects representing the old state. Copying the state is just a
+;; objects representing the old state.  Copying the state is just a
 ;; matter of making a list of three objects, one for each component of
 ;; the state; the three objects themselves can be shared and do not
 ;; need to be copied.
@@ -261,7 +261,7 @@ to use for finding the schema."
         (remove-hook 'after-change-functions #'rng-after-change-function t))))
 
 (defun rng-set-schema-file-and-validate (filename)
-  "Sets the schema and turns on `rng-validate-mode' if not already on.
+  "Set the schema and turn on `rng-validate-mode' if not already on.
 The schema is set like `rng-set-schema'."
   (interactive "fSchema file: ")
   (rng-set-schema-file filename)
diff --git a/lisp/nxml/rng-xsd.el b/lisp/nxml/rng-xsd.el
index 9941aba6eb..e4c76b220a 100644
--- a/lisp/nxml/rng-xsd.el
+++ b/lisp/nxml/rng-xsd.el
@@ -22,7 +22,7 @@
 
 ;;; Commentary:
 
-;; The main entry point is `rng-xsd-compile'. The validator
+;; The main entry point is `rng-xsd-compile'.  The validator
 ;; knows to use this for the datatype library with URI
 ;; https://www.w3.org/2001/XMLSchema-datatypes because it
 ;; is the value of the rng-dt-compile property on that URI
diff --git a/lisp/nxml/xmltok.el b/lisp/nxml/xmltok.el
index 38bc2e141e..6159e00c51 100644
--- a/lisp/nxml/xmltok.el
+++ b/lisp/nxml/xmltok.el
@@ -22,13 +22,13 @@
 
 ;;; Commentary:
 
-;; This implements an XML 1.0 parser. It also implements the XML
+;; This implements an XML 1.0 parser.  It also implements the XML
 ;; Namespaces Recommendation.  It is designed to be conforming, but it
-;; works a bit differently from a normal XML parser. An XML document
+;; works a bit differently from a normal XML parser.  An XML document
 ;; consists of the prolog and an instance.  The prolog is parsed as a
 ;; single unit using `xmltok-forward-prolog'.  The instance is
 ;; considered as a sequence of tokens, where a token is something like
-;; a start-tag, a comment, a chunk of data or a CDATA section. The
+;; a start-tag, a comment, a chunk of data or a CDATA section.  The
 ;; tokenization of the instance is stateless: the tokenization of one
 ;; part of the instance does not depend on tokenization of the
 ;; preceding part of the instance.  This allows the instance to be
@@ -70,7 +70,7 @@
 ;; value literals specifying default attribute values, and default
 ;; attribute values are not reported to the client.
 ;;
-;; 2. It does not implement internal entities containing elements. If
+;; 2. It does not implement internal entities containing elements.  If
 ;; an internal entity is referenced and parsing its replacement text
 ;; yields one or more tags, then it will skip the reference and
 ;; report this to the client.
diff --git a/lisp/obsolete/rcompile.el b/lisp/obsolete/rcompile.el
index d7020f0d07..ff7d1dcdce 100644
--- a/lisp/obsolete/rcompile.el
+++ b/lisp/obsolete/rcompile.el
@@ -108,7 +108,7 @@ nil means run no commands."
 
 ;;;; entry point
 
-;; We use the Tramp internal function`tramp-make-tramp-file-name'.
+;; We use the Tramp internal function `tramp-make-tramp-file-name'.
 ;; Better would be, if there are functions to provide user, host and
 ;; localname of a remote filename, independent of Tramp's implementation.
 ;; The function calls are wrapped by `funcall' in order to pacify the byte
diff --git a/lisp/obsolete/vc-arch.el b/lisp/obsolete/vc-arch.el
index cfbf981d3c..fbbd2d4ecf 100644
--- a/lisp/obsolete/vc-arch.el
+++ b/lisp/obsolete/vc-arch.el
@@ -24,7 +24,7 @@
 
 ;;; Commentary:
 
-;; The home page of the Arch version control system is at
+;; The Arch version control system website is at
 ;;
 ;;      https://www.gnu.org/software/gnu-arch/
 ;;
diff --git a/lisp/org/ob-sql.el b/lisp/org/ob-sql.el
index 947acef1b2..0a08925d4f 100644
--- a/lisp/org/ob-sql.el
+++ b/lisp/org/ob-sql.el
@@ -189,8 +189,8 @@ Otherwise, use Emacs' standard conversion function."
   "Return database connection parameter NAME.
 Given a parameter NAME, if :dbconnection is defined in PARAMS
 then look for the parameter into the corresponding connection
-defined in `sql-connection-alist`, otherwise look into PARAMS.
-Look `sql-connection-alist` (part of SQL mode) for how to define
+defined in `sql-connection-alist', otherwise look into PARAMS.
+See `sql-connection-alist' (part of SQL mode) for how to define
 database connections."
   (if (assq :dbconnection params)
       (let* ((dbconnection (cdr (assq :dbconnection params)))
diff --git a/lisp/org/ol.el b/lisp/org/ol.el
index 38e2dd6a02..4b7f2081a8 100644
--- a/lisp/org/ol.el
+++ b/lisp/org/ol.el
@@ -444,7 +444,7 @@ negates this setting for the duration of the command."
   :safe (lambda (val) (or (booleanp val) (integerp val))))
 
 (defcustom org-link-email-description-format "Email %c: %s"
-  "Format of the description part of a link to an email or usenet message.
+  "Format of the description part of a link to an email or Usenet message.
 The following %-escapes will be replaced by corresponding information:
 
 %F   full \"From\" field
diff --git a/lisp/org/org-compat.el b/lisp/org/org-compat.el
index b68e5b58fc..7f97ac9c2a 100644
--- a/lisp/org/org-compat.el
+++ b/lisp/org/org-compat.el
@@ -179,9 +179,9 @@ This is a floating point number if the size is too large 
for an integer."
 Case is significant."
     (string< s1 s2)))
 
-;; The time- functions below translate nil to `current-time` and
-;; accept an integer as of Emacs 25.  `decode-time` and
-;; `format-time-string` accept nil on Emacs 24 but don't accept an
+;; The time- functions below translate nil to 'current-time' and
+;; accept an integer as of Emacs 25.  'decode-time' and
+;; 'format-time-string' accept nil on Emacs 24 but don't accept an
 ;; integer until Emacs 25.
 (if (< emacs-major-version 25)
     (let ((convert
diff --git a/lisp/org/org-list.el b/lisp/org/org-list.el
index f97164ee33..ddb47dd190 100644
--- a/lisp/org/org-list.el
+++ b/lisp/org/org-list.el
@@ -3355,7 +3355,7 @@ Valid parameters are:
     (when (and backend (symbolp backend) (not (org-export-get-backend 
backend)))
       (user-error "Unknown :backend value"))
     (unless backend (require 'ox-org))
-    ;; When`:raw' property has a non-nil value, turn all objects back
+    ;; When ':raw' property has a non-nil value, turn all objects back
     ;; into Org syntax.
     (when (and backend (plist-get params :raw))
       (org-element-map data org-element-all-objects
diff --git a/lisp/org/org-timer.el b/lisp/org/org-timer.el
index 852d18579a..e2116be701 100644
--- a/lisp/org/org-timer.el
+++ b/lisp/org/org-timer.el
@@ -400,16 +400,16 @@ prompt the user if she wants to replace it.
 Called with a numeric prefix argument, use this numeric value as
 the duration of the timer in minutes.
 
-Called with a `C-u' prefix arguments, use `org-timer-default-timer'
+Called with a \\[universal-argument] prefix arguments, use 
`org-timer-default-timer'
 without prompting the user for a duration.
 
-With two `C-u' prefix arguments, use `org-timer-default-timer'
+With two \\[universal-argument] prefix arguments, use `org-timer-default-timer'
 without prompting the user for a duration and automatically
 replace any running timer.
 
 By default, the timer duration will be set to the number of
 minutes in the Effort property, if any.  You can ignore this by
-using three `C-u' prefix arguments."
+using three \\[universal-argument] prefix arguments."
   (interactive "P")
   (when (and org-timer-start-time
             (not org-timer-countdown-timer))
diff --git a/lisp/org/org.el b/lisp/org/org.el
index f560c65dc4..d03676e3fb 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -19651,15 +19651,15 @@ When BLOCK-REGEXP is non-nil, use this regexp to find 
blocks."
 ;; example-block) don't accept comments.  Usual Emacs comment commands
 ;; cannot cope with those requirements.  Therefore, Org replaces them.
 
-;; Org still relies on `comment-dwim', but cannot trust
-;; `comment-only-p'.  So, `comment-region-function' and
-;; `uncomment-region-function' both point
-;; to`org-comment-or-uncomment-region'.  Eventually,
-;; `org-insert-comment' takes care of insertion of comments at the
+;; Org still relies on 'comment-dwim', but cannot trust
+;; 'comment-only-p'.  So, 'comment-region-function' and
+;; 'uncomment-region-function' both point
+;; to 'org-comment-or-uncomment-region'.  Eventually,
+;; 'org-insert-comment' takes care of insertion of comments at the
 ;; beginning of line.
 
-;; `org-setup-comments-handling' install comments related variables
-;; during `org-mode' initialization.
+;; 'org-setup-comments-handling' install comments related variables
+;; during 'org-mode' initialization.
 
 (defun org-setup-comments-handling ()
   (interactive)
diff --git a/lisp/org/ox.el b/lisp/org/ox.el
index 36ecf01483..d412f57360 100644
--- a/lisp/org/ox.el
+++ b/lisp/org/ox.el
@@ -294,7 +294,7 @@ and its CDR is a list of export options.")
 
 (defvar org-export-dispatch-last-position (make-marker)
   "The position where the last export command was created using the dispatcher.
-This marker will be used with `C-u C-c C-e' to make sure export repetition
+This marker will be used with `\\[universal-argument] C-c C-e' to make sure 
export repetition
 uses the same subtree if the previous command was restricted to a subtree.")
 
 ;; For compatibility with Org < 8
diff --git a/lisp/pixel-scroll.el b/lisp/pixel-scroll.el
index 78b8259b39..249484cf58 100644
--- a/lisp/pixel-scroll.el
+++ b/lisp/pixel-scroll.el
@@ -296,9 +296,9 @@ unseen line above the first line, respectively, is 
provided."
 
 (defun pixel-visible-pos-in-window ()
   "Return position shown on text line where cursor is in the selected window.
-This will look for positions of point and end-of-visual-line,
-then positions from beginning-of-visual-line to
-end-of-visual-line.  When no char in a line is shown, this
+This will look for positions of point and `end-of-visual-line',
+then positions from `beginning-of-visual-line' to
+`end-of-visual-line'.  When no char in a line is shown, this
 returns nil."
   (let* ((beginning-of-visual-line-pos (save-excursion 
(beginning-of-visual-line) (point)))
          (end-of-visual-line-pos (save-excursion (end-of-visual-line) (point)))
diff --git a/lisp/play/5x5.el b/lisp/play/5x5.el
index 64d43c3d48..1d19330629 100644
--- a/lisp/play/5x5.el
+++ b/lisp/play/5x5.el
@@ -443,8 +443,9 @@ should return a grid vector array that is the new solution."
   solution)
 
 (defun 5x5-play-solution (solution best)
-  "Play a solution on an empty grid.  This destroys the current game
-in progress because it is an animated attempt."
+  "Play a solution on an empty grid.
+This destroys the current game in progress because it is an
+animated attempt."
   (5x5-new-game)
   (let ((inhibit-quit t))
     (dotimes (y 5x5-grid-size)
@@ -802,7 +803,7 @@ there are 4 possible solutions.  When function
 `5x5-solve-suggest' (press `\\[5x5-solve-suggest]') is called the
 solution that is presented is the one that needs least number of
 strokes --- other solutions can be viewed by rotating through the
-list. The list of solution is ordered by number of strokes, so
+list.  The list of solution is ordered by number of strokes, so
 rotating left just after calling `5x5-solve-suggest' will show
 the solution with second least number of strokes, while rotating
 right will show the solution with greatest number of strokes."
diff --git a/lisp/play/cookie1.el b/lisp/play/cookie1.el
index be35daf4da..d1bf45ed51 100644
--- a/lisp/play/cookie1.el
+++ b/lisp/play/cookie1.el
@@ -110,7 +110,7 @@ of load, ENDMSG at the end."
       (fill-region-as-paragraph start (point) nil))))
 
 (defun cookie1 (arg cookie-vec)
-  "Inserts a cookie phrase ARG times."
+  "Insert a cookie phrase ARG times."
   (cond ((zerop arg) t)
        (t (insert (aref cookie-vec arg))
           (insert " ")
@@ -118,8 +118,8 @@ of load, ENDMSG at the end."
 
 ;;;###autoload
 (defun cookie-snarf (phrase-file &optional startmsg endmsg)
-  "Reads in the PHRASE-FILE, returns it as a vector of strings.
-Emit STARTMSG and ENDMSG before and after.  Caches the result; second
+  "Read the PHRASE-FILE, return it as a vector of strings.
+Emit STARTMSG and ENDMSG before and after.  Cache the result; second
 and subsequent calls on the same file won't go to disk."
   (setq phrase-file (cookie-check-file phrase-file))
   (let ((sym (intern-soft phrase-file cookie-cache)))
diff --git a/lisp/play/decipher.el b/lisp/play/decipher.el
index a80cb21151..5431d7f068 100644
--- a/lisp/play/decipher.el
+++ b/lisp/play/decipher.el
@@ -177,7 +177,7 @@ the tail of the list."
       (modify-syntax-entry c "_" table) ;Digits are not part of words
       (cl-incf c))
     table)
-  "Decipher mode syntax table")
+  "Decipher mode syntax table.")
 
 (defvar-local decipher-alphabet nil)
 ;; This is an alist containing entries (PLAIN-CHAR . CIPHER-CHAR),
diff --git a/lisp/play/doctor.el b/lisp/play/doctor.el
index bf923f4f2e..9777fc3ea2 100644
--- a/lisp/play/doctor.el
+++ b/lisp/play/doctor.el
@@ -137,6 +137,7 @@
 Like Text mode with Auto Fill mode
 except that RET when point is after a newline, or LFD at any time,
 reads the sentence before point, and prints the Doctor's answer."
+  :interactive nil
   (make-doctor-variables)
   (turn-on-auto-fill)
   (doctor-type '(i am the psychotherapist \.
@@ -827,14 +828,14 @@ reads the sentence before point, and prints the Doctor's 
answer."
 (defun doctor-ret-or-read (arg)
   "Insert a newline if preceding character is not a newline.
 Otherwise call the Doctor to parse preceding sentence."
-  (interactive "*p")
+  (interactive "*p" doctor-mode)
   (if (= (preceding-char) ?\n)
       (doctor-read-print)
     (newline arg)))
 
 (defun doctor-read-print ()
   "Top level loop."
-  (interactive)
+  (interactive nil doctor-mode)
   (setq doctor-sent (doctor-readin))
   (insert "\n")
   (setq doctor--lincount (1+ doctor--lincount))
diff --git a/lisp/play/dunnet.el b/lisp/play/dunnet.el
index 9d5ee26197..d9acad8e43 100644
--- a/lisp/play/dunnet.el
+++ b/lisp/play/dunnet.el
@@ -1135,11 +1135,12 @@ treasures for points?" "4" "four")
 
 (define-derived-mode dun-mode text-mode "Dungeon"
   "Major mode for running dunnet."
+  :interactive nil
   (setq-local scroll-step 2))
 
 (defun dun-parse (_arg)
   "Function called when return is pressed in interactive mode to parse line."
-  (interactive "*p")
+  (interactive "*p" dun-mode)
   (beginning-of-line)
   (let ((beg (1+ (point)))
         line)
@@ -2229,7 +2230,7 @@ Call the proper verb with the rest of the line passed in 
as a list."
 (defun dun-fix-screen ()
   "In window mode, keep screen from jumping by keeping last line at
 the bottom of the screen."
-  (interactive)
+  (interactive nil dun-mode)
   (forward-line (- 0 (- (window-height) 2 )))
   (set-window-start (selected-window) (point))
   (goto-char (point-max)))
@@ -2263,7 +2264,7 @@ except for the verb."
     result)))
 
 (defun dun-get-path (dirstring startlist)
-  "Given a unix style pathname, build a list of path components (recursive)"
+  "Given a unix style pathname, build a list of path components (recursive)."
   (let (slash)
     (if (= (length dirstring) 0)
        startlist
@@ -2336,7 +2337,7 @@ Also prints current score to let user know he has scored."
 ;;;;
 
 (defun dun-unix-parse (_args)
-  (interactive "*p")
+  (interactive "*p" dun-mode)
   (beginning-of-line)
   (let (beg esign)
     (setq beg (+ (point) 2))
@@ -2825,7 +2826,7 @@ drwxr-xr-x  3 root     staff          2048 Jan 1 1970 ..")
 ;;;;
 
 (defun dun-dos-parse (_args)
-  (interactive "*p")
+  (interactive "*p" dun-mode)
   (beginning-of-line)
   (let (beg)
     (setq beg (+ (point) 3))
@@ -3119,7 +3120,7 @@ File not found")))
 
 (defun dungeon-nil (_arg)
   "noop"
-  (interactive "*p")
+  (interactive "*p" dun-mode)
   nil)
 
 (defun dun-batch-dungeon ()
diff --git a/lisp/play/fortune.el b/lisp/play/fortune.el
index fb02edffe7..f13302525b 100644
--- a/lisp/play/fortune.el
+++ b/lisp/play/fortune.el
@@ -142,7 +142,7 @@ No need to add an `in'."
 ;;; **************
 ;;; Inserting a new fortune
 (defun fortune-append (string &optional interactive file)
-  "Appends STRING to the fortune FILE.
+  "Append STRING to the fortune FILE.
 
 If INTERACTIVE is non-nil, don't compile the fortune file afterwards."
   (setq file (expand-file-name
diff --git a/lisp/play/gamegrid.el b/lisp/play/gamegrid.el
index 8b64dfdf9b..49a0c9ee02 100644
--- a/lisp/play/gamegrid.el
+++ b/lisp/play/gamegrid.el
@@ -490,7 +490,7 @@ format."
   "Add the current score to the high score file.
 
 If REVERSE is non-nil, treat lower scores as better than higher
-scores. This is useful for games where lower scores are better.
+scores.  This is useful for games where lower scores are better.
 
 On POSIX systems there may be a shared game directory for all users in
 which the scorefiles are kept.  On such systems Emacs doesn't create
diff --git a/lisp/play/gametree.el b/lisp/play/gametree.el
index c6aef027e5..cc9a6b7a4f 100644
--- a/lisp/play/gametree.el
+++ b/lisp/play/gametree.el
@@ -508,7 +508,7 @@ being entered automatically (and thus should lack the 
manual mark)."
         (insert (int-to-string (prefix-numeric-value score))))))
 
 (defun gametree-compute-and-insert-score ()
-  "Compute current node score, maybe recursively from subnodes. Insert it.
+  "Compute current node score, maybe recursively from subnodes.  Insert it.
 Subnodes which have been manually scored are honored."
   (interactive "*")
   (let ((auto (not (and (looking-at gametree-score-regexp)
diff --git a/lisp/play/handwrite.el b/lisp/play/handwrite.el
index 2aec408e11..d59352c352 100644
--- a/lisp/play/handwrite.el
+++ b/lisp/play/handwrite.el
@@ -139,7 +139,7 @@
 
 ;;;###autoload
 (defun handwrite ()
-  "Turns the buffer into a \"handwritten\" document.
+  "Turn the buffer into a \"handwritten\" document.
 The functions `handwrite-10pt', `handwrite-11pt', `handwrite-12pt'
 and `handwrite-13pt' set up for various sizes of output.
 
diff --git a/lisp/play/hanoi.el b/lisp/play/hanoi.el
index ac28fba10a..d3d0ad1309 100644
--- a/lisp/play/hanoi.el
+++ b/lisp/play/hanoi.el
@@ -70,7 +70,7 @@
   :group 'games)
 
 (defcustom hanoi-horizontal-flag nil
-  "If non-nil, hanoi poles are oriented horizontally."
+  "Non-nil means that hanoi poles are oriented horizontally."
   :type 'boolean)
 
 (defcustom hanoi-move-period 1.0
@@ -131,7 +131,7 @@ Repent before ring 31 moves."
 
 ;;;###autoload
 (defun hanoi-unix-64 ()
-  "Like hanoi-unix, but pretend to have a 64-bit clock.
+  "Like `hanoi-unix', but pretend to have a 64-bit clock.
 This is, necessarily (as of Emacs 20.3), a crock.  When the
 current-time interface is made s2G-compliant, hanoi.el will need
 to be updated."
@@ -284,7 +284,7 @@ BITS must be of length nrings.  Start at START-TIME."
     (force-mode-line-update)))
 
 (defun hanoi-put-face (start end value &optional object)
-  "If hanoi-use-faces is non-nil, call put-text-property for face property."
+  "If `hanoi-use-faces' is non-nil, call `put-text-property' for face 
property."
   (if hanoi-use-faces
       (put-text-property start end 'face value object)))
 
diff --git a/lisp/play/life.el b/lisp/play/life.el
index 2abf8ccb74..2bf7292772 100644
--- a/lisp/play/life.el
+++ b/lisp/play/life.el
@@ -136,10 +136,10 @@
 (defvar life-window-start nil)
 
 (defvar life--max-width nil
-  "If non-nil, restrict width to this positive integer. ")
+  "If non-nil, restrict width to this positive integer.")
 
 (defvar life--max-height nil
-  "If non-nil, restrict height to this positive integer. ")
+  "If non-nil, restrict height to this positive integer.")
 
 ;; For mode line
 (defvar life-current-generation nil)
diff --git a/lisp/play/mpuz.el b/lisp/play/mpuz.el
index 838bddfb66..5ac1d7c60c 100644
--- a/lisp/play/mpuz.el
+++ b/lisp/play/mpuz.el
@@ -89,6 +89,7 @@ The value t means never ding, and `error' means only ding on 
wrong input."
 
 
 (define-derived-mode mpuz-mode fundamental-mode "Mult Puzzle"
+  :interactive nil
   "Multiplication puzzle mode.
 
 You have to guess which letters stand for which digits in the
@@ -98,7 +99,7 @@ You may enter a guess for a letter's value by typing first 
the letter,
 then the digit.  Thus, to guess that A=3, type `A 3'.
 
 To leave the game to do other editing work, just switch buffers.
-Then you may resume the game with M-x mpuz.
+Then you may resume the game with \\[mpuz].
 You may abort a game by typing \\<mpuz-mode-map>\\[mpuz-offer-abort]."
   (setq tab-width 30))
 
@@ -367,7 +368,7 @@ You may abort a game by typing 
\\<mpuz-mode-map>\\[mpuz-offer-abort]."
 
 (defun mpuz-offer-abort ()
   "Ask if user wants to abort current puzzle."
-  (interactive)
+  (interactive nil mpuz-mode)
   (if (y-or-n-p "Abort game? ")
       (let ((buf (mpuz-get-buffer)))
        (message "Mult Puzzle aborted.")
@@ -389,7 +390,7 @@ You may abort a game by typing 
\\<mpuz-mode-map>\\[mpuz-offer-abort]."
 
 (defun mpuz-try-letter ()
   "Propose a digit for a letter in puzzle."
-  (interactive)
+  (interactive nil mpuz-mode)
   (if mpuz-in-progress
       (let (letter-char digit digit-char)
        (setq letter-char (upcase last-command-event)
@@ -474,7 +475,7 @@ You may abort a game by typing 
\\<mpuz-mode-map>\\[mpuz-offer-abort]."
 
 (defun mpuz-show-solution (row)
   "Display solution for debugging purposes."
-  (interactive "P")
+  (interactive "P" mpuz-mode)
   (mpuz-switch-to-window)
   (mpuz-solve (if row (* 2 (prefix-numeric-value row))))
   (mpuz-paint-board)
diff --git a/lisp/play/pong.el b/lisp/play/pong.el
index b73dbc1010..b8545dfa82 100644
--- a/lisp/play/pong.el
+++ b/lisp/play/pong.el
@@ -216,7 +216,6 @@
 
 (defun pong-init-buffer ()
   "Initialize pong buffer and draw stuff thanks to gamegrid library."
-  (interactive)
   (get-buffer-create pong-buffer-name)
   (switch-to-buffer pong-buffer-name)
   (use-local-map pong-mode-map)
@@ -249,7 +248,7 @@
   "Move bat 1 up.
 This is called left for historical reasons, since in some pong
 implementations you move with left/right paddle."
-  (interactive)
+  (interactive nil pong-mode)
   (if (> pong-bat-player1 1)
       (and
        (setq pong-bat-player1 (1- pong-bat-player1))
@@ -259,7 +258,7 @@ implementations you move with left/right paddle."
 
 (defun pong-move-right ()
   "Move bat 1 down."
-  (interactive)
+  (interactive nil pong-mode)
   (if (< (+ pong-bat-player1 pong-bat-width) (1- pong-height))
       (and
        (setq pong-bat-player1 (1+ pong-bat-player1))
@@ -269,7 +268,7 @@ implementations you move with left/right paddle."
 
 (defun pong-move-up ()
   "Move bat 2 up."
-  (interactive)
+  (interactive nil pong-mode)
   (if (> pong-bat-player2 1)
       (and
        (setq pong-bat-player2 (1- pong-bat-player2))
@@ -279,7 +278,7 @@ implementations you move with left/right paddle."
 
 (defun pong-move-down ()
   "Move bat 2 down."
-  (interactive)
+  (interactive nil pong-mode)
   (if (< (+ pong-bat-player2 pong-bat-width) (1- pong-height))
       (and
        (setq pong-bat-player2 (1+ pong-bat-player2))
@@ -412,7 +411,7 @@ detection and checks if a player scores."
 
 (defun pong-pause ()
   "Pause the game."
-  (interactive)
+  (interactive nil pong-mode)
   (gamegrid-kill-timer)
   ;; Oooohhh ugly.  I don't know why, gamegrid-kill-timer don't do the
   ;; jobs it is made for.  So I have to do it "by hand".  Anyway, next
@@ -424,7 +423,7 @@ detection and checks if a player scores."
 
 (defun pong-resume ()
   "Resume a paused game."
-  (interactive)
+  (interactive nil pong-mode)
   (define-key pong-mode-map pong-pause-key 'pong-pause)
   (gamegrid-start-timer pong-timer-delay 'pong-update-game))
 
@@ -432,7 +431,7 @@ detection and checks if a player scores."
 
 (defun pong-quit ()
   "Quit the game and kill the pong buffer."
-  (interactive)
+  (interactive nil pong-mode)
   (gamegrid-kill-timer)
   ;; Be sure not to draw things in another buffer and wait for some
   ;; time.
diff --git a/lisp/play/solitaire.el b/lisp/play/solitaire.el
index e74ba98ca1..bc1a0e44cb 100644
--- a/lisp/play/solitaire.el
+++ b/lisp/play/solitaire.el
@@ -93,6 +93,7 @@ To learn how to play Solitaire, see the documentation for 
function
 \\<solitaire-mode-map>
 The usual mnemonic keys move the cursor around the board; in addition,
 \\[solitaire-move] is a prefix character for actually moving a stone on the 
board."
+  :interactive nil
   (setq truncate-lines t)
   (setq show-trailing-whitespace nil))
 
@@ -248,7 +249,7 @@ Pick your favorite shortcuts:
     (setq solitaire-end-y (solitaire-current-line))))
 
 (defun solitaire-right ()
-  (interactive)
+  (interactive nil solitaire-mode)
   (let ((start (point)))
     (forward-char)
     (while (= ?\s (following-char))
@@ -259,7 +260,7 @@ Pick your favorite shortcuts:
       (goto-char start))))
 
 (defun solitaire-left ()
-  (interactive)
+  (interactive nil solitaire-mode)
   (let ((start (point)))
     (backward-char)
     (while (= ?\s (following-char))
@@ -270,7 +271,7 @@ Pick your favorite shortcuts:
       (goto-char start))))
 
 (defun solitaire-up ()
-  (interactive)
+  (interactive nil solitaire-mode)
   (let ((start (point))
        (c (current-column)))
     (forward-line -1)
@@ -286,7 +287,7 @@ Pick your favorite shortcuts:
       (goto-char start))))
 
 (defun solitaire-down ()
-  (interactive)
+  (interactive nil solitaire-mode)
   (let ((start (point))
        (c (current-column)))
     (forward-line 1)
@@ -301,13 +302,13 @@ Pick your favorite shortcuts:
       (goto-char start))))
 
 (defun solitaire-center-point ()
-  (interactive)
+  (interactive nil solitaire-mode)
   (goto-char solitaire-center))
 
-(defun solitaire-move-right () (interactive) (solitaire-move '[right]))
-(defun solitaire-move-left () (interactive) (solitaire-move '[left]))
-(defun solitaire-move-up () (interactive) (solitaire-move '[up]))
-(defun solitaire-move-down () (interactive) (solitaire-move '[down]))
+(defun solitaire-move-right () (interactive nil solitaire-mode) 
(solitaire-move '[right]))
+(defun solitaire-move-left () (interactive nil solitaire-mode) (solitaire-move 
'[left]))
+(defun solitaire-move-up () (interactive nil solitaire-mode) (solitaire-move 
'[up]))
+(defun solitaire-move-down () (interactive nil solitaire-mode) (solitaire-move 
'[down]))
 
 (defun solitaire-possible-move (movesymbol)
   "Check if a move is possible from current point in the specified direction.
@@ -332,7 +333,7 @@ which a stone will be taken away) and target."
 
 (defun solitaire-move (dir)
   "Pseudo-prefix command to move a stone in Solitaire."
-  (interactive "kMove where? ")
+  (interactive "kMove where? " solitaire-mode)
   (let* ((class (solitaire-possible-move (lookup-key solitaire-mode-map dir)))
         (buffer-read-only nil))
     (if (stringp class)
@@ -356,7 +357,7 @@ which a stone will be taken away) and target."
 
 (defun solitaire-undo (arg)
   "Undo a move in Solitaire."
-  (interactive "P")
+  (interactive "P" solitaire-mode)
   (let ((buffer-read-only nil))
     (undo arg))
   (save-excursion
@@ -393,7 +394,7 @@ which a stone will be taken away) and target."
 
 (defun solitaire-do-check (&optional _arg)
   "Check for any possible moves in Solitaire."
-  (interactive "P")
+  (interactive "P" solitaire-mode)
   (let ((moves (solitaire-check)))
     (cond ((= 1 solitaire-stones)
           (message "Yeah! You made it! Only the King is left!"))
@@ -414,7 +415,7 @@ Seen in info on text lines."
 (defun solitaire-solve ()
   "Spoil Solitaire by solving the game for you - nearly ...
 ... stops with five stones left ;)"
-  (interactive)
+  (interactive nil solitaire-mode)
   (when (< solitaire-stones 32)
     (error "Cannot solve game in progress"))
   (let ((allmoves [up up S-down up left left S-right up up left S-down
diff --git a/lisp/play/spook.el b/lisp/play/spook.el
index d0669eb1f4..69f444994f 100644
--- a/lisp/play/spook.el
+++ b/lisp/play/spook.el
@@ -53,7 +53,7 @@
 
 ;;;###autoload
 (defun spook ()
-  "Adds that special touch of class to your outgoing mail."
+  "Add that special touch of class to your outgoing mail."
   (interactive)
   (cookie-insert spook-phrases-file
                 spook-phrase-default-count
diff --git a/lisp/play/zone.el b/lisp/play/zone.el
index 19e4e399ff..27aa48f4c9 100644
--- a/lisp/play/zone.el
+++ b/lisp/play/zone.el
@@ -99,7 +99,7 @@ If the element is a function or a list of a function and a 
number,
                                (functionp (car elem))
                                (numberp (cadr elem)))
                           (apply 'zone-call elem))
-                         (t (error "bad `zone-call' elem: %S" elem))))
+                         (t (error "Bad `zone-call' elem: %S" elem))))
                  program))))
 
 ;;;###autoload
diff --git a/lisp/plstore.el b/lisp/plstore.el
index 4ca5886bf1..bcca637e00 100644
--- a/lisp/plstore.el
+++ b/lisp/plstore.el
@@ -83,7 +83,7 @@
 (require 'epg)
 
 (defgroup plstore nil
-  "Searchable, partially encrypted, persistent plist store"
+  "Searchable, partially encrypted, persistent plist store."
   :version "24.1"
   :group 'files)
 
diff --git a/lisp/printing.el b/lisp/printing.el
index e7aab901d5..89e49ccb2a 100644
--- a/lisp/printing.el
+++ b/lisp/printing.el
@@ -5,7 +5,7 @@
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, print, PostScript
 ;; Version: 6.9.3
-;; X-URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
+;; URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
 
 (defconst pr-version "6.9.3"
   "printing.el, v 6.9.3 <2007/12/09 vinicius>
@@ -1403,7 +1403,7 @@ The printer name symbol should be defined on 
`pr-txt-printer-alist' (see it for
 documentation).
 
 This variable should be modified by customization engine.  If this variable is
-modified by other means (for example, a lisp function), use `pr-update-menus'
+modified by other means (for example, a Lisp function), use `pr-update-menus'
 function (see it for documentation) to update text printer menu."
   :type 'symbol
   :set 'pr-txt-name-custom-set)
@@ -1489,7 +1489,7 @@ NAME              A string that specifies a text printer 
name.
                        \"share-name\"
 
 This variable should be modified by customization engine.  If this variable is
-modified by other means (for example, a lisp function), use `pr-update-menus'
+modified by other means (for example, a Lisp function), use `pr-update-menus'
 function (see it for documentation) to update text printer menu.
 
 Examples:
@@ -1544,7 +1544,7 @@ This printer name symbol should be defined on 
`pr-ps-printer-alist' (see it for
 documentation).
 
 This variable should be modified by customization engine.  If this variable is
-modified by other means (for example, a lisp function), use `pr-update-menus'
+modified by other means (for example, a Lisp function), use `pr-update-menus'
 function (see it for documentation) to update PostScript printer menu."
   :type 'symbol
   :set 'pr-ps-name-custom-set)
@@ -2246,7 +2246,7 @@ This utility symbol should be defined on 
`pr-ps-utility-alist' (see it for
 documentation).
 
 This variable should be modified by customization engine.  If this variable is
-modified by other means (for example, a lisp function), use `pr-update-menus'
+modified by other means (for example, a Lisp function), use `pr-update-menus'
 function (see it for documentation) to update PostScript utility menu.
 
 NOTE: Don't forget to download and install the utilities declared on
@@ -2560,7 +2560,7 @@ SETTING           It's a cons like:
                  * If LOCAL is nil:
                   (set VARIABLE (eval VALUE))
 
-               Note that VALUE can be any valid lisp expression.  So, don't
+                Note that VALUE can be any valid Lisp expression.  So, don't
                forget to quote symbols and constant lists.
                This setting is ignored if VARIABLE is equal to keyword
                `inherits-from:'.
@@ -2672,7 +2672,7 @@ happens when printing:
   "Non-nil means list directory when processing a directory.
 
 That is, any subdirectories (and the superdirectory) of the directory (given as
-argument of functions below) are also printed (as dired-mode listings).
+argument of functions below) are also printed (as `dired-mode' listings).
 
 It's used by `pr-ps-directory-preview', `pr-ps-directory-using-ghostscript',
 `pr-ps-directory-print', `pr-ps-directory-ps-print', `pr-printify-directory'
@@ -3476,7 +3476,7 @@ For more information, type \\[pr-interface-help]."
   "Preview directory using ghostview.
 
 Interactively, the command prompts for N-UP printing number, a directory, a
-file name regexp for matching and, when you use a prefix argument (C-u), the
+file name regexp for matching and, when you use a prefix argument 
(\\[universal-argument]), the
 command prompts the user for a file name, and saves the PostScript image in
 that file instead of saving it in a temporary file.
 
@@ -3505,7 +3505,7 @@ See also documentation for `pr-list-directory'."
   "Print directory using PostScript through ghostscript.
 
 Interactively, the command prompts for N-UP printing number, a directory, a
-file name regexp for matching and, when you use a prefix argument (C-u), the
+file name regexp for matching and, when you use a prefix argument 
(\\[universal-argument]), the
 command prompts the user for a file name, and saves the PostScript image in
 that file instead of saving it in a temporary file.
 
@@ -3535,7 +3535,7 @@ See also documentation for `pr-list-directory'."
   "Print directory using PostScript printer.
 
 Interactively, the command prompts for N-UP printing number, a directory, a
-file name regexp for matching and, when you use a prefix argument (C-u), the
+file name regexp for matching and, when you use a prefix argument 
(\\[universal-argument]), the
 command prompts the user for a file name, and saves the PostScript image in
 that file instead of saving it in a temporary file.
 
@@ -3567,7 +3567,7 @@ See also documentation for `pr-list-directory'."
 It depends on `pr-print-using-ghostscript'.
 
 Interactively, the command prompts for N-UP printing number, a directory, a
-file name regexp for matching and, when you use a prefix argument (C-u), the
+file name regexp for matching and, when you use a prefix argument 
(\\[universal-argument]), the
 command prompts the user for a file name, and saves the PostScript image in
 that file instead of saving it in a temporary file.
 
@@ -3598,7 +3598,7 @@ See also documentation for `pr-list-directory'."
   "Preview buffer using ghostview.
 
 Interactively, the command prompts for N-UP printing number and, when you use a
-prefix argument (C-u), the command prompts the user for a file name, and saves
+prefix argument (\\[universal-argument]), the command prompts the user for a 
file name, and saves
 the PostScript image in that file instead of saving it in a temporary file.
 
 Noninteractively, if N-UP is nil, prompts for N-UP printing number.  The
@@ -3617,7 +3617,7 @@ with that name.  If FILENAME is t, prompts for a file 
name."
   "Print buffer using PostScript through ghostscript.
 
 Interactively, the command prompts for N-UP printing number and, when you use a
-prefix argument (C-u), the command prompts the user for a file name, and saves
+prefix argument (\\[universal-argument]), the command prompts the user for a 
file name, and saves
 the PostScript image in that file instead of sending it to the printer.
 
 Noninteractively, if N-UP is nil, prompts for N-UP printing number.  The
@@ -3636,7 +3636,7 @@ that name.  If FILENAME is t, prompts for a file name."
   "Print buffer using PostScript printer.
 
 Interactively, the command prompts for N-UP printing number and, when you use a
-prefix argument (C-u), the command prompts the user for a file name, and saves
+prefix argument (\\[universal-argument]), the command prompts the user for a 
file name, and saves
 the PostScript image in that file instead of sending it to the printer.
 
 Noninteractively, if N-UP is nil, prompts for N-UP printing number.  The
@@ -3657,7 +3657,7 @@ that name.  If FILENAME is t, prompts for a file name."
 It depends on `pr-print-using-ghostscript'.
 
 Interactively, the command prompts for N-UP printing number and, when you use a
-prefix argument (C-u), the command prompts the user for a file name, and saves
+prefix argument (\\[universal-argument]), the command prompts the user for a 
file name, and saves
 the PostScript image in that file instead of sending it to the printer.
 
 Noninteractively, if N-UP is nil, prompts for N-UP printing number.  The
@@ -3877,7 +3877,7 @@ See also documentation for `pr-list-directory'."
 (defun pr-despool-preview (&optional filename)
   "Preview spooled PostScript.
 
-Interactively, when you use a prefix argument (C-u), the command prompts the
+Interactively, when you use a prefix argument (\\[universal-argument]), the 
command prompts the
 user for a file name, and saves the spooled PostScript image in that file
 instead of saving it in a temporary file.
 
@@ -3895,7 +3895,7 @@ PostScript image in a file with that name."
 (defun pr-despool-using-ghostscript (&optional filename)
   "Print spooled PostScript using ghostscript.
 
-Interactively, when you use a prefix argument (C-u), the command prompts the
+Interactively, when you use a prefix argument (\\[universal-argument]), the 
command prompts the
 user for a file name, and saves the spooled PostScript image in that file
 instead of sending it to the printer.
 
@@ -3914,7 +3914,7 @@ image in a file with that name."
 (defun pr-despool-print (&optional filename)
   "Send the spooled PostScript to the printer.
 
-Interactively, when you use a prefix argument (C-u), the command prompts the
+Interactively, when you use a prefix argument (\\[universal-argument]), the 
command prompts the
 user for a file name, and saves the spooled PostScript image in that file
 instead of sending it to the printer.
 
@@ -3934,7 +3934,7 @@ image in a file with that name."
 (defun pr-despool-ps-print (&optional filename)
   "Send the spooled PostScript to the printer or use ghostscript to print it.
 
-Interactively, when you use a prefix argument (C-u), the command prompts the
+Interactively, when you use a prefix argument (\\[universal-argument]), the 
command prompts the
 user for a file name, and saves the spooled PostScript image in that file
 instead of sending it to the printer.
 
@@ -4035,7 +4035,7 @@ image in a file with that name."
   "Process a PostScript file IFILENAME and send it to printer.
 
 Interactively, the command prompts for N-UP printing number, for an input
-PostScript file IFILENAME and, when you use a prefix argument (C-u), the
+PostScript file IFILENAME and, when you use a prefix argument 
(\\[universal-argument]), the
 command prompts the user for an output PostScript file name OFILENAME, and
 saves the PostScript image in that file instead of sending it to the printer.
 
@@ -4280,18 +4280,18 @@ Interactively, you have the following situations:
       The command prompts the user for a N-UP value and printing will
       immediately be done using the current active printer.
 
-   C-u   M-x pr-ps-fast-fire RET
-   C-u 0 M-x pr-ps-fast-fire RET
+   \\[universal-argument]   \\[pr-ps-fast-fire]
+   \\[universal-argument] 0 \\[pr-ps-fast-fire]
       The command prompts the user for a N-UP value and also for a current
       PostScript printer, then printing will immediately be done using the new
       current active printer.
 
-   C-u 1 M-x pr-ps-fast-fire RET
+   \\[universal-argument] 1 \\[pr-ps-fast-fire]
       The command prompts the user for a N-UP value and also for a file name,
       and saves the PostScript image in that file instead of sending it to the
       printer.
 
-   C-u 2 M-x pr-ps-fast-fire RET
+   \\[universal-argument] 2 \\[pr-ps-fast-fire]
       The command prompts the user for a N-UP value, then for a current
       PostScript printer and, finally, for a file name.  Then change the active
       printer to that chosen by user and saves the PostScript image in
@@ -4360,7 +4360,7 @@ Also if the current major-mode is defined in 
`pr-mode-alist', the settings in
 `pr-mode-alist' will be used, that is, the current buffer or region will be
 printed using `pr-txt-mode'.
 
-Interactively, when you use a prefix argument (C-u), the command prompts the
+Interactively, when you use a prefix argument (\\[universal-argument]), the 
command prompts the
 user for a new active text printer.
 
 Noninteractively, the argument SELECT-PRINTER is treated as follows:
@@ -5577,7 +5577,7 @@ COMMAND.exe, COMMAND.bat and COMMAND.com in this order."
     (define-key map "q" 'pr-interface-quit)
     (define-key map "?" 'pr-interface-help)
     map)
-  "Keymap for pr-interface.")
+  "Keymap for `pr-interface'.")
 
 (defmacro pr-interface-save (&rest body)
   `(with-current-buffer pr-i-buffer
@@ -5933,7 +5933,7 @@ COMMAND.exe, COMMAND.bat and COMMAND.com in this order."
 
 
 (defun pr-interface-help (&rest _ignore)
-  "printing buffer interface help."
+  "Printing buffer interface help."
   (interactive)
   (pr-show-setup pr-interface-help-message "*Printing Interface Help*"))
 
diff --git a/lisp/proced.el b/lisp/proced.el
index 2fafdcc58e..fec2a29c84 100644
--- a/lisp/proced.el
+++ b/lisp/proced.el
@@ -32,7 +32,7 @@
 ;; - Allow "sudo kill PID", "sudo renice PID"
 ;;   `proced-send-signal' operates on multiple processes one by one.
 ;;   With "sudo" we want to execute one "kill" or "renice" command
-;;   for all marked processes. Is there a `sudo-call-process'?
+;;   for all marked processes.  Is there a `sudo-call-process'?
 ;;
 ;; Thoughts and Ideas
 ;; - Currently, `process-attributes' returns the list of
@@ -497,8 +497,8 @@ Important: the match ends just after the marker.")
     km)
   "Keymap for Proced commands.")
 
-(easy-menu-define
-  proced-menu proced-mode-map "Proced Menu"
+(easy-menu-define proced-menu proced-mode-map
+  "Proced Menu."
   `("Proced"
     ["Mark" proced-mark
      :help "Mark Current Process"]
diff --git a/lisp/profiler.el b/lisp/profiler.el
index 4c427692cb..0b456bb3e3 100644
--- a/lisp/profiler.el
+++ b/lisp/profiler.el
@@ -463,12 +463,12 @@ Optional argument MODE means only check for the specified 
mode (cpu or mem)."
   "The current profile.")
 
 (defvar-local profiler-report-reversed nil
-  "True if calltree is rendered in bottom-up.  Do not touch this
-variable directly.")
+  "True if calltree is rendered in bottom-up.
+Do not touch this variable directly.")
 
 (defvar-local profiler-report-order nil
-  "The value can be `ascending' or `descending'.  Do not touch
-this variable directly.")
+  "The value can be `ascending' or `descending'.
+Do not touch this variable directly.")
 
 (defun profiler-report-make-entry-part (entry)
   (let ((string (cond
@@ -618,8 +618,7 @@ RET: expand or collapse"))
     buffer))
 
 (defun profiler-report-setup-buffer (profile)
-  "Make a buffer for PROFILE with rendering the profile and
-return it."
+  "Make a buffer for PROFILE with rendering the profile and return it."
   (let ((buffer (profiler-report-setup-buffer-1 profile)))
     (with-current-buffer buffer
       (profiler-report-render-calltree))
@@ -706,9 +705,9 @@ With a prefix argument, expand the whole subtree."
       t)))
 
 (defun profiler-report-toggle-entry (&optional arg)
-  "Expand entry at point if the tree is collapsed,
-otherwise collapse.  With prefix argument, expand all subentries
-below entry at point."
+  "Expand entry at point if the tree is collapsed, otherwise collapse.
+With prefix argument, expand all subentries below entry at
+point."
   (interactive "P")
   (or (profiler-report-expand-entry arg)
       (profiler-report-collapse-entry)))
diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el
index 2a4b348283..a74ca1ed23 100644
--- a/lisp/progmodes/antlr-mode.el
+++ b/lisp/progmodes/antlr-mode.el
@@ -5,7 +5,7 @@
 ;; Author: Christoph Wedler <Christoph.Wedler@sap.com>
 ;; Keywords: languages, ANTLR, code generator
 ;; Version: 2.2c
-;; X-URL: http://antlr-mode.sourceforge.net/
+;; URL: http://antlr-mode.sourceforge.net/
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/progmodes/bat-mode.el b/lisp/progmodes/bat-mode.el
index 7ba8a69775..2cc8dfce66 100644
--- a/lisp/progmodes/bat-mode.el
+++ b/lisp/progmodes/bat-mode.el
@@ -175,7 +175,7 @@
 
 ;;;###autoload
 (define-derived-mode bat-mode prog-mode "Bat"
-  "Major mode for editing DOS/Windows batch files.\n
+  "Major mode for editing DOS/Windows batch files.
 Start a new script from `bat-template'.  Read help pages for DOS commands
 with `bat-cmd-help'.  Navigate between sections using `imenu'.
 Run script using `bat-run' and `bat-run-args'.\n
diff --git a/lisp/progmodes/bug-reference.el b/lisp/progmodes/bug-reference.el
index a596b27cd0..b646a47c85 100644
--- a/lisp/progmodes/bug-reference.el
+++ b/lisp/progmodes/bug-reference.el
@@ -400,7 +400,7 @@ applicable."
      ,(regexp-opt '("@debbugs.gnu.org" "-devel@gnu.org"
                     ;; List-Id of Gnus devel mailing list.
                     "ding.gnus.org"))
-     "\\([Bb]ug ?#?\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)"
+     "\\([Bb]ug ?#?\\([0-9]+\\(?:#[0-9]+\\)?\\)\\)"
      "https://debbugs.gnu.org/%s";))
   "An alist for setting up `bug-reference-mode' in mail modes.
 
@@ -531,7 +531,7 @@ From, and Cc against HEADER-REGEXP in
   `((,(concat "#" (regexp-opt '("emacs" "gnus" "org-mode" "rcirc"
                                 "erc") 'words))
      "Libera.Chat"
-     "\\([Bb]ug ?#?\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)"
+     "\\([Bb]ug ?#?\\([0-9]+\\(?:#[0-9]+\\)?\\)\\)"
      "https://debbugs.gnu.org/%s";))
   "An alist for setting up `bug-reference-mode' in IRC modes.
 
@@ -651,7 +651,7 @@ guesswork is based on these variables:
   "Enable `bug-reference-mode' and force auto-setup.
 Enabling `bug-reference-mode' runs its auto-setup only if
 `bug-reference-bug-regexp' and `bug-reference-url-format' are not
-set already.  This function sets the latter to `nil'
+set already.  This function sets the latter to nil
 buffer-locally, so that the auto-setup will always run.
 
 This is mostly intended for MUA modes like `rmail-mode' where the
diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el
index 9234d0b19b..a26c1d5bff 100644
--- a/lisp/progmodes/cc-align.el
+++ b/lisp/progmodes/cc-align.el
@@ -914,7 +914,7 @@ Works with: template-args-cont."
 (defun c-lineup-ObjC-method-call (langelem)
   "Line up selector args as Emacs Lisp mode does with function args:
 Go to the position right after the message receiver, and if you are at
-the end of the line, indent the current line c-basic-offset columns
+the end of the line, indent the current line `c-basic-offset' columns
 from the opening bracket; otherwise you are looking at the first
 character of the first method call argument, so line up the current
 line with it.
@@ -943,9 +943,9 @@ Works with: objc-method-call-cont."
 
 (defun c-lineup-ObjC-method-call-colons (langelem)
   "Line up selector args as Project Builder / XCode: colons of first
-   selector portions on successive lines are aligned.  If no decision can
-   be made return NIL, so that other lineup methods can be tried.  This is
-   typically chained with `c-lineup-ObjC-method-call'.
+selector portions on successive lines are aligned.  If no decision can
+be made return NIL, so that other lineup methods can be tried.  This is
+typically chained with `c-lineup-ObjC-method-call'.
 
 Works with: objc-method-call-cont."
   (save-excursion
diff --git a/lisp/progmodes/cc-awk.el b/lisp/progmodes/cc-awk.el
index f1bc25db7f..ea99101750 100644
--- a/lisp/progmodes/cc-awk.el
+++ b/lisp/progmodes/cc-awk.el
@@ -1095,9 +1095,10 @@ std\\(err\\|in\\|out\\)\\|user\\)\\)\\>\
                             "[#\n\r]"))))))))
 
 (defun c-awk-beginning-of-defun (&optional arg)
-  "Move backward to the beginning of an AWK \"defun\".  With ARG, do it that
-many times.  Negative arg -N means move forward to Nth following beginning of
-defun.  Returns t unless search stops due to beginning or end of buffer.
+  "Move backward to the beginning of an AWK \"defun\".
+With ARG, do it that many times.  Negative arg -N means move
+forward to Nth following beginning of defun.  Returns t unless
+search stops due to beginning or end of buffer.
 
 By a \"defun\" is meant either a pattern-action pair or a function.  The start
 of a defun is recognized as code starting at column zero which is neither a
diff --git a/lisp/progmodes/cc-bytecomp.el b/lisp/progmodes/cc-bytecomp.el
index edbac64ead..f07f18678a 100644
--- a/lisp/progmodes/cc-bytecomp.el
+++ b/lisp/progmodes/cc-bytecomp.el
@@ -381,7 +381,7 @@ afterwards.  Don't use within `eval-when-compile'."
      (eval-when-compile (cc-bytecomp-setup-environment))))
 
 (defmacro cc-bytecomp-defvar (var)
-  "Binds the symbol as a variable during compilation of the file,
+  "Bind the symbol as a variable during compilation of the file,
 to silence the byte compiler.  Don't use within `eval-when-compile'."
   (declare (debug nil))
   `(eval-when-compile
diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el
index bdfdf178d4..217281b8a2 100644
--- a/lisp/progmodes/cc-cmds.el
+++ b/lisp/progmodes/cc-cmds.el
@@ -497,7 +497,7 @@ function to control that."
 
 (defvar c--unsafe-post-self-insert-hook-functions
   '(electric-pair-post-self-insert-function)
-    "Known unsafe functions when members of `post-self-insert-hook' in CC 
Mode")
+    "Known unsafe functions when members of `post-self-insert-hook' in CC 
Mode.")
 
 (defun c--call-post-self-insert-hook-more-safely-1 ()
   ;; Call post-self-insert-hook, having removed from `post-self-insert-hook'
@@ -2059,7 +2059,7 @@ the open-parenthesis that starts a defun; see 
`beginning-of-defun'."
 
 (defun c-defun-name-1 ()
   "Return the name of the current defun, at the current narrowing,
-or NIL if there isn't one.  \"Defun\" here means a function, or
+or nil if there isn't one.  \"Defun\" here means a function, or
 other top level construct with a brace block."
   (c-save-buffer-state
       (beginning-of-defun-function end-of-defun-function
@@ -3383,12 +3383,12 @@ directives."
 
 (defun c-backward-conditional (count &optional target-depth with-else)
   "Move back across a preprocessor conditional, leaving mark behind.
-A prefix argument acts as a repeat count.  With a negative argument,
+A prefix argument acts as a repeat COUNT.  With a negative argument,
 move forward across a preprocessor conditional.
 
 The optional arguments TARGET-DEPTH and WITH-ELSE are historical,
 and have the same meanings as in `c-scan-conditionals'.  If you
-are calling c-forward-conditional from a program, you might want
+are calling `c-forward-conditional' from a program, you might want
 to call `c-scan-conditionals' directly instead."
   (interactive "p")
   (let ((new-point (c-scan-conditionals (- count) target-depth with-else)))
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index fe6ff220ba..be0b40fd6c 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -1385,7 +1385,7 @@ point is then left undefined."
   "Remove all text-properties PROPERTY from the region (FROM, TO)
 which have the value VALUE, as tested by `equal'.  These
 properties are assumed to be over individual characters, having
-been put there by c-put-char-property.  POINT remains unchanged."
+been put there by `c-put-char-property'.  POINT remains unchanged."
   (let ((place from) end-place)
     (while                       ; loop round occurrences of (PROPERTY VALUE)
        (progn
@@ -1406,7 +1406,7 @@ been put there by c-put-char-property.  POINT remains 
unchanged."
   "Remove all text-properties PROPERTY from the region [FROM, TO)
 which have the value VALUE, as tested by `equal'.  These
 properties are assumed to be over individual characters, having
-been put there by c-put-char-property.  POINT remains unchanged."
+been put there by `c-put-char-property'.  POINT remains unchanged."
   (declare (debug t))
   (if c-use-extents
     ;; XEmacs
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 77da98f626..53c382f018 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -1731,7 +1731,7 @@ Line continuations, i.e. a backslashes followed by line 
breaks, are
 treated as whitespace.  The line breaks that end line comments are
 considered to be the comment enders, so the point cannot be at the end
 of the same line to move over a line comment.  Unlike
-c-backward-syntactic-ws, this function doesn't move back over
+`c-backward-syntactic-ws', this function doesn't move back over
 preprocessor directives.
 
 Note that this function might do hidden buffer changes.  See the
@@ -3210,7 +3210,7 @@ comment at the start of cc-engine.el for more info."
 This function should be added to the `before-change-functions'
 hook by major modes that use CC Mode's filling functionality
 without initializing CC Mode.  Currently (2020-06) these are
-js-mode and mhtml-mode."
+`js-mode' and `mhtml-mode'."
   (c-truncate-lit-pos-cache beg))
 
 (defun c-foreign-init-lit-pos-cache ()
@@ -3218,8 +3218,8 @@ js-mode and mhtml-mode."
 
 This function should be called from the mode functions of major
 modes which use CC Mode's filling functionality without
-initializing CC Mode.  Currently (2020-06) these are js-mode and
-mhtml-mode."
+initializing CC Mode.  Currently (2020-06) these are `js-mode' and
+`mhtml-mode'."
   (c-truncate-lit-pos-cache 1))
 
 
@@ -7223,7 +7223,7 @@ comment at the start of cc-engine.el for more info."
 ;;   the rest of the file is fontified normally.
 
 (defun c-ml-string-make-closer-re (_opener)
-  "Return c-ml-string-any-closer-re.
+  "Return `c-ml-string-any-closer-re'.
 
 This is a suitable language specific value of
 `c-make-ml-string-closer-re-function' for most languages with
@@ -7231,7 +7231,7 @@ multi-line strings (but not C++, for example)."
   c-ml-string-any-closer-re)
 
 (defun c-ml-string-make-opener-re (_closer)
-  "Return c-ml-string-opener-re.
+  "Return `c-ml-string-opener-re'.
 
 This is a suitable language specific value of
 `c-make-ml-string-opener-re-function' for most languages with
diff --git a/lisp/progmodes/cc-guess.el b/lisp/progmodes/cc-guess.el
index 9c88c14a6c..8f46b17c54 100644
--- a/lisp/progmodes/cc-guess.el
+++ b/lisp/progmodes/cc-guess.el
@@ -34,18 +34,18 @@
 ;; are some variants.
 ;;
 ;; Suppose the major mode for the current buffer is one of the modes
-;; provided by cc-mode. `c-guess' guesses the indentation style by
+;; provided by cc-mode.  `c-guess' guesses the indentation style by
 ;; examining the indentation in the region between beginning of buffer
 ;; and `c-guess-region-max'.
 
-;; and installs the guessed style. The name for installed style is given
+;; and installs the guessed style.  The name for installed style is given
 ;; by `c-guess-style-name'.
 ;;
 ;; `c-guess-buffer' does the same but in the whole buffer.
 ;; `c-guess-region' does the same but in the region between the point
 ;; and the mark.  `c-guess-no-install', `c-guess-buffer-no-install'
 ;; and `c-guess-region-no-install' guess the indentation style but
-;; don't install it. You can review a guessed style with `c-guess-view'.
+;; don't install it.  You can review a guessed style with `c-guess-view'.
 ;; After reviewing, use `c-guess-install' to install the style
 ;; if you prefer it.
 ;;
@@ -56,11 +56,11 @@
 ;; or implicitly with `c-guess', `c-guess-buffer', or `c-guess-region',
 ;; a style name is given by `c-guess-style-name' with the above form.
 ;;
-;; If you want to reuse the guessed style in future emacs sessions,
-;; you may want to put it to your .emacs. `c-guess-view' is for
-;; you. It emits Emacs Lisp code which defines the last guessed
-;; style, in a temporary buffer. You can put the emitted code into
-;; your .emacs. This command was suggested by Alan Mackenzie.
+;; If you want to reuse the guessed style in future Emacs sessions,
+;; you may want to put it to your .emacs.  `c-guess-view' is for
+;; you.  It emits Emacs Lisp code which defines the last guessed
+;; style, in a temporary buffer.  You can put the emitted code into
+;; your .emacs.  This command was suggested by Alan Mackenzie.
 
 ;;; Code:
 
@@ -91,7 +91,7 @@ The offset of a line included in the indent information 
returned by
 (defcustom c-guess-region-max 50000
   "The maximum region size for examining indent information with `c-guess'.
 It takes a long time to examine indent information from a large region;
-this option helps you limit that time. nil means no limit."
+this option helps you limit that time.  nil means no limit."
   :version "24.1"
   :type 'integer
   :group 'c)
@@ -465,7 +465,7 @@ the absolute file name of the file if STYLE-NAME is nil."
 (defun c-guess-dump-guessed-style (&optional printer)
   "Show the guessed style.
 `pp' is used to print the style but if PRINTER is given,
-PRINTER is used instead. If PRINTER is not nil, it
+PRINTER is used instead.  If PRINTER is not nil, it
 is called with one argument, the guessed style."
   (interactive)
   (let ((style (c-guess-make-style c-guess-guessed-basic-offset
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 0b125bc43f..b106454b11 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -151,10 +151,10 @@
        c-emacs-variable-inits-tail c-emacs-variable-inits))
 
 (defmacro c-lang-defvar (var val &optional doc)
-  "Declares the buffer local variable VAR to get the value VAL.  VAL is
-evaluated and assigned at mode initialization.  More precisely, VAL is
-evaluated and bound to VAR when the result from the macro
-`c-init-language-vars' is evaluated.
+  "Declares the buffer local variable VAR to get the value VAL.
+VAL is evaluated and assigned at mode initialization.  More
+precisely, VAL is evaluated and bound to VAR when the result from
+the macro `c-init-language-vars' is evaluated.
 
 `c-lang-const' is typically used in VAL to get the right value for the
 language being initialized, and such calls will be macro expanded to
@@ -184,8 +184,8 @@ the evaluated constant value at compile time."
   `',var)
 
 (defmacro c-lang-setvar (var val)
-  "Causes the variable VAR to be made buffer local and to get set to the
-value VAL.  VAL is evaluated and assigned at mode initialization.  More
+  "Make variable VAR buffer local and set it to value VAL.
+VAL is evaluated and assigned at mode initialization.  More
 precisely, VAL is evaluated and bound to VAR when the result from the
 macro `c-init-language-vars' is evaluated.  VAR is typically a standard
 Emacs variable like `comment-start'.
diff --git a/lisp/progmodes/cc-menus.el b/lisp/progmodes/cc-menus.el
index a099ec1de9..52b47a5873 100644
--- a/lisp/progmodes/cc-menus.el
+++ b/lisp/progmodes/cc-menus.el
@@ -172,7 +172,7 @@ A sample value might look like: `\\(_P\\|_PROTO\\)'.")
    "[ \t\n\r]*"))
 
 (defun cc-imenu-java-build-type-args-regex (depth)
-  "Builds regexp for type arguments list with DEPTH allowed
+  "Build regexp for type arguments list with DEPTH allowed
 nested angle brackets constructs."
   (if (> depth 0)
       (concat "<"
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 057d292246..c818c1a358 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -575,9 +575,8 @@ preferably use the `c-mode-menu' language constant 
directly."
 (make-variable-buffer-local 'c-max-syn-tab-mkr)
 
 (defun c-basic-common-init (mode default-style)
-  "Do the necessary initialization for the syntax handling routines
-and the line breaking/filling code.  Intended to be used by other
-packages that embed CC Mode.
+  "Initialize the syntax handling routines and the line breaking/filling code.
+Intended to be used by other packages that embed CC Mode.
 
 MODE is the CC Mode flavor to set up, e.g. `c-mode' or `java-mode'.
 DEFAULT-STYLE tells which indentation style to install.  It has the
@@ -2568,17 +2567,17 @@ opening \" and the next unescaped end of line."
 
 (defvar c-mode-syntax-table
   (funcall (c-lang-const c-make-mode-syntax-table c))
-  "Syntax table used in c-mode buffers.")
+  "Syntax table used in `c-mode' buffers.")
 
 (defvar c-mode-map
   (let ((map (c-make-inherited-keymap)))
     map)
-  "Keymap used in c-mode buffers.")
+  "Keymap used in `c-mode' buffers.")
 ;; Add bindings which are only useful for C.
 (define-key c-mode-map "\C-c\C-e"  'c-macro-expand)
 
 
-(easy-menu-define c-c-menu c-mode-map "C Mode Commands"
+(easy-menu-define c-c-menu c-mode-map "C Mode Commands."
                  (cons "C" (c-lang-const c-mode-menu c)))
 
 ;; In XEmacs >= 21.5 modes should add their own entries to
@@ -2617,7 +2616,7 @@ opening \" and the next unescaped end of line."
   "Major mode for editing C code.
 
 To submit a problem report, enter `\\[c-submit-bug-report]' from a
-c-mode buffer.  This automatically sets up a mail buffer with version
+`c-mode' buffer.  This automatically sets up a mail buffer with version
 information already added.  You just need to add a description of the
 problem, including a reproducible test case, and send the message.
 
@@ -2701,7 +2700,7 @@ the code is C or C++ and based on that chooses whether to 
enable
 (define-key c++-mode-map "<"        'c-electric-lt-gt)
 (define-key c++-mode-map ">"        'c-electric-lt-gt)
 
-(easy-menu-define c-c++-menu c++-mode-map "C++ Mode Commands"
+(easy-menu-define c-c++-menu c++-mode-map "C++ Mode Commands."
                  (cons "C++" (c-lang-const c-mode-menu c++)))
 
 ;;;###autoload
@@ -2738,16 +2737,16 @@ Key bindings:
 
 (defvar objc-mode-syntax-table
   (funcall (c-lang-const c-make-mode-syntax-table objc))
-  "Syntax table used in objc-mode buffers.")
+  "Syntax table used in `objc-mode' buffers.")
 
 (defvar objc-mode-map
   (let ((map (c-make-inherited-keymap)))
     map)
-  "Keymap used in objc-mode buffers.")
+  "Keymap used in `objc-mode' buffers.")
 ;; Add bindings which are only useful for Objective-C.
 (define-key objc-mode-map "\C-c\C-e" 'c-macro-expand)
 
-(easy-menu-define c-objc-menu objc-mode-map "ObjC Mode Commands"
+(easy-menu-define c-objc-menu objc-mode-map "ObjC Mode Commands."
                  (cons "ObjC" (c-lang-const c-mode-menu objc)))
 
 ;;;###autoload (add-to-list 'auto-mode-alist '("\\.m\\'" . objc-mode))
@@ -2756,7 +2755,7 @@ Key bindings:
 (define-derived-mode objc-mode prog-mode "ObjC"
   "Major mode for editing Objective C code.
 To submit a problem report, enter `\\[c-submit-bug-report]' from an
-objc-mode buffer.  This automatically sets up a mail buffer with
+`objc-mode' buffer.  This automatically sets up a mail buffer with
 version information already added.  You just need to add a description
 of the problem, including a reproducible test case, and send the
 message.
@@ -2785,12 +2784,12 @@ Key bindings:
 
 (defvar java-mode-syntax-table
   (funcall (c-lang-const c-make-mode-syntax-table java))
-  "Syntax table used in java-mode buffers.")
+  "Syntax table used in `java-mode' buffers.")
 
 (defvar java-mode-map
   (let ((map (c-make-inherited-keymap)))
     map)
-  "Keymap used in java-mode buffers.")
+  "Keymap used in `java-mode' buffers.")
 ;; Add bindings which are only useful for Java.
 
 ;; Regexp trying to describe the beginning of a Java top-level
@@ -2800,7 +2799,7 @@ Key bindings:
 (defconst c-Java-defun-prompt-regexp
   "^[ 
\t]*\\(\\(\\(public\\|protected\\|private\\|const\\|abstract\\|synchronized\\|final\\|static\\|threadsafe\\|transient\\|native\\|volatile\\)\\s-+\\)*\\(\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]+\\|[[a-zA-Z]\\)\\s-*\\)\\s-+\\)\\)?\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*\\s-+\\)\\s-*\\)?\\([_a-zA-Z][^][
 
\t:;.,{}()\^?=]*\\|\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)\\)\\s-*\\(([^);{}]*)\\)?\\([]
 \t]*\\)\\(\\s-*\\<throws\\>\\s-*\\(\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)[, 
\t\n\r\f\v]*\\)+\\)?\\s-*")
 
-(easy-menu-define c-java-menu java-mode-map "Java Mode Commands"
+(easy-menu-define c-java-menu java-mode-map "Java Mode Commands."
                  (cons "Java" (c-lang-const c-mode-menu java)))
 
 ;;;###autoload (add-to-list 'auto-mode-alist '("\\.java\\'" . java-mode))
@@ -2809,7 +2808,7 @@ Key bindings:
 (define-derived-mode java-mode prog-mode "Java"
   "Major mode for editing Java code.
 To submit a problem report, enter `\\[c-submit-bug-report]' from a
-java-mode buffer.  This automatically sets up a mail buffer with
+`java-mode' buffer.  This automatically sets up a mail buffer with
 version information already added.  You just need to add a description
 of the problem, including a reproducible test case, and send the
 message.
@@ -2836,15 +2835,15 @@ Key bindings:
 
 (defvar idl-mode-syntax-table
   (funcall (c-lang-const c-make-mode-syntax-table idl))
-  "Syntax table used in idl-mode buffers.")
+  "Syntax table used in `idl-mode' buffers.")
 
 (defvar idl-mode-map
   (let ((map (c-make-inherited-keymap)))
     map)
-  "Keymap used in idl-mode buffers.")
+  "Keymap used in `idl-mode' buffers.")
 ;; Add bindings which are only useful for IDL.
 
-(easy-menu-define c-idl-menu idl-mode-map "IDL Mode Commands"
+(easy-menu-define c-idl-menu idl-mode-map "IDL Mode Commands."
                  (cons "IDL" (c-lang-const c-mode-menu idl)))
 
 ;;;###autoload (add-to-list 'auto-mode-alist '("\\.idl\\'" . idl-mode))
@@ -2853,7 +2852,7 @@ Key bindings:
 (define-derived-mode idl-mode prog-mode "IDL"
   "Major mode for editing CORBA's IDL, PSDL and CIDL code.
 To submit a problem report, enter `\\[c-submit-bug-report]' from an
-idl-mode buffer.  This automatically sets up a mail buffer with
+`idl-mode' buffer.  This automatically sets up a mail buffer with
 version information already added.  You just need to add a description
 of the problem, including a reproducible test case, and send the
 message.
@@ -2879,16 +2878,16 @@ Key bindings:
 
 (defvar pike-mode-syntax-table
   (funcall (c-lang-const c-make-mode-syntax-table pike))
-  "Syntax table used in pike-mode buffers.")
+  "Syntax table used in `pike-mode' buffers.")
 
 (defvar pike-mode-map
   (let ((map (c-make-inherited-keymap)))
     map)
-  "Keymap used in pike-mode buffers.")
+  "Keymap used in `pike-mode' buffers.")
 ;; Additional bindings.
 (define-key pike-mode-map "\C-c\C-e" 'c-macro-expand)
 
-(easy-menu-define c-pike-menu pike-mode-map "Pike Mode Commands"
+(easy-menu-define c-pike-menu pike-mode-map "Pike Mode Commands."
                  (cons "Pike" (c-lang-const c-mode-menu pike)))
 
 ;;;###autoload (add-to-list 'auto-mode-alist 
'("\\.\\(u?lpc\\|pike\\|pmod\\(\\.in\\)?\\)\\'" . pike-mode))
@@ -2898,7 +2897,7 @@ Key bindings:
 (define-derived-mode pike-mode prog-mode "Pike"
   "Major mode for editing Pike code.
 To submit a problem report, enter `\\[c-submit-bug-report]' from a
-pike-mode buffer.  This automatically sets up a mail buffer with
+`pike-mode' buffer.  This automatically sets up a mail buffer with
 version information already added.  You just need to add a description
 of the problem, including a reproducible test case, and send the
 message.
@@ -2932,7 +2931,7 @@ Key bindings:
 (defvar awk-mode-map
   (let ((map (c-make-inherited-keymap)))
     map)
-  "Keymap used in awk-mode buffers.")
+  "Keymap used in `awk-mode' buffers.")
 ;; Add bindings which are only useful for awk.
 (define-key awk-mode-map "#" 'self-insert-command);Overrides electric parent 
binding.
 (define-key awk-mode-map "/" 'self-insert-command);Overrides electric parent 
binding.
@@ -2945,7 +2944,7 @@ Key bindings:
 (define-key awk-mode-map "\C-\M-a" 'c-awk-beginning-of-defun)
 (define-key awk-mode-map "\C-\M-e" 'c-awk-end-of-defun)
 
-(easy-menu-define c-awk-menu awk-mode-map "AWK Mode Commands"
+(easy-menu-define c-awk-menu awk-mode-map "AWK Mode Commands."
                  (cons "AWK" (c-lang-const c-mode-menu awk)))
 
 ;; (require 'cc-awk) brings these in.
@@ -2956,7 +2955,7 @@ Key bindings:
 (define-derived-mode awk-mode prog-mode "AWK"
   "Major mode for editing AWK code.
 To submit a problem report, enter `\\[c-submit-bug-report]' from an
-awk-mode buffer.  This automatically sets up a mail buffer with version
+`awk-mode' buffer.  This automatically sets up a mail buffer with version
 information already added.  You just need to add a description of the
 problem, including a reproducible test case, and send the message.
 
diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el
index 8514434e9a..c6b6be5b39 100644
--- a/lisp/progmodes/cc-styles.el
+++ b/lisp/progmodes/cc-styles.el
@@ -406,7 +406,7 @@ a null operation."
 
 ;;;###autoload
 (defun c-add-style (style description &optional set-p)
-  "Adds a style to `c-style-alist', or updates an existing one.
+  "Add a style to `c-style-alist', or update an existing one.
 STYLE is a string identifying the style to add or update.  DESCRIPTION
 is an association list describing the style and must be of the form:
 
diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el
index b33fea0b48..dcd9546d9a 100644
--- a/lisp/progmodes/cc-vars.el
+++ b/lisp/progmodes/cc-vars.el
@@ -1427,23 +1427,23 @@ localized, they cannot be made global again.
 This variable must be set appropriately before CC Mode is loaded.
 
 The list of variables to buffer localize are:
-    c-basic-offset
-    c-comment-only-line-offset
-    c-indent-comment-alist
-    c-indent-comments-syntactically-p
-    c-block-comment-prefix
-    c-comment-prefix-regexp
-    c-doc-comment-style
-    c-cleanup-list
-    c-hanging-braces-alist
-    c-hanging-colons-alist
-    c-hanging-semi&comma-criteria
-    c-backslash-column
-    c-backslash-max-column
-    c-label-minimum-indentation
-    c-offsets-alist
-    c-special-indent-hook
-    c-indentation-style"
+    `c-basic-offset'
+    `c-comment-only-line-offset'
+    `c-indent-comment-alist'
+    `c-indent-comments-syntactically-p'
+    `c-block-comment-prefix'
+    `c-comment-prefix-regexp'
+    `c-doc-comment-style'
+    `c-cleanup-list'
+    `c-hanging-braces-alist'
+    `c-hanging-colons-alist'
+    `c-hanging-semi&comma-criteria'
+    `c-backslash-column'
+    `c-backslash-max-column'
+    `c-label-minimum-indentation'
+    `c-offsets-alist'
+    `c-special-indent-hook'
+    `c-indentation-style'"
   :type 'boolean
   :safe 'booleanp
   :group 'c)
@@ -1864,13 +1864,13 @@ Set from `c-comment-prefix-regexp' at mode 
initialization.")
 (defvar c-string-par-start
 ;;   (concat "\\(" (default-value 'paragraph-start) "\\)\\|[ \t]*\\\\$")
   "\f\\|[ \t]*\\\\?$"
-  "Value of paragraph-start used when scanning strings.
+  "Value of `paragraph-start' used when scanning strings.
 It treats escaped EOLs as whitespace.")
 
 (defvar c-string-par-separate
   ;; (concat "\\(" (default-value 'paragraph-separate) "\\)\\|[ \t]*\\\\$")
   "[ \t\f]*\\\\?$"
-  "Value of paragraph-separate used when scanning strings.
+  "Value of `paragraph-separate' used when scanning strings.
 It treats escaped EOLs as whitespace.")
 
 (defvar c-sentence-end-with-esc-eol
@@ -1878,7 +1878,7 @@ It treats escaped EOLs as whitespace.")
                ;; N.B.:  "$" would be illegal when not enclosed like "\\($\\)".
                "\\|" "[.?!][]\"')}]* ?\\\\\\($\\)[ \t\n]*"
                "\\)")
-  "Value used like sentence-end used when scanning strings.
+  "Value used like `sentence-end' used when scanning strings.
 It treats escaped EOLs as whitespace.")
 
 
diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el
index 4649e50654..53914616cd 100644
--- a/lisp/progmodes/cfengine.el
+++ b/lisp/progmodes/cfengine.el
@@ -47,8 +47,8 @@
 ;; (add-hook 'cfengine3-mode-hook 'eldoc-mode)
 
 ;; You may also find the command `cfengine3-reformat-json-string'
-;; useful, just bind it to a key you prefer. It will take the current
-;; string and reformat it as JSON. So if you're editing JSON inside
+;; useful, just bind it to a key you prefer.  It will take the current
+;; string and reformat it as JSON.  So if you're editing JSON inside
 ;; the policy, it's a quick way to make it more legible without
 ;; manually reindenting it.  For instance:
 
@@ -140,8 +140,7 @@ bundle agent rcfiles
       \"/tmp/netrc\"
               comment => \"my netrc\",
                 perms => mog(\"600\", \"tzz\", \"tzz\");
-}
-"
+}"
   :version "24.4"
   :type '(list
           (choice (const :tag "Anchor at beginning of promise" promise)
@@ -1193,7 +1192,7 @@ Intended as the value of `indent-line-function'."
 ;; CATEGORY: [a-zA-Z_]+:
 
 (defun cfengine3--current-function ()
-  "Look up current CFEngine 3 function"
+  "Look up current CFEngine 3 function."
   (let* ((syntax (cfengine3-make-syntax-cache))
          (flist (assq 'functions syntax)))
     (when flist
diff --git a/lisp/progmodes/cl-font-lock.el b/lisp/progmodes/cl-font-lock.el
index 178fe944f3..f602c3e13f 100644
--- a/lisp/progmodes/cl-font-lock.el
+++ b/lisp/progmodes/cl-font-lock.el
@@ -8,7 +8,6 @@
 ;; Package-Requires: ((emacs "24.5"))
 ;; Keywords: lisp wp files convenience
 ;; URL: https://github.com/cl-font-lock/cl-font-lock
-;; Homepage: https://github.com/cl-font-lock/cl-font-lock
 
 ;; This file is part of GNU Emacs
 
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index af7b8292b7..431b01b8ba 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -86,7 +86,7 @@ This is bound before running `compilation-filter-hook'.")
   "This is how compilers number the first column, usually 1 or 0.
 If this is buffer-local in the destination buffer, Emacs obeys
 that value, otherwise it uses the value in the *compilation*
-buffer.  This enables a major-mode to specify its own value.")
+buffer.  This enables a major mode to specify its own value.")
 
 (defvar compilation-parse-errors-filename-function #'identity
   "Function to call to post-process filenames while parsing error messages.
@@ -752,7 +752,7 @@ program and Emacs agree about the display width of the 
characters,
 especially the TAB character.
 If this is buffer-local in the destination buffer, Emacs obeys
 that value, otherwise it uses the value in the *compilation*
-buffer.  This enables a major-mode to specify its own value."
+buffer.  This enables a major mode to specify its own value."
   :type 'boolean
   :version "20.4")
 
@@ -1783,6 +1783,9 @@ Returns the compilation buffer created."
            (replace-regexp-in-string "-mode\\'" "" (symbol-name mode))))
         (thisdir default-directory)
         (thisenv compilation-environment)
+         (buffer-path (and (local-variable-p 'exec-path) exec-path))
+         (buffer-env (and (local-variable-p 'process-environment)
+                          process-environment))
         outwin outbuf)
     (with-current-buffer
        (setq outbuf
@@ -1850,6 +1853,12 @@ Returns the compilation buffer created."
         ;; NB: must be done after (funcall mode) as that resets local variables
         (setq-local compilation-directory thisdir)
         (setq-local compilation-environment thisenv)
+        (if buffer-path
+            (setq-local exec-path buffer-path)
+          (kill-local-variable 'exec-path))
+        (if buffer-env
+            (setq-local process-environment buffer-env)
+          (kill-local-variable 'process-environment))
        (if highlight-regexp
             (setq-local compilation-highlight-regexp highlight-regexp))
         (if (or compilation-auto-jump-to-first-error
@@ -2767,7 +2776,7 @@ Actual value is never used, only the text property.")
     (set-window-margins w (- (car (window-margins w)) 2))))
 
 (defun compilation--set-up-arrow-spec-in-margins ()
-  "Set up compilation-arrow-overlay to display as an arrow in margins."
+  "Set up `compilation-arrow-overlay' to display as an arrow in margins."
   (setq overlay-arrow-string "")
   (setq compilation-arrow-overlay
        (make-overlay overlay-arrow-position overlay-arrow-position))
@@ -2780,7 +2789,7 @@ Actual value is never used, only the text property.")
             #'compilation--tear-down-arrow-spec-in-margins nil t))
 
 (defun compilation--tear-down-arrow-spec-in-margins ()
-  "Restore compilation-arrow-overlay to not using the margins, which are 
removed."
+  "Restore `compilation-arrow-overlay' to not using the margins, which are 
removed."
   (when (overlayp compilation-arrow-overlay)
     (overlay-put compilation-arrow-overlay 'before-string nil)
     (delete-overlay compilation-arrow-overlay)
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index 4f3ca924dd..634dd29bad 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -308,12 +308,11 @@ Can be overwritten by `cperl-hairy' if nil."
 Can be overwritten by `cperl-hairy' if nil.
 
 Uses `abbrev-mode' to do the expansion.  If you want to use your
-own abbrevs in cperl-mode, but do not want keywords to be
+own abbrevs in `cperl-mode', but do not want keywords to be
 electric, you must redefine `cperl-mode-abbrev-table': do
 \\[edit-abbrevs], search for `cperl-mode-abbrev-table', and, in
 that paragraph, delete the words that appear at the ends of lines and
-that begin with \"cperl-electric\".
-"
+that begin with \"cperl-electric\"."
   :type '(choice (const null) boolean)
   :group 'cperl-affected-by-hairy)
 
@@ -767,8 +766,7 @@ line-breaks/spacing between elements of the construct.
 
 10) Uses a linear-time algorithm for indentation of regions.
 
-11) Syntax-highlight, indentation, sexp-recognition inside regular expressions.
-")
+11) Syntax-highlight, indentation, sexp-recognition inside regular 
expressions.")
 
 (defvar cperl-speed 'please-ignore-this-line
   "This is an incomplete compendium of what is available in other parts
@@ -865,9 +863,7 @@ In regular expressions (including character classes):
                                backslashes of escape sequences
   `font-lock-variable-name-face' Interpolated constructs, embedded code,
                                POSIX classes (inside charclasses)
-  `font-lock-comment-face'     Embedded comments
-
-")
+  `font-lock-comment-face'     Embedded comments")
 
 
 
@@ -1304,7 +1300,7 @@ package name and for the version.")
                                    (regexp ,cperl--version-regexp)))
                ,cperl--ws*-rx
                (group-n 3 (or ";" "{")))
-    "A regular expression to collect package names for `imenu`.
+    "A regular expression to collect package names for `imenu'.
 Catches \"package NAME;\", \"package NAME VERSION;\", \"package
 NAME BLOCK\" and \"package NAME VERSION BLOCK.\" Contains three
 groups: One for the keyword \"package\", one for the package
@@ -1345,7 +1341,7 @@ heading text.")
   `(or ,cperl--package-for-imenu-rx
        ,cperl--sub-name-for-imenu-rx
        ,cperl--pod-heading-rx)
-  "A regular expression to collect stuff that goes into the `imenu` index.
+  "A regular expression to collect stuff that goes into the `imenu' index.
 Covers packages, subroutines, and POD headings.")
 
 ;; end of eval-and-compiled stuff
@@ -1411,7 +1407,7 @@ the last)."
   (concat                              ; Assume n groups before this...
    "\\("                               ; n+1=name-group
      cperl-white-and-comment-rex       ; n+2=pre-name
-     "\\(::[a-zA-Z_0-9:']+\\|[a-zA-Z_'][a-zA-Z_0-9:']*\\)" ; n+3=name
+     (rx-to-string `(group ,cperl--normal-identifier-rx))
    "\\)"                               ; END n+1=name-group
    (if named "" "?")
    "\\("                               ; n+4=proto-group
@@ -1452,7 +1448,7 @@ the last)."
 
 (defvar cperl-outline-regexp
   (rx (sequence line-start (0+ blank) (eval cperl--imenu-entries-rx)))
-  "The regular expression used for outline-minor-mode")
+  "The regular expression used for `outline-minor-mode'.")
 
 (defvar cperl-mode-syntax-table nil
   "Syntax table in use in CPerl mode buffers.")
@@ -1588,7 +1584,7 @@ into
 
 \\{cperl-mode-map}
 
-Setting the variable `cperl-font-lock' to t switches on font-lock-mode
+Setting the variable `cperl-font-lock' to t switches on `font-lock-mode'
 \(even with older Emacsen), `cperl-electric-lbrace-space' to t switches
 on electric space between $ and {, `cperl-electric-parens-string' is
 the string that contains parentheses that should be electric in CPerl
@@ -2479,7 +2475,8 @@ Will untabify if `cperl-electric-backspace-untabify' is 
non-nil."
 
 (put 'cperl-electric-backspace 'delete-selection 'supersede)
 
-(defun cperl-inside-parens-p ()                ;; NOT USED????
+(defun cperl-inside-parens-p ()
+  (declare (obsolete nil "28.1")) ; not used
   (condition-case ()
       (save-excursion
        (save-restriction
@@ -2576,12 +2573,13 @@ Return the amount the indentation changed by."
             '(?w ?_))
        (progn
         (backward-sexp)
-        (looking-at "[a-zA-Z_][a-zA-Z0-9_]*:[^:]"))))
+         (looking-at (rx (sequence (eval cperl--label-rx)
+                                   (not (in ":"))))))))
 
 (defun cperl-get-state (&optional parse-start start-state)
-  "Return list (START STATE DEPTH PRESTART),
+  "Return list (START STATE DEPTH PRESTART).
 START is a good place to start parsing, or equal to
-PARSE-START if preset,
+PARSE-START if preset.
 STATE is what is returned by `parse-partial-sexp'.
 DEPTH is true is we are immediately after end of block
 which contains START.
@@ -2743,7 +2741,9 @@ Will not look before LIM."
                                  (progn
                                    (forward-sexp -1)
                                    (skip-chars-backward " \t")
-                                   (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*[ 
\t]*:")))
+                                   (looking-at
+                                     (rx (sequence (0+ blank)
+                                                   (eval cperl--label-rx))))))
                             (get-text-property (point) 'first-format-line)))
 
                   ;; Look at previous line that's at column 0
@@ -3110,8 +3110,9 @@ and closing parentheses and brackets."
        (error "Got strange value of indent: %s" i))))))
 
 (defun cperl-calculate-indent-within-comment ()
-  "Return the indentation amount for line, assuming that
-the current line is to be regarded as part of a block comment."
+  "Return the indentation amount for line.
+Assume that the current line is to be regarded as part of a block
+comment."
   (let (end)
     (save-excursion
       (beginning-of-line)
@@ -3839,7 +3840,8 @@ recursive calls in starting lines of here-documents."
                "\\<" cperl-sub-regexp "\\>" ;  sub with proto/attr
                "\\("
                   cperl-white-and-comment-rex
-                  "\\(::[a-zA-Z_:'0-9]*\\|[a-zA-Z_'][a-zA-Z_:'0-9]*\\)\\)?" ; 
name
+                   (rx (group (eval cperl--normal-identifier-rx)))
+                "\\)"
                "\\("
                   cperl-maybe-white-and-comment-rex
                   "\\(([^()]*)\\|:[^:]\\)\\)" ; prototype or attribute start
@@ -4114,10 +4116,12 @@ recursive calls in starting lines of here-documents."
                                         (t t))))
                           ;; <file> or <$file>
                           (and (eq c ?\<)
-                               ;; Do not stringify <FH>, <$fh> :
+                                ;; Stringify what looks like a glob, but
+                               ;; do not stringify file handles <FH>, <$fh> :
                                (save-match-data
                                  (looking-at
-                                  "\\$?\\([_a-zA-Z:][_a-zA-Z0-9:]*\\)?>"))))
+                                   (rx (sequence (opt "$")
+                                                 (eval 
cperl--normal-identifier-rx)))))))
                      tb (match-beginning 0))
                (goto-char (match-beginning b1))
                (cperl-backward-to-noncomment (point-min))
@@ -4187,7 +4191,16 @@ recursive calls in starting lines of here-documents."
                                 (error nil)))
                             (if (or bb
                                     (looking-at ; $foo -> {s}
-                                     "[$@]\\$*\\([a-zA-Z0-9_:]+\\|[^{]\\)\\([ 
\t\n]*->\\)?[ \t\n]*{")
+                                      (rx
+                                       (sequence
+                                        (in "$@") (0+ "$")
+                                        (or
+                                         (eval cperl--normal-identifier-rx)
+                                         (not (in "{")))
+                                        (opt (sequence (eval cperl--ws*-rx))
+                                             "->")
+                                        (eval cperl--ws*-rx)
+                                        "{")))
                                     (and ; $foo[12] -> {s}
                                      (memq (following-char) '(?\{ ?\[))
                                      (progn
@@ -4202,7 +4215,12 @@ recursive calls in starting lines of here-documents."
                             (setq bb t))
                            ((and (eq (following-char) ?:)
                                  (eq b1 ?\{) ; Check for $ { s::bar }
-                                 (looking-at "::[a-zA-Z0-9_:]*[ \t\n\f]*}")
+                                 ;;  (looking-at "::[a-zA-Z0-9_:]*[ \t\n\f]*}")
+                                  (looking-at
+                                   (rx (sequence "::"
+                                                 (eval 
cperl--normal-identifier-rx)
+                                                 (eval cperl--ws*-rx)
+                                                 "}")))
                                  (progn
                                    (goto-char (1- go))
                                    (skip-chars-backward " \t\n\f")
@@ -4367,7 +4385,7 @@ recursive calls in starting lines of here-documents."
                                    "\\(" ;; XXXX 1-char variables, exc. |()\s
                                       "[$@]"
                                       "\\("
-                                         "[_a-zA-Z:][_a-zA-Z0-9:]*"
+                                          (rx (eval 
cperl--normal-identifier-rx))
                                       "\\|"
                                          "{[^{}]*}" ; only one-level allowed
                                       "\\|"
@@ -4823,6 +4841,7 @@ recursive calls in starting lines of here-documents."
           (progn
             (backward-sexp)
             ;; sub {BLK}, print {BLK} $data, but NOT `bless', `return', `tr', 
`constant'
+             ;; a-zA-Z is fine here, these are Perl keywords
             (or (and (looking-at "[a-zA-Z0-9_:]+[ \t\n\f]*[{#]") ; Method call 
syntax
                      (not (looking-at 
"\\(bless\\|return\\|q[wqrx]?\\|tr\\|[smy]\\|constant\\)\\>")))
                 ;; sub bless::foo {}
@@ -4840,7 +4859,7 @@ recursive calls in starting lines of here-documents."
 ;; Moreover, one takes positive approach (looks for else,grep etc)
 ;; another negative (looks for bless,tr etc)
 (defun cperl-after-block-p (lim &optional pre-block)
-  "Return true if the preceding } (if PRE-BLOCK, following {) delimits a block.
+  "Return non-nil if the preceding } (if PRE-BLOCK, following {) delimits a 
block.
 Would not look before LIM.  Assumes that LIM is a good place to begin a
 statement.  The kind of block we treat here is one after which a new
 statement would start; thus the block in ${func()} does not count."
@@ -4876,7 +4895,7 @@ statement would start; thus the block in ${func()} does 
not count."
       (error nil))))
 
 (defun cperl-after-expr-p (&optional lim chars test)
-  "Return true if the position is good for start of expression.
+  "Return non-nil if the position is good for start of expression.
 TEST is the expression to evaluate at the found position.  If absent,
 CHARS is a string that contains good characters to have before us (however,
 `}' is treated \"smartly\" if it is not in the list)."
@@ -4972,7 +4991,7 @@ CHARS is a string that contains good characters to have 
before us (however,
   (skip-chars-forward " \t"))
 
 (defun cperl-after-block-and-statement-beg (lim)
-  "Return true if the preceding ?} ends the statement."
+  "Return non-nil if the preceding ?} ends the statement."
   ;;  We assume that we are after ?\}
   (and
    (cperl-after-block-p lim)
@@ -5031,7 +5050,11 @@ conditional/loop constructs."
                                     cperl-maybe-white-and-comment-rex
                                     "\\(state\\|my\\|local\\|our\\)\\)?"
                                     cperl-maybe-white-and-comment-rex
-                                    "\\$[_a-zA-Z0-9]+\\)?\\)\\>"))
+                                     (rx
+                                      (sequence
+                                       "$"
+                                       (eval cperl--basic-identifier-rx)))
+                                    "\\)?\\)\\>"))
                            (progn
                              (goto-char top)
                              (forward-sexp 1)
@@ -5125,7 +5148,14 @@ Returns some position at the last line."
        ;; Looking at:
        ;; foreach my $var     (
        (if (looking-at
-            "[ \t]*\\<for\\(each\\)?[ \t]+\\(state\\|my\\|local\\|our\\)[ 
\t]*\\$[_a-zA-Z0-9]+\\(\t*\\|[ \t][ \t]+\\)[^ \t\n#]")
+             (rx (sequence (0+ blank) symbol-start
+                           "for" (opt "each")
+                           (1+ blank)
+                           (or "state" "my" "local" "our")
+                           (0+ blank)
+                           "$" (eval cperl--basic-identifier-rx)
+                           (1+ blank)
+                           (not (in " \t\n#")))))
            (progn
              (forward-sexp 3)
              (delete-horizontal-space)
@@ -5135,9 +5165,25 @@ Returns some position at the last line."
        ;; Looking at (with or without "}" at start, ending after "({"):
        ;; } foreach my $var ()         OR   {
        (if (looking-at
-            "[ \t]*\\(}[ 
\t]*\\)?\\<\\(els\\(e\\|if\\)\\|continue\\|if\\|unless\\|while\\|for\\(each\\)?\\(\\([
 \t]+\\(state\\|my\\|local\\|our\\)\\)?[ 
\t]*\\$[_a-zA-Z0-9]+\\)?\\|until\\)\\>\\([ \t]*(\\|[ \t\n]*{\\)\\|[ \t]*{")
+             (rx (sequence
+                  (0+ blank)
+                  (opt (sequence "}" (0+ blank) ))
+                  symbol-start
+                  (or "else" "elsif" "continue" "if" "unless" "while" "until"
+                      (sequence (or "for" "foreach")
+                                (opt
+                                 (opt (sequence (1+ blank)
+                                                (or "state" "my" "local" 
"our")))
+                                 (0+ blank)
+                                 "$" (eval cperl--basic-identifier-rx))))
+                  symbol-end
+                  (group-n 1
+                           (or
+                            (or (sequence (0+ blank) "(")
+                                (sequence (eval cperl--ws*-rx) "{"))
+                            (sequence (0+ blank) "{"))))))
            (progn
-             (setq ml (match-beginning 8)) ; "(" or "{" after control word
+             (setq ml (match-beginning 1)) ; "(" or "{" after control word
              (re-search-forward "[({]")
              (forward-char -1)
              (setq p (point))
@@ -5454,7 +5500,7 @@ indentation and initial hashes.  Behaves usually outside 
of comment."
 (defvar cperl-imenu-pod-keywords '("=head"))
 
 (defun cperl-imenu--create-perl-index ()
-  "Implement `imenu-create-index-function` for CPerl mode.
+  "Implement `imenu-create-index-function' for CPerl mode.
 This function relies on syntaxification to exclude lines which
 look like declarations but actually are part of a string, a
 comment, or POD."
@@ -5547,7 +5593,11 @@ comment, or POD."
           (setq lst index-sub-alist)
           (while lst
             (setq elt (car lst) lst (cdr lst))
-            (cond ((string-match "\\(::\\|'\\)[_a-zA-Z0-9]+$" (car elt))
+            (cond ((string-match
+                     (rx (sequence (or "::" "'")
+                                   (eval cperl--basic-identifier-rx)
+                                   string-end))
+                     (car elt))
                    (setq pack (substring (car elt) 0 (match-beginning 0)))
                    (if (setq group (assoc pack hier-list))
                        (if (listp (cdr group))
@@ -5620,7 +5670,7 @@ comment, or POD."
 (defvar cperl-font-lock-keywords nil
   "Additional expressions to highlight in Perl mode.  Default set.")
 (defvar cperl-font-lock-keywords-2 nil
-  "Additional expressions to highlight in Perl mode.  Maximal set")
+  "Additional expressions to highlight in Perl mode.  Maximal set.")
 
 (defun cperl-load-font-lock-keywords ()
   (or cperl-faces-init (cperl-init-faces))
@@ -5635,10 +5685,10 @@ comment, or POD."
   cperl-font-lock-keywords-2)
 
 (defun cperl-font-lock-syntactic-face-function (state)
-  "Apply faces according to their syntax type.  In CPerl mode, this
-is used for here-documents which have been marked as c-style
-comments.  For everything else, delegate to the default
-function."
+  "Apply faces according to their syntax type.
+In CPerl mode, this is used for here-documents which have been
+marked as c-style comments.  For everything else, delegate to the
+default function."
   (cond
    ;; A c-style comment is a HERE-document.  Fontify if requested.
    ((and (eq 2 (nth 7 state))
@@ -5649,8 +5699,7 @@ function."
 (defun cperl-init-faces ()
   (condition-case errs
       (progn
-       (let (t-font-lock-keywords t-font-lock-keywords-1 font-lock-anchored)
-         (setq font-lock-anchored t)
+       (let (t-font-lock-keywords t-font-lock-keywords-1)
          (setq
           t-font-lock-keywords
           (list
@@ -5763,20 +5812,41 @@ function."
                         (if (eq (char-after (cperl-1- (match-end 0))) ?\{ )
                             'font-lock-function-name-face
                           'font-lock-variable-name-face))))
-           '("\\<\\(package\\|require\\|use\\|import\\|no\\|bootstrap\\)[ 
\t]+\\([a-zA-Z_][a-zA-Z_0-9:]*\\)[ \t;]" ; require A if B;
-             2 font-lock-function-name-face)
+            `(,(rx (sequence symbol-start
+                             (or "package" "require" "use" "import"
+                                 "no" "bootstrap")
+                             (eval cperl--ws+-rx)
+                             (group-n 1 (eval cperl--normal-identifier-rx))
+                             (any " \t;"))) ; require A if B;
+             1 font-lock-function-name-face)
            '("^[ \t]*format[ \t]+\\([a-zA-Z_][a-zA-Z_0-9:]*\\)[ \t]*=[ \t]*$"
              1 font-lock-function-name-face)
-           (cond (font-lock-anchored
-                  '("\\([]}\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ 
\t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"
-                    (2 font-lock-string-face t)
-                    ("\\=[ \t]*{[ \t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"
-                     nil nil
-                     (1 font-lock-string-face t))))
-                 (t '("\\([]}\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ 
\t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"
-                      2 font-lock-string-face t)))
-           '("[[ \t{,(]\\(-?[a-zA-Z0-9_:]+\\)[ \t]*=>" 1
-             font-lock-string-face t)
+            ;; bareword hash key: $foo{bar}
+            `(,(rx (or (in "]}\\%@>*&") ; What Perl is this?
+                       (sequence "$" (eval cperl--normal-identifier-rx)))
+                   (0+ blank) "{" (0+ blank)
+                   (group-n 1 (sequence (opt "-")
+                                        (eval cperl--basic-identifier-rx)))
+                   (0+ blank) "}")
+;;         '("\\([]}\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ 
\t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"
+             (1 font-lock-string-face t)
+              ;; anchored bareword hash key: $foo{bar}{baz}
+              (,(rx point
+                   (0+ blank) "{" (0+ blank)
+                   (group-n 1 (sequence (opt "-")
+                                        (eval cperl--basic-identifier-rx)))
+                   (0+ blank) "}")
+             ;; ("\\=[ \t]*{[ \t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"
+              nil nil
+              (1 font-lock-string-face t)))
+              ;; hash element assignments with bareword key => value
+              `(,(rx (in "[ \t{,()")
+                     (group-n 1 (sequence (opt "-")
+                                          (eval cperl--basic-identifier-rx)))
+                     (0+ blank) "=>")
+                1 font-lock-string-face t)
+;;         '("[[ \t{,(]\\(-?[a-zA-Z0-9_:]+\\)[ \t]*=>" 1
+;;           font-lock-string-face t)
             ;; labels
             `(,(rx
                 (sequence
@@ -5800,83 +5870,130 @@ function."
             ;;; '("[$*]{?\\(\\sw+\\)" 1 font-lock-variable-name-face)
             ;;; '("\\([@%]\\|\\$#\\)\\(\\sw+\\)"
             ;;;  (2 (cons font-lock-variable-name-face '(underline))))
-           (cond (font-lock-anchored
                   ;; 1=my_etc, 2=white? 3=(+white? 4=white? 5=var
-                  `(,(concat "\\<\\(state\\|my\\|local\\|our\\)"
-                                 cperl-maybe-white-and-comment-rex
-                                 "\\(("
-                                    cperl-maybe-white-and-comment-rex
-                                 
"\\)?\\([$@%*]\\([a-zA-Z0-9_:]+\\|[^a-zA-Z0-9_]\\)\\)")
-                      (5 ,(if cperl-font-lock-multiline
-                                'font-lock-variable-name-face
-                              '(progn  (setq cperl-font-lock-multiline-start
-                                             (match-beginning 0))
-                                       'font-lock-variable-name-face)))
-                      (,(concat "\\="
-                                  cperl-maybe-white-and-comment-rex
-                                  ","
-                                  cperl-maybe-white-and-comment-rex
-                                  
"\\([$@%*]\\([a-zA-Z0-9_:]+\\|[^a-zA-Z0-9_]\\)\\)")
-                       ;; Bug in font-lock: limit is used not only to limit
-                       ;; searches, but to set the "extend window for
-                       ;; facification" property.  Thus we need to minimize.
-                       ,(if cperl-font-lock-multiline
-                            '(if (match-beginning 3)
-                                 (save-excursion
-                                   (goto-char (match-beginning 3))
-                                   (condition-case nil
-                                       (forward-sexp 1)
-                                     (error
-                                      (condition-case nil
-                                          (forward-char 200)
-                                        (error nil)))) ; typeahead
-                                   (1- (point))) ; report limit
-                               (forward-char -2)) ; disable continued expr
-                            '(if (match-beginning 3)
-                                 (point-max) ; No limit for continuation
-                               (forward-char -2))) ; disable continued expr
-                       ,(if cperl-font-lock-multiline
-                              nil
-                            '(progn    ; Do at end
-                               ;; "my" may be already fontified (POD),
-                               ;; so cperl-font-lock-multiline-start is nil
-                               (if (or (not cperl-font-lock-multiline-start)
-                                       (> 2 (count-lines
-                                             cperl-font-lock-multiline-start
-                                             (point))))
-                                   nil
-                                 (put-text-property
-                                  (1+ cperl-font-lock-multiline-start) (point)
-                                  'syntax-type 'multiline))
-                               (setq cperl-font-lock-multiline-start nil)))
-                       (3 font-lock-variable-name-face))))
-                 (t '("^[ \t{}]*\\(state\\|my\\|local\\|our\\)[ \t]*\\(([ 
\t]*\\)?\\([$@%*][a-zA-Z0-9_:]+\\)"
-                      3 font-lock-variable-name-face)))
-           '("\\<for\\(each\\)?\\([ \t]+\\(state\\|my\\|local\\|our\\)\\)?[ 
\t]*\\(\\$[a-zA-Z_][a-zA-Z_0-9]*\\)[ \t]*("
+           `(,(rx (sequence (or "state" "my" "local" "our"))
+                   (eval cperl--ws*-rx)
+                   (opt (sequence "(" (eval cperl--ws*-rx)))
+                   (group
+                    (in "$@%*")
+                    (or
+                     (eval cperl--normal-identifier-rx)
+                     (eval cperl--special-identifier-rx))
+                    )
+                   )
+              ;; (concat "\\<\\(state\\|my\\|local\\|our\\)"
+             ;;          cperl-maybe-white-and-comment-rex
+             ;;          "\\(("
+             ;;          cperl-maybe-white-and-comment-rex
+             ;;          
"\\)?\\([$@%*]\\([a-zA-Z0-9_:]+\\|[^a-zA-Z0-9_]\\)\\)")
+             ;; (5 ,(if cperl-font-lock-multiline
+             (1 ,(if cperl-font-lock-multiline
+                     'font-lock-variable-name-face
+                   '(progn  (setq cperl-font-lock-multiline-start
+                                  (match-beginning 0))
+                            'font-lock-variable-name-face)))
+             (,(rx (sequence point
+                              (eval cperl--ws*-rx)
+                              ","
+                              (eval cperl--ws*-rx)
+                              (group
+                               (in "$@%*")
+                               (or
+                                (eval cperl--normal-identifier-rx)
+                                (eval cperl--special-identifier-rx))
+                               )
+                              )
+                    )
+               ;; ,(concat "\\="
+              ;;       cperl-maybe-white-and-comment-rex
+              ;;       ","
+              ;;       cperl-maybe-white-and-comment-rex
+              ;;       "\\([$@%*]\\([a-zA-Z0-9_:]+\\|[^a-zA-Z0-9_]\\)\\)")
+              ;; Bug in font-lock: limit is used not only to limit
+              ;; searches, but to set the "extend window for
+              ;; facification" property.  Thus we need to minimize.
+              ,(if cperl-font-lock-multiline
+                   '(if (match-beginning 1)
+                        (save-excursion
+                          (goto-char (match-beginning 1))
+                          (condition-case nil
+                              (forward-sexp 1)
+                            (error
+                             (condition-case nil
+                                 (forward-char 200)
+                               (error nil)))) ; typeahead
+                          (1- (point))) ; report limit
+                      (forward-char -2)) ; disable continued expr
+                 '(if (match-beginning 1)
+                      (point-max) ; No limit for continuation
+                    (forward-char -2))) ; disable continued expr
+              ,(if cperl-font-lock-multiline
+                   nil
+                 '(progn       ; Do at end
+                    ;; "my" may be already fontified (POD),
+                    ;; so cperl-font-lock-multiline-start is nil
+                    (if (or (not cperl-font-lock-multiline-start)
+                            (> 2 (count-lines
+                                  cperl-font-lock-multiline-start
+                                  (point))))
+                        nil
+                      (put-text-property
+                       (1+ cperl-font-lock-multiline-start) (point)
+                       'syntax-type 'multiline))
+                    (setq cperl-font-lock-multiline-start nil)))
+              (1 font-lock-variable-name-face)))
+            ;; foreach my $foo (
+            `(,(rx symbol-start "for" (opt "each")
+                   (opt (sequence (1+ blank)
+                                  (or "state" "my" "local" "our")))
+                   (0+ blank)
+                   (group-n 1 (sequence "$"
+                                        (eval cperl--basic-identifier-rx)))
+                   (0+ blank) "(")
+;;         '("\\<for\\(each\\)?\\([ \t]+\\(state\\|my\\|local\\|our\\)\\)?[ 
\t]*\\(\\$[a-zA-Z_][a-zA-Z_0-9]*\\)[ \t]*("
              4 font-lock-variable-name-face)
            ;; Avoid $!, and s!!, qq!! etc. when not fontifying syntactically
            '("\\(?:^\\|[^smywqrx$]\\)\\(!\\)" 1 font-lock-negation-char-face)
            '("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)))
          (setq
           t-font-lock-keywords-1
-          '(
-            ("\\(\\([@%]\\|\\$#\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)" 1
+          `(
+             ;; arrays and hashes.  Access to elements is fixed below
+             (,(rx (group-n 1 (group-n 2 (or (in "@%") "$#"))
+                            (eval cperl--normal-identifier-rx)))
+              1
+;;          ("\\(\\([@%]\\|\\$#\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)" 1
              (if (eq (char-after (match-beginning 2)) ?%)
                  'cperl-hash-face
                'cperl-array-face)
              nil)                      ; arrays and hashes
-            ("\\(\\([$@%]+\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)[ \t]*\\([[{]\\)"
+             ;; access to array/hash elements
+             (,(rx (group-n 1 (group-n 2 (in "$@%"))
+                            (eval cperl--normal-identifier-rx))
+                   (0+ blank)
+                   (group-n 3 (in "[{")))
+;;          ("\\(\\([$@%]+\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)[ \t]*\\([[{]\\)"
              1
              (if (= (- (match-end 2) (match-beginning 2)) 1)
                  (if (eq (char-after (match-beginning 3)) ?{)
                      'cperl-hash-face
                    'cperl-array-face)             ; arrays and hashes
                font-lock-variable-name-face)      ; Just to put something
-             t)
-            ("\\(@\\|\\$#\\)\\(\\$+\\([a-zA-Z_:][a-zA-Z0-9_:]*\\|[^ 
\t\n]\\)\\)"
+             t)                                   ; override previous
+             ;; @$ array dereferences, $#$ last array index
+             (,(rx (group-n 1 (or "@" "$#"))
+                   (group-n 2 (sequence "$"
+                                        (or (eval cperl--normal-identifier-rx)
+                                            (not (in " \t\n"))))))
+            ;; ("\\(@\\|\\$#\\)\\(\\$+\\([a-zA-Z_:][a-zA-Z0-9_:]*\\|[^ 
\t\n]\\)\\)"
              (1 'cperl-array-face)
              (2 font-lock-variable-name-face))
-            ("\\(%\\)\\(\\$+\\([a-zA-Z_:][a-zA-Z0-9_:]*\\|[^ \t\n]\\)\\)"
+             ;; %$ hash dereferences
+             (,(rx (group-n 1 "%")
+                   (group-n 2 (sequence "$"
+                                        (or (eval cperl--normal-identifier-rx)
+                                            (not (in " \t\n"))))))
+            ;; ("\\(%\\)\\(\\$+\\([a-zA-Z_:][a-zA-Z0-9_:]*\\|[^ \t\n]\\)\\)"
              (1 'cperl-hash-face)
              (2 font-lock-variable-name-face))
 ;;("\\([smy]\\|tr\\)\\([^a-z_A-Z0-9]\\)\\(\\([^\n\\]*||\\)\\)\\2")
@@ -6251,7 +6368,7 @@ side-effect of memorizing only.  Examples in 
`cperl-style-examples'."
                  (filename nodename &optional no-going-back strict-case))
 
 (defun cperl-info-buffer (type)
-  ;; Returns buffer with documentation.  Creates if missing.
+  ;; Return buffer with documentation.  Creates if missing.
   ;; If TYPE, this vars buffer.
   ;; Special care is taken to not stomp over an existing info buffer
   (let* ((bname (if type "*info-perl-var*" "*info-perl*"))
@@ -6385,7 +6502,7 @@ Customized by setting variables 
`cperl-shrink-wrap-info-frame',
 (declare-function imenu-choose-buffer-index "imenu" (&optional prompt alist))
 
 (defun cperl-imenu-on-info ()
-  "Shows imenu for Perl Info Buffer.
+  "Show imenu for Perl Info Buffer.
 Opens Perl Info buffer if needed."
   (interactive)
   (require 'imenu)
@@ -6438,6 +6555,8 @@ Will not move the position at the start to the left."
       (indent-region beg end nil)
       (goto-char beg)
       (setq col (current-column))
+      ;; Assuming that lineup is done on Perl syntax, this regexp
+      ;; doesn't need to be unicode aware -- haj, 2021-09-10
       (if (looking-at "[a-zA-Z0-9_]")
          (if (looking-at "\\<[a-zA-Z0-9_]+\\>")
              (setq search
@@ -6475,6 +6594,9 @@ Will not move the position at the start to the left."
   "Run etags with appropriate options for Perl files.
 If optional argument ALL is `recursive', will process Perl files
 in subdirectories too."
+  ;; Apparently etags doesn't support UTF-8 encoded sources, and usage
+  ;; of etags has been commented out in the menu since ... well,
+  ;; forever.  So, let's just stick to ASCII here. -- haj, 2021-09-14
   (interactive)
   (let ((cmd "etags")
        (args `("-l" "none" "-r"
@@ -6614,6 +6736,9 @@ Does not move point."
     ;; Search for the function
     (progn ;;save-match-data
       (while (re-search-forward
+              ;; FIXME: Should XS code be unicode aware?  Recent C
+              ;; compilers (Gcc 10+) are, but I guess this isn't used
+              ;; much. -- haj, 2021-09-14
              "^\\([ \t]*MODULE\\>[^\n]*\\<PACKAGE[ \t]*=[ 
\t]*\\([a-zA-Z_][a-zA-Z_0-9:]*\\)\\>\\|\\([a-zA-Z_][a-zA-Z_0-9]*\\)(\\|[ 
\t]*BOOT:\\)"
              nil t)
        (cond
@@ -6676,7 +6801,7 @@ Does not move point."
        (setq lst
              (mapcar
                (lambda (elt)
-                 (cond ((string-match "^[_a-zA-Z]" (car elt))
+                 (cond ((string-match (rx line-start (or alpha "_")) (car elt))
                         (goto-char (cdr elt))
                         (beginning-of-line) ; pos should be of the start of 
the line
                         (list (car elt)
@@ -6706,9 +6831,14 @@ Does not move point."
                        ","
                        (number-to-string (1- (elt elt 1))) ; Char pos 0-based
                        "\n")
-               (if (and (string-match "^[_a-zA-Z]+::" (car elt))
-                        (string-match (concat "^" cperl-sub-regexp "[ 
\t]+\\([_a-zA-Z]+\\)[^:_a-zA-Z]")
-                                      (elt elt 3)))
+               (if (and (string-match (rx line-start
+                                           (eval cperl--basic-identifier-rx) 
"++")
+                                       (car elt))
+                         (string-match (rx-to-string `(sequence line-start
+                                                                (regexp 
,cperl-sub-regexp)
+                                                                (1+ (in " \t"))
+                                                                
,cperl--normal-identifier-rx))
+                                       (elt elt 3)))
                    ;; Need to insert the name without package as well
                    (setq lst (cons (cons (substring (elt elt 3)
                                                     (match-beginning 1)
@@ -6733,8 +6863,7 @@ Does not move point."
   "Add to TAGS data for \"pure\" Perl files in the current directory and kids.
 Use as
   emacs -batch -q -no-site-file -l emacs/cperl-mode.el \\
-        -f cperl-add-tags-recurse-noxs
-"
+        -f cperl-add-tags-recurse-noxs"
   (cperl-write-tags nil nil t t nil t))
 
 (defun cperl-add-tags-recurse-noxs-fullpath ()
@@ -6742,16 +6871,14 @@ Use as
 Writes down fullpath, so TAGS is relocatable (but if the build directory
 is relocated, the file TAGS inside it breaks). Use as
   emacs -batch -q -no-site-file -l emacs/cperl-mode.el \\
-        -f cperl-add-tags-recurse-noxs-fullpath
-"
+        -f cperl-add-tags-recurse-noxs-fullpath"
   (cperl-write-tags nil nil t t nil t ""))
 
 (defun cperl-add-tags-recurse ()
   "Add to TAGS file data for Perl files in the current directory and kids.
 Use as
   emacs -batch -q -no-site-file -l emacs/cperl-mode.el \\
-        -f cperl-add-tags-recurse
-"
+        -f cperl-add-tags-recurse"
   (cperl-write-tags nil nil t t))
 
 (defvar cperl-tags-file-name "TAGS"
@@ -7161,14 +7288,14 @@ Currently it is tuned to C and Perl syntax."
   ;;(concat "\\("
   (mapconcat
    #'identity
-   '("[$@%*&][0-9a-zA-Z_:]+\\([ \t]*[[{]\\)?" ; Usual variable
+   '("[$@%*&][[:alnum:]_:]+\\([ \t]*[[{]\\)?" ; Usual variable
      "[$@]\\^[a-zA-Z]"                 ; Special variable
      "[$@][^ \n\t]"                    ; Special variable
      "-[a-zA-Z]"                       ; File test
      "\\\\[a-zA-Z0]"                   ; Special chars
      "^=[a-z][a-zA-Z0-9_]*"            ; POD sections
      "[-!&*+,./<=>?\\^|~]+"            ; Operator
-     "[a-zA-Z_0-9:]+"                  ; symbol or number
+     "[[:alnum:]_:]+"                  ; symbol or number
      "x="
      "#!")
    ;;"\\)\\|\\("
@@ -7184,7 +7311,7 @@ Currently it is tuned to C and Perl syntax."
   ;; Does not save-excursion
   ;; Get to the something meaningful
   (or (eobp) (eolp) (forward-char 1))
-  (re-search-backward "[-a-zA-Z0-9_:!&*+,./<=>?\\^|~$%@]"
+  (re-search-backward "[-[:alnum:]_:!&*+,./<=>?\\^|~$%@]"
                      (point-at-bol)
                      'to-beg)
   ;;  (cond
@@ -7193,8 +7320,8 @@ Currently it is tuned to C and Perl syntax."
   ;;    (or (bobp) (backward-char 1))))
   ;; Try to backtrace
   (cond
-   ((looking-at "[a-zA-Z0-9_:]")       ; symbol
-    (skip-chars-backward "a-zA-Z0-9_:")
+   ((looking-at "[[:alnum:]_:]")       ; symbol
+    (skip-chars-backward "[:alnum:]_:")
     (cond
      ((and (eq (preceding-char) ?^)    ; $^I
           (eq (char-after (- (point) 2)) ?\$))
@@ -7205,7 +7332,7 @@ Currently it is tuned to C and Perl syntax."
           (eq (current-column) 1))
       (forward-char -1)))              ; =head1
     (if (and (eq (preceding-char) ?\<)
-            (looking-at "\\$?[a-zA-Z0-9_:]+>")) ; <FH>
+             (looking-at "\\$?[[:alnum:]_:]+>")) ; <FH>
        (forward-char -1)))
    ((and (looking-at "=") (eq (preceding-char) ?x)) ; x=
     (forward-char -1))
@@ -7218,15 +7345,15 @@ Currently it is tuned to C and Perl syntax."
           (not (eq (char-after (- (point) 2)) ?\$))) ; $-
       (forward-char -1))
      ((and (eq (following-char) ?\>)
-          (string-match "[a-zA-Z0-9_]" (char-to-string (preceding-char)))
+          (string-match "[[:alnum:]_]" (char-to-string (preceding-char)))
           (save-excursion
             (forward-sexp -1)
             (and (eq (preceding-char) ?\<)
-                 (looking-at "\\$?[a-zA-Z0-9_:]+>")))) ; <FH>
+                 (looking-at "\\$?[[:alnum:]_:]+>")))) ; <FH>
       (search-backward "<"))))
    ((and (eq (following-char) ?\$)
         (eq (preceding-char) ?\<)
-        (looking-at "\\$?[a-zA-Z0-9_:]+>")) ; <$fh>
+        (looking-at "\\$?[[:alnum:]_:]+>")) ; <$fh>
     (forward-char -1)))
   (if (looking-at cperl-have-help-regexp)
       (buffer-substring (match-beginning 0) (match-end 0))))
@@ -7735,11 +7862,10 @@ prototype \\&SUB        Returns prototype of the 
function given a reference.
 =begin formatname      Start directly formatted region.
 =end formatname        End directly formatted region.
 =for formatname text   Paragraph in special format.
-=encoding encodingname Encoding of the document.
-")
+=encoding encodingname Encoding of the document.")
 
 (defun cperl-switch-to-doc-buffer (&optional interactive)
-  "Go to the perl documentation buffer and insert the documentation."
+  "Go to the Perl documentation buffer and insert the documentation."
   (interactive "p")
   (let ((buf (get-buffer-create cperl-doc-buffer)))
     (if interactive
@@ -8398,7 +8524,7 @@ If a region is highlighted, restricts to the region."
                            beg end))))
 
 (defun cperl-map-pods-heres (func &optional prop s end)
-  "Executes a function over regions of pods or here-documents.
+  "Execute a function over regions of pods or here-documents.
 PROP is the text-property to search for; default to `in-pod'.  Stop when
 function returns nil."
   (let (pos posend has-prop (cont t))
@@ -8573,7 +8699,7 @@ Delay of auto-help controlled by `cperl-lazy-help-time'."
     (remove-text-properties beg end '(face nil))))
 
 (defun cperl-font-lock-fontify-region-function (beg end loudly)
-  "Extends the region to safe positions, then calls the default function.
+  "Extend the region to safe positions, then call the default function.
 Newer `font-lock's can do it themselves.
 We unwind only as far as needed for fontification.  Syntaxification may
 do extra unwind via `cperl-unwind-to-safe'."
diff --git a/lisp/progmodes/ebnf-dtd.el b/lisp/progmodes/ebnf-dtd.el
index 93bae5a33c..9185711848 100644
--- a/lisp/progmodes/ebnf-dtd.el
+++ b/lisp/progmodes/ebnf-dtd.el
@@ -56,14 +56,14 @@
 ;;
 ;; Char ::= #x9 | #xA | #xD
 ;;        | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
-;; /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
+;; /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.  
*/
 ;;
 ;; /* NOTE:
 ;;
 ;;    Document authors are encouraged to avoid "compatibility characters", as
 ;;    defined in section 6.8 of [Unicode] (see also D21 in section 3.6 of
 ;;    [Unicode3]). The characters defined in the following ranges are also
-;;    discouraged. They are either control characters or permanently undefined
+;;    discouraged.  They are either control characters or permanently undefined
 ;;    Unicode characters:
 ;;
 ;;    [#x7F-#x84],      [#x86-#x9F],      [#xFDD0-#xFDDF],
@@ -72,7 +72,7 @@
 ;;    [#7FFFE-#x7FFFF], [#8FFFE-#x8FFFF], [#9FFFE-#x9FFFF],
 ;;    [#AFFFE-#xAFFFF], [#BFFFE-#xBFFFF], [#CFFFE-#xCFFFF],
 ;;    [#DFFFE-#xDFFFF], [#EFFFE-#xEFFFF], [#FFFFE-#xFFFFF],
-;;    [#10FFFE-#x10FFFF]. */
+;;    [#10FFFE-#x10FFFF].  */
 ;;
 ;;
 ;; /* White Space */
@@ -115,7 +115,7 @@
 ;;    Although the EntityValue production allows the definition of a general
 ;;    entity consisting of a single explicit < in the literal (e.g., <!ENTITY
 ;;    mylt "<">), it is strongly advised to avoid this practice since any
-;;    reference to that entity will cause a well-formedness error. */
+;;    reference to that entity will cause a well-formedness error.  */
 ;;
 ;;
 ;; /* Character Data */
diff --git a/lisp/progmodes/ebnf-ebx.el b/lisp/progmodes/ebnf-ebx.el
index 5d8541931e..ae48881ee9 100644
--- a/lisp/progmodes/ebnf-ebx.el
+++ b/lisp/progmodes/ebnf-ebx.el
@@ -43,7 +43,7 @@
 ;;
 ;;
 ;; rule ::= symbol '::=' expression
-;; /* rules are separated by at least one blank line. */
+;; /* rules are separated by at least one blank line.  */
 ;;
 ;; expression ::= concatenation ('|' concatenation)*
 ;;
diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el
index 6ad55fc142..21ab48b110 100644
--- a/lisp/progmodes/ebnf2ps.el
+++ b/lisp/progmodes/ebnf2ps.el
@@ -5,7 +5,7 @@
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, ebnf, PostScript
 ;; Version: 4.4
-;; X-URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
+;; URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
 
 ;; This file is part of GNU Emacs.
 
@@ -1165,7 +1165,7 @@ Please send all bug fixes and enhancements to
 ;;; Interface to the command system
 
 (defgroup postscript nil
-  "Printing with PostScript"
+  "Printing with PostScript."
   :tag "PostScript"
   :version "20"
   :group 'environment)
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el
index 7524c280f2..ab0329d7ee 100644
--- a/lisp/progmodes/ebrowse.el
+++ b/lisp/progmodes/ebrowse.el
@@ -3062,7 +3062,7 @@ the first derived class."
 
 (easy-menu-define
  ebrowse-member-name-object-menu ebrowse-member-mode-map
- "Object menu for member names"
+ "Object menu for member names."
  '("Ebrowse"
    ["Find Definition" ebrowse-find-member-definition
     :help "Find this member's definition in the source files"
@@ -4200,7 +4200,7 @@ EVENT is the mouse event."
 
 (easy-menu-define
  ebrowse-tree-buffer-class-object-menu ebrowse-tree-mode-map
- "Object menu for classes in the tree buffer"
+ "Object menu for classes in the tree buffer."
  '("Class"
    ["Functions" ebrowse-tree-command:show-member-functions
     :help "Display a list of member functions"
@@ -4242,7 +4242,7 @@ EVENT is the mouse event."
 
 (easy-menu-define
  ebrowse-tree-buffer-object-menu ebrowse-tree-mode-map
- "Object menu for tree buffers"
+ "Object menu for tree buffers."
  '("Ebrowse"
    ["Filename Display" ebrowse-toggle-file-name-display
     :help "Toggle display of source files names"
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index ef36c1f087..04311985c1 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -153,6 +153,34 @@ All commands in `lisp-mode-shared-map' are inherited by 
this map.")
      :style toggle
      :selected (bound-and-true-p eldoc-mode)]))
 
+(defun elisp-context-menu (menu click)
+  "Populate MENU with symbol help commands at CLICK."
+  (when (thing-at-mouse click 'symbol)
+    (define-key-after menu [elisp-separator] menu-bar-separator
+      'middle-separator)
+    (define-key-after menu [info-lookup-symbol]
+      '(menu-item "Look up in Manual"
+                  (lambda (click) (interactive "e")
+                    (info-lookup-symbol
+                     (intern (thing-at-mouse click 'symbol t))))
+                  :help "Display definition in relevant manual")
+      'elisp-separator)
+    (let* ((string (thing-at-mouse click 'symbol t))
+           (symbol (when (stringp string) (intern string)))
+           (title (cond
+                   ((not (symbolp symbol)) nil)
+                   ((fboundp symbol) "Function")
+                   ((and (boundp symbol) (not (keywordp symbol))) "Variable")
+                   ((facep symbol) "Face"))))
+      (when title
+        (define-key-after menu [describe-symbol]
+          `(menu-item (format "Describe %s" ,title)
+                      (lambda (_click) (interactive "e")
+                        (describe-symbol ',symbol))
+                      :help "Display the full documentation of symbol")
+          'elisp-separator))))
+  menu)
+
 (defun emacs-lisp-byte-compile ()
   "Byte compile the file containing the current buffer."
   (interactive nil emacs-lisp-mode)
@@ -183,7 +211,7 @@ All commands in `lisp-mode-shared-map' are inherited by 
this map.")
 Load the compiled code when finished.
 
 Use `emacs-lisp-byte-compile-and-load' in combination with
-`native-comp-deferred-compilation' set to `t' to achieve asynchronous
+`native-comp-deferred-compilation' set to t to achieve asynchronous
 native compilation."
   (interactive nil emacs-lisp-mode)
   (emacs-lisp--before-compile-buffer)
@@ -256,6 +284,9 @@ Commands:
 Delete converts tabs to spaces as it moves back.
 Blank lines separate paragraphs.  Semicolons start comments.
 
+When editing Lisp data (as opposed to code), `lisp-data-mode' can
+be used instead.
+
 \\{emacs-lisp-mode-map}"
   :group 'lisp
   (defvar project-vc-external-roots-function)
@@ -280,7 +311,8 @@ Blank lines separate paragraphs.  Semicolons start comments.
             #'elisp-completion-at-point nil 'local)
   (add-hook 'flymake-diagnostic-functions #'elisp-flymake-checkdoc nil t)
   (add-hook 'flymake-diagnostic-functions
-              #'elisp-flymake-byte-compile nil t))
+              #'elisp-flymake-byte-compile nil t)
+  (add-hook 'context-menu-functions #'elisp-context-menu 10 t))
 
 ;; Font-locking support.
 
@@ -661,6 +693,7 @@ functions are annotated with \"<f>\" via the
 ;;; Xref backend
 
 (declare-function xref-make "xref" (summary location))
+(declare-function xref-item-location "xref" (this))
 
 (defun elisp--xref-backend () 'elisp)
 
@@ -696,21 +729,214 @@ Each function should return a list of xrefs, or nil; the 
first
 non-nil result supersedes the xrefs produced by
 `elisp--xref-find-definitions'.")
 
+(defun elisp--xref-list-index ()
+  "Return the list index of the form at point, moving to the start.
+If the buffer start was reached, return nil."
+  (let ((i 0))
+    (while (condition-case nil
+               (let ((pt (point)))
+                 (backward-sexp)
+                 (< (point) pt))
+             (scan-error nil))
+      (setq i (1+ i)))
+    (and (not (bobp)) i)))
+
+(defun elisp--xref-infer-namespace (pos)
+  "Find the likely namespace of the identifier at POS.
+Return one of `function', `variable' `maybe-variable', `feature', `face', or
+`any' (indicating any namespace).  `maybe-variable' indicates a variable
+namespace but with lower confidence."
+  (save-excursion
+    (goto-char pos)
+    (cl-flet ((looking-at-sym ()
+                (let ((val (save-excursion
+                             (ignore-errors (read (current-buffer))))))
+                  (and (symbolp val) val))))
+      (cond
+       ((and (eq (char-before pos) ?\')
+             (eq (char-before (1- pos)) ?#))
+        ;; #'IDENT
+        'function)
+       ((memq (char-before pos) '(?\' ?`))
+        ;; 'IDENT or `IDENT -- try to disambiguate.
+        (backward-char)                 ; Step over '
+        (let ((i (elisp--xref-list-index))
+              (sym (looking-at-sym)))
+          (cond
+           ((eql i 1)
+            (cond
+             ((memq sym '( featurep require provide))
+              'feature)
+             ((memq sym
+                    '(
+                      ;; We are mostly interested in functions that take a
+                      ;; function symbol as argument:
+                      fboundp symbol-function fset
+                      ;; ... but we include some common higher-order functions
+                      ;; as well, even though the argument really should
+                      ;; be #'-quoted:
+                      function-get function-put
+                      func-arity functionp
+                      funcall funcall-interactively
+                      apply mapcar mapc mapcan mapconcat
+                      apply-partially
+                      substitute-key-definition))
+              'function)
+             ((memq sym
+                    '(
+                      ;; Functions taking a variable symbol as first argument.
+                      ;; More of these could be added for greater precision.
+                      boundp set symbol-value
+                      special-variable-p local-variable-p
+                      local-variable-if-set-p
+                      make-variable-buffer-local
+                      default-value set-default make-local-variable
+                      buffer-local-value))
+              'variable)
+             ((memq sym
+                    '(
+                      ;; FIXME: Add more functions taking a face
+                      ;; symbol for greater precision.
+                      facep face-name face-id))
+              'face)
+             (t 'any)))
+           ((and (eql i 2)
+                 (memq sym '( global-set-key local-set-key
+                              substitute-key-definition
+                              add-hook)))
+            'function)
+           ((and (eql i 3)
+                 (memq sym '( define-key add-function)))
+            'function)
+           (t 'any))))
+       ((or (and (eq (char-before (1- pos)) ?,)
+                 (eq (char-before pos) ?@))
+            (eq (char-before pos) ?,))
+        ;; ,IDENT or ,@IDENT
+        'variable)
+       (t
+        ;; Unquoted name -- look at the context.  General scheme:
+        ;; (K-HEAD ... (J-HEAD ... (I-HEAD ... IDENT
+        ;;             ^ index K   ^ index J   ^ index I
+        (let* ((i (elisp--xref-list-index))
+               (i-head (looking-at-sym))
+               (i-paren (and i-head (eq (char-before) ?\()
+                             (progn (backward-char) t)))
+               (i-quoted (and i-paren (memq (char-before) '(?\' ?`))))
+               (j (and i-paren (elisp--xref-list-index)))
+               (j-head (and j (looking-at-sym)))
+               (j-paren (and j-head (eq (char-before) ?\()
+                             (progn (backward-char) t)))
+               (j-quoted (and j-paren (memq (char-before) '(?\' ?`))))
+               (k (and j-paren (elisp--xref-list-index)))
+               (k-head (and k (looking-at-sym)))
+               (k-paren (and k-head (eq (char-before) ?\()
+                             (progn (backward-char) t)))
+               (k-quoted (and k-paren (memq (char-before) '(?\' ?`)))))
+          (cond
+           ((or i-quoted j-quoted k-quoted)
+            ;; '(... IDENT or '(... (... IDENT or '(... (... (... IDENT
+            'any)
+           ((and (eql j 1)
+                 (memq j-head '( let let* letrec dlet lambda)))
+            ;; (let (... IDENT
+            'variable)
+           ((and (eql j 2)
+                 (memq j-head '( defun defmacro defsubst
+                                 define-inline declare-function
+                                 defadvice
+                                 cl-defmethod cl-defgeneric)))
+            ;; (defun FUNC (... IDENT
+            'variable)
+           ((eq j-head 'cond)
+            ;; (cond ... (... IDENT
+            'variable)
+           ((and (eql k 1)
+                 (memq k-head '( let let* letrec dlet )))
+            ;; (let (... (... IDENT
+            'variable)
+           ((eql i 0)
+            ;; (IDENT ...
+            'function)
+           ((functionp i-head)
+            ;; (FUNC ... IDENT
+            'variable)
+           ((and (eql i 1)
+                 (cond
+                  ((memq i-head '( function
+                                   defun defmacro defsubst
+                                   define-inline declare-function
+                                   defadvice
+                                   cl-defmethod cl-defgeneric))
+                   'function)
+                  ((memq i-head '( defvar defvar-local defconst defcustom))
+                   'variable)
+                  ((eq i-head 'defface)
+                   'face))))
+           ((memq i-head '( if while and or when unless progn prog1
+                            let let* lambda defun defsubst defvar defconst))
+            ;; arg to some common non-function forms
+            'variable)
+           ;; Anything else: probably a variable, but since i-head may be
+           ;; a macro we cannot be sure.
+           (t 'maybe-variable))))))))
+
+(cl-defmethod xref-backend-identifier-at-point ((_backend (eql 'elisp)))
+  (let ((bounds (bounds-of-thing-at-point 'symbol)))
+    (and bounds
+         (let ((ident (buffer-substring-no-properties
+                       (car bounds) (cdr bounds))))
+           ;; Use a property to transport the location of the identifier.
+           (propertize ident 'pos (car bounds))))))
+
 (cl-defmethod xref-backend-definitions ((_backend (eql 'elisp)) identifier)
   (require 'find-func)
-  ;; FIXME: use information in source near point to filter results:
-  ;; (dvc-log-edit ...) - exclude 'feature
-  ;; (require 'dvc-log-edit) - only 'feature
-  ;; Semantic may provide additional information
-  ;;
   (let ((sym (intern-soft identifier)))
     (when sym
-      (elisp--xref-find-definitions sym))))
+      (let* ((pos (get-text-property 0 'pos identifier))
+             (namespace (if pos
+                            (elisp--xref-infer-namespace pos)
+                          'any))
+             (defs (elisp--xref-find-definitions sym)))
+        (if (eq namespace 'maybe-variable)
+            (or (elisp--xref-filter-definitions defs 'variable sym)
+                (elisp--xref-filter-definitions defs 'any sym))
+          (elisp--xref-filter-definitions defs namespace sym))))))
+
+(defun elisp--xref-filter-definitions (definitions namespace symbol)
+  (if (eq namespace 'any)
+      (if (memq symbol minor-mode-list)
+          ;; The symbol is a minor mode. These should be defined by
+          ;; "define-minor-mode", which means the variable and the
+          ;; function are declared in the same place. So we return only
+          ;; the function, arbitrarily.
+          ;;
+          ;; There is an exception, when the variable is defined in C
+          ;; code, as for abbrev-mode.
+          (cl-loop for d in definitions
+                   for loc = (xref-item-location d)
+                   for file = (xref-elisp-location-file loc)
+                   when (or (not (eq (xref-elisp-location-type loc) 'defvar))
+                            (null file)
+                            (string-prefix-p "src/" file))
+                   collect d)
+        definitions)
+    (let ((expected-types
+           (pcase-exhaustive namespace
+             ('function '( nil defalias define-type
+                           cl-defgeneric cl-defmethod))
+             ('variable '(defvar))
+             ('face '(defface))
+             ('feature '(feature)))))
+      (cl-loop for d in definitions
+               when (memq
+                     (xref-elisp-location-type (xref-item-location d))
+                     expected-types)
+               collect d))))
 
 (defun elisp--xref-find-definitions (symbol)
   ;; The file name is not known when `symbol' is defined via interactive eval.
   (let (xrefs)
-
     (let ((temp elisp-xref-find-def-functions))
       (while (and (null xrefs)
                   temp)
@@ -774,6 +1000,8 @@ non-nil result supersedes the xrefs produced by
 
              ((setq generic (cl--generic symbol))
               ;; FIXME: move this to elisp-xref-find-def-functions, in 
cl-generic.el
+              ;; XXX: How are we going to support using newer xref
+              ;; with older versions of Emacs, though?
 
               ;; A generic function. If there is a default method, it
               ;; will appear in the method table, with no
@@ -836,29 +1064,6 @@ non-nil result supersedes the xrefs produced by
               ;; return "src/*.c" in file; handled below.
               (push (elisp--xref-make-xref 'defvar symbol (help-C-file-name 
symbol 'var)) xrefs))
 
-             ((string= "src/" (substring file 0 4))
-              ;; The variable is defined in a C source file; don't check
-              ;; for define-minor-mode.
-              (push (elisp--xref-make-xref 'defvar symbol file) xrefs))
-
-             ((memq symbol minor-mode-list)
-              ;; The symbol is a minor mode. These should be defined by
-              ;; "define-minor-mode", which means the variable and the
-              ;; function are declared in the same place. So we return only
-              ;; the function, arbitrarily.
-              ;;
-              ;; There is an exception, when the variable is defined in C
-              ;; code, as for abbrev-mode.
-              ;;
-              ;; IMPROVEME: If the user is searching for the identifier at
-              ;; point, we can determine whether it is a variable or
-              ;; function by looking at the source code near point.
-              ;;
-              ;; IMPROVEME: The user may actually be asking "do any
-              ;; variables by this name exist"; we need a way to specify
-              ;; that.
-              nil)
-
              (t
               (push (elisp--xref-make-xref 'defvar symbol file) xrefs))
 
@@ -1051,7 +1256,7 @@ this command arranges for all errors to enter the 
debugger."
 
 (defun last-sexp-setup-props (beg end value alt1 alt2)
   "Set up text properties for the output of `elisp--eval-last-sexp'.
-BEG and END are the start and end of the output in current-buffer.
+BEG and END are the start and end of the output in current buffer.
 VALUE is the Lisp value printed, ALT1 and ALT2 are strings for the
 alternative printed representations that can be displayed."
   (let ((map (make-sparse-keymap)))
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index cddf3ba0b9..e6af2b12c7 100644
--- a/lisp/progmodes/etags.el
+++ b/lisp/progmodes/etags.el
@@ -749,7 +749,7 @@ Returns t if it visits a tags table, or nil if there are no 
more in the list."
   "Return the file name of the file whose tags point is within.
 Assumes the tags table is the current buffer.
 If RELATIVE is non-nil, file name returned is relative to tags
-table file's directory. If RELATIVE is nil, file name returned
+table file's directory.  If RELATIVE is nil, file name returned
 is complete."
   (funcall file-of-tag-function relative))
 
diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el
index 5c0b7880e8..3f2c9b7148 100644
--- a/lisp/progmodes/f90.el
+++ b/lisp/progmodes/f90.el
@@ -64,10 +64,11 @@
 ;; The function f90-comment-region toggles insertion of
 ;; the variable f90-comment-region in every line of the region.
 
-;; One common convention for free vs. fixed format is that free format files
-;; have the ending .f90 or .f95 while fixed format files have the ending .f.
-;; Emacs automatically loads Fortran files in the appropriate mode based
-;; on extension. You can modify this by adjusting the variable auto-mode-alist.
+;; One common convention for free vs. fixed format is that free format
+;; files have the ending .f90 or .f95 while fixed format files have
+;; the ending .f. Emacs automatically loads Fortran files in the
+;; appropriate mode based on extension.  You can modify this by
+;; adjusting the variable `auto-mode-alist'.
 ;; For example:
 ;; (add-to-list 'auto-mode-alist '("\\.f\\'" . f90-mode))
 
@@ -104,21 +105,21 @@
 ;;       (if f90-auto-keyword-case   ; change case of all keywords on startup
 ;;           (f90-change-keywords f90-auto-keyword-case))))
 ;;
-;; in your init file. You can also customize the lists
-;; f90-font-lock-keywords, etc.
+;; in your init file.  You can also customize the lists
+;; `f90-font-lock-keywords', etc.
 ;;
 ;; The auto-fill and abbreviation minor modes are accessible from the F90 menu,
 ;; or by using M-x auto-fill-mode and M-x abbrev-mode, respectively.
 
 ;; Remarks
-;; 1) Line numbers are by default left-justified. If f90-leave-line-no is
+;; 1) Line numbers are by default left-justified.  If f90-leave-line-no is
 ;;    non-nil, the line numbers are never touched.
 ;; 2) Multi-; statements like "do i=1,20 ; j=j+i ; end do" are not handled
 ;;    correctly, but I imagine them to be rare.
 ;; 3) Regexps for hilit19 are no longer supported.
 ;; 4) For FIXED FORMAT code, use fortran mode.
 ;; 5) Preprocessor directives, i.e., lines starting with # are left-justified
-;;    and are untouched by all case-changing commands. There is, at present, no
+;;    and are untouched by all case-changing commands.  There is, at present, 
no
 ;;    mechanism for treating multi-line directives (continued by \ ).
 ;; 6) f77 do-loops do 10 i=.. ; ; 10 continue are not correctly indented.
 ;;    You are urged to use f90-do loops (with labels if you wish).
@@ -140,7 +141,7 @@
 ;;   f90-font-lock-1, f90-font-lock-2, f90-font-lock-3, f90-font-lock-4
 
 ;; Original author's thanks
-;; Thanks to all the people who have tested the mode. Special thanks to Jens
+;; Thanks to all the people who have tested the mode.  Special thanks to Jens
 ;; Bloch Helmers for encouraging me to write this code, for creative
 ;; suggestions as well as for the lists of hpf-commands.
 ;; Also thanks to the authors of the fortran and pascal modes, on which some
diff --git a/lisp/progmodes/flymake-cc.el b/lisp/progmodes/flymake-cc.el
index bd403faf7c..3ae3fcb9fe 100644
--- a/lisp/progmodes/flymake-cc.el
+++ b/lisp/progmodes/flymake-cc.el
@@ -61,23 +61,34 @@ SOURCE."
   (cl-loop
    while
    (search-forward-regexp
-    "^\\(In file included from 
\\)?<stdin>:\\([0-9]+\\)\\(?::\\([0-9]+\\)\\)?:\n?\\(.*\\): \\(.*\\)$"
+    "^\\(In file included from \\)?\\([^ 
:]+\\):\\([0-9]+\\)\\(?::\\([0-9]+\\)\\)?:\n?\\(.*\\): \\(.*\\)$"
     nil t)
-   for msg = (match-string 5)
-   for (beg . end) = (flymake-diag-region
-                      source
-                      (string-to-number (match-string 2))
-                      (and (match-string 3) (string-to-number (match-string 
3))))
+   for msg = (match-string 6)
+   for locus = (match-string 2)
+   for line = (string-to-number (match-string 3))
+   for col = (ignore-errors (string-to-number (match-string 4)))
+   for source-buffer = (and (string= locus "<stdin>") source)
    for type = (if (match-string 1)
                   :error
-                (assoc-default
-                 (match-string 4)
-                 '(("error" . :error)
-                   ("note" . :note)
-                   ("warning" . :warning))
-                 #'string-match
-                 :error))
-   collect (flymake-make-diagnostic source beg end type msg)))
+                (save-match-data
+                  (assoc-default
+                   (match-string 5)
+                   '(("error" . :error)
+                     ("note" . :note)
+                     ("warning" . :warning))
+                   #'string-match
+                   :error)))
+   for diag =
+   (cond (source-buffer
+          (pcase-let ((`(,beg . ,end)
+                       (flymake-diag-region source-buffer line col)))
+            (flymake-make-diagnostic source-buffer beg end type msg)))
+         (t (flymake-make-diagnostic locus (cons line col) nil type msg)))
+   collect diag
+   ;; If "In file included from..." matched, then move to end of that
+   ;; line.  This helps us collect the diagnostic at its .h locus,
+   ;; too.
+   when (match-end 1) do (goto-char (match-end 2))))
 
 (defun flymake-cc-use-special-make-target ()
   "Command for checking a file via a CHK_SOURCES Make target."
@@ -88,7 +99,7 @@ SOURCE."
              (cond ((derived-mode-p 'c++-mode) "c++")
                    (t "c")))))
 
-(defvar-local flymake-cc--proc nil "Internal variable for `flymake-cc'")
+(defvar-local flymake-cc--proc nil "Internal variable for `flymake-cc'.")
 
 ;; forward declare this to shoosh compiler (instead of requiring
 ;; flymake-proc)
diff --git a/lisp/progmodes/flymake-proc.el b/lisp/progmodes/flymake-proc.el
index 9cbad121d1..27b46a45c5 100644
--- a/lisp/progmodes/flymake-proc.el
+++ b/lisp/progmodes/flymake-proc.el
@@ -188,10 +188,14 @@ Convert it to Flymake internal format."
       2 4 5 6))
    ;; compilation-error-regexp-alist)
    (flymake-proc-reformat-err-line-patterns-from-compile-el 
compilation-error-regexp-alist-alist))
-  "Patterns for matching error/warning lines.  Each pattern has the form
-\(REGEXP FILE-IDX LINE-IDX COL-IDX ERR-TEXT-IDX).
-Use `flymake-proc-reformat-err-line-patterns-from-compile-el' to add patterns
-from compile.el")
+  "Patterns for matching error/warning lines.
+
+Each pattern has the form:
+
+    (REGEXP FILE-IDX LINE-IDX COL-IDX ERR-TEXT-IDX)
+
+Use `flymake-proc-reformat-err-line-patterns-from-compile-el' to
+add patterns from compile.el.")
 
 (define-obsolete-variable-alias 'flymake-warning-re 
'flymake-proc-diagnostic-type-pred "26.1")
 (defvar flymake-proc-diagnostic-type-pred
@@ -760,7 +764,7 @@ May only be called in a dynamic environment where
 (defun flymake-proc-legacy-flymake (report-fn &rest args)
   "Flymake backend based on the original Flymake implementation.
 This function is suitable for inclusion in
-`flymake-diagnostic-functions'. For backward compatibility, it
+`flymake-diagnostic-functions'.  For backward compatibility, it
 can also be executed interactively independently of
 `flymake-mode'."
   ;; Interactively, behave as if flymake had invoked us through its
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index cc12fce04a..e8ce0e723e 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -4,9 +4,9 @@
 
 ;; Author: Pavel Kobyakov <pk_at_work@yahoo.com>
 ;; Maintainer: João Távora <joaotavora@gmail.com>
-;; Version: 1.1.1
+;; Version: 1.2.1
 ;; Keywords: c languages tools
-;; Package-Requires: ((emacs "26.1") (eldoc "1.1.0"))
+;; Package-Requires: ((emacs "26.1") (eldoc "1.1.0") (project "0.7.1"))
 
 ;; This is a GNU ELPA :core package.  Avoid functionality that is not
 ;; compatible with the version of Emacs recorded above.
@@ -121,6 +121,7 @@
 (require 'mwheel)
 ;; when-let*, if-let*, hash-table-keys, hash-table-values:
 (eval-when-compile (require 'subr-x))
+(require 'project)
 
 (defgroup flymake nil
   "Universal on-the-fly syntax checker."
@@ -291,7 +292,7 @@ generated it."
                    (macroexp-file-name)
                  (and (not load-file-name)
                       (bound-and-true-p byte-compile-current-file))))
-         (sublog (if file
+         (sublog (if (stringp file)
                      (intern
                       (file-name-nondirectory
                        (file-name-sans-extension file))))))
@@ -305,35 +306,51 @@ generated it."
 
 (cl-defstruct (flymake--diag
                (:constructor flymake--diag-make))
-  buffer beg end type text backend data overlay-properties overlay)
+  locus beg end type text backend data overlay-properties overlay
+  ;; FIXME: See usage of these two in `flymake--highlight-line'.
+  ;; Ideally they wouldn't be needed.
+  orig-beg orig-end)
 
 ;;;###autoload
-(defun flymake-make-diagnostic (buffer
+(defun flymake-make-diagnostic (locus
                                 beg
                                 end
                                 type
                                 text
                                 &optional data
                                 overlay-properties)
-  "Make a Flymake diagnostic for BUFFER's region from BEG to END.
+  "Make a Flymake diagnostic for LOCUS's region from BEG to END.
+LOCUS is a buffer object or a string designating a file name.
+
 TYPE is a diagnostic symbol and TEXT is string describing the
 problem detected in this region.  DATA is any object that the
 caller wishes to attach to the created diagnostic for later
-retrieval.
+retrieval with `flymake-diagnostic-data'.
+
+If LOCUS is a buffer BEG and END should be buffer positions
+inside it.  If LOCUS designates a file, BEG and END should be a
+cons (LINE . COL) indicating a file position.  In this second
+case, END may be ommited in which case the region is computed
+using `flymake-diag-region' if the diagnostic is appended to an
+actual buffer.
 
 OVERLAY-PROPERTIES is an alist of properties attached to the
 created diagnostic, overriding the default properties and any
-properties of `flymake-overlay-control' of the diagnostic's
-type."
-  (flymake--diag-make :buffer buffer :beg beg :end end
+properties listed in the `flymake-overlay-control' property of
+the diagnostic's type symbol."
+  (when (stringp locus)
+    (setq locus (expand-file-name locus)))
+  (flymake--diag-make :locus locus :beg beg :end end
                       :type type :text text :data data
-                      :overlay-properties overlay-properties))
+                      :overlay-properties overlay-properties
+                      :orig-beg beg
+                      :orig-end end))
 
 ;;;###autoload
 (defun flymake-diagnostics (&optional beg end)
   "Get Flymake diagnostics in region determined by BEG and END.
 
-If neither BEG or END is supplied, use the whole buffer,
+If neither BEG or END is supplied, use whole accessible buffer,
 otherwise if BEG is non-nil and END is nil, consider only
 diagnostics at BEG."
   (mapcar (lambda (ov) (overlay-get ov 'flymake-diagnostic))
@@ -345,27 +362,13 @@ diagnostics at BEG."
      ,(format "Get Flymake diagnostic DIAG's %s." (symbol-name thing))
      (,internal diag)))
 
-(flymake--diag-accessor flymake-diagnostic-buffer flymake--diag-buffer buffer)
 (flymake--diag-accessor flymake-diagnostic-text flymake--diag-text text)
 (flymake--diag-accessor flymake-diagnostic-type flymake--diag-type type)
 (flymake--diag-accessor flymake-diagnostic-backend flymake--diag-backend 
backend)
-(flymake--diag-accessor flymake-diagnostic-data flymake--diag-data backend)
-
-(defun flymake-diagnostic-beg (diag)
-  "Get Flymake diagnostic DIAG's start position.
-This position only be queried after DIAG has been reported to Flymake."
-  (let ((overlay (flymake--diag-overlay diag)))
-    (unless overlay
-      (error "DIAG %s not reported to Flymake yet" diag))
-    (overlay-start overlay)))
-
-(defun flymake-diagnostic-end (diag)
-  "Get Flymake diagnostic DIAG's end position.
-This position only be queried after DIAG has been reported to Flymake."
-  (let ((overlay (flymake--diag-overlay diag)))
-    (unless overlay
-      (error "DIAG %s not reported to Flymake yet" diag))
-    (overlay-end overlay)))
+(flymake--diag-accessor flymake-diagnostic-data flymake--diag-data data)
+(flymake--diag-accessor flymake-diagnostic-beg flymake--diag-beg beg)
+(flymake--diag-accessor flymake-diagnostic-end flymake--diag-end end)
+(flymake--diag-accessor flymake-diagnostic-buffer flymake--diag-locus locus)
 
 (cl-defun flymake--overlays (&key beg end filter compare key)
   "Get flymake-related overlays.
@@ -625,13 +628,74 @@ associated `flymake-category' return DEFAULT."
                                bitmap
                              (list bitmap)))))))
 
-(defun flymake--highlight-line (diagnostic)
-  "Highlight buffer with info in DIGNOSTIC."
-  (let ((type (or (flymake--diag-type diagnostic)
-                  :error))
-        (ov (make-overlay
-             (flymake--diag-beg diagnostic)
-             (flymake--diag-end diagnostic))))
+(defun flymake--equal-diagnostic-p (a b)
+  "Tell if A and B are equivalent `flymake--diag' objects."
+  (or (eq a b)
+      (cl-loop for comp in '(flymake--diag-end
+                             flymake--diag-beg
+                             flymake-diagnostic-type
+                             flymake-diagnostic-backend
+                             flymake-diagnostic-text)
+               always (equal (funcall comp a) (funcall comp b)))))
+
+(cl-defun flymake--highlight-line (diagnostic &optional foreign)
+  "Attempt to overlay DIAGNOSTIC in current buffer.
+
+FOREIGN says if DIAGNOSTIC is \"foreign\" to the current buffer,
+i.e. managed by another buffer where `flymake-mode' is also
+active.
+
+This function mayskip overlay creation if a diagnostic which is
+the same as DIAGNOSTIC is already highlighted
+(in the sense of `flymake--equal-diagnostic-p').  In that case
+the action to take depends on FOREIGN.  If nil the existing
+overlay is deleted, else no overlay is created.
+
+Return nil or the overlay created."
+  (let* ((type (or (flymake-diagnostic-type diagnostic)
+                   :error))
+         (beg (flymake--diag-beg diagnostic))
+         (end (flymake--diag-end diagnostic))
+         (convert (lambda (cell)
+                    (flymake-diag-region (current-buffer)
+                                         (car cell)
+                                         (cdr cell))))
+         ov)
+    ;; Convert (LINE . COL) forms of `flymake--diag-beg' and
+    ;; `flymake--diag-end'.  Record the converted positions.
+    ;;
+    (cond ((and (consp beg) (not (null end)))
+           (setq beg (car (funcall convert beg)))
+           (when (consp end)
+             (setq end (car (funcall convert end)))))
+          ((consp beg)
+           (cl-destructuring-bind (a . b) (funcall convert beg)
+             (setq beg a end b))))
+    (setf (flymake--diag-beg diagnostic) beg
+          (flymake--diag-end diagnostic) end)
+    ;; Try to fix the remedy the situation if there is the same
+    ;; diagnostic is already registered in the same place, which only
+    ;; happens for clashes between domestic and foreign diagnostics
+    (cl-loop for e in (flymake-diagnostics beg end)
+             when (flymake--equal-diagnostic-p e diagnostic)
+             ;; FIXME.  This is an imperfect heuristic.  Ideally, we'd
+             ;; want to delete no overlays and keep annotating the
+             ;; superseded foreign in an overlay but hide it from most
+             ;; `flymake-diagnostics' calls.  If the target buffer is
+             ;; killed we can keep the "latent" state of the foreign
+             ;; diagnostic (with filename and updated line/col info).
+             ;; If it is revisited the foreign diagnostic can be
+             ;; revived again.
+             do (if foreign
+                    (cl-return-from flymake--highlight-line nil)
+                  (setf (flymake--diag-beg e)
+                        (flymake--diag-orig-beg e)
+                        (flymake--diag-end e)
+                        (flymake--diag-orig-end e))
+                  (delete-overlay (flymake--diag-overlay e))))
+    (setq ov (make-overlay end beg))
+    (setf (flymake--diag-beg diagnostic) (overlay-start ov)
+          (flymake--diag-end diagnostic) (overlay-end ov))
     ;; First set `category' in the overlay
     ;;
     (overlay-put ov 'category
@@ -665,7 +729,7 @@ associated `flymake-category' return DEFAULT."
         (lambda (window _ov pos)
           (with-selected-window window
             (mapconcat
-             #'flymake--diag-text
+             #'flymake-diagnostic-text
              (flymake-diagnostics pos)
              "\n"))))
       (default-maybe 'severity (warning-numeric-level :error))
@@ -676,17 +740,18 @@ associated `flymake-category' return DEFAULT."
     ;;
     (overlay-put ov 'evaporate t)
     (overlay-put ov 'flymake-diagnostic diagnostic)
+    (setf (flymake--diag-overlay diagnostic) ov)
     ov))
 
 ;; Nothing in Flymake uses this at all any more, so this is just for
 ;; third-party compatibility.
 (define-obsolete-function-alias 'flymake-display-warning 'message-box "26.1")
 
-(defvar-local flymake--backend-state nil
-  "Buffer-local hash table of a Flymake backend's state.
+(defvar-local flymake--state nil
+  "State of a buffer's multiple Flymake backends.
 The keys to this hash table are functions as found in
 `flymake-diagnostic-functions'.  The values are structures
-of the type `flymake--backend-state', with these slots:
+of the type `flymake--state', with these slots:
 
 `running', a symbol to keep track of a backend's replies via its
 REPORT-FN argument.  A backend is running if this key is
@@ -701,11 +766,16 @@ since it last was contacted.
 
 `disabled', a string with the explanation for a previous
 exceptional situation reported by the backend, nil if the
-backend is operating normally.")
+backend is operating normally.
+
+`foreign-diags', a hash table of buffers/files to
+collections of diagnostics outside the buffer where this
+`flymake--state' pertains.")
 
-(cl-defstruct (flymake--backend-state
+(cl-defstruct (flymake--state
                (:constructor flymake--make-backend-state))
-  running reported-p disabled diags)
+  running reported-p disabled diags (foreign-diags
+                                     (make-hash-table)))
 
 (defmacro flymake--with-backend-state (backend state-var &rest body)
   "Bind BACKEND's STATE-VAR to its state, run BODY."
@@ -713,9 +783,9 @@ backend is operating normally.")
   (let ((b (make-symbol "b")))
     `(let* ((,b ,backend)
             (,state-var
-             (or (gethash ,b flymake--backend-state)
+             (or (gethash ,b flymake--state)
                  (puthash ,b (flymake--make-backend-state)
-                          flymake--backend-state))))
+                          flymake--state))))
        ,@body)))
 
 (defun flymake-is-running ()
@@ -730,9 +800,10 @@ backend is operating normally.")
       (and (>= start1 start0) (<  start1 end0))
       (and (>  end1 start0)   (<= end1 end0))))
 
-(cl-defun flymake--handle-report (backend token report-action
-                                          &key explanation force region
-                                          &allow-other-keys)
+(cl-defun flymake--handle-report
+    (backend token report-action
+             &key explanation force region
+             &allow-other-keys)
   "Handle reports from BACKEND identified by TOKEN.
 BACKEND, REPORT-ACTION and EXPLANATION, and FORCE conform to the
 calling convention described in
@@ -740,81 +811,117 @@ calling convention described in
 to handle a report even if TOKEN was not expected.  REGION is
 a (BEG . END) pair of buffer positions indicating that this
 report applies to that region."
-  (let* ((state (gethash backend flymake--backend-state))
-         first-report)
-    (unless state
-      (error "Can't find state for %s in `flymake--backend-state'" backend))
-    (setf first-report (not (flymake--backend-state-reported-p state)))
-    (setf (flymake--backend-state-reported-p state) t)
-    (let (expected-token
-          new-diags)
-      (cond
-       ((null state)
-        (flymake-error
-         "Unexpected report from unknown backend %s" backend))
-       ((flymake--backend-state-disabled state)
-        (flymake-error
-         "Unexpected report from disabled backend %s" backend))
-       ((progn
-          (setq expected-token (flymake--backend-state-running state))
-          (null expected-token))
-        ;; should never happen
-        (flymake-error "Unexpected report from stopped backend %s" backend))
-       ((not (or (eq expected-token token)
-                 force))
-        (flymake-error "Obsolete report from backend %s with explanation %s"
-                       backend explanation))
-       ((eq :panic report-action)
-        (flymake--disable-backend backend explanation))
-       ((not (listp report-action))
-        (flymake--disable-backend backend
-                                  (format "Unknown action %S" report-action))
-        (flymake-error "Expected report, but got unknown key %s" 
report-action))
-       (t
-        (setq new-diags
-              (cl-remove-if-not
-               (lambda (diag) (eq (flymake--diag-buffer diag) 
(current-buffer)))
-               report-action))
-        (save-restriction
-          (widen)
-          ;; Before adding to backend's diagnostic list, decide if
-          ;; some or all must be deleted.  When deleting, also delete
-          ;; the associated overlay.
-          (cond
-           (region
-            (cl-loop for diag in (flymake--backend-state-diags state)
-                     for ov = (flymake--diag-overlay diag)
-                     if (or (not (overlay-buffer ov))
-                            (flymake--intersects-p
-                             (overlay-start ov) (overlay-end ov)
-                             (car region) (cdr region)))
-                     do (delete-overlay ov)
-                     else collect diag into surviving
-                     finally (setf (flymake--backend-state-diags state)
-                                   surviving)))
-           (first-report
-            (dolist (diag (flymake--backend-state-diags state))
-              (delete-overlay (flymake--diag-overlay diag)))
-            (setf (flymake--backend-state-diags state) nil)))
-          ;; Now make new ones
-          (mapc (lambda (diag)
-                  (let ((overlay (flymake--highlight-line diag)))
-                    (setf (flymake--diag-backend diag) backend
-                          (flymake--diag-overlay diag) overlay)))
-                new-diags)
-          (setf (flymake--backend-state-diags state)
-                (append new-diags (flymake--backend-state-diags state)))
-          (when flymake-check-start-time
-            (flymake-log :debug "backend %s reported %d diagnostics in %.2f 
second(s)"
-                         backend
-                         (length new-diags)
-                        (float-time
-                         (time-since flymake-check-start-time))))
-          (when (and (get-buffer (flymake--diagnostics-buffer-name))
-                     (get-buffer-window (flymake--diagnostics-buffer-name))
-                     (null (cl-set-difference (flymake-running-backends)
-                                              (flymake-reporting-backends))))
-            (flymake-show-diagnostics-buffer))))))))
+  (let ((state (or (gethash backend flymake--state)
+                   (error "Can't find state for %s in `flymake--state'"
+                          backend)))
+        expected-token)
+    (cond
+     ((null state)
+      (flymake-error
+       "Unexpected report from unknown backend %s" backend))
+     ((flymake--state-disabled state)
+      (flymake-error
+       "Unexpected report from disabled backend %s" backend))
+     ((progn
+        (setq expected-token (flymake--state-running state))
+        (null expected-token))
+      ;; should never happen
+      (flymake-error "Unexpected report from stopped backend %s" backend))
+     ((not (or (eq expected-token token)
+               force))
+      (flymake-error "Obsolete report from backend %s with explanation %s"
+                     backend explanation))
+     ((eq :panic report-action)
+      (flymake--disable-backend backend explanation))
+     ((not (listp report-action))
+      (flymake--disable-backend backend
+                                (format "Unknown action %S" report-action))
+      (flymake-error "Expected report, but got unknown key %s" report-action))
+     (t
+      (flymake--publish-diagnostics report-action
+                                    :backend backend
+                                    :state state
+                                    :region region)
+      (when flymake-check-start-time
+        (flymake-log :debug "backend %s reported %d diagnostics in %.2f 
second(s)"
+                     backend
+                     (length report-action)
+                     (float-time
+                      (time-since flymake-check-start-time))))))
+    (setf (flymake--state-reported-p state) t)
+    (flymake--update-diagnostics-listings (current-buffer))))
+
+(defun flymake--clear-foreign-diags (state)
+  (maphash (lambda (_buffer diags)
+             (cl-loop for d in diags
+                      when (flymake--diag-overlay d)
+                      do (delete-overlay it)))
+           (flymake--state-foreign-diags state))
+  (clrhash (flymake--state-foreign-diags state)))
+
+(defvar-local flymake-mode nil)
+
+(cl-defun flymake--publish-diagnostics (diags &key backend state region)
+  "Helper for `flymake--handle-report'.
+Publish DIAGS, which contain diagnostics for the current buffer
+and other buffers."
+  (dolist (d diags) (setf (flymake--diag-backend d) backend))
+  (save-restriction
+    (widen)
+    ;; First, clean up.  Remove diagnostics from bookeeping lists and
+    ;; their overlays from buffers.
+    ;;
+    (cond
+     (;; If there is a `region' arg, only affect the diagnostics whose
+      ;; overlays are in a certain region.  Discard "foreign"
+      ;; diagnostics.
+      region
+      (cl-loop for diag in (flymake--state-diags state)
+               for ov = (flymake--diag-overlay diag)
+               if (or (not (overlay-buffer ov))
+                      (flymake--intersects-p
+                       (overlay-start ov) (overlay-end ov)
+                       (car region) (cdr region)))
+               do (delete-overlay ov)
+               else collect diag into surviving
+               finally (setf (flymake--state-diags state)
+                             surviving)))
+     (;; Else, if this is the first report, zero all lists and delete
+      ;; all associated overlays.
+      (not (flymake--state-reported-p state))
+      (cl-loop for diag in (flymake--state-diags state)
+               for ov = (flymake--diag-overlay diag)
+               when ov do (delete-overlay ov))
+      (setf (flymake--state-diags state) nil)
+      ;; Also clear all overlays for `foreign-diags' in all other
+      ;; buffers.
+      (flymake--clear-foreign-diags state))
+     (;; If this is not the first report, do no cleanup.
+       t))
+
+    ;; Now place new overlays for all diagnostics: "domestic"
+    ;; diagnostics are for the current buffer; "foreign" may be for a
+    ;; some other live buffer or for a file name that hasn't a buffer
+    ;; yet.  If a foreign diagnostic is for a buffer, convert to a
+    ;; file name, protecting it against that buffer's killing.
+    ;;
+    (cl-loop
+     for d in diags
+     for locus = (flymake--diag-locus d)
+     do (cond ((eq locus (current-buffer))
+               (push d (flymake--state-diags state))
+               (flymake--highlight-line d))
+              (t
+               (when (or (buffer-live-p locus)
+                         (setq locus (find-buffer-visiting locus)))
+                 (with-current-buffer locus
+                   (when flymake-mode (flymake--highlight-line d 'foreign))
+                   ;; Ensure locus of a foreign diag is always a file-name
+                   ;; string, even if created from a buffer.
+                   (setf (flymake--diag-locus d) (buffer-file-name))))
+               (cl-assert (stringp (flymake--diag-locus d)))
+               (push d (gethash (flymake--diag-locus d)
+                                (flymake--state-foreign-diags state))))))))
 
 (defun flymake-make-report-fn (backend &optional token)
   "Make a suitable anonymous report function for BACKEND.
@@ -830,12 +937,12 @@ different runs of the same backend."
 (defun flymake--collect (fn &optional message-prefix)
   "Collect Flymake backends matching FN.
 If MESSAGE-PREFIX, echo a message using that prefix."
-  (unless flymake--backend-state
+  (unless flymake--state
     (user-error "Flymake is not initialized"))
   (let (retval)
     (maphash (lambda (backend state)
                (when (funcall fn state) (push backend retval)))
-             flymake--backend-state)
+             flymake--state)
     (when message-prefix
       (message "%s%s"
                message-prefix
@@ -846,21 +953,21 @@ If MESSAGE-PREFIX, echo a message using that prefix."
 (defun flymake-running-backends ()
   "Compute running Flymake backends in current buffer."
   (interactive)
-  (flymake--collect #'flymake--backend-state-running
+  (flymake--collect #'flymake--state-running
                     (and (called-interactively-p 'interactive)
                          "Running backends: ")))
 
 (defun flymake-disabled-backends ()
   "Compute disabled Flymake backends in current buffer."
   (interactive)
-  (flymake--collect #'flymake--backend-state-disabled
+  (flymake--collect #'flymake--state-disabled
                     (and (called-interactively-p 'interactive)
                          "Disabled backends: ")))
 
 (defun flymake-reporting-backends ()
   "Compute reporting Flymake backends in current buffer."
   (interactive)
-  (flymake--collect #'flymake--backend-state-reported-p
+  (flymake--collect #'flymake--state-reported-p
                     (and (called-interactively-p 'interactive)
                          "Reporting backends: ")))
 
@@ -869,9 +976,9 @@ If MESSAGE-PREFIX, echo a message using that prefix."
 If it is running also stop it."
   (flymake-log :warning "Disabling backend %s because %s" backend explanation)
   (flymake--with-backend-state backend state
-    (setf (flymake--backend-state-running state) nil
-          (flymake--backend-state-disabled state) explanation
-          (flymake--backend-state-reported-p state) t)))
+    (setf (flymake--state-running state) nil
+          (flymake--state-disabled state) explanation
+          (flymake--state-reported-p state) t)))
 
 (defun flymake--run-backend (backend &optional args)
   "Run the backend BACKEND, re-enabling if necessary.
@@ -880,9 +987,9 @@ with a report function."
   (flymake-log :debug "Running backend %s" backend)
   (let ((run-token (cl-gensym "backend-token")))
     (flymake--with-backend-state backend state
-      (setf (flymake--backend-state-running state) run-token
-            (flymake--backend-state-disabled state) nil
-            (flymake--backend-state-reported-p state) nil))
+      (setf (flymake--state-running state) run-token
+            (flymake--state-disabled state) nil
+            (flymake--state-reported-p state) nil))
     ;; FIXME: Should use `condition-case-unless-debug' here, but don't
     ;; for two reasons: (1) that won't let me catch errors from inside
     ;; `ert-deftest' where `debug-on-error' appears to be always
@@ -964,7 +1071,7 @@ Interactively, with a prefix arg, FORCE is t."
                   (cond
                    ((and (not force)
                          (flymake--with-backend-state backend state
-                           (flymake--backend-state-disabled state)))
+                           (flymake--state-disabled state)))
                     (flymake-log :debug "Backend %s is disabled, not starting"
                                  backend))
                    (t
@@ -973,7 +1080,7 @@ Interactively, with a prefix arg, FORCE is t."
 
 (defvar flymake-mode-map
   (let ((map (make-sparse-keymap))) map)
-  "Keymap for `flymake-mode'")
+  "Keymap for `flymake-mode'.")
 
 ;;;###autoload
 (define-minor-mode flymake-mode
@@ -1019,13 +1126,43 @@ special *Flymake log* buffer."  :group 'flymake :lighter
 
     ;; If Flymake happened to be already already ON, we must cleanup
     ;; existing diagnostic overlays, lest we forget them by blindly
-    ;; reinitializing `flymake--backend-state' in the next line.
+    ;; reinitializing `flymake--state' in the next line.
     ;; See https://github.com/joaotavora/eglot/issues/223.
     (mapc #'delete-overlay (flymake--overlays))
-    (setq flymake--backend-state (make-hash-table))
+    (setq flymake--state (make-hash-table))
     (setq flymake--recent-changes nil)
 
-    (when flymake-start-on-flymake-mode (flymake-start t)))
+    (when flymake-start-on-flymake-mode (flymake-start t))
+
+    ;; Other diagnostic sources may already target this buffer's file
+    ;; before we turned on: these sources may be of two types...
+    (let ((source (current-buffer))
+          (bfn buffer-file-name))
+      ;; 1. For `flymake-list-only-diagnostics': here, we do nothing.
+      ;; FIXME: We could remove the corresponding entry from that
+      ;; variable, as we assume that new diagnostics will come in soon
+      ;; via the brand new `flymake-mode' setup.  For simplicity's
+      ;; sake, we have opted to leave the backend for now.
+      nil
+      ;; 2. other buffers where a backend has created "foreign"
+      ;; diagnostics and pointed them here.  We must highlight them in
+      ;; this buffer, i.e. create overlays for them.  Those other
+      ;; buffers and backends are still responsible for them, i.e. the
+      ;; current buffer does not "own" these foreign diags.
+      (dolist (buffer (buffer-list))
+        (with-current-buffer buffer
+          (when (and flymake-mode flymake--state)
+            (maphash (lambda (_backend state)
+                       (maphash (lambda (file diags)
+                                  (when (or (eq file source)
+                                            (string= bfn (expand-file-name 
file)))
+                                    (with-current-buffer source
+                                      (mapc (lambda (diag)
+                                              (flymake--highlight-line diag
+                                                                       
'foreign))
+                                            diags))))
+                                (flymake--state-foreign-diags state)))
+                     flymake--state))))))
 
    ;; Turning the mode OFF.
    (t
@@ -1035,11 +1172,16 @@ special *Flymake log* buffer."  :group 'flymake :lighter
     ;;+(remove-hook 'find-file-hook (function flymake-find-file-hook) t)
     (remove-hook 'eldoc-documentation-functions 'flymake-eldoc-function t)
 
-    (mapc #'delete-overlay (flymake--overlays))
-
     (when flymake-timer
       (cancel-timer flymake-timer)
-      (setq flymake-timer nil)))))
+      (setq flymake-timer nil))
+    (mapc #'delete-overlay (flymake--overlays))
+    (when flymake--state
+      (maphash (lambda (_backend state)
+                 (flymake--clear-foreign-diags state))
+               flymake--state)))
+   ;; turning Flymake on or off has consequences for listings
+   (flymake--update-diagnostics-listings (current-buffer))))
 
 (defun flymake--schedule-timer-maybe ()
   "(Re)schedule an idle timer for checking the buffer.
@@ -1091,9 +1233,9 @@ START and STOP and LEN are as in 
`after-change-functions'."
     (flymake-start t)))
 
 (defun flymake-kill-buffer-hook ()
-  (when flymake-timer
-    (cancel-timer flymake-timer)
-    (setq flymake-timer nil)))
+  ;; Explicitly set flymake off, because that does a lot of useful
+  ;; cleanup.
+  (flymake-mode -1))
 
 (defun flymake-find-file-hook ()
   (unless (or flymake-mode
@@ -1137,7 +1279,7 @@ default) no filter is applied."
                                            (not filter)
                                            (cl-find
                                             (flymake--severity
-                                             (flymake--diag-type diag))
+                                             (flymake-diagnostic-type diag))
                                             filter :key 
#'flymake--severity)))))
                                  :compare (if (cl-plusp n) #'< #'>)
                                  :key #'overlay-start))
@@ -1247,7 +1389,7 @@ correctly.")
     help-echo
     ,(lambda (&rest _)
        (concat
-        (format "%s known backends\n" (hash-table-count 
flymake--backend-state))
+        (format "%s known backends\n" (hash-table-count flymake--state))
         (format "%s running\n" (length (flymake-running-backends)))
         (format "%s disabled\n" (length (flymake-disabled-backends)))
         "mouse-1: Display minor mode menu\n"
@@ -1268,7 +1410,7 @@ correctly.")
   "Helper for `flymake-mode-line-exception'."
   (pcase-let* ((running) (reported)
                (`(,ind ,face ,explain)
-                (cond ((zerop (hash-table-count flymake--backend-state))
+                (cond ((zerop (hash-table-count flymake--state))
                        '("?" nil "No known backends"))
                       ((cl-set-difference
                         (setq running (flymake-running-backends))
@@ -1300,13 +1442,10 @@ TYPE is usually keyword `:error', `:warning' or 
`:note'."
         (face (flymake--lookup-type-property type
                                              'mode-line-face
                                              'compilation-error)))
-    (maphash (lambda
-               (_b state)
-               (dolist (d (flymake--backend-state-diags state))
-                 (when (= (flymake--severity type)
-                          (flymake--severity (flymake--diag-type d)))
-                   (cl-incf count))))
-             flymake--backend-state)
+    (dolist (d (flymake-diagnostics))
+      (when (= (flymake--severity type)
+               (flymake--severity (flymake-diagnostic-type d)))
+        (cl-incf count)))
     (when (or (cl-plusp count)
               (cond ((eq flymake-suppress-zero-counters t)
                      nil)
@@ -1336,7 +1475,7 @@ TYPE is usually keyword `:error', `:warning' or `:note'."
                   (flymake-goto-next-error 1 (list type) t))))
             map))))))
 
-;;; Diagnostics buffer
+;;; Per-buffer diagnostic listing
 
 (defvar-local flymake--diagnostics-buffer-source nil)
 
@@ -1351,14 +1490,30 @@ TYPE is usually keyword `:error', `:warning' or 
`:note'."
   (interactive (list (point) t))
   (let* ((id (or (tabulated-list-get-id pos)
                  (user-error "Nothing at point")))
-         (diag (plist-get id :diagnostic)))
-    (with-current-buffer (flymake--diag-buffer diag)
+         (diag (plist-get id :diagnostic))
+         (locus (flymake--diag-locus diag))
+         (beg (flymake--diag-beg diag))
+         (end (flymake--diag-end diag))
+         (visit (lambda (b e)
+                  (goto-char b)
+                  (pulse-momentary-highlight-region (point)
+                                                    (or e (line-end-position))
+                                                    'highlight))))
+    (with-current-buffer (cond ((bufferp locus) locus)
+                               (t (find-file-noselect locus)))
       (with-selected-window
           (display-buffer (current-buffer) other-window)
-        (goto-char (flymake--diag-beg diag))
-        (pulse-momentary-highlight-region (flymake-diagnostic-beg diag)
-                                          (flymake-diagnostic-end diag)
-                                          'highlight))
+        (cond (;; an annotated diagnostic (most common case), or a
+               ;; non-annotated buffer diag
+               (number-or-marker-p beg)
+               (funcall visit beg end))
+              (;; a non-annotated file diag (TODO: could use `end'
+               ;; here, too)
+               (pcase-let ((`(,bbeg . ,bend)
+                            (flymake-diag-region (current-buffer)
+                                                 (car beg)
+                                                 (cdr beg))))
+                 (funcall visit bbeg bend)))))
       (current-buffer))))
 
 (defun flymake-goto-diagnostic (pos)
@@ -1368,65 +1523,116 @@ POS can be a buffer position or a button"
   (pop-to-buffer
    (flymake-show-diagnostic (if (button-type pos) (button-start pos) pos))))
 
+(defun flymake--tabulated-entries-1 (diags project-root)
+  "Helper for `flymake--diagnostic-buffer-entries'.
+PROJECT-ROOT indicates that each entry should be preceded by the
+filename of the diagnostic relative to that directory."
+  (cl-loop
+   for diag in diags
+   for locus = (flymake-diagnostic-buffer diag)
+   for file = (if (bufferp locus)
+                  (buffer-file-name locus)
+                locus)
+   for overlay = (flymake--diag-overlay diag)
+   for (line . col) =
+   (cond (;; has live overlay, use overlay for position
+          (and overlay (overlay-buffer overlay))
+          (with-current-buffer (overlay-buffer overlay)
+            (save-excursion
+              (goto-char (overlay-start overlay))
+              (cons (line-number-at-pos)
+                    (- (point)
+                       (line-beginning-position))))))
+         (;; diagnostic not annotated, maybe foreign, check for cons
+          (consp (flymake--diag-beg diag))
+          (flymake--diag-beg diag))
+         (;; may still be a valid foreign diagnostic
+          (consp (flymake--diag-orig-beg diag))
+          (flymake--diag-orig-beg diag))
+         (;; somehow dead annotated diagnostic, ignore/give up
+          t nil))
+   for type = (flymake-diagnostic-type diag)
+   for backend = (flymake-diagnostic-backend diag)
+   for bname = (or (ignore-errors (symbol-name backend))
+                   "(anonymous function)")
+   for data-vec = `[,(format "%s" line)
+                    ,(format "%s" col)
+                    ,(propertize (format "%s"
+                                         (flymake--lookup-type-property
+                                          type 'flymake-type-name type))
+                                 'face (flymake--lookup-type-property
+                                        type 'mode-line-face 'flymake-error))
+                    ,(propertize
+                      (if bname
+                          (replace-regexp-in-string "\\(.\\)[^-]+\\(-\\|$\\)"
+                                                    "\\1\\2" bname)
+                        "(anon)")
+                      'help-echo (format "From `%s' backend" backend))
+                    (,(replace-regexp-in-string "\n.*" ""
+                                                (flymake-diagnostic-text diag))
+                     mouse-face highlight
+                     help-echo "mouse-2: visit this diagnostic"
+                     face nil
+                     action flymake-goto-diagnostic
+                     mouse-action flymake-goto-diagnostic)]
+   when (and line col) collect
+   (list (list :diagnostic diag
+               :line line
+               :severity (flymake--lookup-type-property
+                          type
+                          'severity (warning-numeric-level :error)))
+         (if project-root
+             (vconcat `[(,(file-name-nondirectory file)
+                         help-echo ,(file-relative-name file project-root)
+                         face nil
+                         mouse-face highlight
+                         action flymake-goto-diagnostic
+                         mouse-action flymake-goto-diagnostic )]
+                      data-vec)
+           data-vec))))
+
 (defun flymake--diagnostics-buffer-entries ()
+  "Get tabulated list entries for current tabulated list buffer.
+Expects `flymake--diagnostics-buffer-entries' to be bound to a
+buffer."
   ;; Do nothing if 'flymake--diagnostics-buffer-source' has not yet
   ;; been set to a valid buffer.  This could happen when this function
   ;; is called too early.  For example 'global-display-line-numbers-mode'
   ;; calls us from its mode hook, when the diagnostic buffer has just
   ;; been created by 'flymake-show-diagnostics-buffer', but is not yet
-  ;; set up properly.
+  ;; set up properly (Bug#40529).
   (when (bufferp flymake--diagnostics-buffer-source)
     (with-current-buffer flymake--diagnostics-buffer-source
-      (cl-loop for diag in
-               (cl-sort (flymake-diagnostics) #'< :key 
#'flymake-diagnostic-beg)
-               for (line . col) =
-               (save-excursion
-                 (goto-char (flymake--diag-beg diag))
-                 (cons (line-number-at-pos)
-                       (- (point)
-                          (line-beginning-position))))
-               for type = (flymake--diag-type diag)
-               collect
-               (list (list :diagnostic diag
-                           :line line
-                           :severity (flymake--lookup-type-property
-                                      type
-                                      'severity (warning-numeric-level 
:error)))
-                     `[,(format "%s" line)
-                       ,(format "%s" col)
-                       ,(propertize (format "%s"
-                                            (flymake--lookup-type-property
-                                             type 'flymake-type-name type))
-                                    'face (flymake--lookup-type-property
-                                           type 'mode-line-face 
'flymake-error))
-                       (,(format "%s" (flymake--diag-text diag))
-                        mouse-face highlight
-                        help-echo "mouse-2: visit this diagnostic"
-                        face nil
-                        action flymake-goto-diagnostic
-                        mouse-action flymake-goto-diagnostic)])))))
+      (when flymake-mode
+        (flymake--tabulated-entries-1 (flymake-diagnostics) nil)))))
+
+(defvar flymake--diagnostics-base-tabulated-list-format
+  `[("Line" 5 ,(lambda (l1 l2)
+                 (< (plist-get (car l1) :line)
+                    (plist-get (car l2) :line)))
+     :right-align t)
+    ("Col" 3 nil :right-align t)
+    ("Type" 8 ,(lambda (l1 l2)
+                 (< (plist-get (car l1) :severity)
+                    (plist-get (car l2) :severity))))
+    ("Backend" 8 t)
+    ("Message" 0 t)])
 
 (define-derived-mode flymake-diagnostics-buffer-mode tabulated-list-mode
   "Flymake diagnostics"
   "A mode for listing Flymake diagnostics."
-  (setq tabulated-list-format
-        `[("Line" 5 ,(lambda (l1 l2)
-                       (< (plist-get (car l1) :line)
-                          (plist-get (car l2) :line)))
-           :right-align t)
-          ("Col" 3 nil :right-align t)
-          ("Type" 8 ,(lambda (l1 l2)
-                       (< (plist-get (car l1) :severity)
-                          (plist-get (car l2) :severity))))
-          ("Message" 0 t)])
+  (setq tabulated-list-format flymake--diagnostics-base-tabulated-list-format)
   (setq tabulated-list-entries
         'flymake--diagnostics-buffer-entries)
   (tabulated-list-init-header))
 
 (defun flymake--diagnostics-buffer-name ()
-  (format "*Flymake diagnostics for %s*" (current-buffer)))
+  (format "*Flymake diagnostics for `%s'*" (current-buffer)))
+
+(define-obsolete-function-alias 'flymake-show-diagnostics-buffer
+  'flymake-show-buffer-diagnostics "1.2.1")
 
-(defun flymake-show-diagnostics-buffer ()
+(defun flymake-show-buffer-diagnostics ()
   "Show a list of Flymake diagnostics for current buffer."
   (interactive)
   (let* ((name (flymake--diagnostics-buffer-name))
@@ -1437,8 +1643,121 @@ POS can be a buffer position or a button"
                        (current-buffer)))))
     (with-current-buffer target
       (setq flymake--diagnostics-buffer-source source)
-      (revert-buffer)
-      (display-buffer (current-buffer)))))
+      (display-buffer (current-buffer))
+      (revert-buffer))))
+
+
+;;; Per-project diagnostic listing
+;;;
+
+(defvar flymake-list-only-diagnostics nil
+  "Diagnostics list meant for listing, not highlighting.
+This variable holds an alist ((FILE-NAME . DIAGS) ...) where
+FILE-NAME is a string holding an absolute file name and DIAGS is
+a list of diagnostic objects created with with
+`flymake-make-diagnostic'.  These diagnostics are never annotated
+as overlays in actual buffers: they merely serve as temporary
+stand-ins for more accurate diagnostics that are produced once
+the file they refer to is visited and `flymake-mode' is turned on
+in the resulting buffer.
+
+Flymake backends that somehow gain sporadic information about
+diagnostics in neighbouring files may freely modify this variable
+by adding or removing entries to for those files.  If the
+information about those neighbouring files is acquired repeatedly
+and reliably, it may be more sensible to report them as
+\"foreign\" diagnostics instead.
+
+Commands such as `flymake-show-project-diagnostics' will include
+some of this variable's contents the diagnostic listings.")
+
+(defvar-local flymake--project-diagnostic-list-project nil)
+
+(define-derived-mode flymake-project-diagnostics-mode tabulated-list-mode
+  "Flymake diagnostics"
+  "A mode for listing Flymake diagnostics."
+  (setq tabulated-list-format
+        (vconcat [("File" 25 t)]
+                 flymake--diagnostics-base-tabulated-list-format))
+  (setq tabulated-list-entries
+        'flymake--project-diagnostics-entries)
+  (tabulated-list-init-header))
+
+(cl-defun flymake--project-diagnostics (&optional (project (project-current)))
+  "Get all known relevant diagnostics for PROJECT."
+  (let* ((root (project-root project))
+         (visited-buffers (cl-remove-if-not #'buffer-file-name 
(project-buffers project)))
+         buffer-annotated-diags
+         relevant-foreign-diags
+         list-only-diags
+         annotated-diag-files)
+    (setq buffer-annotated-diags
+          (cl-loop for buf in visited-buffers
+                   for diags = (with-current-buffer buf
+                                 (flymake-diagnostics))
+                   when diags do
+                   (push (buffer-file-name buf) annotated-diag-files)
+                   append (cl-sort diags #'< :key #'flymake-diagnostic-beg)))
+    (cl-loop
+     for buf in visited-buffers
+     do (with-current-buffer buf
+          (when (and flymake-mode flymake--state)
+            (maphash
+             (lambda (_backend state)
+               (maphash
+                (lambda (foreign-file diags)
+                  (setq foreign-file (expand-file-name foreign-file))
+                  ;; FIXME: This is not right if more than one visited
+                  ;; source targets the same foreign file.  Don't
+                  ;; think we can get away without some kind of
+                  ;; `cl-remove-duplicates' here that utilizes
+                  ;; `flymake--equal-diagnostic-p'.
+                  (unless (member foreign-file annotated-diag-files)
+                    (push foreign-file annotated-diag-files)
+                    (setq relevant-foreign-diags
+                          (append relevant-foreign-diags
+                                  diags))))
+                (flymake--state-foreign-diags state)))
+             flymake--state))))
+    (setq list-only-diags
+          (cl-loop for (file-name . diags) in flymake-list-only-diagnostics
+                   if (and (string-prefix-p (expand-file-name root) file-name)
+                           (not (member file-name annotated-diag-files)))
+                   append diags))
+    (append buffer-annotated-diags relevant-foreign-diags list-only-diags)))
+
+(defun flymake--project-diagnostics-entries ()
+  (let ((p (project-current)))
+    (flymake--tabulated-entries-1 (flymake--project-diagnostics p)
+                                  (project-root p))))
+
+(defun flymake--project-diagnostics-buffer (root)
+  (get-buffer-create (format "*Flymake diagnostics for `%s'*" root)))
+
+(defun flymake-show-project-diagnostics ()
+  "Show a list of Flymake diagnostics for the current project."
+  (interactive)
+  (let* ((prj (project-current))
+         (root (project-root prj))
+         (buffer (flymake--project-diagnostics-buffer root)))
+    (with-current-buffer buffer
+      (flymake-project-diagnostics-mode)
+      (setq-local flymake--project-diagnostic-list-project prj)
+      (display-buffer (current-buffer))
+      (revert-buffer))))
+
+(defun flymake--update-diagnostics-listings (buffer)
+  "Update diagnostics listings somehow relevant to BUFFER."
+  (dolist (probe (buffer-list))
+    (with-current-buffer probe
+      (when (or (and (eq major-mode 'flymake-project-diagnostics-mode)
+                     flymake--project-diagnostic-list-project
+                     (buffer-file-name buffer)
+                     (memq buffer
+                      (project-buffers 
flymake--project-diagnostic-list-project)))
+                (and (eq major-mode 'flymake-diagnostics-buffer-mode)
+                     (eq flymake--diagnostics-buffer-source buffer)))
+        (revert-buffer)))))
 
 (provide 'flymake)
 
diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el
index 707226fb2a..7cf4ce2730 100644
--- a/lisp/progmodes/fortran.el
+++ b/lisp/progmodes/fortran.el
@@ -749,7 +749,7 @@ Variables controlling indentation style and extra features:
 `fortran-comment-line-extra-indent'
   Amount of extra indentation for text in full-line comments (default 0).
 `fortran-comment-indent-style'
-  How to indent the text in full-line comments. Allowed values are:
+  How to indent the text in full-line comments.  Allowed values are:
   nil         don't change the indentation
   `fixed'     indent to `fortran-comment-line-extra-indent' beyond the
               value of either
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 67ad39b7f4..902466e4fe 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -5,11 +5,10 @@
 ;; Author: Nick Roberts <nickrob@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: unix, tools
+;; URL: https://www.emacswiki.org/emacs/GDB-MI
 
 ;; This file is part of GNU Emacs.
 
-;; Homepage: https://www.emacswiki.org/emacs/GDB-MI
-
 ;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
@@ -789,7 +788,7 @@ becomes the initial working directory and source-file 
directory
 for your debugger.
 If COMMAND-LINE requests that gdb attaches to a process PID, gdb
 will run in *gud-PID*, otherwise it will run in *gud*; in these
-cases the initial working directory is the default-directory of
+cases the initial working directory is the `default-directory' of
 the buffer in which this command was invoked.
 
 COMMAND-LINE should include \"-i=mi\" to use gdb's MI text interface.
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index b2a9b3e320..d7f4582dd0 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -523,7 +523,7 @@ This variable's value takes effect when 
`grep-compute-defaults' is called."
 ;;;###autoload
 (defvar grep-history nil "History list for grep.")
 ;;;###autoload
-(defvar grep-find-history nil "History list for grep-find.")
+(defvar grep-find-history nil "History list for `grep-find'.")
 
 ;; History of lgrep and rgrep regexp and files args.
 (defvar grep-regexp-history nil)
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index d8c77f7f23..2061d41480 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -31,7 +31,7 @@
 ;; <shane@spr.com> added support for xdb (HPUX debugger).  Rick Sladkey
 ;; <jrs@world.std.com> wrote the GDB command completion code.  Dave Love
 ;; <d.love@dl.ac.uk> added the IRIX kluge, re-implemented the Mips-ish variant
-;; and added a menu. Brian D. Carlstrom <bdc@ai.mit.edu> combined the IRIX
+;; and added a menu.  Brian D. Carlstrom <bdc@ai.mit.edu> combined the IRIX
 ;; kluge with the gud-xdb-directories hack producing gud-dbx-directories.
 ;; Derek L. Davies <ddavies@world.std.com> added support for jdb (Java
 ;; debugger.)  Jan Nieuwenhuizen added support for the Guile REPL (Guile
@@ -795,7 +795,7 @@ becomes the initial working directory and source-file 
directory
 for your debugger.
 If COMMAND-LINE requests that gdb attaches to a process PID, gdb
 will run in *gud-PID*, otherwise it will run in *gud*; in these
-cases the initial working directory is the default-directory of
+cases the initial working directory is the `default-directory' of
 the buffer in which this command was invoked."
   (interactive (list (gud-query-cmdline 'gud-gdb)))
 
@@ -2677,8 +2677,8 @@ gud, see `gud-mode'."
 (define-derived-mode gud-mode comint-mode "Debugger"
   "Major mode for interacting with an inferior debugger process.
 
-   You start it up with one of the commands M-x gdb, M-x sdb, M-x dbx,
-M-x perldb, M-x xdb, or M-x jdb.  Each entry point finishes by executing a
+   You start it up with one of the commands \\[gdb], \\[sdb], \\[dbx],
+\\[perldb], \\[xdb], or \\[jdb].  Each entry point finishes by executing a
 hook; `gdb-mode-hook', `sdb-mode-hook', `dbx-mode-hook',
 `perldb-mode-hook', `xdb-mode-hook', or `jdb-mode-hook' respectively.
 
@@ -3333,7 +3333,7 @@ This function uses the `gud-jdb-classpath' (and optional
 `gud-jdb-sourcepath') list(s) to derive a file
 pathname relative to its classpath directory.  The values in
 `gud-jdb-classpath' are assumed to have been converted to absolute
-pathname standards using file-truename.
+pathname standards using `file-truename'.
 If F is visited by a buffer and its mode is CC-mode(Java),
 syntactic information of LINE is used to find the enclosing (nested)
 class string which is appended to the top level
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index a2f5d7286a..a18a67249a 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -531,7 +531,7 @@ that form should be displayed.")
      ((bound-and-true-p semantic-c-takeover-hideif)
       (semantic-c-hideif-defined var))
      ;; Here we can't use hif-lookup as an empty definition like `#define 
EMPTY'
-     ;; is considered defined but is evaluated as `nil'.
+     ;; is considered defined but is evaluated as nil.
      ((assq var hide-ifdef-env) 1)
      ((and (setq def (assq var hif-predefine-alist))
            (funcall (cdr def))) 1)
@@ -1071,7 +1071,7 @@ Assuming we've just performed a `hif-token-regexp' 
lookup."
                 (error "`defined' followed by non-identifier: %S" target))
             (if (and paren
                      (not (eq (hif-nexttoken) 'hif-rparen)))
-                (error "missing right parenthesis for `defined'"))
+                (error "Missing right parenthesis for `defined'"))
             (setq hif-token
                   (list 'hif-defined 'hif-lparen target 'hif-rparen)))
           (push hif-token tokens))
diff --git a/lisp/progmodes/idlw-complete-structtag.el 
b/lisp/progmodes/idlw-complete-structtag.el
index 6d2d402e35..bf49c92552 100644
--- a/lisp/progmodes/idlw-complete-structtag.el
+++ b/lisp/progmodes/idlw-complete-structtag.el
@@ -44,7 +44,7 @@
 ;; completion for its tags.
 ;;
 ;; This file is a completion plugin which implements this kind of
-;; completion. It is also an example which shows how completion plugins
+;; completion.  It is also an example which shows how completion plugins
 ;; should be programmed.
 ;;
 ;; New versions of IDLWAVE, documentation, and more information available
@@ -86,6 +86,8 @@
 ;;  - You can force an update of the tag list with the usual command
 ;;    to update routine info in IDLWAVE: C-c C-i
 
+;;; Code:
+
 (require 'idlwave)
 
 (declare-function idlwave-shell-buffer "idlw-shell")
diff --git a/lisp/progmodes/idlw-help.el b/lisp/progmodes/idlw-help.el
index c53b9a4775..ffa3d78b4d 100644
--- a/lisp/progmodes/idlw-help.el
+++ b/lisp/progmodes/idlw-help.el
@@ -37,10 +37,7 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
-
 ;;; Code:
-(defvar idlwave-help-browse-url-available t
-  "Whether browse-url is available.")
 
 (require 'browse-url)
 
@@ -221,9 +218,8 @@ support."
 
 ;; Define the menu for the Help application
 
-(easy-menu-define
-  idlwave-help-menu idlwave-help-mode-map
-  "Menu for Help IDLWAVE system"
+(easy-menu-define idlwave-help-menu idlwave-help-mode-map
+  "Menu for Help IDLWAVE system."
   '("IDLHelp"
     ["Definition <-> Help Text" idlwave-help-toggle-header-match-and-def t]
     ["Find DocLib Header" idlwave-help-find-header t]
@@ -332,9 +328,7 @@ Here are all keybindings.
     (when (and idlwave-help-use-assistant
               (not (eq (idlwave-help-assistant-available) t)))
       (message "Cannot locate IDL Assistant, enabling default browser.")
-      (setq idlwave-help-use-assistant nil)
-      (unless idlwave-help-browse-url-available
-       (error "browse-url is not available; install it or IDL Assistant to use 
HTML help")))))
+      (setq idlwave-help-use-assistant nil))))
 
 
 (defvar idlwave-current-obj_new-class)
@@ -1354,6 +1348,8 @@ IDL assistant.")
     (setq idlwave-help-assistant-socket nil
          idlwave-help-assistant-process nil)))
 
+(defvar idlwave-help-browse-url-available t)
+(make-obsolete-variable 'idlwave-help-browse-url-available nil "28.1")
 
 (provide 'idlw-help)
 (provide 'idlwave-help)
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el
index eb88f25dfd..fc3d603f06 100644
--- a/lisp/progmodes/idlw-shell.el
+++ b/lisp/progmodes/idlw-shell.el
@@ -124,7 +124,7 @@ process output is made by surrounding this name with `*'s."
 
 (defcustom idlwave-shell-frame-parameters
   '((height . 30) (unsplittable . nil))
-  "The frame parameters for a dedicated idlwave-shell frame.
+  "The frame parameters for a dedicated `idlwave-shell' frame.
 See also `idlwave-shell-use-dedicated-frame'.
 The default makes the frame splittable, so that completion works correctly."
   :group 'idlwave-shell-general-setup
@@ -154,10 +154,10 @@ t          Arrows force the cursor back to the current 
command line and
 
 (defcustom idlwave-shell-use-toolbar t
   "Non-nil means, use the debugging toolbar in all IDL related buffers.
-Starting the shell will then add the toolbar to all idlwave-mode buffers.
+Starting the shell will then add the toolbar to all `idlwave-mode' buffers.
 Exiting the shell will removed everywhere.
 At any time you can toggle the display of the toolbar with
-`C-c C-d C-t' (`idlwave-shell-toggle-toolbar')."
+\\[idlwave-shell-toggle-toolbar]."
   :group 'idlwave-shell-general-setup
   :type 'boolean)
 
@@ -550,7 +550,7 @@ the expression output by IDL."
 
 ;; Other variables
 (defvar idlwave-shell-temp-pro-file nil
-  "Absolute pathname for temporary IDL file for compiling regions")
+  "Absolute pathname for temporary IDL file for compiling regions.")
 
 (defvar idlwave-shell-temp-rinfo-save-file nil
   "Absolute pathname for temporary IDL file save file for routine_info.
@@ -590,7 +590,7 @@ the directory stack.")
   "Additional info displayed in the mode line.")
 
 (defvar idlwave-shell-default-directory nil
-  "The default directory in the idlwave-shell buffer, of outside use.")
+  "The default directory in the `idlwave-shell' buffer, of outside use.")
 
 (defvar idlwave-shell-last-save-and-action-file nil
   "The last file which was compiled with `idlwave-shell-save-and-...'.")
@@ -734,9 +734,9 @@ IDL is currently stopped.")
 
 (defconst idlwave-shell-trace-message-re
   "^% At "    ;; First line of a trace message
-  "A regular expression matching IDL trace messages.  These are the
-messages containing file and line information of a current
-traceback.")
+  "A regular expression matching IDL trace messages.
+These are the messages containing file and line information of a
+current traceback.")
 
 (defconst idlwave-shell-step-messages
   '("^% Stepped to:"
@@ -878,8 +878,8 @@ IDL has currently stepped.")
    -------------------------------
    Info documentation for this package is available.  Use \\[idlwave-info]
    to display (complain to your sysadmin if that does not work).
-   For PostScript and HTML versions of the documentation, check IDLWAVE's
-   homepage at URL `https://github.com/jdtsmith/idlwave'.
+   For PostScript and HTML versions of the documentation, see IDLWAVE's
+   website at URL `https://github.com/jdtsmith/idlwave'.
    IDLWAVE has customize support - see the group `idlwave'.
 
 8. Keybindings
@@ -1384,14 +1384,14 @@ Otherwise just move the line.  Move down unless UP is 
non-nil."
       (forward-line (- arg)))))
 
 (defun idlwave-shell-up-or-history (&optional arg)
-"When in last line of process buffer, move to previous input.
- Otherwise just go up one line."
+  "When in last line of process buffer, move to previous input.
+Otherwise just go up one line."
   (interactive "p")
   (idlwave-shell-move-or-history t arg))
 
 (defun idlwave-shell-down-or-history (&optional arg)
-"When in last line of process buffer, move to next input.
- Otherwise just go down one line."
+  "When in last line of process buffer, move to next input.
+Otherwise just go down one line."
   (interactive "p")
   (idlwave-shell-move-or-history nil arg))
 
@@ -1897,7 +1897,7 @@ HEAP_GC, /VERBOSE"
     (cons sysdir (nreverse dirs))))
 
 (defun idlwave-shell-routine-info-filter ()
-  "Function which parses the special output from idlwave_routine_info.pro."
+  "Parse the special output from idlwave_routine_info.pro."
   (let ((text idlwave-shell-command-output)
        (start 0)
        sep sep-re file type spec specs name cs key keys class entry)
@@ -2056,7 +2056,7 @@ Change the default directory for the process buffer to 
concur."
 (idlwave-new-sintern-type execcomm)
 
 (defun idlwave-shell-complete (&optional arg)
-  "Do completion in the idlwave-shell buffer.
+  "Do completion in the `idlwave-shell' buffer.
 Calls `idlwave-shell-complete-filename' after some executive commands or
 in strings.  Otherwise, calls `idlwave-complete' to complete modules and
 keywords."
@@ -2136,7 +2136,7 @@ args of an executive .run, .rnew or .compile."
       (and (memq (preceding-char) '(?\' ?\")) t))))
 
 (defun idlwave-shell-batch-command ()
-  "Return t if we're in a batch command statement like @foo"
+  "Return t if we're in a batch command statement like \"@foo\"."
   (let ((limit (point-at-bol)))
     (save-excursion
       ;; Skip backwards over filename
@@ -2145,7 +2145,7 @@ args of an executive .run, .rnew or .compile."
       (and (eq (preceding-char) ?@) (not (idlwave-in-quote))))))
 
 (defun idlwave-shell-shell-command ()
-  "Return t if we're in a shell command statement like $ls"
+  "Return t if we're in a shell command statement like \"$ls\"."
   (save-excursion
     (idlwave-beginning-of-statement)
     (looking-at "\\$")))
@@ -2276,7 +2276,7 @@ matter what the settings of that variable."
     (if (not (idlwave-shell-valid-frame frame))
        ;; fixme: errors are dangerous in shell filters.  but i think i
        ;; have never encountered this one.
-        (error "invalid frame - unable to access file: %s" (car frame))
+        (error "Invalid frame - unable to access file: %s" (car frame))
       ;;
       ;; buffer : the buffer to display a line in.
       ;; select-shell: current buffer is the shell.
@@ -3147,14 +3147,14 @@ index - the index number of the breakpoint internal to 
IDL.
 module - the module for breakpoint internal to IDL.
 
 Remaining elements of the cdr:
-data - Data associated with the breakpoint by idlwave-shell currently
+data - Data associated with the breakpoint by `idlwave-shell' currently
 contains four items:
 
 count - number of times to execute breakpoint.  When count reaches 0
   the breakpoint is cleared and removed from the alist.
 
 command - command to execute when breakpoint is reached, either a
-  lisp function to be called with `funcall' with no arguments or a
+  Lisp function to be called with `funcall' with no arguments or a
   list to be evaluated with `eval'.
 
 condition - any condition to apply to the breakpoint.
@@ -4316,11 +4316,11 @@ Shell debugging commands are available as single key 
sequences."
     ["Toggle Toolbar" idlwave-shell-toggle-toolbar t]
     ["Exit IDL" idlwave-shell-quit t]))
 
-(easy-menu-define
-  idlwave-mode-debug-menu idlwave-mode-map "IDL debugging menus"
+(easy-menu-define idlwave-mode-debug-menu idlwave-mode-map
+  "IDL debugging menus."
   idlwave-shell-menu-def)
-(easy-menu-define
-  idlwave-shell-mode-menu idlwave-shell-mode-map "IDL shell menus"
+(easy-menu-define idlwave-shell-mode-menu idlwave-shell-mode-map
+  "IDL shell menus."
   idlwave-shell-menu-def)
 
 ;; The Breakpoint Glyph -------------------------------------------------------
diff --git a/lisp/progmodes/idlw-toolbar.el b/lisp/progmodes/idlw-toolbar.el
index d3f47fcf45..c3ffcd18ce 100644
--- a/lisp/progmodes/idlw-toolbar.el
+++ b/lisp/progmodes/idlw-toolbar.el
@@ -355,7 +355,7 @@ static char * file[] = {
 \"                            \",
 \"                            \",
 \"                            \"};")
-  "The edit-cmd icon")
+  "The edit-cmd icon.")
 
 (defvar idlwave-toolbar-run-icon
   (idlwave-toolbar-make-button
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 55e712dd77..e95abd863e 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -119,7 +119,7 @@
 ;;
 ;;   Moving the point backwards in conjunction with abbrev expansion
 ;;   does not work as I would like it, but this is a problem with
-;;   emacs abbrev expansion done by the self-insert-command.  It ends
+;;   Emacs abbrev expansion done by the self-insert-command.  It ends
 ;;   up inserting the character that expanded the abbrev after moving
 ;;   point backward, e.g., "\cl" expanded with a space becomes
 ;;   "LONG( )" with point before the close paren.  This is solved by
@@ -163,7 +163,7 @@
 (defgroup idlwave nil
   "Major mode for editing IDL .pro files."
   :tag "IDLWAVE"
-  :link '(url-link :tag "Home Page"
+  :link '(url-link :tag "Website"
                    "https://github.com/jdtsmith/idlwave";)
   :link '(emacs-commentary-link :tag "Commentary in idlw-shell.el"
                                "idlw-shell.el")
@@ -1359,13 +1359,13 @@ Normally a space.")
 
 (defconst idlwave-continuation-char ?$
   "Character which is inserted as a last character on previous line by
-   \\[idlwave-split-line] to begin a continuation line.  Normally $.")
+\\[idlwave-split-line] to begin a continuation line.  Normally $.")
 
 (defconst idlwave-mode-version "6.1_em22")
 
 (defun idlwave-keyword-abbrev (&rest args)
   "Create a function for abbrev hooks to call `idlwave-modify-abbrev' with 
args."
-  (lambda () (append #'idlwave-modify-abbrev args)))
+  (lambda () (apply #'idlwave-modify-abbrev args)))
 
 (autoload 'idlwave-shell "idlw-shell"
   "Run an inferior IDL, with I/O through buffer `(idlwave-shell-buffer)'." t)
@@ -1821,7 +1821,7 @@ The main features of this mode are
    Info documentation for this package is available.  Use
    \\[idlwave-info] to display (complain to your sysadmin if that does
    not work).  For Postscript, PDF, and HTML versions of the
-   documentation, check IDLWAVE's homepage at URL
+   documentation, check IDLWAVE's website at URL
    `https://github.com/jdtsmith/idlwave'.
    IDLWAVE has customize support - see the group `idlwave'.
 
@@ -1953,7 +1953,7 @@ The main features of this mode are
 
 (defvar idlwave--command-function nil
   "If non-nil, a function called from `post-command-hook'.
-It is evaluated in the lisp function `idlwave-command-hook' which is
+It is evaluated in the Lisp function `idlwave-command-hook' which is
 placed in `post-command-hook'.")
 
 (defun idlwave-command-hook ()
@@ -4067,7 +4067,7 @@ blank lines."
     iname))
 
 (defun idlwave-sintern-keyword-list (kwd-list &optional set)
-  "Sintern a set of keywords (file (key . link) (key2 . link2) ...)"
+  "Sintern a set of keywords (file (key . link) (key2 . link2) ...)."
   (mapc (lambda(x)
          (setcar x (idlwave-sintern-keyword (car x) set)))
        (cdr kwd-list))
@@ -5049,7 +5049,7 @@ Can run from `after-save-hook'."
 ;;----- Scanning buffers -------------------
 
 (defun idlwave-get-routine-info-from-buffers (buffers)
-  "Call `idlwave-get-buffer-routine-info' on idlwave-mode buffers in BUFFERS."
+  "Call `idlwave-get-buffer-routine-info' on `idlwave-mode' buffers in 
BUFFERS."
   (let (buf routine-lists res)
     (save-excursion
       (while (setq buf (pop buffers))
@@ -5727,10 +5727,10 @@ Possible values are:
 8  <=>  `function-method-keyword'
 9  <=>  `class'
 
-As a special case, the universal argument C-u forces completion of
+As a special case, the universal argument \\[universal-argument] forces 
completion of
 function names in places where the default would be a keyword.
 
-Two prefix argument, C-u C-u, prompts for a regexp by which to limit
+Two prefix argument, \\[universal-argument] \\[universal-argument], prompts 
for a regexp by which to limit
 completion.
 
 For Lisp programmers only:
@@ -8971,10 +8971,10 @@ Assumes that point is at the beginning of the unit as 
found by
          idlwave-shell-automatic-start)]))
 
 (easy-menu-define idlwave-mode-menu idlwave-mode-map
-  "IDL and WAVE CL editing menu"
+  "IDL and WAVE CL editing menu."
   idlwave-mode-menu-def)
 (easy-menu-define idlwave-mode-debug-menu idlwave-mode-map
-  "IDL and WAVE CL editing menu"
+  "IDL and WAVE CL editing menu."
   idlwave-mode-debug-menu-def)
 
 (defun idlwave-customize ()
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index c2481f6095..845ca8609d 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -24,9 +24,9 @@
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
-;;; Commentary
+;;; Commentary:
 
-;; This is based on Karl Landstrom's barebones javascript-mode. This
+;; This is based on Karl Landstrom's barebones javascript-mode.  This
 ;; is much more robust and works with cc-mode's comment filling
 ;; (mostly).
 ;;
@@ -237,8 +237,7 @@ will create multiple top-level entries.  Don't use 
:prototype
 unnecessarily: it has an associated cost in performance.
 
 If :strip-prototype is present and non-nil, then if the class
-name as matched contains
-")
+name as matched contains.")
 
 (defconst js--available-frameworks
   (cl-loop for style in js--class-styles
@@ -554,8 +553,7 @@ If the previous expression also contains a \".\" at the 
same level,
 then the \".\"s will be lined up:
 
   let x = svg.mumble()
-             .chained;
-"
+             .chained;"
   :version "26.1"
   :type 'boolean
   :safe 'booleanp)
@@ -574,8 +572,8 @@ to `js-jsx-regexps', which see."
 
 This enables proper font-locking and indentation of code using
 Facebook’s “JSX” syntax extension for JavaScript, for use with
-Facebook’s “React” library.  Font-locking is like sgml-mode.
-Indentation is also like sgml-mode, although some indentation
+Facebook’s “React” library.  Font-locking is like `sgml-mode'.
+Indentation is also like `sgml-mode', although some indentation
 behavior may differ slightly to align more closely with the
 conventions of the React developer community.
 
@@ -3267,7 +3265,7 @@ the broken-down class name of the item to insert."
 
 (defun js--get-all-known-symbols ()
   "Return a hash table of all JavaScript symbols.
-This searches all existing `js-mode' buffers. Each key is the
+This searches all existing `js-mode' buffers.  Each key is the
 name of a symbol (possibly disambiguated with <N>, where N > 1),
 and each value is a marker giving the location of that symbol."
   (cl-loop with symbols = (make-hash-table :test 'equal)
diff --git a/lisp/progmodes/ld-script.el b/lisp/progmodes/ld-script.el
index 485e64e249..879eb72065 100644
--- a/lisp/progmodes/ld-script.el
+++ b/lisp/progmodes/ld-script.el
@@ -167,11 +167,11 @@
      ("\\W\\(\\.\\)\\W" 1 ld-script-location-counter-face)
      )
    cpp-font-lock-keywords)
-  "Default font-lock-keywords for `ld-script-mode'.")
+  "Default `font-lock-keywords' for `ld-script-mode'.")
 
 ;;;###autoload
 (define-derived-mode ld-script-mode prog-mode "LD-Script"
-   "A major mode to edit GNU ld script files"
+   "A major mode to edit GNU ld script files."
   (setq-local comment-start "/* ")
   (setq-local comment-end   " */")
   (setq-local font-lock-defaults '(ld-script-font-lock-keywords nil)))
diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el
index b1a5f30158..6bf070cf9e 100644
--- a/lisp/progmodes/octave.el
+++ b/lisp/progmodes/octave.el
@@ -351,7 +351,7 @@ Non-nil means always go to the next Octave code line after 
sending."
 ;; corresponding continuation lines).
 
 (defun octave-smie--funcall-p ()
-  "Return non-nil if we're in an expression context.  Moves point."
+  "Return non-nil if we're in an expression context.  Move point."
   (looking-at "[ \t]*("))
 
 (defun octave-smie--end-index-p ()
@@ -1034,7 +1034,7 @@ directory and makes this the current buffer's default 
directory."
   (nth 8 (syntax-ppss)))
 
 (defun octave-looking-at-kw (regexp)
-  "Like `looking-at', but sets `case-fold-search' nil."
+  "Like `looking-at', but set `case-fold-search' nil first."
   (let ((case-fold-search nil))
     (looking-at regexp)))
 
diff --git a/lisp/progmodes/opascal.el b/lisp/progmodes/opascal.el
index 662d2b4b74..51c888d25f 100644
--- a/lisp/progmodes/opascal.el
+++ b/lisp/progmodes/opascal.el
@@ -24,9 +24,10 @@
 
 ;;; Commentary:
 
-;; To enter OPascal mode when you find an Object Pascal source file, one must
-;; override the auto-mode-alist to associate OPascal with .pas (and .dpr and
-;; .dpk) files.  Emacs, by default, will otherwise enter Pascal mode. E.g.
+;; To enter OPascal mode when you find an Object Pascal source file,
+;; one must override the auto-mode-alist to associate OPascal with
+;; .pas (and .dpr and .dpk) files.  Emacs, by default, will otherwise
+;; enter Pascal mode.  For example:
 ;;
 ;; (autoload 'opascal-mode "opascal")
 ;; (add-to-list 'auto-mode-alist
@@ -244,8 +245,8 @@ are followed by an expression.")
 
 (defconst opascal-begin-previous-tokens
   `(,@opascal-decl-sections ,@opascal-routine-statements)
-  "Tokens that a begin token aligns with, but only if not part of a nested
-routine.")
+  "Tokens that a begin token aligns with, but only if not part of a \
+nested routine.")
 
 (defconst opascal-space-chars "\000-\011\013- ") ; all except \n
 (defconst opascal-non-space-chars (concat "^" opascal-space-chars))
@@ -1530,7 +1531,7 @@ If no extension is specified, .pas is assumed.  Creates a 
buffer for the unit."
                       (concat unit ".pas")))
          (file (opascal-find-unit-file unit-file)))
     (if (null file)
-        (error "unit not found: %s" unit-file)
+        (error "Unit not found: %s" unit-file)
       (find-file file)
       (if (not (derived-mode-p 'opascal-mode))
           (opascal-mode)))
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index 4e14c30bc5..20834dd2e1 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -101,7 +101,7 @@
   :version "28.1")
 
 (defvar perl-mode-abbrev-table nil
-  "Abbrev table in use in perl-mode buffers.")
+  "Abbrev table in use in `perl-mode' buffers.")
 (define-abbrev-table 'perl-mode-abbrev-table ())
 
 (defvar perl-mode-map
@@ -509,7 +509,7 @@
 
 (defface perl-heredoc
   '((t (:inherit font-lock-string-face)))
-  "The face for here-documents.  Inherits from font-lock-string-face.")
+  "The face for here-documents.  Inherits from `font-lock-string-face'.")
 
 (defun perl-font-lock-syntactic-face-function (state)
   (cond
@@ -644,10 +644,10 @@ the Perl source to be checked as its standard input."
 
 ;;;###autoload
 (defun perl-flymake (report-fn &rest _args)
-  "Perl backend for Flymake.  Launches
-`perl-flymake-command' (which see) and passes to its standard
-input the contents of the current buffer.  The output of this
-command is analyzed for error and warning messages."
+  "Perl backend for Flymake.
+Launch `perl-flymake-command' (which see) and pass to its
+standard input the contents of the current buffer.  The output of
+this command is analyzed for error and warning messages."
   (unless (executable-find (car perl-flymake-command))
     (error "Cannot find a suitable checker"))
 
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index f75a3039d3..88d55a647c 100644
--- a/lisp/progmodes/prog-mode.el
+++ b/lisp/progmodes/prog-mode.el
@@ -43,31 +43,32 @@
                                 display-line-numbers-mode
                                 prettify-symbols-mode))
 
-(defun prog-context-menu (menu)
+(defun prog-context-menu (menu click)
+  "Populate MENU with xref commands at CLICK."
   (require 'xref)
   (define-key-after menu [prog-separator] menu-bar-separator
-    'mark-whole-buffer)
-  (define-key-after menu [xref-find-def]
-    '(menu-item "Find Definition" xref-find-definitions-at-mouse
-                :visible (save-excursion
-                           (mouse-set-point last-input-event)
-                           (xref-backend-identifier-at-point
-                            (xref-find-backend)))
-                :help "Find definition of identifier")
-    'prog-separator)
-  (define-key-after menu [xref-find-ref]
-    '(menu-item "Find References" xref-find-references-at-mouse
-                :visible (save-excursion
-                           (mouse-set-point last-input-event)
-                           (xref-backend-identifier-at-point
-                            (xref-find-backend)))
-                :help "Find references to identifier")
-    'xref-find-def)
-  (define-key-after menu [xref-pop]
-    '(menu-item "Back Definition" xref-pop-marker-stack
-                :visible (not (xref-marker-stack-empty-p))
-                :help "Back to the position of the last search")
-    'xref-find-ref)
+    'middle-separator)
+  (when (not (xref-marker-stack-empty-p))
+    (define-key-after menu [xref-pop]
+      '(menu-item "Back Definition" xref-pop-marker-stack
+                  :help "Back to the position of the last search")
+      'prog-separator))
+  (when (save-excursion
+          (mouse-set-point click)
+          (xref-backend-identifier-at-point
+           (xref-find-backend)))
+    (define-key-after menu [xref-find-ref]
+      '(menu-item "Find References" xref-find-references-at-mouse
+                  :help "Find references to identifier")
+      'prog-separator))
+  (when (save-excursion
+          (mouse-set-point click)
+          (xref-backend-identifier-at-point
+           (xref-find-backend)))
+    (define-key-after menu [xref-find-def]
+      '(menu-item "Find Definition" xref-find-definitions-at-mouse
+                  :help "Find definition of identifier")
+      'prog-separator))
   menu)
 
 (defvar prog-mode-map
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index e3bffa6393..563b9c3c90 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1,7 +1,7 @@
 ;;; project.el --- Operations on the current project  -*- lexical-binding: t; 
-*-
 
 ;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
-;; Version: 0.6.1
+;; Version: 0.7.1
 ;; Package-Requires: ((emacs "26.1") (xref "1.0.2"))
 
 ;; This is a GNU ELPA :core package.  Avoid using functionality that
@@ -866,8 +866,8 @@ pattern to search for."
 (defun project-find-file ()
   "Visit a file (with completion) in the current project.
 
-The completion default is the filename at point, determined by
-`thing-at-point' (whether such file exists or not)."
+The filename at point (determined by `thing-at-point'), if any,
+is available as part of \"future history\"."
   (interactive)
   (let* ((pr (project-current t))
          (dirs (list (project-root pr))))
@@ -877,8 +877,8 @@ The completion default is the filename at point, determined 
by
 (defun project-or-external-find-file ()
   "Visit a file (with completion) in the current project or external roots.
 
-The completion default is the filename at point, determined by
-`thing-at-point' (whether such file exists or not)."
+The filename at point (determined by `thing-at-point'), if any,
+is available as part of \"future history\"."
   (interactive)
   (let* ((pr (project-current t))
          (dirs (cons
@@ -899,11 +899,14 @@ For the arguments list, see 
`project--read-file-cpd-relative'."
 
 (defun project--read-file-cpd-relative (prompt
                                         all-files &optional predicate
-                                        hist default)
+                                        hist mb-default)
   "Read a file name, prompting with PROMPT.
 ALL-FILES is a list of possible file name completions.
-PREDICATE, HIST, and DEFAULT have the same meaning as in
-`completing-read'."
+
+PREDICATE and HIST have the same meaning as in `completing-read'.
+
+MB-DEFAULT is used as part of \"future history\", to be inserted
+by the user at will."
   (let* ((common-parent-directory
           (let ((common-prefix (try-completion "" all-files)))
             (if (> (length common-prefix) 0)
@@ -917,36 +920,39 @@ PREDICATE, HIST, and DEFAULT have the same meaning as in
          (res (project--completing-read-strict prompt
                                                new-collection
                                                predicate
-                                               hist default)))
+                                               hist mb-default)))
     (concat common-parent-directory res)))
 
 (defun project--read-file-absolute (prompt
                                     all-files &optional predicate
-                                    hist default)
+                                    hist mb-default)
   (project--completing-read-strict prompt
                                    (project--file-completion-table all-files)
                                    predicate
-                                   hist default))
+                                   hist mb-default))
+
+(defun project-find-file-in (suggested-filename dirs project)
+  "Complete a file name in DIRS in PROJECT and visit the result.
 
-(defun project-find-file-in (filename dirs project)
-  "Complete FILENAME in DIRS in PROJECT and visit the result."
+SUGGESTED-FILENAME is a relative file name, or part of it, which
+is used as part of \"future history\"."
   (let* ((all-files (project-files project dirs))
          (completion-ignore-case read-file-name-completion-ignore-case)
          (file (funcall project-read-file-name-function
                         "Find file" all-files nil nil
-                        filename)))
+                        suggested-filename)))
     (if (string= file "")
         (user-error "You didn't specify the file")
       (find-file file))))
 
 (defun project--completing-read-strict (prompt
                                         collection &optional predicate
-                                        hist default)
+                                        hist mb-default)
   (minibuffer-with-setup-hook
       (lambda ()
         (setq-local minibuffer-default-add-function
                     (lambda ()
-                      (let ((minibuffer-default default))
+                      (let ((minibuffer-default mb-default))
                         (minibuffer-default-add-completions)))))
     (completing-read (format "%s: " prompt)
                      collection predicate 'confirm
@@ -1337,7 +1343,10 @@ It's also possible to enter an arbitrary directory not 
in the list."
           ;; completion style).
           (project--file-completion-table
            (append project--list `(,dir-choice))))
-         (pr-dir (completing-read "Select project: " choices nil t)))
+         (pr-dir ""))
+    (while (equal pr-dir "")
+      ;; If the user simply pressed RET, do this again until they don't.
+      (setq pr-dir (completing-read "Select project: " choices nil t)))
     (if (equal pr-dir dir-choice)
         (read-directory-name "Select directory: " default-directory nil t)
       pr-dir)))
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el
index 2e23c2e2ca..33ca01cc75 100644
--- a/lisp/progmodes/prolog.el
+++ b/lisp/progmodes/prolog.el
@@ -1272,7 +1272,7 @@ using the commands `send-region', `send-string' and 
\\[prolog-consult-region].
 Commands:
 Tab indents for Prolog; with argument, shifts rest
  of expression rigidly with the current line.
-Paragraphs are separated only by blank lines and `%%'. `%'s start comments.
+Paragraphs are separated only by blank lines and `%%'.  `%'s start comments.
 
 Return at end of buffer sends line as input.
 Return not at end copies rest of line to end and sends it.
@@ -1352,7 +1352,7 @@ the variable `prolog-prompt-regexp'."
   (let ((pname (prolog-program-name))
         (pswitches (prolog-program-switches)))
     (if (null pname)
-        (error "This Prolog system has defined no interpreter."))
+        (error "This Prolog system has defined no interpreter"))
     (unless (comint-check-proc "*prolog*")
       (with-current-buffer (get-buffer-create "*prolog*")
         (prolog-inferior-mode)
@@ -1641,7 +1641,7 @@ region.
 
 This function must be called from the source code buffer."
   (if prolog-process-flag
-      (error "Another Prolog task is running."))
+      (error "Another Prolog task is running"))
   (prolog-ensure-process t)
   (let* ((buffer (get-buffer-create prolog-compilation-buffer))
          (real-file buffer-file-name)
@@ -2355,7 +2355,7 @@ In effect it sets the `fill-prefix' when inside comments 
and then calls
            )
       (if prolog-help-function-i
           (funcall prolog-help-function-i predicate)
-        (error "Sorry, no help method defined for this Prolog system."))))
+        (error "Sorry, no help method defined for this Prolog system"))))
    ))
 
 
@@ -2369,7 +2369,7 @@ In effect it sets the `fill-prefix' when inside comments 
and then calls
     (pop-to-buffer nil)
     (Info-goto-node prolog-info-predicate-index)
     (if (not (re-search-forward str nil t))
-        (error "Help on predicate `%s' not found." predicate))
+        (error "Help on predicate `%s' not found" predicate))
 
     (setq oldp (point))
     (if (re-search-forward str nil t)
@@ -2413,7 +2413,7 @@ This function is only available when `prolog-system' is 
set to `swi'."
     (process-send-string "prolog" (concat "apropos(" string ").\n"))
     (display-buffer "*prolog*"))
    (t
-    (error "Sorry, no Prolog apropos available for this Prolog system."))))
+    (error "Sorry, no Prolog apropos available for this Prolog system"))))
 
 (defun prolog-atom-under-point ()
   "Return the atom under or left to the point."
@@ -3289,7 +3289,7 @@ PREFIX is the prefix of the search regexp."
 
 (easy-menu-define
   prolog-edit-menu-runtime prolog-mode-map
-  "Runtime Prolog commands available from the editing buffer"
+  "Runtime Prolog commands available from the editing buffer."
   ;; FIXME: Don't use a whole menu for just "Run Mercury".  --Stef
   `("System"
     ;; Runtime menu name.
diff --git a/lisp/progmodes/ps-mode.el b/lisp/progmodes/ps-mode.el
index 67c034d090..68c3cd91fa 100644
--- a/lisp/progmodes/ps-mode.el
+++ b/lisp/progmodes/ps-mode.el
@@ -446,7 +446,7 @@ If nil, use `temporary-file-directory'."
      ps-mode-submit-bug-report
      t]))
 
-(easy-menu-define ps-mode-main ps-mode-map "PostScript" ps-mode-menu-main)
+(easy-menu-define ps-mode-main ps-mode-map "PostScript Menu." 
ps-mode-menu-main)
 
 
 
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index d9fc5c5009..f848f4c103 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -542,7 +542,7 @@ the {...} holes that appear within f-strings."
      (1 font-lock-function-name-face))
     (,(rx symbol-start "class" (1+ space) (group (1+ (or word ?_))))
      (1 font-lock-type-face)))
-  "Font lock keywords to use in python-mode for level 1 decoration.
+  "Font lock keywords to use in `python-mode' for level 1 decoration.
 
 This is the minimum decoration level, including function and
 class declarations.")
@@ -596,7 +596,7 @@ class declarations.")
            ;; Extras:
            "__all__")
           symbol-end) . font-lock-builtin-face))
-  "Font lock keywords to use in python-mode for level 2 decoration.
+  "Font lock keywords to use in `python-mode' for level 2 decoration.
 
 This is the medium decoration level, including everything in
 `python-font-lock-keywords-level-1', as well as keywords and
@@ -712,7 +712,7 @@ avoid '==' being treated as an assignment."
                   (or ")" "]") (* space)
                   assignment-operator))
      (1 font-lock-variable-name-face)))
-  "Font lock keywords to use in python-mode for maximum decoration.
+  "Font lock keywords to use in `python-mode' for maximum decoration.
 
 This decoration level includes everything in
 `python-font-lock-keywords-level-2', as well as constants,
@@ -726,7 +726,7 @@ decorators, exceptions, and assignments.")
                                                  ; is more than 1, or t (which 
it is,
                                                  ; by default).
     )
-  "List of font lock keyword specifications to use in python-mode.
+  "List of font lock keyword specifications to use in `python-mode'.
 
 Which one will be chosen depends on the value of
 `font-lock-maximum-decoration'.")
@@ -2189,6 +2189,9 @@ virtualenv."
   :type '(alist regexp)
   :group 'python)
 
+(defvar python-shell-output-filter-in-progress nil)
+(defvar python-shell-output-filter-buffer nil)
+
 (defmacro python-shell--add-to-path-with-priority (pathvar paths)
   "Modify PATHVAR and ensure PATHS are added only once at beginning."
   `(dolist (path (reverse ,paths))
@@ -2821,7 +2824,6 @@ def __PYTHON_EL_eval(source, filename):
         from __builtin__ import compile, eval, globals
     else:
         from builtins import compile, eval, globals
-    sys.stdout.write('\\n')
     try:
         p, e = ast.parse(source, filename), None
     except SyntaxError:
@@ -3070,13 +3072,12 @@ of `error' with a user-friendly message."
   (or (python-shell-get-process)
       (if interactivep
           (user-error
-           "Start a Python process first with `M-x run-python' or `%s'."
+           "Start a Python process first with `M-x run-python' or `%s'"
            ;; Get the binding.
            (key-description
             (where-is-internal
              #'run-python overriding-local-map t)))
-        (error
-         "No inferior Python process running."))))
+        (error "No inferior Python process running"))))
 
 (defun python-shell-get-or-create-process (&optional cmd dedicated show)
   "Get or create an inferior Python process for current buffer and return it.
@@ -3162,6 +3163,11 @@ t when called interactively."
                       (python-shell--encode-string string)
                       (python-shell--encode-string (or (buffer-file-name)
                                                        "<string>")))))
+    (unless python-shell-output-filter-in-progress
+      (with-current-buffer (process-buffer process)
+        (save-excursion
+          (goto-char (process-mark process))
+          (insert-before-markers "\n"))))
     (if (or (null (process-tty-name process))
             (<= (string-bytes code)
                 (or (bound-and-true-p comint-max-line-length)
@@ -3172,9 +3178,6 @@ t when called interactively."
              (file-name (or (buffer-file-name) temp-file-name)))
         (python-shell-send-file file-name process temp-file-name t)))))
 
-(defvar python-shell-output-filter-in-progress nil)
-(defvar python-shell-output-filter-buffer nil)
-
 (defun python-shell-output-filter (string)
   "Filter used in `python-shell-send-string-no-output' to grab output.
 STRING is the output received to this point from the process.
@@ -4710,10 +4713,10 @@ returns will be used.  If not FORCE-PROCESS is passed 
what
           docstring)))))
 
 (defvar-local python-eldoc-get-doc t
-  "Non-nil means eldoc should fetch the documentation
-  automatically.  Set to nil by `python-eldoc-function' if
-  `python-eldoc-function-timeout-permanent' is non-nil and
-  `python-eldoc-function' times out.")
+  "Non-nil means eldoc should fetch the documentation automatically.
+Set to nil by `python-eldoc-function' if
+`python-eldoc-function-timeout-permanent' is non-nil and
+`python-eldoc-function' times out.")
 
 (defcustom python-eldoc-function-timeout 1
   "Timeout for `python-eldoc-function' in seconds."
@@ -4771,10 +4774,9 @@ Interactively, prompt for symbol."
 
 ;;; Hideshow
 
-(defun python-hideshow-forward-sexp-function (arg)
+(defun python-hideshow-forward-sexp-function (_arg)
   "Python specific `forward-sexp' function for `hs-minor-mode'.
 Argument ARG is ignored."
-  arg  ; Shut up, byte compiler.
   (python-nav-end-of-defun)
   (unless (python-info-current-line-empty-p)
     (backward-char)))
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 6a03856eaf..b0b055bd36 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -151,10 +151,8 @@ This should only be called after matching against 
`ruby-here-doc-beg-re'."
     map)
   "Keymap used in Ruby mode.")
 
-(easy-menu-define
-  ruby-mode-menu
-  ruby-mode-map
-  "Ruby Mode Menu"
+(easy-menu-define ruby-mode-menu ruby-mode-map
+  "Ruby Mode Menu."
   '("Ruby"
     ["Beginning of Block" ruby-beginning-of-block t]
     ["End of Block" ruby-end-of-block t]
@@ -936,7 +934,7 @@ Can be one of `heredoc', `modifier', `expr-qstr', 
`expr-re'."
 
 (defun ruby-forward-string (term &optional end no-error expand)
   "Move forward across one balanced pair of string delimiters.
-Skips escaped delimiters. If EXPAND is non-nil, also ignores
+Skips escaped delimiters.  If EXPAND is non-nil, also ignores
 delimiters in interpolated strings.
 
 TERM should be a string containing either a single, self-matching
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index 201d1fd164..cccd70f06c 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -2193,7 +2193,7 @@ Point should be before the newline."
 When used interactively, insert the proper starting #!-line,
 and make the visited file executable via `executable-set-magic',
 perhaps querying depending on the value of `executable-query'.
-(If given a prefix (i.e., `C-u') don't insert any starting #!
+(If given a prefix (i.e., `\\[universal-argument]') don't insert any starting 
#!
 line.)
 
 When this function is called noninteractively, INSERT-FLAG (the third
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index d144d68b57..02eccb3301 100644
--- a/lisp/progmodes/sql.el
+++ b/lisp/progmodes/sql.el
@@ -2794,7 +2794,7 @@ See `sql-product-alist' for a list of products and 
supported features."
                (symbolp v))
               (symbol-value v)
             v))
-      (error "`%s' is not a known product; use `sql-add-product' to add it 
first." product)
+      (error "`%s' is not a known product; use `sql-add-product' to add it 
first" product)
       nil)))
 
 (defun sql-product-font-lock (keywords-only imenu)
@@ -2952,7 +2952,7 @@ adds a fontification pattern to fontify identifiers 
ending in
   "Display a SQLi buffer based on `sql-display-sqli-buffer-function'.
 
 If BUF is hidden or `sql-display-sqli-buffer-function' is nil,
-then the buffer will not be displayed. Otherwise the BUF is
+then the buffer will not be displayed.  Otherwise the BUF is
 displayed."
   (unless (sql-buffer-hidden-p buf)
     (cond
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el
index f6a50bf1a8..b6a7a20d87 100644
--- a/lisp/progmodes/tcl.el
+++ b/lisp/progmodes/tcl.el
@@ -288,7 +288,7 @@ quoted for Tcl."
     ["Tcl help" tcl-help-on-word tcl-help-directory-list]))
 
 (defvar inferior-tcl-buffer nil
-  "The current inferior-tcl process buffer.
+  "The current `inferior-tcl' process buffer.
 
 MULTIPLE PROCESS SUPPORT
 ===========================================================================
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index 7c8ccea065..ef2c21da45 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -4,12 +4,12 @@
 
 ;; Author: Michael McNamara <mac@verilog.com>
 ;;    Wilson Snyder <wsnyder@wsnyder.org>
-;; X-URL: https://www.veripool.org
+;; URL: https://www.veripool.org
 ;; Created: 3 Jan 1996
 ;; Keywords: languages
 ;; The "Version" is the date followed by the decimal rendition of the Git
 ;;     commit hex.
-;; Version: 2021.04.12.188864585
+;; Version: 2021.09.16.045775504
 
 ;; Yoni Rabkin <yoni@rabkins.net> contacted the maintainer of this
 ;; file on 19/3/2008, and the maintainer agreed that when a bug is
@@ -124,7 +124,7 @@
 ;;
 
 ;; This variable will always hold the version number of the mode
-(defconst verilog-mode-version "2021-04-12-b41d849-vpo-GNU"
+(defconst verilog-mode-version "2021-09-16-2ba7a90-vpo-GNU"
   "Version of this Verilog mode.")
 (defconst verilog-mode-release-emacs t
   "If non-nil, this version of Verilog mode was released with Emacs itself.")
@@ -829,7 +829,7 @@ The name of the function or case will be set between the 
braces."
 (defcustom verilog-auto-ignore-concat nil
   "Non-nil means ignore signals in {...} concatenations for AUTOWIRE etc.
 This will exclude signals referenced as pin connections in {...}
-or (...) from AUTOWIRE, AUTOOUTPUT and friends."
+or (...) from AUTOWIRE, AUTOOUTPUT and friends.  See also AUTONOHOOKUP."
   :group 'verilog-mode-actions
   :type 'boolean)
 (put 'verilog-auto-ignore-concat 'safe-local-variable #'verilog-booleanp)
@@ -1529,8 +1529,8 @@ If set will become buffer local.")
   "Keymap used in Verilog mode.")
 
 ;; menus
-(easy-menu-define
-  verilog-menu verilog-mode-map "Menu for Verilog mode"
+(easy-menu-define verilog-menu verilog-mode-map
+  "Menu for Verilog mode."
   (verilog-easy-menu-filter
    `("Verilog"
      ("Choose Compilation Action"
@@ -2077,8 +2077,7 @@ find the errors."
       (if (boundp 'compilation-error-regexp-systems-alist)
          (if (and
               (not (equal compilation-error-regexp-systems-list 'all))
-               ;; eval required due to bug1700, XEmacs otherwise errors on 
compile
-              (not (eval "(member compilation-error-regexp-systems-list 
'verilog)")))
+              (not (member 'verilog compilation-error-regexp-systems-list)))
              (push 'verilog compilation-error-regexp-systems-list)))
       (if (boundp 'compilation-error-regexp-alist-alist)
          (if (not (assoc 'verilog compilation-error-regexp-alist-alist))
@@ -2505,7 +2504,7 @@ find the errors."
 (defconst verilog-no-indent-begin-re
   (eval-when-compile
     (verilog-regexp-words
-     '("always" "always_comb" "always_ff" "always_latch" "initial" "final"  ; 
procedural blocks
+     '("always" "always_comb" "always_ff" "always_latch" "analog" "initial" 
"final"  ; procedural blocks
        "if" "else"                                                          ; 
conditional statements
        "while" "for" "foreach" "repeat" "do" "forever" ))))                 ; 
loop statements
 
@@ -2651,6 +2650,7 @@ find the errors."
    "\\(\\<end\\>\\s-+\\<else\\>\\)\\|"          ; 3
    "\\(\\<always\\(?:_ff\\)?\\>\\(?:[ \t]*@\\)\\)\\|"    ; 4 (matches always 
or always_ff w/ @...)
    "\\(\\<always\\(?:_comb\\|_latch\\)?\\>\\)\\|"  ; 5 (matches always, 
always_comb, always_latch w/o @...)
+   "\\(\\<analog\\>\\)\\|"                      ; 6
    "\\(\\<fork\\>\\)\\|"                        ; 7
    "\\(\\<if\\>\\)\\|"
    verilog-property-re "\\|"
@@ -2853,7 +2853,7 @@ find the errors."
   (eval-when-compile (verilog-regexp-words '("Outputs" "Inouts" "Inputs" 
"Interfaces" "Interfaced"))))
 
 (defconst verilog-behavioral-block-beg-re
-  (eval-when-compile (verilog-regexp-words '("initial" "final" "always" 
"always_comb" "always_latch" "always_ff"
+  (eval-when-compile (verilog-regexp-words '("initial" "final" "always" 
"always_comb" "always_latch" "always_ff" "analog"
                                              "function" "task"))))
 (defconst verilog-coverpoint-re 
"\\w+\\s-*:\\s-*\\(coverpoint\\|cross\\|constraint\\)")
 (defconst verilog-in-constraint-re  ; keywords legal in constraint blocks 
starting a statement/block
@@ -2864,7 +2864,7 @@ find the errors."
     (verilog-regexp-words
      '(
        "{"
-       "always" "always_latch" "always_ff" "always_comb"
+       "always" "always_latch" "always_ff" "always_comb" "analog"
        "begin" "end"
        ;; "unique" "priority"
        "case" "casex" "casez" "randcase" "endcase"
@@ -2956,13 +2956,13 @@ find the errors."
       '( "connectmodule" "module" "macromodule" "primitive" "class" "program"
          "interface" "package" "config")
       '( "initial" "final" "always" "always_comb" "always_ff"
-         "always_latch" "endtask" "endfunction" )))))
+         "always_latch" "analog" "endtask" "endfunction" )))))
 
 (defconst verilog-defun-level-generate-only-re
   (eval-when-compile
     (verilog-regexp-words
      '( "initial" "final" "always" "always_comb" "always_ff"
-        "always_latch" "endtask" "endfunction" ))))
+        "always_latch" "analog" "endtask" "endfunction" ))))
 
 (defconst verilog-cpp-level-re
   (eval-when-compile
@@ -2989,7 +2989,7 @@ find the errors."
   (eval-when-compile
     (verilog-regexp-words
      '(
-       "always" "assign" "always_latch" "always_ff" "always_comb" 
"connectmodule" "constraint"
+       "always" "assign" "always_latch" "always_ff" "always_comb" "analog" 
"connectmodule" "constraint"
        "import" "initial" "final" "module" "macromodule" "repeat" "randcase" 
"while"
        "if" "for" "forever" "foreach" "else" "parameter" "do" "localparam" 
"assert"
        ))))
@@ -3066,7 +3066,7 @@ find the errors."
 (defconst verilog-keywords
   (append verilog-compiler-directives
           '(
-            "after" "alias" "always" "always_comb" "always_ff" "always_latch" 
"and"
+            "after" "alias" "always" "always_comb" "always_ff" "always_latch" 
"analog" "and"
             "assert" "assign" "assume" "automatic" "before" "begin" "bind"
             "bins" "binsof" "bit" "break" "buf" "bufif0" "bufif1" "byte"
             "case" "casex" "casez" "cell" "chandle" "class" "clocking" "cmos"
@@ -3283,7 +3283,7 @@ See also `verilog-font-lock-extra-types'.")
              "use" "wait" "while"
              ;; 1800-2005
              "alias" "always_comb" "always_ff" "always_latch" "assert"
-             "assume" "before" "bind" "bins" "binsof" "break" "class"
+             "assume" "analog" "before" "bind" "bins" "binsof" "break" "class"
              "clocking" "constraint" "context" "continue" "cover"
              "covergroup" "coverpoint" "cross" "dist" "do" "endclass"
              "endclocking" "endgroup" "endinterface" "endpackage"
@@ -3610,19 +3610,19 @@ inserted using a single call to `verilog-insert'."
   (search-forward ";" nil t))
 
 (defun verilog-single-declaration-end (limit)
-  "Returns pos where current (single) declaration statement ends.
+  "Return pos where current (single) declaration statement ends.
 Also, this function moves POINT forward to the start of a variable name
 (skipping the range-part and whitespace).
 Function expected to be called with POINT just after a declaration keyword.
-LIMIT sets the max POINT for searching and moving to. No such limit if LIMIT
+LIMIT sets the max POINT for searching and moving to.  No such limit if LIMIT
 is 0.
 
 Meaning of *single* declaration:
-   Eg. In a module's port-list -
+   E.g. In a module's port-list -
            module test(input clk, rst, x, output [1:0] y);
    Here 'input clk, rst, x' is 1 *single* declaration statement,
 and 'output [1:0] y' is the other single declaration.  In the 1st single
-declaration, POINT is moved to start of 'clk'. And in the 2nd declaration,
+declaration, POINT is moved to start of 'clk'.  And in the 2nd declaration,
 POINT is moved to 'y'."
 
 
@@ -5104,7 +5104,7 @@ primitive or interface named NAME."
                                               (throw 'skip 1)))))))))
 
                                (; always, always_comb, always_latch w/o @...
-                                (match-end 5)
+                                (or (match-end 5) (match-end 6))
                                 (goto-char (match-end 0))
                                 (setq there (point))
                                 (setq err nil)
@@ -6805,6 +6805,8 @@ Only look at a few lines to determine indent level."
   (verilog-do-indent (verilog-calculate-indent)))
 
 (defun verilog-do-indent (indent-str)
+  ;; `ind' is used in expressions stored in `verilog-indent-alist'.
+  (verilog--suppressed-warnings ((lexical ind)) (defvar ind))
   (let ((type (car indent-str))
        (ind (car (cdr indent-str))))
     (cond
@@ -7157,11 +7159,11 @@ Be verbose about progress unless optional QUIET set."
                        (forward-char -1)
                        (just-one-space)
                        (goto-char (marker-position m1))
-                       (just-one-space)
-                       (indent-to ind))
+                        (delete-horizontal-space)
+                        (indent-to ind 1))
                    (progn
-                     (just-one-space)
-                     (indent-to ind)))))
+                      (delete-horizontal-space)
+                      (indent-to ind 1)))))
               ((verilog-continued-line-1 (marker-position startpos))
                (goto-char e)
                (indent-line-to ind))
@@ -7286,6 +7288,8 @@ If QUIET is non-nil, do not print messages showing the 
progress of line-up."
 Line up the variable names based on previous declaration's indentation.
 BASEIND is the base indent to offset everything."
   (interactive)
+  ;; `ind' is used in expressions stored in `verilog-indent-alist'.
+  (verilog--suppressed-warnings ((lexical ind)) (defvar ind))
   (let ((pos (point-marker))
        (lim (save-excursion
               ;; (verilog-re-search-backward verilog-declaration-opener nil 
'move)
@@ -7324,12 +7328,10 @@ BASEIND is the base indent to offset everything."
                          (forward-char -1)
                          (just-one-space)
                          (goto-char (marker-position m1))
-                         (just-one-space)
-                         (indent-to ind))
-                     (if (/= (current-column) ind)
-                         (progn
-                           (just-one-space)
-                           (indent-to ind)))))
+                          (delete-horizontal-space)
+                          (indent-to ind 1))
+                      (delete-horizontal-space)
+                      (indent-to ind 1)))
                (if (looking-at verilog-declaration-re-2-no-macro)
                    (let ((p (match-end 0)))
                      (set-marker m1 p)
@@ -7338,12 +7340,10 @@ BASEIND is the base indent to offset everything."
                            (forward-char -1)
                            (just-one-space)
                            (goto-char (marker-position m1))
-                           (just-one-space)
-                           (indent-to ind))
-                       (if (/= (current-column) ind)
-                           (progn
-                             (just-one-space)
-                             (indent-to ind))))))))))
+                            (delete-horizontal-space)
+                            (indent-to ind 1))
+                        (delete-horizontal-space)
+                        (indent-to ind 1))))))))
     (goto-char pos)))
 
 (defun verilog-get-lineup-indent (b edpos)
@@ -7457,7 +7457,7 @@ will be completed at runtime and should not be added to 
this list.")
 (defvar verilog-defun-keywords
   (append
    '(
-     "always" "always_comb" "always_ff" "always_latch" "assign"
+     "always" "always_comb" "always_ff" "always_latch" "analog" "assign"
      "begin" "end" "connectmodule" "endconnectmodule" "generate" "endgenerate" 
"module" "endmodule"
      "specify" "endspecify" "function" "endfunction" "initial" "final"
      "task" "endtask" "primitive" "endprimitive"
@@ -8643,6 +8643,13 @@ Optional NUM-PARAM and MAX-PARAM check for a specific 
number of parameters."
 (defun verilog-read-decls ()
   "Compute signal declaration information for the current module at point.
 Return an array of [outputs inouts inputs wire reg assign const gparam intf]."
+  (verilog--suppressed-warnings
+      ((lexical sigs-intf sigs-var sigs-const sigs-assign sigs-var
+                sigs-gparam sigs-inout sigs-out sigs-in))
+    ;; The local variable below are accessed via (symbol-value expect-signal).
+    (defvar sigs-intf) (defvar sigs-var) (defvar sigs-const)
+    (defvar sigs-assign) (defvar sigs-var) (defvar sigs-gparam)
+    (defvar sigs-inout) (defvar sigs-out) (defvar sigs-in))
   (let ((end-mod-point (or (verilog-get-end-of-defun) (point-max)))
        (functask 0) (paren 0) (sig-paren 0) (v2kargs-ok t)
        in-modport in-clocking in-ign-to-semi ptype ign-prop
@@ -9106,9 +9113,7 @@ Inserts the list of signals found, using submodi to look 
up each port."
        ;; We intentionally ignore (non-escaped) signals with .s in them
        ;; this prevents AUTOWIRE etc from noticing hierarchical sigs.
        (when port
-          (cond ((and verilog-auto-ignore-concat
-                      (looking-at "[({]"))
-                 nil) ; {...} or (...) historically ignored with 
auto-ignore-concat
+          (cond ((looking-at "[^\n]*AUTONOHOOKUP"))
                 ((looking-at "\\([a-zA-Z_][a-zA-Z_0-9]*\\)\\s-*)")
                 (verilog-read-sub-decls-sig
                   submoddecls par-values comment port
@@ -9325,6 +9330,9 @@ Must call `verilog-read-auto-lisp-present' before this 
function."
 EXIT-KEYWD is expression to stop at, nil if top level.
 RVALUE is true if at right hand side of equal.
 TEMP-NEXT is true to ignore next token, fake from inside case statement."
+  (verilog--suppressed-warnings ((lexical sigs-temp sigs-in sigs-out-unk))
+    ;; The local variable below are accessed via (symbol-value got-list).
+    (defvar sigs-temp) (defvar sigs-in) (defvar sigs-out-unk))
   (let* ((semi-rvalue (equal "endcase" exit-keywd))  ; true if after a ; we 
are looking for rvalue
         keywd last-keywd sig-tolk sig-last-tolk gotend got-sig got-list 
end-else-check
         ignore-next)
@@ -9555,7 +9563,10 @@ Returns REGEXP and list of ( (signal_name 
connection_name)... )."
                     (cons (list
                            (match-string-no-properties 1)
                            (match-string-no-properties 2)
-                           templateno lineno)
+                            templateno lineno
+                            (save-excursion
+                              (goto-char (match-end 0))
+                              (looking-at "[^\n]*AUTONOHOOKUP")))
                           tpl-sig-list))
               (goto-char (match-end 0)))
               ;; Regexp form??
@@ -9571,7 +9582,10 @@ Returns REGEXP and list of ( (signal_name 
connection_name)... )."
                                                                    
(match-string 1))
                                    "$")
                            rep
-                           templateno lineno)
+                            templateno lineno
+                            (save-excursion
+                              (goto-char (match-end 0))
+                              (looking-at "[^\n]*AUTONOHOOKUP")))
                           tpl-wild-list)))
              ((looking-at "[ \t\f]+")
               (goto-char (match-end 0)))
@@ -9745,6 +9759,9 @@ warning message, you need to add to your init file:
       (while (re-search-forward
              "^\\s-*\\(parameter\\|localparam\\)\\(\\s-*\\[[^]]*\\]\\)?\\s-*" 
nil t)
        (let (enumname)
+          ;; Advance over parameter's type if present
+          (if (looking-at "\\([a-zA-Z0-9_]+\\s-+\\)[a-zA-Z0-9_]+")
+              (goto-char (match-end 1)))
          ;; The primary way of getting defines is verilog-read-decls
          ;; However, that isn't called yet for included files, so we'll add 
another scheme
          (if (looking-at "[^\n]*\\(auto\\|synopsys\\)\\s +enum\\s 
+\\([a-zA-Z0-9_]+\\)")
@@ -11040,7 +11057,7 @@ Intended for internal use inside a
                              'verilog-delete-auto-star-all)
   ;; Remove template comments ... anywhere in case was pasted after AUTOINST 
removed
   (goto-char (point-min))
-  (while (re-search-forward "\\s-*// \\(Templated\\|Implicit \\.\\*\\)\\([ 
\tLT0-9]*\\| LHS: .*\\)$" nil t)
+  (while (re-search-forward "\\s-*// 
\\(Templated\\(\\s-*AUTONOHOOKUP\\)?\\|Implicit \\.\\*\\)\\([ \tLT0-9]*\\| LHS: 
.*\\)$" nil t)
     (replace-match ""))
 
   ;; Final customize
@@ -11689,15 +11706,14 @@ If PAR-VALUES replace final strings with these 
parameter values."
              ;; verilog-insert requires the complete comment in one call - 
including the newline
              (cond ((equal verilog-auto-inst-template-numbers 'lhs)
                     (verilog-insert " // Templated"
-                                    " LHS: " (nth 0 tpl-ass)
-                                    "\n"))
+                                    " LHS: " (nth 0 tpl-ass)))
                    (verilog-auto-inst-template-numbers
                     (verilog-insert " // Templated"
                                     " T" (int-to-string (nth 2 tpl-ass))
-                                    " L" (int-to-string (nth 3 tpl-ass))
-                                    "\n"))
+                                    " L" (int-to-string (nth 3 tpl-ass))))
                    (t
-                    (verilog-insert " // Templated\n"))))
+                    (verilog-insert " // Templated")))
+             (verilog-insert (if (nth 4 tpl-ass) " AUTONOHOOKUP\n" "\n")))
             (for-star
              (indent-to (+ (if (< verilog-auto-inst-column 48) 24 16)
                            verilog-auto-inst-column))
@@ -12087,6 +12103,16 @@ Lisp Templates:
   After the evaluation is completed, @ substitution and [] substitution
   occur.
 
+
+Ignoring Hookup:
+
+  AUTOWIRE and related AUTOs will read the signals created by a template.
+  To specify that a signal should not be parsed to participate in this
+  hookup, add a AUTONOHOOKUP comment to the template.  For example:
+
+            .pci_req_l  (pci_req_not_to_wire),  //AUTONOHOOKUP
+
+
 For more information see the \\[verilog-faq] and forums at URL
 `https://www.veripool.org'."
   (save-excursion
@@ -13625,7 +13651,7 @@ signals to deasserted.
 the same input/output list as another module, but no internals.
 Specifically, it finds all outputs in the module, and if that
 input is not otherwise declared as a register or wire, nor comes
-from a AUTOINST submodule's output, creates a tieoff. AUTOTIEOFF
+from a AUTOINST submodule's output, creates a tieoff.  AUTOTIEOFF
 does not examine assignments to determine what is already driven.
 
 AUTORESET ties signals to deasserted, which is presumed to be zero.
@@ -14402,7 +14428,7 @@ See also `verilog-header' for an alternative format."
 ;; ------------------------------------------------------------------------
 
 (define-skeleton verilog-sk-ovm-class
-  "Insert a class definition"
+  "Insert a class definition."
   ()
   > "class " (setq name (skeleton-read "Name: ")) " extends " (skeleton-read 
"Extends: ") ";" \n
   > _ \n
@@ -14416,7 +14442,7 @@ See also `verilog-header' for an alternative format."
   > "endclass" (progn (electric-verilog-terminate-line) nil))
 
 (define-skeleton verilog-sk-uvm-object
-  "Insert a class definition"
+  "Insert a class definition."
   ()
   > "class " (setq name (skeleton-read "Name: ")) " extends " (skeleton-read 
"Extends: ") ";" \n
   > _ \n
@@ -14430,7 +14456,7 @@ See also `verilog-header' for an alternative format."
   > "endclass" (progn (electric-verilog-terminate-line) nil))
 
 (define-skeleton verilog-sk-uvm-component
-  "Insert a class definition"
+  "Insert a class definition."
   ()
   > "class " (setq name (skeleton-read "Name: ")) " extends " (skeleton-read 
"Extends: ") ";" \n
   > _ \n
@@ -14471,8 +14497,7 @@ See also `verilog-header' for an alternative format."
   > (- verilog-indent-level-behavioral) "endfunction" (progn 
(electric-verilog-terminate-line) nil))
 
 (define-skeleton verilog-sk-always
-  "Insert always block.  Uses the minibuffer to prompt
-for sensitivity list."
+  "Insert always block.  Prompt for sensitivity list."
   ()
   > "always @ ( /*AUTOSENSE*/ ) begin\n"
   > _ \n
@@ -14487,14 +14512,14 @@ for sensitivity list."
   > (- verilog-indent-level-behavioral) "end" \n > )
 
 (define-skeleton verilog-sk-specify
-  "Insert specify block.  "
+  "Insert specify block."
   ()
   > "specify\n"
   > _ \n
   > (- verilog-indent-level-behavioral) "endspecify" \n > )
 
 (define-skeleton verilog-sk-generate
-  "Insert generate block.  "
+  "Insert generate block."
   ()
   > "generate\n"
   > _ \n
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index 3fe67fabf1..fef7dff65e 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -5985,13 +5985,11 @@ corresponding \"begin\" keyword, else return nil."
 
 (defconst vhdl-begin-fwd-re
   
"\\b\\(is\\|begin\\|block\\|component\\|generate\\|then\\|else\\|loop\\|process\\|procedural\\(\\s-+body\\)?\\|units\\|use\\|record\\|protected\\(\\s-+body\\)?\\|for\\)\\b\\([^_]\\|\\'\\)"
-  "A regular expression for searching forward that matches all known
-\"begin\" keywords.")
+  "Regexp for searching forward that matches all known \"begin\" keywords.")
 
 (defconst vhdl-begin-bwd-re
   
"\\b\\(is\\|begin\\|block\\|component\\|generate\\|then\\|else\\|loop\\|process\\|procedural\\(\\s-+body\\)?\\|units\\|use\\|record\\|protected\\(\\s-+body\\)?\\|for\\)\\b[^_]"
-  "A regular expression for searching backward that matches all known
-\"begin\" keywords.")
+  "Regexp for searching backward that matches all known \"begin\" keywords.")
 
 (defun vhdl-begin-p (&optional lim)
   "Return t if we are looking at a real \"begin\" keyword.
@@ -6848,7 +6846,7 @@ keyword at PLACEHOLDER, then return the library unit 
type."
     ))
 
 (defun vhdl-get-block-state (&optional lim)
-  "Finds and records all the closest opens.
+  "Find and records all the closest opens.
 LIM is the furthest back we need to search (it should be the
 previous libunit keyword)."
   (let ((here (point))
@@ -7722,13 +7720,13 @@ indentation is done before aligning."
           (setq copy (cdr copy))))))))
 
 (defun vhdl-align-region-2 (begin end match &optional substr spacing)
-  "Align a range of lines from BEGIN to END.  The regular expression
-MATCH must match exactly one field: the whitespace to be
-contracted/expanded.  The alignment column will equal the
-rightmost column of the widest whitespace block.  SPACING is
-the amount of extra spaces to add to the calculated maximum required.
-SPACING defaults to 1 so that at least one space is inserted after
-the token in MATCH."
+  "Align a range of lines from BEGIN to END.
+The regular expression MATCH must match exactly one field: the
+whitespace to be contracted/expanded.  The alignment column will
+equal the rightmost column of the widest whitespace block.
+SPACING is the amount of extra spaces to add to the calculated
+maximum required.  SPACING defaults to 1 so that at least one
+space is inserted after the token in MATCH."
   (setq spacing (or spacing 1))
   (setq substr (or substr 1))
   (save-excursion
@@ -7994,8 +7992,9 @@ the token in MATCH."
         (beginning-of-line 2))))))
 
 (defun vhdl-align-inline-comment-region (beg end &optional spacing no-message)
-  "Align inline comments within a region.  Groups of code lines separated by
-empty lines are aligned individually, if `vhdl-align-groups' is non-nil."
+  "Align inline comments within a region.
+Groups of code lines separated by empty lines are aligned
+individually, if `vhdl-align-groups' is non-nil."
   (interactive "r\nP")
   (save-excursion
     (let (orig pos)
@@ -8044,8 +8043,9 @@ empty lines are aligned individually, if 
`vhdl-align-groups' is non-nil."
       (message "Aligning inline comments...done"))))
 
 (defun vhdl-align-inline-comment-buffer ()
-  "Align inline comments within buffer.  Groups of code lines separated by
-empty lines are aligned individually, if `vhdl-align-groups' is non-nil."
+  "Align inline comments within buffer.
+Groups of code lines separated by empty lines are aligned
+individually, if `vhdl-align-groups' is non-nil."
   (interactive)
   (vhdl-align-inline-comment-region (point-min) (point-max)))
 
@@ -8053,9 +8053,10 @@ empty lines are aligned individually, if 
`vhdl-align-groups' is non-nil."
 ;; Fixup whitespace
 
 (defun vhdl-fixup-whitespace-region (beg end &optional no-message)
-  "Fixup whitespace in region.  Surround operator symbols by one space,
-eliminate multiple spaces (except at beginning of line), eliminate spaces at
-end of line, do nothing in comments and strings."
+  "Fixup whitespace in region.
+Surround operator symbols by one space, eliminate multiple
+spaces (except at beginning of line), eliminate spaces at end of
+line, do nothing in comments and strings."
   (interactive "r")
   (unless no-message (message "Fixing up whitespace..."))
   (save-excursion
@@ -8107,9 +8108,10 @@ end of line, do nothing in comments and strings."
   (unless no-message (message "Fixing up whitespace...done")))
 
 (defun vhdl-fixup-whitespace-buffer ()
-  "Fixup whitespace in buffer.  Surround operator symbols by one space,
-eliminate multiple spaces (except at beginning of line), eliminate spaces at
-end of line, do nothing in comments."
+  "Fixup whitespace in buffer.
+Surround operator symbols by one space, eliminate multiple
+spaces (except at beginning of line), eliminate spaces at end of
+line, do nothing in comments."
   (interactive)
   (vhdl-fixup-whitespace-region (point-min) (point-max)))
 
@@ -10456,8 +10458,8 @@ otherwise."
     reset))
 
 (defun vhdl-template-standard-package (library package)
-  "Insert specification of a standard package.  Include a library
-specification, if not already there."
+  "Insert specification of a standard package.
+Include a library specification, if not already there."
   (let ((margin (current-indentation)))
     (unless (equal library "std")
       (unless (or (save-excursion
@@ -13175,7 +13177,7 @@ File statistics: \"%s\"\n\
   "Regexp to match start of construct to hide.")
 
 (defun vhdl-hs-forward-sexp-func (count)
-  "Find end of construct to hide (for hideshow).  Only searches forward."
+  "Find end of construct to hide (for hideshow).  Only search forward."
   (let ((pos (point)))
     (vhdl-prepare-search-2
      (beginning-of-line)
@@ -13299,7 +13301,8 @@ File statistics: \"%s\"\n\
          (goto-char end))))))
 
 (defun vhdl-font-lock-match-item (limit)
-  "Match, and move over, any declaration item after point.  Adapted from
+  "Match, and move over, any declaration item after point.
+Adapted from
 `font-lock-match-c-style-declaration-item-and-skip-to-next'."
   (condition-case nil
       (save-restriction
@@ -13750,8 +13753,7 @@ This does background highlighting of translate-off 
regions.")
 ;; Variables
 
 (defvar vhdl-entity-alist nil
-  "Cache with entities and corresponding architectures for each
-project/directory.")
+  "Cache with entities and corresponding architectures for each 
project/directory.")
 ;; structure: (parenthesized expression means list of such entries)
 ;; (cache-key
 ;;   (ent-key ent-name ent-file ent-line
@@ -15019,8 +15021,7 @@ otherwise use cached data."
 (declare-function speedbar-goto-this-file "speedbar" (file))
 
 (defun vhdl-speedbar-expand-dirs (_directory)
-  "Expand subdirectories in DIRECTORY according to
- `speedbar-shown-directories'."
+  "Expand subdirectories in DIRECTORY according to 
`speedbar-shown-directories'."
   ;; (nicked from `speedbar-default-directory-list')
   (let ((sf (cdr (reverse speedbar-shown-directories)))
        (vhdl-speedbar-update-current-unit nil))
@@ -15836,7 +15837,7 @@ NO-POSITION non-nil means do not re-position cursor."
 (declare-function speedbar-line-text "speedbar" (&optional p))
 
 (defun vhdl-speedbar-line-text ()
-  "Calls `speedbar-line-text' and removes text properties."
+  "Call `speedbar-line-text' and remove text properties."
   (let ((string (speedbar-line-text)))
     (set-text-properties 0 (length string) nil string)
     string))
@@ -17074,8 +17075,7 @@ do not print any file names."
     (or project-options compiler-options)))
 
 (defun vhdl-compile ()
-  "Compile current buffer using the VHDL compiler specified in
-`vhdl-compiler'."
+  "Compile current buffer using the VHDL compiler specified in 
`vhdl-compiler'."
   (interactive)
   (vhdl-compile-init)
   (let* ((project (vhdl-aget vhdl-project-alist vhdl-project))
@@ -17852,8 +17852,7 @@ User Options
 `vhdl-indent-comment-like-next-code-line': (new)
   Specify whether comment lines are indented like following code line.
 `vhdl-array-index-record-field-in-sensitivity-list': (new)
-  Specify whether to include array indices / record fields in sensitivity list.
-")
+  Specify whether to include array indices / record fields in sensitivity 
list.")
 
 
 (defconst vhdl-doc-keywords nil
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 9a0de5f449..69cabd0b5a 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -71,7 +71,7 @@
 (require 'ring)
 (require 'project)
 
-(defgroup xref nil "Cross-referencing commands"
+(defgroup xref nil "Cross-referencing commands."
   :version "25.1"
   :group 'tools)
 
@@ -86,7 +86,10 @@
 
 (cl-defgeneric xref-location-group (location)
   "Return a string used to group a set of locations.
-This is typically the filename.")
+This is typically a file name, but can also be a package name, or
+some other label.
+
+When it is a file name, it should be the \"expanded\" version.")
 
 (cl-defgeneric xref-location-line (_location)
   "Return the line number corresponding to the location."
@@ -119,7 +122,7 @@ in its full absolute form."
 ;; FIXME: might be useful to have an optional "hint" i.e. a string to
 ;; search for in case the line number is slightly out of date.
 (defclass xref-file-location (xref-location)
-  ((file :type string :initarg :file)
+  ((file :type string :initarg :file :reader xref-location-group)
    (line :type fixnum :initarg :line :reader xref-location-line)
    (column :type fixnum :initarg :column :reader xref-file-location-column))
   :documentation "A file location is a file/line/column triple.
@@ -148,32 +151,6 @@ Line numbers start from 1 and columns from 0.")
             (forward-char column))
           (point-marker))))))
 
-(defvar xref--project-root-memo nil
-  "Cons mapping `default-directory' value to the search root.")
-
-(cl-defmethod xref-location-group ((l xref-file-location))
-  (cl-ecase xref-file-name-display
-    (abs
-     (oref l file))
-    (nondirectory
-     (file-name-nondirectory (oref l file)))
-    (project-relative
-     (unless (and xref--project-root-memo
-                  (equal (car xref--project-root-memo)
-                         default-directory))
-       (setq xref--project-root-memo
-             (cons default-directory
-                   (let ((root
-                          (let ((pr (project-current)))
-                            (and pr (xref--project-root pr)))))
-                     (and root (expand-file-name root))))))
-     (let ((file (oref l file))
-           (search-root (cdr xref--project-root-memo)))
-       (if (and search-root
-                (string-prefix-p search-root file))
-           (substring file (length search-root))
-         file)))))
-
 (defclass xref-buffer-location (xref-location)
   ((buffer :type buffer :initarg :buffer)
    (position :type fixnum :initarg :position)))
@@ -270,7 +247,7 @@ generic functions.")
 
 The result must be a list of xref objects.  If IDENTIFIER
 contains sufficient information to determine a unique definition,
-return only that definition. If there are multiple possible
+return only that definition.  If there are multiple possible
 definitions, return all of them.  If no definitions can be found,
 return nil.
 
@@ -514,7 +491,7 @@ value."
   (goto-char pos))
 
 (defun xref--goto-location (location)
-  "Set buffer and point according to xref-location LOCATION."
+  "Set buffer and point according to `xref-location' LOCATION."
   (let ((marker (xref-location-marker location)))
     (set-buffer (marker-buffer marker))
     (xref--goto-char marker)))
@@ -522,9 +499,9 @@ value."
 (defun xref-pop-to-location (item &optional action)
   "Go to the location of ITEM and display the buffer.
 ACTION controls how the buffer is displayed:
-  nil      -- switch-to-buffer
-  `window' -- pop-to-buffer (other window)
-  `frame'  -- pop-to-buffer (other frame)
+  nil      -- `switch-to-buffer'
+  `window' -- `pop-to-buffer' (other window)
+  `frame'  -- `pop-to-buffer' (other frame)
 If SELECT is non-nil, select the target window."
   (let* ((marker (save-excursion
                    (xref-location-marker (xref-item-location item))))
@@ -985,7 +962,7 @@ The window showing the xref buffer will be selected."
         (put-text-property (+ pos xref-truncation-width) eol 'invisible 
'ellipsis))))))
 
 (defun xref--insert-xrefs (xref-alist)
-  "Insert XREF-ALIST in the current-buffer.
+  "Insert XREF-ALIST in the current buffer.
 XREF-ALIST is of the form ((GROUP . (XREF ...)) ...), where
 GROUP is a string for decoration purposes and XREF is an
 `xref-item' object."
@@ -1037,13 +1014,50 @@ GROUP is a string for decoration purposes and XREF is an
       (xref--apply-truncation)))
   (run-hooks 'xref-after-update-hook))
 
+(defun xref--group-name-for-display (group project-root)
+  "Return GROUP formatted in the prefered style.
+
+The style is determined by the value of `xref-file-name-display'.
+If GROUP looks like a file name, its value is formatted according
+to that style.  Otherwise it it returned unchanged."
+  ;; XXX: The way we verify that it's indeed a file name and not some
+  ;; other kind of string, e.g. Java package name or TITLE from
+  ;; `tags-apropos-additional-actions', is pretty lax.  But we don't
+  ;; want to use `file-exists-p' for performance reasons.  If this
+  ;; ever turns out to be a problem, some other alternatives are to
+  ;; either have every location class which uses file names format the
+  ;; values themselves (e.g. by piping through some public function),
+  ;; or adding a new accessor to locations, like GROUP-TYPE.
+  (cl-ecase xref-file-name-display
+    (abs group)
+    (nondirectory
+     (if (string-match-p "\\`~?/" group)
+         (file-name-nondirectory group)
+       group))
+    (project-relative
+     (if (and project-root
+              (string-prefix-p project-root group))
+         (substring group (length project-root))
+       group))))
+
 (defun xref--analyze (xrefs)
-  "Find common filenames in XREFS.
-Return an alist of the form ((FILENAME . (XREF ...)) ...)."
-  (xref--alistify xrefs
-                  (lambda (x)
-                    (xref-location-group (xref-item-location x)))
-                  #'equal))
+  "Find common groups in XREFS and format group names.
+Return an alist of the form ((GROUP . (XREF ...)) ...)."
+  (let* ((alist
+          (xref--alistify xrefs
+                          (lambda (x)
+                            (xref-location-group (xref-item-location x)))
+                          #'equal))
+         (project (and
+                   (eq xref-file-name-display 'project-relative)
+                   (project-current)))
+         (project-root (and project
+                            (expand-file-name (project-root project)))))
+    (mapcar
+     (lambda (pair)
+       (cons (xref--group-name-for-display (car pair) project-root)
+             (cdr pair)))
+     alist)))
 
 (defun xref--show-xref-buffer (fetcher alist)
   (cl-assert (functionp fetcher))
@@ -1611,13 +1625,8 @@ IGNORES is a list of glob patterns for files to ignore."
      "xargs -0 grep <C> -snHE -e <R>")
     (ripgrep
      .
-     ;; Note: by default, ripgrep's output order is non-deterministic
-     ;; (https://github.com/BurntSushi/ripgrep/issues/152)
-     ;; because it does the search in parallel.  You can use the template
-     ;; without the '| sort ...' part if GNU sort is not available on
-     ;; your system and/or stable ordering is not important to you.
-     ;; Note#2: '!*/' is there to filter out dirs (e.g. submodules).
-     "xargs -0 rg <C> -nH --no-messages -g '!*/' -e <R> | sort -t: -k1,1 
-k2n,2"
+     ;; '!*/' is there to filter out dirs (e.g. submodules).
+     "xargs -0 rg <C> -nH --no-messages -g '!*/' -e <R>"
      ))
   "Associative list mapping program identifiers to command templates.
 
@@ -1709,7 +1718,16 @@ FILES must be a list of absolute file names."
                     (match-string file-group)
                     (buffer-substring-no-properties (point) 
(line-end-position)))
               hits)))
-    (xref--convert-hits (nreverse hits) regexp)))
+    ;; By default, ripgrep's output order is non-deterministic
+    ;; (https://github.com/BurntSushi/ripgrep/issues/152)
+    ;; because it does the search in parallel.
+    ;; Grep's output also comes out in seemingly arbitrary order,
+    ;; though stable one. Let's sort both for better UI.
+    (setq hits
+          (sort (nreverse hits)
+                (lambda (h1 h2)
+                  (string< (cadr h1) (cadr h2)))))
+    (xref--convert-hits hits regexp)))
 
 (defun xref--process-file-region ( start end program
                                    &optional buffer display
diff --git a/lisp/ps-def.el b/lisp/ps-def.el
index b9c3ab57a2..4f8498d9ef 100644
--- a/lisp/ps-def.el
+++ b/lisp/ps-def.el
@@ -5,7 +5,7 @@
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;;     Kenichi Handa <handa@gnu.org> (multi-byte characters)
 ;; Keywords: wp, print, PostScript
-;; X-URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
+;; URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
 ;; Package: ps-print
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index 1b8654ead2..38671b58e2 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -9,7 +9,7 @@
 ;; Maintainer: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, print, PostScript
 ;; Version: 7.3.5
-;; X-URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
+;; URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
 
 (eval-when-compile (require 'cl-lib))
 
@@ -450,7 +450,7 @@ Please send all bug fixes and enhancements to
 ;;     (setq ps-left-header (list 'moe-func 'larry-var "(Curly)"))
 ;;
 ;; Note that Curly has the PostScript string delimiters inside his quotes --
-;; those aren't misplaced lisp delimiters!
+;; those aren't misplaced Lisp delimiters!
 ;;
 ;; Without them, PostScript would attempt to call the undefined function Curly,
 ;; which would result in a PostScript error.
@@ -676,7 +676,7 @@ Please send all bug fixes and enhancements to
 ;; Valid values for `ps-print-control-characters' are:
 ;;
 ;;  8-bit           This is the value to use when you want an ASCII encoding of
-;;                  any control or non-ASCII character. Control characters are
+;;                  any control or non-ASCII character.  Control characters are
 ;;                  encoded as "^D", and non-ASCII characters have an
 ;;                  octal encoding.
 ;;
@@ -689,7 +689,7 @@ Please send all bug fixes and enhancements to
 ;;                  European 8-bits accented characters are printed according
 ;;                  the current font.
 ;;
-;;  nil             No ASCII encoding. Any character is printed according the
+;;  nil             No ASCII encoding.  Any character is printed according the
 ;;                  current font.
 ;;
 ;; Any other value is treated as nil.
@@ -968,7 +968,7 @@ Please send all bug fixes and enhancements to
 ;;         ps-font-info-database))
 ;; - Now you can use this font family with any size:
 ;;     (setq ps-font-family 'Helvetica)
-;; - if you want to use this family in another emacs session, you must put into
+;; - if you want to use this family in another Emacs session, you must put into
 ;;   your `~/.emacs':
 ;;     (require 'ps-print)
 ;;     (setq ps-font-info-database (append ...)))
@@ -1101,7 +1101,7 @@ Please send all bug fixes and enhancements to
 ;; -----------------------
 ;;
 ;; As ps-print uses PostScript to print buffers, it is possible to have other
-;; attributes associated with faces. So the new attributes used by ps-print
+;; attributes associated with faces.  So the new attributes used by ps-print
 ;; are:
 ;;
 ;;   strikeout - like underline, but the line is in middle of text.
@@ -1423,7 +1423,7 @@ Please send all bug fixes and enhancements to
 ;;  * Check `ps-paper-type': Sudhakar Frederick <sfrederi@asc.corp.mot.com>
 ;;
 ;; Thanks to Jacques Duthen <duthen@cegelec-red.fr> (Jack) for version 3.4 I
-;; started from. [vinicius]
+;; started from.  [vinicius]
 ;;
 ;; Thanks to Jim Thompson <?@?> for the 2.8 version I started from.  [jack]
 ;;
diff --git a/lisp/ps-samp.el b/lisp/ps-samp.el
index 22a29b8b4b..2f7de40da6 100644
--- a/lisp/ps-samp.el
+++ b/lisp/ps-samp.el
@@ -8,7 +8,7 @@
 ;;     Kenichi Handa <handa@gnu.org> (multi-byte characters)
 ;; Maintainer: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, print, PostScript
-;; X-URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
+;; URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
 ;; Package: ps-print
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/register.el b/lisp/register.el
index 11d98482cb..e48a09f157 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -102,7 +102,7 @@ If nil, do not show register previews, unless `help-char' 
(or a member of
   (alist-get register register-alist))
 
 (defun set-register (register value)
-  "Set contents of Emacs register named REGISTER to VALUE.  Returns VALUE.
+  "Set contents of Emacs register named REGISTER to VALUE.  Return VALUE.
 See the documentation of the variable `register-alist' for possible VALUEs."
   (setf (alist-get register register-alist) value))
 
diff --git a/lisp/registry.el b/lisp/registry.el
index 258f7fc904..c10ae91d16 100644
--- a/lisp/registry.el
+++ b/lisp/registry.el
@@ -60,7 +60,7 @@
 ;; The user decides which fields are "precious", F2 for example.  When
 ;; the registry is pruned, any entries without the F2 field will be
 ;; removed until the size is :max-size * :prune-factor _less_ than the
-;; maximum database size. No entries with the F2 field will be removed
+;; maximum database size.  No entries with the F2 field will be removed
 ;; at PRUNE TIME, which means it may not be possible to prune back all
 ;; the way to the target size.
 
@@ -326,7 +326,7 @@ Errors out if the key exists already."
 
 Attempts to prune the number of entries down to \(*
 :max-size :prune-factor) less than the max-size limit, so
-pruning doesn't need to happen on every save. Removes only
+pruning doesn't need to happen on every save.  Removes only
 entries without the :precious keys, so it may not be possible to
 reach the target limit.
 
diff --git a/lisp/repeat.el b/lisp/repeat.el
index 6c3ffec18f..0b761fff1e 100644
--- a/lisp/repeat.el
+++ b/lisp/repeat.el
@@ -386,7 +386,8 @@ the map can't be set on the command symbol property 
`repeat-map'.")
 (define-minor-mode repeat-mode
   "Toggle Repeat mode.
 When Repeat mode is enabled, and the command symbol has the property named
-`repeat-map', this map is activated temporarily for the next command."
+`repeat-map', this map is activated temporarily for the next command.
+See `describe-repeat-maps' for a list of all repeatable command."
   :global t :group 'convenience
   (if (not repeat-mode)
       (remove-hook 'post-command-hook 'repeat-post-hook)
@@ -470,13 +471,18 @@ When Repeat mode is enabled, and the command symbol has 
the property named
 (defun repeat-echo-message (keymap)
   "Display available repeating keys in the echo area."
   (if keymap
-      (let ((mess (repeat-echo-message-string keymap)))
+      (let ((message (repeat-echo-message-string keymap)))
         (if (current-message)
-            (message "%s [%s]" (current-message) mess)
-          (message mess)))
-    (and (current-message)
-         (string-search "Repeat with " (current-message))
-         (message nil))))
+            (message "%s [%s]" (current-message) message)
+          (message "%s" message)))
+    (let ((message (current-message)))
+      (when message
+        (cond
+         ((string-prefix-p "Repeat with " message)
+          (message nil))
+         ((string-search " [Repeat with " message)
+          (message "%s" (replace-regexp-in-string
+                         " \\[Repeat with .*\\'" "" message))))))))
 
 (defvar repeat-echo-mode-line-string
   (propertize "[Repeating...] " 'face 'mode-line-emphasis)
@@ -491,7 +497,8 @@ When Repeat mode is enabled, and the command symbol has the 
property named
     (force-mode-line-update t)))
 
 (defun describe-repeat-maps ()
-  "Describe mappings of commands repeatable by symbol property `repeat-map'."
+  "Describe mappings of commands repeatable by symbol property `repeat-map'.
+Used in `repeat-mode'."
   (interactive)
   (help-setup-xref (list #'describe-repeat-maps)
                    (called-interactively-p 'interactive))
diff --git a/lisp/replace.el b/lisp/replace.el
index 69bdfe1331..e4155d4c27 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -83,7 +83,7 @@ from Isearch by using a key sequence like `C-s C-s M-%'." 
"24.3")
 (defcustom query-replace-from-to-separator " → "
   "String that separates FROM and TO in the history of replacement pairs.
 When nil, the pair will not be added to the history (same behavior
-as in emacs 24.5)."
+as in Emacs 24.5)."
   :group 'matching
   :type '(choice
           (const :tag "Disabled" nil)
@@ -796,7 +796,7 @@ of `history-length', which see.")
   "Overlays used to temporarily highlight occur matches.")
 
 (defvar occur-collect-regexp-history '("\\1")
-  "History of regexp for occur's collect operation")
+  "History of regexp for occur's collect operation.")
 
 (defcustom read-regexp-defaults-function nil
   "Function that provides default regexp(s) for `read-regexp'.
@@ -1760,7 +1760,7 @@ If REGEXP contains upper case characters (excluding those 
preceded by `\\')
 and `search-upper-case' is non-nil, the matching is case-sensitive.
 
 When NLINES is a string or when the function is called
-interactively with prefix argument without a number (`C-u' alone
+interactively with prefix argument without a number (\\[universal-argument] 
alone
 as prefix) the matching strings are collected into the `*Occur*'
 buffer by using NLINES as a replacement regexp.  NLINES may
 contain \\& and \\N which convention follows `replace-match'.
@@ -2367,6 +2367,36 @@ See also `multi-occur'."
      ;; And the second element is the list of context after-lines.
      (if (> nlines 0) after-lines))))
 
+(defun occur-word-at-mouse (event)
+  "Display an occur buffer for the word at EVENT."
+  (interactive "e")
+  (let ((word (thing-at-mouse event 'word t)))
+    (occur (concat "\\<" (regexp-quote word) "\\>"))))
+
+(defun occur-symbol-at-mouse (event)
+  "Display an occur buffer for the symbol at EVENT."
+  (interactive "e")
+  (let ((symbol (thing-at-mouse event 'symbol t)))
+    (occur (concat "\\_<" (regexp-quote symbol) "\\_>"))))
+
+(defun occur-context-menu (menu click)
+  "Populate MENU with occur commands at CLICK.
+To be added to `context-menu-functions'."
+  (let ((word (thing-at-mouse click 'word))
+        (sym (thing-at-mouse click 'symbol)))
+    (when (or word sym)
+      (define-key-after menu [occur-separator] menu-bar-separator
+        'middle-separator)
+      (when sym
+        (define-key-after menu [occur-symbol-at-mouse]
+          '(menu-item "Occur Symbol" occur-symbol-at-mouse)
+          'occur-separator))
+      (when word
+        (define-key-after menu [occur-word-at-mouse]
+          '(menu-item "Occur Word" occur-word-at-mouse)
+          'occur-separator))))
+  menu)
+
 
 ;; It would be nice to use \\[...], but there is no reasonable way
 ;; to make that display both SPC and Y.
diff --git a/lisp/rfn-eshadow.el b/lisp/rfn-eshadow.el
index 378358feac..3c1958686f 100644
--- a/lisp/rfn-eshadow.el
+++ b/lisp/rfn-eshadow.el
@@ -122,7 +122,7 @@ system, `file-name-shadow-properties' is used instead."
   "Minibuffer setup functions from other packages.")
 
 (defvar rfn-eshadow-update-overlay-hook nil
-  "Customer overlay functions from other packages")
+  "Customer overlay functions from other packages.")
 
 
 ;;; Internal variables
diff --git a/lisp/rtree.el b/lisp/rtree.el
index 166c780818..0eaaa58e6e 100644
--- a/lisp/rtree.el
+++ b/lisp/rtree.el
@@ -171,7 +171,7 @@
          (setq tree nil))))))))
 
 (defun rtree-delq (tree number)
-  "Remove NUMBER from TREE destructively.  Returns the new tree."
+  "Remove NUMBER from TREE destructively.  Return the new tree."
   (let ((result tree)
        prev)
     (while tree
diff --git a/lisp/saveplace.el b/lisp/saveplace.el
index 8225588b9d..4191a3fa62 100644
--- a/lisp/saveplace.el
+++ b/lisp/saveplace.el
@@ -55,7 +55,7 @@ This alist is saved between Emacs sessions.")
   :type 'file)
 
 (defcustom save-place-version-control nil
-  "Controls whether to make numbered backups of master save-place file.
+  "Controls whether to make numbered backups of master `save-place' file.
 It can have four values: t, nil, `never', and `nospecial'.  The first
 three have the same meaning that they do for the variable
 `version-control', and the final value `nospecial' means just use the
diff --git a/lisp/server.el b/lisp/server.el
index ac5db197f3..5dd30db195 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -881,7 +881,7 @@ This handles splitting the command if it would be bigger 
than
                                                  &optional parameters)
   (let* ((display (or display
                       (frame-parameter nil 'display)
-                      (error "Please specify display.")))
+                      (error "Please specify display")))
          (w (or (cdr (assq 'window-system parameters))
                 (window-system-for-display display))))
 
diff --git a/lisp/ses.el b/lisp/ses.el
index cc8c35d699..9250f7ede0 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -454,8 +454,8 @@ functions refer to its value."
   `(ses-cell--references ,(if col `(ses-get-cell ,row ,col) row)))
 
 (defmacro ses-sym-rowcol (sym)
-  "From a cell-symbol SYM, gets the cons (row . col).  A1 => (0 . 0).  Result
-is nil if SYM is not a symbol that names a cell."
+  "From a cell-symbol SYM, gets the cons (row . col).  A1 => (0 . 0).
+Result is nil if SYM is not a symbol that names a cell."
   (declare (debug t))
   `(let ((rc (and (symbolp ,sym) (get ,sym 'ses-cell))))
      (if (eq rc :ses-named)
@@ -623,7 +623,7 @@ This is a macro to prevent propagate-on-load viruses."
   t)
 
 (defmacro ses-column-printers (printers)
-  "Load the vector of column printers from the spreadsheet file and checks
+  "Load the vector of column printers from the spreadsheet file and check
 them for safety.  This is a macro to prevent propagate-on-load viruses."
   (or (and (vectorp printers) (= (length printers) ses--numcols))
       (error "Bad column-printers vector"))
@@ -634,14 +634,14 @@ them for safety.  This is a macro to prevent 
propagate-on-load viruses."
   t)
 
 (defmacro ses-default-printer (def)
-  "Load the global default printer from the spreadsheet file and checks it
+  "Load the global default printer from the spreadsheet file and check it
 for safety.  This is a macro to prevent propagate-on-load viruses."
   (setq ses--default-printer (ses-safe-printer def))
   (ses-printer-record def)
   t)
 
 (defmacro ses-header-row (row)
-  "Load the header row from the spreadsheet file and checks it
+  "Load the header row from the spreadsheet file and check it
 for safety.  This is a macro to prevent propagate-on-load viruses."
   (or (and (wholenump row) (or (zerop ses--numrows) (< row ses--numrows)))
       (error "Bad header-row"))
@@ -819,8 +819,8 @@ Return nil in case of failure."
        buffer-undo-list))
 
 (defun ses-reset-header-string ()
-  "Flag the header string for update.  Upon undo, the header string will be
-updated again."
+  "Flag the header string for update.
+Upon undo, the header string will be updated again."
   (push '(apply ses-reset-header-string) buffer-undo-list)
   (setq ses--header-hscroll -1))
 
@@ -1898,7 +1898,7 @@ Does not execute cell formulas or print functions."
          (or (and (= (following-char) ?\n)
                   (eq (car-safe x) 'ses-local-printer)
                   (apply #'ses--local-printer (cdr x)))
-             (error "local printer-def error"))
+              (error "Local printer-def error"))
          (setq ses--numlocprn (1+ ses--numlocprn))))))
   ;; Load cell definitions.
   (dotimes (row ses--numrows)
@@ -2594,8 +2594,7 @@ With prefix, deletes several cells."
       (forward-char 1))))
 
 (defun ses-clear-cell-backward (count)
-  "Move to previous cell and then delete it.  With prefix, delete several
-cells."
+  "Move to previous cell and then delete it.  With prefix, delete several 
cells."
   (interactive "*p")
   (if (< count 0)
       (1value (ses-clear-cell-forward (- count)))
@@ -3054,8 +3053,9 @@ hard to override how mouse-1 works."
 (advice-add 'copy-region-as-kill :around #'ses--advice-copy-region-as-kill)
 
 (defun ses-copy-region (beg end)
-  "Treat the region as rectangular.  Convert the intangible attributes to
-SES attributes recording the contents of the cell as of the time of copying."
+  "Treat the region as rectangular.
+Convert the intangible attributes to SES attributes recording the
+contents of the cell as of the time of copying."
   (when (= end ses--data-marker)
     ;;Avoid overflow situation
     (setq end (1- ses--data-marker)))
@@ -3070,7 +3070,7 @@ SES attributes recording the contents of the cell as of 
the time of copying."
     x))
 
 (defun ses-copy-region-helper (line)
-  "Converts one line (of a rectangle being extracted from a spreadsheet) to
+  "Convert one line (of a rectangle being extracted from a spreadsheet) to
 external form by attaching to each print cell a `ses' attribute that records
 the corresponding data cell."
   (or (> (length line) 1)
@@ -3124,13 +3124,13 @@ Otherwise the text is inserted as the formula for the 
current cell.
 
 When inserting cells, the formulas are usually relocated to keep the same
 relative references to neighboring cells.  This is best if the formulas
-generally refer to other cells within the yanked text.  You can use the C-u
+generally refer to other cells within the yanked text.  You can use the 
\\[universal-argument]
 prefix to specify insertion without relocation, which is best when the
 formulas refer to cells outside the yanked text.
 
 When inserting formulas, the text is treated as a string constant if it doesn't
 make sense as a sexp or would otherwise be considered a symbol.  Use `sym' to
-explicitly insert a symbol, or use the C-u prefix to treat all unmarked words
+explicitly insert a symbol, or use the \\[universal-argument] prefix to treat 
all unmarked words
 as symbols."
   (if (not (and (derived-mode-p 'ses-mode)
                (eq (get-text-property (point) 'keymap) 'ses-mode-print-map)))
@@ -3172,8 +3172,8 @@ previous insertion."
   (setq this-command 'yank))
 
 (defun ses-yank-cells (text arg)
-  "If the TEXT has a proper set of `ses' attributes, insert the text as
-cells, else return nil.  The cells are reprinted--the supplied text is
+  "If TEXT has a proper set of `ses' attributes, insert it as cells.
+Otherwise, return nil.  The cells are reprinted--the supplied text is
 ignored because the column widths, default printer, etc. at yank time might
 be different from those at kill-time.  ARG is a list to indicate that
 formulas are to be inserted without relocation."
@@ -3743,7 +3743,7 @@ Uses the value COMPILED-VALUE for this printer."
 (defun ses-define-local-printer (name definition)
   "Define a local printer with name NAME and definition DEFINITION.
 
-NAME shall be a symbol. Use TAB to complete over existing local
+NAME shall be a symbol.  Use TAB to complete over existing local
 printer names.
 
 DEFINITION shall be either a string formatter, e.g.:
@@ -4012,8 +4012,9 @@ Use `math-format-value' as a printer for Calc objects."
   (apply #'+ (apply #'ses-delete-blanks args)))
 
 (defun ses-average (list)
-  "Computes the sum of the numbers in LIST, divided by their length.  Blanks
-are ignored.  Result is always floating-point, even if all args are integers."
+  "Calculate the sum of the numbers in LIST, divided by their length.
+Blanks are ignored.  Result is always floating-point, even if all
+args are integers."
   (setq list (apply #'ses-delete-blanks list))
   (/ (float (apply #'+ list)) (length list)))
 
diff --git a/lisp/simple.el b/lisp/simple.el
index 14e5abc87d..1267c92fe5 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -259,7 +259,7 @@ all other buffers."
                                                         extra-test-exclusive)
   "Try the current buffer when outside navigation.
 But return nil if we navigated to the current buffer by the means
-of `next-error' command.  Otherwise, return it if it's next-error
+of `next-error' command.  Otherwise, return it if it's `next-error'
 capable."
   ;; Check that next-error-buffer has no buffer-local value
   ;; (i.e. we never navigated to the current buffer from another),
@@ -6511,13 +6511,13 @@ Display `Mark set' unless the optional second arg NOMSG 
is non-nil."
 
 (defcustom set-mark-command-repeat-pop nil
   "Non-nil means repeating \\[set-mark-command] after popping mark pops it 
again.
-That means that C-u \\[set-mark-command] \\[set-mark-command]
+That means that \\[universal-argument] \\[set-mark-command] 
\\[set-mark-command]
 will pop the mark twice, and
-C-u \\[set-mark-command] \\[set-mark-command] \\[set-mark-command]
+\\[universal-argument] \\[set-mark-command] \\[set-mark-command] 
\\[set-mark-command]
 will pop the mark three times.
 
 A value of nil means \\[set-mark-command]'s behavior does not change
-after C-u \\[set-mark-command]."
+after \\[universal-argument] \\[set-mark-command]."
   :type 'boolean
   :group 'editing-basics)
 
@@ -7911,8 +7911,8 @@ With argument 0, interchanges line point is in with line 
mark is in."
 (defun transpose-subr (mover arg &optional special)
   "Subroutine to do the work of transposing objects.
 Works for lines, sentences, paragraphs, etc.  MOVER is a function that
-moves forward by units of the given object (e.g. forward-sentence,
-forward-paragraph).  If ARG is zero, exchanges the current object
+moves forward by units of the given object (e.g. `forward-sentence',
+`forward-paragraph').  If ARG is zero, exchanges the current object
 with the one containing mark.  If ARG is an integer, moves the
 current object past ARG following (if ARG is positive) or
 preceding (if ARG is negative) objects, leaving point after the
diff --git a/lisp/so-long.el b/lisp/so-long.el
index 7bf15e85da..0cc6e884b8 100644
--- a/lisp/so-long.el
+++ b/lisp/so-long.el
@@ -491,7 +491,7 @@
   ;; considered internal-use only (with `global-so-long-mode' the interface
   ;; for enabling or disabling the automated behaviour).  FIXME: Establish a
   ;; way to support the original use-case, or rename to `so-long--enabled'.
-  "Internal use.  Non-nil when any so-long functionality has been used.")
+  "Internal use.  Non-nil when any `so-long' functionality has been used.")
 
 (defvar-local so-long--active nil ; internal use
   "Non-nil when `so-long' mitigations are in effect.")
@@ -761,7 +761,7 @@ place of `so-long-mode' -- therefore respecting the 
file-local mode value, yet
 still overriding minor modes and variables (as if `so-long-action' had been set
 to `so-long-minor-mode').
 
-The value `so-long-inhibit' means that so-long will not take any action at all
+The value `so-long-inhibit' means that `so-long' will not take any action at 
all
 for this file.
 
 If nil, then do not treat files with file-local modes any differently to other
@@ -1090,7 +1090,7 @@ This command calls `so-long' with the selected action as 
an argument.")
 
 ;;;###autoload
 (defun so-long-commentary ()
-  "View the so-long documentation in `outline-mode'."
+  "View the `so-long' documentation in `outline-mode'."
   (interactive)
   (let ((buf "*So Long: Commentary*"))
     (when (buffer-live-p (get-buffer buf))
@@ -1130,7 +1130,7 @@ This command calls `so-long' with the selected action as 
an argument.")
 
 ;;;###autoload
 (defun so-long-customize ()
-  "Open the so-long `customize' group."
+  "Open the `so-long' customize group."
   (interactive)
   (customize-group 'so-long))
 
@@ -1532,7 +1532,7 @@ This is the `so-long-revert-function' for `so-long-mode'."
   (interactive)
   (let ((so-long-original-mode (so-long-original 'major-mode)))
     (unless so-long-original-mode
-      (error "Original mode unknown."))
+      (error "Original mode unknown"))
     (funcall so-long-original-mode)
     ;; Emacs 26+ has already called `hack-local-variables' (during
     ;; `run-mode-hooks'; provided there was a `buffer-file-name'), but for 
older
@@ -1583,7 +1583,7 @@ because we do not want to downgrade the major mode in 
that scenario."
             so-long-revert-function 'turn-off-so-long-minor-mode))))
 
 (defun so-long-inhibit (&optional _mode)
-  "Prevent so-long from having any effect at all.
+  "Prevent `so-long' from having any effect at all.
 
 This is a `so-long-file-local-mode-function' option."
   (setq so-long--inhibited t))
@@ -1848,14 +1848,14 @@ invoked."
 
 ;;;###autoload
 (defun so-long-enable ()
-  "Enable the so-long library's functionality.
+  "Enable the `so-long' library's functionality.
 
 Equivalent to calling (global-so-long-mode 1)"
   (interactive)
   (global-so-long-mode 1))
 
 (defun so-long-disable ()
-  "Disable the so-long library's functionality.
+  "Disable the `so-long' library's functionality.
 
 Equivalent to calling (global-so-long-mode 0)"
   (interactive)
diff --git a/lisp/sort.el b/lisp/sort.el
index 0d2fd41664..be373fba99 100644
--- a/lisp/sort.el
+++ b/lisp/sort.el
@@ -56,12 +56,12 @@ The variable `sort-fold-case' determines whether alphabetic 
case affects
 the sort order.
 
 The next four arguments are functions to be called to move point
-across a sort record.  They will be called many times from within sort-subr.
+across a sort record.  They will be called many times from within `sort-subr'.
 
 NEXTRECFUN is called with point at the end of the previous record.
 It moves point to the start of the next record.
 It should move point to the end of the buffer if there are no more records.
-The first record is assumed to start at the position of point when sort-subr
+The first record is assumed to start at the position of point when `sort-subr'
 is called.
 
 ENDRECFUN is called with point within the record.
@@ -587,16 +587,16 @@ is the one that ends before END."
 Non-interactively, arguments BEG and END delimit the region.
 Normally it searches forwards, keeping the first instance of
 each identical line.  If REVERSE is non-nil (interactively, with
-a C-u prefix), it searches backwards and keeps the last instance of
+a \\[universal-argument] prefix), it searches backwards and keeps the last 
instance of
 each repeated line.
 
 Identical lines need not be adjacent, unless the argument
-ADJACENT is non-nil (interactively, with a C-u C-u prefix).
+ADJACENT is non-nil (interactively, with a \\[universal-argument] 
\\[universal-argument] prefix).
 This is a more efficient mode of operation, and may be useful
 on large regions that have already been sorted.
 
 If the argument KEEP-BLANKS is non-nil (interactively, with a
-C-u C-u C-u prefix), it retains repeated blank lines.
+\\[universal-argument] \\[universal-argument] \\[universal-argument] prefix), 
it retains repeated blank lines.
 
 Returns the number of deleted lines.  Interactively, or if INTERACTIVE
 is non-nil, it also prints a message describing the number of deletions."
diff --git a/lisp/strokes.el b/lisp/strokes.el
index 18595cb094..91ddefd373 100644
--- a/lisp/strokes.el
+++ b/lisp/strokes.el
@@ -928,13 +928,13 @@ cycle can continue.
 
 To toggle strokes-mode, invoke the command
 
-> M-x strokes-mode
+> \\[strokes-mode]
 
 ** Strokes for controlling the behavior of Emacs...
 
 When you're ready to start defining strokes, just use the command
 
-> M-x strokes-global-set-stroke
+> \\[strokes-global-set-stroke]
 
 You will see a ` *strokes*' buffer which is waiting for you to enter in
 your stroke.  When you enter in the stroke, you draw with button 1 or
@@ -943,7 +943,7 @@ which will be executed when that stroke is invoked.  Simple 
as that.
 For now, try to define a stroke to copy a region.  This is a popular
 edit command, so type
 
-> M-x strokes-global-set-stroke
+> \\[strokes-global-set-stroke]
 
 Then, in the ` *strokes*' buffer, draw the letter `C' (for `copy')
 and then, when it asks you to enter the command to map that to, type
@@ -955,7 +955,7 @@ Remember: paint with button 1 or button 2 and then end with 
button 3.
 
 If ever you want to know what a certain strokes maps to, then do
 
-> M-x strokes-describe-stroke
+> \\[strokes-describe-stroke]
 
 and you can enter in any arbitrary stroke.  Remember: The strokes
 package lets you program in simple and complex (multi-lift) strokes.
@@ -967,12 +967,12 @@ will invoke the command `strokes-do-stroke'.
 If ever you define a stroke which you don't like, then you can unset
 it with the command
 
-> M-x strokes-unset-last-stroke
+> \\[strokes-unset-last-stroke]
 
 You can always get an idea of what your current strokes look like with
 the command
 
-> M-x strokes-list-strokes
+> \\[strokes-list-strokes]
 
 Your strokes will be displayed in alphabetical order (based on command
 names) and the beginning of each simple stroke will be marked by a
@@ -981,19 +981,19 @@ stroke, the dot colors are arranged in the rainbow color 
sequence,
 `ROYGBIV'.  If you want a listing of your strokes from most recent
 down, then use a prefix argument:
 
-> C-u M-x strokes-list-strokes
+> \\[universal-argument] \\[strokes-list-strokes]
 
 Your strokes are stored as you enter them.  They get saved into the
 file specified by the `strokes-file' variable, along with other strokes
 configuration variables.  You will be prompted to save them when you
 exit Emacs, or you can save them with
 
-> M-x strokes-prompt-user-save-strokes
+> \\[strokes-prompt-user-save-strokes]
 
 Your strokes get loaded automatically when you enable `strokes-mode'.
 You can also load in your user-defined strokes with
 
-> M-x strokes-load-user-strokes
+> \\[strokes-load-user-strokes]
 
 ** Strokes for pictographic editing...
 
@@ -1006,11 +1006,11 @@ into the buffer.  You treat it somewhat like any other 
character,
 which you can copy, paste, delete, move, etc.  When all is done, you
 may want to send the file, or save it.  This is done with
 
-> M-x strokes-encode-buffer
+> \\[strokes-encode-buffer]
 
 Likewise, to decode the strokes from a strokes-encoded buffer you do
 
-> M-x strokes-decode-buffer
+> \\[strokes-decode-buffer]
 
 ** A few more important things...
 
diff --git a/lisp/subr.el b/lisp/subr.el
index 6ae6d242a4..a2266b1d57 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -486,7 +486,7 @@ was called."
   "Return VALUE with its bits shifted left by COUNT.
 If COUNT is negative, shifting is actually to the right.
 In this case, if VALUE is a negative fixnum treat it as unsigned,
-i.e., subtract 2 * most-negative-fixnum from VALUE before shifting it."
+i.e., subtract 2 * `most-negative-fixnum' from VALUE before shifting it."
   (when (and (< value 0) (< count 0))
     (when (< value most-negative-fixnum)
       (signal 'args-out-of-range (list value count)))
@@ -1510,8 +1510,10 @@ nil or (STRING . POSITION)'.
 
 For more information, see Info node `(elisp)Click Events'."
   (if (consp event) (nth 1 event)
-    (or (posn-at-point)
-        (list (selected-window) (point) '(0 . 0) 0))))
+    ;; Use `window-point' for the case when the current buffer
+    ;; is temporarily switched to some other buffer (bug#50256)
+    (or (posn-at-point (window-point))
+        (list (selected-window) (window-point) '(0 . 0) 0))))
 
 (defun event-end (event)
   "Return the ending position of EVENT.
@@ -1519,8 +1521,10 @@ EVENT should be a click, drag, or key press event.
 
 See `event-start' for a description of the value returned."
   (if (consp event) (nth (if (consp (nth 2 event)) 2 1) event)
-    (or (posn-at-point)
-        (list (selected-window) (point) '(0 . 0) 0))))
+    ;; Use `window-point' for the case when the current buffer
+    ;; is temporarily switched to some other buffer (bug#50256)
+    (or (posn-at-point (window-point))
+        (list (selected-window) (window-point) '(0 . 0) 0))))
 
 (defsubst event-click-count (event)
   "Return the multi-click count of EVENT, a click or drag event.
@@ -2898,7 +2902,7 @@ function is used instead (see 
`read-char-choice-with-read-key')."
 Any input that is not one of CHARS is ignored.
 
 If optional argument INHIBIT-KEYBOARD-QUIT is non-nil, ignore
-keyboard-quit events while waiting for a valid input.
+`keyboard-quit' events while waiting for a valid input.
 
 If you bind the variable `help-form' to a non-nil value
 while calling this function, then pressing `help-char'
@@ -3200,8 +3204,10 @@ character.  This is not possible when using `read-key', 
but using
 (defun y-or-n-p (prompt)
   "Ask user a \"y or n\" question.
 Return t if answer is \"y\" and nil if it is \"n\".
-PROMPT is the string to display to ask the question.  It should
-end in a space; `y-or-n-p' adds \"(y or n) \" to it.
+
+PROMPT is the string to display to ask the question; `y-or-n-p'
+adds \" (y or n) \" to it.  It does not need to end in space, but
+if it does up to one space will be removed.
 
 If you bind the variable `help-form' to a non-nil value
 while calling this function, then pressing `help-char'
@@ -5268,7 +5274,7 @@ that can be added.
 If `buffer-invisibility-spec' isn't a list before calling this
 function, `buffer-invisibility-spec' will afterwards be a list
 with the value `(t ELEMENT)'.  This means that if text exists
-that invisibility values that aren't either `t' or ELEMENT, that
+that invisibility values that aren't either t or ELEMENT, that
 text will become visible."
   (if (eq buffer-invisibility-spec t)
       (setq buffer-invisibility-spec (list t)))
@@ -5278,8 +5284,8 @@ text will become visible."
 (defun remove-from-invisibility-spec (element)
   "Remove ELEMENT from `buffer-invisibility-spec'.
 If `buffer-invisibility-spec' isn't a list before calling this
-function, it will be made into a list containing just `t' as the
-only list member.  This means that if text exists with non-`t'
+function, it will be made into a list containing just t as the
+only list member.  This means that if text exists with non-t
 invisibility values, that text will become visible."
   (setq buffer-invisibility-spec
         (if (consp buffer-invisibility-spec)
diff --git a/lisp/svg.el b/lisp/svg.el
index 05accf4f13..3c7f055031 100644
--- a/lisp/svg.el
+++ b/lisp/svg.el
@@ -188,7 +188,7 @@ otherwise.  IMAGE-TYPE should be a MIME image type, like
   "Insert image placed at RELATIVE-FILENAME into the SVG structure.
 RELATIVE-FILENAME will be searched in `file-name-directory' of the
 image's `:base-uri' property.  If `:base-uri' is not specified for the
-image, then embedding won't work. Embedding large images using this
+image, then embedding won't work.  Embedding large images using this
 function is much faster than `svg-embed'."
   (svg--append
    svg
diff --git a/lisp/t-mouse.el b/lisp/t-mouse.el
index ec36f54378..e9de31f50d 100644
--- a/lisp/t-mouse.el
+++ b/lisp/t-mouse.el
@@ -25,7 +25,7 @@
 ;;; Commentary:
 
 ;; This package provides access to mouse event as reported by the gpm-Linux
-;; package. It tries to reproduce the functionality offered by Emacs under X.
+;; package.  It tries to reproduce the functionality offered by Emacs under X.
 ;; The "gpm" server runs under Linux, so this package is rather
 ;; Linux-dependent.
 
diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el
index faa155c53f..5abc25b203 100644
--- a/lisp/tab-bar.el
+++ b/lisp/tab-bar.el
@@ -89,10 +89,10 @@
 
 
 (defcustom tab-bar-select-tab-modifiers '()
-  "List of modifier keys for selecting tab-bar tabs by index numbers.
+  "List of modifier keys for selecting tab-bar tabs by their numbers.
 Possible modifier keys are `control', `meta', `shift', `hyper', `super' and
-`alt'.  Presiing one of the modifiers in the list and a digit selects
-the tab whose index equals the digit.  Negative numbers count from
+`alt'.  Pressing one of the modifiers in the list and a digit selects
+the tab whose number equals the digit.  Negative numbers count from
 the end of the tab bar.  The digit 9 selects the last (rightmost) tab.
 For easier selection of tabs by their numbers, consider customizing
 `tab-bar-tab-hints', which will show tab numbers alongside the tab name."
@@ -113,7 +113,6 @@ For easier selection of tabs by their numbers, consider 
customizing
   :group 'tab-bar
   :version "27.1")
 
-
 (defun tab-bar--define-keys ()
   "Install key bindings for switching between tabs if the user has configured 
them."
   (when tab-bar-select-tab-modifiers
@@ -190,7 +189,7 @@ either 1 or 0 depending on the value of the customizable 
variable
 (defun tab-bar--update-tab-bar-lines (&optional frames)
   "Update the `tab-bar-lines' frame parameter in FRAMES.
 If the optional parameter FRAMES is omitted, update only
-the currently selected frame.  If it is `t', update all frames
+the currently selected frame.  If it is t, update all frames
 as well as the default for new frames.  Otherwise FRAMES should be
 a list of frames to update."
   (let ((frame-lst (cond ((null frames)
@@ -224,10 +223,17 @@ a list of frames to update."
       (tab-bar--define-keys)
     (tab-bar--undefine-keys)))
 
+
+;;; Key bindings
+
 (defun tab-bar--key-to-number (key)
-  (let ((key-name (format "%S" key)))
-    (when (string-prefix-p "tab-" key-name)
-      (string-to-number (string-replace "tab-" "" key-name)))))
+  (cond
+   ((null key) t)
+   ((eq key 'current-tab) nil)
+   ((let ((key-name (format "%S" key)))
+      (when (string-prefix-p "tab-" key-name)
+        (string-to-number (string-replace "tab-" "" key-name)))))
+   (t t)))
 
 (defun tab-bar--event-to-item (posn)
   (if (posn-window posn)
@@ -246,37 +252,76 @@ a list of frames to update."
            (lambda (key binding)
              (when (eq (car-safe binding) 'menu-item)
                (when (> (+ column (length (nth 1 binding))) x-position)
-                 (throw 'done (list
-                               key (nth 2 binding)
-                               (get-text-property
-                                (- x-position column) 'close-tab (nth 1 
binding)))))
+                 (throw 'done (list key (nth 2 binding)
+                                    (get-text-property
+                                     (- x-position column)
+                                     'close-tab (nth 1 binding)))))
                (setq column (+ column (length (nth 1 binding))))))
            keymap))))))
 
 (defun tab-bar-mouse-select-tab (event)
   (interactive "e")
-  (let ((item (tab-bar--event-to-item (event-start event))))
-    (if (nth 2 item)
-        (tab-bar-close-tab (tab-bar--key-to-number (nth 0 item)))
+  (let* ((item (tab-bar--event-to-item (event-start event)))
+         (tab-number (tab-bar--key-to-number (nth 0 item))))
+    ;; Don't close the tab when clicked on the close button.
+    ;; Let `tab-bar-mouse-close-tab-from-button' do this.
+    (unless (nth 2 item)
       (if (functionp (nth 1 item))
           (call-interactively (nth 1 item))
-        (tab-bar-select-tab (tab-bar--key-to-number (nth 0 item)))))))
+        (unless (eq tab-number t)
+          (tab-bar-select-tab tab-number))))))
+
+(defun tab-bar-mouse-close-tab-from-button (event)
+  "Close the tab only when clicked on the close button."
+  (interactive "e")
+  (let* ((item (tab-bar--event-to-item (event-start event)))
+         (tab-number (tab-bar--key-to-number (nth 0 item))))
+    (when (nth 2 item)
+      (unless (eq tab-number t)
+        (tab-bar-close-tab tab-number)))))
 
 (defun tab-bar-mouse-close-tab (event)
+  "Close the tab when clicked anywhere on the tab.
+This is in contrast with `tab-bar-mouse-close-tab-from-button'
+that closes only when clicked on the close button."
   (interactive "e")
-  (let ((item (tab-bar--event-to-item (event-start event))))
-    (tab-bar-close-tab (tab-bar--key-to-number (nth 0 item)))))
+  (let* ((item (tab-bar--event-to-item (event-start event)))
+         (tab-number (tab-bar--key-to-number (nth 0 item))))
+    (unless (eq tab-number t)
+      (tab-bar-close-tab tab-number))))
 
 (defun tab-bar-mouse-context-menu (event)
   (interactive "e")
   (let* ((item (tab-bar--event-to-item (event-start event)))
          (tab-number (tab-bar--key-to-number (nth 0 item)))
-         (menu (make-sparse-keymap "Context Menu")))
-
-    (define-key-after menu [close]
-      `(menu-item "Close" (lambda () (interactive)
-                            (tab-bar-close-tab ,tab-number))
-                  :help "Close the tab"))
+         (menu (make-sparse-keymap (propertize "Context Menu" 'hide t))))
+
+    (cond
+     ((eq tab-number t)
+      (define-key-after menu [new-tab]
+        '(menu-item "New tab" tab-bar-new-tab
+                    :help "Create a new tab"))
+      (when tab-bar-closed-tabs
+        (define-key-after menu [undo-close]
+          '(menu-item "Reopen closed tab" tab-bar-undo-close-tab
+                      :help "Undo closing the tab"))))
+
+     (t
+      (define-key-after menu [duplicate-tab]
+        `(menu-item "Duplicate" (lambda () (interactive)
+                                  (tab-bar-duplicate-tab
+                                   nil ;; TODO: add ,tab-number
+                                   ))
+                    :help "Duplicate the tab"))
+      (define-key-after menu [close]
+        `(menu-item "Close" (lambda () (interactive)
+                              (tab-bar-close-tab ,tab-number))
+                    :help "Close the tab"))
+      (define-key-after menu [close-other]
+        `(menu-item "Close other tabs"
+                    (lambda () (interactive)
+                      (tab-bar-close-other-tabs ,tab-number))
+                    :help "Close all other tabs"))))
 
     (popup-menu menu event)))
 
@@ -288,38 +333,14 @@ a list of frames to update."
         (to (tab-bar--key-to-number
              (nth 0 (tab-bar--event-to-item
                      (event-end event))))))
-    (tab-bar-move-tab-to to from)))
-
-(defun toggle-tab-bar-mode-from-frame (&optional arg)
-  "Toggle tab bar on or off, based on the status of the current frame.
-Used in the Show/Hide menu, to have the toggle reflect the current frame.
-See `tab-bar-mode' for more information."
-  (interactive (list (or current-prefix-arg 'toggle)))
-  (if (eq arg 'toggle)
-      (tab-bar-mode (if (> (frame-parameter nil 'tab-bar-lines) 0) 0 1))
-    (tab-bar-mode arg)))
-
-(defun toggle-frame-tab-bar (&optional frame)
-  "Toggle tab bar of the selected frame.
-When calling from Lisp, use the optional argument FRAME to toggle
-the tab bar on that frame.
-This is useful when you want to enable the tab bar individually
-on each new frame when the global `tab-bar-mode' is disabled,
-or when you want to disable the tab bar individually on each
-new frame when the global `tab-bar-mode' is enabled, by using
-
-  (add-hook 'after-make-frame-functions 'toggle-frame-tab-bar)"
-  (interactive)
-  (set-frame-parameter frame 'tab-bar-lines
-                       (if (> (frame-parameter frame 'tab-bar-lines) 0) 0 1))
-  (set-frame-parameter frame 'tab-bar-lines-keep-state
-                       (not (frame-parameter frame 
'tab-bar-lines-keep-state))))
+    (unless (or (eq from t) (eq to t))
+      (tab-bar-move-tab-to to from))))
 
 (defvar tab-bar-map
   (let ((map (make-sparse-keymap)))
     (define-key map [down-mouse-1] 'tab-bar-mouse-select-tab)
     (define-key map [drag-mouse-1] 'tab-bar-mouse-move-tab)
-    (define-key map [mouse-1] 'ignore)
+    (define-key map [mouse-1] 'tab-bar-mouse-close-tab-from-button)
     (define-key map [down-mouse-2] 'tab-bar-mouse-close-tab)
     (define-key map [mouse-2] 'ignore)
     (define-key map [down-mouse-3] 'tab-bar-mouse-context-menu)
@@ -352,16 +373,45 @@ and to bind mouse events to the commands."
   (tab-bar-make-keymap-1))
 
 
+(defun toggle-tab-bar-mode-from-frame (&optional arg)
+  "Toggle tab bar on or off, based on the status of the current frame.
+Used in the Show/Hide menu, to have the toggle reflect the current frame.
+See `tab-bar-mode' for more information."
+  (interactive (list (or current-prefix-arg 'toggle)))
+  (if (eq arg 'toggle)
+      (tab-bar-mode (if (> (frame-parameter nil 'tab-bar-lines) 0) 0 1))
+    (tab-bar-mode arg)))
+
+(defun toggle-frame-tab-bar (&optional frame)
+  "Toggle tab bar of the selected frame.
+When calling from Lisp, use the optional argument FRAME to toggle
+the tab bar on that frame.
+This is useful if you want to enable the tab bar individually
+on each new frame when the global `tab-bar-mode' is disabled,
+or if you want to disable the tab bar individually on each
+new frame when the global `tab-bar-mode' is enabled, by using
+
+  (add-hook 'after-make-frame-functions 'toggle-frame-tab-bar)"
+  (interactive)
+  (set-frame-parameter frame 'tab-bar-lines
+                       (if (> (frame-parameter frame 'tab-bar-lines) 0) 0 1))
+  (set-frame-parameter frame 'tab-bar-lines-keep-state
+                       (not (frame-parameter frame 
'tab-bar-lines-keep-state))))
+
+
 (defcustom tab-bar-show t
   "Defines when to show the tab bar.
-If t, enable `tab-bar-mode' automatically on using the commands that
-create new window configurations (e.g. `tab-new').
-If a non-negative integer, hide the tab bar when the number of the
-tabs does not exceed the value of this variable.  In particular,
+If t, the default, enable `tab-bar-mode' automatically upon using
+the commands that create new window configurations (e.g., `tab-new').
+If a non-negative integer, show the tab bar only if the number of
+the tabs exceeds the value of this variable.  In particular,
 if the value is 1, hide the tab bar when it has only one tab, and
 show it again once more tabs are created.  A value that is a
-non-negative integer also makes the tab bar frame-local: the tab
-bar can be shown or hidden independently for each frame.
+non-negative integer also makes the tab bar appearance be different
+on different frames: the tab bar can be shown on some frames and
+hidden on others, depending on how many tab-bar tabs are on that
+frame, and whether that number is greater than the numerical value
+of this variable.
 If nil, always keep the tab bar hidden.  In this case it's still
 possible to use persistent named window configurations by relying on
 keyboard commands `tab-new', `tab-close', `tab-next', `tab-switcher', etc.
@@ -478,6 +528,7 @@ and `tab-bar-select-tab-modifiers'."
   "String that delimits tabs.")
 
 (defun tab-bar-separator ()
+  "Separator between tabs."
   (or tab-bar-separator (if window-system " " "|")))
 
 
@@ -629,7 +680,8 @@ it will display time aligned to the right on the tab bar 
instead of
 the mode line.  Replacing `tab-bar-format-tabs' with
 `tab-bar-format-tabs-groups' will group tabs on the tab bar."
   :type 'hook
-  :options '(tab-bar-format-history
+  :options '(tab-bar-format-menu-global
+             tab-bar-format-history
              tab-bar-format-tabs
              tab-bar-format-tabs-groups
              tab-bar-separator
@@ -643,6 +695,23 @@ the mode line.  Replacing `tab-bar-format-tabs' with
   :group 'tab-bar
   :version "28.1")
 
+(defun tab-bar-format-menu-global ()
+  "Show global menu on clicking the Menu button."
+  `((add-tab menu-item (propertize "Menu" 'face 'tab-bar-tab-inactive)
+             (lambda (event) (interactive "e")
+               (let ((menu (make-sparse-keymap
+                            (propertize "Global Menu" 'hide t))))
+
+                 (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
+                 (map-keymap (lambda (key binding)
+                               (when (consp binding)
+                                 (define-key-after menu (vector key)
+                                   (copy-sequence binding))))
+                             (lookup-key global-map [menu-bar]))
+
+                 (popup-menu menu event)))
+             :help "Global Menu")))
+
 (defun tab-bar-format-history ()
   "Show back and forward buttons when `tab-bar-history-mode' is enabled.
 You can hide these buttons by customizing `tab-bar-format' and removing
@@ -658,6 +727,7 @@ You can hide these buttons by customizing `tab-bar-format' 
and removing
        :help "Click to go forward in tab history"))))
 
 (defun tab-bar--format-tab (tab i)
+  "Format TAB using its index I and return the result as a string."
   (append
    `((,(intern (format "sep-%i" i)) menu-item ,(tab-bar-separator) ignore))
    (cond
@@ -679,6 +749,7 @@ You can hide these buttons by customizing `tab-bar-format' 
and removing
         ,(alist-get 'close-binding tab))))))
 
 (defun tab-bar-format-tabs ()
+  "Show all tabs."
   (let ((i 0))
     (mapcan
      (lambda (tab)
@@ -749,6 +820,7 @@ Function gets one argument: a tab."
       :help "Click to visit group"))))
 
 (defun tab-bar-format-tabs-groups ()
+  "Show tabs with their groups."
   (let* ((tabs (funcall tab-bar-tabs-function))
          (current-group (funcall tab-bar-tab-group-function
                                  (tab-bar--current-tab-find tabs)))
@@ -777,6 +849,7 @@ Function gets one argument: a tab."
      tabs)))
 
 (defun tab-bar-format-add-tab ()
+  "Button to add a new tab."
   (when (and tab-bar-new-button-show tab-bar-new-button)
     `((add-tab menu-item ,tab-bar-new-button tab-bar-new-tab
                :help "New tab"))))
@@ -909,25 +982,25 @@ on the tab bar instead."
                              tabs))))
 
 
-(defun tab-bar-select-tab (&optional arg)
-  "Switch to the tab by its absolute position ARG in the tab bar.
+(defun tab-bar-select-tab (&optional tab-number)
+  "Switch to the tab by its absolute position TAB-NUMBER in the tab bar.
 When this command is bound to a numeric key (with a prefix or modifier key
 using `tab-bar-select-tab-modifiers'), calling it without an argument
 will translate its bound numeric key to the numeric argument.
-ARG counts from 1.  Negative ARG counts tabs from the end of the tab bar."
+TAB-NUMBER counts from 1.  Negative TAB-NUMBER counts tabs from the end of the 
tab bar."
   (interactive "P")
-  (unless (integerp arg)
+  (unless (integerp tab-number)
     (let ((key (event-basic-type last-command-event)))
-      (setq arg (if (and (characterp key) (>= key ?1) (<= key ?9))
-                    (- key ?0)
-                  0))))
+      (setq tab-number (if (and (characterp key) (>= key ?1) (<= key ?9))
+                           (- key ?0)
+                         0))))
 
   (let* ((tabs (funcall tab-bar-tabs-function))
          (from-index (tab-bar--current-tab-index tabs))
-         (to-index (cond ((< arg 0) (+ (length tabs) (1+ arg)))
-                         ((zerop arg) (1+ from-index))
-                         (t arg)))
-         (to-index (1- (max 1 (min to-index (length tabs))))))
+         (to-number (cond ((< tab-number 0) (+ (length tabs) (1+ tab-number)))
+                          ((zerop tab-number) (1+ from-index))
+                          (t tab-number)))
+         (to-index (1- (max 1 (min to-number (length tabs))))))
 
     (unless (eq from-index to-index)
       (let* ((from-tab (tab-bar--tab))
@@ -1040,20 +1113,20 @@ most recent, and so on."
 (defalias 'tab-bar-select-tab-by-name 'tab-bar-switch-to-tab)
 
 
-(defun tab-bar-move-tab-to (to-index &optional from-index)
-  "Move tab from FROM-INDEX position to new position at TO-INDEX.
-FROM-INDEX defaults to the current tab index.
-FROM-INDEX and TO-INDEX count from 1.
-Negative TO-INDEX counts tabs from the end of the tab bar.
+(defun tab-bar-move-tab-to (to-number &optional from-number)
+  "Move tab from FROM-NUMBER position to new position at TO-NUMBER.
+FROM-NUMBER defaults to the current tab number.
+FROM-NUMBER and TO-NUMBER count from 1.
+Negative TO-NUMBER counts tabs from the end of the tab bar.
 Argument addressing is absolute in contrast to `tab-bar-move-tab'
 where argument addressing is relative."
   (interactive "P")
   (let* ((tabs (funcall tab-bar-tabs-function))
-         (from-index (or from-index (1+ (tab-bar--current-tab-index tabs))))
-         (from-tab (nth (1- from-index) tabs))
-         (to-index (if to-index (prefix-numeric-value to-index) 1))
-         (to-index (if (< to-index 0) (+ (length tabs) (1+ to-index)) 
to-index))
-         (to-index (max 0 (min (1- to-index) (1- (length tabs))))))
+         (from-number (or from-number (1+ (tab-bar--current-tab-index tabs))))
+         (from-tab (nth (1- from-number) tabs))
+         (to-number (if to-number (prefix-numeric-value to-number) 1))
+         (to-number (if (< to-number 0) (+ (length tabs) (1+ to-number)) 
to-number))
+         (to-index (max 0 (min (1- to-number) (1- (length tabs))))))
     (setq tabs (delq from-tab tabs))
     (cl-pushnew from-tab (nthcdr to-index tabs))
     (tab-bar-tabs-set tabs)
@@ -1076,10 +1149,10 @@ Like `tab-bar-move-tab', but moves in the opposite 
direction."
   (interactive "p")
   (tab-bar-move-tab (- (or arg 1))))
 
-(defun tab-bar-move-tab-to-frame (arg &optional from-frame from-index to-frame 
to-index)
-  "Move tab from FROM-INDEX position to new position at TO-INDEX.
-FROM-INDEX defaults to the current tab index.
-FROM-INDEX and TO-INDEX count from 1.
+(defun tab-bar-move-tab-to-frame (arg &optional from-frame from-number 
to-frame to-number)
+  "Move tab from FROM-NUMBER position to new position at TO-NUMBER.
+FROM-NUMBER defaults to the current tab number.
+FROM-NUMBER and TO-NUMBER count from 1.
 FROM-FRAME specifies the source frame and defaults to the selected frame.
 TO-FRAME specifies the target frame and defaults the next frame.
 Interactively, ARG selects the ARGth different frame to move to."
@@ -1091,10 +1164,10 @@ Interactively, ARG selects the ARGth different frame to 
move to."
       (setq to-frame (next-frame to-frame))))
   (unless (eq from-frame to-frame)
     (let* ((from-tabs (funcall tab-bar-tabs-function from-frame))
-           (from-index (or from-index (1+ (tab-bar--current-tab-index 
from-tabs))))
-           (from-tab (nth (1- from-index) from-tabs))
+           (from-number (or from-number (1+ (tab-bar--current-tab-index 
from-tabs))))
+           (from-tab (nth (1- from-number) from-tabs))
            (to-tabs (funcall tab-bar-tabs-function to-frame))
-           (to-index (max 0 (min (1- (or to-index 1)) (1- (length to-tabs))))))
+           (to-index (max 0 (min (1- (or to-number 1)) (1- (length 
to-tabs))))))
       (cl-pushnew (assq-delete-all
                    'wc (if (eq (car from-tab) 'current-tab)
                            (tab-bar--tab from-frame)
@@ -1103,7 +1176,7 @@ Interactively, ARG selects the ARGth different frame to 
move to."
       (with-selected-frame from-frame
         (let ((inhibit-message t) ; avoid message about deleted tab
               tab-bar-closed-tabs)
-          (tab-bar-close-tab from-index)))
+          (tab-bar-close-tab from-number)))
       (tab-bar-tabs-set to-tabs to-frame)
       (force-mode-line-update t))))
 
@@ -1132,11 +1205,11 @@ to the tab argument will be applied after all functions 
are called."
   :group 'tab-bar
   :version "27.1")
 
-(defun tab-bar-new-tab-to (&optional to-index)
-  "Add a new tab at the absolute position TO-INDEX.
-TO-INDEX counts from 1.  If no TO-INDEX is specified, then add
+(defun tab-bar-new-tab-to (&optional tab-number)
+  "Add a new tab at the absolute position TAB-NUMBER.
+TAB-NUMBER counts from 1.  If no TAB-NUMBER is specified, then add
 a new tab at the position specified by `tab-bar-new-tab-to'.
-Negative TO-INDEX counts tabs from the end of the tab bar,
+Negative TAB-NUMBER counts tabs from the end of the tab bar,
 and -1 means the new tab will become the last one.
 Argument addressing is absolute in contrast to `tab-bar-new-tab'
 where argument addressing is relative.
@@ -1170,11 +1243,11 @@ After the tab is created, the hooks in
     (let* ((to-tab (tab-bar--current-tab-make
                     (when (eq tab-bar-new-tab-group t)
                       `((group . ,(alist-get 'group from-tab))))))
-           (to-index (and to-index (prefix-numeric-value to-index)))
-           (to-index (or (if to-index
-                             (if (< to-index 0)
-                                 (+ (length tabs) (1+ to-index))
-                               (1- to-index)))
+           (to-number (and tab-number (prefix-numeric-value tab-number)))
+           (to-index (or (if to-number
+                             (if (< to-number 0)
+                                 (+ (length tabs) (1+ to-number))
+                               (1- to-number)))
                          (pcase tab-bar-new-tab-to
                            ('leftmost 0)
                            ('rightmost (length tabs))
@@ -1221,8 +1294,7 @@ where argument addressing is absolute."
 
 (defun tab-bar-duplicate-tab (&optional arg)
   "Duplicate the current tab to ARG positions to the right.
-If a negative ARG, duplicate the tab to ARG positions to the left.
-If ARG is zero, duplicate the tab in place of the current tab."
+ARG has the same meaning as in `tab-bar-new-tab'."
   (interactive "P")
   (let ((tab-bar-new-tab-choice nil)
         (tab-bar-new-tab-group t))
@@ -1247,7 +1319,7 @@ If `recent', select the most recently visited tab."
   "Defines what to do when the last tab is closed.
 If nil, do nothing and show a message, like closing the last window or frame.
 If `delete-frame', delete the containing frame, as a web browser would do.
-If `tab-bar-mode-disable', disable tab-bar-mode so that tabs no longer show
+If `tab-bar-mode-disable', disable `tab-bar-mode' so that tabs no longer show
 in the frame.
 If the value is a function, call that function with the tab to be closed
 as an argument."
@@ -1276,15 +1348,15 @@ respectively."
   :group 'tab-bar
   :version "27.1")
 
-(defun tab-bar-close-tab (&optional arg to-index)
-  "Close the tab specified by its absolute position ARG.
-If no ARG is specified, then close the current tab and switch
+(defun tab-bar-close-tab (&optional tab-number to-number)
+  "Close the tab specified by its absolute position TAB-NUMBER.
+If no TAB-NUMBER is specified, then close the current tab and switch
 to the tab specified by `tab-bar-close-tab-select'.
-ARG counts from 1.
-Optional TO-INDEX could be specified to override the value of
+TAB-NUMBER counts from 1.
+Optional TO-NUMBER could be specified to override the value of
 `tab-bar-close-tab-select' programmatically with a position
 of an existing tab to select after closing the current tab.
-TO-INDEX counts from 1.
+TO-NUMBER counts from 1.
 
 The functions in `tab-bar-tab-prevent-close-functions' will be
 run to determine whether or not to close the tab.
@@ -1295,7 +1367,7 @@ for the last tab on a frame is determined by
   (interactive "P")
   (let* ((tabs (funcall tab-bar-tabs-function))
          (current-index (tab-bar--current-tab-index tabs))
-         (close-index (if (integerp arg) (1- arg) current-index))
+         (close-index (if (integerp tab-number) (1- tab-number) current-index))
          (last-tab-p (= 1 (length tabs)))
          (prevent-close (run-hook-with-args-until-success
                          'tab-bar-tab-prevent-close-functions
@@ -1323,7 +1395,7 @@ for the last tab on a frame is determined by
         ;; More than one tab still open
         (when (eq current-index close-index)
           ;; Select another tab before deleting the current tab
-          (let ((to-index (or (if to-index (1- to-index))
+          (let ((to-index (or (if to-number (1- to-number))
                               (pcase tab-bar-close-tab-select
                                 ('left (1- (if (< current-index 1) 2 
current-index)))
                                 ('right (if (> (length tabs) (1+ 
current-index))
@@ -1361,15 +1433,25 @@ for the last tab on a frame is determined by
                                   (funcall tab-bar-tabs-function)))))
   (tab-bar-close-tab (1+ (tab-bar--tab-index-by-name name))))
 
-(defun tab-bar-close-other-tabs ()
-  "Close all tabs on the selected frame, except the selected one."
+(defun tab-bar-close-other-tabs (&optional tab-number)
+  "Close all tabs on the selected frame, except TAB-NUMBER.
+TAB-NUMBER counts from 1 and defaults to the current tab."
   (interactive)
   (let* ((tabs (funcall tab-bar-tabs-function))
-         (current-tab (tab-bar--current-tab-find tabs))
+         (current-index (tab-bar--current-tab-index tabs))
+         (keep-index (if (integerp tab-number)
+                         (1- (max 0 (min tab-number (length tabs))))
+                       current-index))
+         (keep-tab (nth keep-index tabs))
          (index 0))
-    (when current-tab
+
+    (when keep-tab
+      (unless (eq keep-index current-index)
+        (tab-bar-select-tab (1+ keep-index))
+        (setq tabs (funcall tab-bar-tabs-function)))
+
       (dolist (tab tabs)
-        (unless (or (eq tab current-tab)
+        (unless (or (eq tab keep-tab)
                     (run-hook-with-args-until-success
                      'tab-bar-tab-prevent-close-functions tab
                      ;; `last-tab-p' logically can't ever be true
@@ -1418,23 +1500,23 @@ for the last tab on a frame is determined by
     (message "No more closed tabs to undo")))
 
 
-(defun tab-bar-rename-tab (name &optional arg)
-  "Rename the tab specified by its absolute position ARG.
-If no ARG is specified, then rename the current tab.
-ARG counts from 1.
+(defun tab-bar-rename-tab (name &optional tab-number)
+  "Rename the tab specified by its absolute position TAB-NUMBER.
+If no TAB-NUMBER is specified, then rename the current tab.
+TAB-NUMBER counts from 1.
 If NAME is the empty string, then use the automatic name
 function `tab-bar-tab-name-function'."
   (interactive
    (let* ((tabs (funcall tab-bar-tabs-function))
-          (tab-index (or current-prefix-arg (1+ (tab-bar--current-tab-index 
tabs))))
-          (tab-name (alist-get 'name (nth (1- tab-index) tabs))))
+          (tab-number (or current-prefix-arg (1+ (tab-bar--current-tab-index 
tabs))))
+          (tab-name (alist-get 'name (nth (1- tab-number) tabs))))
      (list (read-from-minibuffer
             "New name for tab (leave blank for automatic naming): "
             nil nil nil nil tab-name)
            current-prefix-arg)))
   (let* ((tabs (funcall tab-bar-tabs-function))
-         (tab-index (if arg
-                        (1- (max 0 (min arg (length tabs))))
+         (tab-index (if (integerp tab-number)
+                        (1- (max 0 (min tab-number (length tabs))))
                       (tab-bar--current-tab-index tabs)))
          (tab-to-rename (nth tab-index tabs))
          (tab-explicit-name (> (length name) 0))
@@ -1501,20 +1583,20 @@ The current tab is supplied as an argument."
   :group 'tab-bar
   :version "28.1")
 
-(defun tab-bar-change-tab-group (group-name &optional arg)
-  "Add the tab specified by its absolute position ARG to GROUP-NAME.
-If no ARG is specified, then set the GROUP-NAME for the current tab.
-ARG counts from 1.
+(defun tab-bar-change-tab-group (group-name &optional tab-number)
+  "Add the tab specified by its absolute position TAB-NUMBER to GROUP-NAME.
+If no TAB-NUMBER is specified, then set the GROUP-NAME for the current tab.
+TAB-NUMBER counts from 1.
 If GROUP-NAME is the empty string, then remove the tab from any group.
 While using this command, you might also want to replace
 `tab-bar-format-tabs' with `tab-bar-format-tabs-groups' in
 `tab-bar-format' to group tabs on the tab bar."
   (interactive
    (let* ((tabs (funcall tab-bar-tabs-function))
-          (tab-index (or current-prefix-arg
+          (tab-number (or current-prefix-arg
                          (1+ (tab-bar--current-tab-index tabs))))
           (group-name (funcall tab-bar-tab-group-function
-                               (nth (1- tab-index) tabs))))
+                               (nth (1- tab-number) tabs))))
      (list (completing-read
             "Group name for tab (leave blank to remove group): "
             (delete-dups
@@ -1524,8 +1606,8 @@ While using this command, you might also want to replace
                                      (funcall tab-bar-tabs-function))))))
            current-prefix-arg)))
   (let* ((tabs (funcall tab-bar-tabs-function))
-         (tab-index (if arg
-                        (1- (max 0 (min arg (length tabs))))
+         (tab-index (if tab-number
+                        (1- (max 0 (min tab-number (length tabs))))
                       (tab-bar--current-tab-index tabs)))
          (tab (nth tab-index tabs))
          (group (assq 'group tab))
@@ -1914,11 +1996,12 @@ The optional argument ALL-FRAMES specifies the frames 
to consider:
 
 - A frame means consider all tabs on that frame only.
 
-Any other value of ALL-FRAMES means consider all tabs on the
+- Any other value of ALL-FRAMES means consider all tabs on the
 selected frame and no others.
 
 When the optional argument IGNORE-CURRENT-TAB is non-nil,
-don't take into account the buffers in the currently selected tab."
+don't take into account the buffers in the currently selected tab.
+Otherwise, prefer buffers of the current tab."
   (let ((buffer (if buffer-or-name
                     (get-buffer buffer-or-name)
                   (current-buffer))))
@@ -1928,8 +2011,7 @@ don't take into account the buffers in the currently 
selected tab."
          (seq-some
           (lambda (tab)
             (when (if (eq (car tab) 'current-tab)
-                      (unless ignore-current-tab
-                        (get-buffer-window buffer frame))
+                      (get-buffer-window buffer frame)
                     (let* ((state (alist-get 'ws tab))
                            (buffers (when state
                                       (window-state-buffers state))))
@@ -1940,7 +2022,14 @@ don't take into account the buffers in the currently 
selected tab."
                        (member (buffer-name buffer) buffers))))
               (append tab `((index . ,(tab-bar--tab-index tab nil frame))
                             (frame . ,frame)))))
-          (funcall tab-bar-tabs-function frame)))
+          (let* ((tabs (funcall tab-bar-tabs-function frame))
+                 (current-tab (tab-bar--current-tab-find tabs)))
+            (setq tabs (remq current-tab tabs))
+            (if ignore-current-tab
+                ;; Use tabs without current-tab.
+                tabs
+              ;; Make sure current-tab is at the beginning of tabs.
+              (cons current-tab tabs)))))
        (tab-bar--reusable-frames all-frames)))))
 
 (defun display-buffer-in-tab (buffer alist)
@@ -1960,19 +2049,26 @@ The ALIST entry `tab-group' (string or function) 
defines the tab group.
 
 If ALIST contains a `reusable-frames' entry, its value determines
 which frames to search for a reusable tab:
-  nil -- the selected frame (actually the last non-minibuffer frame)
-  A frame   -- just that frame
-  `visible' -- all visible frames
-  0   -- all frames on the current terminal
-  t   -- all frames.
+  nil -- do not reuse any frames;
+  a frame  -- just that frame;
+  `visible' -- all visible frames;
+  0 -- all frames on the current terminal;
+  t -- all frames;
+  other non-nil values -- use the selected frame.
+
+If ALIST contains a non-nil `ignore-current-tab' entry, then the buffers
+of the current tab are skipped when searching for a reusable tab.
+Otherwise, prefer buffers of the current tab.
 
 This is an action function for buffer display, see Info
 node `(elisp) Buffer Display Action Functions'.  It should be
 called only by `display-buffer' or a function directly or
 indirectly called by the latter."
   (let* ((reusable-frames (alist-get 'reusable-frames alist))
+         (ignore-current-tab (alist-get 'ignore-current-tab alist))
          (reusable-tab (when reusable-frames
-                         (tab-bar-get-buffer-tab buffer reusable-frames))))
+                         (tab-bar-get-buffer-tab buffer reusable-frames
+                                                 ignore-current-tab))))
     (if reusable-tab
         (let* ((frame (alist-get 'frame reusable-tab))
                (index (alist-get 'index reusable-tab)))
diff --git a/lisp/tab-line.el b/lisp/tab-line.el
index d5fad35363..1f7af9e9a9 100644
--- a/lisp/tab-line.el
+++ b/lisp/tab-line.el
@@ -123,16 +123,17 @@ function `tab-line-tab-face-group'."
 
 (defvar tab-line-tab-map
   (let ((map (make-sparse-keymap)))
-    (define-key map [tab-line mouse-1] 'tab-line-select-tab)
+    (define-key map [tab-line down-mouse-1] 'tab-line-select-tab)
     (define-key map [tab-line mouse-2] 'tab-line-close-tab)
+    (define-key map [tab-line down-mouse-3] 'tab-line-tab-context-menu)
     (define-key map "\C-m" 'tab-line-select-tab)
     map)
   "Local keymap for `tab-line-mode' window tabs.")
 
 (defvar tab-line-add-map
   (let ((map (make-sparse-keymap)))
-    (define-key map [tab-line mouse-1] 'tab-line-new-tab)
-    (define-key map [tab-line mouse-2] 'tab-line-new-tab)
+    (define-key map [tab-line down-mouse-1] 'tab-line-new-tab)
+    (define-key map [tab-line down-mouse-2] 'tab-line-new-tab)
     (define-key map "\C-m" 'tab-line-new-tab)
     map)
   "Local keymap to add `tab-line-mode' window tabs.")
@@ -146,16 +147,16 @@ function `tab-line-tab-face-group'."
 
 (defvar tab-line-left-map
   (let ((map (make-sparse-keymap)))
-    (define-key map [tab-line mouse-1] 'tab-line-hscroll-left)
-    (define-key map [tab-line mouse-2] 'tab-line-hscroll-left)
+    (define-key map [tab-line down-mouse-1] 'tab-line-hscroll-left)
+    (define-key map [tab-line down-mouse-2] 'tab-line-hscroll-left)
     (define-key map "\C-m" 'tab-line-new-tab)
     map)
   "Local keymap to scroll `tab-line-mode' window tabs to the left.")
 
 (defvar tab-line-right-map
   (let ((map (make-sparse-keymap)))
-    (define-key map [tab-line mouse-1] 'tab-line-hscroll-right)
-    (define-key map [tab-line mouse-2] 'tab-line-hscroll-right)
+    (define-key map [tab-line down-mouse-1] 'tab-line-hscroll-right)
+    (define-key map [tab-line down-mouse-2] 'tab-line-hscroll-right)
     (define-key map "\C-m" 'tab-line-new-tab)
     map)
   "Local keymap to scroll `tab-line-mode' window tabs to the right.")
@@ -666,20 +667,20 @@ the selected tab visible."
     (when window
       (force-mode-line-update t))))
 
-(defun tab-line-hscroll-right (&optional arg mouse-event)
+(defun tab-line-hscroll-right (&optional arg event)
   (interactive (list current-prefix-arg last-nonmenu-event))
-  (let ((window (and (listp mouse-event) (posn-window (event-start 
mouse-event)))))
+  (let ((window (and (listp event) (posn-window (event-start event)))))
     (tab-line-hscroll arg window)
     (force-mode-line-update window)))
 
-(defun tab-line-hscroll-left (&optional arg mouse-event)
+(defun tab-line-hscroll-left (&optional arg event)
   (interactive (list current-prefix-arg last-nonmenu-event))
-  (let ((window (and (listp mouse-event) (posn-window (event-start 
mouse-event)))))
+  (let ((window (and (listp event) (posn-window (event-start event)))))
     (tab-line-hscroll (- (or arg 1)) window)
     (force-mode-line-update window)))
 
 
-(defun tab-line-new-tab (&optional mouse-event)
+(defun tab-line-new-tab (&optional event)
   "Add a new tab to the tab line.
 Usually is invoked by clicking on the plus-shaped button.
 But any switching to other buffer also adds a new tab
@@ -688,20 +689,20 @@ corresponding to the switched buffer."
   (if (functionp tab-line-new-tab-choice)
       (funcall tab-line-new-tab-choice)
     (let ((tab-line-tabs-buffer-groups mouse-buffer-menu-mode-groups))
-      (if (and (listp mouse-event)
+      (if (and (listp event)
                (display-popup-menus-p)
                (not tty-menu-open-use-tmm))
-          (mouse-buffer-menu mouse-event) ; like (buffer-menu-open)
+          (mouse-buffer-menu event) ; like (buffer-menu-open)
         ;; tty menu doesn't support mouse clicks, so use tmm
         (tmm-prompt (mouse-buffer-menu-keymap))))))
 
-(defun tab-line-select-tab (&optional e)
+(defun tab-line-select-tab (&optional event)
   "Switch to the selected tab.
 This command maintains the original order of prev/next buffers.
 So for example, switching to a previous tab is equivalent to
 using the `previous-buffer' command."
   (interactive "e")
-  (let* ((posnp (event-start e))
+  (let* ((posnp (event-start event))
          (tab (get-pos-property 1 'tab (car (posn-string posnp))))
          (buffer (if (bufferp tab) tab (cdr (assq 'buffer tab)))))
     (if buffer
@@ -743,12 +744,12 @@ when `tab-line-tabs-function' is 
`tab-line-tabs-window-buffers'."
   :group 'tab-line
   :version "28.1")
 
-(defun tab-line-switch-to-prev-tab (&optional mouse-event)
+(defun tab-line-switch-to-prev-tab (&optional event)
   "Switch to the previous tab.
 Its effect is the same as using the `previous-buffer' command
 (\\[previous-buffer])."
   (interactive (list last-nonmenu-event))
-  (let ((window (and (listp mouse-event) (posn-window (event-start 
mouse-event)))))
+  (let ((window (and (listp event) (posn-window (event-start event)))))
     (if (eq tab-line-tabs-function #'tab-line-tabs-window-buffers)
         (switch-to-prev-buffer window)
       (with-selected-window (or window (selected-window))
@@ -767,12 +768,12 @@ Its effect is the same as using the `previous-buffer' 
command
           (when (bufferp buffer)
             (switch-to-buffer buffer)))))))
 
-(defun tab-line-switch-to-next-tab (&optional mouse-event)
+(defun tab-line-switch-to-next-tab (&optional event)
   "Switch to the next tab.
 Its effect is the same as using the `next-buffer' command
 (\\[next-buffer])."
   (interactive (list last-nonmenu-event))
-  (let ((window (and (listp mouse-event) (posn-window (event-start 
mouse-event)))))
+  (let ((window (and (listp event) (posn-window (event-start event)))))
     (if (eq tab-line-tabs-function #'tab-line-tabs-window-buffers)
         (switch-to-next-buffer window)
       (with-selected-window (or window (selected-window))
@@ -806,13 +807,13 @@ This option is useful when `tab-line-tabs-function' has 
the value
   :group 'tab-line
   :version "27.1")
 
-(defun tab-line-close-tab (&optional mouse-event)
+(defun tab-line-close-tab (&optional event)
   "Close the selected tab.
 Usually is invoked by clicking on the close button on the right side
 of the tab.  This command buries the buffer, so it goes out of sight
 from the tab line."
   (interactive (list last-nonmenu-event))
-  (let* ((posnp (and (listp mouse-event) (event-start mouse-event)))
+  (let* ((posnp (and (listp event) (event-start event)))
          (window (and posnp (posn-window posnp)))
          (tab (get-pos-property 1 'tab (car (posn-string posnp))))
          (buffer (if (bufferp tab) tab (cdr (assq 'buffer tab))))
@@ -832,6 +833,22 @@ from the tab line."
         (funcall tab-line-close-tab-function tab)))
       (force-mode-line-update))))
 
+(defun tab-line-tab-context-menu (&optional event)
+  "Pop up context menu for the tab."
+  (interactive "e")
+  (let ((menu (make-sparse-keymap (propertize "Context Menu" 'hide t))))
+    (define-key-after menu [close]
+      '(menu-item "Close" tab-line-close-tab :help "Close the tab"))
+    (popup-menu menu event)))
+
+(defun tab-line-context-menu (&optional event)
+  "Pop up context menu for the tab line."
+  (interactive "e")
+  (let ((menu (make-sparse-keymap (propertize "Context Menu" 'hide t))))
+    (define-key-after menu [close]
+      '(menu-item "New tab" tab-line-new-tab :help "Create a new tab"))
+    (popup-menu menu event)))
+
 
 ;;;###autoload
 (define-minor-mode tab-line-mode
@@ -865,6 +882,8 @@ from the tab line."
   :version "27.1")
 
 
+(global-set-key [tab-line down-mouse-3] 'tab-line-context-menu)
+
 (global-set-key [tab-line mouse-4]    'tab-line-hscroll-left)
 (global-set-key [tab-line mouse-5]    'tab-line-hscroll-right)
 (global-set-key [tab-line wheel-up]   'tab-line-hscroll-left)
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el
index 411c71cd8c..db655619be 100644
--- a/lisp/tar-mode.el
+++ b/lisp/tar-mode.el
@@ -360,7 +360,7 @@ of the file header.  This is used for \"old GNU\" Tar 
format."
   #'tar-parse-octal-integer "27.1")
 
 (defun tar-parse-octal-integer-safe (string)
-  (if (zerop (length string)) (error "empty string"))
+  (if (zerop (length string)) (error "Empty string"))
   (mapc (lambda (c)
          (if (or (< c ?0) (> c ?7))
              (error "`%c' is not an octal digit" c)))
@@ -372,7 +372,7 @@ of the file header.  This is used for \"old GNU\" Tar 
format."
 The header will lack a proper checksum; use `tar-header-block-checksum'
 to compute one, or request `tar-header-serialize' to do that.
 
-Other tar-mode facilities may also require the data-start header
+Other `tar-mode' facilities may also require the data-start header
 field to be set to a valid value.
 
 If SIZE is not given or nil, it defaults to 0.
@@ -1241,7 +1241,7 @@ for this to be permanent."
   (interactive
     (list (read-string "New name: "
            (tar-header-name (tar-current-descriptor)))))
-  (if (string= "" new-name) (error "zero length name"))
+  (if (string= "" new-name) (error "Zero length name"))
   (let ((encoded-new-name (encode-coding-string new-name
                                                tar-file-name-coding-system))
         (descriptor (tar-current-descriptor))
@@ -1259,7 +1259,7 @@ for this to be permanent."
       (setq prefix (substring encoded-new-name 0 (match-beginning 0)))
       (setq encoded-new-name (substring encoded-new-name (match-end 0))))
 
-    (if (> (length encoded-new-name) 98) (error "name too long"))
+    (if (> (length encoded-new-name) 98) (error "Name too long"))
     (setf (tar-header-name descriptor) new-name)
     (tar-alter-one-field 0
      (substring (concat encoded-new-name (make-string 99 0)) 0 99))
diff --git a/lisp/tempo.el b/lisp/tempo.el
index 87e274a527..25f54af3c9 100644
--- a/lisp/tempo.el
+++ b/lisp/tempo.el
@@ -25,22 +25,22 @@
 ;;; Commentary:
 
 ;; This file provides a simple way to define powerful templates, or
-;; macros, if you wish. It is mainly intended for, but not limited to,
+;; macros, if you wish.  It is mainly intended for, but not limited to,
 ;; other programmers to be used for creating shortcuts for editing
-;; certain kind of documents. It was originally written to be used by
+;; certain kind of documents.  It was originally written to be used by
 ;; a HTML editing mode written by Nelson Minar <nelson@santafe.edu>,
 ;; and his html-helper-mode.el is probably the best example of how to
 ;; use this program.
 
 ;; A template is defined as a list of items to be inserted in the
-;; current buffer at point. Some of the items can be simple strings,
+;; current buffer at point.  Some of the items can be simple strings,
 ;; while other can control formatting or define special points of
 ;; interest in the inserted text.
 
 ;; If a template defines a "point of interest" that point is inserted
 ;; in a buffer-local list of "points of interest" that the user can
 ;; jump between with the commands `tempo-backward-mark' and
-;; `tempo-forward-mark'. If the template definer provides a prompt for
+;; `tempo-forward-mark'.  If the template definer provides a prompt for
 ;; the point, and the variable `tempo-interactive' is non-nil, the
 ;; user will be prompted for a string to be inserted in the buffer,
 ;; using the minibuffer.
@@ -49,21 +49,21 @@
 ;; current region if the template command is called with a prefix (or
 ;; a non-nil argument).
 
-;; More flexible templates can be created by including lisp symbols,
+;; More flexible templates can be created by including Lisp symbols,
 ;; which will be evaluated as variables, or lists, which will be
-;; evaluated as lisp expressions.
+;; evaluated as Lisp expressions.
 
 ;; See the documentation for tempo-define-template for the different
 ;; items that can be used to define a tempo template.
 
 ;; One of the more powerful features of tempo templates are automatic
-;; completion. With every template can be assigned a special tag that
+;; completion.  With every template can be assigned a special tag that
 ;; should be recognized by `tempo-complete-tag' and expanded to the
-;; complete template. By default the tags are added to a global list
+;; complete template.  By default the tags are added to a global list
 ;; of template tags, and are matched against the last word before
-;; point. But if you assign your tags to a specific list, you can also
+;; point.  But if you assign your tags to a specific list, you can also
 ;; specify another method for matching text in the buffer against the
-;; tags. In the HTML mode, for instance, the tags are matched against
+;; tags.  In the HTML mode, for instance, the tags are matched against
 ;; the text between the last `<' and point.
 
 ;; When defining a template named `foo', a symbol named
@@ -177,7 +177,7 @@ If `tempo-match-finder' is a string, it should contain a 
regular
 expression with at least one \\( \\) pair.  When searching for tags,
 `tempo-complete-tag' calls `re-search-backward' with this string, and
 the string between the first \\( and \\) is used for matching against
-each string in the tag list. If one is found, the whole text between
+each string in the tag list.  If one is found, the whole text between
 the first \\( and the point is replaced with the inserted template.
 
 You will probably want to include \\=\\= at the end of the regexp to
@@ -247,7 +247,7 @@ The elements in ELEMENTS can be of several types:
    happens when you call the template function with a prefix argument.
  - (s NAME): Inserts text previously read with the (p ..) construct.
    Finds the insertion saved under NAME and inserts it.  Acts like `p'
-   if tempo-interactive is nil.
+   if `tempo-interactive' is nil.
  - `&': If there is only whitespace between the line start and point,
    nothing happens.  Otherwise a newline is inserted.
  - `%': If there is only whitespace between point and end of line,
@@ -319,8 +319,8 @@ mode, ON-REGION is ignored and assumed true if the region 
is active."
 ;;; tempo-insert
 
 (defun tempo-insert (element on-region)
-  "Insert a template element.
-Insert one element from a template. If ON-REGION is non-nil the `r'
+  "Insert a template ELEMENT.
+Insert one element from a template.  If ON-REGION is non-nil the `r'
 elements are replaced with the current region.
 
 See documentation for `tempo-define-template' for the kind of elements
@@ -465,7 +465,7 @@ never prompted."
 ;;; tempo-save-named
 
 (defun tempo-save-named (name data)    ; Had an optional prompt for 'v
-  "Save some data for later insertion
+  "Save some data for later insertion.
 The contents of DATA is saved under the name NAME.
 
 The data can later be retrieved with `tempo-lookup-named'.
@@ -615,7 +615,7 @@ COMPLETION-FUNCTION just sets `tempo-match-finder' locally."
 ;;; tempo-invalidate-collection
 
 (defun tempo-invalidate-collection (&optional global)
-  "Marks the tag collection as obsolete.
+  "Mark the tag collection as obsolete.
 Whenever it is needed again it will be rebuilt.  If GLOBAL is non-nil,
 mark the tag collection of all buffers as obsolete, not just the
 current one."
diff --git a/lisp/term.el b/lisp/term.el
index 0bcd095283..42b2e5a248 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -35,7 +35,7 @@
 
 ;; This file defines a general command-interpreter-in-a-buffer package
 ;; (term mode).  The idea is that you can build specific process-in-a-buffer
-;; modes on top of term mode -- e.g., lisp, shell, scheme, T, soar, ....
+;; modes on top of term mode -- e.g., Lisp, shell, Scheme, T, soar, ....
 ;; This way, all these specific packages share a common base functionality,
 ;; and a common set of bindings, which makes them easier to use (and
 ;; saves code, implementation time, etc., etc.).
@@ -3126,7 +3126,7 @@ See `term-prompt-regexp'."
                   (setq win (next-window win nil t))
                   (when (eq (window-buffer win) (process-buffer proc))
                     (let ((scroll term-scroll-to-bottom-on-output))
-                      (select-window win)
+                      (select-window win t)
                       (when (or (= (point) save-marker)
                                 (eq scroll t) (eq scroll 'all)
                                 ;; Maybe user wants point to jump to the end.
diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el
index af1e388c2a..1a3811a37c 100644
--- a/lisp/term/ns-win.el
+++ b/lisp/term/ns-win.el
@@ -586,8 +586,8 @@ string dropped into the current buffer."
 ;; Based on a function by David Reitter <dreitter@inf.ed.ac.uk> ;
 ;; see https://lists.gnu.org/r/emacs-devel/2005-09/msg00681.html .
 (defun ns-toggle-toolbar (&optional frame)
-  "Switches the tool bar on and off in frame FRAME.
- If FRAME is nil, the change applies to the selected frame."
+  "Switch the tool bar on and off in frame FRAME.
+If FRAME is nil, the change applies to the selected frame."
   (interactive)
   (modify-frame-parameters
    frame (list (cons 'tool-bar-lines
diff --git a/lisp/term/sun.el b/lisp/term/sun.el
index 3dfd4c697a..4c88c80bf7 100644
--- a/lisp/term/sun.el
+++ b/lisp/term/sun.el
@@ -38,7 +38,7 @@
   (scroll-up n))
 
 (defun kill-region-and-unmark (beg end)
-  "Like `kill-region', but pops the mark [which equals point, anyway.]"
+  "Like `kill-region', but pops the mark [which equals point, anyway]."
   (interactive "r")
   (kill-region beg end)
   (setq this-command 'kill-region-and-unmark)
@@ -49,7 +49,7 @@
   (interactive)
   (eval (nth 0 command-history)))
 
-(defvar grep-arg nil "Default arg for RE-search")
+(defvar grep-arg nil "Default arg for RE-search.")
 (defun grep-arg ()
   (if (memq last-command '(research-forward research-backward)) grep-arg
     (let* ((command (car command-history))
diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el
index 8c6c75e7e2..d6e6318748 100644
--- a/lisp/term/x-win.el
+++ b/lisp/term/x-win.el
@@ -131,7 +131,7 @@ When a session manager tells Emacs that the window system 
is shutting
 down, this function is called.  It calls the functions in the hook
 `emacs-save-session-functions'.  Functions are called with the current
 buffer set to a temporary buffer.  Functions should use `insert' to insert
-lisp code to save the session state.  The buffer is saved in a file in the
+Lisp code to save the session state.  The buffer is saved in a file in the
 home directory of the user running Emacs.  The file is evaluated when
 Emacs is restarted by the session manager.
 
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 95187d5d11..52a64d6c41 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -790,14 +790,13 @@ Return the pasted text as a string."
 Can be nil to mean \"no timeout\".")
 
 (defvar xterm-query-redisplay-timeout 0.2
-  "Seconds to wait before allowing redisplay during terminal
-  query." )
+  "Seconds to wait before allowing redisplay during terminal query." )
 
 (defun xterm--read-event-for-query ()
-  "Like read-event, but inhibit redisplay.
+  "Like `read-event', but inhibit redisplay.
 
 By not redisplaying right away for xterm queries, we can avoid
-unsightly flashing during initialization. Give up and redisplay
+unsightly flashing during initialization.  Give up and redisplay
 anyway if we've been waiting a little while."
   (let ((start-time (current-time)))
     (or (let ((inhibit-redisplay t))
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el
index d9a83c566b..c42286e5bc 100644
--- a/lisp/textmodes/artist.el
+++ b/lisp/textmodes/artist.el
@@ -1277,7 +1277,7 @@ Drawing with keys
 
  \\[artist-key-set-point]              Does one of the following:
                For lines/rectangles/squares: sets the first/second endpoint
-               For poly-lines: sets a point (use C-u \\[artist-key-set-point] 
to set last point)
+                For poly-lines: sets a point (use \\[universal-argument] 
\\[artist-key-set-point] to set last point)
                When erase characters: toggles erasing
                When cutting/copying: Sets first/last endpoint of rect/square
                When pasting: Pastes
@@ -4891,7 +4891,7 @@ If optional argument STATE is positive, turn borders on."
            (+ window-y window-start-y))))
 
 (defun artist--adjust-x (x)
-  "Adjust the X position wrt. `display-line-numbers-mode'."
+  "Adjust the X position with regards to `display-line-numbers-mode'."
   (let ((adjust (line-number-display-width)))
     (if (= adjust 0)
         x
diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el
index d5671ce14f..237a1d9935 100644
--- a/lisp/textmodes/bibtex.el
+++ b/lisp/textmodes/bibtex.el
@@ -1569,8 +1569,8 @@ Set this variable before loading BibTeX mode."
     km)
   "Keymap used in BibTeX mode.")
 
-(easy-menu-define
-  bibtex-edit-menu bibtex-mode-map "BibTeX-Edit Menu in BibTeX mode"
+(easy-menu-define bibtex-edit-menu bibtex-mode-map
+  "BibTeX-Edit Menu in BibTeX mode."
   '("BibTeX-Edit"
     ("Moving inside an Entry"
      ["End of Field" bibtex-find-text t]
diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el
index 57ec8a0428..30f8fd0ca9 100644
--- a/lisp/textmodes/conf-mode.el
+++ b/lisp/textmodes/conf-mode.el
@@ -615,7 +615,7 @@ For details see `conf-mode'.  Example:
   (conf-mode-initialize "!"))
 
 (defun conf-toml-recognize-section (limit)
-  "Font-lock helper function for conf-toml-mode.
+  "Font-lock helper function for `conf-toml-mode'.
 Handles recognizing TOML section names, like [section],
 \[[section]], or [something.\"else\".section]."
   (save-excursion
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index d57f2d5493..9f123dc816 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -1156,7 +1156,7 @@ by `css--colors-regexp'.  START-POINT is the start of the 
color,
 and MATCH is the string matched by the regexp.
 
 This function will either return the color, as a hex RGB string;
-or `nil' if no color could be recognized.  When this function
+or nil if no color could be recognized.  When this function
 returns, point will be at the end of the recognized color."
   (cond
    ((eq (aref match 0) ?#)
@@ -1170,7 +1170,7 @@ returns, point will be at the end of the recognized 
color."
 
 (defcustom css-fontify-colors t
   "Whether CSS colors should be fontified using the color as the background.
-When non-`nil', a text representing CSS color will be fontified
+When non-nil, a text representing CSS color will be fontified
 such that its background is the color itself.  E.g., #ff0000 will
 be fontified with a red background."
   :version "26.1"
diff --git a/lisp/textmodes/enriched.el b/lisp/textmodes/enriched.el
index 877658a5a5..4a5a5ab367 100644
--- a/lisp/textmodes/enriched.el
+++ b/lisp/textmodes/enriched.el
@@ -34,7 +34,7 @@
 ;; A separate file, enriched.txt, contains further documentation and other
 ;; important information about this code.  It also serves as an example
 ;; file in text/enriched format.  It should be in the etc directory of your
-;; emacs distribution.
+;; Emacs distribution.
 
 ;;; Code:
 
@@ -191,6 +191,7 @@ The value is a list of \(VAR VALUE VAR VALUE...).")
     (define-key map "\C-x\t" #'increase-left-margin)
     (define-key map "\C-c[" #'set-left-margin)
     (define-key map "\C-c]" #'set-right-margin)
+    (define-key map "\M-o" #'facemenu-keymap)
     map)
   "Keymap for Enriched mode.")
 
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index f394171fb6..81d908c95e 100644
--- a/lisp/textmodes/fill.el
+++ b/lisp/textmodes/fill.el
@@ -1064,7 +1064,7 @@ than line breaks untouched, and fifth arg TO-EOP non-nil 
means
 to keep filling to the end of the paragraph (or next hard newline,
 if variable `use-hard-newlines' is on).
 
-Return the fill-prefix used for filling the last paragraph.
+Return the `fill-prefix' used for filling the last paragraph.
 
 If `sentence-end-double-space' is non-nil, then period followed by one
 space does not end a sentence, so don't break a line there."
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 975f540936..9b3211df57 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -470,7 +470,7 @@ See also `flyspell-duplicate-distance'."
 
 (defvar flyspell-overlay nil)
 
-(defun flyspell-context-menu (_menu)
+(defun flyspell-context-menu (_menu _click)
   "Context menu for `context-menu-mode'."
   ;; TODO: refactor `flyspell-correct-word' and related functions to return
   ;; a keymap menu where every menu item is bound to a lambda that calls
@@ -546,7 +546,7 @@ in your init file.
 (custom-add-option 'text-mode-hook 'turn-on-flyspell)
 
 (defvar flyspell-buffers nil
-  "For remembering buffers running flyspell")
+  "For remembering buffers running flyspell.")
 (make-obsolete-variable 'flyspell-buffers "not used." "28.1")
 
 ;;*---------------------------------------------------------------------*/
@@ -702,8 +702,8 @@ has been used, the current word is not checked."
 ;;*    has to be spell checked.                                         */
 ;;*---------------------------------------------------------------------*/
 (defvar flyspell-pre-buffer     nil "Buffer current before `this-command'.")
-(defvar flyspell-pre-point      nil "Point before running `this-command'")
-(defvar flyspell-pre-column     nil "Column before running `this-command'")
+(defvar flyspell-pre-point      nil "Point before running `this-command'.")
+(defvar flyspell-pre-column     nil "Column before running `this-command'.")
 (defvar flyspell-pre-pre-buffer nil)
 (defvar flyspell-pre-pre-point  nil)
 (make-variable-buffer-local 'flyspell-pre-point) ;Why??  --Stef
@@ -1746,7 +1746,7 @@ FLYSPELL-BUFFER."
 ;;*    flyspell-overlay-p ...                                           */
 ;;*---------------------------------------------------------------------*/
 (defun flyspell-overlay-p (o)
-  "Return true if O is an overlay used by flyspell."
+  "Return non-nil if O is an overlay used by flyspell."
   (and (overlayp o) (overlay-get o 'flyspell-overlay)))
 
 ;;*---------------------------------------------------------------------*/
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index 3b9f1d3512..5842bf5f9f 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -60,7 +60,7 @@
 ;; `a': Accept word for this session.
 ;; `A': Accept word and place in buffer-local dictionary.
 ;; `r': Replace word with typed-in value.  Rechecked.
-;; `R': Replace word with typed-in value. Query-replaced in buffer. Rechecked.
+;; `R': Replace word with typed-in value.  Query-replaced in buffer.  
Rechecked.
 ;; `?': Show these commands
 ;; `x': Exit spelling buffer.  Move cursor to original point.
 ;; `X': Exit spelling buffer.  Leaves cursor at the current point, and permits
@@ -621,7 +621,7 @@ this would require some extra guessing in 
`ispell-aspell-find-dictionary'.")
     ("svenska"       "sv_SE")
     ("hebrew"        "he_IL"))
   "Alist with known matching locales for standard dict names in
-  `ispell-dictionary-base-alist'.")
+`ispell-dictionary-base-alist'.")
 
 
 ;;; **********************************************************************
@@ -731,8 +731,7 @@ Otherwise returns the library directory name, if that is 
defined."
     result))
 
 (defmacro ispell-with-safe-default-directory (&rest body)
-  "Execute the forms in BODY with a reasonable
-`default-directory'."
+  "Execute the forms in BODY with a reasonable `default-directory'."
   (declare (indent 0) (debug t))
   `(let ((default-directory default-directory))
      (unless (file-accessible-directory-p default-directory)
@@ -2530,7 +2529,7 @@ if defined."
       ;; `grep' returns status 1 and no output when word not found, which
       ;; is a perfectly normal thing.
       (if (stringp status)
-          (error "error: %s exited with signal %s"
+          (error "Error: %s exited with signal %s"
                  (file-name-nondirectory prog) status)
         ;; Else collect words into `results' in FIFO order.
         (goto-char (point-max))
@@ -4090,7 +4089,7 @@ Includes LaTeX/Nroff modes and extended character mode."
 ;; Can kill the current ispell process
 
 (defun ispell-buffer-local-dict (&optional no-reload)
-  "Initializes local dictionary and local personal dictionary.
+  "Initialize local dictionary and local personal dictionary.
 If optional NO-RELOAD is non-nil, do not reload any dictionary.
 When a dictionary is defined in the buffer (see variable
 `ispell-dictionary-keyword'), it will override the local setting
diff --git a/lisp/textmodes/page-ext.el b/lisp/textmodes/page-ext.el
index 87c91e8f1b..558d6b81d7 100644
--- a/lisp/textmodes/page-ext.el
+++ b/lisp/textmodes/page-ext.el
@@ -257,7 +257,7 @@
 ;;; Addresses related variables
 
 (defcustom pages-addresses-file-name "~/addresses"
-  "Standard name for file of addresses. Entries separated by page-delimiter.
+  "Standard name for file of addresses.  Entries separated by `page-delimiter'.
 Used by `pages-directory-for-addresses' function."
   :type 'file)
 
diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el
index 1d5d1caeab..cb7f275ea6 100644
--- a/lisp/textmodes/picture.el
+++ b/lisp/textmodes/picture.el
@@ -514,7 +514,7 @@ Interactively, reads the register using 
`register-read-with-preview'."
           (move-to-column column t))))
 
 (defun picture-yank-rectangle (&optional insertp)
-  "Overlay rectangle saved by \\[picture-clear-rectangle]
+  "Overlay rectangle saved by \\[picture-clear-rectangle].
 The rectangle is positioned with upper left corner at point, overwriting
 existing text.  With prefix argument, the rectangle is inserted instead,
 shifting existing text.  Leaves mark at one corner of rectangle and
@@ -699,10 +699,10 @@ afterwards settable by these commands:
  Move southwest (sw) after insertion:  \\[picture-movement-sw]
  Move southeast (se) after insertion:  \\[picture-movement-se]
 
- Move westnorthwest (wnw) after insertion:  C-u \\[picture-movement-nw]
- Move eastnortheast (ene) after insertion:  C-u \\[picture-movement-ne]
- Move westsouthwest (wsw) after insertion:  C-u \\[picture-movement-sw]
- Move eastsoutheast (ese) after insertion:  C-u \\[picture-movement-se]
+ Move westnorthwest (wnw) after insertion:  \\[universal-argument] 
\\[picture-movement-nw]
+ Move eastnortheast (ene) after insertion:  \\[universal-argument] 
\\[picture-movement-ne]
+ Move westsouthwest (wsw) after insertion:  \\[universal-argument] 
\\[picture-movement-sw]
+ Move eastsoutheast (ese) after insertion:  \\[universal-argument] 
\\[picture-movement-se]
 
 The current direction is displayed in the mode line.  The initial
 direction is right.  Whitespace is inserted and tabs are changed to
diff --git a/lisp/textmodes/refbib.el b/lisp/textmodes/refbib.el
index 084b17c676..ce556be00d 100644
--- a/lisp/textmodes/refbib.el
+++ b/lisp/textmodes/refbib.el
@@ -195,7 +195,7 @@ This is in addition to the 
`r2b-capitalize-title-stop-words'.")
         (sit-for 0))))
 
 (defun r2b-match (exp)
-   "Returns string matched in current buffer."
+   "Return string matched in current buffer."
    (buffer-substring (match-beginning exp) (match-end exp)))
 
 (defcustom r2b-out-buf-name "*Out*"
diff --git a/lisp/textmodes/reftex-cite.el b/lisp/textmodes/reftex-cite.el
index 895064b82f..8a54b1a301 100644
--- a/lisp/textmodes/reftex-cite.el
+++ b/lisp/textmodes/reftex-cite.el
@@ -30,11 +30,11 @@
 
 ;;; Variables and constants
 (defvar reftex-cite-regexp-hist nil
-  "The history list of regular expressions used for citations")
+  "The history list of regular expressions used for citations.")
 
 (defconst reftex-citation-prompt
   "Select: [n]ext [p]revious [r]estrict [ ]full_entry [q]uit RET [?]Help+more"
-  "Prompt and help string for citation selection")
+  "Prompt and help string for citation selection.")
 
 (defconst reftex-citation-help
   " n / p      Go to next/previous entry (Cursor motion works as well).
@@ -221,7 +221,7 @@ Return list with entries."
     (if (string-match "\\`[ \t]*\\'" (or first-re ""))
         (user-error "Empty regular expression"))
     (if (string-match first-re "")
-        (user-error "Regular expression matches the empty string."))
+        (user-error "Regular expression matches the empty string"))
 
     (save-excursion
       (save-window-excursion
@@ -628,7 +628,7 @@ If NO-INSERT is non-nil, nothing is inserted, only the 
selected key returned.
 
 FORMAT-KEY can be used to pre-select a citation format.
 
-When called with a `C-u' prefix, prompt for optional arguments in
+When called with a \\[universal-argument] prefix, prompt for optional 
arguments in
 cite macros.  When called with a numeric prefix, make that many
 citations.  When called with point inside the braces of a `\\cite'
 command, it will add another key, ignoring the value of
diff --git a/lisp/textmodes/reftex-dcr.el b/lisp/textmodes/reftex-dcr.el
index a21dd3362b..abcf119fb8 100644
--- a/lisp/textmodes/reftex-dcr.el
+++ b/lisp/textmodes/reftex-dcr.el
@@ -42,7 +42,7 @@ which uses this KEY. When on an `\\index', show other 
locations marked
 by the same index entry.
 To define additional cross referencing items, use the option
 `reftex-view-crossref-extra'.  See also `reftex-view-crossref-from-bibtex'.
-With one or two C-u prefixes, enforce rescanning of the document.
+With one or two \\[universal-argument] prefixes, enforce rescanning of the 
document.
 With argument 2, select the window showing the cross reference.
 AUTO-HOW is only for the automatic crossref display and is handed through
 to the functions `reftex-view-cr-cite' and `reftex-view-cr-ref'."
diff --git a/lisp/textmodes/reftex-index.el b/lisp/textmodes/reftex-index.el
index 28cc7db2dc..a6df4fb7af 100644
--- a/lisp/textmodes/reftex-index.el
+++ b/lisp/textmodes/reftex-index.el
@@ -38,8 +38,8 @@
   "Put selection or the word near point into the default index macro.
 This uses the information in `reftex-index-default-macro' to make an index
 entry.  The phrase indexed is the current selection or the word near point.
-When called with one `C-u' prefix, let the user have a chance to edit the
-index entry.  When called with 2 `C-u' as prefix, also ask for the index
+When called with one \\[universal-argument] prefix, let the user have a chance 
to edit the
+index entry.  When called with 2 \\[universal-argument] as prefix, also ask 
for the index
 macro and other stuff.
 When called inside TeX math mode as determined by the `texmathp.el' library
 which is part of AUCTeX, the string is first processed with the
@@ -462,7 +462,7 @@ _ ^        Add/Remove parent key (to make this item a 
subitem).
   "Display a buffer with an index compiled from the current document.
 When the document has multiple indices, first prompts for the correct one.
 When index support is turned off, offer to turn it on.
-With one or two `C-u' prefixes, rescan document first.
+With one or two \\[universal-argument] prefixes, rescan document first.
 With prefix 2, restrict index to current document section.
 With prefix 3, restrict index to region."
 
@@ -842,7 +842,7 @@ The function will go to the section where the entry at 
point was defined."
   (reftex-display-index nil nil 'redo))
 
 (defun reftex-index-restrict-to-section (&optional force)
-  "Restrict index to entries defined in same document sect. as entry at point."
+  "Restrict index to entries defined in same document section as entry at 
point."
   ;; Optional FORCE means, even if point is not on an index entry.
   (interactive)
   (let* ((data (get-text-property (point) :data))
@@ -1150,7 +1150,7 @@ When index is restricted, select the previous section as 
restriction criterion."
 
 ;; Some constants and variables
 (defconst reftex-index-phrases-comment-regexp "^[ \t]*%.*"
-  "Regular expression to match comment lines in phrases buffer")
+  "Regular expression to match comment lines in phrases buffer.")
 (defconst reftex-index-phrases-macrodef-regexp
   "^\\(>>>INDEX_MACRO_DEFINITION:\\)[ \t]+\\(\\S-\\)\\( *\t[ 
\t]*\\)\\([^\t]*[^ \t]\\)\\( *\t[ \t]*\\)\\(\\S-+\\)"
   "Regular expression to match macro definition lines the phrases buffer.")
@@ -2068,7 +2068,7 @@ both ends."
 
 (defun reftex-index-phrases-replace-space (pos)
   "If there is a space at POS, replace it with a newline char.
-Does not do a save-excursion."
+Does not do a `save-excursion'."
   (when (equal (char-after pos) ?\ )
     (goto-char pos)
     (delete-char 1)
diff --git a/lisp/textmodes/reftex-ref.el b/lisp/textmodes/reftex-ref.el
index 1908182593..9d5bc5a8f0 100644
--- a/lisp/textmodes/reftex-ref.el
+++ b/lisp/textmodes/reftex-ref.el
@@ -415,7 +415,7 @@ reftex-label.  Rescanning of the buffer can also be 
requested from the
 label selection menu.
 The function returns the selected label or nil.
 If NO-INSERT is non-nil, do not insert \\ref command, just return label.
-When called with 2 C-u prefix args, disable magic word recognition."
+When called with 2 \\[universal-argument] prefix args, disable magic word 
recognition."
 
   (interactive)
 
diff --git a/lisp/textmodes/reftex-toc.el b/lisp/textmodes/reftex-toc.el
index b564349133..7ca2fb827e 100644
--- a/lisp/textmodes/reftex-toc.el
+++ b/lisp/textmodes/reftex-toc.el
@@ -180,7 +180,7 @@ z          Jump to a specific section (e.g. '3 z' goes to 
section 3).")
 (defun reftex-toc (&optional _rebuild reuse)
   ;; FIXME: Get rid of the `rebuild' argument.
   "Show the table of contents for the current document.
-When called with a raw C-u prefix, rescan the document first."
+When called with a raw \\[universal-argument] prefix, rescan the document 
first."
 
 ;; The REUSE argument means, search all visible frames for a window
 ;; displaying the toc window.  If yes, reuse this window.
diff --git a/lisp/textmodes/reftex-vars.el b/lisp/textmodes/reftex-vars.el
index 96065ee69e..23f2193501 100644
--- a/lisp/textmodes/reftex-vars.el
+++ b/lisp/textmodes/reftex-vars.el
@@ -263,7 +263,7 @@ distribution.  Mixed-case symbols are convenience aliases.")
 (defgroup reftex nil
   "LaTeX label and citation support."
   :tag "RefTeX"
-  :link '(url-link :tag "Home Page"
+  :link '(url-link :tag "Website"
                    "https://www.gnu.org/software/auctex/reftex.html";)
   :link '(emacs-commentary-link :tag "Commentary in reftex.el" "reftex.el")
   :link '(custom-manual "(reftex)Top")
@@ -433,8 +433,8 @@ This flag can be toggled from within the *toc* buffer with 
the `f' key."
   :type 'boolean)
 
 (defcustom reftex-revisit-to-follow nil
-  "Non-nil means, follow-mode will revisit files if necessary.
-If nil, follow-mode will be suspended for stuff in unvisited files."
+  "Non-nil means, `follow-mode' will revisit files if necessary.
+If nil, `follow-mode' will be suspended for stuff in unvisited files."
   :group 'reftex-table-of-contents-browser
   :group 'reftex-referencing-labels
   :type 'boolean)
@@ -1292,7 +1292,7 @@ prompt for values.  Possible values are:
 
 nil     Never prompt for optional arguments
 t       Always prompt
-maybe   Prompt only if `reftex-citation' was called with C-u prefix arg
+maybe   Prompt only if `reftex-citation' was called with 
\\[universal-argument] prefix arg
 
 Unnecessary empty optional arguments are removed before insertion into
 the buffer.  See `reftex-cite-cleanup-optional-args'."
@@ -1694,8 +1694,8 @@ entries and for BibTeX database files with live 
associated buffers."
   "Non-nil means, echoed information for cite macros is cached.
 The information displayed in the echo area for cite macros is
 cached and even saved along with the parsing information.  The
-cache survives document scans.  In order to clear it, use M-x
-reftex-reset-mode <RET>."
+cache survives document scans.  In order to clear it, use
+\\[reftex-reset-mode]."
   :group 'reftex-viewing-cross-references
   :type 'boolean)
 
@@ -1861,11 +1861,11 @@ of the regular expressions in this list, that file is 
not parsed by RefTeX."
 
 (defcustom reftex-enable-partial-scans nil
   "Non-nil means, re-parse only 1 file when asked to re-parse.
-Re-parsing is normally requested with a `C-u' prefix to many RefTeX commands,
+Re-parsing is normally requested with a \\[universal-argument] prefix to many 
RefTeX commands,
 or with the `r' key in menus.  When this option is t in a multifile document,
 we will only parse the current buffer, or the file associated with the label
 or section heading near point in a menu.  Requesting re-parsing of an entire
-multifile document then requires a `C-u C-u' prefix or the capital `R' key
+multifile document then requires a \\[universal-argument] 
\\[universal-argument] prefix or the capital `R' key
 in menus."
   :group 'reftex-optimizations-for-large-documents
   :type 'boolean)
diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el
index 1cb2cf40c3..c926b05634 100644
--- a/lisp/textmodes/reftex.el
+++ b/lisp/textmodes/reftex.el
@@ -1,4 +1,5 @@
 ;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX  
-*- lexical-binding: t; -*-
+
 ;; Copyright (C) 1997-2000, 2003-2021 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
@@ -1930,7 +1931,7 @@ When DIE is non-nil, throw an error if file not found."
 (defun reftex-convert-string (string split-re invalid-re dot keep-fp
                                      nwords maxchar invalid abbrev sep
                                      ignore-words &optional downcase)
-  "Convert a string (a sentence) to something shorter.
+  "Convert STRING (a sentence) to something shorter.
 SPLIT-RE     is the regular expression used to split the string into words.
 INVALID-RE   matches characters which are invalid in the final string.
 DOT          t means add dots to abbreviated words.
@@ -2139,7 +2140,7 @@ IGNORE-WORDS List of words which should be removed from 
the string."
 (make-variable-buffer-local 'reftex-isearch-minor-mode)
 
 (easy-menu-define reftex-mode-menu reftex-mode-map
- "Menu used in RefTeX mode"
+ "Menu used in RefTeX mode."
  `("Ref"
    ["Table of Contents"       reftex-toc t]
    ["Recenter TOC"            reftex-toc-recenter t]
diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el
index 1471be0ecd..ed1d721f82 100644
--- a/lisp/textmodes/rst.el
+++ b/lisp/textmodes/rst.el
@@ -2444,7 +2444,7 @@ PREFER-ROMAN roman numbering is preferred over using 
letters."
     tab))
 
 ;; FIXME: At least the continuation may be folded into
-;;        `newline-and-indent`. However, this may not be wanted by everyone so
+;;        'newline-and-indent'. However, this may not be wanted by everyone so
 ;;        it should be possible to switch this off.
 (defun rst-insert-list (&optional prefer-roman)
   ;; testcover: ok.
@@ -2915,7 +2915,7 @@ error if there is no working link at the given position."
     (pop-to-buffer (marker-buffer mrkr))
     (goto-char mrkr)
     ;; FIXME: Should be a customizable number of lines from beginning or end of
-    ;;        window just like the argument to `recenter`. It would be ideal if
+    ;;        window just like the argument to 'recenter'. It would be ideal if
     ;;        the adornment is always completely visible.
     (recenter 5)))
 
@@ -2995,7 +2995,7 @@ burying it."
 (define-derived-mode rst-toc-mode special-mode "ReST-TOC"
   "Major mode for output from \\[rst-toc], the table-of-contents for the 
document.
 \\{rst-toc-mode-map}"
-  ;; FIXME: `revert-buffer-function` must be defined so `revert-buffer` works
+  ;; FIXME: 'revert-buffer-function' must be defined so 'revert-buffer' works
   ;;        as expected for a special mode. In particular the referred buffer
   ;;        needs to be rescanned and the TOC must be updated accordingly.
   ;; FIXME: Should contain the name of the buffer this is the toc of.
@@ -3217,7 +3217,7 @@ Return a list of tabs sorted by likeliness to continue 
writing
 like `rst-line-tabs'.  Nearer lines have generally a higher
 likeliness than farther lines.  Return nil if no tab is found in
 the text above."
-  ;; FIXME: See test `indent-for-tab-command-BUGS`.
+  ;; FIXME: See test 'indent-for-tab-command-BUGS'.
   (save-excursion
     (goto-char pt)
     (let (leftmost ; Leftmost column found so far.
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index fda00ec367..7ef8161ab5 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -1208,7 +1208,7 @@ and move to the line in the SGML document that caused it."
   (compilation-start command))
 
 (defsubst sgml-at-indentation-p ()
-  "Return true if point is at the first non-whitespace character on the line."
+  "Return t if point is at the first non-whitespace character on the line."
   (save-excursion
     (skip-chars-backward " \t")
     (bolp)))
@@ -1835,6 +1835,7 @@ This takes effect when first loading the library.")
       (define-key map "\C-cs" 'html-span))
     (define-key map "\C-c\C-s" 'html-autoview-mode)
     (define-key map "\C-c\C-v" 'browse-url-of-buffer)
+    (define-key map "\M-o" 'facemenu-keymap)
     map)
   "Keymap for commands for use in HTML mode.")
 
@@ -2372,10 +2373,11 @@ can also view with a browser to see what happens:
 have <h1>Very Major Headlines</h1> through <h6>Very Minor Headlines</h6>
 <hr> Parts can be separated with horizontal rules.
 
-<p>Paragraphs only need an opening tag.  Line breaks and multiple spaces are
-ignored unless the text is <pre>preformatted.</pre>  Text can be marked as
-<strong>bold</strong>, <em>italic</em> or <u>underlined</u> using the normal 
M-o
-or Edit/Text Properties/Face commands.
+<p>Paragraphs only need an opening tag.  Line breaks and multiple
+spaces are ignored unless the text is <pre>preformatted.</pre>
+Text can be marked as <strong>bold</strong>, <em>italic</em> or
+<u>underlined</u> using the facemenu M-o or Edit/Text
+Properties/Face commands.
 
 Pages can have <a name=\"SOMENAME\">named points</a> and can link other points
 to them with <a href=\"#SOMENAME\">see also somename</a>.  In the same way <a
@@ -2614,7 +2616,7 @@ HTML Autoview mode is a buffer-local minor mode for use 
with
   "</nav>")
 
 (define-skeleton html-html5-template
-  "Initial HTML5 template"
+  "Initial HTML5 template."
   nil
   "<!DOCTYPE html>" \n
   "<html lang=\"en\">" \n
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index 2dd52b87b7..fef5ad2c7a 100644
--- a/lisp/textmodes/table.el
+++ b/lisp/textmodes/table.el
@@ -61,7 +61,7 @@
 ;; holders.  Amazingly there have been no direct support for WYSIWYG
 ;; table editing tasks in Emacs.  Many people must have experienced
 ;; manipulating existing overwrite-mode and picture-mode for this task
-;; and only dreamed of having such a lisp package which supports this
+;; and only dreamed of having such a Lisp package which supports this
 ;; specific task directly.  Certainly, I have been one of them.  The
 ;; most difficult part of dealing with table editing in Emacs probably
 ;; is how to realize localized rectangular editing effect.  Emacs has
@@ -860,7 +860,7 @@ cell to cache and cache to cell.")
 This is always set to nil at the entry to `table-with-cache-buffer' before
 executing body forms.")
 (defvar-local table-mode-indicator nil
-  "For mode line indicator")
+  "For mode line indicator.")
 ;; This is not a real minor-mode but placed in the minor-mode-alist
 ;; so that we can show the indicator on the mode line handy.
 (unless (assq table-mode-indicator minor-mode-alist)
@@ -1190,7 +1190,7 @@ executing body forms.")
 
 ;; register table menu under global tools menu
 (easy-menu-define table-global-menu-map nil
-  "Table global menu" table-global-menu)
+  "Table global menu." table-global-menu)
 (easy-menu-add-item (current-global-map) '("menu-bar" "tools") "--")
 (easy-menu-add-item (current-global-map)
                     '("menu-bar" "tools") table-global-menu-map)
@@ -2368,7 +2368,9 @@ table's rectangle structure."
   "Move point forward to the beginning of the next cell.
 With argument ARG, do it ARG times;
 a negative argument ARG = -N means move backward N cells.
-Do not specify NO-RECOGNIZE and UNRECOGNIZE. They are for internal use only.
+
+Do not specify NO-RECOGNIZE and UNRECOGNIZE.  They are for
+internal use only.
 
 Sample Cell Traveling Order (In Irregular Table Cases)
 
@@ -2399,8 +2401,7 @@ You can actually try how it works in this buffer.  Press
 +--+  |4 |  |4 |  +--+ |5 +--+--+6 |  |3 +--+--+4 |  |5 |     |6 |
 |5 +--+  |  |  +--+5 | |  |7 |8 |  |  |  |5 |6 |  |  |  |     |  |
 |  |6 |  |  |  |6 |  | +--+--+--+--+  +--+--+--+--+  +--+-----+--+
-+--+--+--+  +--+--+--+
-"
++--+--+--+  +--+--+--+"
   ;; After modifying this function, test against the above tables in
   ;; the doc string.  It is quite tricky.  The tables above do not
   ;; mean to cover every possible cases of cell layout, of course.
@@ -2915,8 +2916,7 @@ LaTeX:
 
 CALS (DocBook DTD):
         URL `https://www.oasis-open.org/html/a502.htm'
-        URL 
`https://www.oreilly.com/catalog/docbook/chapter/book/table.html#AEN114751'
-"
+        URL 
`https://www.oreilly.com/catalog/docbook/chapter/book/table.html#AEN114751'"
   (interactive
    (let* ((_ (unless (table--probe-cell) (error "Table not found here")))
          (completion-ignore-case t)
@@ -3206,7 +3206,7 @@ CALS (DocBook DTD):
        (insert ?\n))))))
 
 (defun table--cell-horizontal-char-p (c)
-  "Test if character C is one of the horizontal characters"
+  "Test if character C is one of the horizontal characters."
   (memq c (string-to-list table-cell-horizontal-chars)))
 
 (defun table--generate-source-scan-lines (dest-buffer _language origin-cell 
tail-cell col-list row-list)
@@ -3625,8 +3625,7 @@ independently.
 
 By applying `table-release', which does the opposite process, the
 contents become once again plain text.  `table-release' works as
-companion command to `table-capture' this way.
-"
+companion command to `table-capture' this way."
   (interactive
    (let ((col-delim-regexp)
         (row-delim-regexp))
@@ -4535,7 +4534,7 @@ grow into."
 
 (defun table--untabify-line (&optional from)
   "Untabify current line.
-Unlike save-excursion this guarantees preserving the cursor location
+Unlike `save-excursion' this guarantees preserving the cursor location
 even when the point is on a tab character which is to be removed.
 Optional FROM narrows the subject operation from this point to the end
 of line."
@@ -5074,7 +5073,7 @@ signals error if the optional ABORT-ON-ERROR is non-nil."
 
 (defun table--insert-rectangle (rectangle)
   "Insert text of RECTANGLE with upper left corner at point.
-Same as insert-rectangle except that mark operation is eliminated."
+Same as `insert-rectangle' except that mark operation is eliminated."
   (let ((lines rectangle)
        (insertcolumn (current-column))
        (first t))
@@ -5290,7 +5289,7 @@ Current buffer must already be set to the cache buffer."
     (set-marker marker-point nil)))
 
 (defun table--fill-region-strictly (beg end)
-  "Fill region strictly so that no line exceeds fill-column.
+  "Fill region strictly so that no line exceeds `fill-column'.
 When a word exceeds fill-column the word is chopped into pieces.  The
 chopped location is indicated with table-word-continuation-char."
   (or (and (markerp beg) (markerp end))
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index d7cd0aceb2..c8748e3740 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -2353,7 +2353,7 @@ FILE is typically the output DVI or PDF file."
            collect (cons char (shell-quote-argument file))))
 
 (defun tex-format-cmd (format fspec)
-  "Like `format-spec' but adds user-specified args to the command.
+  "Like `format-spec' but add user-specified args to the command.
 Only applies the FSPEC to the args part of FORMAT."
   (setq fspec (tex--quote-spec fspec))
   (if (not (string-match "\\([^ /\\]+\\) " format))
@@ -3469,7 +3469,97 @@ There might be text before point."
     ("\\Bbb{P}" . ?ℙ)                  ; Also sometimes \mathbb.
     ("\\Bbb{Q}" . ?ℚ)
     ("\\Bbb{R}" . ?ℝ)
+    ("\\Bbb{T}" . ?𝕋)
     ("\\Bbb{Z}" . ?ℤ)
+    ("\\mathbb{N}" . ?ℕ)                       ; AMS commands for blackboard 
bold
+    ("\\mathbb{P}" . ?ℙ)                       ; Also sometimes \mathbb.
+    ("\\mathbb{Q}" . ?ℚ)
+    ("\\mathbb{R}" . ?ℝ)
+    ("\\mathbb{T}" . ?𝕋)
+    ("\\mathbb{Z}" . ?ℤ)
+    ("\\pm" . ?±)
+    ("\\|" . ?‖)
+    ("\\varkappa" . ?ϰ)
+    ;; caligraphic
+    ("\\mathcal{A}" . ?𝒜)
+    ("\\mathcal{B}" . ?ℬ)
+    ("\\mathcal{C}" . ?𝒞)
+    ("\\mathcal{D}" . ?𝒟)
+    ("\\mathcal{E}" . ?ℰ)
+    ("\\mathcal{F}" . ?ℱ)
+    ("\\mathcal{G}" . ?𝒢)
+    ("\\mathcal{H}" . ?ℋ)
+    ("\\mathcal{I}" . ?ℐ)
+    ("\\mathcal{J}" . ?𝒥)
+    ("\\mathcal{K}" . ?𝒦)
+    ("\\mathcal{L}" . ?ℒ)
+    ("\\mathcal{M}" . ?ℳ)
+    ("\\mathcal{N}" . ?𝒩)
+    ("\\mathcal{O}" . ?𝒪)
+    ("\\mathcal{P}" . ?𝒫)
+    ("\\mathcal{Q}" . ?𝒬)
+    ("\\mathcal{R}" . ?ℛ)
+    ("\\mathcal{S}" . ?𝒮)
+    ("\\mathcal{T}" . ?𝒯)
+    ("\\mathcal{U}" . ?𝒰)
+    ("\\mathcal{V}" . ?𝒱)
+    ("\\mathcal{W}" . ?𝒲)
+    ("\\mathcal{X}" . ?𝒳)
+    ("\\mathcal{Y}" . ?𝒴)
+    ("\\mathcal{Z}" . ?𝒵)
+    ;; fractur
+    ("\\mathfrak{A}" . ?𝔄)
+    ("\\mathfrak{B}" . ?𝔅)
+    ("\\mathfrak{C}" . ?ℭ)
+    ("\\mathfrak{D}" . ?𝔇)
+    ("\\mathfrak{E}" . ?𝔈)
+    ("\\mathfrak{F}" . ?𝔉)
+    ("\\mathfrak{G}" . ?𝔊)
+    ("\\mathfrak{H}" . ?ℌ)
+    ("\\mathfrak{I}" . ?ℑ)
+    ("\\mathfrak{J}" . ?𝔍)
+    ("\\mathfrak{K}" . ?𝔎)
+    ("\\mathfrak{L}" . ?𝔏)
+    ("\\mathfrak{M}" . ?𝔐)
+    ("\\mathfrak{N}" . ?𝔑)
+    ("\\mathfrak{O}" . ?𝔒)
+    ("\\mathfrak{P}" . ?𝔓)
+    ("\\mathfrak{Q}" . ?𝔔)
+    ("\\mathfrak{R}" . ?ℜ)
+    ("\\mathfrak{S}" . ?𝔖)
+    ("\\mathfrak{T}" . ?𝔗)
+    ("\\mathfrak{U}" . ?𝔘)
+    ("\\mathfrak{V}" . ?𝔙)
+    ("\\mathfrak{W}" . ?𝔚)
+    ("\\mathfrak{X}" . ?𝔛)
+    ("\\mathfrak{Y}" . ?𝔜)
+    ("\\mathfrak{Z}" . ?ℨ)
+    ("\\mathfrak{a}" . ?𝔞)
+    ("\\mathfrak{b}" . ?𝔟)
+    ("\\mathfrak{c}" . ?𝔠)
+    ("\\mathfrak{d}" . ?𝔡)
+    ("\\mathfrak{e}" . ?𝔢)
+    ("\\mathfrak{f}" . ?𝔣)
+    ("\\mathfrak{g}" . ?𝔤)
+    ("\\mathfrak{h}" . ?𝔥)
+    ("\\mathfrak{i}" . ?𝔦)
+    ("\\mathfrak{j}" . ?𝔧)
+    ("\\mathfrak{k}" . ?𝔨)
+    ("\\mathfrak{l}" . ?𝔩)
+    ("\\mathfrak{m}" . ?𝔪)
+    ("\\mathfrak{n}" . ?𝔫)
+    ("\\mathfrak{o}" . ?𝔬)
+    ("\\mathfrak{p}" . ?𝔭)
+    ("\\mathfrak{q}" . ?𝔮)
+    ("\\mathfrak{r}" . ?𝔯)
+    ("\\mathfrak{s}" . ?𝔰)
+    ("\\mathfrak{t}" . ?𝔱)
+    ("\\mathfrak{u}" . ?𝔲)
+    ("\\mathfrak{v}" . ?𝔳)
+    ("\\mathfrak{w}" . ?𝔴)
+    ("\\mathfrak{x}" . ?𝔵)
+    ("\\mathfrak{y}" . ?𝔶)
+    ("\\mathfrak{z}" . ?𝔷)
     ("--" . ?–)
     ("---" . ?—)
     ("\\ordfeminine" . ?ª)
diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el
index 977f3bab6c..604a67df32 100644
--- a/lisp/textmodes/texinfmt.el
+++ b/lisp/textmodes/texinfmt.el
@@ -1618,7 +1618,7 @@ Used by @refill indenting command to avoid indenting 
within lists, etc.")
   (if (and (symbolp (car (cdr (car texinfo-stack))))
            (> 1 (length (symbol-name (car (cdr (car texinfo-stack)))))))
       (error
-       "@enumerate: Use a number or letter, eg: 1, A, a, 3, B, or d." ))
+       "@enumerate: Use a number or letter, eg: 1, A, a, 3, B, or d"))
   (texinfo-discard-line-with-args)
   (setq fill-column (- fill-column 5)))
 
@@ -1705,7 +1705,7 @@ Used by @refill indenting command to avoid indenting 
within lists, etc.")
            (if (or (equal ?\[ (string-to-char enumerating-symbol))
                    (equal ?\{ (string-to-char enumerating-symbol)))
                (error
-                "Too many items in enumerated list; alphabet ends at Z."))
+                "Too many items in enumerated list; alphabet ends at Z"))
            (insert ?\b (format "%3s. " enumerating-symbol) ?\n)
            (setcar (cdr (car texinfo-stack))
                    (make-symbol
@@ -1714,7 +1714,7 @@ Used by @refill indenting command to avoid indenting 
within lists, etc.")
                       (string-to-char enumerating-symbol))))))
           (t
           (error
-           "@enumerate: Use a number or letter, eg: 1, A, a, 3, B or d." )))
+           "@enumerate: Use a number or letter, eg: 1, A, a, 3, B or d")))
     (forward-line -1)))
 
 (put 'alphaenumerate 'texinfo-item 'texinfo-alphaenumerate-item)
@@ -2032,7 +2032,7 @@ commands that are defined in texinfo.tex for printed 
output.
      ;; Case 3: Trouble
      (t
       (error
-       "You probably need to specify column widths for @multitable 
correctly.")))
+       "You probably need to specify column widths for @multitable 
correctly")))
     ;; Check whether columns fit on page.
     (let ((desired-columns
            (+
@@ -2044,7 +2044,7 @@ commands that are defined in texinfo.tex for printed 
output.
             (apply #'+ texinfo-multitable-width-list))))
       (if (> desired-columns fill-column)
           (error
-           "Multi-column table width, %d chars, is greater than page width, %d 
chars."
+           "Multi-column table width, %d chars, is greater than page width, %d 
chars"
             desired-columns fill-column)))
     texinfo-multitable-width-list))
 
diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el
index 11d60e1eb0..135a404731 100644
--- a/lisp/textmodes/texinfo.el
+++ b/lisp/textmodes/texinfo.el
@@ -350,7 +350,7 @@ and also to be turned into Info files with 
\\[makeinfo-buffer] or
 the `makeinfo' program.  These files must be written in a very restricted and
 modified version of TeX input format.
 
-  Editing commands are like text-mode except that the syntax table is
+  Editing commands are like `text-mode' except that the syntax table is
 set up so expression commands skip Texinfo bracket groups.  To see
 what the Info version of a region of the Texinfo file will look like,
 use \\[makeinfo-region], which runs `makeinfo' on the current region.
@@ -378,15 +378,15 @@ updating menus and node pointers.  These functions
 
 Here are the functions:
 
-    texinfo-update-node                \\[texinfo-update-node]
-    texinfo-every-node-update          \\[texinfo-every-node-update]
-    texinfo-sequential-node-update
+    `texinfo-update-node'                \\[texinfo-update-node]
+    `texinfo-every-node-update'          \\[texinfo-every-node-update]
+    `texinfo-sequential-node-update'
 
-    texinfo-make-menu                  \\[texinfo-make-menu]
-    texinfo-all-menus-update           \\[texinfo-all-menus-update]
-    texinfo-master-menu
+    `texinfo-make-menu'                  \\[texinfo-make-menu]
+    `texinfo-all-menus-update'           \\[texinfo-all-menus-update]
+    `texinfo-master-menu'
 
-    texinfo-indent-menu-description (column &optional region-p)
+    `texinfo-indent-menu-description' (column &optional region-p)
 
 The `texinfo-column-for-description' variable specifies the column to
 which menu descriptions are indented.
diff --git a/lisp/textmodes/texnfo-upd.el b/lisp/textmodes/texnfo-upd.el
index f56f197c50..843bbb2bca 100644
--- a/lisp/textmodes/texnfo-upd.el
+++ b/lisp/textmodes/texnfo-upd.el
@@ -894,10 +894,10 @@ be updated first using `texinfo-make-menu' or
 `texinfo-all-menus-update', which see.  Alternatively, invoke
 this function with a prefix argument, see below.
 
-Non-nil, non-numeric argument (C-u prefix, if interactive) means
+Non-nil, non-numeric argument (\\[universal-argument] prefix, if interactive) 
means
 first update all existing menus in the buffer (incorporating
 descriptions from pre-existing menus) before it constructs the
-master menu.  If the argument is numeric (e.g., \"C-u 2\"),
+master menu.  If the argument is numeric (e.g., \"\\[universal-argument] 2\"),
 update all existing nodes as well, by calling
 `texinfo-update-node' on the entire file.  Warning: do NOT
 invoke with a numeric argument if your Texinfo file uses @node
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index ab17748df5..0af6d56ccc 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -31,7 +31,7 @@
 ;; The function bounds-of-thing-at-point finds the beginning and end
 ;; positions by moving first forward to the end of the "thing", and then
 ;; backwards to the beginning.  By default, it uses the corresponding
-;; forward-"thing" operator (eg. forward-word, forward-line).
+;; forward-"thing" operator (e.g. forward-word, forward-line).
 ;;
 ;; Special cases are allowed for using properties associated with the named
 ;; "thing":
@@ -151,6 +151,15 @@ positions of the thing found."
                (if (and (<= real-beg orig) (<= orig end) (< real-beg end))
                    (cons real-beg end))))))))))
 
+;;;###autoload
+(defun thing-at-mouse (event thing &optional no-properties)
+  "Return the THING at mouse click.
+Like `thing-at-point', but tries to use the event
+where the mouse button is clicked to find a thing nearby."
+  (save-excursion
+    (mouse-set-point event)
+    (thing-at-point thing no-properties)))
+
 ;;;###autoload
 (defun thing-at-point (thing &optional no-properties)
   "Return the THING at point.
diff --git a/lisp/time.el b/lisp/time.el
index 9f25f99a14..8496adec22 100644
--- a/lisp/time.el
+++ b/lisp/time.el
@@ -340,7 +340,7 @@ Switches from the 1 to 5 to 15 minute load average, and 
then back to 1."
                        (float-time end-time))))))))))
 
 (defun display-time-update ()
-  "Update the display-time info for the mode line.
+  "Update the `display-time' info for the mode line.
 However, don't redisplay right now.
 
 This is used for things like Rmail `g' that want to force an
@@ -626,7 +626,7 @@ point."
 ;;;###autoload
 (defun emacs-init-time (&optional format)
   "Return a string giving the duration of the Emacs initialization.
-FORMAT is a string to format the result, using `format'. If nil,
+FORMAT is a string to format the result, using `format'.  If nil,
 the default format \"%f seconds\" is used."
   (interactive)
   (let ((str (format (or format "%f seconds")
diff --git a/lisp/transient.el b/lisp/transient.el
index 5f441e80dd..2be82f56d8 100644
--- a/lisp/transient.el
+++ b/lisp/transient.el
@@ -266,7 +266,7 @@ discouraged.
 
 For example, \"=\" is hard to reach using my custom keyboard
 layout, so I substitute \"(\" for that, which is easy to reach
-using a layout optimized for lisp.
+using a layout optimized for Lisp.
 
   (setq transient-substitute-key-function
         (lambda (obj)
@@ -3119,19 +3119,19 @@ and its value is returned to the caller."
       desc)))
 
 (cl-defmethod transient-format-description ((obj transient-group))
-  "Format the description by calling the next method.  If the result
-doesn't use the `face' property at all, then apply the face
-`transient-heading' to the complete string."
+  "Format the description by calling the next method.
+If the result doesn't use the `face' property at all, then apply
+the face `transient-heading' to the complete string."
   (when-let ((desc (cl-call-next-method obj)))
     (if (text-property-not-all 0 (length desc) 'face nil desc)
         desc
       (propertize desc 'face 'transient-heading))))
 
 (cl-defmethod transient-format-description :around ((obj transient-suffix))
-  "Format the description by calling the next method.  If the result
-is nil, then use \"(BUG: no description)\" as the description.
-If the OBJ's `key' is currently unreachable, then apply the face
-`transient-unreachable' to the complete string."
+  "Format the description by calling the next method.
+If the result is nil, then use \"(BUG: no description)\" as the
+description.  If the OBJ's `key' is currently unreachable, then
+apply the face `transient-unreachable' to the complete string."
   (let ((desc (or (cl-call-next-method obj)
                   (and (slot-boundp transient--prefix 'suffix-description)
                        (funcall (oref transient--prefix suffix-description)
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index ba13a17a8f..c4a29ebe10 100644
--- a/lisp/url/url-http.el
+++ b/lisp/url/url-http.el
@@ -1451,8 +1451,8 @@ The return value of this function is the retrieval 
buffer."
                (error "gnutls-error: %s" e))
               (error
                (url-http-activate-callback)
-               (error "error: %s" e)))
-          (error "error: gnutls support needed!")))
+               (error "Error: %s" e)))
+          (error "Error: gnutls support needed!")))
        (t
         (url-http-debug "error response: %d" url-http-response-status)
         (url-http-activate-callback))))))
diff --git a/lisp/url/url-imap.el b/lisp/url/url-imap.el
index 492907f33f..f2e9b4c4a1 100644
--- a/lisp/url/url-imap.el
+++ b/lisp/url/url-imap.el
@@ -22,8 +22,8 @@
 
 ;;; Commentary:
 
-;; Anyway, here's a teaser. It's quite broken in lots of regards, but at
-;; least it seem to work. At least a little. At least when called
+;; Anyway, here's a teaser.  It's quite broken in lots of regards, but at
+;; least it seem to work.  At least a little.  At least when called
 ;; manually like this (I've no idea how it's supposed to be called):
 
 ;; (url-imap (url-generic-parse-url 
"imap://cyrus.andrew.cmu.edu/archive.c-client;UID=1021"))
diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el
index 113ac2833b..7ffccfd3a0 100644
--- a/lisp/url/url-util.el
+++ b/lisp/url/url-util.el
@@ -282,7 +282,7 @@ Given a QUERY in the form:
 \(This is the same format as produced by `url-parse-query-string')
 
 This will return a string
-\"key1=val1&key2=val2&key3=val1&key3=val2&key4&key5\". Keys may
+\"key1=val1&key2=val2&key3=val1&key3=val2&key4&key5\".  Keys may
 be strings or symbols; if they are symbols, the symbol name will
 be used.
 
diff --git a/lisp/url/url-vars.el b/lisp/url/url-vars.el
index 2aa2e7912f..f0d70ff6e7 100644
--- a/lisp/url/url-vars.el
+++ b/lisp/url/url-vars.el
@@ -158,8 +158,7 @@ none          -- Always send last location.
 domain-match  -- Send last location if the new location is within the
                  same domain
 host-match    -- Send last location if the new location is on the
-                 same host
-"
+                 same host"
   :version "27.1"
   :type '(radio (const :tag "Always send" none)
                 (const :tag "Domains match" domain-match)
diff --git a/lisp/vc/compare-w.el b/lisp/vc/compare-w.el
index 4c1d9eaad5..7c2e125831 100644
--- a/lisp/vc/compare-w.el
+++ b/lisp/vc/compare-w.el
@@ -113,7 +113,7 @@ and the value `((4) (4))' for horizontally split windows."
   :version "22.1")
 
 (defcustom compare-windows-highlight t
-  "Non-nil means compare-windows highlights the differences.
+  "Non-nil means `compare-windows' highlights the differences.
 The value t removes highlighting immediately after invoking a command
 other than `compare-windows'.
 The value `persistent' leaves all highlighted differences.  You can clear
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index eeb32f8fe5..0852f8790e 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -1479,7 +1479,7 @@ Supports unified and context diffs as well as (to a 
lesser extent)
 normal diffs.
 
 When the buffer is read-only, the ESC prefix is not necessary.
-If you edit the buffer manually, diff-mode will try to update the hunk
+If you edit the buffer manually, `diff-mode' will try to update the hunk
 headers for you on-the-fly.
 
 You can also switch between context diff and unified diff with 
\\[diff-context->unified],
diff --git a/lisp/vc/ediff-diff.el b/lisp/vc/ediff-diff.el
index 0965e888f0..0f90bef2c5 100644
--- a/lisp/vc/ediff-diff.el
+++ b/lisp/vc/ediff-diff.el
@@ -24,7 +24,6 @@
 
 ;;; Code:
 
-
 (require 'ediff-init)
 (require 'ediff-util)
 
@@ -78,14 +77,14 @@ are `-I REGEXP', to ignore changes whose lines match the 
REGEXP."
   "Options to pass to `ediff-diff-program'.
 If Unix diff is used as `ediff-diff-program',
 then a useful option is `-w', to ignore space.
-Options `-c', `-u', and `-i' are not allowed. Case sensitivity can be
+Options `-c', `-u', and `-i' are not allowed.  Case sensitivity can be
 toggled interactively using \\[ediff-toggle-ignore-case].
 
-Do not remove the default options. If you need to change this variable, add new
+Do not remove the default options.  If you need to change this variable, add 
new
 options after the default ones.
 
 This variable is not for customizing the look of the differences produced by
-the command \\[ediff-show-diff-output]. Use the variable
+the command \\[ediff-show-diff-output].  Use the variable
 `ediff-custom-diff-options' for that."
   :set #'ediff-set-diff-options
   :type 'string)
diff --git a/lisp/vc/ediff-help.el b/lisp/vc/ediff-help.el
index a5bb953b6d..2f8f596ed1 100644
--- a/lisp/vc/ediff-help.el
+++ b/lisp/vc/ediff-help.el
@@ -24,7 +24,6 @@
 
 ;;; Code:
 
-
 ;; Compiler pacifier start
 (defvar ediff-multiframe)
 ;; end pacifier
diff --git a/lisp/vc/ediff-init.el b/lisp/vc/ediff-init.el
index 17c4202d64..1d87b081f2 100644
--- a/lisp/vc/ediff-init.el
+++ b/lisp/vc/ediff-init.el
@@ -49,7 +49,6 @@ that Ediff doesn't know about.")
   (declare (obsolete nil "27.1"))
   window-system)
 
-;; in XEmacs: device-type is tty on tty and stream in batch.
 (defun ediff-window-display-p ()
   (and window-system
        (not (memq window-system '(tty pc stream)))))
@@ -249,7 +248,7 @@ It needs to be killed when we quit the session.")
 ;; Doesn't save the point and mark.
 ;; This is `with-current-buffer' with the added test for live buffers."
 (defmacro ediff-with-current-buffer (buffer &rest body)
-  "Evaluates BODY in BUFFER."
+  "Evaluate BODY in BUFFER."
   (declare (indent 1) (debug (form body)))
   `(if (ediff-buffer-live-p ,buffer)
        (save-current-buffer
@@ -405,7 +404,7 @@ It needs to be killed when we quit the session.")
 (defcustom ediff-before-setup-hook nil
   "Hooks to run before Ediff begins to set up windows and buffers.
 This hook can be used to save the previous window config, which can be restored
-on ediff-quit or ediff-suspend."
+on `ediff-quit' or `ediff-suspend'."
   :type 'hook
   :group 'ediff-hook)
 (defcustom ediff-before-setup-windows-hook nil
@@ -456,7 +455,7 @@ For each buffer, the hooks are run with that buffer made 
current."
                         "use `with-eval-after-load' instead." "28.1")
 
 (defcustom ediff-mode-hook nil
-  "Hook run just after ediff-mode is set up in the control buffer.
+  "Hook run just after `ediff-mode' is set up in the control buffer.
 This is done before any windows or frames are created.  One can use it to
 set local variables that determine how the display looks like."
   :type 'hook
@@ -616,7 +615,7 @@ highlighted using ASCII flags."
 Actually, Ediff restores the scope of visibility that existed at startup.")
 
 (defcustom ediff-keep-variants t
-  "nil means prompt to remove unmodified buffers A/B/C at session end.
+  "Nil means prompt to remove unmodified buffers A/B/C at session end.
 Supplying a prefix argument to the quit command `q' temporarily reverses the
 meaning of this variable."
   :type 'boolean
@@ -681,10 +680,10 @@ shown in brighter colors."
 (ediff-defvar-local ediff-custom-diff-buffer nil "")
 ;; Buffer used for diff-style fine differences between regions.
 (ediff-defvar-local ediff-fine-diff-buffer nil "")
-;; Temporary buffer used for computing fine differences.
-(defconst ediff-tmp-buffer " *ediff-tmp*" "")
-;; Buffer used for messages
-(defconst ediff-msg-buffer " *ediff-message*" "")
+(defconst ediff-tmp-buffer " *ediff-tmp*"
+  "Temporary buffer used for computing fine differences.")
+(defconst ediff-msg-buffer " *ediff-message*"
+  "Buffer used for messages.")
 ;; Buffer containing the output of diff when diff returns errors.
 (ediff-defvar-local ediff-error-buffer nil "")
 ;; Buffer to display debug info
@@ -836,7 +835,7 @@ this variable represents.")
 ;; this variable is set to nil, then again to the appropriate face.
 (defvar ediff-current-diff-face-B 'ediff-current-diff-B
   "Face for highlighting the selected difference in buffer B.
- this variable.  Instead, use the customization
+DO NOT CHANGE this variable.  Instead, use the customization
 widget to customize the actual face `ediff-current-diff-B'
 this variable represents.")
 
@@ -1474,7 +1473,7 @@ This default should work without changes."
          (delete-overlay overlay)))))
 
 (defun ediff-overlay-put (overlay prop value)
-  "Calls `overlay-put', but checks if overlay's buffer exists."
+  "Call `overlay-put', but check if OVERLAY's buffer exists."
   (if (ediff-buffer-live-p (overlay-buffer overlay))
       (overlay-put overlay prop value)
     (delete-overlay overlay)))
diff --git a/lisp/vc/ediff-merg.el b/lisp/vc/ediff-merg.el
index ad4ef473f8..2bdce9e33c 100644
--- a/lisp/vc/ediff-merg.el
+++ b/lisp/vc/ediff-merg.el
@@ -53,7 +53,7 @@ Valid values are the symbols `default-A', `default-B', and 
`combined'."
   "Pattern to be used for combining difference regions in buffers A and B.
 The value must be a list of the form
 \(STRING1 bufspec1  STRING2 bufspec2 STRING3 bufspec3 STRING4)
-where bufspec is the symbol A, B, or Ancestor. For instance, if the value is
+where bufspec is the symbol A, B, or Ancestor.  For instance, if the value is
 '(STRING1 A  STRING2 Ancestor STRING3 B STRING4) then the
 combined text will look like this:
 
@@ -63,8 +63,7 @@ STRING2
 diff region from the ancestor
 STRING3
 diff region from variant B
-STRING4
-"
+STRING4"
   :type '(choice (list string symbol string symbol string)
                 (list string symbol string symbol string symbol string))
   :group 'ediff-merge)
diff --git a/lisp/vc/ediff-mult.el b/lisp/vc/ediff-mult.el
index 8e88b60a0b..cfb58349eb 100644
--- a/lisp/vc/ediff-mult.el
+++ b/lisp/vc/ediff-mult.el
@@ -47,7 +47,7 @@
 ;;         explanation of the two nil placeholders in such elements.
 ;;
 ;;         There is API for extracting the components of the members of the
-;;         above list. Search for `API for ediff-meta-list' for details.
+;;         above list.  Search for `API for ediff-meta-list' for details.
 ;;
 ;;        HEADER must be a list of SIX elements (nil or string):
 ;;             (regexp metaobj1 metaobj2 metaobj3 merge-save-buffer
@@ -157,8 +157,7 @@ Useful commands (type ? to hide them and free up screen):
     (define-key map [delete] #'previous-line)
     (define-key map [backspace] #'previous-line)
     map)
-  "The keymap to be installed in the buffer showing differences between
-directories.")
+  "Keymap for buffer showing differences between directories.")
 
 ;; Variable specifying the action to take when the use invokes ediff in the
 ;; meta buffer.  This is usually ediff-registry-action or 
ediff-filegroup-action
@@ -611,22 +610,22 @@ behavior."
     (if (ediff-nonempty-string-p merge-autostore-dir)
        (setq merge-autostore-dir
              (file-name-as-directory merge-autostore-dir)))
-    (setq common (ediff-intersection lis1 lis2 #'string=))
+    (setq common (seq-intersection lis1 lis2 #'string=))
 
     ;; In merge with ancestor jobs, we don't intersect with lis3.
     ;; If there is no ancestor, we'll offer to merge without the ancestor.
     ;; So, we intersect with lis3 only when we are doing 3-way file comparison
     (if (and lis3 (ediff-comparison-metajob3 jobname))
-       (setq common (ediff-intersection common lis3 #'string=)))
+        (setq common (seq-intersection common lis3 #'string=)))
 
     ;; copying is needed because sort sorts via side effects
     (setq common (sort (copy-sequence common) #'string-lessp))
 
     ;; compute difference list
-    (setq difflist (ediff-set-difference
-                   (ediff-union (ediff-union lis1 lis2 #'string=)
-                                lis3
-                                #'string=)
+    (setq difflist (seq-difference
+                    (seq-union (seq-union lis1 lis2 #'string=)
+                               lis3
+                               #'string=)
                    common
                    #'string=)
          difflist (delete "."  difflist)
diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el
index 0cbea2c28d..74c6aba1e4 100644
--- a/lisp/vc/ediff-util.el
+++ b/lisp/vc/ediff-util.el
@@ -87,12 +87,10 @@ Commands:
   (kill-all-local-variables)
   (setq major-mode 'ediff-mode)
   (setq mode-name "Ediff")
-  ;; We use run-hooks instead of run-mode-hooks for two reasons.
+  ;; We use run-hooks instead of run-mode-hooks for one reason.
   ;; The ediff control buffer is read-only and it is not supposed to be
   ;; modified by minor modes and such. So, run-mode-hooks doesn't do anything
   ;; useful here on top of what run-hooks does.
-  ;; Second, changing run-hooks to run-mode-hooks would require an
-  ;; if-statement, since XEmacs doesn't have this.
   (run-hooks 'ediff-mode-hook))
 
 
@@ -3938,8 +3936,8 @@ If Emacs happens to dump core, this is NOT an Ediff 
problem---it is
 an Emacs bug.  Report this to Emacs maintainers.
 
 Another popular topic for reports is compilation messages.  Because Ediff
-interfaces to several other packages and runs under Emacs and XEmacs,
-byte-compilation may produce output like this:
+interfaces to several other packages, byte-compilation may produce output
+like this:
 
        While compiling toplevel forms in file ediff.el:
         ** reference to free variable zzz
@@ -4139,6 +4137,7 @@ Mail anyway? (y or n) ")
 
 ;; this uses comparison-func to decide who is a member
 (defun ediff-member (elt lis comparison-func)
+  (declare (obsolete seq-contains-p "28.1"))
   (while (and lis (not (funcall comparison-func (car lis) elt)))
     (setq lis (cdr lis)))
   lis)
@@ -4153,42 +4152,11 @@ Mail anyway? (y or n) ")
        (key-description desc)
       (format "M-x %s" func-def))))
 
-;; this uses comparison-func to decide who is a member, and this determines how
-;; intersection looks like
-(defun ediff-intersection (lis1 lis2 comparison-func)
-  (let ((result (list 'a)))
-    (while lis1
-      (if (ediff-member (car lis1) lis2 comparison-func)
-         (nconc result (list (car lis1))))
-      (setq lis1 (cdr lis1)))
-    (cdr result)))
-
-
-;; eliminates duplicates using comparison-func
-(defun ediff-union (lis1 lis2 comparison-func)
-  (let ((result (list 'a)))
-    (while lis1
-      (or (ediff-member (car lis1) (cdr result) comparison-func)
-         (nconc result (list (car lis1))))
-      (setq lis1 (cdr lis1)))
-    (while lis2
-      (or (ediff-member (car lis2) (cdr result) comparison-func)
-         (nconc result (list (car lis2))))
-      (setq lis2 (cdr lis2)))
-    (cdr result)))
-
-;; eliminates duplicates using comparison-func
-(defun ediff-set-difference (lis1 lis2 comparison-func)
-  (let ((result (list 'a)))
-    (while lis1
-      (or (ediff-member (car lis1) (cdr result) comparison-func)
-         (ediff-member (car lis1) lis2 comparison-func)
-         (nconc result (list (car lis1))))
-      (setq lis1 (cdr lis1)))
-    (cdr result)))
-
 (define-obsolete-function-alias 'ediff-add-to-history #'add-to-history "27.1")
 (define-obsolete-function-alias 'ediff-copy-list #'copy-sequence "28.1")
+(define-obsolete-function-alias 'ediff-union #'seq-union "28.1")
+(define-obsolete-function-alias 'ediff-intersection #'seq-intersection "28.1")
+(define-obsolete-function-alias 'ediff-set-difference #'seq-difference "28.1")
 
 (run-hooks 'ediff-load-hook)
 
diff --git a/lisp/vc/ediff-vers.el b/lisp/vc/ediff-vers.el
index 9e82392725..0646ba3cc2 100644
--- a/lisp/vc/ediff-vers.el
+++ b/lisp/vc/ediff-vers.el
@@ -88,8 +88,8 @@ comparison or merge operations are being performed."
 
 ;; RCS.el support
 (defun rcs-ediff-view-revision (&optional rev)
-;; View previous RCS revision of current file.
-;; With prefix argument, prompts for a revision name.
+  "View previous RCS revision of current file.
+With prefix argument, prompts for a revision name."
   (interactive (list (if current-prefix-arg
                         (read-string "Revision: "))))
   (let* ((filename (buffer-file-name (current-buffer)))
diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el
index 3536cbf738..e884ed8c51 100644
--- a/lisp/vc/ediff.el
+++ b/lisp/vc/ediff.el
@@ -6,7 +6,7 @@
 ;; Created: February 2, 1994
 ;; Keywords: comparing, merging, patching, vc, tools, unix
 ;; Version: 2.81.6
-(defconst ediff-version "2.81.6" "The current version of Ediff")
+(defconst ediff-version "2.81.6" "The current version of Ediff.")
 
 ;; Yoni Rabkin <yoni@rabkins.net> contacted the maintainer of this
 ;; file on 20/3/2008, and the maintainer agreed that when a bug is
diff --git a/lisp/vc/emerge.el b/lisp/vc/emerge.el
index 8f7affeea4..b363fa256b 100644
--- a/lisp/vc/emerge.el
+++ b/lisp/vc/emerge.el
@@ -2062,7 +2062,7 @@ With prefix argument, puts point before, mark after."
       (goto-char opoint))))
 
 (defun emerge-mark-difference (arg)
-  "Leaves the point before this difference and the mark after it.
+  "Leave the point before this difference and the mark after it.
 With prefix argument, puts mark before, point after."
   (interactive "P")
   (emerge-validate-difference)
@@ -2921,7 +2921,7 @@ around the current difference are removed."
 
 ;; Define a key, even if a prefix of it is defined
 (defun emerge-force-define-key (keymap key definition)
-  "Like `define-key', but forcibly creates prefix characters as needed.
+  "Like `define-key', but forcibly create prefix characters as needed.
 If some prefix of KEY has a non-prefix definition, it is redefined."
   ;; Find out if a prefix of key is defined
   (let ((v (lookup-key keymap key)))
diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el
index 46e9c97eb0..e0a87ba941 100644
--- a/lisp/vc/log-edit.el
+++ b/lisp/vc/log-edit.el
@@ -98,7 +98,7 @@
 (defcustom log-edit-confirm 'changed
   "If non-nil, `log-edit-done' will request confirmation.
 If `changed', only request confirmation if the list of files has
-  changed since the beginning of the log-edit session."
+  changed since the beginning of the `log-edit' session."
   :group 'log-edit
   :type '(choice (const changed) (const t) (const nil)))
 
@@ -497,7 +497,7 @@ When done editing the log entry, type \\[log-edit-done], 
which will
 trigger the actual commit of the file(s).
 Several other handy support commands are provided, and the package
 from which this is used might also provide additional commands (under
-the \"C-x v\" prefix for VC commands, for example).
+the \\[vc-prefix-map] prefix for VC commands, for example).
 
 \\{log-edit-mode-map}"
   (setq-local font-lock-defaults '(log-edit-font-lock-keywords t))
diff --git a/lisp/vc/log-view.el b/lisp/vc/log-view.el
index e8930979b5..bc66191f33 100644
--- a/lisp/vc/log-view.el
+++ b/lisp/vc/log-view.el
@@ -156,7 +156,7 @@
   :group 'log-view)
 
 (easy-menu-define log-view-mode-menu log-view-mode-map
-  "Log-View Display Menu"
+  "Log-View Display Menu."
   '("Log-View"
     ;; XXX Do we need menu entries for these?
     ;; ["Quit"  quit-window]
diff --git a/lisp/vc/pcvs.el b/lisp/vc/pcvs.el
index 42f531e4f7..23f0902b38 100644
--- a/lisp/vc/pcvs.el
+++ b/lisp/vc/pcvs.el
@@ -247,7 +247,7 @@ If -CVS-MODE!-FUN is provided, it is executed *cvs* being 
the current buffer
   (let* ((-cvs-mode!-buf (current-buffer))
         (cvsbuf (cond ((cvs-buffer-p) (current-buffer))
                       ((and cvs-buffer (cvs-buffer-p cvs-buffer)) cvs-buffer)
-                      (t (error "can't find the *cvs* buffer"))))
+                       (t (error "Can't find the *cvs* buffer"))))
         (-cvs-mode!-wrapper cvs-minor-wrap-function)
         (-cvs-mode!-cont (lambda ()
                            (save-current-buffer
diff --git a/lisp/vc/vc-annotate.el b/lisp/vc/vc-annotate.el
index 07b2800c2d..82531f742e 100644
--- a/lisp/vc/vc-annotate.el
+++ b/lisp/vc/vc-annotate.el
@@ -277,7 +277,7 @@ cover the range from the oldest annotation to the newest."
 
 ;; Menu -- Using easymenu.el
 (easy-menu-define vc-annotate-mode-menu vc-annotate-mode-map
-  "VC Annotate Display Menu"
+  "VC Annotate Display Menu."
   `("VC-Annotate"
     ["By Color Map Range" (unless (null vc-annotate-display-mode)
                  (setq vc-annotate-display-mode nil)
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index 5144b5d0bb..bfe3293e45 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -634,7 +634,7 @@ Returns nil if unable to find this information."
     (error "Don't know how to compute the next revision of %s" rev)))
 
 (defun vc-bzr-register (files &optional _comment)
-  "Register FILES under bzr. COMMENT is ignored."
+  "Register FILES under bzr.  COMMENT is ignored."
   (vc-bzr-command "add" nil 0 files))
 
 ;; Could run `bzr status' in the directory and see if it succeeds, but
diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el
index ec6dc282dc..6f921ac2a0 100644
--- a/lisp/vc/vc-cvs.el
+++ b/lisp/vc/vc-cvs.el
@@ -825,7 +825,7 @@ individually should stay local."
                                  (line-end-position))))))))
 
 (defun vc-cvs-parse-uhp (path)
-  "parse user@host/path into (user@host /path)"
+  "Parse user@host/path into (user@host /path)."
   (if (string-match "\\([^/]+\\)\\(/.*\\)" path)
       (list (match-string 1 path) (match-string 2 path))
       (list nil path)))
diff --git a/lisp/vc/vc-dav.el b/lisp/vc/vc-dav.el
index 5fd8d8e503..fe631ee09a 100644
--- a/lisp/vc/vc-dav.el
+++ b/lisp/vc/vc-dav.el
@@ -96,8 +96,7 @@ If REV is non-nil, that is the revision to check out.  If REV 
is the
 empty string, that means to check ou tht ehead of the trunk.
 
 If optional arg DESTFILE is given, it is an alternate filename to
-write the contents to.
-"
+write the contents to."
   ;; This should LOCK the resource.
   )
 
@@ -106,8 +105,7 @@ write the contents to.
 
 If optional arg CONTENTS-DONE is non-nil, then the contents of FILE
 have already been reverted from a version backup, and this function
-only needs to update the status of URL within the backend.
-"
+only needs to update the status of URL within the backend."
   ;; Should do a GET if !contents_done
   ;; Should UNLOCK the file.
   )
@@ -123,8 +121,7 @@ If REV1 is nil, use the current workfile version as the 
older version.
 If REV2 is nil, use the current workfile contents as the nwer version.
 
 It should return a status of either 0 (no differences found), or
-1 (either non-empty diff or the diff is run asynchronously).
-"
+1 (either non-empty diff or the diff is run asynchronously)."
   ;; We should do this asynchronously...
   ;; How would we do it at all, that is the question!
   )
@@ -136,7 +133,7 @@ It should return a status of either 0 (no differences 
found), or
 ;; This should use url-dav-get-properties with a depth of `1' to get
 ;; all the properties.
 (defun vc-dav-dir-state (_url)
-  "find the version control state of all files in DIR in a fast way."
+  "Find the version control state of all files in DIR in a fast way."
   )
 
 (defun vc-dav-responsible-p (_url)
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index eb8cf8192c..ebecdff62e 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -1113,33 +1113,33 @@ If it is a file, return the corresponding cons for the 
file itself."
 
 (define-derived-mode vc-dir-mode special-mode "VC dir"
   "Major mode for VC directory buffers.
-Marking/Unmarking key bindings and actions:
-m - mark a file/directory
+Marking/Unmarking key bindings and actions: \\<vc-dir-mode-map>
+\\[vc-dir-mark] - mark a file/directory
   - if the region is active, mark all the files in region.
     Restrictions: - a file cannot be marked if any parent directory is marked
                   - a directory cannot be marked if any child file or
                     directory is marked
-u - unmark a file/directory
+\\[vc-dir-unmark] - unmark a file/directory
   - if the region is active, unmark all the files in region.
-M - if the cursor is on a file: mark all the files with the same state as
+\\[vc-dir-mark-all-files] - if the cursor is on a file: mark all the files 
with the same state as
       the current file
   - if the cursor is on a directory: mark all child files
   - with a prefix argument: mark all files
-U - if the cursor is on a file: unmark all the files with the same state
+\\[vc-dir-unmark-all-files] - if the cursor is on a file: unmark all the files 
with the same state
       as the current file
   - if the cursor is on a directory: unmark all child files
   - with a prefix argument: unmark all files
 
 VC commands
-VC commands in the `C-x v' prefix can be used.
+VC commands in the \\[vc-prefix-map] prefix can be used.
 VC commands act on the marked entries.  If nothing is marked, VC
 commands act on the current entry.
 
 Search & Replace
-S - searches the marked files
-Q - does a query replace on the marked files
-M-s a C-s - does an isearch on the marked files
-M-s a C-M-s - does a regexp isearch on the marked files
+\\[vc-dir-search] - searches the marked files
+\\[vc-dir-query-replace-regexp] - does a query replace on the marked files
+\\[vc-dir-isearch] - does an isearch on the marked files
+\\[vc-dir-isearch-regexp] - does a regexp isearch on the marked files
 If nothing is marked, these commands act on the current entry.
 When a directory is current or marked, the Search & Replace
 commands act on the child files of that directory that are displayed in
@@ -1542,7 +1542,7 @@ This implements the `bookmark-make-record-function' type 
for
 
 ;;;###autoload
 (defun vc-dir-bookmark-jump (bmk)
-  "Provides the bookmark-jump behavior for a `vc-dir' buffer.
+  "Provide the `bookmark-jump' behavior for a `vc-dir' buffer.
 This implements the `handler' function interface for the record
 type returned by `vc-dir-bookmark-make-record'."
   (let* ((file (bookmark-prop-get bmk 'filename))
diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el
index c29458620e..cd23bcce94 100644
--- a/lisp/vc/vc-dispatcher.el
+++ b/lisp/vc/vc-dispatcher.el
@@ -104,12 +104,13 @@
 ;; will be called with the buffer file name as argument whenever the
 ;; dispatcher resyncs the buffer.
 
-;; To do:
-;;
+;;; Code:
+
+;; TODO:
 ;; - log buffers need font-locking.
-;;
 
 ;; General customization
+
 (defcustom vc-logentry-check-hook nil
   "Normal hook run by `vc-finish-logentry'.
 Use this to impose your own rules on the entry in addition to any the
@@ -662,7 +663,7 @@ contents of the log entry buffer.  If COMMENT is a string 
and
 INITIAL-CONTENTS is nil, do action immediately as if the user had
 entered COMMENT.  If COMMENT is t, also do action immediately with an
 empty comment.  Remember the file's buffer in `vc-parent-buffer'
-\(current one if no file).  Puts the log-entry buffer in major-mode
+\(current one if no file).  Puts the log-entry buffer in major mode
 MODE, defaulting to `log-edit-mode' if MODE is nil.
 AFTER-HOOK specifies the local value for `vc-log-after-operation-hook'.
 BACKEND, if non-nil, specifies a VC backend for the Log Edit buffer."
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 4b309c338a..ec572e96a5 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -408,7 +408,7 @@ in the order given by `git status'."
   orig-name)          ;; Original name for renames or copies.
 
 (defun vc-git-escape-file-name (name)
-  "Escape a file name if necessary."
+  "Escape filename NAME if necessary."
   (if (string-match "[\n\t\"\\]" name)
       (concat "\""
               (mapconcat (lambda (c)
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index 4a64caa36b..1e8d673852 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -271,9 +271,9 @@ If `ask', you will be prompted for a branch type."
 (defcustom vc-hg-symbolic-revision-styles
   '(builtin-active-bookmark
     "{if(bookmarks,sub(' 
',',',bookmarks),if(phabdiff,phabdiff,shortest(node,6)))}")
-  "List of ways to present versions symbolically.  The version
-that we use is the first one that successfully produces a
-non-empty string.
+  "List of ways to present versions symbolically.
+The version that we use is the first one that successfully
+produces a non-empty string.
 
 Each entry in the list can be either:
 
@@ -291,7 +291,7 @@ and an optional path to which to limit history) and produce 
a
 string.  The function is called with `default-directory' set to
 within the repository.
 
-If no list entry produces a useful revision, return `nil'."
+If no list entry produces a useful revision, return nil."
   :type '(repeat (choice
                   (const :tag "Active bookmark" builtin-active-bookmark)
                   (string :tag "Hg template")
@@ -301,7 +301,7 @@ If no list entry produces a useful revision, return `nil'."
 (defcustom vc-hg-use-file-version-for-mode-line-version nil
   "When enabled, the modeline contains revision information for the visited 
file.
 When not, the revision in the modeline is for the repository
-working copy.  `nil' is the much faster setting for
+working copy.  nil is the much faster setting for
 large repositories."
   :type 'boolean
   :version "26.1")
@@ -811,7 +811,7 @@ if we don't understand a construct, we signal
                (push c parts)
                (cond ((eq c ?\\) (setf state 'charclass-backslash))
                      ((eq c ?\]) (setf state 'normal))))
-              (t (error "invalid state")))
+              (t (error "Invalid state")))
         (setf i (1+ i))))
     (unless (eq state 'normal)
       (signal 'vc-hg-unsupported-syntax (list pcre)))
@@ -1151,7 +1151,7 @@ hg binary."
                  (expand-file-name old)))
 
 (defun vc-hg-register (files &optional _comment)
-  "Register FILES under hg. COMMENT is ignored."
+  "Register FILES under hg.  COMMENT is ignored."
   (vc-hg-command nil 0 files "add"))
 
 (defun vc-hg-create-repo ()
diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el
index 4b3c829a2c..0612310640 100644
--- a/lisp/vc/vc-hooks.el
+++ b/lisp/vc/vc-hooks.el
@@ -483,7 +483,7 @@ status of this file.  Otherwise, the value returned is one 
of:
    (vc-call-backend backend 'state file)))
 
 (defsubst vc-up-to-date-p (file)
-  "Convenience function that checks whether `vc-state' of FILE is 
`up-to-date'."
+  "Convenience function to check whether `vc-state' of FILE is `up-to-date'."
   (eq (vc-state file) 'up-to-date))
 
 (defun vc-working-revision (file &optional backend)
@@ -627,7 +627,7 @@ Before doing that, check if there are any old backups and 
get rid of them."
 
 (declare-function vc-dir-resynch-file "vc-dir" (&optional fname))
 
-(defvar vc-dir-buffers nil "List of vc-dir buffers.")
+(defvar vc-dir-buffers nil "List of `vc-dir' buffers.")
 
 (defun vc-after-save ()
   "Function to be called by `basic-save-buffer' (in files.el)."
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index 0b0c71b1ff..e38469ba9f 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -242,7 +242,7 @@ When VERSION is given, perform check for that version."
 (autoload 'vc-switches "vc")
 
 (defun vc-rcs-register (files &optional comment)
-  "Register FILES into the RCS version-control system.
+  "Register FILES into the RCS version control system.
 Automatically retrieve a read-only version of the file with keywords expanded.
 COMMENT can be used to provide an initial description for each FILES.
 Passes either `vc-rcs-register-switches' or `vc-register-switches'
@@ -382,8 +382,9 @@ whether to remove it."
         (vc-switches 'RCS 'checkout)))
 
 (defun vc-rcs-checkout (file &optional rev)
-  "Retrieve a copy of a saved version of FILE.  If FILE is a directory,
-attempt the checkout for all registered files beneath it."
+  "Retrieve a copy of a saved version of FILE.
+If FILE is a directory, attempt the checkout for all registered
+files beneath it."
   (if (file-directory-p file)
       (mapc #'vc-rcs-checkout (vc-expand-dirs (list file) 'RCS))
     (let ((file-buffer (get-file-buffer file))
@@ -448,8 +449,8 @@ attempt the checkout for all registered files beneath it."
        (message "Checking out %s...done" file))))))
 
 (defun vc-rcs-revert (file &optional _contents-done)
-  "Revert FILE to the version it was based on.  If FILE is a directory,
-revert all registered files beneath it."
+  "Revert FILE to the version it was based on.
+If FILE is a directory, revert all registered files beneath it."
   (if (file-directory-p file)
       (mapc #'vc-rcs-revert (vc-expand-dirs (list file) 'RCS))
     (vc-do-command "*vc*" 0 "co" (vc-master-name file) "-f"
@@ -516,8 +517,9 @@ Needs RCS 5.6.2 or later for -M."
        (kill-buffer filename)))))
 
 (defun vc-rcs-modify-change-comment (files rev comment)
-  "Modify the change comments change on FILES on a specified REV.  If FILE is a
-directory the operation is applied to all registered files beneath it."
+  "Modify the change comments change on FILES on a specified REV.
+If FILE is a directory the operation is applied to all registered
+files beneath it."
   (dolist (file (vc-expand-dirs files 'RCS))
     (vc-do-command "*vc*" 0 "rcs" (vc-master-name file)
                   (concat "-m" rev ":" comment))))
diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el
index 92cce5f13a..bcbb87eba8 100644
--- a/lisp/vc/vc-sccs.el
+++ b/lisp/vc/vc-sccs.el
@@ -191,7 +191,7 @@ Optional string REV is a revision."
 (autoload 'vc-switches "vc")
 
 (defun vc-sccs-register (files &optional comment)
-  "Register FILES into the SCCS version-control system.
+  "Register FILES into the SCCS version control system.
 Automatically retrieve a read-only version of the files with keywords expanded.
 COMMENT can be used to provide an initial description of FILES.
 Passes either `vc-sccs-register-switches' or `vc-register-switches'
@@ -270,8 +270,8 @@ locked.  REV is the revision to check out."
       (message "Checking out %s...done" file))))
 
 (defun vc-sccs-revert (file &optional _contents-done)
-  "Revert FILE to the version it was based on. If FILE is a directory,
-revert all subfiles."
+  "Revert FILE to the version it was based on.
+If FILE is a directory, revert all subfiles."
   (if (file-directory-p file)
       (mapc #'vc-sccs-revert (vc-expand-dirs (list file) 'SCCS))
     (vc-sccs-do-command nil 0 "unget" (vc-master-name file))
diff --git a/lisp/vc/vc-src.el b/lisp/vc/vc-src.el
index faba5bce2b..b408b7de76 100644
--- a/lisp/vc/vc-src.el
+++ b/lisp/vc/vc-src.el
@@ -238,7 +238,7 @@ This function differs from vc-do-command in that it invokes 
`vc-src-program'."
 (autoload 'vc-switches "vc")
 
 (defun vc-src-register (files &optional _comment)
-  "Register FILES under src. COMMENT is ignored."
+  "Register FILES under src.  COMMENT is ignored."
   (vc-src-command nil files "add"))
 
 (defun vc-src-responsible-p (file)
@@ -268,15 +268,16 @@ REV is the revision to check out into WORKFILE."
     (vc-src-command nil file "co")))
 
 (defun vc-src-revert (file &optional _contents-done)
-  "Revert FILE to the version it was based on.  If FILE is a directory,
-revert all registered files beneath it."
+  "Revert FILE to the version it was based on.
+If FILE is a directory, revert all registered files beneath it."
   (if (file-directory-p file)
       (mapc #'vc-src-revert (vc-expand-dirs (list file) 'SRC))
     (vc-src-command nil file "co")))
 
 (defun vc-src-modify-change-comment (files rev comment)
-  "Modify the change comments change on FILES on a specified REV.  If FILE is a
-directory the operation is applied to all registered files beneath it."
+  "Modify the change comments change on FILES on a specified REV.
+If FILE is a directory the operation is applied to all registered
+files beneath it."
   (dolist (file (vc-expand-dirs files 'SRC))
     (vc-src-command nil file "amend" "-m" comment rev)))
 
diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el
index 544a6c769f..e14519cc20 100644
--- a/lisp/vc/vc-svn.el
+++ b/lisp/vc/vc-svn.el
@@ -295,7 +295,7 @@ RESULT is a list of conses (FILE . STATE) for directory 
DIR."
 (autoload 'vc-switches "vc")
 
 (defun vc-svn-register (files &optional _comment)
-  "Register FILES into the SVN version-control system.
+  "Register FILES into the SVN version control system.
 The COMMENT argument is ignored  This does an add but not a commit.
 Passes either `vc-svn-register-switches' or `vc-register-switches'
 to the SVN command."
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index f6ae27075f..8767969163 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -431,7 +431,7 @@
 ;;   and displays a file name and a revision, then return a cons
 ;;   (REVISION . FILENAME).
 ;;
-;; - region-history (FILE BUFFER LFROM LTO)
+;; - region-history (file buffer lfrom lto)
 ;;
 ;;   Insert into BUFFER the history (log comments and diffs) of the content of
 ;;   FILE between lines LFROM and LTO.  This is typically done asynchronously.
@@ -496,7 +496,7 @@
 ;;   `.bzrignore'.  The default behavior is to read the contents of
 ;;   the file returned by the `find-ignore-file' function.
 ;;
-;; - find-ignore-file
+;; - find-ignore-file (file)
 ;;
 ;;   Return the ignore file that controls FILE, e.g. `.gitignore' or
 ;;   `.bzrignore'.
@@ -515,7 +515,7 @@
 ;;
 ;;   Turn on the mode used for editing the check in log.  This
 ;;   defaults to `log-edit-mode'.  If changed, it should use a mode
-;;   derived from`log-edit-mode'.
+;;   derived from `log-edit-mode'.
 ;;
 ;; - check-headers ()
 ;;
@@ -1012,7 +1012,7 @@ responsible for the given file."
         (error "No VC backend is responsible for %s" file))))
 
 (defun vc-expand-dirs (file-or-dir-list backend)
-  "Expands directories in a file list specification.
+  "Expand directories in a file list specification.
 Within directories, only files already under version control are noticed."
   (let ((flattened '()))
     (dolist (node file-or-dir-list)
@@ -1152,15 +1152,17 @@ BEWARE: this function may change the current buffer."
              (memq (vc-state file) '(edited needs-merge conflict))))))
 
 (defun vc-compatible-state (p q)
-  "Controls which states can be in the same commit."
+  "Control which states can be in the same commit."
   (or
    (eq p q)
    (and (member p '(edited added removed)) (member q '(edited added 
removed)))))
 
-(defun vc-read-backend (prompt)
-  (intern
-   (completing-read prompt (mapcar #'symbol-name vc-handled-backends)
-                    nil 'require-match)))
+(defun vc-read-backend (prompt &optional backends default)
+  (let ((backends (or backends vc-handled-backends))
+        (completion-ignore-case t))
+    (intern
+     (completing-read prompt (mapcar #'symbol-name backends)
+                      nil 'require-match nil nil default))))
 
 ;; Here's the major entry point.
 
@@ -1369,14 +1371,7 @@ For old-style locking-based version control systems, 
like RCS:
 
 (defun vc-create-repo (backend)
   "Create an empty repository in the current directory."
-  (interactive
-   (list
-    (intern
-     (upcase
-      (completing-read
-       "Create repository for: "
-       (mapcar (lambda (b) (list (downcase (symbol-name b)))) 
vc-handled-backends)
-       nil t)))))
+  (interactive (list (vc-read-backend "Create repository for: ")))
   (vc-call-backend backend 'create-repo))
 
 ;;;###autoload
@@ -2884,12 +2879,7 @@ To get a prompt, use a prefix argument."
        (cond
         ((null others) (error "No other backend to switch to"))
         (current-prefix-arg
-         (intern
-          (upcase
-           (completing-read
-            (format "Switch to backend [%s]: " def)
-            (mapcar (lambda (b) (list (downcase (symbol-name b)))) backends)
-            nil t nil nil (downcase (symbol-name def))))))
+          (vc-read-backend "Switch to backend: " backends (symbol-name def)))
         (t def))))))
   (unless (eq backend (vc-backend file))
     (vc-file-clearprops file)
diff --git a/lisp/vt-control.el b/lisp/vt-control.el
index bac0069b85..8f62b5757a 100644
--- a/lisp/vt-control.el
+++ b/lisp/vt-control.el
@@ -23,7 +23,7 @@
 ;;; Commentary:
 
 ;;  The functions contained in this file send various VT control codes
-;;  to the terminal where emacs is running.  The following functions are
+;;  to the terminal where Emacs is running.  The following functions are
 ;;  available.
 
 ;;    Function           Action
diff --git a/lisp/wdired.el b/lisp/wdired.el
index fd549bac32..eafb50cc18 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -689,7 +689,7 @@ Optional arguments are ignored."
   ;; FIXME: Can't we use the normal mechanism for that?  --Stef
   (if (and
        (buffer-modified-p)
-       (not (y-or-n-p "Buffer changed. Discard changes and kill buffer? ")))
+       (not (y-or-n-p "Buffer changed. Discard changes and kill buffer?")))
       (error "Error")))
 
 ;; Added to after-change-functions in wdired-change-to-wdired-mode to
diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index a3a127474d..7e090177eb 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -5,7 +5,7 @@
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: data, wp
 ;; Version: 13.2.2
-;; X-URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
+;; URL: https://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/widget.el b/lisp/widget.el
index d258e6fae2..393fe6c21b 100644
--- a/lisp/widget.el
+++ b/lisp/widget.el
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, extensions, faces, hypermedia
-;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
+;; URL: http://www.dina.kvl.dk/~abraham/custom/
 ;; Package: emacs
 
 ;; This file is part of GNU Emacs.
@@ -86,7 +86,7 @@ The third argument DOC is a documentation string for the 
widget."
   (declare (doc-string 3))
   ;;
   (unless (or (null doc) (stringp doc))
-    (error "widget documentation must be nil or a string."))
+    (error "Widget documentation must be nil or a string"))
   (put name 'widget-type (cons class args))
   (put name 'widget-documentation (purecopy doc))
   name)
diff --git a/lisp/windmove.el b/lisp/windmove.el
index ef970bb6c9..658e59af19 100644
--- a/lisp/windmove.el
+++ b/lisp/windmove.el
@@ -498,7 +498,7 @@ Default value of MODIFIERS is `shift'."
 
 (defcustom windmove-display-no-select nil
   "Whether the window should be selected after displaying the buffer in it.
-If `nil', then the new window where the buffer is displayed will be selected.
+If nil, then the new window where the buffer is displayed will be selected.
 If `ignore', then don't select a window: neither the new nor the old window,
 thus allowing the next command to decide what window it selects.
 Other non-nil values will reselect the old window that was selected before.
@@ -525,7 +525,7 @@ to decide what window it selects.  With other non-nil 
values of
 `windmove-display-no-select', this function reselects
 a previously selected old window.
 
-If prefix ARG is `C-u', reselect a previously selected old window.
+If prefix ARG is \\[universal-argument], reselect a previously selected old 
window.
 If `windmove-display-no-select' is non-nil, the meaning of
 the prefix argument is reversed and it selects the new window.
 
@@ -662,7 +662,7 @@ from the opposite side of the frame."
 ;;;###autoload
 (defun windmove-delete-left (&optional arg)
   "Delete the window to the left of the current one.
-If prefix ARG is `C-u', delete the selected window and
+If prefix ARG is \\[universal-argument], delete the selected window and
 select the window that was to the left of the current one."
   (interactive "P")
   (windmove-delete-in-direction 'left arg))
@@ -670,7 +670,7 @@ select the window that was to the left of the current one."
 ;;;###autoload
 (defun windmove-delete-up (&optional arg)
   "Delete the window above the current one.
-If prefix ARG is `C-u', delete the selected window and
+If prefix ARG is \\[universal-argument], delete the selected window and
 select the window that was above the current one."
   (interactive "P")
   (windmove-delete-in-direction 'up arg))
@@ -678,7 +678,7 @@ select the window that was above the current one."
 ;;;###autoload
 (defun windmove-delete-right (&optional arg)
   "Delete the window to the right of the current one.
-If prefix ARG is `C-u', delete the selected window and
+If prefix ARG is \\[universal-argument], delete the selected window and
 select the window that was to the right of the current one."
   (interactive "P")
   (windmove-delete-in-direction 'right arg))
@@ -686,7 +686,7 @@ select the window that was to the right of the current one."
 ;;;###autoload
 (defun windmove-delete-down (&optional arg)
   "Delete the window below the current one.
-If prefix ARG is `C-u', delete the selected window and
+If prefix ARG is \\[universal-argument], delete the selected window and
 select the window that was below the current one."
   (interactive "P")
   (windmove-delete-in-direction 'down arg))
@@ -698,8 +698,8 @@ Keys are bound to commands that delete windows in the 
specified
 direction.  Keybindings are of the form PREFIX MODIFIERS-{left,right,up,down},
 where PREFIX is a prefix key and MODIFIERS is either a list of modifiers or
 a single modifier.
-If PREFIX is `none', no prefix is used. If MODIFIERS is `none', the keybindings
-are directly bound to the arrow keys.
+If PREFIX is `none', no prefix is used.  If MODIFIERS is `none',
+the keybindings are directly bound to the arrow keys.
 Default value of PREFIX is `C-x' and MODIFIERS is `shift'."
   (interactive)
   (unless prefix (setq prefix '(?\C-x)))
diff --git a/lisp/window.el b/lisp/window.el
index e14d472cf3..b240b16f24 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -634,7 +634,7 @@ is unpredictable."
 (defun window-with-parameter (parameter &optional value frame any minibuf)
   "Return first window on FRAME with PARAMETER non-nil.
 FRAME defaults to the selected frame.  Optional argument VALUE
-non-nil means only return a window whose window-parameter value
+non-nil means only return a window whose `window-parameter' value
 for PARAMETER equals VALUE (comparison is done with `equal').
 Optional argument ANY non-nil means consider internal windows
 too.
@@ -867,7 +867,7 @@ window annihilates any effect provided by this variable.")
 (defun window--sides-reverse-on-frame-p (frame)
   "Return non-nil when side windows should appear reversed on FRAME.
 This uses some heuristics to guess the user's intentions when the
-selected window of FRAME is a side window ."
+selected window of FRAME is a side window."
   (cond
    ;; Reverse when `window-sides-reversed' is t.  Do not reverse when
    ;; `window-sides-reversed' is nil.
@@ -4632,7 +4632,7 @@ another window.  Also, if WINDOW's frame has a 
`buffer-predicate'
 parameter, that predicate may inhibit switching to certain
 buffers.
 
-This function is called by `prev-buffer'."
+This function is called by `previous-buffer'."
   (interactive)
   (let* ((window (window-normalize-window window t))
         (frame (window-frame window))
@@ -6567,9 +6567,6 @@ of the window used."
 (make-obsolete-variable 'display-buffer-function
                        'display-buffer-alist "24.3")
 
-;; Eventually, we want to turn this into a defvar; instead of
-;; customizing this, the user should use a `pop-up-frame-parameters'
-;; alist entry in `display-buffer-base-action'.
 (defcustom pop-up-frame-alist nil
   "Alist of parameters for automatically generated new frames.
 If non-nil, the value you specify here is used by the default
@@ -6579,7 +6576,12 @@ Since `pop-up-frame-function' is used by 
`display-buffer' for
 making new frames, any value specified here by default affects
 the automatic generation of new frames via `display-buffer' and
 all functions based on it.  The behavior of `make-frame' is not
-affected by this variable."
+affected by this variable.
+
+This option is provided for backward compatibility only.  New
+code should use a `pop-up-frame-parameters' action alist entry in
+`display-buffer-alist' instead.  See Info node `(elisp) Choosing
+Window Options' in the Emacs Lisp manual."
   :type '(repeat (cons :format "%v"
                       (symbol :tag "Parameter")
                       (sexp :tag "Value")))
@@ -6851,6 +6853,11 @@ the buffer name.  This is for compatibility with
 `special-display-buffer-names'; the cdr of the cons cell is
 ignored.
 
+This variable is provided for backward compatibility only and
+should not be used in new code.  Customize `display-buffer-alist'
+instead.  See Info node `(elisp) Choosing Window Options' in the
+Emacs Lisp manual for an example.
+
 See also `same-window-regexps'."
  :type '(repeat (string :format "%v"))
  :group 'windows)
@@ -6866,6 +6873,11 @@ string.  In that case, the cell's car must be a regexp 
matching
 the buffer name.  This is for compatibility with
 `special-display-regexps'; the cdr of the cons cell is ignored.
 
+This variable is provided for backward compatibility only and
+should not be used in new code.  Customize `display-buffer-alist'
+instead.  See Info node `(elisp) Choosing Window Options' in the
+Emacs Lisp manual for an example.
+
 See also `same-window-buffer-names'."
   :type '(repeat (regexp :format "%v"))
   :group 'windows)
@@ -6897,7 +6909,13 @@ selected rather than (as usual) some other window.  See
 If nil, never make a separate frame.
 If the value is `graphic-only', make a separate frame
 on graphic displays only.
-Any other non-nil value means always make a separate frame."
+Any other non-nil value means always make a separate frame.
+
+This variable is provided mainly for backward compatibility and
+should not be used in new code.  To make `display-buffer' behave
+as if this were t, customize `display-buffer-base-action'
+instead.  See Info node `(elisp) Choosing Window Options' in the
+Emacs Lisp manual for an example."
   :type '(choice
          (const :tag "Never" nil)
          (const :tag "On graphic displays only" graphic-only)
@@ -6918,7 +6936,12 @@ that frame."
  "24.3")
 
 (defcustom pop-up-windows t
-  "Non-nil means `display-buffer' should make a new window."
+  "Non-nil means `display-buffer' should make a new window.
+This variable is provided mainly for backward compatibility and
+should not be used in new code.  To make `display-buffer' behave
+as if this were t, customize `display-buffer-base-action'
+instead.  See Info node `(elisp) Choosing Window Options' in the
+Emacs Lisp manual for an example."
   :type 'boolean
   :group 'windows)
 
@@ -8340,7 +8363,8 @@ indirectly called by the latter."
            (throw 'best t)))))
     ;; When ALIST has a `previous-window' entry, that entry may override
     ;; anything we found so far.
-    (when (and previous-window (boundp previous-window))
+    (when (and previous-window (symbolp previous-window)
+               (boundp previous-window))
       (setq previous-window (symbol-value previous-window)))
     (when (and (setq window previous-window)
               (window-live-p window)
@@ -8595,7 +8619,7 @@ the buffer in the window specified by the rules from 
these variables."
 
 WARNING: This is NOT the way to work on another buffer temporarily
 within a Lisp program!  Use `set-buffer' instead.  That avoids
-messing with the window-buffer correspondences.
+messing with the `window-buffer' correspondences.
 
 If the selected window cannot display the specified buffer
 because it is a minibuffer window or strongly dedicated to
@@ -8650,7 +8674,7 @@ Return the buffer switched to."
                        "Cannot switch buffers in a dedicated window"))
                 ('prompt
                  (if (y-or-n-p
-                      (format "Window is dedicated to %s; undedicate it"
+                      (format "Window is dedicated to %s; undedicate it?"
                               (window-buffer)))
                      (progn
                        (set-window-dedicated-p nil nil)
@@ -9746,7 +9770,7 @@ tool-bar's height to the minimum height needed); if
 `recenter-redisplay' has the special value `tty', then only tty frames
 are redrawn.
 
-Just C-u as prefix means put point in the center of the window
+Just \\[universal-argument] as prefix means put point in the center of the 
window
 and redisplay normally--don't erase and redraw the frame."
   (if (functionp recenter-window-group-function)
       (funcall recenter-window-group-function arg)
@@ -9875,7 +9899,7 @@ With plain \\[universal-argument], move current line to 
window center."
 
 A prefix argument is handled like `recenter':
  With numeric prefix ARG, move current line to window-line ARG.
- With plain `C-u', move current line to window center."
+ With plain \\[universal-argument], move current line to window center."
   (interactive "P")
   (with-selected-window (other-window-for-scrolling)
     (recenter-top-bottom arg)
@@ -10365,7 +10389,7 @@ displaying that processes's buffer."
                           (setq repeat-map 'other-window-repeat-map)
                           (other-window -1)))
     map)
-  "Keymap to repeat other-window key sequences.  Used in `repeat-mode'.")
+  "Keymap to repeat `other-window' key sequences.  Used in `repeat-mode'.")
 (put 'other-window 'repeat-map 'other-window-repeat-map)
 
 (defvar resize-window-repeat-map
diff --git a/lisp/winner.el b/lisp/winner.el
index 8062fbae90..1b2807f248 100644
--- a/lisp/winner.el
+++ b/lisp/winner.el
@@ -131,8 +131,7 @@ You may want to include buffer names such as *Help*, 
*Apropos*,
 
 
 (defsubst winner-equal (a b)
-  "Check whether two Winner configurations (as produced by
-`winner-conf') are equal."
+  "Return t if two Winner configurations (as produced by `winner-conf') are 
equal."
   (equal (cdr a) (cdr b)))
 
 
diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el
index 23e8001c01..2819c6163d 100644
--- a/lisp/x-dnd.el
+++ b/lisp/x-dnd.el
@@ -377,7 +377,7 @@ Currently XDND, Motif and old KDE 1.x protocols are 
recognized."
     ("XdndActionMove" . move)
     ("XdndActionLink" . link)
     ("XdndActionAsk" . ask))
-  "Mapping from XDND action types to lisp symbols.")
+  "Mapping from XDND action types to Lisp symbols.")
 
 (declare-function x-change-window-property "xfns.c"
                  (prop value &optional frame type format outer-P))
diff --git a/lisp/xdg.el b/lisp/xdg.el
index e5165bbd86..1f9fa6795e 100644
--- a/lisp/xdg.el
+++ b/lisp/xdg.el
@@ -109,7 +109,7 @@ file:///foo/bar.jpg"
         "_DIR=\""
         (group-n 2 (or "/" "$HOME/") (*? (or (not (any "\"")) "\\\"")))
         "\""))
-  "Regexp matching non-comment lines in xdg-user-dirs config files.")
+  "Regexp matching non-comment lines in `xdg-user-dirs' config files.")
 
 (defvar xdg-user-dirs nil
   "Alist of directory keys and values.")
@@ -131,7 +131,7 @@ This should be called at the beginning of a line."
       (when (and k v) (cons k (xdg--substitute-home-env v))))))
 
 (defun xdg--user-dirs-parse-file (filename)
-  "Return alist of xdg-user-dirs from FILENAME."
+  "Return alist of `xdg-user-dirs' from FILENAME."
   (let (elt res)
     (when (file-readable-p filename)
       (with-temp-buffer
diff --git a/lisp/xml.el b/lisp/xml.el
index 1b2d655738..0282e3741c 100644
--- a/lisp/xml.el
+++ b/lisp/xml.el
@@ -83,7 +83,7 @@
 ;;;  Macros to parse the list
 
 (defconst xml-undefined-entity "?"
-  "What to substitute for undefined entities")
+  "What to substitute for undefined entities.")
 
 (defconst xml-default-ns '(("" . "")
                           ("xml" . "http://www.w3.org/XML/1998/namespace";)
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index 72faff8101..e4e91aa892 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -27,7 +27,7 @@
 ;; This is actually useful when you are running X11 locally, but is
 ;; working on remote machine over a modem line or through a gateway.
 
-;; It works by translating xterm escape codes into generic emacs mouse
+;; It works by translating xterm escape codes into generic Emacs mouse
 ;; events so it should work with any package that uses the mouse.
 
 ;; You don't have to turn off xterm mode to use the normal xterm mouse
@@ -376,11 +376,11 @@ given escape sequence takes precedence over the former."
   "\e[?1000h\e[?1003h\e[?1005h\e[?1006h"
   "Control sequence to enable xterm mouse tracking.
 Enables basic mouse tracking, mouse motion events and finally
-extended tracking on terminals that support it. The following
+extended tracking on terminals that support it.  The following
 escape sequences are understood by modern xterms:
 
 \"\\e[?1000h\" \"Basic mouse mode\": Enables reports for mouse
-            clicks. There is a limit to the maximum row/column
+            clicks.  There is a limit to the maximum row/column
             position (<= 223), which can be reported in this
             basic mode.
 
@@ -389,7 +389,7 @@ escape sequences are understood by modern xterms:
 
 \"\\e[?1005h\" \"UTF-8 coordinate extension\": Enables an extension
             to the basic mouse mode, which uses UTF-8
-            characters to overcome the 223 row/column limit. This
+            characters to overcome the 223 row/column limit.  This
             extension may conflict with non UTF-8 applications or
             non UTF-8 locales.
 
diff --git a/src/comp.c b/src/comp.c
index 0012860096..fbf6a3c670 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -152,8 +152,10 @@ DEF_DLL_FN (gcc_jit_lvalue *, gcc_jit_context_new_global,
 DEF_DLL_FN (gcc_jit_lvalue *, gcc_jit_function_new_local,
             (gcc_jit_function *func, gcc_jit_location *loc, gcc_jit_type *type,
              const char *name));
+#if defined (LIBGCCJIT_HAVE_gcc_jit_global_set_initializer)
 DEF_DLL_FN (gcc_jit_lvalue *, gcc_jit_global_set_initializer,
            (gcc_jit_lvalue *global, const void *blob, size_t num_bytes));
+#endif
 DEF_DLL_FN (gcc_jit_lvalue *, gcc_jit_lvalue_access_field,
             (gcc_jit_lvalue *struct_or_union, gcc_jit_location *loc,
              gcc_jit_field *field));
@@ -259,9 +261,11 @@ DEF_DLL_FN (void, gcc_jit_context_set_str_option,
 DEF_DLL_FN (void, gcc_jit_struct_set_fields,
             (gcc_jit_struct *struct_type, gcc_jit_location *loc, int 
num_fields,
              gcc_jit_field **fields));
+#if defined (LIBGCCJIT_HAVE_gcc_jit_version)
 DEF_DLL_FN (int, gcc_jit_version_major, (void));
 DEF_DLL_FN (int, gcc_jit_version_minor, (void));
 DEF_DLL_FN (int, gcc_jit_version_patchlevel, (void));
+#endif
 
 static bool
 init_gccjit_functions (void)
@@ -332,10 +336,14 @@ init_gccjit_functions (void)
   LOAD_DLL_FN (library, gcc_jit_type_get_pointer);
   LOAD_DLL_FN_OPT (library, gcc_jit_context_add_command_line_option);
   LOAD_DLL_FN_OPT (library, gcc_jit_context_add_driver_option);
+#if defined (LIBGCCJIT_HAVE_gcc_jit_global_set_initializer)
   LOAD_DLL_FN_OPT (library, gcc_jit_global_set_initializer);
+#endif
+#if defined (LIBGCCJIT_HAVE_gcc_jit_version)
   LOAD_DLL_FN_OPT (library, gcc_jit_version_major);
   LOAD_DLL_FN_OPT (library, gcc_jit_version_minor);
   LOAD_DLL_FN_OPT (library, gcc_jit_version_patchlevel);
+#endif
 
   return true;
 }
@@ -388,7 +396,9 @@ init_gccjit_functions (void)
 #define gcc_jit_function_get_param fn_gcc_jit_function_get_param
 #define gcc_jit_function_new_block fn_gcc_jit_function_new_block
 #define gcc_jit_function_new_local fn_gcc_jit_function_new_local
-#define gcc_jit_global_set_initializer fn_gcc_jit_global_set_initializer
+#if defined (LIBGCCJIT_HAVE_gcc_jit_global_set_initializer)
+ #define gcc_jit_global_set_initializer fn_gcc_jit_global_set_initializer
+#endif
 #define gcc_jit_lvalue_access_field fn_gcc_jit_lvalue_access_field
 #define gcc_jit_lvalue_as_rvalue fn_gcc_jit_lvalue_as_rvalue
 #define gcc_jit_lvalue_get_address fn_gcc_jit_lvalue_get_address
@@ -402,9 +412,11 @@ init_gccjit_functions (void)
 #define gcc_jit_struct_set_fields fn_gcc_jit_struct_set_fields
 #define gcc_jit_type_get_const fn_gcc_jit_type_get_const
 #define gcc_jit_type_get_pointer fn_gcc_jit_type_get_pointer
-#define gcc_jit_version_major fn_gcc_jit_version_major
-#define gcc_jit_version_minor fn_gcc_jit_version_minor
-#define gcc_jit_version_patchlevel fn_gcc_jit_version_patchlevel
+#if defined (LIBGCCJIT_HAVE_gcc_jit_version)
+ #define gcc_jit_version_major fn_gcc_jit_version_major
+ #define gcc_jit_version_minor fn_gcc_jit_version_minor
+ #define gcc_jit_version_patchlevel fn_gcc_jit_version_patchlevel
+#endif
 
 #endif
 
@@ -2481,8 +2493,7 @@ emit_static_object (const char *name, Lisp_Object obj)
   ptrdiff_t len = SBYTES (str);
   const char *p = SSDATA (str);
 
-#if defined (LIBGCCJIT_HAVE_gcc_jit_global_set_initializer) \
-  || defined (WINDOWSNT)
+#if defined (LIBGCCJIT_HAVE_gcc_jit_global_set_initializer)
   if (gcc_jit_global_set_initializer)
     {
       ptrdiff_t str_size = len + 1;
@@ -4375,8 +4386,7 @@ DEFUN ("comp-native-driver-options-effective-p",
        doc: /* Return t if `comp-native-driver-options' is effective.  */)
   (void)
 {
-#if defined (LIBGCCJIT_HAVE_gcc_jit_context_add_driver_option)  \
-  || defined (WINDOWSNT)
+#if defined (LIBGCCJIT_HAVE_gcc_jit_context_add_driver_option)
   if (gcc_jit_context_add_driver_option)
     return Qt;
 #endif
@@ -4405,8 +4415,7 @@ add_driver_options (void)
 {
   Lisp_Object options = Fsymbol_value (Qnative_comp_driver_options);
 
-#if defined (LIBGCCJIT_HAVE_gcc_jit_context_add_driver_option) \
-  || defined (WINDOWSNT)
+#if defined (LIBGCCJIT_HAVE_gcc_jit_context_add_driver_option)
   load_gccjit_if_necessary (true);
   if (!NILP (Fcomp_native_driver_options_effective_p ()))
     FOR_EACH_TAIL (options)
@@ -4425,8 +4434,7 @@ add_driver_options (void)
                            " and above."));
 
   /* Captured `comp-native-driver-options' because file-local.  */
-#if defined (LIBGCCJIT_HAVE_gcc_jit_context_add_driver_option) \
-  || defined (WINDOWSNT)
+#if defined (LIBGCCJIT_HAVE_gcc_jit_context_add_driver_option)
   options = comp.driver_options;
   if (!NILP (Fcomp_native_driver_options_effective_p ()))
     FOR_EACH_TAIL (options)
@@ -4587,8 +4595,7 @@ DEFUN ("comp--compile-ctxt-to-file", 
Fcomp__compile_ctxt_to_file,
 
   /* Work around bug#46495 (GCC PR99126). */
 #if defined (WIDE_EMACS_INT)                                           \
-  && (defined (LIBGCCJIT_HAVE_gcc_jit_context_add_command_line_option) \
-      || defined (WINDOWSNT))
+  && defined (LIBGCCJIT_HAVE_gcc_jit_context_add_command_line_option)
   Lisp_Object version = Fcomp_libgccjit_version ();
   if (NILP (version)
       || XFIXNUM (XCAR (version)) < 11)
@@ -4640,7 +4647,7 @@ The return value has the form (MAJOR MINOR PATCHLEVEL) or 
nil if
 unknown (before GCC version 10).  */)
   (void)
 {
-#if defined (LIBGCCJIT_HAVE_gcc_jit_version) || defined (WINDOWSNT)
+#if defined (LIBGCCJIT_HAVE_gcc_jit_version)
   load_gccjit_if_necessary (true);
 
   return gcc_jit_version_major
diff --git a/src/dispextern.h b/src/dispextern.h
index f4c7575b35..6aefe43e19 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3202,7 +3202,7 @@ enum tab_bar_item_idx
 
 /* Default values of the above variables.  */
 
-#define DEFAULT_TAB_BAR_BUTTON_MARGIN 4
+#define DEFAULT_TAB_BAR_BUTTON_MARGIN 1
 #define DEFAULT_TAB_BAR_BUTTON_RELIEF 1
 
 /* The height in pixels of the default tab-bar images.  */
diff --git a/src/fns.c b/src/fns.c
index c39fce21c7..4e74589ef2 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -2950,8 +2950,10 @@ do_yes_or_no_p (Lisp_Object prompt)
 DEFUN ("yes-or-no-p", Fyes_or_no_p, Syes_or_no_p, 1, 1, 0,
        doc: /* Ask user a yes-or-no question.
 Return t if answer is yes, and nil if the answer is no.
-PROMPT is the string to display to ask the question.  It should end in
-a space; `yes-or-no-p' adds \"(yes or no) \" to it.
+
+PROMPT is the string to display to ask the question; `yes-or-no-p'
+adds \"(yes or no) \" to it.  It does not need to end in space, but if
+it does up to one space will be removed.
 
 The user must confirm the answer with RET, and can edit it until it
 has been confirmed.
diff --git a/src/frame.h b/src/frame.h
index a8ad011889..3dd76805dd 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -449,8 +449,8 @@ struct frame
   /* Non-zero if this frame's faces need to be recomputed.  */
   bool_bf face_change : 1;
 
-  /* Non-zero if this frame's image cache cannot be freed because the
-     frame is in the process of being redisplayed.  */
+  /* Non-zero if this frame's image cache and face cache cannot be
+     freed because the frame is in the process of being redisplayed.  */
   bool_bf inhibit_clear_image_cache : 1;
 
   /* True when new_width or new_height were set by change_frame_size,
diff --git a/src/minibuf.c b/src/minibuf.c
index c9134eff67..0e7baf30dc 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -2055,7 +2055,11 @@ See also `completing-read-function'.  */)
 /* Test whether TXT is an exact completion.  */
 DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0,
        doc: /* Return non-nil if STRING is a valid completion.
+For instance, if COLLECTION is a list of strings, STRING is a
+valid completion if it appears in the list and PREDICATE is satisfied.
+
 Takes the same arguments as `all-completions' and `try-completion'.
+
 If COLLECTION is a function, it is called with three arguments:
 the values STRING, PREDICATE and `lambda'.  */)
   (Lisp_Object string, Lisp_Object collection, Lisp_Object predicate)
diff --git a/src/nsmenu.m b/src/nsmenu.m
index 3493e4e131..f0c5bb24e6 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -1094,7 +1094,7 @@ update_frame_tool_bar (struct frame *f)
 #undef TOOLPROP
     }
 
-  if ([toolbar isVisible] != FRAME_EXTERNAL_TOOL_BAR (f))
+  if (![toolbar isVisible] != !FRAME_EXTERNAL_TOOL_BAR (f))
     {
       f->output_data.ns->in_animation = 1;
       [toolbar setVisible: FRAME_EXTERNAL_TOOL_BAR (f)];
diff --git a/src/nsterm.m b/src/nsterm.m
index 8d88f7bd3d..4ef20e4c2b 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -1021,16 +1021,14 @@ ns_update_begin (struct frame *f)
 
   ns_update_auto_hide_menu_bar ();
 
-#ifdef NS_IMPL_COCOA
-  if ([view isFullscreen] && [view fsIsNative])
+  NSToolbar *toolbar = [[FRAME_NS_VIEW (f) window] toolbar];
+  if (toolbar)
   {
-    // Fix reappearing tool bar in fullscreen for Mac OS X 10.7
+    /* Ensure the toolbars visibility is set correctly.  */
     BOOL tbar_visible = FRAME_EXTERNAL_TOOL_BAR (f) ? YES : NO;
-    NSToolbar *toolbar = [[FRAME_NS_VIEW (f) window] toolbar];
     if (! tbar_visible != ! [toolbar isVisible])
       [toolbar setVisible: tbar_visible];
   }
-#endif
 
   ns_updating_frame = f;
   [view lockFocus];
@@ -8323,10 +8321,9 @@ not_in_argv (NSString *arg)
   EmacsToolbar *toolbar = [[EmacsToolbar alloc]
                             initForView:view
                             withIdentifier:[NSString 
stringWithLispString:f->name]];
+  [toolbar setVisible:NO];
   [self setToolbar:toolbar];
 
-  update_frame_tool_bar (f);
-
 #ifdef NS_IMPL_COCOA
   {
     NSButton *toggleButton;
diff --git a/src/w32term.c b/src/w32term.c
index 70e5501db1..9cf250cd73 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -2423,29 +2423,15 @@ w32_draw_stretch_glyph_string (struct glyph_string *s)
   else if (!s->background_filled_p)
     {
       int background_width = s->background_width;
-      int x = s->x, text_left_x = window_box_left_offset (s->w, TEXT_AREA);
+      int x = s->x, text_left_x = window_box_left (s->w, TEXT_AREA);
 
       /* Don't draw into left fringe or scrollbar area except for
          header line and mode line.  */
-      if (x < text_left_x && !s->row->mode_line_p)
+      if (s->area == TEXT_AREA
+         && x < text_left_x && !s->row->mode_line_p)
        {
-         int left_x = WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH (s->w);
-         int right_x = text_left_x;
-
-         if (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (s->w))
-           left_x += WINDOW_LEFT_FRINGE_WIDTH (s->w);
-         else
-           right_x -= WINDOW_LEFT_FRINGE_WIDTH (s->w);
-
-         /* Adjust X and BACKGROUND_WIDTH to fit inside the space
-            between LEFT_X and RIGHT_X.  */
-         if (x < left_x)
-           {
-             background_width -= left_x - x;
-             x = left_x;
-           }
-         if (x + background_width > right_x)
-           background_width = right_x - x;
+         background_width -= text_left_x - x;
+         x = text_left_x;
        }
       if (background_width > 0)
        w32_draw_glyph_string_bg_rect (s, x, s->y, background_width, s->height);
diff --git a/src/xdisp.c b/src/xdisp.c
index 45c7090fc0..2e72f6b591 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -13774,7 +13774,7 @@ handle_tab_bar_click (struct frame *f, int x, int y, 
bool down_p,
   frame_to_window_pixel_xy (w, &x, &y);
   ts = get_tab_bar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx, &close_p);
   if (ts == -1)
-    return Qnil;
+    return Fcons (Qtab_bar, Qnil);
 
   /* If item is disabled, do nothing.  */
   enabled_p = AREF (f->tab_bar_items, prop_idx + TAB_BAR_ITEM_ENABLED_P);
@@ -16061,12 +16061,13 @@ redisplay_internal (void)
              if (FRAME_VISIBLE_P (f) && !FRAME_OBSCURED_P (f))
                {
 
-                 /* Don't allow freeing images for this frame as long
-                    as the frame's update wasn't completed.  This
-                    prevents crashes when some Lisp that runs from
-                    the various hooks or font-lock decides to clear
-                    the frame's image cache, when the images in that
-                    cache are referenced by the desired matrix.  */
+                 /* Don't allow freeing images and faces for this
+                    frame as long as the frame's update wasn't
+                    completed.  This prevents crashes when some Lisp
+                    that runs from the various hooks or font-lock
+                    decides to clear the frame's image cache and face
+                    cache, when the images and faces in those caches
+                    are referenced by the desired matrix.  */
                  f->inhibit_clear_image_cache = true;
                  redisplay_windows (FRAME_ROOT_WINDOW (f));
                }
diff --git a/src/xfaces.c b/src/xfaces.c
index 2273fb4fe4..aefed54ebc 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -674,7 +674,8 @@ clear_face_cache (bool clear_fonts_p)
        {
          struct frame *f = XFRAME (frame);
          if (FRAME_WINDOW_P (f)
-             && FRAME_DISPLAY_INFO (f)->n_fonts > CLEAR_FONT_TABLE_NFONTS)
+             && FRAME_DISPLAY_INFO (f)->n_fonts > CLEAR_FONT_TABLE_NFONTS
+             && !f->inhibit_clear_image_cache)
            {
              clear_font_cache (f);
              free_all_realized_faces (frame);
diff --git a/src/xterm.c b/src/xterm.c
index 2c56c73068..ae3af598da 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -3588,29 +3588,15 @@ x_draw_stretch_glyph_string (struct glyph_string *s)
   else if (!s->background_filled_p)
     {
       int background_width = s->background_width;
-      int x = s->x, text_left_x = window_box_left_offset (s->w, TEXT_AREA);
+      int x = s->x, text_left_x = window_box_left (s->w, TEXT_AREA);
 
       /* Don't draw into left fringe or scrollbar area except for
          header line and mode line.  */
-      if (x < text_left_x && !s->row->mode_line_p)
+      if (s->area == TEXT_AREA
+         && x < text_left_x && !s->row->mode_line_p)
        {
-         int left_x = WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH (s->w);
-         int right_x = text_left_x;
-
-         if (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (s->w))
-           left_x += WINDOW_LEFT_FRINGE_WIDTH (s->w);
-         else
-           right_x -= WINDOW_LEFT_FRINGE_WIDTH (s->w);
-
-         /* Adjust X and BACKGROUND_WIDTH to fit inside the space
-            between LEFT_X and RIGHT_X.  */
-         if (x < left_x)
-           {
-             background_width -= left_x - x;
-             x = left_x;
-           }
-         if (x + background_width > right_x)
-           background_width = right_x - x;
+         background_width -= text_left_x - x;
+         x = text_left_x;
        }
       if (background_width > 0)
        x_draw_glyph_string_bg_rect (s, x, s->y, background_width, s->height);
diff --git a/test/Makefile.in b/test/Makefile.in
index 7047c24482..e0a2b7799a 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -75,7 +75,7 @@ EMACS_EXTRAOPT=
 EMACSOPT = --no-init-file --no-site-file --no-site-lisp -L 
"$(SEPCHAR)$(srcdir)" $(elpa_opts) $(EMACS_EXTRAOPT)
 
 # Prevent any settings in the user environment causing problems.
-unexport EMACSDATA EMACSDOC EMACSPATH GREP_OPTIONS
+unexport EMACSDATA EMACSDOC EMACSPATH GREP_OPTIONS XDG_CONFIG_HOME
 
 ## To run tests under a debugger, set this to eg: "gdb --args".
 GDB =
diff --git a/test/lisp/abbrev-tests.el b/test/lisp/abbrev-tests.el
index 2a42d5636d..2dcfb1c309 100644
--- a/test/lisp/abbrev-tests.el
+++ b/test/lisp/abbrev-tests.el
@@ -106,7 +106,7 @@
     (should (abbrev-table-empty-p table))))
 
 (ert-deftest kill-all-abbrevs-test ()
-  "Test undefining all defined abbrevs"
+  "Test undefining all defined abbrevs."
   (unless noninteractive
     (ert-skip "Cannot test kill-all-abbrevs in interactive mode"))
 
@@ -125,14 +125,14 @@
                                    abbrev-table-name-list))))))
 
 (ert-deftest abbrev-table-name-test ()
-  "Test returning name of abbrev-table"
+  "Test returning name of abbrev-table."
   (let ((ert-test-abbrevs (setup-test-abbrev-table))
         (no-such-table nil))
     (should (equal 'ert-test-abbrevs (abbrev-table-name ert-test-abbrevs)))
     (should (equal nil (abbrev-table-name no-such-table)))))
 
 (ert-deftest clear-abbrev-table-test ()
-  "Test clearing single abbrev table"
+  "Test clearing single abbrev table."
   (let ((ert-test-abbrevs (setup-test-abbrev-table)))
     (should (equal "abbrev-ert-test" (abbrev-expansion "a-e-t" 
ert-test-abbrevs)))
     (clear-abbrev-table ert-test-abbrevs)
@@ -140,7 +140,7 @@
     (should (equal t (abbrev-table-empty-p ert-test-abbrevs)))))
 
 (ert-deftest list-abbrevs-test ()
-  "Test generation of abbrev list buffer"
+  "Test generation of abbrev list buffer."
   ;; Somewhat redundant as prepare-abbrev-list-buffer is also tested.
   ;; all abbrevs
   (let ((abbrev-buffer (prepare-abbrev-list-buffer)))
@@ -152,7 +152,7 @@
     (kill-buffer abbrev-buffer)))
 
 (ert-deftest prepare-abbrev-list-buffer-test ()
-  "Test generation of abbrev list buffer"
+  "Test generation of abbrev list buffer."
   ;; all abbrevs
   (let ((ert-test-abbrevs (setup-test-abbrev-table)))
     (with-current-buffer (prepare-abbrev-list-buffer)
@@ -180,7 +180,7 @@
       (kill-buffer "*Abbrevs*"))))
 
 (ert-deftest insert-abbrevs-test ()
-  "Test inserting abbrev definitions into buffer"
+  "Test inserting abbrev definitions into buffer."
   (with-temp-buffer
     (insert-abbrevs)
       (should (progn
@@ -188,7 +188,7 @@
                 (search-forward "global-abbrev-table")))))
 
 (ert-deftest edit-abbrevs-test ()
-  "Test editing abbrevs from buffer"
+  "Test editing abbrevs from buffer."
   (defvar ert-edit-abbrevs-test-table nil)
   (let ((ert-test-abbrevs (setup-test-abbrev-table)))
     (with-temp-buffer
@@ -205,7 +205,7 @@
                      (abbrev-expansion "e-a-t" 
ert-edit-abbrevs-test-table))))))
 
 (ert-deftest define-abbrevs-test ()
-  "Test defining abbrevs from buffer"
+  "Test defining abbrevs from buffer."
   (defvar ert-bad-abbrev-table nil)
   (defvar ert-good-abbrev-table nil)
   (defvar ert-redefine-abbrev-table nil)
@@ -235,7 +235,7 @@
     (should (equal nil (abbrev-expansion "g-a-t" ert-good-abbrev-table)))))
 
 (ert-deftest read-write-abbrev-file-test ()
-  "Test reading and writing abbrevs from file"
+  "Test reading and writing abbrevs from file."
   (let ((temp-test-file (make-temp-file "ert-abbrev-test"))
         (ert-test-abbrevs (setup-test-abbrev-table)))
     (write-abbrev-file temp-test-file)
@@ -246,7 +246,7 @@
     (delete-file temp-test-file)))
 
 (ert-deftest read-write-abbrev-file-test-with-props ()
-  "Test reading and writing abbrevs from file"
+  "Test reading and writing abbrevs from file."
   (let ((temp-test-file (make-temp-file "ert-abbrev-test"))
         (ert-test-abbrevs (setup-test-abbrev-table-with-props)))
     (write-abbrev-file temp-test-file)
@@ -257,7 +257,7 @@
     (delete-file temp-test-file)))
 
 (ert-deftest abbrev-edit-save-to-file-test ()
-  "Test saving abbrev definitions in buffer to file"
+  "Test saving abbrev definitions in buffer to file."
   (defvar ert-save-test-table nil)
   (let ((temp-test-file (make-temp-file "ert-abbrev-test"))
         (ert-test-abbrevs (setup-test-abbrev-table)))
diff --git a/test/lisp/arc-mode-tests.el b/test/lisp/arc-mode-tests.el
index 5c6af9b45c..b05a9629c1 100644
--- a/test/lisp/arc-mode-tests.el
+++ b/test/lisp/arc-mode-tests.el
@@ -48,4 +48,4 @@
 
 (provide 'arc-mode-tests)
 
-;; arc-mode-tests.el ends here
+;;; arc-mode-tests.el ends here
diff --git a/test/lisp/auth-source-pass-tests.el 
b/test/lisp/auth-source-pass-tests.el
index d050ac5b69..a0a97eca5e 100644
--- a/test/lisp/auth-source-pass-tests.el
+++ b/test/lisp/auth-source-pass-tests.el
@@ -56,10 +56,10 @@
                      ("key2" . "please: keep my space after colon"))))))
 
 (defvar auth-source-pass--debug-log nil
-  "Contains a list of all messages passed to `auth-source-do-debug`.")
+  "Contains a list of all messages passed to `auth-source-do-debug'.")
 
 (defun auth-source-pass--have-message-matching (regexp)
-  "Return non-nil iff at least one `auth-source-do-debug` match REGEXP."
+  "Return non-nil iff at least one `auth-source-do-debug' match REGEXP."
   (seq-find (lambda (message)
               (string-match regexp message))
             auth-source-pass--debug-log))
@@ -75,8 +75,8 @@ REGEXP is the same as in 
`auth-source-pass--have-message-matching'."
 (put #'auth-source-pass--have-message-matching 'ert-explainer 
#'auth-source-pass--explain--have-message-matching)
 
 (defun auth-source-pass--debug (&rest msg)
-  "Format MSG and add that to `auth-source-pass--debug-log`.
-This function is intended to be set to `auth-source-debug`."
+  "Format MSG and add that to `auth-source-pass--debug-log'.
+This function is intended to be set to `auth-source-debug'."
   (add-to-list 'auth-source-pass--debug-log (apply #'format msg) t))
 
 (defvar auth-source-pass--parse-log nil)
diff --git a/test/lisp/auth-source-tests.el b/test/lisp/auth-source-tests.el
index 1c4bd8d36d..45482e916e 100644
--- a/test/lisp/auth-source-tests.el
+++ b/test/lisp/auth-source-tests.el
@@ -247,7 +247,7 @@
     (should-not (auth-source-remembered-p '(:host t)))))
 
 (ert-deftest auth-source-test-searches ()
-  "Test auth-source searches with various parameters"
+  "Test auth-source searches with various parameters."
   :tags '(auth-source auth-source/netrc)
   (let* ((entries '("machine a1 port a2 user a3 password a4"
                     "machine b1 port b2 user b3 password b4"
diff --git a/test/lisp/emacs-lisp/checkdoc-tests.el 
b/test/lisp/emacs-lisp/checkdoc-tests.el
index 2a1d8b2763..a4b252031f 100644
--- a/test/lisp/emacs-lisp/checkdoc-tests.el
+++ b/test/lisp/emacs-lisp/checkdoc-tests.el
@@ -122,4 +122,28 @@ See the comments in Bug#24998."
     (should (looking-at-p "\"baz\")"))
     (should-not (checkdoc-next-docstring))))
 
+(ert-deftest checkdoc-tests-in-abbrevation-p ()
+  (with-temp-buffer
+    (emacs-lisp-mode)
+    (insert "foo bar e.g. baz")
+    (goto-char (point-min))
+    (re-search-forward "e.g")
+    (should (checkdoc-in-abbreviation-p (point)))))
+
+(ert-deftest checkdoc-tests-in-abbrevation-p/with-parens ()
+  (with-temp-buffer
+    (emacs-lisp-mode)
+    (insert "foo bar (e.g. baz)")
+    (goto-char (point-min))
+    (re-search-forward "e.g")
+    (should (checkdoc-in-abbreviation-p (point)))))
+
+(ert-deftest checkdoc-tests-in-abbrevation-p/with-escaped-parens ()
+  (with-temp-buffer
+    (emacs-lisp-mode)
+    (insert "foo\n\\(e.g. baz)")
+    (goto-char (point-min))
+    (re-search-forward "e.g")
+    (should (checkdoc-in-abbreviation-p (point)))))
+
 ;;; checkdoc-tests.el ends here
diff --git a/test/lisp/emacs-lisp/seq-tests.el 
b/test/lisp/emacs-lisp/seq-tests.el
index 44e855e2cf..8dc0b93b5a 100644
--- a/test/lisp/emacs-lisp/seq-tests.el
+++ b/test/lisp/emacs-lisp/seq-tests.el
@@ -336,6 +336,33 @@ Evaluate BODY for each created sequence.
     (should (same-contents-p list vector))
     (should (vectorp vector))))
 
+(ert-deftest test-seq-union ()
+  (let ((v1 '(1 2 3))
+        (v2 '(3 5)))
+   (should (same-contents-p (seq-union v1 v2)
+                            '(1 2 3 5))))
+
+  (let ((v1 '(1 2 3 4 5 6))
+        (v2 '(4 5 6 7 8 9)))
+   (should (same-contents-p (seq-union v1 v2)
+                            '(1 2 3 4 5 6 7 8 9))))
+
+  (let ((v1 [1 2 3 4 5])
+        (v2 [4 5 6 "a"]))
+   (should (same-contents-p (seq-union v1 v2)
+                            '(1 2 3 4 5 6 "a"))))
+
+  (let ((v1 '("a" "b" "c"))
+        (v2 '("f" "c" "e" "a")))
+   (should (same-contents-p (seq-union v1 v2)
+                            '("a" "b" "c" "f" "e"))))
+
+  (let ((v1 '("a"))
+        (v2 '("a"))
+        (testfn #'eq))
+   (should (same-contents-p (seq-union v1 v2 testfn)
+                            '("a" "a")))))
+
 (ert-deftest test-seq-intersection ()
   (let ((v1 [2 3 4 5])
         (v2 [1 3 5 6 7]))
diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el
index d13397274a..22f62a35c7 100644
--- a/test/lisp/erc/erc-tests.el
+++ b/test/lisp/erc/erc-tests.el
@@ -24,6 +24,7 @@
 (require 'ert)
 (require 'erc)
 (require 'erc-ring)
+(require 'erc-networks)
 
 (ert-deftest erc--read-time-period ()
   (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "")))
@@ -47,6 +48,85 @@
   (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "1d")))
     (should (equal (erc--read-time-period "foo: ") 86400))))
 
+(ert-deftest erc-with-all-buffers-of-server ()
+  (let (proc-exnet
+        proc-onet
+        erc-kill-channel-hook erc-kill-server-hook erc-kill-buffer-hook)
+
+    (with-current-buffer (get-buffer-create "OtherNet")
+      (erc-mode)
+      (setq proc-onet (start-process "sleep" (current-buffer) "sleep" "1")
+            erc-server-process proc-onet
+            erc-network 'OtherNet)
+      (set-process-query-on-exit-flag erc-server-process nil))
+
+    (with-current-buffer (get-buffer-create "ExampleNet")
+      (erc-mode)
+      (setq proc-exnet (start-process "sleep" (current-buffer) "sleep" "1")
+            erc-server-process proc-exnet
+            erc-network 'ExampleNet)
+      (set-process-query-on-exit-flag erc-server-process nil))
+
+    (with-current-buffer (get-buffer-create "#foo")
+      (erc-mode)
+      (setq erc-server-process proc-exnet)
+      (setq erc-default-recipients '("#foo")))
+
+    (with-current-buffer (get-buffer-create "#spam")
+      (erc-mode)
+      (setq erc-server-process proc-onet)
+      (setq erc-default-recipients '("#spam")))
+
+    (with-current-buffer (get-buffer-create "#bar")
+      (erc-mode)
+      (setq erc-server-process proc-onet)
+      (setq erc-default-recipients '("#bar")))
+
+    (with-current-buffer (get-buffer-create "#baz")
+      (erc-mode)
+      (setq erc-server-process proc-exnet)
+      (setq erc-default-recipients '("#baz")))
+
+    (should (eq (get-buffer-process "ExampleNet") proc-exnet))
+    (erc-with-all-buffers-of-server (get-buffer-process "ExampleNet")
+      nil
+      (kill-buffer))
+
+    (should-not (get-buffer "ExampleNet"))
+    (should-not (get-buffer "#foo"))
+    (should-not (get-buffer "#baz"))
+    (should (get-buffer "OtherNet"))
+    (should (get-buffer "#bar"))
+    (should (get-buffer "#spam"))
+
+    (let* ((test (lambda () (not (string= (buffer-name) "#spam"))))
+           (calls 0)
+           (get-test (lambda () (cl-incf calls) test)))
+
+      (erc-with-all-buffers-of-server proc-onet
+        (funcall get-test)
+        (kill-buffer))
+
+      (should (= calls 1)))
+
+    (should-not (get-buffer "OtherNet"))
+    (should-not (get-buffer "#bar"))
+    (should (get-buffer "#spam"))
+    (kill-buffer "#spam")))
+
+(ert-deftest erc-lurker-maybe-trim ()
+  (let (erc-lurker-trim-nicks
+        (erc-lurker-ignore-chars "_`"))
+
+    (should (string= "nick`" (erc-lurker-maybe-trim "nick`")))
+
+    (setq erc-lurker-trim-nicks t)
+    (should (string= "nick" (erc-lurker-maybe-trim "nick`")))
+    (should (string= "ni`_ck" (erc-lurker-maybe-trim "ni`_ck__``")))
+
+    (setq erc-lurker-ignore-chars "_-`") ; set of chars, not character alts
+    (should (string= "nick" (erc-lurker-maybe-trim "nick-_`")))))
+
 (ert-deftest erc-ring-previous-command-base-case ()
   (ert-info ("Create ring when nonexistent and do nothing")
     (let (erc-input-ring
@@ -61,13 +141,16 @@
   (with-current-buffer (get-buffer-create "*#fake*")
     (erc-mode)
     (insert "\n\n")
-    (setq erc-input-marker (make-marker) ; these are all local
-          erc-insert-marker (make-marker)
-          erc-send-completed-hook nil)
+    (should-not (local-variable-if-set-p 'erc-send-completed-hook))
+    (set (make-local-variable 'erc-send-completed-hook) nil) ; skip t (globals)
+    (setq erc-input-marker (make-marker)
+          erc-insert-marker (make-marker))
     (set-marker erc-insert-marker (point-max))
     (erc-display-prompt)
     (should (= (point) erc-input-marker))
-    (add-hook 'erc-pre-send-functions #'erc-add-to-input-ring nil t)
+    ;; Just in case erc-ring-mode is already on
+    (setq-local erc-pre-send-functions nil)
+    (add-hook 'erc-pre-send-functions #'erc-add-to-input-ring)
     ;;
     (cl-letf (((symbol-function 'erc-process-input-line)
                (lambda (&rest _)
@@ -109,3 +192,38 @@
         (should (looking-at "abc")))))
   (when noninteractive
     (kill-buffer "*#fake*")))
+
+(ert-deftest erc-log-irc-protocol ()
+  (should-not erc-debug-irc-protocol)
+  (with-temp-buffer
+    (setq erc-server-process (start-process "fake" (current-buffer) "true")
+          erc-server-current-nick "tester"
+          erc-session-server "myproxy.localhost"
+          erc-session-port 6667)
+    (let ((inhibit-message noninteractive))
+      (erc-toggle-debug-irc-protocol)
+      (erc-log-irc-protocol "PASS changeme\r\n" 'outgoing)
+      (setq erc-server-announced-name "irc.gnu.org")
+      (erc-log-irc-protocol ":irc.gnu.org 001 tester :Welcome")
+      (erc-log-irc-protocol ":irc.gnu.org 002 tester :Your host is 
irc.gnu.org")
+      (setq erc-network 'FooNet)
+      (erc-log-irc-protocol ":irc.gnu.org 422 tester :MOTD missing")
+      (setq erc-network 'BarNet)
+      (erc-log-irc-protocol ":irc.gnu.org 221 tester +i")
+      (set-process-query-on-exit-flag erc-server-process nil)))
+  (with-current-buffer "*erc-protocol*"
+    (goto-char (point-min))
+    (search-forward "Version")
+    (search-forward "\r\n\r\n")
+    (search-forward "myproxy.localhost:6667 >> PASS" (line-end-position))
+    (forward-line)
+    (search-forward "irc.gnu.org << :irc.gnu.org 001" (line-end-position))
+    (forward-line)
+    (search-forward "irc.gnu.org << :irc.gnu.org 002" (line-end-position))
+    (forward-line)
+    (search-forward "FooNet << :irc.gnu.org 422" (line-end-position))
+    (forward-line)
+    (search-forward "BarNet << :irc.gnu.org 221" (line-end-position)))
+  (when noninteractive
+    (kill-buffer "*erc-protocol*")
+    (should-not erc-debug-irc-protocol)))
diff --git a/test/lisp/international/ucs-normalize-tests.el 
b/test/lisp/international/ucs-normalize-tests.el
index 2b489dc004..52c3d3704e 100644
--- a/test/lisp/international/ucs-normalize-tests.el
+++ b/test/lisp/international/ucs-normalize-tests.el
@@ -181,27 +181,34 @@ implementations:
   (should-not (ucs-normalize-tests--rule1-failing-for-partX 0)))
 
 (defconst ucs-normalize-tests--failing-lines-part1
-  (list 2152 2418 15133 15134 15135 15136 15137 15138
-        15139 15140 15141 15142 16152 16153 16154 16155
-        16156 16157 16158 16159 16160 16161 16162 16163
-        16164 16165 16166 16167 16168 16169 16170 16171
-        16172 16173 16174 16175 16176 16177 16178 16179
-        16180 16181 16182 16183 16184 16185 16186 16187
-        16188 16189 16190 16191 16192 16193 16194 16195
-        16196 16197 16198 16199 16200 16201 16202 16203
-        16204 16205 16206 16207 16208 16209 16210 16211
-        16212 16213 16214 16215 16216 16217 16218 16219
-        16220 16221 16222 16223 16224 16225 16226 16227
-        16228 16229 16230 16231 16232 16233 16234 16235
-        16236 16237 16238 16239 16240 16241 16242 16243
-        16244 16245 16246 16247 16248 16249 16250 16251
-        16252 16253 16254 16255 16256 16257 16258 16259
-        16260 16261 16262 16263 16264 16265 16266 16267
-        16268 16269 16270 16271 16272 16273 16274 16275
-        16276 16277 16278 16279 16280 16281 16282 16283
-        16284 16285 16286 16287 16288 16289 16290 16291
-        16292 16429 16430 16431 16432 16433 16434 16435
-        16436 16437 16438))
+  (list 2412 2413 2414 15133 15134 15135 15136 15137
+        15138 15139 15140 15141 15142 15143 15144 15145
+        15146 15147 15148 15149 15150 15151 15152 15153
+        15154 15155 15156 15157 15158 15159 15160 15161
+        15162 15163 15164 15165 15166 15167 15168 15169
+        15170 15171 15172 15173 15174 15175 15176 15177
+        15178 15179 15180 15181 15182 15183 15184 15185
+        15186 15187 15188 15192 15193 15194 15195 15196
+        15197 15198 15199 15200 15201 16211 16212 16213
+        16214 16215 16216 16217 16218 16219 16220 16221
+        16222 16223 16224 16225 16226 16227 16228 16229
+        16230 16231 16232 16233 16234 16235 16236 16237
+        16238 16239 16240 16241 16242 16243 16244 16245
+        16246 16247 16248 16249 16250 16251 16252 16253
+        16254 16255 16256 16257 16258 16259 16260 16261
+        16262 16263 16264 16265 16266 16267 16268 16269
+        16270 16271 16272 16273 16274 16275 16276 16277
+        16278 16279 16280 16281 16282 16283 16284 16285
+        16286 16287 16288 16289 16290 16291 16292 16293
+        16294 16295 16296 16297 16298 16299 16300 16301
+        16302 16303 16304 16305 16306 16307 16308 16309
+        16310 16311 16312 16313 16314 16315 16316 16317
+        16318 16319 16320 16321 16322 16323 16324 16325
+        16326 16327 16328 16329 16330 16331 16332 16333
+        16334 16335 16336 16337 16338 16339 16340 16341
+        16342 16343 16344 16345 16346 16347 16348 16349
+        16350 16351 16488 16489 16490 16491 16492 16493
+        16494 16495 16496 16497))
 
 ;; Keep a record of failures, for consulting afterwards (the ert
 ;; backtrace only shows a truncated version of these lists).
@@ -260,28 +267,76 @@ implementations:
     ucs-normalize-tests--failing-lines-part1)))
 
 (defconst ucs-normalize-tests--failing-lines-part2
-  (list 17634 17635 17646 17647 17652 17653 17656 17657
-        17660 17661 17672 17673 17750 17751 17832 17834
-        17836 17837 17862 17863 17868 17869 18222 18270
-        18271 18368 18370 18400 18401 18402 18404 18406
-        18408 18410 18412 18413 18414 18416 18417 18418
-        18420 18421 18422 18423 18424 18426 18427 18428
-        18429 18430 18432 18434 18436 18438 18440 18442
-        18444 18446 18448 18450 18452 18454 18456 18458
-        18459 18460 18462 18464 18465 18466 18468 18469
-        18470 18472 18474 18475 18476 18478 18480 18481
-        18482 18484 18486 18487 18488 18490 18492 18494
-        18496 18498 18499 18500 18502 18504 18506 18508
-        18510 18512 18514 18516 18518 18520 18522 18524
-        18526 18528 18530 18531 18532 18533 18534 18602
-        18604 18606 18608 18610 18612 18614 18616 18618
-        18620 18622 18624 18626 18628 18630 18632 18634
-        18636 18638 18640 18642 18644 18646 18648 18650
-        18652 18654 18656 18658 18660 18662 18664 18666
-        18668 18670 18672 18674 18676 18678 18680 18682
-        18684 18686 18688 18690 18692 18694 18696 18698
-        18700 18702 18704 18706 18708 18710 18712 18714
-        18716 18718 18720 18722 18724 18726 18727))
+  (list 17087 17088 17089 17090 17091 17092 17093 17094
+        17098 17099 17100 17101 17102 17103 17104 17105
+        17106 17107 17108 17113 17114 17115 17116 17117
+        17118 17119 17120 17125 17126 17127 17128 17129
+        17130 17131 17132 17133 17134 17135 17136 17137
+        17138 17139 17140 17141 17142 17143 17144 17145
+        17146 17157 17158 17159 17160 17161 17162 17163
+        17164 17185 17186 17187 17188 17189 17190 17197
+        17198 17199 17200 17207 17208 17209 17210 17211
+        17212 17213 17214 17219 17220 17221 17222 17275
+        17276 17285 17286 17295 17296 17309 17310 17311
+        17312 17313 17314 17315 17316 17317 17318 17319
+        17320 17325 17326 17373 17374 17419 17420 17421
+        17422 17433 17434 17439 17440 17465 17466 17473
+        17474 17479 17480 17485 17486 17491 17492 17497
+        17498 17499 17500 17501 17502 17505 17506 17507
+        17508 17511 17512 17519 17520 17523 17524 17527
+        17528 17531 17532 17551 17552 17555 17556 17599
+        17600 17601 17602 17603 17604 17605 17607 17608
+        17609 17610 17611 17612 17613 17615 17617 17619
+        17621 17623 17625 17627 17629 17631 17632 17633
+        17634 17635 17636 17637 17638 17639 17640 17669
+        17670 17675 17676 17681 17682 17689 17690 17691
+        17692 17693 17694 17707 17708 17713 17714 17715
+        17716 17727 17728 17733 17734 17739 17740 17745
+        17746 17749 17750 17753 17754 17759 17760 17767
+        17768 17807 17808 17809 17810 17811 17812 17813
+        17814 17816 17843 17844 17845 17846 17851 17852
+        17861 17875 17876 17879 17880 17899 17900 17911
+        17912 17913 17914 17915 17916 17917 17918 17919
+        17920 17921 17922 17927 17928 17929 17930 17931
+        17932 17933 17935 17937 17938 17939 17940 17941
+        17943 17945 17947 17949 17951 17952 17953 17955
+        17957 17959 17961 17962 17967 17968 17987 17988
+        17993 17994 18003 18004 18005 18006 18007 18008
+        18009 18010 18011 18012 18017 18018 18019 18020
+        18021 18022 18023 18024 18041 18042 18053 18054
+        18069 18070 18079 18080 18163 18164 18165 18166
+        18171 18172 18175 18176 18211 18212 18219 18220
+        18221 18222 18223 18224 18225 18226 18301 18302
+        18389 18390 18391 18392 18393 18394 18397 18398
+        18407 18408 18439 18440 18441 18442 18443 18444
+        18445 18446 18447 18448 18449 18450 18451 18452
+        18457 18458 18459 18460 18471 18472 18479 18480
+        18485 18486 18499 18500 18501 18502 18509 18510
+        18513 18514 18515 18516 18517 18518 18519 18520
+        18521 18523 18524 18525 18527 18528 18531 18537
+        18538 18539 18541 18543 18545 18547 18549 18550
+        18551 18553 18554 18555 18557 18558 18559 18560
+        18561 18563 18564 18565 18566 18567 18569 18571
+        18573 18575 18577 18579 18581 18583 18585 18587
+        18589 18591 18593 18595 18596 18597 18599 18601
+        18602 18603 18605 18606 18607 18609 18611 18612
+        18613 18615 18617 18618 18619 18621 18623 18624
+        18625 18627 18629 18631 18633 18635 18636 18637
+        18639 18641 18643 18645 18647 18649 18651 18653
+        18655 18657 18659 18661 18663 18665 18667 18668
+        18669 18670 18671 18674 18676 18686 18688 18690
+        18692 18694 18695 18696 18697 18698 18699 18700
+        18701 18702 18703 18704 18705 18706 18707 18708
+        18709 18710 18721 18722 18723 18724 18739 18741
+        18743 18745 18747 18749 18751 18753 18755 18757
+        18759 18761 18763 18765 18767 18769 18771 18773
+        18775 18777 18779 18781 18783 18785 18787 18789
+        18791 18793 18795 18797 18799 18801 18803 18805
+        18807 18809 18811 18813 18815 18817 18819 18821
+        18823 18825 18827 18829 18831 18833 18835 18837
+        18839 18840 18841 18842 18843 18844 18845 18846
+        18847 18848 18849 18850 18851 18852 18853 18855
+        18857 18859 18861 18863 18865 18866))
 
 (ert-deftest ucs-normalize-part2 ()
   :tags '(:expensive-test)
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index af4f45d691..9f0264abc1 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -2083,7 +2083,7 @@ Also see `ignore'."
       "/method:host:/:/path//foo"))
 
     ;; Forwhatever reasons, the following tests let Emacs crash for
-    ;; Emacs 25, occasionally. No idea what's up.
+    ;; Emacs 25, occasionally.  No idea what's up.
     (when (tramp--test-emacs26-p)
       (should
        (string-equal
@@ -4464,7 +4464,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
              (should (string-equal (format "%s\n" fnnd) (buffer-string)))
              (should-not (get-buffer-window (current-buffer) t))
 
-             ;; Second run. The output must be appended.
+             ;; Second run.  The output must be appended.
              (goto-char (point-max))
              (should (zerop (process-file "ls" nil t t fnnd)))
              ;; `ls' could produce colorized output.
@@ -4588,8 +4588,10 @@ This tests also `make-symbolic-link', `file-truename' 
and `add-name-to-file'."
                (should
                 (string-match-p
                  (if (memq process-connection-type '(nil pipe))
-                     "66\n6F\n6F\n0D\n0A\n"
-                   "66\n6F\n6F\n0A\n0A\n")
+                     ;; `telnet' converts \r to <CR><NUL> if `crlf'
+                     ;; flag is FALSE.  See telnet(1) man page.
+                     "66\n6F\n6F\n0D\\(\n00\\)?\n0A\n"
+                   "66\n6F\n6F\n0A\\(\n00\\)?\n0A\n")
                  (buffer-string))))
 
            ;; Cleanup.
@@ -4754,8 +4756,9 @@ If UNSTABLE is non-nil, the test is tagged as 
`:unstable'."
        ;; Cleanup.
        (ignore-errors (delete-process proc)))
 
-      ;; Process with stderr buffer.
-      (unless (tramp-direct-async-process-p)
+      ;; Process with stderr buffer.  `telnet' does not cooperate with
+      ;; three processes.
+      (unless (or (tramp--test-telnet-p) (tramp-direct-async-process-p))
        (let ((stderr (generate-new-buffer "*stderr*")))
          (unwind-protect
              (with-temp-buffer
@@ -4851,8 +4854,10 @@ If UNSTABLE is non-nil, the test is tagged as 
`:unstable'."
                   (string-match-p
                    (if (memq (or connection-type process-connection-type)
                              '(nil pipe))
-                       "66\n6F\n6F\n0D\n0A\n"
-                     "66\n6F\n6F\n0A\n0A\n")
+                       ;; `telnet' converts \r to <CR><NUL> if `crlf'
+                       ;; flag is FALSE.  See telnet(1) man page.
+                       "66\n6F\n6F\n0D\\(\n00\\)?\n0A\n"
+                     "66\n6F\n6F\n0A\\(\n00\\)?\n0A\n")
                    (buffer-string))))
 
              ;; Cleanup.
@@ -5498,9 +5503,9 @@ Use direct async.")
           ;; Ignore trailing newline.
          (setq path (substring (shell-command-to-string "echo $PATH") nil -1))
          ;; The shell doesn't handle such long strings.
-         (unless (<= (length path)
-                     (tramp-get-connection-property
-                      tramp-test-vec "pipe-buf" 4096))
+         (when (<= (length path)
+                   (tramp-get-connection-property
+                    tramp-test-vec "pipe-buf" 4096))
            ;; The last element of `exec-path' is `exec-directory'.
             (should
             (string-equal
@@ -6154,6 +6159,12 @@ This requires restrictions of file name syntax."
   "Check, whether the sudoedit method is used."
   (tramp-sudoedit-file-name-p tramp-test-temporary-file-directory))
 
+(defun tramp--test-telnet-p ()
+  "Check, whether the telnet method is used.
+This does not support special file names."
+  (string-equal
+   "telnet" (file-remote-p tramp-test-temporary-file-directory 'method)))
+
 (defun tramp--test-windows-nt-p ()
   "Check, whether the locale host runs MS Windows."
   (eq system-type 'windows-nt))
@@ -6712,6 +6723,7 @@ process sentinels.  They shall not disturb each other."
                   (tramp--test-sh-p)))
   (skip-unless (not (tramp--test-crypt-p)))
   (skip-unless (not (tramp--test-docker-p)))
+  (skip-unless (not (tramp--test-telnet-p)))
   (skip-unless (not (tramp--test-windows-nt-p)))
 
   (with-timeout
diff --git a/test/lisp/progmodes/cperl-mode-resources/grammar.pl 
b/test/lisp/progmodes/cperl-mode-resources/grammar.pl
index c05fd7efc2..96a8699308 100644
--- a/test/lisp/progmodes/cperl-mode-resources/grammar.pl
+++ b/test/lisp/progmodes/cperl-mode-resources/grammar.pl
@@ -1,6 +1,7 @@
 use 5.024;
 use strict;
 use warnings;
+use utf8;
 
 sub outside {
     say "Line @{[__LINE__]}: package '@{[__PACKAGE__]}'";
@@ -155,4 +156,17 @@ package :: {
 
 Shoved::elsewhere();
 
+# Finally, try unicode identifiers.
+package Erdős::Number;
+
+sub erdős_number {
+    my $name = shift;
+    if ($name eq  "Erdős Pál") {
+       return 0;
+    }
+    else {
+        die "No access to the database. Sorry.";
+    }
+}
+
 1;
diff --git a/test/lisp/progmodes/cperl-mode-tests.el 
b/test/lisp/progmodes/cperl-mode-tests.el
index 54012c3918..29b9e3f6fb 100644
--- a/test/lisp/progmodes/cperl-mode-tests.el
+++ b/test/lisp/progmodes/cperl-mode-tests.el
@@ -154,6 +154,22 @@ point in the distant past, and is still broken in 
perl-mode. "
     (should (equal (get-text-property (match-beginning 0) 'face)
                    'font-lock-keyword-face))))
 
+(ert-deftest cperl-test-fontify-special-variables ()
+  "Test fontification of variables like $^T or ${^ENCODING}.
+These can occur as \"local\" aliases."
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
+  (with-temp-buffer
+    (insert "local ($^I, ${^UNICODE});\n")
+    (goto-char (point-min))
+    (funcall cperl-test-mode)
+    (font-lock-ensure)
+    (search-forward "$")
+    (should (equal (get-text-property (point) 'face)
+                   'font-lock-variable-name-face))
+    (search-forward "$")
+    (should (equal (get-text-property (point) 'face)
+                   'font-lock-variable-name-face))))
+
 (ert-deftest cperl-test-identify-heredoc ()
   "Test whether a construct containing \"<<\" followed by a
   bareword is properly identified for a here-document if
@@ -297,6 +313,7 @@ the whole string."
 
 (ert-deftest cperl-test-ws-rx ()
   "Tests capture of very simple regular expressions (yawn)."
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
   (let ((valid
         '(" " "\t" "\n"))
        (invalid
@@ -306,6 +323,7 @@ the whole string."
 
 (ert-deftest cperl-test-ws+-rx ()
   "Tests sequences of whitespace and comment lines."
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
   (let ((valid
         `(" " "\t#\n" "\n# \n"
           ,(concat "# comment\n" "# comment\n" "\n" "#comment\n")))
@@ -316,6 +334,7 @@ the whole string."
 
 (ert-deftest cperl-test-version-regexp ()
   "Tests the regexp for recommended syntax of versions in Perl."
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
   (let ((valid
         '("1" "1.1" "1.1_1" "5.032001"
           "v120.100.103"))
@@ -331,6 +350,7 @@ the whole string."
 (ert-deftest cperl-test-package-regexp ()
   "Tests the regular expression of Perl package names with versions.
 Also includes valid cases with whitespace in strange places."
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
   (let ((valid
         '("package Foo"
           "package Foo::Bar"
@@ -346,6 +366,284 @@ Also includes valid cases with whitespace in strange 
places."
     (cperl-test--validate-regexp (rx (eval cperl--package-rx))
                                 valid invalid)))
 
+(ert-deftest cperl-test-identifier-rx ()
+  "Test valid and invalid identifiers (no sigils)."
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
+  (let ((valid
+         '("foo" "FOO" "f_oo" "a123"
+           "manĝis"))                   ; Unicode is allowed!
+        (invalid
+         '("$foo"                       ; no sigils allowed (yet)
+           "Foo::bar"                   ; no package qualifiers allowed
+           "lots_of_€")))               ; € is not alphabetic
+    (cperl-test--validate-regexp (rx (eval cperl--basic-identifier-rx))
+                                 valid invalid)))
+
+;;; Test unicode identifier in various places
+
+(defun cperl--test-unicode-setup (code string)
+  "Insert CODE, prepare it for tests, and find STRING.
+Invoke the appropriate major mode, ensure fontification, and set
+point after the first occurrence of STRING (no regexp!)."
+  (insert code)
+  (funcall cperl-test-mode)
+  (font-lock-ensure)
+  (goto-char (point-min))
+  (search-forward string))
+
+(ert-deftest cperl-test-unicode-labels ()
+  "Verify that non-ASCII labels are processed correctly."
+  (with-temp-buffer
+    (cperl--test-unicode-setup "LABEł: for ($manĝi) { say; }" "LAB")
+    (should (equal (get-text-property (point) 'face)
+                   'font-lock-constant-face))))
+
+(ert-deftest cperl-test-unicode-sub ()
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     (concat "use strict;\n"            ; distinguish bob from b-o-f
+             "sub ℏ {\n"
+             "  6.62607015e-34\n"
+             "};")
+     "sub ")                            ; point is before "ℏ"
+
+    ;; Testing fontification
+    ;; FIXME 2021-09-10: This tests succeeds because cperl-mode
+    ;; accepts almost anything as a sub name for fontification.  For
+    ;; example, it fontifies "sub @ {...;}" which is a syntax error in
+    ;; Perl.  I let this pass for the moment.
+    (should (equal (get-text-property (point) 'face)
+                   'font-lock-function-name-face))
+
+    ;; Testing `beginning-of-defun'.  Not available in perl-mode,
+    ;; where it jumps to the beginning of the buffer.
+    (when (eq cperl-test-mode #'cperl-mode)
+      (goto-char (point-min))
+      (search-forward "-34")
+      (beginning-of-defun)
+     (should (looking-at "sub")))))
+
+(ert-deftest cperl-test-unicode-varname ()
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     (concat "use strict;\n"
+             "my $π = 3.1415926535897932384626433832795028841971;\n"
+             "\n"
+             "my $manĝi = $π;\n"
+             "__END__\n")
+     "my $") ; perl-mode doesn't fontify the sigil, so include it here
+
+    ;; Testing fontification
+    ;; FIXME 2021-09-10: This test succeeds in cperl-mode because the
+    ;; π character is "not ASCII alphabetic", so it treats $π as a
+    ;; punctuation variable.  The following two `should' forms with a
+    ;; longer variable name were added for stronger verification.
+    (should (equal (get-text-property (point) 'face)
+                   'font-lock-variable-name-face))
+    ;; Test both ends of a longer variable name
+    (search-forward "my $")             ; again skip the sigil
+    (should (equal (get-text-property (point) 'face)
+                   'font-lock-variable-name-face))
+    (search-forward "manĝi")
+    (should (equal (get-text-property (1- (match-end 0)) 'face)
+                   'font-lock-variable-name-face))))
+
+(ert-deftest cperl-test-unicode-varname-list ()
+  "Verify that all elements of a variable list are fontified."
+
+  (let ((hash-face (if (eq cperl-test-mode #'perl-mode)
+                       'perl-non-scalar-variable
+                     'cperl-hash-face))
+        (array-face (if (eq cperl-test-mode #'perl-mode)
+                        'perl-non-scalar-variable
+                      'cperl-array-face)))
+    (with-temp-buffer
+      (cperl--test-unicode-setup
+       "my (%äsh,@ärräy,$scâlâr);" "%")
+      (should (equal (get-text-property (point) 'face)
+                     hash-face))
+      (search-forward "@")
+      (should (equal (get-text-property (point) 'face)
+                     array-face))
+      (search-forward "scâlâr")
+      (should (equal (get-text-property (match-beginning 0) 'face)
+                     'font-lock-variable-name-face))
+      (should (equal (get-text-property (1- (match-end 0)) 'face)
+                     'font-lock-variable-name-face)))
+
+      ;; Now with package-qualified variables
+    (with-temp-buffer
+      (cperl--test-unicode-setup
+       "local (%Søme::äsh,@Søme::ärräy,$Søme::scâlâr);" "%")
+      (should (equal (get-text-property (point) 'face)
+                     hash-face))
+      (search-forward "Søme::")         ; test basic identifier
+      (should (equal (get-text-property (point) 'face)
+                     hash-face))
+      (search-forward "@")              ; test package name
+      (should (equal (get-text-property (point) 'face)
+                     array-face))
+      (search-forward "Søme::")         ; test basic identifier
+      (should (equal (get-text-property (point) 'face)
+                     array-face))
+      (search-forward "Søme")           ; test package name
+      (should (equal (get-text-property (match-beginning 0) 'face)
+                     'font-lock-variable-name-face))
+      (should (equal (get-text-property (1- (match-end 0)) 'face)
+                     'font-lock-variable-name-face))
+      (search-forward "scâlâr")         ; test basic identifier
+      (should (equal (get-text-property (match-beginning 0) 'face)
+                     'font-lock-variable-name-face))
+      (should (equal (get-text-property (1- (match-end 0)) 'face)
+                     'font-lock-variable-name-face)))))
+
+(ert-deftest cperl-test-unicode-arrays ()
+  "Test fontification of array access."
+  ;; Perl mode just looks at the sigil, for element access
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
+  ;; simple array element
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "$ärräy[1] = 7;" "$")
+    (should (equal (get-text-property (point) 'face)
+                   'cperl-array-face)))
+  ;; array slice
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "@ärräy[(1..3)] = (4..6);" "@")
+    (should (equal (get-text-property (point) 'face)
+                     'cperl-array-face)))
+  ;; array max index
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "$#ärräy = 1;" "$")
+    (should (equal (get-text-property (point) 'face)
+                   'cperl-array-face)))
+  ;; array dereference
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "@$ärräy = (1,2,3)" "@")
+    (should (equal (get-text-property (1- (point)) 'face)
+                   'cperl-array-face))
+    (should (equal (get-text-property (1+ (point)) 'face)
+                   'font-lock-variable-name-face))))
+
+(ert-deftest cperl-test-unicode-hashes ()
+  "Test fontification of hash access."
+  ;; Perl mode just looks at the sigil, for element access
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
+  ;; simple hash element
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "$häsh{'a'} = 7;" "$")
+    (should (equal (get-text-property (point) 'face)
+                   'cperl-hash-face)))
+  ;; hash array slice
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "@häsh{(1..3)} = (4..6);" "@")
+    (should (equal (get-text-property (point) 'face)
+                     'cperl-hash-face)))
+  ;; hash subset
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "my %hash = %häsh{'a',2,3};" "= %")
+    (should (equal (get-text-property (point) 'face)
+                   'cperl-hash-face)))
+  ;; hash dereference
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "%$äsh = (key => 'value');" "%")
+    (should (equal (get-text-property (1- (point)) 'face)
+                   'cperl-hash-face))
+    (should (equal (get-text-property (1+ (point)) 'face)
+                   'font-lock-variable-name-face))))
+
+(ert-deftest cperl-test-unicode-hashref ()
+  "Verify that a hashref access disambiguates {s}.
+CPerl mode takes the token \"s\" as a substitution unless
+detected otherwise.  Not for perl-mode: it doesn't stringify
+bareword hash keys and doesn't recognize a substitution
+\"s}foo}bar}\""
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
+  (with-temp-buffer
+    (cperl--test-unicode-setup "$häshref->{s} # }}" "{")
+    (should (equal (get-text-property (point) 'face)
+            'font-lock-string-face))
+    (should (equal (get-text-property (1+ (point)) 'face)
+            nil))))
+
+(ert-deftest cperl-test-unicode-proto ()
+  ;; perl-mode doesn't fontify prototypes at all
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     (concat "sub prötötyped ($) {\n"
+             "  ...;"
+             "}\n")
+     "prötötyped (")
+
+    (should (equal (get-text-property (point) 'face)
+                   'font-lock-string-face))))
+
+(ert-deftest cperl-test-unicode-fhs ()
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     (concat "while (<BAREWÖRD>) {\n"
+             "    ...;)\n"
+             "}\n")
+     "while (<") ; point is before the first char of the handle
+    ;; Testing fontification
+    ;; FIXME 2021-09-10: perl-mode.el and cperl-mode.el handle these
+    ;; completely differently.  perl-mode interprets barewords as
+    ;; constants, cperl-mode does not fontify them.  Both treat
+    ;; non-barewords as globs, which are not fontified by perl-mode,
+    ;; but fontified as strings in cperl-mode.  We keep (and test)
+    ;; that behavior "as is" because both bareword filehandles and
+    ;; <glob> syntax are no longer recommended.
+    (let ((bareword-face
+           (if (equal cperl-test-mode 'perl-mode) 'font-lock-constant-face
+             nil)))
+            (should (equal (get-text-property (point) 'face)
+                     bareword-face)))))
+
+(ert-deftest cperl-test-unicode-hashkeys ()
+  "Test stringification of bareword hash keys.  Not in perl-mode.
+perl-mode generally does not stringify bareword hash keys."
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
+  ;; Plain hash key
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "$häsh { kéy }" "{ ")
+    (should (equal (get-text-property (point) 'face)
+                   'font-lock-string-face)))
+  ;; Nested hash key
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "$häsh { kéy } { kèy }" "} { ")
+    (should (equal (get-text-property (point) 'face)
+                   'font-lock-string-face)))
+  ;; Key => value
+  (with-temp-buffer
+    (cperl--test-unicode-setup
+     "( kéy => 'value'," "( ")
+    (should (equal (get-text-property (point) 'face)
+                   'font-lock-string-face))))
+
+(ert-deftest cperl-test-word-at-point ()
+  "Test whether the function captures non-ASCII words."
+  (skip-unless (eq cperl-test-mode #'cperl-mode))
+  (let ((words '("rôle" "café" "ångström"
+                 "Data::Dump::dump"
+                 "_underscore")))
+    (dolist (word words)
+      (with-temp-buffer
+        (insert " + ")                  ; this will be the suffix
+        (beginning-of-line)
+        (insert ")")                    ; A non-word char
+        (insert word)
+        (should (string= word (cperl-word-at-point-hard)))))))
+
 ;;; Function test: Building an index for imenu
 
 (ert-deftest cperl-test-imenu-index ()
@@ -369,7 +667,8 @@ created by CPerl mode, so skip it for Perl mode."
                         "Versioned::Package::outer"
                         "lexical"
                         "Versioned::Block::signatured"
-                        "Package::in_package_again")))
+                        "Package::in_package_again"
+                        "Erdős::Number::erdős_number")))
         (dolist (sub expected)
           (should (assoc-string sub index)))))))
 
diff --git a/test/lisp/progmodes/elisp-mode-tests.el 
b/test/lisp/progmodes/elisp-mode-tests.el
index 2745aff670..60946c2f44 100644
--- a/test/lisp/progmodes/elisp-mode-tests.el
+++ b/test/lisp/progmodes/elisp-mode-tests.el
@@ -752,15 +752,11 @@ to (xref-elisp-test-descr-to-target xref)."
 ;; Source for both variable and defun is "(define-minor-mode
 ;; compilation-minor-mode". There is no way to tell that directly from
 ;; the symbol, but we can use (memq sym minor-mode-list) to detect
-;; that the symbol is a minor mode. See `elisp--xref-find-definitions'
-;; for more comments.
-;;
-;; IMPROVEME: return defvar instead of defun if source near starting
-;; point indicates the user is searching for a variable, not a
-;; function.
+;; that the symbol is a minor mode. In non-filtering mode we only
+;; return the function.
 (require 'compile) ;; not loaded by default at test time
 (xref-elisp-deftest find-defs-defun-defvar-el
-  (elisp--xref-find-definitions 'compilation-minor-mode)
+  (xref-backend-definitions 'elisp "compilation-minor-mode")
   (list
    (cons
     (xref-make "(defun compilation-minor-mode)"
@@ -770,6 +766,21 @@ to (xref-elisp-test-descr-to-target xref)."
     "(define-minor-mode compilation-minor-mode")
    ))
 
+;; Returning only defvar because source near point indicates the user
+;; is searching for a variable, not a function.
+(xref-elisp-deftest find-defs-minor-defvar-c
+  (with-temp-buffer
+    (emacs-lisp-mode)
+    (insert "(foo overwrite-mode")
+    (xref-backend-definitions 'elisp
+                              (xref-backend-identifier-at-point 'elisp)))
+  (list
+   (cons
+    (xref-make "(defvar overwrite-mode)"
+               (xref-make-elisp-location 'overwrite-mode 'defvar 
"src/buffer.c"))
+    "DEFVAR_PER_BUFFER (\"overwrite-mode\"")
+   ))
+
 (xref-elisp-deftest find-defs-defvar-el
   (elisp--xref-find-definitions 'xref--marker-ring)
   (list
@@ -899,5 +910,116 @@ to (xref-elisp-test-descr-to-target xref)."
                           "(\\(when\\)")
               nil)))
 
+(defmacro elisp-mode-test--with-buffer (text-with-pos &rest body)
+  "Eval BODY with buffer and variables from TEXT-WITH-POS.
+All occurrences of {NAME} are removed from TEXT-WITH-POS and
+the remaining text put in a buffer in `elisp-mode'.
+Each NAME is then bound to its position in the text during the
+evaluation of BODY."
+  (declare (indent 1))
+  (let* ((annot-text (eval text-with-pos t))
+         (pieces nil)
+         (positions nil)
+         (tlen (length annot-text))
+         (ofs 0)
+         (text-ofs 0))
+    (while
+        (and (< ofs tlen)
+             (let ((m (string-match (rx "{" (group (+ (not "}"))) "}")
+                                    annot-text ofs)))
+               (and m
+                    (let ((var (intern (match-string 1 annot-text))))
+                      (push (substring annot-text ofs m) pieces)
+                      (setq text-ofs (+ text-ofs (- m ofs)))
+                      (push (list var (1+ text-ofs)) positions)
+                      (setq ofs (match-end 0))
+                      t)))))
+    (push (substring annot-text ofs tlen) pieces)
+    (let ((text (apply #'concat (nreverse pieces)))
+          (bindings (nreverse positions)))
+      `(with-temp-buffer
+         (ert-info (,text :prefix "text: ")
+           (emacs-lisp-mode)
+           (insert ,text)
+           (let ,bindings . ,body))))))
+
+(ert-deftest elisp-mode-with-buffer ()
+  ;; Sanity test of macro, also demonstrating how it works.
+  (elisp-mode-test--with-buffer
+      "{a}123{b}45{c}6"
+    (should (equal a 1))
+    (should (equal b 4))
+    (should (equal c 6))
+    (should (equal (buffer-string) "123456"))))
+
+(ert-deftest elisp-mode-infer-namespace ()
+  (elisp-mode-test--with-buffer
+      (concat " ({p1}alphaX {p2}beta {p3}gamma '{p4}delta\n"
+              "    #'{p5}epsilon `{p6}zeta `(,{p7}eta ,@{p8}theta))\n")
+    (should (equal (elisp--xref-infer-namespace p1) 'function))
+    (should (equal (elisp--xref-infer-namespace p2) 'maybe-variable))
+    (should (equal (elisp--xref-infer-namespace p3) 'maybe-variable))
+    (should (equal (elisp--xref-infer-namespace p4) 'any))
+    (should (equal (elisp--xref-infer-namespace p5) 'function))
+    (should (equal (elisp--xref-infer-namespace p6) 'any))
+    (should (equal (elisp--xref-infer-namespace p7) 'variable))
+    (should (equal (elisp--xref-infer-namespace p8) 'variable)))
+
+  (elisp-mode-test--with-buffer
+      (concat "(let ({p1}alpha {p2}beta ({p3}gamma {p4}delta))\n"
+              "  ({p5}epsilon {p6}zeta)\n"
+              "  {p7}eta)\n")
+    (should (equal (elisp--xref-infer-namespace p1) 'variable))
+    (should (equal (elisp--xref-infer-namespace p2) 'variable))
+    (should (equal (elisp--xref-infer-namespace p3) 'variable))
+    (should (equal (elisp--xref-infer-namespace p4) 'variable))
+    (should (equal (elisp--xref-infer-namespace p5) 'function))
+    (should (equal (elisp--xref-infer-namespace p6) 'maybe-variable))
+    (should (equal (elisp--xref-infer-namespace p7) 'variable)))
+
+  (elisp-mode-test--with-buffer
+      (concat "(defun {p1}alpha () {p2}beta)\n"
+              "(defface {p3}gamma ...)\n"
+              "(defvar {p4}delta {p5}epsilon)\n"
+              "(function {p6}zeta)\n")
+    (should (equal (elisp--xref-infer-namespace p1) 'function))
+    (should (equal (elisp--xref-infer-namespace p2) 'variable))
+    (should (equal (elisp--xref-infer-namespace p3) 'face))
+    (should (equal (elisp--xref-infer-namespace p4) 'variable))
+    (should (equal (elisp--xref-infer-namespace p5) 'variable))
+    (should (equal (elisp--xref-infer-namespace p6) 'function)))
+
+  (elisp-mode-test--with-buffer
+      (concat "(require '{p1}alpha)\n"
+              "(fboundp '{p2}beta)\n"
+              "(boundp '{p3}gamma)\n"
+              "(facep '{p4}delta)\n"
+              "(define-key map [f1] '{p5}epsilon)\n")
+    (should (equal (elisp--xref-infer-namespace p1) 'feature))
+    (should (equal (elisp--xref-infer-namespace p2) 'function))
+    (should (equal (elisp--xref-infer-namespace p3) 'variable))
+    (should (equal (elisp--xref-infer-namespace p4) 'face))
+    (should (equal (elisp--xref-infer-namespace p5) 'function)))
+
+  (elisp-mode-test--with-buffer
+      (concat "(list {p1}alpha {p2}beta)\n"
+              "(progn {p3}gamma {p4}delta)\n"
+              "(lambda ({p5}epsilon {p6}zeta) {p7}eta)\n")
+    (should (equal (elisp--xref-infer-namespace p1) 'variable))
+    (should (equal (elisp--xref-infer-namespace p2) 'variable))
+    (should (equal (elisp--xref-infer-namespace p3) 'variable))
+    (should (equal (elisp--xref-infer-namespace p4) 'variable))
+    (should (equal (elisp--xref-infer-namespace p5) 'variable))
+    (should (equal (elisp--xref-infer-namespace p6) 'variable))
+    (should (equal (elisp--xref-infer-namespace p7) 'variable)))
+
+  (elisp-mode-test--with-buffer
+      (concat "'({p1}alpha {p2}beta\n"
+              "  ({p3}gamma ({p4}delta)))\n")
+    (should (equal (elisp--xref-infer-namespace p1) 'any))
+    (should (equal (elisp--xref-infer-namespace p2) 'any))
+    (should (equal (elisp--xref-infer-namespace p3) 'any))
+    (should (equal (elisp--xref-infer-namespace p4) 'any))))
+
 (provide 'elisp-mode-tests)
 ;;; elisp-mode-tests.el ends here
diff --git a/test/lisp/progmodes/flymake-resources/another-problematic-file.c 
b/test/lisp/progmodes/flymake-resources/another-problematic-file.c
new file mode 100644
index 0000000000..03eacdd801
--- /dev/null
+++ b/test/lisp/progmodes/flymake-resources/another-problematic-file.c
@@ -0,0 +1,5 @@
+#include "some-problems.h"
+
+int frob(char* freb) {
+  return 42;
+}
diff --git a/test/lisp/progmodes/flymake-resources/some-problems.h 
b/test/lisp/progmodes/flymake-resources/some-problems.h
index 165d8dd525..86ea2de3b0 100644
--- a/test/lisp/progmodes/flymake-resources/some-problems.h
+++ b/test/lisp/progmodes/flymake-resources/some-problems.h
@@ -2,4 +2,6 @@
 
 strange;
 
+int frob(char);
+
 sint main();
diff --git a/test/lisp/progmodes/flymake-tests.el 
b/test/lisp/progmodes/flymake-tests.el
index bda1b663c2..10111ca06c 100644
--- a/test/lisp/progmodes/flymake-tests.el
+++ b/test/lisp/progmodes/flymake-tests.el
@@ -60,7 +60,7 @@
 (cl-defun flymake-tests--call-with-fixture (fn file
                                                &key (severity-predicate
                                                      nil sev-pred-supplied-p))
-  "Call FN after flymake setup in FILE, using `flymake-proc`.
+  "Call FN after flymake setup in FILE, using `flymake-proc'.
 SEVERITY-PREDICATE is used to setup
 `flymake-proc-diagnostic-type-pred'"
   (let* ((file (expand-file-name file flymake-tests-data-directory))
@@ -109,7 +109,7 @@ SEVERITY-PREDICATE is used to setup
                 (face-at-point)))))
 
 (ert-deftest perl-backend ()
-  "Test the perl backend"
+  "Test the perl backend."
   (skip-unless (executable-find "perl"))
   (flymake-tests--with-flymake ("test.pl")
     (flymake-goto-next-error)
@@ -120,7 +120,7 @@ SEVERITY-PREDICATE is used to setup
 
 (defvar ruby-mode-hook)
 (ert-deftest ruby-backend ()
-  "Test the ruby backend"
+  "Test the ruby backend."
   (skip-unless (executable-find "ruby"))
   ;; Some versions of ruby fail if HOME doesn't exist (bug#29187).
   (let* ((tempdir (make-temp-file "flymake-tests-ruby" t))
@@ -234,7 +234,7 @@ SEVERITY-PREDICATE is used to setup
           (lambda (_report-fn)
             ;; HACK: Shoosh log during tests
             (setq-local warning-minimum-log-level :emergency)
-            (error "crashed"))))
+            (error "Crashed"))))
       (insert "Lorem ipsum dolor sit amet, consectetur adipiscing
     elit, sed do eiusmod tempor incididunt ut labore et dolore
     manha aliqua. Ut enim ad minim veniam, quis nostrud
@@ -291,7 +291,7 @@ SEVERITY-PREDICATE is used to setup
         (should-error (flymake-goto-next-error nil nil t))))))
 
 (ert-deftest recurrent-backend ()
-  "Test a backend that calls REPORT-FN multiple times"
+  "Test a backend that calls REPORT-FN multiple times."
   (with-temp-buffer
     (let (tick)
       (cl-letf
@@ -374,4 +374,4 @@ SEVERITY-PREDICATE is used to setup
 
 (provide 'flymake-tests)
 
-;;; flymake.el ends here
+;;; flymake-tests.el ends here
diff --git a/test/lisp/progmodes/xref-tests.el 
b/test/lisp/progmodes/xref-tests.el
index ff4b647ae0..b1de1a4df5 100644
--- a/test/lisp/progmodes/xref-tests.el
+++ b/test/lisp/progmodes/xref-tests.el
@@ -128,8 +128,12 @@
   (let ((xref-file-name-display 'abs))
     (should (equal
              (delete-dups
-              (mapcar 'xref-location-group
-                      (xref-tests--locations-in-data-dir "\\(bar\\|foo\\)")))
+              (mapcar
+               (lambda (loc)
+                 (xref--group-name-for-display
+                  (xref-location-group loc)
+                  nil))
+               (xref-tests--locations-in-data-dir "\\(bar\\|foo\\)")))
              (list
               (concat xref-tests--data-dir "file1.txt")
               (concat xref-tests--data-dir "file2.txt"))))))
@@ -137,8 +141,12 @@
 (ert-deftest xref--xref-file-name-display-is-nondirectory ()
   (let ((xref-file-name-display 'nondirectory))
     (should (equal (delete-dups
-                    (mapcar 'xref-location-group
-                            (xref-tests--locations-in-data-dir 
"\\(bar\\|foo\\)")))
+                    (mapcar
+                     (lambda (loc)
+                       (xref--group-name-for-display
+                        (xref-location-group loc)
+                        nil))
+                     (xref-tests--locations-in-data-dir "\\(bar\\|foo\\)")))
                    (list
                     "file1.txt"
                     "file2.txt")))))
@@ -146,13 +154,15 @@
 (ert-deftest xref--xref-file-name-display-is-relative-to-project-root ()
   (let* ((data-parent-dir
           (file-name-directory (directory-file-name xref-tests--data-dir)))
-         (project-find-functions
-          (lambda (_) (cons 'transient data-parent-dir)))
          (xref-file-name-display 'project-relative))
     (should (equal
              (delete-dups
-              (mapcar 'xref-location-group
-                      (xref-tests--locations-in-data-dir "\\(bar\\|foo\\)")))
+              (mapcar
+               (lambda (loc)
+                 (xref--group-name-for-display
+                  (xref-location-group loc)
+                  data-parent-dir))
+               (xref-tests--locations-in-data-dir "\\(bar\\|foo\\)")))
              (list
               "xref-resources/file1.txt"
               "xref-resources/file2.txt")))))
diff --git a/test/manual/BidiCharacterTest.txt 
b/test/manual/BidiCharacterTest.txt
index 02e2083ee6..c30d077861 100644
--- a/test/manual/BidiCharacterTest.txt
+++ b/test/manual/BidiCharacterTest.txt
@@ -1,6 +1,6 @@
-# BidiCharacterTest-13.0.0.txt
-# Date: 2019-09-09, 19:32:00 GMT [LI]
-# © 2019 Unicode®, Inc.
+# BidiCharacterTest-14.0.0.txt
+# Date: 2020-03-30, 23:56:00 GMT [LI]
+# © 2020 Unicode®, Inc.
 # For terms of use, see http://www.unicode.org/terms_of_use.html
 #
 # Unicode Character Database
@@ -87,6 +87,32 @@
 0661 0028 0662 0029 0331;0;0;2 1 2 1 1;4 3 2 1 0
 0661 0028 0332 0662 0029 0333;0;0;2 1 1 2 1 1;5 4 3 2 1 0
 
+# Nonspacing marks applied to paired brackets [added to test cases for Unicode 
14.0]
+# These cases exercise the ignoring of bc=BN characters (such as ZWJ or ZWSP)
+# that appear between the base bracket character and the nonspacing mark,
+# in a context where the brackets have been forced to a strong R direction.
+#
+# Note that due to an implementation error in the N0 rule in the Bidi 
Reference C
+# test code for UBA 8.0, versions of that reference test code through UBA 12.0 
will fail for
+# precisely these newly added tests. The bug in the implementation of the N0 
rule in the Bidi Reference C
+# test code was fixed for Unicode 13.0, and that updated test code now 
performs correctly
+# for all versions of UBA.
+#
+# These test cases first test a combining mark following a ZWJ after the 
trailing bracket of a pair:
+0041 200F 005B 05D0 005D 200D 20D6;0;0;0 1 1 1 1 x 1;0 6 4 3 2 1
+0041 200F 005B 05D0 005D 200D 20D6;1;1;2 1 1 1 1 x 1;6 4 3 2 1 0
+# Then a combining mark following a ZWJ after the leading bracket of a pair:
+0041 200F 005B 200D 20D6 05D0 005D;0;0;0 1 1 x 1 1 1;0 6 5 4 2 1
+0041 200F 005B 200D 20D6 05D0 005D;1;1;2 1 1 x 1 1 1;6 5 4 2 1 0
+# Then a combining mark following a ZWJ after both brackets of a pair:
+0041 200F 005B 200D 20D6 05D0 005D 200D 20D6;0;0;0 1 1 x 1 1 1 x 1;0 8 6 5 4 2 
1
+0041 200F 005B 200D 20D6 05D0 005D 200D 20D6;1;1;2 1 1 x 1 1 1 x 1;8 6 5 4 2 1 0
+# Then the intervention of a ZWSP in these same sequences.
+# (The ZWSP formally breaks the combining character sequence, but should
+# not block the identification of the combining mark for the application of 
rule N0.)
+0041 200F 005B 200D 200B 20D6 05D0 005D 200B 200D 20D6;0;0;0 1 1 x x 1 1 1 x x 
1;0 10 7 6 5 2 1
+0041 200F 005B 200D 200B 20D6 05D0 005D 200B 200D 20D6;1;1;2 1 1 x x 1 1 1 x x 
1;10 7 6 5 2 1 0
+
 # Nested bracket pairs that reach and exceed the fixed capacity of the bracket 
stack
 # a ( ( ... ( b ) ) ... ) with 62, 63, and 64 nested bracket pairs
 0061 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 
0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 
0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 
0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 
0062 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 
0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 
0029 0029 0029 00 [...]
diff --git a/test/manual/cedet/semantic-tests.el 
b/test/manual/cedet/semantic-tests.el
index 1561c18dd6..044db29cda 100644
--- a/test/manual/cedet/semantic-tests.el
+++ b/test/manual/cedet/semantic-tests.el
@@ -24,6 +24,8 @@
 ;; Originally, there are many test functions scattered among the
 ;; Semantic source files.  This file consolidates them.
 
+;;; Code:
+
 (require 'data-debug)
 
 ;;; From semantic-complete
@@ -46,7 +48,7 @@
 All systems are different.  Ask questions along the way."
   (interactive)
   (let ((doload nil))
-    (when (y-or-n-p "Create a system database to test with? ")
+    (when (y-or-n-p "Create a system database to test with?")
       (call-interactively 'semanticdb-create-ebrowse-database)
       (setq doload t))
     ;;  Should we load in caches



reply via email to

[Prev in Thread] Current Thread [Next in Thread]