From 5d714d9476cbb90b125ff14a9d764ad90bb7c2ed Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Fri, 24 Sep 2021 03:01:47 +0000
Subject: CTAN sync 202109240301

---
 macros/latex/contrib/glossaries/glossaries.dtx | 9096 +++++++++++++++++++++++-
 1 file changed, 8981 insertions(+), 115 deletions(-)

(limited to 'macros/latex/contrib/glossaries/glossaries.dtx')

diff --git a/macros/latex/contrib/glossaries/glossaries.dtx b/macros/latex/contrib/glossaries/glossaries.dtx
index b0d0914db2..5c9124cc63 100644
--- a/macros/latex/contrib/glossaries/glossaries.dtx
+++ b/macros/latex/contrib/glossaries/glossaries.dtx
@@ -1,15 +1,9 @@
 %\iffalse
 % glossaries.dtx generated using makedtx version 1.2 (c) Nicola Talbot
 % Command line args:
-%   -setambles ".*\.perl=>\nopreamble\nopostamble"
-%   -setambles ".*\.tex=>\nopreamble\nopostamble"
-%   -section "chapter"
-%   -doc "glossaries-manual.tex"
-%   -codetitle "Main Package Code"
 %   -comment ".*\.perl"
 %   -comment ".*\.tex"
-%   -macrocode ".*\.perl"
-%   -macrocode ".*\.tex"
+%   -author "Nicola Talbot"
 %   -src "glossaries\.sty\Z=>glossaries.sty"
 %   -src "glossaries-prefix.sty\Z=>glossaries-prefix.sty"
 %   -src "(glossary-.+)\.(sty)\Z=>\1.\2"
@@ -19,10 +13,17 @@
 %   -src "(glossaries-babel)\.(sty)\Z=>\1.\2"
 %   -src "(glossaries-polyglossia)\.(sty)\Z=>\1.\2"
 %   -src "(example-glossaries-.*\.tex)\Z=>\1"
+%   -src "(glossaries-2020-03-19\.sty)\Z=>\1"
 %   -src "(.*\.perl)\Z=>\1"
-%   -author "Nicola Talbot"
+%   -setambles ".*\.perl=>\nopreamble\nopostamble"
+%   -setambles ".*\.tex=>\nopreamble\nopostamble"
+%   -doc "glossaries-manual.tex"
+%   -section "chapter"
+%   -codetitle "Main Package Code"
+%   -macrocode ".*\.perl"
+%   -macrocode ".*\.tex"
 %   glossaries
-% Created on 2020/3/19 17:03
+% Created on 2021/9/23 17:22
 %\fi
 %\iffalse
 %<*package>
@@ -45,7 +46,7 @@
 %\fi
 % \iffalse
 % Doc-Source file to use with LaTeX2e
-% Copyright (C) 2020 Nicola Talbot, all rights reserved.
+% Copyright (C) 2021 Nicola Talbot, all rights reserved.
 % \fi
 % \iffalse
 %<*driver>
@@ -136,7 +137,7 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of
 
 \setcounter{IndexColumns}{2}
 
-\CheckSum{20358}
+\CheckSum{34113}
 
 \newcommand*{\ifirstuse}{\iterm{first use}}
 \newcommand*{\firstuse}{\gls{firstuse}}
@@ -163,12 +164,12 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of
 %\fi
 %\MakeShortVerb{"}
 %
-% \title{Documented Code For glossaries v4.46}
+% \title{Documented Code For glossaries v4.47}
 % \author{Nicola L.C. Talbot\\[10pt]
 %Dickimaw Books\\
 %\url{http://www.dickimaw-books.com/}}
 %
-% \date{2020-03-19}
+% \date{2021-09-20}
 % \maketitle
 %
 %This is the documented code for the \styfmt{glossaries} package.
@@ -184,7 +185,7 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of
 %glossaries package}.
 %
 %\item[\url{glossaries-user.pdf}]
-%For the main user guide, read \qt{glossaries.sty v4.46:
+%For the main user guide, read \qt{glossaries.sty v4.47:
 %\LaTeX2e\ Package to Assist Generating Glossaries}.
 %
 %\item[\url{mfirstuc-manual.pdf}]
@@ -239,7 +240,15 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of
 % This package requires \LaTeXe.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossaries}[2020/03/19 v4.46 (NLCT)]
+%    \end{macrocode}
+% Rollback releases:
+%    \begin{macrocode}
+\DeclareRelease{v4.46}{2020-03-19}{glossaries-2020-03-19.sty}
+\DeclareCurrentRelease{v4.47}{2021-09-20}
+%    \end{macrocode}
+% Declare package:
+%    \begin{macrocode}
+\ProvidesPackage{glossaries}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 %\changes{4.18}{2015-09-09}{split mfirstuc into separate bundle}
 % Required packages:
@@ -1181,8 +1190,9 @@ false,nolabel,autolabel,nameref}[nolabel]{%
   \def\@gls@setsort##1{%
 %    \end{macrocode}
 % Get the parent, if one exists
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-    \edef\@glo@parent{\csname glo@##1@parent\endcsname}%
+    \protected@edef\@glo@parent{\csname glo@##1@parent\endcsname}%
 %    \end{macrocode}
 % Set the information for the parent entry if not already done.
 %    \begin{macrocode}
@@ -1193,8 +1203,8 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %    \end{macrocode}
 % Set index information for this entry
 %    \begin{macrocode}
-    \edef\@glo@type{\csname glo@##1@type\endcsname}%
-    \edef\@gls@tmp{\csname glo@##1@sort\endcsname}%
+    \protected@edef\@glo@type{\csname glo@##1@type\endcsname}%
+    \protected@edef\@gls@tmp{\csname glo@##1@sort\endcsname}%
     \ifx\@gls@tmp\@empty
       \expandafter\global\expandafter
       \advance\csname glossary@\@glo@type @sortcount\endcsname by 1\relax
@@ -1424,9 +1434,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %\end{definition}
 % Determines if the glossary with the given label has been identified
 % as being a list of acronyms.
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand{\glsIfListOfAcronyms}[1]{%
-  \edef\@do@gls@islistofacronyms{%
+  \protected@edef\@do@gls@islistofacronyms{%
     \noexpand\@gls@islistofacronyms{#1}{\@glsacronymlists}}%
   \@do@gls@islistofacronyms
 }
@@ -2399,24 +2410,69 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %
 %\begin{macro}{\@@do@write@glslabels}
 %\changes{4.45}{2020-02-13}{new}
+%\changes{4.47}{2021-09-20}{fully expand list}
 %    \begin{macrocode}
 \newcommand*{\@@do@write@glslabels}{%
   \newwrite\@gls@labelsfile
   \immediate\openout\@gls@labelsfile=\jobname.glslabels
-  \forallglsentries[\@glo@types,\@ignored@glossaries]{\@glsentry}%
-  {\ifdefempty{\@glsentry}{}{\immediate\write\@gls@labelsfile{\@glsentry}}}%
+  \protected@edef\@gls@fulllist{\@glo@types}%
+  \ifdefempty{\@ignored@glossaries}{}%
+   {\protected@eappto\@gls@fulllist{,\@ignored@glossaries}}%
+  \forallglsentries[\@gls@fulllist]{\@glsentry}%
+  {%
+    \ifdefempty{\@glsentry}{}%
+    {%
+      \ifx\do@write@glslabelsname\@gobble
+        \def\@gls@thisentryname{}%
+      \else
+        \letcs{\@gls@thisentryname}{glo@\glsdetoklabel{\@glsentry}@name}%
+        \@onelevel@sanitize\@gls@thisentryname
+      \fi
+      \immediate\write\@gls@labelsfile
+         {\@glsentry\do@write@glslabelsname{\@gls@thisentryname}}%
+    }%
+  }%
   \immediate\closeout\@gls@labelsfile
 }
 %    \end{macrocode}
 %\end{macro}
 %
+%\begin{macro}{\do@write@glslabelsname}
+%\changes{4.47}{2021-09-20}{new}
+% Support for additionally writing the name as well as the label.
+% Let to \cs{@gobble} if name not required and to
+% \cs{@write@glslabelsname} if required.
+%    \begin{macrocode}
+\newcommand*{\do@write@glslabelsname}[1]{}
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@write@glslabelsname}
+%\changes{4.47}{2021-09-20}{new}
+%    \begin{macrocode}
+\begingroup
+\catcode`\^^I12
+\gdef\@write@glslabelsname#1{^^I#1}
+\endgroup
+%    \end{macrocode}
+%\end{macro}
+%
 %\begin{option}{writeglslabels}
 %\changes{4.45}{2020-02-13}{new}
 %This option will write all entry labels (including those in ignored
 %glossaries) to the file \cs{jobname}\texttt{.glslabels}. This file
 %may be used by text editors for label auto-completion.
 %    \begin{macrocode}
-\@gls@declareoption{writeglslabels}{\@do@write@glslabels}
+\@gls@declareoption{writeglslabels}{\@do@write@glslabels
+ \let\do@write@glslabelsname\@gobble}
+%    \end{macrocode}
+%\end{option}
+%\begin{option}{writeglslabelnames}
+%\changes{4.47}{2021-09-20}{new}
+%As the above but also writes the name.
+%    \begin{macrocode}
+\@gls@declareoption{writeglslabelnames}{\@do@write@glslabels
+ \let\do@write@glslabelsname\@write@glslabelsname}
 %    \end{macrocode}
 %\end{option}
 %\begin{macro}{\ifglsautomake}
@@ -3887,10 +3943,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
   \protected@edef\@gls@roman{\@roman{0\string" 
       \string"roman-numbers-lowercase\string" :sep \string"}}%
   \@onelevel@sanitize\@gls@roman
-  \edef\@tmp{\string" \string"roman-numbers-lowercase\string"
+  \edef\@gls@tmp{\string" \string"roman-numbers-lowercase\string"
        :sep \string"}%
-  \@onelevel@sanitize\@tmp
-  \ifx\@tmp\@gls@roman
+  \@onelevel@sanitize\@gls@tmp
+  \ifx\@gls@tmp\@gls@roman
     \expandafter
       \edef\csname @gls@xdy@Lclass@roman-page-numbers\endcsname{%
         \string"roman-numbers-lowercase\string"%
@@ -4277,9 +4333,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 % current iteration.
 %\changes{2.01}{2009 May 30}{replaced \cs{ifthenelse} with \cs{ifx}}
 %\changes{3.11a}{2013-10-15}{replaced \cs{ifx} with \cs{ifdefempty}}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\forglsentries}[3][\glsdefaulttype]{%
-  \edef\@@glo@list{\csname glolist@#1\endcsname}%
+  \protected@edef\@@glo@list{\csname glolist@#1\endcsname}%
   \@for#2:=\@@glo@list\do
   {%
     \ifdefempty{#2}{}{#3}%
@@ -4507,7 +4564,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
   \glsdoifexists{#1}%
   {%
      \def\do@glshaschildren{#3}%
-     \edef\@gls@thislabel{\glsdetoklabel{#1}}%
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+     \protected@edef\@gls@thislabel{\glsdetoklabel{#1}}%
      \expandafter\forglsentries\expandafter
        [\csname glo@\@gls@thislabel @type\endcsname]
      {\glo@label}%
@@ -4878,8 +4938,9 @@ false,nolabel,autolabel,nameref}[nolabel]{%
   }{}%
 %    \end{macrocode}
 % Add this to the list of glossary types:
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-  \toks@{#2}\edef\@glo@types{\@glo@types\the\toks@,}%
+  \toks@{#2}\protected@edef\@glo@types{\@glo@types\the\toks@,}%
 %    \end{macrocode}
 % Define a comma-separated list of labels for this glossary type, 
 % so that all the entries for this glossary can be reset with a 
@@ -5015,19 +5076,20 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %
 %\begin{macro}{\newignoredglossary}
 % Creates a new glossary that doesn't have associated files.
-% This glossary is ignored by and commands that iterate over
+% This glossary is ignored by any commands that iterate over
 % glossaries, such as \ics{printglossaries}, and won't work with
 % commands like \ics{printglossary}. It's intended for entries that
 % are so commonly-known they don't require a glossary.
 %\changes{4.08}{2014-07-30}{new}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\newignoredglossary}[1]{%
   \ifdefempty\@ignored@glossaries
   {%
-    \edef\@ignored@glossaries{#1}%
+    \protected@edef\@ignored@glossaries{#1}%
   }%
   {%
-    \eappto\@ignored@glossaries{,#1}%
+    \protected@eappto\@ignored@glossaries{,#1}%
   }%
   \csgdef{glolist@#1}{,}%
   \ifcsundef{gls@#1@entryfmt}%
@@ -5040,7 +5102,7 @@ false,nolabel,autolabel,nameref}[nolabel]{%
      \renewcommand*{\@gls@nohyperlist}{#1}%
   }%
   {%
-     \eappto\@gls@nohyperlist{,#1}%
+     \protected@eappto\@gls@nohyperlist{,#1}%
   }%
 }
 %    \end{macrocode}
@@ -5059,9 +5121,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 % Expansion is used in case the first argument is a control
 % sequence.
 %\changes{4.08}{2014-07-30}{new}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\ifignoredglossary}[3]{%
-  \edef\@gls@igtype{#1}%
+  \protected@edef\@gls@igtype{#1}%
   \expandafter\DTLifinlist\expandafter
     {\@gls@igtype}{\@ignored@glossaries}{#2}{#3}%
 }
@@ -5285,7 +5348,7 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %\changes{4.20}{2015-11-30}{new}
 %    \begin{macrocode}
 \newcommand*{\gls@checkseeallowed@preambleonly}{%
-  \GlossariesWarning{glossaries}%
+  \GlossariesWarning
   {`\gls@xr@key' key doesn't have any effect when used in the document
    environment. Move the definition to the preamble 
     after \string\makeglossaries\space
@@ -5686,11 +5749,11 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %\begin{macro}{\gls@defdocnewglossaryentry}
 %\changes{4.14}{2015-02-28}{new}
 % The definition of \cs{newglossaryentry} is changed at the start of
-% the \env{document} environment. The \gloskey{see} key doesn't work
-% for entries that have been defined in the document environment.
+% the \env{document} environment. As from v4.47 the \gloskey{see}
+% key now works in the \env{document} environment.
+%\changes{4.47}{2021-09-20}{removed see warning}
 %    \begin{macrocode}
 \newcommand*{\gls@defdocnewglossaryentry}{%
-  \let\gls@checkseeallowed\gls@checkseeallowed@preambleonly
   \let\newglossaryentry\new@glossaryentry
 }
 %    \end{macrocode}
@@ -5712,6 +5775,38 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %    \end{macrocode}
 %\end{macro}
 %
+%\begin{macro}{\gls@glsdefs@labellist}
+%\changes{4.47}{2021-09-20}{new}
+% List of labels of entries defined in \texttt{.glsdefs} file.
+%    \begin{macrocode}
+\newcommand*{\gls@glsdefs@labellist}{}
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@glsdefs@addlabel}
+%\changes{4.47}{2021-09-20}{new}
+% Save label of entry defined in \texttt{.glsdefs} file.
+%    \begin{macrocode}
+\newcommand*{\gls@glsdefs@addlabel}[1]{\listxadd{\gls@glsdefs@labellist}{#1}}
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@docdef@labellist}
+%\changes{4.47}{2021-09-20}{new}
+% List of labels of entries defined in the \env{document} environment.
+%    \begin{macrocode}
+\newcommand*{\gls@docdef@labellist}{}
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@docdef@addlabel}
+%\changes{4.47}{2021-09-20}{new}
+% Save label of entry defined in the \env{document} environment.
+%    \begin{macrocode}
+\newcommand*{\gls@docdef@addlabel}[1]{\listxadd{\gls@docdef@labellist}{#1}}
+%    \end{macrocode}
+%\end{macro}
+%
 %\begin{macro}{\new@glossaryentry}
 %\changes{3.10a}{2013-10-13}{new}
 % For use in document environment. This opens the \texttt{.glsdefs}
@@ -5726,11 +5821,55 @@ false,nolabel,autolabel,nameref}[nolabel]{%
      \immediate\openout\@gls@deffile=\jobname.glsdefs
   }%
   {}%
-  \ifglsentryexists{#1}{}%
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{allow overwrite if defined in \texttt{.glsdefs}}
+% Don't check for existence since if the entry has been defined in
+% the \texttt{.glsdefs} it will need to be redefined in case the
+% entry has been updated, but keep track of which entries have been
+% defined in the document environment to prevent duplicate
+% definitions.
+%    \begin{macrocode}
+  \ifglsentryexists{#1}%
+  {%
+    \xifinlist{#1}{\gls@docdef@labellist}%
+    {%
+%    \end{macrocode}
+% This entry has already been defined in the document environment.
+%    \begin{macrocode}
+      \GlossariesWarning{Entry `#1' has already been defined in the 
+        document environment (ignoring new definition)}%
+    }%
+    {%
+      \xifinlist{#1}{\gls@glsdefs@labellist}%
+      {%
+%    \end{macrocode}
+% This entry was defined in the \texttt{.glsdefs} file so update the
+% definition in case it has been changed.
+%    \begin{macrocode}
+       \gls@defglossaryentry{#1}{#2}%
+       \gls@docdef@addlabel{#1}%
+       \@gls@writedef{#1}%
+      }%
+      {%
+%    \end{macrocode}
+% This entry wasn't defined in the \texttt{.glsdefs} file so it must
+% have been defined in the preamble.
+%    \begin{macrocode}
+        \GlossariesWarning{Entry `#1' has already been defined in 
+         the preamble (in which case remove the duplicate definition)
+         or you have just updated to glossaries.sty
+         v4.47 (in which case delete `\jobname.glsdefs')}%
+      }%
+    }%
+  }%
   {%
+%    \end{macrocode}
+% This entry hasn't been defined (new entry since last build).
+%    \begin{macrocode}
      \gls@defglossaryentry{#1}{#2}%
+     \gls@docdef@addlabel{#1}%
+     \@gls@writedef{#1}%
   }%
-  \@gls@writedef{#1}%
 }
 %    \end{macrocode}
 %At the start of the document input the \texttt{.glsdefs} file if it
@@ -5766,18 +5905,38 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %    \end{macrocode}
 %\end{macro}
 %
+%\begin{macro}{\glsdefs@newdocentry}
+%\changes{4.47}{2021-09-20}{new}
+% Used to define entries in the \texttt{.glsdefs} file.
+%    \begin{macrocode}
+\newcommand*{\glsdefs@newdocentry}[2]{%
+  \ifglsentryexists{#1}%
+  {\GlossariesWarning{entry `#1' has already been defined in the preamble
+    (if you have moved the definition there from the document
+     environment, delete \jobname.glsdefs)}}%
+  {%
+    \gls@glsdefs@addlabel{#1}%
+    \gls@defglossaryentry{#1}{#2}%
+  }%
+}
+%    \end{macrocode}
+%\end{macro}
+%
 %\begin{macro}{\@gls@writedef}
 %\changes{3.10a}{2013-10-13}{new}
 % Writes glossary entry definition to \cs{@gls@deffile}.
+% Allow for the possibility that the entry definition may have been
+% moved from the document environment to the preamble, so warn
+% rather than generate an error.
 %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.47}{2021-09-20}{added a warning if entry has already been
+%defined}
 %    \begin{macrocode}
 \newcommand*{\@gls@writedef}[1]{%
   \immediate\write\@gls@deffile
   {%
-    \string\ifglsentryexists{#1}{}\glspercentchar^^J%
-    \expandafter\@gobble\string\{\glspercentchar^^J%
-      \string\gls@defglossaryentry{\glsdetoklabel{#1}}\glspercentchar^^J%
-      \expandafter\@gobble\string\{\glspercentchar%
+    \string\glsdefs@newdocentry{\glsdetoklabel{#1}}\glspercentchar^^J%
+    \expandafter\@gobble\string\{\glspercentchar%
   }%
 %    \end{macrocode}
 % Write key value information:
@@ -5803,9 +5962,8 @@ false,nolabel,autolabel,nameref}[nolabel]{%
   \glswritedefhook
   \immediate\write\@gls@deffile
   {%
-           \glspercentchar^^J%
-      \expandafter\@gobble\string\}\glspercentchar^^J%
-    \expandafter\@gobble\string\}\glspercentchar%
+    \glspercentchar^^J%
+    \expandafter\@gobble\string\}\glspercentchar^^J%
   }%
 }
 %    \end{macrocode}
@@ -6089,11 +6247,12 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %\end{definition}
 %\changes{4.16}{2015-07-08}{new}
 %\changes{4.42}{2019-01-06}{changed from \cs{edef} to \cs{protected@csxdef}}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand{\glsfieldxdef}[3]{%
  \glsdoifexists{#1}%
  {%
-   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \protected@edef\@glo@label{\glsdetoklabel{#1}}%
    \ifcsdef{glo@\@glo@label @#2}%
    {%
       \protected@csxdef{glo@\@glo@label @#2}{#3}%
@@ -6112,11 +6271,12 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %\end{definition}
 %\changes{4.16}{2015-07-08}{new}
 %\changes{4.42}{2019-01-06}{changed from \cs{edef} to \cs{protected@csedef}}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand{\glsfieldedef}[3]{%
  \glsdoifexists{#1}%
  {%
-   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \protected@edef\@glo@label{\glsdetoklabel{#1}}%
    \ifcsdef{glo@\@glo@label @#2}%
    {%
       \protected@csedef{glo@\@glo@label @#2}{#3}%
@@ -6134,11 +6294,12 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %\cs{glsfieldgdef}\marg{label}\marg{field}\marg{definition}
 %\end{definition}
 %\changes{4.16}{2015-07-08}{new}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand{\glsfieldgdef}[3]{%
  \glsdoifexists{#1}%
  {%
-   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \protected@edef\@glo@label{\glsdetoklabel{#1}}%
    \ifcsdef{glo@\@glo@label @#2}%
    {%
       \expandafter\gdef\csname glo@\@glo@label @#2\endcsname{#3}%
@@ -6156,11 +6317,12 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %\cs{glsfielddef}\marg{label}\marg{field}\marg{definition}
 %\end{definition}
 %\changes{4.16}{2015-07-08}{new}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand{\glsfielddef}[3]{%
  \glsdoifexists{#1}%
  {%
-   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \protected@edef\@glo@label{\glsdetoklabel{#1}}%
    \ifcsdef{glo@\@glo@label @#2}%
    {%
       \expandafter\def\csname glo@\@glo@label @#2\endcsname{#3}%
@@ -6180,11 +6342,12 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %\changes{4.16}{2015-07-08}{new}
 % Fetches the value of the given field and stores in the given
 % control sequence.
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand{\glsfieldfetch}[3]{%
  \glsdoifexists{#1}%
  {%
-   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \protected@edef\@glo@label{\glsdetoklabel{#1}}%
    \ifcsdef{glo@\@glo@label @#2}%
    {%
       \letcs#3{glo@\@glo@label @#2}%
@@ -6208,7 +6371,7 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 \newcommand{\ifglsfieldeq}[5]{%
  \glsdoifexists{#1}%
  {%
-   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \protected@edef\@glo@label{\glsdetoklabel{#1}}%
    \ifcsdef{glo@\@glo@label @#2}%
    {%
       \ifcsstring{glo@\@glo@label @#2}{#3}{#4}{#5}%
@@ -6232,7 +6395,7 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 \newcommand{\ifglsfielddefeq}[5]{%
  \glsdoifexists{#1}%
  {%
-   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \protected@edef\@glo@label{\glsdetoklabel{#1}}%
    \ifcsdef{glo@\@glo@label @#2}%
    {%
       \expandafter\ifdefstrequal
@@ -6252,11 +6415,12 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %\end{definition}
 %\changes{4.16}{2015-07-08}{new}
 %As above but uses \cs{ifcsstrequal} instead of \cs{ifdefstrequal}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand{\ifglsfieldcseq}[5]{%
  \glsdoifexists{#1}%
  {%
-   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \protected@edef\@glo@label{\glsdetoklabel{#1}}%
    \ifcsdef{glo@\@glo@label @#2}%
    {%
       \ifcsstrequal{glo@\@glo@label @#2}{#3}{#4}{#5}%
@@ -6341,8 +6505,9 @@ false,nolabel,autolabel,nameref}[nolabel]{%
   \let\GlsSetQuote\gls@nosetquote
 %    \end{macrocode}
 % Store label
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-  \edef\@glo@label{\glsdetoklabel{#1}}%
+  \protected@edef\@glo@label{\glsdetoklabel{#1}}%
 %    \end{macrocode}
 % \changes{3.12a}{2013-10-16}{added \cs{glslabel}}
 % Provide a means for user defined keys to reference the label:
@@ -6456,9 +6621,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %    \end{macrocode}
 % Assign type. This must be fully expandable
 %\changes{4.03}{2014-01-20}{replaced \#1 with \cs{@glo@label}}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
   \gls@assign@field{\glsdefaulttype}{\@glo@label}{type}{\@glo@type}%
-  \edef\@glo@type{\glsentrytype{\@glo@label}}%
+  \protected@edef\@glo@type{\glsentrytype{\@glo@label}}%
 %    \end{macrocode}
 % Check to see if this glossary type has been defined, if it has,
 % add this label to the relevant list, otherwise generate an error.
@@ -6490,7 +6656,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
     {%
     }%
     \protected@edef\@glolist@{\csname glolist@\@glo@type\endcsname}%
-    \expandafter\xdef\csname glolist@\@glo@type\endcsname{%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}}
+%    \begin{macrocode}
+    \expandafter\protected@xdef\csname glolist@\@glo@type\endcsname{%
       \@glolist@{\@glo@label},}%
   }%
 %    \end{macrocode}
@@ -6526,8 +6695,9 @@ false,nolabel,autolabel,nameref}[nolabel]{%
       {%
 %    \end{macrocode}
 % Parent exists. Set \cs{glo@}\meta{label}"@parent".
+%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}}
 %    \begin{macrocode}
-        \expandafter\xdef\csname glo@\@glo@label @parent\endcsname{%
+        \expandafter\protected@xdef\csname glo@\@glo@label @parent\endcsname{%
            \@glo@parent}%
 %    \end{macrocode}
 % Determine level.
@@ -6678,13 +6848,14 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %    \end{macrocode}
 % Define an associated boolean variable to determine whether this
 % entry has been used yet (needs to be defined globally):
+%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}}
 %    \begin{macrocode}
-  \expandafter\xdef\csname glo@\@glo@label @flagfalse\endcsname{%
+  \expandafter\protected@xdef\csname glo@\@glo@label @flagfalse\endcsname{%
     \noexpand\global
       \noexpand\let\expandafter\noexpand
         \csname ifglo@\@glo@label @flag\endcsname\noexpand\iffalse
   }%
-  \expandafter\xdef\csname glo@\@glo@label @flagtrue\endcsname{%
+  \expandafter\protected@xdef\csname glo@\@glo@label @flagtrue\endcsname{%
     \noexpand\global
       \noexpand\let\expandafter\noexpand
         \csname ifglo@\@glo@label @flag\endcsname\noexpand\iftrue
@@ -6773,10 +6944,11 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 % Moves entry whose label is given by first argument to the glossary
 % named in the second argument.
 %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\glsmoveentry}[2]{%
-  \edef\@glo@thislabel{\glsdetoklabel{#1}}%
-  \edef\glo@type{\csname glo@\@glo@thislabel @type\endcsname}%
+  \protected@edef\@glo@thislabel{\glsdetoklabel{#1}}%
+  \protected@edef\glo@type{\csname glo@\@glo@thislabel @type\endcsname}%
   \def\glo@list{,}%
   \forglsentries[\glo@type]{\glo@label}%
    {%
@@ -6785,7 +6957,7 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %\cs{ifdefequal}}
 %    \begin{macrocode}
      \ifdefequal\@glo@thislabel\glo@label
-       {}{\eappto\glo@list{\glo@label,}}%
+       {}{\protected@eappto\glo@list{\glo@label,}}%
    }%
   \cslet{glolist@\glo@type}{\glo@list}%
   \csdef{glo@\@glo@thislabel @type}{#2}%
@@ -6841,8 +7013,9 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 \newcommand{\@glo@storeentry}[1]{%
 %    \end{macrocode}
 % Escape makeindex/xindy special characters in the label:
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-  \edef\@glo@esclabel{#1}%
+  \protected@edef\@glo@esclabel{#1}%
   \@gls@checkmkidxchars\@glo@esclabel
 %    \end{macrocode}
 % Get the sort string and escape any special characters
@@ -6859,7 +7032,7 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %    \end{macrocode}
 % Get the parent, if one exists
 %    \begin{macrocode}
-  \edef\@glo@parent{\csname glo@#1@parent\endcsname}%
+  \protected@edef\@glo@parent{\csname glo@#1@parent\endcsname}%
 %    \end{macrocode}
 % Write the information to the glossary file.
 %    \begin{macrocode}
@@ -8498,9 +8671,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 % problem with tabularx).
 %\changes{2.03}{2009-09-23}{added \cs{leavevmode}}
 %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
     \leavevmode
-    \edef\glslabel{\glsdetoklabel{#2}}%
+    \protected@edef\glslabel{\glsdetoklabel{#2}}%
 %    \end{macrocode}
 % Save options in \cs{@gls@link@opts} and label in \cs{@gls@link@label}
 %\changes{4.03}{2014-01-20}{moved \cs{@gls@link@opts} and
@@ -8511,7 +8685,7 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %    \end{macrocode}
 %    \begin{macrocode}
     \def\@glsnumberformat{glsnumberformat}%
-    \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}%
+    \protected@edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}%
 %    \end{macrocode}
 %\changes{3.05}{2013-04-21}{added check for ``nohypertypes''}%
 %\changes{3.07}{2013-07-05}{fixed bug that failed to find entry in list}%
@@ -8519,7 +8693,7 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 % hyperlink by default
 %\changes{4.08}{2014-07-30}{renamed \cs{gls@type} to \cs{glstype}}
 %    \begin{macrocode}
-    \edef\glstype{\csname glo@\glslabel @type\endcsname}%
+    \protected@edef\glstype{\csname glo@\glslabel @type\endcsname}%
 %    \end{macrocode}
 %\changes{4.08}{2014-07-30}{removed redundancy}
 % Save original setting
@@ -8785,6 +8959,19 @@ false,nolabel,autolabel,nameref}[nolabel]{%
     \def\@gls@checkedmkidx{}%
     \expandafter\@gls@checklevel#1\@nil!!\null
     \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}%
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{added check for \cs{"!} and backslash}
+%    \begin{macrocode}
+    \def\@gls@checkedmkidx{}%
+    \expandafter\@gls@checkesclevel#1\@nil\!\!\null
+    \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}%
+    \def\@gls@checkedmkidx{}%
+    \edef\@do@gls@checkesc{%
+       \noexpand\@gls@checkesc\expandonce{#1}\noexpand\@nil
+         \@backslashchar\@backslashchar\noexpand\null
+    }%
+    \@do@gls@checkesc
+    \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}%
   \fi
 }
 %    \end{macrocode}
@@ -9032,6 +9219,40 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 }
 %    \end{macrocode}
 %\end{macro}
+%\begin{macro}{\@gls@checkesc}
+% and for \verb"\":
+%\changes{4.47}{2021-09-20}{new}
+%    \begin{macrocode}
+\bgroup
+\catcode`\|0\relax
+\catcode`\\12\relax
+|gdef|@gls@checkesc#1\#2\#3|null{%
+  |@gls@tmpb=|expandafter{|@gls@checkedmkidx}%
+  |toks@={#1}%
+  |ifx|null#2|null
+    |ifx|null#3|null
+      |edef|@gls@checkedmkidx{|the|@gls@tmpb|the|toks@}%
+      |def|@@gls@checkesc{|relax}%
+     |else
+      |edef|@gls@checkedmkidx{|the|@gls@tmpb|the|toks@
+        |@gls@quotechar|@backslashchar|@gls@quotechar|@backslashchar}%
+      |def|@@gls@checkesc{|@gls@checkesc#3|null}%
+     |fi
+    |else
+     |edef|@gls@checkedmkidx{|the|@gls@tmpb|the|toks@
+       |@gls@quotechar|@backslashchar}%
+     |ifx|null#3|null
+       |def|@@gls@checkesc{|@gls@checkesc#2\\|null}%
+     |else
+       |def|@@gls@checkesc{|@gls@checkesc#2\#3|null}%
+     |fi
+    |fi
+  |@@gls@checkesc
+}
+|egroup
+%    \end{macrocode}
+%\end{macro}
+%
 %
 %\begin{macro}{\@gls@xdycheckquote}
 % As before but for use with \app{xindy}
@@ -12210,8 +12431,9 @@ false,nolabel,autolabel,nameref}[nolabel]{%
       \bgroup
 %    \end{macrocode}
 %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-         \edef\@glo@label{\glsdetoklabel{#1}}%
+         \protected@edef\@glo@label{\glsdetoklabel{#1}}%
          \let\@org@glsnumberformat\glsnumberformat
          \def\glsnumberformat##1{##1}%
          \protected@edef\the@numberlist{%
@@ -12316,7 +12538,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
   \glsdoifexists{#2}%
   {%
     \def\@glsnumberformat{glsnumberformat}%
-    \edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}%
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+    \protected@edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}%
     \setkeys{glossadd}{#1}%
 %    \end{macrocode}
 % Store the entry's counter in \cs{theglsentrycounter}
@@ -12358,9 +12583,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 % glossary types.
 %\begin{macro}{\glsaddall}
 %\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newrobustcmd*{\glsaddall}[1][]{%
-  \edef\@glo@type{\@glo@types}%
+  \protected@edef\@glo@type{\@glo@types}%
   \setkeys{glossadd}{#1}%
   \forallglsentries[\@glo@type]{\@glo@entry}{%
     \glsadd[#1]{\@glo@entry}%
@@ -13034,6 +13260,22 @@ false,nolabel,autolabel,nameref}[nolabel]{%
          \noexpand!\noexpand!\noexpand\null
        \noexpand\expandafter\noexpand\@gls@updatechecked
          \noexpand\@gls@checkedmkidx{####1}%
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{added check for \cs{"!}}
+%    \begin{macrocode}
+       \noexpand\def\noexpand\@gls@checkedmkidx{}%
+       \noexpand\expandafter\noexpand\@gls@checkesclevel####1\noexpand\@nil
+         \noexpand\!\noexpand\!\noexpand\null
+       \noexpand\expandafter\noexpand\@gls@updatechecked
+         \noexpand\@gls@checkedmkidx{####1}%
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{added check for backslash}
+%    \begin{macrocode}
+       \noexpand\def\noexpand\@gls@checkedmkidx{}%
+       \noexpand\expandafter\noexpand\@gls@checkesc####1\noexpand\@nil
+         \@backslashchar\@backslashchar\noexpand\null
+       \noexpand\expandafter\noexpand\@gls@updatechecked
+         \noexpand\@gls@checkedmkidx{####1}%
      }%
    }%
    \@gls@docheckquotedef
@@ -13409,19 +13651,7 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 %    \end{macrocode}
 % Activate warning about missing \cs{printglossary}
 %    \begin{macrocode}
-  \def\warn@noprintglossary{%
-    \ifdefstring{\@glo@types}{,}%
-    {%
-      \GlossariesWarningNoLine{No glossaries have been defined}%
-    }%
-    {%
-      \GlossariesWarningNoLine{No \string\printglossary\space 
-        or \string\printglossaries\space
-        found. ^^J(Remove \string\makeglossaries\space if you 
-        don't want any glossaries.) ^^JThis document will not 
-        have a glossary}%
-    }%
-  }%
+  \let\warn@noprintglossary\@makeglossaries@warn@noprintglossary
 %    \end{macrocode}
 % Declare list parser for \cs{glsdisplaynumberlist}
 %\changes{3.02}{2012-05-21}{added list parser}
@@ -13465,6 +13695,26 @@ false,nolabel,autolabel,nameref}[nolabel]{%
 \@onlypreamble{\makeglossaries}
 %    \end{macrocode}
 %\end{macro}
+%
+%\begin{macro}{\@makeglossaries@warn@noprintglossary}
+%\changes{4.47}{??}{new}
+%    \begin{macrocode}
+\newcommand\@makeglossaries@warn@noprintglossary{%
+  \ifdefstring{\@glo@types}{,}%
+  {%
+    \GlossariesWarningNoLine{No glossaries have been defined}%
+  }%
+  {%
+    \GlossariesWarningNoLine{No \string\printglossary\space 
+      or \string\printglossaries\space
+      found. ^^J(Remove \string\makeglossaries\space if you 
+      don't want any glossaries.) ^^JThis document will not 
+      have a glossary}%
+  }%
+}%
+%    \end{macrocode}
+%\end{macro}
+%
 %\begin{macro}{\glswrite}
 % The definition of \cs{glswrite} has now been moved to 
 % \cs{makeglossaries} so that it's only defined if needed.
@@ -13520,9 +13770,10 @@ false,nolabel,autolabel,nameref}[nolabel]{%
   \let\gls@checkseeallowed\relax
 %    \end{macrocode}
 % Redefine cross-referencing macro:
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
   \renewcommand{\@do@seeglossary}[2]{%
-    \edef\@gls@label{\glsdetoklabel{##1}}%
+    \protected@edef\@gls@label{\glsdetoklabel{##1}}%
     \protected@write\@auxout{}{%
       \string\@gls@reference
         {\csname glo@\@gls@label @type\endcsname}%
@@ -14005,11 +14256,12 @@ you
 % command that takes a \TeX\ register as the argument 
 % (\verb|\|\meta{csname}\verb|\c@page| must be valid).
 %\changes{4.11}{2014-09-01}{new}
+%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}}
 %    \begin{macrocode}
 \newcommand*{\glsaddprotectedpagefmt}[1]{%
-  \eappto\gls@protected@pagefmts{,\expandonce{\csname gls#1page\endcsname}}%
+  \protected@eappto\gls@protected@pagefmts{,\expandonce{\csname gls#1page\endcsname}}%
   \csedef{gls#1page}{\expandonce{\csname#1\endcsname}\noexpand\c@page}%
-  \eappto\@wrglossarynumberhook{%
+  \protected@eappto\@wrglossarynumberhook{%
     \noexpand\let\expandonce{\csname org@gls#1\endcsname}%
       \expandonce{\csname#1\endcsname}%
     \noexpand\def\expandonce{\csname#1\endcsname}{%
@@ -14085,8 +14337,9 @@ you
 %    \end{macrocode}
 % De-tok label if required.
 %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-  \edef\@gls@label{\glsdetoklabel{#1}}%
+  \protected@edef\@gls@label{\glsdetoklabel{#1}}%
 %    \end{macrocode}
 % Write the information to file:
 %    \begin{macrocode}
@@ -14271,8 +14524,9 @@ you
 %    \end{macrocode}
 % De-tok label if required
 %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-  \edef\@gls@label{\glsdetoklabel{#1}}%
+  \protected@edef\@gls@label{\glsdetoklabel{#1}}%
 %    \end{macrocode}
 % Write the information to file:
 %    \begin{macrocode}
@@ -14543,7 +14797,10 @@ you
 \newcommand*{\gls@save@numberlist}[1]{%
   \ifglssavenumberlist
     \toks@{#1}%
-    \edef\@do@writeaux@info{%
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+    \protected@edef\@do@writeaux@info{%
         \noexpand\csgdef{glo@\glscurrententrylabel @numberlist}{\the\toks@}%
     }%
     \@onelevel@sanitize\@do@writeaux@info
@@ -14797,15 +15054,16 @@ you
 % new \cs{glossentry} and \cs{subglossentry}, but this is now only
 % needed for backward compatibility):
 %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}}
 %    \begin{macrocode}
     \let\gls@org@glossaryentryfield\glossentry
     \let\gls@org@glossarysubentryfield\subglossentry
     \renewcommand{\glossentry}[1]{%
-      \xdef\glscurrententrylabel{\glsdetoklabel{##1}}%
+      \protected@xdef\glscurrententrylabel{\glsdetoklabel{##1}}%
       \gls@org@glossaryentryfield{##1}%
     }%
     \renewcommand{\subglossentry}[2]{%
-      \xdef\glscurrententrylabel{\glsdetoklabel{##2}}%
+      \protected@xdef\glscurrententrylabel{\glsdetoklabel{##2}}%
       \gls@org@glossarysubentryfield{##1}{##2}%
     }%
 %    \end{macrocode}
@@ -14941,7 +15199,10 @@ you
   \glosortentrieswarning
   \def\@glo@sortinglist{}%
   \def\@glo@sortinghandler{#1}%
-  \edef\@glo@type{#2}%
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+  \protected@edef\@glo@type{#2}%
   \forlistcsloop{\@glo@do@sortentries}{@glsref@#2}%
   \csdef{@glsref@#2}{}%
   \@for\@this@label:=\@glo@sortinglist\do{%
@@ -15007,8 +15268,9 @@ you
   {%
 %    \end{macrocode}
 % This entry has a parent, so add it to the child list
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-    \edef\@glo@parent{\csuse{glo@\glsdetoklabel{#1}@parent}}%
+    \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{#1}@parent}}%
     \ifcsundef{@glo@sortingchildren@\@glo@parent}%
     {%
       \csdef{@glo@sortingchildren@\@glo@parent}{}%
@@ -15331,6 +15593,7 @@ you
 %
 %\begin{macro}{\glo@grabfirst}
 %\changes{4.04}{2014-03-06}{new}
+%This won't work for UTF-8 and \sty{inputenc}.
 %    \begin{macrocode}
 \def\glo@grabfirst#1#2\@nil{%
   \def\@gls@firsttok{#1}%
@@ -15843,7 +16106,10 @@ you
 %    \begin{macrocode}
 \newcommand*{\glsstepsubentry}[1]{%
   \ifglssubentrycounter
-    \edef\currentglssubentry{\glsdetoklabel{#1}}%
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+    \protected@edef\currentglssubentry{\glsdetoklabel{#1}}%
     \refstepcounter{glossarysubentry}%
     \label{\GlsEntryCounterLabelPrefix\currentglssubentry}%
   \fi
@@ -16506,8 +16772,11 @@ you
 \def\@gls@removespaces#1 #2\@nil{%
  \toks@=\expandafter{\the\toks@#1}%
  \ifx\\#2\\%
-   \edef\x{\the\toks@}%
-   \ifx\x\empty
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{changed \cs{x} to \cs{@gls@x}}
+%    \begin{macrocode}
+   \edef\@gls@x{\the\toks@}%
+   \ifx\@gls@x\empty
    \else
 %    \end{macrocode}
 %\changes{3.0}{2011-04-02}{added prefix to hyperlink}
@@ -18001,9 +18270,50 @@ you
   \let\gls@assign@firstpl\@org@gls@assign@firstpl
   \let\gls@assign@plural\@org@gls@assign@plural
   \let\gls@assign@symbolplural\@org@gls@assign@symbolplural
+%    \end{macrocode}
+% If expansion is switched off, the default plurals won't be properly set.
+%    \begin{macrocode}
+  \@@gls@noexpand@assign@default@plurals
+}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@@gls@noexpand@assign@default@plurals}
+%\changes{4.47}{2021-09-20}{new}
+%    \begin{macrocode}
+\newcommand*{\@@gls@noexpand@assign@default@plurals}{%
+  \expandafter\ifx\csname glo@\the\glslabeltok @plural\endcsname\@@gls@@default@acr@plural
+    \csxdef{glo@\the\glslabeltok @plural}{\expandonce\@glo@shortpl}%
+  \fi
+  \expandafter\ifx\csname glo@\the\glslabeltok @firstpl\endcsname\@@gls@@default@acr@firstplural
+    \csxdef{glo@\the\glslabeltok @firstpl}{%
+      \expandonce\@glo@longpl\glsspace(\expandonce\@glo@shortpl)}%
+  \fi
+  \expandafter\ifx\csname glo@\the\glslabeltok @descplural\endcsname\@@gls@@default@acr@descplural
+    \csxdef{glo@\the\glslabeltok @descplural}{\expandonce\@glo@longpl}%
+  \fi
+}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@@gls@@default@acr@plural}
+%\changes{4.47}{2021-09-20}{new}
+%    \begin{macrocode}
+\newcommand*{\@@gls@@default@acr@plural}{\expandonce\@glo@shortpl}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@@gls@@default@acr@firstplural}
+%\changes{4.47}{2021-09-20}{new}
+%    \begin{macrocode}
+\newcommand*{\@@gls@@default@acr@firstplural}{%
+ \expandonce\@glo@longpl\glsspace(\expandonce\@glo@shortpl)%
 }
 %    \end{macrocode}
 %\end{macro}
+%\begin{macro}{\@@gls@@default@acr@descplural}
+%\changes{4.47}{2021-09-20}{new}
+%    \begin{macrocode}
+\newcommand*{\@@gls@@default@acr@descplural}{\expandonce\@glo@longpl}
+%    \end{macrocode}
+%\end{macro}
 %\begin{macro}{\SetDefaultAcronymStyle}
 %\changes{2.04}{2009-11-10}{new}
 % Set up the default acronym style:
@@ -18151,8 +18461,23 @@ you
 % key. Note that since the long form is stored in the symbol key,
 % if you want the long form to appear in the list of acronyms, you
 % need to use a glossary style that displays the symbol key.
+% This style was deprecated with the introduction of
+% \cs{newacronymstyle}.
+%\changes{4.47}{2021-09-20}{added deprecated warnings}
 %    \begin{macrocode}
 \newcommand*{\SetDescriptionFootnoteAcronymStyle}{%
+  \ifglsacrsmallcaps
+    \@gls@deprecated@acr@warning{footnote,smallcaps,description}%
+      {footnote-sc-desc}{short-sc-footnote-desc}%
+  \else
+    \ifglsacrsmaller
+      \@gls@deprecated@acr@warning{footnote,smaller,description}%
+       {footnote-sm-desc}{short-sm-footnote-desc}%
+    \else
+      \@gls@deprecated@acr@warning{footnote,description}%
+       {footnote-desc}{short-footnote-desc}%
+    \fi
+  \fi
   \renewcommand{\newacronym}[4][]{%
     \ifx\@glsacronymlists\@empty
       \def\@glo@type{\acronymtype}%
@@ -18264,6 +18589,9 @@ you
 % Note that the short form is stored in the \gloskey{symbol} key,
 % so if the short form needs to be displayed in the glossary, 
 % use a style the displays the symbol.
+% This style was deprecated with the introduction of
+% \cs{newacronymstyle}.
+%\changes{4.47}{2021-09-20}{added deprecated warning}
 %    \begin{macrocode}
 \newcommand*{\SetDescriptionDUAAcronymStyle}{%
   \ifglsacrsmallcaps
@@ -18275,6 +18603,7 @@ you
       can't both be set}{}%
     \fi
   \fi
+  \@gls@deprecated@acr@warning{dua,description}{dua-desc}{long-noshort-desc}%
   \renewcommand{\newacronym}[4][]{%
     \ifx\@glsacronymlists\@empty
       \def\@glo@type{\acronymtype}%
@@ -18399,6 +18728,18 @@ you
 % list of acronyms.
 %    \begin{macrocode}
 \newcommand*{\SetDescriptionAcronymStyle}{%
+  \ifglsacrsmallcaps
+    \@gls@deprecated@acr@warning{smallcaps,description}%
+      {long-sc-short-desc}{long-short-sc-desc}%
+  \else
+    \ifglsacrsmaller
+      \@gls@deprecated@acr@warning{smaller,description}%
+        {long-sm-short-desc}{long-short-sm-desc}%
+    \else
+      \@gls@deprecated@acr@warning{description}%
+        {long-short-desc}{long-short-desc}%
+    \fi
+  \fi
   \renewcommand{\newacronym}[4][]{%
     \ifx\@glsacronymlists\@empty
       \def\@glo@type{\acronymtype}%
@@ -18531,8 +18872,20 @@ you
 % use to append the long form (stored in \gloskey{description}) as a 
 % footnote.
 % Use the \gloskey{description} key to store the long form.
+% This style was deprecated with the introduction of
+% \cs{newacronymstyle}.
+%\changes{4.47}{2021-09-20}{added deprecated warnings}
 %    \begin{macrocode}
 \newcommand*{\SetFootnoteAcronymStyle}{%
+  \ifglsacrsmallcaps
+    \@gls@deprecated@acr@warning{footnote,smallcaps}{footnote-sc}{short-sc-footnote}%
+  \else
+    \ifglsacrsmaller
+      \@gls@deprecated@acr@warning{footnote,smaller}{footnote-sm}{short-sm-footnote}%
+    \else
+      \@gls@deprecated@acr@warning{footnote}{footnote}{short-footnote}%
+    \fi
+  \fi
   \renewcommand{\newacronym}[4][]{%
     \ifx\@glsacronymlists\@empty
       \def\@glo@type{\acronymtype}%
@@ -18713,8 +19066,16 @@ you
 % smaller specified.
 % Use the \gloskey{symbol} key to store the short form and
 % \gloskey{first} to store the long form.
+% This style was deprecated with the introduction of
+% \cs{newacronymstyle}.
+%\changes{4.47}{2021-09-20}{added deprecated warnings}
 %    \begin{macrocode}
 \newcommand*{\SetSmallAcronymStyle}{%
+  \ifglsacrsmallcaps
+    \@gls@deprecated@acr@warning{smallcaps}{long-sc-short}{long-short-sc}%
+  \else
+    \@gls@deprecated@acr@warning{smaller}{long-sm-short}{long-short-sm}%
+  \fi
   \renewcommand{\newacronym}[4][]{%
     \ifx\@glsacronymlists\@empty
       \def\@glo@type{\acronymtype}%
@@ -18825,8 +19186,12 @@ you
 %\end{macro}
 %\begin{macro}{\SetDUAStyle}
 % Always expand acronyms.
+% This style was deprecated with the introduction of
+% \cs{newacronymstyle}.
+%\changes{4.47}{2021-09-20}{added deprecated warnings}
 %    \begin{macrocode}
 \newcommand*{\SetDUAStyle}{%
+  \@gls@deprecated@acr@warning{dua}{dua}{long-noshort}%
   \renewcommand{\newacronym}[4][]{%
     \ifx\@glsacronymlists\@empty
       \def\@glo@type{\acronymtype}%
@@ -18851,6 +19216,18 @@ you
 %    \end{macrocode}
 %\end{macro}
 %
+%\begin{macro}{\@gls@deprecated@acr@warning}
+%\changes{4.47}{2021-09-20}{new}
+%    \begin{macrocode}
+\newcommand*{\@gls@deprecated@acr@warning}[3]{%
+   \GlossariesWarning{Acronym style option #1 deprecated. 
+   Use \string\setacronymstyle{#2} with just glossaries.sty or
+   use \string\setabbreviationstyle[acronym]{#3} with
+   glossaries-extra.sty}%
+}
+%    \end{macrocode}
+%\end{macro}
+%
 %\begin{macro}{\SetAcronymStyle}
 %    \begin{macrocode}
 \newcommand*{\SetAcronymStyle}{%
@@ -19488,7 +19865,7 @@ you
 % \cs{gls}\marg{label}} on subsequent use.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossaries-prefix}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossaries-prefix}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 % Pass all options to \sty{glossaries}:
 %    \begin{macrocode}
@@ -19953,7 +20330,7 @@ you
 %\label{sec:code:hypernav}
 % Package Definition:
 %    \begin{macrocode}
-\ProvidesPackage{glossary-hypernav}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossary-hypernav}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 %
 % The commands defined in this package are provided to 
@@ -19975,7 +20352,10 @@ you
 %\cs{@glslink}}
 %    \begin{macrocode}
 \newcommand*{\glsnavhyperlink}[3][\@glo@type]{%
-  \edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}%
+%    \end{macrocode}
+%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+  \protected@edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}%
   \@glslink{\glsnavhyperlinkname{#1}{#2}}{#3}}
 %    \end{macrocode}
 %\end{macro}
@@ -20149,7 +20529,7 @@ you
 % This defines an in-line style where the entries are
 % comma-separated with just the name and description displayed.
 %    \begin{macrocode}
-\ProvidesPackage{glossary-inline}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossary-inline}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 %
 %\begin{style}{inline}
@@ -20340,7 +20720,7 @@ you
 % \ics{item} command, it will appear in a bold font by
 % default.
 %    \begin{macrocode}
-\ProvidesPackage{glossary-list}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossary-list}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 %\begin{macro}{\indexspace}
 %\changes{4.13}{2015-02-03}{new}
@@ -20622,7 +21002,7 @@ you
 % The glossary styles defined in the \isty{glossary-long} package
 % used the \env{longtable} environment in the glossary.
 %    \begin{macrocode}
-\ProvidesPackage{glossary-long}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossary-long}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 % Requires the \isty{longtable} package:
 %    \begin{macrocode}
@@ -21119,7 +21499,7 @@ you
 % \url{http://tex.stackexchange.com/a/56890}
 %
 %    \begin{macrocode}
-\ProvidesPackage{glossary-longbooktabs}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossary-longbooktabs}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 % Requires \sty{booktabs} package:
 %    \begin{macrocode}
@@ -21460,7 +21840,7 @@ you
 % used the \env{longtable} environment in the glossary and use
 % ragged right formatting for the multiline columns.
 %    \begin{macrocode}
-\ProvidesPackage{glossary-longragged}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossary-longragged}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 % Requires the \isty{array} package:
 %    \begin{macrocode}
@@ -21893,7 +22273,7 @@ you
 %use the \sty{multicol} package. These use the tree-like glossary
 %styles in a multicol environment.
 %    \begin{macrocode}
-\ProvidesPackage{glossary-mcols}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossary-mcols}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 % Required packages:
 %    \begin{macrocode}
@@ -22330,7 +22710,7 @@ you
 % The glossary styles defined in the \isty{glossary-super} package
 % use the \env{supertabular} environment.
 %    \begin{macrocode}
-\ProvidesPackage{glossary-super}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossary-super}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 % Requires the \isty{supertabular} package:
 %    \begin{macrocode}
@@ -22862,7 +23242,7 @@ you
 % are like those provided by the \isty{glossary-super} package, 
 % except that the multiline columns have ragged right justification.
 %    \begin{macrocode}
-\ProvidesPackage{glossary-superragged}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossary-superragged}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 % Requires the \isty{array} package:
 %    \begin{macrocode}
@@ -23302,7 +23682,7 @@ you
 % that have a tree-like structure. These are designed for
 % hierarchical glossaries.
 %    \begin{macrocode}
-\ProvidesPackage{glossary-tree}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossary-tree}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 %
 %\begin{macro}{\indexspace}
@@ -24023,7 +24403,7 @@ you
 % hyperlinks may not work properly.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossaries-compatible-207}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossaries-compatible-207}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 %\begin{macro}{\GlsAddXdyAttribute}
 % Adds an attribute in old format.
@@ -24384,7 +24764,7 @@ you
 %\section{glossaries-compatible-307}
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossaries-compatible-307}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossaries-compatible-307}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 %
 % Compatibility macros for predefined glossary styles:
@@ -25192,7 +25572,7 @@ you
 %    \end{macrocode}
 % Package version number now in line with main glossaries package number.
 %    \begin{macrocode}
-\ProvidesPackage{glossaries-accsupp}[2020/03/19 v4.46 (NLCT)
+\ProvidesPackage{glossaries-accsupp}[2021/09/20 v4.47 (NLCT)
   Experimental glossaries accessibility]
 %    \end{macrocode}
 % Pass all options to \sty{glossaries}:
@@ -28103,9 +28483,10 @@ you
 %
 % Use \cs{newacronymhook} to modify the key list to set
 % the access text to the long version by default.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \renewcommand*{\newacronymhook}{%
-  \edef\@gls@keylist{%
+  \protected@edef\@gls@keylist{%
      shortaccess={\glsdefaultshortaccess{\the\glslongtok}{\the\glsshorttok}},%
      shortpluralaccess={\glsdefaultshortaccess{\the\glslongtok}{\the\glsshorttok}},%
      \the\glskeylisttok}%
@@ -28163,6 +28544,7 @@ you
   \let\gls@assign@firstpl\@org@gls@assign@firstpl
   \let\gls@assign@plural\@org@gls@assign@plural
   \let\gls@assign@symbolplural\@org@gls@assign@symbolplural
+  \@@gls@noexpand@assign@default@plurals
 }
 %    \end{macrocode}
 %\end{macro}
@@ -28498,7 +28880,7 @@ you
 % modules.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossaries-babel}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossaries-babel}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 % Load \sty{tracklang} to obtain language settings.
 %    \begin{macrocode}
@@ -28542,7 +28924,7 @@ you
 % modules.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossaries-polyglossia}[2020/03/19 v4.46 (NLCT)]
+\ProvidesPackage{glossaries-polyglossia}[2021/09/20 v4.47 (NLCT)]
 %    \end{macrocode}
 % Load \sty{tracklang} to obtain language settings.
 %    \begin{macrocode}
@@ -28882,6 +29264,181 @@ risus ut urna}
 %\fi
 %\iffalse
 %    \begin{macrocode}
+%<*example-glossaries-childmultipar.tex>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<<COMMENT
+% This file is part of the glossaries bundle.
+% These are test glossary entries with child entries that have 
+% multi-paragraph descriptions. One parent entry also has a
+% multi-paragraph description. Some entries have an associated
+% image file (stored in user1). The referenced image files are 
+% provided by the mwe package.
+%COMMENT
+
+\newglossaryentry{hiersedmattis}{name={sed mattis},user1={example-image},
+ description={Erat sit amet dolor sit amet, consectetuer adipiscing elit. Ut purus
+elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
+dictum gravida mauris. Ut pellentesque augue sed urna. Vestibulum
+diam eros, fringilla et, consectetuer eu, nonummy id, sapien. Nullam
+at lectus. In sagittis ultrices mauris. Curabitur malesuada erat sit
+amet massa. Fusce blandit. Aliquam erat volutpat.}}
+
+
+\longnewglossaryentry{hierloremi-ii}
+{name={lorem 1--2},parent={hiersedmattis}}%
+{%
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
+vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
+dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer
+id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque
+habitant morbi tristique senectus et netus et malesuada fames ac
+turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla
+et lectus vestibulum urna fringilla ultrices.  Phasellus eu tellus
+sit amet tortor gravida placerat. Integer sapien est, iaculis in,
+pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices
+bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar
+at, mollis ac, nulla.  Curabitur auctor semper nulla. Donec varius
+orci eget risus. Duis nibh mi, congue eu, accumsan eleifend,
+sagittis quis, diam. Duis eget orci sit amet orci dignissim rutrum.
+
+Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel,
+wisi. Morbi auctor lorem non justo. Nam lacus libero, pretium at,
+lobortis vitae, ultricies et, tellus. Donec aliquet, tortor sed
+accumsan bibendum, erat ligula aliquet magna, vitae ornare odio
+metus a mi. Morbi ac orci et nisl hendrerit mollis. Suspendisse ut
+massa. Cras nec ante. Pellentesque a nulla.  Cum sociis natoque
+penatibus et magnis dis parturient montes, nascetur ridiculus mus.
+Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis.
+Pellentesque cursus luctus mauris.%
+}
+
+\longnewglossaryentry{hierloremiii-iv}
+{name={lorem 3--4},parent={hiersedmattis},user1={example-image}}%
+{%
+Nulla malesuada porttitor diam. Donec felis erat, congue non,
+volutpat at, tincidunt tristique, libero.  Vivamus viverra fermentum
+felis. Donec nonummy pellentesque ante.  Phasellus adipiscing semper
+elit. Proin fermentum massa ac quam. Sed diam turpis, molestie
+vitae, placerat a, molestie nec, leo. Maecenas lacinia. Nam ipsum
+ligula, eleifend at, accumsan nec, suscipit a, ipsum. Morbi blandit
+ligula feugiat magna. Nunc eleifend consequat lorem. Sed lacinia
+nulla vitae enim. Pellentesque tincidunt purus vel magna. Integer
+non enim. Praesent euismod nunc eu purus. Donec bibendum quam in
+tellus. Nullam cursus pulvinar lectus. Donec et mi.  Nam vulputate
+metus eu enim. Vestibulum pellentesque felis eu massa. 
+
+Quisque ullamcorper placerat ipsum. Cras nibh.  Morbi vel justo
+vitae lacus tincidunt ultrices. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. In hac habitasse platea dictumst.
+Integer tempus convallis augue. Etiam facilisis. Nunc elementum
+fermentum wisi. Aenean placerat. Ut imperdiet, enim sed gravida
+sollicitudin, felis odio placerat quam, ac pulvinar elit purus eget
+enim. Nunc vitae tortor. Proin tempus nibh sit amet nisl.  Vivamus
+quis tortor vitae risus porta vehicula.%
+}
+
+\longnewglossaryentry{hierloremv-vi}
+{name={lorem 5--6},parent={hiersedmattis}}%
+{%
+Fusce mauris. Vestibulum luctus nibh at lectus.  Sed bibendum, nulla
+a faucibus semper, leo velit ultricies tellus, ac venenatis arcu
+wisi vel nisl. Vestibulum diam. Aliquam pellentesque, augue quis
+sagittis posuere, turpis lacus congue quam, in hendrerit risus eros
+eget felis. Maecenas eget erat in sapien mattis porttitor.
+Vestibulum porttitor. Nulla facilisi. Sed a turpis eu lacus commodo
+facilisis. Morbi fringilla, wisi in dignissim interdum, justo lectus
+sagittis dui, et vehicula libero dui cursus dui. Mauris tempor
+ligula sed lacus. Duis cursus enim ut augue.  Cras ac magna. Cras
+nulla. Nulla egestas. Curabitur a leo. Quisque egestas wisi eget
+nunc. Nam feugiat lacus vel est. Curabitur consectetuer.%
+
+Suspendisse vel felis. Ut lorem lorem, interdum eu, tincidunt sit
+amet, laoreet vitae, arcu. Aenean faucibus pede eu ante. Praesent
+enim elit, rutrum at, molestie non, nonummy vel, nisl. Ut lectus
+eros, malesuada sit amet, fermentum eu, sodales cursus, magna. Donec
+eu purus. Quisque vehicula, urna sed ultricies auctor, pede lorem
+egestas dui, et convallis elit erat sed nulla.  Donec luctus.
+Curabitur et nunc. Aliquam dolor odio, commodo pretium, ultricies
+non, pharetra in, velit. Integer arcu est, nonummy in, fermentum
+faucibus, egestas vel, odio.%
+}
+
+\longnewglossaryentry{hiergravida}{name={gravida}}
+{Malesuada libero, nonummy eget, consectetuer id, vulputate a, magna. Donec
+vehicula augue eu neque. Pellentesque habitant morbi tristique
+senectus et netus et malesuada fames ac turpis egestas. Mauris ut
+leo.
+
+Morbi ultrices rutrum lorem. Nam elementum ullamcorper
+leo. Morbi dui. Aliquam sagittis. Nunc placerat.  Pellentesque
+tristique sodales est. Maecenas imperdiet lacinia velit. Cras non
+urna. Morbi eros pede, suscipit ac, varius vel, egestas non, eros.}
+
+\longnewglossaryentry{hierloremvii-viii}
+{name={lorem 7--8},parent={hiergravida},user1={example-image-b}}%
+{%
+Sed commodo posuere pede. Mauris ut est. Ut quis purus. Sed ac odio.
+Sed vehicula hendrerit sem. Duis non odio.  Morbi ut dui. Sed
+accumsan risus eget odio. In hac habitasse platea dictumst.
+Pellentesque non elit. Fusce sed justo eu urna porta tincidunt.
+Mauris felis odio, sollicitudin sed, volutpat a, ornare ac, erat.
+Morbi quis dolor. Donec pellentesque, erat ac sagittis semper, nunc
+dui lobortis purus, quis congue purus metus ultricies tellus. Proin
+et quam. Class aptent taciti sociosqu ad litora torquent per conubia
+nostra, per inceptos hymenaeos. Praesent sapien turpis, fermentum
+vel, eleifend faucibus, vehicula eu, lacus.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada
+fames ac turpis egestas. Donec odio elit, dictum in, hendrerit sit
+amet, egestas sed, leo. Praesent feugiat sapien aliquet odio.
+Integer vitae justo. Aliquam vestibulum fringilla lorem. Sed neque
+lectus, consectetuer at, consectetuer sed, eleifend ac, lectus.
+Nulla facilisi. Pellentesque eget lectus.  Proin eu metus. Sed
+porttitor. In hac habitasse platea dictumst.  Suspendisse eu lectus.
+Ut mi mi, lacinia sit amet, placerat et, mollis vitae, dui. Sed ante
+tellus, tristique ut, iaculis eu, malesuada ac, dui.  Mauris nibh
+leo, facilisis non, adipiscing quis, ultrices a, dui.%
+}
+
+\longnewglossaryentry{hierloremix-x}
+{name={lorem 9--10},parent={hiergravida},user1={example-image-c}}%
+{%
+Morbi luctus, wisi viverra faucibus pretium, nibh est placerat odio,
+nec commodo wisi enim eget quam. Quisque libero justo, consectetuer
+a, feugiat vitae, porttitor eu, libero.  Suspendisse sed mauris
+vitae elit sollicitudin malesuada. Maecenas ultricies eros sit amet
+ante. Ut venenatis velit. Maecenas sed mi eget dui varius euismod.
+Phasellus aliquet volutpat odio.  Vestibulum ante ipsum primis in
+faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque
+sit amet pede ac sem eleifend consectetuer. Nullam elementum, urna
+vel imperdiet sodales, elit ipsum pharetra ligula, ac pretium ante
+justo a nulla. Curabitur tristique arcu eu metus. Vestibulum lectus.
+Proin mauris. Proin eu nunc eu urna hendrerit faucibus. Aliquam
+auctor, pede consequat laoreet varius, eros tellus scelerisque quam,
+pellentesque hendrerit ipsum dolor sed augue. Nulla nec lacus.
+
+Suspendisse vitae elit. Aliquam arcu neque, ornare in, ullamcorper
+quis, commodo eu, libero. Fusce sagittis erat at erat tristique
+mollis. Maecenas sapien libero, molestie et, lobortis in, sodales
+eget, dui. Morbi ultrices rutrum lorem. Nam elementum ullamcorper
+leo. Morbi dui. Aliquam sagittis. Nunc placerat.  Pellentesque
+tristique sodales est. Maecenas imperdiet lacinia velit. Cras non
+urna. Morbi eros pede, suscipit ac, varius vel, egestas non, eros.
+Praesent malesuada, diam id pretium elementum, eros sem dictum
+tortor, vel consectetuer odio sem sed wisi.%
+}
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%</example-glossaries-childmultipar.tex>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
 %<*example-glossaries-childnoname.tex>
 %    \end{macrocode}
 %\fi
@@ -29470,6 +30027,140 @@ bibendum quam in tellus.}}
 %\fi
 %\iffalse
 %    \begin{macrocode}
+%<*example-glossaries-longchild.tex>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%<<COMMENT
+% This file is part of the glossaries bundle
+% These are test glossary entries with child entries and long
+% descriptions.
+%COMMENT
+
+\newglossaryentry{longsedmattis}{name={sed mattis},
+ description={erat sit amet dolor sit amet, consectetuer adipiscing elit. Ut purus
+elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
+dictum gravida mauris.}}
+
+\newglossaryentry{longgravida}{parent={longsedmattis},name={gravida},
+ description={malesuada libero, nonummy eget, consectetuer id, vulputate a, magna. Donec
+vehicula augue eu neque. Pellentesque habitant morbi tristique
+senectus et netus et malesuada fames ac turpis egestas. Mauris ut
+leo.}}
+
+\newglossaryentry{longelitaugue}{parent={longsedmattis},name={elit augue},
+description={egestas diam metus rhoncus sem. Nulla et lectus vestibulum
+urna fringilla ultrices.  Phasellus eu tellus sit amet tortor gravida
+placerat.}}
+
+\newglossaryentry{longtempus}{parent={longsedmattis},name={tempus},
+description={scelerisque est, iaculis in, pretium quis, viverra ac,
+nunc. Praesent eget sem vel leo ultrices bibendum. Aenean
+faucibus.}}
+
+\newglossaryentry{longnunc}{name={nunc},
+ description={nisl vitae nulla, malesuada eu, pulvinar at, mollis ac, nulla.
+Curabitur auctor semper nulla. Donec varius orci eget risus. Duis
+nibh mi, congue eu, accumsan eleifend, sagittis quis, diam. Duis
+eget orci sit amet orci dignissim rutrum.}}
+
+\newglossaryentry{longlibero}{parent={longnunc},name={libero},
+ description={sed consequat ligula, fringilla a, euismod sodales,
+sollicitudin vel, wisi. Morbi auctor lorem non justo.}}
+
+\newglossaryentry{longfeugiat}{parent={longnunc},name={feugiat},
+ description={massa libero, pretium at, lobortis vitae, ultricies et,
+tellus. Donec aliquet, tortor sed accumsan bibendum, erat ligula aliquet magna,
+vitae ornare odio metus a mi.}}
+
+\newglossaryentry{longporta}{parent={longnunc},name={porta},
+ description={eros in eleifend orci et nisl hendrerit mollis. Suspendisse ut massa.
+Cras nec ante. Pellentesque a nulla.  Cum sociis natoque penatibus
+et magnis dis parturient montes, nascetur ridiculus mus.}}
+
+\newglossaryentry{longvariuserat}{parent={longnunc},name={varius erat},
+description={leo rutrum dui tincidunt urna. Nulla ullamcorper
+vestibulum turpis. Pellentesque cursus luctus mauris.}}
+
+\newglossaryentry{longnonconvallis}{name={non convallis},
+ description={lectus orci ut nibh porttitor diam. Donec felis erat,
+congue non, volutpat at, tincidunt tristique, libero.  Vivamus
+viverra fermentum felis.}}
+
+\newglossaryentry{longsedlorem}{parent={longnonconvallis},name={sedlorem},
+ description={massa pellentesque ante. Phasellus
+adipiscing semper elit. Proin fermentum massa ac quam. Sed diam
+turpis, molestie vitae, placerat a, molestie nec, leo.}}
+
+\newglossaryentry{longnonummyquis}{parent={longnonconvallis},name={nonummy
+quis}, description={egestas id nam ipsum ligula, eleifend at, accumsan nec, suscipit
+a, ipsum. Morbi blandit ligula feugiat magna. Nunc eleifend consequat
+lorem.}}
+
+\newglossaryentry{longcondimentum}{name={condimentum},
+ description={at nisl nulla vitae enim. Pellentesque tincidunt purus
+vel magna. Integer non enim. Praesent euismod nunc eu purus. Donec
+bibendum quam in tellus.}}
+
+\newglossaryentry{longmaecenas}{parent={longcondimentum},name={maecenas},
+description={at nibh fringilla a, euismod sodales, sollicitudin vel,
+wisi. Morbi auctor lorem non justo. Nam lacus libero, pretium at,
+lobortis vitae, ultricies et, tellus. Donec aliquet, tortor sed
+accumsan bibendum, erat ligula aliquet magna, vitae ornare odio
+metus a mi. Morbi ac orci et nisl hendrerit mollis. Suspendisse ut
+massa. Cras nec ante. Pellentesque a nulla.  Cum sociis natoque
+penatibus et magnis dis parturient montes, nascetur ridiculus mus.
+Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis.
+Pellentesque cursus luctus mauris.}}
+
+\newglossaryentry{longaliquamet}{name={aliquam et},
+ description={augue felis erat, congue non,
+volutpat at, tincidunt tristique, libero.  Vivamus viverra fermentum
+felis. Donec nonummy pellentesque ante.}}
+
+\newglossaryentry{longatnunc}{parent={longaliquamet},name={at nunc},
+ description={pellentesque ullamcorper el justo
+vitae lacus tincidunt ultrices. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit.}}
+
+\newglossaryentry{longduisnisl}{parent={longatnunc},name={duisnisl},
+ description={laoreet suscipit ac venenatis arcu
+wisi vel nisl. Vestibulum diam. Aliquam pellentesque, augue quis
+sagittis posuere, turpis lacus congue quam, in hendrerit risus eros
+eget felis. Maecenas eget erat in sapien mattis porttitor.}}
+
+\newglossaryentry{longduisnibh}{parent={longatnunc},name={duisnibh},
+description={convallis ut justo lectus
+sagittis dui, et vehicula libero dui cursus dui. Mauris tempor
+ligula sed lacus. Duis cursus enim ut augue.  Cras ac magna.}}
+
+\newglossaryentry{longrutrum}{name={rutrum},
+ description={id, enim elit, rutrum at, molestie non, nonummy vel, nisl. Ut lectus
+eros, malesuada sit amet, fermentum eu, sodales cursus, magna. Donec
+eu purus. Quisque vehicula, urna sed ultricies auctor, pede lorem
+egestas dui, et convallis elit erat sed nulla.}}
+
+\newglossaryentry{longphasellus}{parent={longrutrum},name={phasellus},
+ description={odio volutpat a, ornare ac, erat.
+Morbi quis dolor. Donec pellentesque, erat ac sagittis semper, nunc
+dui lobortis purus, quis congue purus metus ultricies tellus. Proin
+et quam.}}
+
+\newglossaryentry{longnullanulla}{parent={longrutrum},name={nulla nulla},
+description={elit, molestie non wisi viverra faucibus pretium, nibh est placerat odio,
+nec commodo wisi enim eget quam. Quisque libero justo, consectetuer
+a, feugiat vitae, porttitor eu, libero.}}
+
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%</example-glossaries-longchild.tex>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
 %<*example-glossaries-multipar.tex>
 %    \end{macrocode}
 %\fi
@@ -29950,6 +30641,8181 @@ amet, libero},
 %\fi
 %\iffalse
 %    \begin{macrocode}
+%<*glossaries-2020-03-19.sty>
+%    \end{macrocode}
+%\fi
+% \section{Rollback v4.46 (glossaries-2020-03-19.sty)}
+% Version 4.46 preserved for rollback.
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{glossaries}[2020/03/19 v4.46 (NLCT)]
+\RequirePackage{ifthen}
+\RequirePackage{xkeyval}[2006/11/18]
+\RequirePackage{mfirstuc}
+\RequirePackage{textcase}
+\renewcommand*{\mfirstucMakeUppercase}{\MakeTextUppercase}%
+\RequirePackage{xfor}
+\RequirePackage{datatool-base}
+\RequirePackage{amsgen}
+\RequirePackage{etoolbox}
+\newif\if@gls@docloaded
+\@ifpackageloaded{doc}%
+{%
+  \@gls@docloadedtrue
+}%
+{%
+  \@ifclassloaded{nlctdoc}{\@gls@docloadedtrue}{\@gls@docloadedfalse}%
+}
+\if@gls@docloaded
+  \let\glsorg@theglossary\theglossary
+  \let\glsorg@endtheglossary\endtheglossary
+  \let\glsorg@PrintChanges\PrintChanges
+  \renewcommand{\PrintChanges}{%
+    \begingroup
+      \let\theglossary\glsorg@theglossary
+      \let\endtheglossary\glsorg@endtheglossary
+      \glsorg@PrintChanges
+    \endgroup
+  }
+\fi
+\newif\if@gls@debug
+\define@choicekey{glossaries.sty}{debug}[\gls@debug@val\gls@debug@nr]%
+ {true,false,showtargets,showaccsupp}[true]{%
+  \ifcase\gls@debug@nr\relax
+    % debug=true
+    \@gls@debugtrue
+    \renewcommand*{\GlossariesWarning}[1]{%
+      \PackageWarning{glossaries}{##1}%
+    }%
+    \renewcommand*{\GlossariesWarningNoLine}[1]{%
+      \PackageWarningNoLine{glossaries}{##1}%
+    }%
+    \let\@glsshowtarget\@gobble
+    \PackageInfo{glossaries}{debug mode ON (nowarn option disabled)}%
+  \or
+    % debug=false
+    \@gls@debugfalse
+    \let\@glsshowtarget\@gobble
+    \let\@glsshowaccsupp\@gobblethree
+    \PackageInfo{glossaries}{debug mode OFF}%
+  \or
+    % debug=showtargets
+    \@gls@debugtrue
+    \renewcommand*{\GlossariesWarning}[1]{%
+      \PackageWarning{glossaries}{##1}%
+    }%
+    \renewcommand*{\GlossariesWarningNoLine}[1]{%
+      \PackageWarningNoLine{glossaries}{##1}%
+    }%
+    \PackageInfo{glossaries}{debug mode ON (nowarn option disabled)}%
+    \renewcommand{\@glsshowtarget}{\@@glsshowtarget}%
+  \or
+    % debug=showaccsupp
+    \@gls@debugtrue
+    \renewcommand*{\GlossariesWarning}[1]{%
+      \PackageWarning{glossaries}{##1}%
+    }%
+    \renewcommand*{\GlossariesWarningNoLine}[1]{%
+      \PackageWarningNoLine{glossaries}{##1}%
+    }%
+    \PackageInfo{glossaries}{debug mode ON (nowarn option disabled)}%
+    \renewcommand{\@glsshowaccsupp}{\glsshowaccsupp}%
+  \fi
+}
+\newcommand*{\glsshowtarget}[1]{%
+ \ifmmode
+   \nfss@text{\glsshowtargetfont [#1]}%
+ \else
+   \ifinner
+     {\glsshowtargetfont [#1]}%
+   \else
+     \glsshowtargetouter{#1}%
+   \fi
+ \fi
+}
+\newcommand*{\glsshowtargetouter}[1]{%
+ \glsshowtargetsymbol\marginpar{\glsshowtargetsymbol\glsshowtargetfont #1}}
+\newcommand*{\glsshowtargetsymbol}{{\tiny$\triangleright$}}
+\newcommand*{\glsshowtargetfont}{\ttfamily\footnotesize}
+\newcommand*{\@glsshowtarget}[1]{}
+\newrobustcmd*{\@@glsshowtarget}[1]{%
+  \begingroup
+  \protected@edef\@gls@tmp{#1}%
+  \@onelevel@sanitize\@gls@tmp
+  \expandafter\glsshowtarget\expandafter{\@gls@tmp}%
+  \endgroup
+}
+\newcommand*{\@glsshowaccsupp}[3]{}
+\newrobustcmd*{\glsshowaccsupp}[3]{%
+  \ifstrempty{#1}%
+  {\@@glsshowtarget{/#2 (#3)}}%
+  {\@@glsshowtarget{/#2 (#3) [#1]}}%
+}
+\newcommand*{\@gls@see@noindex}{%
+  \PackageError{glossaries}%
+  {`\gls@xr@key' key may only be used after \string\makeglossaries\space
+   or \string\makenoidxglossaries\space (or move
+   \string\newglossaryentry\space
+   definitions into the preamble)}%
+  {You must use \string\makeglossaries\space
+   or \string\makenoidxglossaries\space before defining
+   any entries that have a `\gls@xr@key' key. It may
+   be that the `see' key has been written to the .glsdefs
+   file from the previous run, in which case you need to
+   move your definitions
+   to the preamble if you don't want to use
+   \string\makeglossaries\space
+   or \string\makenoidxglossaries}%
+}
+\define@choicekey{glossaries.sty}{seenoindex}%
+ [\gls@seenoindex@val\gls@seenoindex@nr]{error,warn,ignore}{%
+  \ifcase\gls@seenoindex@nr
+    \renewcommand*{\@gls@see@noindex}{%
+      \PackageError{glossaries}%
+      {`\gls@xr@key' key may only be used after \string\makeglossaries\space
+       or \string\makenoidxglossaries}%
+      {You must use \string\makeglossaries\space
+       or \string\makenoidxglossaries\space before defining
+       any entries that have a `\gls@xr@key' key}%
+    }%
+  \or
+    \renewcommand*{\@gls@see@noindex}{%
+      \GlossariesWarning{`\gls@xr@key' key ignored}%
+    }%
+  \or
+    \renewcommand*{\@gls@see@noindex}{}%
+  \fi
+}
+\define@boolkey{glossaries.sty}[gls]{toc}[true]{}
+\define@boolkey{glossaries.sty}[gls]{numberline}[true]{}
+\ifcsundef{chapter}%
+  {\newcommand*{\@@glossarysec}{section}}%
+  {\newcommand*{\@@glossarysec}{chapter}}
+\define@choicekey{glossaries.sty}{section}{part,chapter,section,%
+subsection,subsubsection,paragraph,subparagraph}[section]{%
+  \renewcommand*{\@@glossarysec}{#1}}
+\newcommand*{\@@glossarysecstar}{*}
+\newcommand*{\@@glossaryseclabel}{}
+\newcommand*{\glsautoprefix}{}
+\define@choicekey{glossaries.sty}{numberedsection}%
+ [\gls@numberedsection@val\gls@numberedsection@nr]{%
+false,nolabel,autolabel,nameref}[nolabel]{%
+  \ifcase\gls@numberedsection@nr\relax
+    \renewcommand*{\@@glossarysecstar}{*}%
+    \renewcommand*{\@@glossaryseclabel}{}%
+  \or
+    \renewcommand*{\@@glossarysecstar}{}%
+    \renewcommand*{\@@glossaryseclabel}{}%
+  \or
+    \renewcommand*{\@@glossarysecstar}{}%
+    \renewcommand*{\@@glossaryseclabel}{%
+      \label{\glsautoprefix\@glo@type}}%
+  \or
+    \renewcommand*{\@@glossarysecstar}{*}%
+    \renewcommand*{\@@glossaryseclabel}{%
+      \protected@edef\@currentlabelname{\glossarytoctitle}%
+      \label{\glsautoprefix\@glo@type}}%
+  \fi
+}
+\@ifpackageloaded{classicthesis}
+{\newcommand*{\@glossary@default@style}{index}}
+{\newcommand*{\@glossary@default@style}{list}}
+\define@key{glossaries.sty}{style}{%
+  \def\@glossary@default@style{#1}%
+}
+\newcommand*{\@gls@declareoption}[2]{%
+  \DeclareOptionX{#1}{#2}%
+  \DeclareOption{#1}{#2}%
+}
+\newcommand*{\glossaryentrynumbers}[1]{#1\gls@save@numberlist{#1}}
+\@gls@declareoption{nonumberlist}{%
+  \renewcommand*{\glossaryentrynumbers}[1]{\gls@save@numberlist{#1}}%
+}
+\define@boolkey{glossaries.sty}[gls]{savenumberlist}[true]{}
+\glssavenumberlistfalse
+\newcommand*\@glo@seeautonumberlist{}
+\@gls@declareoption{seeautonumberlist}{%
+   \renewcommand*{\@glo@seeautonumberlist}{%
+      \def\@glo@prefix{\glsnextpages}%
+   }%
+}
+\define@boolkey{glossaries.sty}[gls]{esclocations}[true]{}
+\glsesclocationstrue
+\newcommand*{\@gls@loadlong}{\RequirePackage{glossary-long}}
+\@gls@declareoption{nolong}{\renewcommand*{\@gls@loadlong}{}}
+\IfFileExists{supertabular.sty}{%
+  \newcommand*{\@gls@loadsuper}{\RequirePackage{glossary-super}}}{%
+  \newcommand*{\@gls@loadsuper}{}}
+\@gls@declareoption{nosuper}{\renewcommand*{\@gls@loadsuper}{}}
+\newcommand*{\@gls@loadlist}{\RequirePackage{glossary-list}}
+\@gls@declareoption{nolist}{%
+ \renewcommand*{\@gls@loadlist}{%
+  \ifdefstring{\@glossary@default@style}{list}%
+  {\let\@glossary@default@style\relax}%
+  {}%
+ }%
+}
+\newcommand*{\@gls@loadtree}{\RequirePackage{glossary-tree}}
+\@gls@declareoption{notree}{\renewcommand*{\@gls@loadtree}{}}
+\@gls@declareoption{nostyles}{%
+  \renewcommand*{\@gls@loadlong}{}%
+  \renewcommand*{\@gls@loadsuper}{}%
+  \renewcommand*{\@gls@loadlist}{}%
+  \renewcommand*{\@gls@loadtree}{}%
+  \let\@glossary@default@style\relax
+}
+\newcommand*{\glspostdescription}{%
+  \ifglsnopostdot\else.\spacefactor\sfcode`\. \fi
+}
+\define@boolkey{glossaries.sty}[gls]{nopostdot}[true]{}
+\glsnopostdotfalse
+\define@boolkey{glossaries.sty}[gls]{nogroupskip}[true]{}
+\glsnogroupskipfalse
+\define@boolkey{glossaries.sty}[gls]{ucmark}[true]{}
+\@ifclassloaded{memoir}
+{%
+  \glsucmarktrue
+}%
+{%
+  \glsucmarkfalse
+}
+\newcommand*{\@gls@define@glossaryentrycounter}{%
+  \ifglsentrycounter
+    \ifundef\c@glossaryentry
+    {%
+      \ifx\@gls@counterwithin\@empty
+        \newcounter{glossaryentry}%
+      \else
+        \newcounter{glossaryentry}[\@gls@counterwithin]%
+      \fi
+      \def\theHglossaryentry{\currentglossary.\theglossaryentry}%
+    }%
+    {}%
+  \fi
+}
+\define@boolkey{glossaries.sty}[gls]{entrycounter}[true]{}
+\glsentrycounterfalse
+\define@key{glossaries.sty}{counterwithin}{%
+  \renewcommand*{\@gls@counterwithin}{#1}%
+  \glsentrycountertrue
+  \@gls@define@glossaryentrycounter
+}
+\newcommand*{\@gls@counterwithin}{}
+\newcommand{\@gls@define@glossarysubentrycounter}{%
+  \ifundef\c@glossarysubentry
+  {%
+    \ifglssubentrycounter
+      \ifglsentrycounter
+        \newcounter{glossarysubentry}[glossaryentry]%
+      \else
+        \newcounter{glossarysubentry}%
+      \fi
+      \def\theHglossarysubentry{\currentglossary.\currentglssubentry.\theglossarysubentry}%
+    \fi
+  }%
+  {}%
+}
+\define@boolkey{glossaries.sty}[gls]{subentrycounter}[true]{}
+\glssubentrycounterfalse
+\newcommand*{\@glo@default@sorttype}{standard}
+\define@choicekey{glossaries.sty}{sort}{standard,def,use,none}{%
+  \renewcommand*{\@glo@default@sorttype}{#1}%
+  \csname @gls@setupsort@#1\endcsname
+}
+\newcommand*{\glsprestandardsort}[3]{%
+  \glsdosanitizesort
+}
+\newcommand*{\@glo@check@sortallowed}[1]{}
+\newcommand*{\@gls@setupsort@standard}{%
+  \def\do@glo@storeentry{\@glo@storeentry}%
+  \def\@gls@defsortcount##1{}%
+  \def\@gls@defsort##1##2{%
+    \ifx\@glo@sort\@glsdefaultsort
+      \let\@glo@sort\@glo@name
+    \fi
+    \let\glsdosanitizesort\@gls@sanitizesort
+    \glsprestandardsort{\@glo@sort}{##1}{##2}%
+    \expandafter\protected@xdef\csname glo@##2@sort\endcsname{\@glo@sort}%
+  }%
+  \def\@gls@setsort##1{}%
+  \let\@glo@check@sortallowed\@gobble
+}
+\@gls@setupsort@standard
+\newcommand*\glssortnumberfmt[1]{%
+  \ifnum#1<100000 0\fi
+  \ifnum#1<10000 0\fi
+  \ifnum#1<1000 0\fi
+  \ifnum#1<100 0\fi
+  \ifnum#1<10 0\fi
+  \number#1%
+}
+\newcommand*{\@gls@setupsort@def}{%
+  \def\do@glo@storeentry{\@glo@storeentry}%
+  \def\@gls@defsortcount##1{%
+    \expandafter\global
+    \expandafter\newcount\csname glossary@##1@sortcount\endcsname
+  }%
+  \def\@gls@defsort##1##2{%
+    \ifcsundef{glossary@##1@sortcount}%
+    {\@gls@defsortcount{##1}}%
+    {}%
+    \expandafter\global\expandafter
+    \advance\csname glossary@##1@sortcount\endcsname by 1\relax
+    \expandafter\protected@xdef\csname glo@##2@sort\endcsname{%
+       \expandafter\glssortnumberfmt
+         {\csname glossary@##1@sortcount\endcsname}}%
+  }%
+  \def\@gls@setsort##1{}%
+  \let\@glo@check@sortallowed\@gobble
+}
+\newcommand*{\@gls@setupsort@use}{%
+  \let\do@glo@storeentry\@gobble
+  \def\@gls@defsortcount##1{%
+    \expandafter\global
+    \expandafter\newcount\csname glossary@##1@sortcount\endcsname
+  }%
+  \def\@gls@defsort##1##2{%
+    \expandafter\gdef\csname glo@##2@sort\endcsname{}%
+  }%
+  \def\@gls@setsort##1{%
+    \edef\@glo@parent{\csname glo@##1@parent\endcsname}%
+    \ifx\@glo@parent\@empty
+    \else
+      \expandafter\@gls@setsort\expandafter{\@glo@parent}%
+    \fi
+    \edef\@glo@type{\csname glo@##1@type\endcsname}%
+    \edef\@gls@tmp{\csname glo@##1@sort\endcsname}%
+    \ifx\@gls@tmp\@empty
+      \expandafter\global\expandafter
+      \advance\csname glossary@\@glo@type @sortcount\endcsname by 1\relax
+      \expandafter\protected@xdef\csname glo@##1@sort\endcsname{%
+         \expandafter\glssortnumberfmt
+           {\csname glossary@\@glo@type @sortcount\endcsname}}%
+      \@glo@storeentry{##1}%
+    \fi
+  }%
+  \let\@glo@check@sortallowed\@gobble
+}
+\newcommand*{\@gls@setupsort@none}{%
+  \def\do@glo@storeentry##1{}%
+  \def\@gls@defsortcount##1{}%
+  \def\@gls@defsort##1##2{%
+    \expandafter\global\expandafter\let\csname glo@##2@sort\endcsname\@glo@sort
+  }%
+  \def\@gls@setsort##1{}%
+  \renewcommand\@glo@check@sortallowed[1]{\PackageError{glossaries}
+   {Option sort=none not allowed with \string##1}%
+   {(Use sort=def instead)}}%
+}
+\newcommand*{\glsdefmain}{%
+  \if@gls@docloaded
+    \newglossary[glg2]{main}{gls2}{glo2}{\glossaryname}%
+  \else
+    \newglossary{main}{gls}{glo}{\glossaryname}%
+  \fi
+  \newcommand*{\gls@tr@set@main@toctitle}{%
+    \translatelet{\glossarytoctitle}{Glossary}%
+  }%
+}
+\newcommand*{\glsdefaulttype}{main}
+\newcommand*{\acronymtype}{\glsdefaulttype}
+\@gls@declareoption{nomain}{%
+   \let\glsdefaulttype\relax
+   \renewcommand*{\glsdefmain}{}%
+}
+\define@boolkey{glossaries.sty}[gls]{acronym}[true]{%
+  \ifglsacronym
+    \renewcommand{\@gls@do@acronymsdef}{%
+      \DeclareAcronymList{acronym}%
+      \newglossary[alg]{acronym}{acr}{acn}{\acronymname}%
+      \renewcommand*{\acronymtype}{acronym}%
+      \newcommand*{\gls@tr@set@acronym@toctitle}{%
+        \translatelet{\glossarytoctitle}{Acronyms}%
+      }%
+    }%
+  \else
+    \let\@gls@do@acronymsdef\relax
+  \fi
+}
+\AtBeginDocument{%
+  \ifglsacronym
+    \ifbool{glscompatible-3.07}%
+    {}%
+    {%
+      \providecommand*{\printacronyms}[1][]{%
+        \printglossary[type=\acronymtype,#1]}%
+    }%
+  \fi
+}
+\newcommand*{\@gls@do@acronymsdef}{}
+\@gls@declareoption{acronyms}{%
+  \glsacronymtrue
+  \def\@gls@do@acronymsdef{%
+     \DeclareAcronymList{acronym}%
+     \newglossary[alg]{acronym}{acr}{acn}{\acronymname}%
+     \renewcommand*{\acronymtype}{acronym}%
+      \newcommand*{\gls@tr@set@acronym@toctitle}{%
+        \translatelet{\glossarytoctitle}{Acronyms}%
+      }%
+   }%
+}
+\newcommand*{\@glsacronymlists}{}
+\newcommand*{\@addtoacronymlists}[1]{%
+  \ifx\@glsacronymlists\@empty
+    \protected@xdef\@glsacronymlists{#1}%
+  \else
+    \protected@xdef\@glsacronymlists{\@glsacronymlists,#1}%
+  \fi
+}
+\newcommand*{\DeclareAcronymList}[1]{%
+  \glsIfListOfAcronyms{#1}{}{\@addtoacronymlists{#1}}%
+}
+\newcommand{\glsIfListOfAcronyms}[1]{%
+  \edef\@do@gls@islistofacronyms{%
+    \noexpand\@gls@islistofacronyms{#1}{\@glsacronymlists}}%
+  \@do@gls@islistofacronyms
+}
+\newcommand{\@gls@islistofacronyms}[4]{%
+  \def\gls@islistofacronyms##1,#1,##2\end@gls@islistofacronyms{%
+     \def\@gls@before{##1}\def\@gls@after{##2}}%
+  \gls@islistofacronyms,#2,#1,\@nil\end@gls@islistofacronyms
+  \ifx\@gls@after\@nnil
+    #4%
+  \else
+    #3%
+  \fi
+}
+\newif\if@glsisacronymlist
+\newcommand*{\gls@checkisacronymlist}[1]{%
+   \glsIfListOfAcronyms{#1}%
+     {\@glsisacronymlisttrue}{\@glsisacronymlistfalse}%
+}
+\newcommand*{\SetAcronymLists}[1]{%
+  \renewcommand*{\@glsacronymlists}{#1}%
+}
+\define@key{glossaries.sty}{acronymlists}{%
+  \DeclareAcronymList{#1}%
+}
+\newcommand{\glscounter}{page}
+\define@key{glossaries.sty}{counter}{%
+  \renewcommand*{\glscounter}{#1}%
+}
+\newcommand*{\@gls@nohyperlist}{}
+\newcommand*{\GlsDeclareNoHyperList}[1]{%
+  \ifdefempty\@gls@nohyperlist
+  {%
+     \renewcommand*{\@gls@nohyperlist}{#1}%
+  }%
+  {%
+     \appto\@gls@nohyperlist{,#1}%
+  }%
+}
+\define@key{glossaries.sty}{nohypertypes}{%
+  \GlsDeclareNoHyperList{#1}%
+}
+\newcommand*{\GlossariesWarning}[1]{%
+  \PackageWarning{glossaries}{#1}%
+}
+\newcommand*{\GlossariesWarningNoLine}[1]{%
+  \PackageWarningNoLine{glossaries}{#1}%
+}
+\newcommand{\glosortentrieswarning}{%
+ \typeout{Using TeX to sort glossary entries---this may
+ take a while}%
+}
+\@gls@declareoption{nowarn}{%
+  \if@gls@debug
+    \GlossariesWarning{Warnings can't be suppressed in debug mode}%
+  \else
+    \renewcommand*{\GlossariesWarning}[1]{}%
+    \renewcommand*{\GlossariesWarningNoLine}[1]{}%
+    \renewcommand*{\glosortentrieswarning}{}%
+    \renewcommand*{\@gls@missinglang@warn}[2]{}%
+  \fi
+}
+\newcommand*{\@gls@missinglang@warn}[2]{%
+  \PackageWarningNoLine{glossaries}%
+  {No language module detected for `#1'.\MessageBreak
+  Language modules need to be installed separately.\MessageBreak
+  Please check on CTAN for a bundle called\MessageBreak
+  `glossaries-#2' or similar}%
+}
+\@gls@declareoption{nolangwarn}{%
+  \renewcommand*{\@gls@missinglang@warn}[2]{}%
+}
+\newcommand*{\@gls@warnonglossdefined}{%
+  \GlossariesWarning{Overriding \string\printglossary}%
+}
+\newcommand*{\@gls@warnontheglossdefined}{%
+  \GlossariesWarning{Overriding `theglossary' environment}%
+}
+\@gls@declareoption{noredefwarn}{%
+  \renewcommand*{\@gls@warnonglossdefined}{}%
+  \renewcommand*{\@gls@warnontheglossdefined}{}%
+}
+\newcommand*{\@gls@sanitizedesc}{%
+}
+\newcommand*{\glssetexpandfield}[1]{%
+  \csdef{gls@assign@#1@field}##1##2{%
+    \@@gls@expand@field{##1}{#1}{##2}%
+  }%
+}
+\newcommand*{\glssetnoexpandfield}[1]{%
+  \csdef{gls@assign@#1@field}##1##2{%
+    \@@gls@noexpand@field{##1}{#1}{##2}%
+  }%
+}
+\glssetexpandfield{type}
+\glssetnoexpandfield{desc}
+\glssetnoexpandfield{descplural}
+\newcommand*{\@gls@sanitizename}{}
+\glssetnoexpandfield{name}
+\newcommand*{\@gls@sanitizesymbol}{}
+\glssetnoexpandfield{symbol}
+\glssetnoexpandfield{symbolplural}
+\newcommand*{\@gls@sanitizesort}{%
+  \ifglssanitizesort
+    \@@gls@sanitizesort
+  \else
+    \@@gls@nosanitizesort
+  \fi
+}
+\newcommand*\@@gls@sanitizesort{%
+  \@onelevel@sanitize\@glo@sort
+}
+\newcommand*{\@@gls@nosanitizesort}{}
+\newcommand*\@gls@noidx@sanitizesort{%
+  \ifdefvoid\@glo@sort
+  {}%
+  {%
+    \expandafter\@@gls@noidx@sanitizesort\@glo@sort\gls@end@sanitizesort
+  }%
+}
+\def\@@gls@noidx@sanitizesort#1#2\gls@end@sanitizesort{%
+  \def\@glo@sort{#1#2}%
+  \@onelevel@sanitize\@glo@sort
+}
+\newcommand*{\@@gls@noidx@nosanitizesort}{%
+  \ifdefvoid\@glo@sort
+  {}%
+  {%
+    \expandafter\@@gls@noidx@no@sanitizesort\@glo@sort\gls@end@sanitizesort
+  }%
+}
+\def\@@gls@noidx@no@sanitizesort#1#2\gls@end@sanitizesort{%
+  \bgroup
+    \glsnoidxstripaccents
+    \protected@xdef\@@glo@sort{#1#2}%
+  \egroup
+  \let\@glo@sort\@@glo@sort
+}
+\newcommand*\glsnoidxstripaccents{%
+  \let\IeC\@firstofone
+  \let\add@accent@\@secondoftwo
+  \let\@text@composite@x\@secondoftwo
+  \let\@tabacckludge\@secondoftwo
+  \expandafter\def\csname \encodingdefault-cmd\endcsname##1##2##3{##3}%
+  \expandafter\def\csname OT1-cmd\endcsname##1##2##3{##3}%
+  \expandafter\def\csname T1-cmd\endcsname##1##2##3{##3}%
+  \expandafter\def\csname PD1-cmd\endcsname##1##2##3{##3}%
+  \let\'\@firstofone
+  \let\`\@firstofone
+  \let\^\@firstofone
+  \let\"\@firstofone
+  \let\u\@firstofone
+  \let\t\@firstofone
+  \let\d\@firstofone
+  \let\r\@firstofone
+  \let\=\@firstofone
+  \let\.\@firstofone
+  \let\~\@firstofone
+  \let\v\@firstofone
+  \let\H\@firstofone
+  \let\c\@firstofone
+  \let\b\@firstofone
+  \let\a\@secondoftwo
+  \def\AE{AE}%
+  \def\ae{ae}%
+  \def\OE{OE}%
+  \def\oe{oe}%
+  \def\AA{AA}%
+  \def\aa{aa}%
+  \def\L{L}%
+  \def\l{l}%
+  \def\O{O}%
+  \def\o{o}%
+  \def\SS{SS}%
+  \def\ss{ss}%
+  \def\th{th}%
+  \def\TH{TH}%
+  \def\dh{dh}%
+  \def\DH{DH}%
+}
+\@ifl@t@r\fmtversion{2019/10/01}
+{%
+ \appto\glsnoidxstripaccents{\let\UTFviii@two@octets\UTFviii@two@octets@combine}%
+}
+{}
+\define@boolkey[gls]{sanitize}{description}[true]{%
+  \GlossariesWarning{sanitize={description} package option deprecated}%
+  \ifgls@sanitize@description
+    \glssetnoexpandfield{desc}%
+    \glssetnoexpandfield{descplural}%
+  \else
+    \glssetexpandfield{desc}%
+    \glssetexpandfield{descplural}%
+  \fi
+}
+\define@boolkey[gls]{sanitize}{name}[true]{%
+  \GlossariesWarning{sanitize={name} package option deprecated}%
+  \ifgls@sanitize@name
+    \glssetnoexpandfield{name}%
+  \else
+    \glssetexpandfield{name}%
+  \fi
+}
+\define@boolkey[gls]{sanitize}{symbol}[true]{%
+  \GlossariesWarning{sanitize={symbol} package option deprecated}%
+  \ifgls@sanitize@symbol
+    \glssetnoexpandfield{symbol}%
+    \glssetnoexpandfield{symbolplural}%
+  \else
+    \glssetexpandfield{symbol}%
+    \glssetexpandfield{symbolplural}%
+  \fi
+}
+\define@boolkey{glossaries.sty}[gls]{sanitizesort}[true]{%
+  \ifglssanitizesort
+    \glssetnoexpandfield{sortvalue}%
+    \renewcommand*{\@gls@noidx@setsanitizesort}{%
+      \glssanitizesorttrue
+      \glssetnoexpandfield{sortvalue}%
+    }%
+  \else
+    \glssetexpandfield{sortvalue}%
+    \renewcommand*{\@gls@noidx@setsanitizesort}{%
+      \glssanitizesortfalse
+      \glssetexpandfield{sortvalue}%
+    }%
+  \fi
+}
+\glssanitizesorttrue
+\glssetnoexpandfield{sortvalue}%
+\newcommand*{\@gls@noidx@setsanitizesort}{%
+  \glssanitizesortfalse
+  \glssetexpandfield{sortvalue}%
+}
+\define@choicekey[gls]{sanitize}{sort}{true,false}[true]{%
+  \setbool{glssanitizesort}{#1}%
+  \ifglssanitizesort
+    \glssetnoexpandfield{sortvalue}%
+  \else
+    \glssetexpandfield{sortvalue}%
+  \fi
+  \GlossariesWarning{sanitize={sort} package option
+    deprecated. Use sanitizesort instead}%
+}
+\define@key{glossaries.sty}{sanitize}[description=true,symbol=true,name=true]{%
+  \ifthenelse{\equal{#1}{none}}%
+  {%
+    \GlossariesWarning{sanitize package option deprecated}%
+    \glssetexpandfield{name}%
+    \glssetexpandfield{symbol}%
+    \glssetexpandfield{symbolplural}%
+    \glssetexpandfield{desc}%
+    \glssetexpandfield{descplural}%
+  }%
+  {%
+    \setkeys[gls]{sanitize}{#1}%
+  }%
+}
+\newif\ifglstranslate
+\newcommand*\@gls@usetranslator{%
+  \@ifpackageloaded{polyglossia}%
+  {%
+     \let\glsifusetranslator\@secondoftwo
+  }%
+  {%
+    \@ifpackageloaded{babel}%
+    {%
+        \IfFileExists{translator.sty}%
+        {%
+           \RequirePackage{translator}%
+           \let\glsifusetranslator\@firstoftwo
+        }%
+        {}%
+    }%
+    {}%
+  }%
+}
+\newcommand{\glsifusedtranslatordict}[3]{%
+  \glsifusetranslator
+  {\ifcsdef{ver@glossaries-dictionary-#1.dict}{#2}{#3}}%
+  {#3}%
+}
+\@gls@declareoption{notranslate}{%
+  \glstranslatefalse
+  \let\@gls@usetranslator\relax
+  \let\glsifusetranslator\@secondoftwo
+}
+\define@choicekey{glossaries.sty}{translate}%
+  [\gls@translate@val\gls@translate@nr]%
+  {true,false,babel}[true]%
+  {%
+    \ifcase\gls@translate@nr\relax
+      \glstranslatetrue
+      \renewcommand*\@gls@usetranslator{%
+        \@ifpackageloaded{polyglossia}%
+        {%
+           \let\glsifusetranslator\@secondoftwo
+        }%
+        {%
+          \@ifpackageloaded{babel}%
+          {%
+            \IfFileExists{translator.sty}%
+            {%
+               \RequirePackage{translator}%
+               \let\glsifusetranslator\@firstoftwo
+            }%
+            {}%
+          }%
+          {}%
+        }%
+      }%
+    \or
+      \glstranslatefalse
+      \let\@gls@usetranslator\relax
+      \let\glsifusetranslator\@secondoftwo
+    \or
+      \glstranslatetrue
+      \let\@gls@usetranslator\relax
+      \let\glsifusetranslator\@secondoftwo
+    \fi
+  }
+\glstranslatefalse
+\let\glsifusetranslator\@secondoftwo
+\@ifpackageloaded{translator}%
+{%
+  \glstranslatetrue
+  \let\glsifusetranslator\@firstoftwo
+}%
+{%
+  \@for\gls@thissty:=tracklang,babel,ngerman,polyglossia\do
+  {
+    \@ifpackageloaded{\gls@thissty}%
+    {%
+      \glstranslatetrue
+      \@endfortrue
+    }%
+    {}%
+  }
+}
+\define@boolkey{glossaries.sty}[gls]{indexonlyfirst}[true]{}
+\glsindexonlyfirstfalse
+\define@boolkey{glossaries.sty}[gls]{hyperfirst}[true]{}
+\glshyperfirsttrue
+\newcommand*{\@gls@setacrstyle}{}
+\define@boolkey{glossaries.sty}[glsacr]{footnote}[true]{%
+  \ifbool{glsacrdescription}%
+  {}%
+  {%
+    \renewcommand*{\@gls@sanitizedesc}{}%
+  }%
+  \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}%
+}
+\define@boolkey{glossaries.sty}[glsacr]{description}[true]{%
+  \renewcommand*{\@gls@sanitizesymbol}{}%
+  \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}%
+}
+\define@boolkey{glossaries.sty}[glsacr]{smallcaps}[true]{%
+  \renewcommand*{\@gls@sanitizesymbol}{}%
+  \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}%
+}
+\define@boolkey{glossaries.sty}[glsacr]{smaller}[true]{%
+  \renewcommand*{\@gls@sanitizesymbol}{}%
+  \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}%
+}
+\define@boolkey{glossaries.sty}[glsacr]{dua}[true]{%
+  \renewcommand*{\@gls@sanitizesymbol}{}%
+  \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}%
+}
+\define@boolkey{glossaries.sty}[glsacr]{shortcuts}[true]{}
+\newcommand*{\glsorder}{word}
+\newcommand*{\@glsorder}[1]{}
+\define@choicekey{glossaries.sty}{order}{word,letter}{%
+  \def\glsorder{#1}}
+\newif\ifglsxindy
+\glsxindyfalse
+\@gls@declareoption{makeindex}{\glsxindyfalse}
+\define@boolkey[gls]{xindy}{glsnumbers}[true]{}
+\gls@xindy@glsnumberstrue
+\def\@xdy@main@language{\languagename}%
+\define@key[gls]{xindy}{language}{\def\@xdy@main@language{#1}}
+\ifcsundef{inputencodingname}{%
+  \def\gls@codepage{}}{%
+  \def\gls@codepage{\inputencodingname}
+}
+\define@key[gls]{xindy}{codepage}{\def\gls@codepage{#1}}
+\define@key{glossaries.sty}{xindy}[]{%
+  \glsxindytrue
+  \setkeys[gls]{xindy}{#1}%
+}
+\@gls@declareoption{xindygloss}{%
+  \glsxindytrue
+}
+\@gls@declareoption{xindynoglsnumbers}{%
+  \glsxindytrue
+  \gls@xindy@glsnumbersfalse
+}
+\providecommand{\@domakeglossaries}[1]{#1}
+\@gls@declareoption{disablemakegloss}{%
+  \ifdefequal\makeglossaries\@no@makeglossaries
+  {%
+    \GlossariesWarning{Option `disablemakegloss' has no effect
+    (\string\makenoidxglossaries\space has already been used)}%
+  }%
+  {%
+    \ifdefequal\@makeglossary\@gobble
+    {%
+      \GlossariesWarning{Option `disablemakegloss' has no effect
+      (\string\makeglossaries\space has already been used)}%
+    }%
+    {%
+      \renewcommand{\@domakeglossaries}[1]{%
+        \PackageInfo{glossaries}{\string\makeglossaries\space and
+          \string\makenoidxglossaries\space have been disabled}%
+      }%
+    }%
+  }%
+}
+\@gls@declareoption{restoremakegloss}{%
+  \ifdefequal\makeglossaries\@no@makeglossaries
+  {%
+    \GlossariesWarning{Option `restoremakegloss' has no effect
+    (\string\makenoidxglossaries\space has already been used)}%
+  }%
+  {%
+    \ifdefequal\@makeglossary\@gobble
+    {%
+      \GlossariesWarning{Option `restoremakegloss' has no effect
+      (\string\makeglossaries\space has already been used)}%
+    }%
+    {%
+      \PackageInfo{glossaries}{\string\makeglossaries\space and
+        \string\makenoidxglossaries\space have been restored}%
+      \let\@domakeglossaries\@firstofone
+    }%
+  }%
+}
+\newcommand*{\@do@write@glslabels}{%
+ \AtEndDocument{\@@do@write@glslabels}%
+ \let\@do@write@glslabels\relax
+}
+\newcommand*{\@@do@write@glslabels}{%
+  \newwrite\@gls@labelsfile
+  \immediate\openout\@gls@labelsfile=\jobname.glslabels
+  \forallglsentries[\@glo@types,\@ignored@glossaries]{\@glsentry}%
+  {\ifdefempty{\@glsentry}{}{\immediate\write\@gls@labelsfile{\@glsentry}}}%
+  \immediate\closeout\@gls@labelsfile
+}
+\@gls@declareoption{writeglslabels}{\@do@write@glslabels}
+\newif\ifglsautomake
+\newcommand{\gls@automake@nr}{1}
+\define@choicekey{glossaries.sty}{automake}%
+  [\gls@automake@val\gls@automake@nr]{true,false,immediate}[true]{%
+  \ifnum\gls@automake@nr=1\relax
+   \glsautomakefalse
+  \else
+   \glsautomaketrue
+  \fi
+  \ifglsautomake
+    \renewcommand*{\@gls@doautomake}{%
+      \PackageError{glossaries}{You must use
+      \string\makeglossaries\space with automake=true}
+      {%
+         Either remove the automake=true setting or
+         add \string\makeglossaries\space to your document preamble.%
+      }%
+    }%
+  \else
+    \renewcommand*{\@gls@doautomake}{}%
+  \fi
+}
+\glsautomakefalse
+\newcommand*{\@gls@doautomake}{}
+\AtEndDocument{\@gls@doautomake}
+\define@boolkey{glossaries.sty}[gls]{savewrites}[true]{%
+  \ifglssavewrites
+    \renewcommand*{\glswritefiles}{\@glswritefiles}%
+  \else
+    \let\glswritefiles\@empty
+  \fi
+}
+\glssavewritesfalse
+\let\glswritefiles\@empty
+\define@boolkey{glossaries.sty}[gls]{compatible-3.07}[true]{}
+\boolfalse{glscompatible-3.07}
+\define@boolkey{glossaries.sty}[gls]{compatible-2.07}[true]{%
+  \ifbool{glscompatible-2.07}%
+  {%
+    \booltrue{glscompatible-3.07}%
+  }%
+  {}%
+}
+\boolfalse{glscompatible-2.07}
+\let\gls@original@makeglossary\makeglossary
+\let\gls@original@glossary\glossary
+\def\makeglossary{%
+ \GlossariesWarning{Use of \string\makeglossary\space with
+ glossaries.sty is \MessageBreak deprecated. Use \string\makeglossaries\space
+ instead. If you \MessageBreak need the original definition of
+ \string\makeglossary\space use \MessageBreak the package options
+ kernelglossredefs=false (to \MessageBreak restore the former definition of
+ \string\makeglossary) and \MessageBreak nomain (if the file extensions cause a
+ conflict)}%
+ \makeglossaries
+}
+\newcommand*{\@gls@override@glossary}[1][main]{%
+ \GlossariesWarning{Use of \string\glossary\space with
+ glossaries.sty is deprecated. \MessageBreak Indexing should be performed
+ with the user level \MessageBreak commands, such as \string\gls\space or
+ \string\glsadd. If you need the \MessageBreak original definition of
+ \string\glossary\space use the package \MessageBreak options
+  kernelglossredefs=false (to restore the \MessageBreak former definition of
+ \string\glossary) and nomain (if the \MessageBreak file extensions cause a
+ conflict)}%
+ \gls@glossary{#1}%
+}
+\if@gls@docloaded
+\else
+  \def\glossary{\@gls@override@glossary}
+\fi
+\define@choicekey{glossaries.sty}{kernelglossredefs}%
+ [\gls@debug@val\gls@debug@nr]{true,false,nowarn}[true]%
+{%
+  \ifcase\gls@debug@nr\relax
+   \def\glossary{\@gls@override@glossary}%
+   \def\makeglossary{%
+    \GlossariesWarning{Use of \string\makeglossary\space with
+    glossaries.sty is deprecated. Use \string\makeglossaries\space
+    instead. If you need the original definition of
+    \string\makeglossary\space use the package options
+    kernelglossredefs=false (to prevent redefinition of
+    \string\makeglossary) and nomain (if the file extensions cause a
+    conflict)}%
+    \makeglossaries
+   }%
+  \or
+    \let\glossary\gls@original@glossary
+    \let\makeglossary\gls@original@makeglossary
+  \or
+    \def\makeglossary{\makeglossaries}%
+    \renewcommand*{\@gls@override@glossary}[1][main]{%
+       \gls@glossary{##1}%
+    }%
+  \fi
+}
+\@gls@declareoption{symbols}{%
+  \let\@gls@do@symbolsdef\@gls@symbolsdef
+}
+\newcommand*{\@gls@do@symbolsdef}{}
+\newcommand*{\@gls@symbolsdef}{%
+  \newglossary[slg]{symbols}{sls}{slo}{\glssymbolsgroupname}%
+  \newcommand*{\printsymbols}[1][]{\printglossary[type=symbols,##1]}%
+  \newcommand*{\gls@tr@set@symbols@toctitle}{%
+    \translatelet{\glossarytoctitle}{Symbols (glossaries)}%
+  }%
+}%
+\@gls@declareoption{numbers}{%
+  \let\@gls@do@numbersdef\@gls@numbersdef
+}
+\newcommand*{\@gls@do@numbersdef}{}
+\newcommand*{\@gls@numbersdef}{%
+  \newglossary[nlg]{numbers}{nls}{nlo}{\glsnumbersgroupname}%
+  \newcommand*{\printnumbers}[1][]{\printglossary[type=numbers,##1]}%
+  \newcommand*{\gls@tr@set@numbers@toctitle}{%
+    \translatelet{\glossarytoctitle}{Numbers (glossaries)}%
+  }%
+}%
+\@gls@declareoption{index}{%
+  \ifx\@gls@do@indexdef\@empty
+    \let\@gls@do@indexdef\@gls@indexdef
+  \fi
+}
+\@gls@declareoption{noglossaryindex}{%
+  \let\@gls@do@indexdef\relax
+}
+\newcommand*{\@gls@do@indexdef}{}
+\newcommand*{\@gls@indexdef}{%
+  \newglossary[ilg]{index}{ind}{idx}{\indexname}%
+  \newcommand*{\printindex}[1][]{\printglossary[type=index,##1]}%
+  \newcommand*{\newterm}[2][]{%
+    \newglossaryentry{##2}%
+    {type={index},name={##2},description={\nopostdesc},##1}}
+  \let\@gls@do@indexdef\relax
+}%
+\@for\CurrentOption :=\@declaredoptions\do{%
+  \ifx\CurrentOption\@empty
+  \else
+    \@expandtwoargs
+      \in@ {,\CurrentOption ,}{,\@classoptionslist,\@curroptions,}%
+    \ifin@
+      \@use@ption
+      \expandafter \let\csname ds@\CurrentOption\endcsname\@empty
+    \fi
+  \fi
+}
+\ProcessOptionsX
+\RequirePackage{glossaries-compatible-307}
+\disable@keys{glossaries.sty}{compatible-2.07,%
+ xindy,xindygloss,xindynoglsnumbers,makeindex,%
+ acronym,translate,notranslate,nolong,nosuper,notree,nostyles,%
+ nomain,noglossaryindex}
+\newcommand*{\setupglossaries}[1]{%
+  \renewcommand*{\@gls@setacrstyle}{}%
+  \ifglsacrshortcuts
+    \def\@gls@setupshortcuts{\glsacrshortcutstrue}%
+  \else
+    \def\@gls@setupshortcuts{%
+      \ifglsacrshortcuts
+        \DefineAcronymSynonyms
+      \fi
+    }%
+  \fi
+  \glsacrshortcutsfalse
+  \let\@gls@do@numbersdef\relax
+  \let\@gls@do@symbolssdef\relax
+  \let\@gls@do@indexdef\relax
+  \let\@gls@do@acronymsdef\relax
+  \ifglsentrycounter
+    \let\@gls@doentrycounterdef\relax
+  \else
+    \let\@gls@doentrycounterdef\@gls@define@glossaryentrycounter
+  \fi
+  \ifglssubentrycounter
+    \let\@gls@dosubentrycounterdef\relax
+  \else
+    \let\@gls@dosubentrycounterdef\@gls@define@glossarysubentrycounter
+  \fi
+  \setkeys{glossaries.sty}{#1}%
+  \@gls@setacrstyle
+  \@gls@setupshortcuts
+  \@gls@do@acronymsdef
+  \@gls@do@numbersdef
+  \@gls@do@symbolssdef
+  \@gls@do@indexdef
+  \@gls@doentrycounterdef
+  \@gls@dosubentrycounterdef
+}
+\ifthenelse{\equal{\glscounter}{section}}%
+{%
+  \ifcsundef{chapter}{}%
+  {%
+    \let\@gls@old@chapter\@chapter
+    \def\@chapter[#1]#2{\@gls@old@chapter[{#1}]{#2}%
+    \ifcsundef{hyperdef}{}{\hyperdef{section}{\thesection}{}}}%
+  }%
+}%
+{}
+\newcommand*{\@gls@onlypremakeg}{}
+\newcommand*{\@onlypremakeg}[1]{%
+  \ifx\@gls@onlypremakeg\@empty
+     \def\@gls@onlypremakeg{#1}%
+  \else
+     \expandafter\toks@\expandafter{\@gls@onlypremakeg}%
+     \edef\@gls@onlypremakeg{\the\toks@,\noexpand#1}%
+  \fi
+}
+\newcommand*{\@disable@onlypremakeg}{%
+\@for\@thiscs:=\@gls@onlypremakeg\do{%
+   \expandafter\@disable@premakecs\@thiscs%
+}}
+\newcommand*{\@disable@premakecs}[1]{%
+  \def#1{\PackageError{glossaries}{\string#1\space may only be
+  used before \string\makeglossaries}{You can't use
+  \string#1\space after \string\makeglossaries}}%
+}
+\providecommand*{\glossaryname}{Glossary}
+\providecommand*{\acronymname}{Acronyms}
+\newcommand*{\glssettoctitle}[1]{%
+ \def\glossarytoctitle{\csname @glotype@#1@title\endcsname}}
+\providecommand*{\entryname}{Notation}
+\providecommand*{\descriptionname}{Description}
+\providecommand*{\symbolname}{Symbol}
+\providecommand*{\pagelistname}{Page List}
+\providecommand*{\glssymbolsgroupname}{Symbols}
+\providecommand*{\glsnumbersgroupname}{Numbers}
+\newcommand*{\glspluralsuffix}{s}
+\newcommand*{\glsacrpluralsuffix}{\glspluralsuffix}
+\newcommand*{\glsupacrpluralsuffix}{\glstextup{\glsacrpluralsuffix}}
+\providecommand*{\seename}{see}
+\providecommand*{\andname}{\&}
+\newcommand*{\RequireGlossariesLang}[1]{%
+  \@ifundefined{ver@glossaries-#1.ldf}{\input{glossaries-#1.ldf}}{}%
+}
+\newcommand*{\ProvidesGlossariesLang}[1]{%
+  \ProvidesFile{glossaries-#1.ldf}%
+}
+\newcommand*{\addglossarytocaptions}[1]{}
+\ifglstranslate
+  \RequirePackage{tracklang}
+  \@gls@usetranslator
+  \@ifpackageloaded{translator}
+  {%
+    \ifboolexpr
+    {
+      test {\ifdefstring{\trans@languages}{English}}
+      and not
+      test {\ifdefstring{bbl@loaded}{english}}
+    }
+    {%
+      \let\glsifusetranslator\@secondoftwo
+    }%
+    {%
+       \usedictionary{glossaries-dictionary}%
+       \renewcommand*{\addglossarytocaptions}[1]{%
+         \ifcsundef{captions#1}{}%
+         {%
+           \expandafter\let\expandafter\@gls@tmp\csname captions#1\endcsname
+           \expandafter\toks@\expandafter{\@gls@tmp
+             \renewcommand*{\glossaryname}{\translate{Glossary}}%
+           }%
+           \expandafter\edef\csname captions#1\endcsname{\the\toks@}%
+         }%
+       }%
+    }%
+  }%
+  {}%
+  \AnyTrackedLanguages
+  {%
+    \ForEachTrackedDialect{\this@dialect}{%
+      \IfTrackedLanguageFileExists{\this@dialect}%
+      {glossaries-}% prefix
+      {.ldf}%
+      {%
+        \RequireGlossariesLang{\CurrentTrackedTag}%
+      }%
+      {%
+        \@gls@missinglang@warn\this@dialect\CurrentTrackedLanguage
+      }%
+    }%
+  }%
+  {}%
+  \glsifusetranslator
+  {%
+    \renewcommand*{\glssettoctitle}[1]{%
+      \ifcsdef{gls@tr@set@#1@toctitle}%
+      {%
+        \csuse{gls@tr@set@#1@toctitle}%
+      }%
+      {%
+        \def\glossarytoctitle{\csname @glotype@#1@title\endcsname}%
+      }%
+    }%
+    \renewcommand*{\glossaryname}{\translate{Glossary}}%
+    \renewcommand*{\acronymname}{\translate{Acronyms}}%
+    \renewcommand*{\entryname}{\translate{Notation (glossaries)}}%
+    \renewcommand*{\descriptionname}{%
+      \translate{Description (glossaries)}}%
+    \renewcommand*{\symbolname}{\translate{Symbol (glossaries)}}%
+    \renewcommand*{\pagelistname}{%
+      \translate{Page List (glossaries)}}%
+    \renewcommand*{\glssymbolsgroupname}{%
+      \translate{Symbols (glossaries)}}%
+    \renewcommand*{\glsnumbersgroupname}{%
+      \translate{Numbers (glossaries)}}%
+  }{}%
+\fi
+\DeclareRobustCommand*{\nopostdesc}{}
+\newcommand*{\@nopostdesc}{%
+  \let\org@glspostdescription\glspostdescription
+  \def\glspostdescription{%
+    \let\glspostdescription\org@glspostdescription}%
+}
+\newcommand*{\@no@post@desc}{\nopostdesc}
+\newcommand{\glspar}{\par}
+\newcommand{\setStyleFile}[1]{%
+  \renewcommand*{\gls@istfilebase}{#1}%
+  \ifglsxindy
+    \def\istfilename{\gls@istfilebase.xdy}
+  \else
+    \def\istfilename{\gls@istfilebase.ist}
+  \fi
+}
+\@onlypremakeg\setStyleFile
+\ifglsxindy
+  \def\istfilename{\gls@istfilebase.xdy}
+\else
+  \def\istfilename{\gls@istfilebase.ist}
+\fi
+\newcommand*{\gls@istfilebase}{\jobname}
+\newcommand*{\@istfilename}[1]{}
+\newcommand*{\glscompositor}{.}
+\newcommand*{\glsSetCompositor}[1]{%
+  \renewcommand*{\glscompositor}{#1}}
+\@onlypremakeg\glsSetCompositor
+\newcommand*{\@glsAlphacompositor}{\glscompositor}
+\ifglsxindy
+  \newcommand*\glsSetAlphaCompositor[1]{%
+     \renewcommand*\@glsAlphacompositor{#1}}
+\else
+  \newcommand*\glsSetAlphaCompositor[1]{%
+    \glsnoxindywarning\glsSetAlphaCompositor}
+\fi
+\@onlypremakeg\glsSetAlphaCompositor
+\newcommand*{\gls@suffixF}{}
+\newcommand*{\glsSetSuffixF}[1]{%
+  \renewcommand*{\gls@suffixF}{#1}}
+\@onlypremakeg\glsSetSuffixF
+\newcommand*{\gls@suffixFF}{}
+\newcommand*{\glsSetSuffixFF}[1]{%
+  \renewcommand*{\gls@suffixFF}{#1}%
+}
+\ifcsundef{hyperlink}%
+{%
+  \newcommand*{\glsnumberformat}[1]{#1}%
+}%
+{%
+  \newcommand*{\glsnumberformat}[1]{\glshypernumber{#1}}%
+}
+\newcommand{\delimN}{, }
+\newcommand{\delimR}{--}
+\newcommand*{\glossarypreamble}{%
+  \csuse{@glossarypreamble@\currentglossary}%
+}
+\newcommand{\setglossarypreamble}[2][\glsdefaulttype]{%
+  \ifglossaryexists*{#1}%
+  {\csgdef{@glossarypreamble@#1}{#2}}%
+  {\GlossariesWarning{Glossary `#1' is not defined}}%
+}
+\newcommand*{\glossarypostamble}{}
+\newcommand*{\glossarysection}[2][\@gls@title]{%
+  \def\@gls@title{#2}%
+  \ifcsundef{phantomsection}%
+  {%
+    \@glossarysection{#1}{#2}%
+  }%
+  {%
+    \@p@glossarysection{#1}{#2}%
+  }%
+  \glsglossarymark{\glossarytoctitle}%
+}
+\ifcsundef{glossarymark}%
+{%
+  \newcommand{\glsglossarymark}[1]{\glossarymark{#1}}
+}%
+{%
+  \@ifclassloaded{memoir}
+  {%
+    \newcommand{\glsglossarymark}[1]{%
+      \ifglsucmark
+        \markboth{\memUChead{#1}}{\memUChead{#1}}%
+      \else
+        \markboth{#1}{#1}%
+      \fi
+    }
+  }%
+  {%
+    \newcommand{\glsglossarymark}[1]{%
+      \ifglsucmark
+        \@mkboth{\mfirstucMakeUppercase{#1}}{\mfirstucMakeUppercase{#1}}%
+      \else
+        \@mkboth{#1}{#1}%
+      \fi
+    }
+  }
+}
+\providecommand{\glossarymark}[1]{%
+  \ifglsucmark
+    \@mkboth{\mfirstucMakeUppercase{#1}}{\mfirstucMakeUppercase{#1}}%
+  \else
+    \@mkboth{#1}{#1}%
+  \fi
+}
+\newcommand*{\setglossarysection}[1]{%
+\setkeys{glossaries.sty}{section=#1}}
+\newcommand*{\@glossarysection}[2]{%
+  \ifdefempty\@@glossarysecstar
+  {%
+    \csname\@@glossarysec\endcsname[#1]{#2}%
+  }%
+  {%
+    \csname\@@glossarysec\endcsname*{#2}%
+    \@gls@toc{#1}{\@@glossarysec}%
+  }%
+  \@@glossaryseclabel
+}
+\newcommand*{\@p@glossarysection}[2]{%
+  \glsclearpage
+  \phantomsection
+  \ifdefempty\@@glossarysecstar
+  {%
+    \csname\@@glossarysec\endcsname{#2}%
+  }%
+  {%
+    \@gls@toc{#1}{\@@glossarysec}%
+      \csname\@@glossarysec\endcsname*{#2}%
+  }%
+  \@@glossaryseclabel
+}
+\newcommand*{\gls@doclearpage}{%
+  \ifthenelse{\equal{\@@glossarysec}{chapter}}%
+  {%
+    \ifcsundef{cleardoublepage}%
+    {%
+      \clearpage
+    }%
+    {%
+      \ifcsdef{if@openright}%
+      {%
+         \if@openright
+           \cleardoublepage
+         \else
+           \clearpage
+         \fi
+      }%
+      {%
+         \cleardoublepage
+      }%
+    }%
+  }%
+  {}%
+}
+\newcommand*{\glsclearpage}{\gls@doclearpage}
+\newcommand*{\@gls@toc}[2]{%
+  \ifglstoc
+    \ifglsnumberline
+      \addcontentsline{toc}{#2}{\protect\numberline{}#1}%
+    \else
+      \addcontentsline{toc}{#2}{#1}%
+    \fi
+  \fi
+}
+\newcommand*{\glsnoxindywarning}[1]{%
+  \GlossariesWarning{Not in xindy mode --- ignoring \string#1}%
+}
+\newcommand*{\glsnomakeindexwarning}[1]{%
+  \GlossariesWarning{Not in makeindex mode --- ignoring \string#1}%
+}
+\ifglsxindy
+  \edef\@xdyattributes{\string"default\string"}%
+\fi
+\ifglsxindy
+  \edef\@xdyattributelist{}%
+\fi
+\ifglsxindy
+  \def\@xdylocref{}
+\fi
+\newcommand*{\@gls@ifinlist}[4]{%
+  \def\@do@ifinlist##1,#1,##2\end@doifinlist{%
+    \def\@gls@listsuffix{##2}%
+    \ifx\@gls@listsuffix\@empty
+       #4%
+    \else
+       #3%
+    \fi
+  }%
+  \@do@ifinlist,#2,#1,\end@doifinlist
+}
+\ifglsxindy
+  \newcommand*{\@xdycounters}{\glscounter}
+  \newcommand*\GlsAddXdyCounters[1]{%
+    \@for\@gls@ctr:=#1\do{%
+       \edef\@do@addcounter{%
+          \noexpand\@gls@ifinlist{\@gls@ctr}{\@xdycounters}{}%
+          {%
+             \noexpand\edef\noexpand\@xdycounters{\@xdycounters,%
+               \noexpand\@gls@ctr}%
+          }%
+       }%
+       \@do@addcounter
+    }
+  }
+  \@onlypremakeg\GlsAddXdyCounters
+\else
+  \newcommand*\GlsAddXdyCounters[1]{%
+    \glsnoxindywarning\GlsAddXdyAttribute
+  }
+\fi
+\newcommand*\@disabled@glsaddxdycounters{%
+   \PackageError{glossaries}{\string\GlsAddXdyCounters\space
+   can't be used after \string\GlsAddXdyAttribute}{Move all
+   occurrences of \string\GlsAddXdyCounters\space before the first
+   instance of \string\GlsAddXdyAttribute}%
+}
+\ifglsxindy
+  \newcommand*\@glsaddxdyattribute[2]{%
+    \edef\@xdyattributes{\@xdyattributes ^^J \string"#1\string" ^^J
+      \string"#2#1\string"}%
+    \expandafter\toks@\expandafter{\@xdylocref}%
+    \edef\@xdylocref{\the\toks@ ^^J%
+      (markup-locref
+      :open \string"\glstildechar n%
+        \expandafter\string\csname glsX#2X#1\endcsname
+        \string" ^^J
+      :close \string"\string" ^^J
+      :attr \string"#2#1\string")}%
+    \expandafter\gdef\csname glsX#2X#1\endcsname##1##2{%
+       \setentrycounter[##1]{#2}\csname #1\endcsname{##2}%
+    }%
+  }
+  \newcommand*\GlsAddXdyAttribute[1]{%
+    \ifx\@xdyattributelist\@empty
+      \edef\@xdyattributelist{#1}%
+    \else
+      \edef\@xdyattributelist{\@xdyattributelist,#1}%
+    \fi
+    \@for\@this@counter:=\@xdycounters\do{%
+      \protected@edef\gls@do@addxdyattribute{%
+        \noexpand\@glsaddxdyattribute{#1}{\@this@counter}%
+      }
+      \gls@do@addxdyattribute
+    }%
+    \let\GlsAddXdyCounters\@disabled@glsaddxdycounters
+  }
+  \@onlypremakeg\GlsAddXdyAttribute
+\else
+  \newcommand*\GlsAddXdyAttribute[1]{%
+    \glsnoxindywarning\GlsAddXdyAttribute}
+\fi
+\ifglsxindy
+\newcommand*{\@gls@addpredefinedattributes}{%
+  \GlsAddXdyAttribute{glsnumberformat}
+  \GlsAddXdyAttribute{textrm}
+  \GlsAddXdyAttribute{textsf}
+  \GlsAddXdyAttribute{texttt}
+  \GlsAddXdyAttribute{textbf}
+  \GlsAddXdyAttribute{textmd}
+  \GlsAddXdyAttribute{textit}
+  \GlsAddXdyAttribute{textup}
+  \GlsAddXdyAttribute{textsl}
+  \GlsAddXdyAttribute{textsc}
+  \GlsAddXdyAttribute{emph}
+  \GlsAddXdyAttribute{glshypernumber}
+  \GlsAddXdyAttribute{hyperrm}
+  \GlsAddXdyAttribute{hypersf}
+  \GlsAddXdyAttribute{hypertt}
+  \GlsAddXdyAttribute{hyperbf}
+  \GlsAddXdyAttribute{hypermd}
+  \GlsAddXdyAttribute{hyperit}
+  \GlsAddXdyAttribute{hyperup}
+  \GlsAddXdyAttribute{hypersl}
+  \GlsAddXdyAttribute{hypersc}
+  \GlsAddXdyAttribute{hyperemph}
+  \GlsAddXdyAttribute{glsignore}
+}
+\else
+  \let\@gls@addpredefinedattributes\relax
+\fi
+\def\@xdyuseralphabets{}
+\ifglsxindy
+  \newcommand*{\GlsAddXdyAlphabet}[2]{%
+  \edef\@xdyuseralphabets{%
+    \@xdyuseralphabets ^^J
+    (define-alphabet "#1" (#2))}}
+\else
+  \newcommand*{\GlsAddXdyAlphabet}[2]{%
+     \glsnoxindywarning\GlsAddXdyAlphabet}
+\fi
+\ifglsxindy
+  \newcommand*{\@gls@xdy@locationlist}{%
+     roman-page-numbers,%
+     Roman-page-numbers,%
+     arabic-page-numbers,%
+     alpha-page-numbers,%
+     Alpha-page-numbers,%
+     Appendix-page-numbers,%
+     arabic-section-numbers%
+  }
+  \protected@edef\@gls@roman{\@roman{0\string"
+      \string"roman-numbers-lowercase\string" :sep \string"}}%
+  \@onelevel@sanitize\@gls@roman
+  \edef\@tmp{\string" \string"roman-numbers-lowercase\string"
+       :sep \string"}%
+  \@onelevel@sanitize\@tmp
+  \ifx\@tmp\@gls@roman
+    \expandafter
+      \edef\csname @gls@xdy@Lclass@roman-page-numbers\endcsname{%
+        \string"roman-numbers-lowercase\string"%
+      }%
+  \else
+     \expandafter
+      \edef\csname @gls@xdy@Lclass@roman-page-numbers\endcsname{
+        :sep \string"\@gls@roman\string"%
+      }%
+  \fi
+  \expandafter\def\csname @gls@xdy@Lclass@Roman-page-numbers\endcsname{%
+    \string"roman-numbers-uppercase\string"%
+  }%
+  \expandafter\def\csname @gls@xdy@Lclass@arabic-page-numbers\endcsname{%
+    \string"arabic-numbers\string"%
+  }%
+  \expandafter\def\csname @gls@xdy@Lclass@alpha-page-numbers\endcsname{%
+    \string"alpha\string"%
+  }%
+  \expandafter\def\csname @gls@xdy@Lclass@Alpha-page-numbers\endcsname{%
+    \string"ALPHA\string"%
+  }%
+  \expandafter\def\csname @gls@xdy@Lclass@Appendix-page-numbers\endcsname{%
+    \string"ALPHA\string"
+    :sep \string"\@glsAlphacompositor\string"
+    \string"arabic-numbers\string"%
+  }
+  \expandafter\def\csname @gls@xdy@Lclass@arabic-section-numbers\endcsname{%
+    \string"arabic-numbers\string"
+     :sep \string"\glscompositor\string"
+    \string"arabic-numbers\string"%
+  }%
+  \def\@xdyuserlocationdefs{}
+  \def\@xdyuserlocationnames{}
+\fi
+\ifglsxindy
+ \newcommand\@xdycrossrefhook{}
+\fi
+\ifglsxindy
+   \newcommand*{\GlsAddXdyLocation}[3][]{%
+     \def\@gls@tmp{#1}%
+     \ifx\@gls@tmp\@empty
+       \edef\@xdyuserlocationdefs{%
+          \@xdyuserlocationdefs ^^J%
+          (define-location-class \string"#2\string"^^J\space\space
+          \space(:sep \string"{}\glsopenbrace\string" #3
+                 :sep \string"\glsclosebrace\string"))
+       }%
+     \else
+       \edef\@xdyuserlocationdefs{%
+          \@xdyuserlocationdefs ^^J%
+          (define-location-class \string"#2\string"^^J\space\space
+          \space(:sep "\glsopenbrace"
+                 #1
+                 :sep "\glsclosebrace\glsopenbrace" #3
+                 :sep "\glsclosebrace"))
+       }%
+     \fi
+     \edef\@xdyuserlocationnames{%
+        \@xdyuserlocationnames^^J\space\space\space
+        \string"#2\string"}%
+   }
+  \@onlypremakeg\GlsAddXdyLocation
+\else
+   \newcommand*{\GlsAddXdyLocation}[2]{%
+     \glsnoxindywarning\GlsAddXdyLocation}
+\fi
+\ifglsxindy
+  \def\@xdylocationclassorder{^^J\space\space\space
+    \string"roman-page-numbers\string"^^J\space\space\space
+    \string"arabic-page-numbers\string"^^J\space\space\space
+    \string"arabic-section-numbers\string"^^J\space\space\space
+    \string"alpha-page-numbers\string"^^J\space\space\space
+    \string"Roman-page-numbers\string"^^J\space\space\space
+    \string"Alpha-page-numbers\string"^^J\space\space\space
+    \string"Appendix-page-numbers\string"
+    \@xdyuserlocationnames^^J\space\space\space
+    \string"see\string"
+   }
+\fi
+\ifglsxindy
+  \newcommand*\GlsSetXdyLocationClassOrder[1]{%
+    \def\@xdylocationclassorder{#1}}
+\else
+  \newcommand*\GlsSetXdyLocationClassOrder[1]{%
+    \glsnoxindywarning\GlsSetXdyLocationClassOrder}
+\fi
+\ifglsxindy
+  \def\@xdysortrules{}
+\fi
+\ifglsxindy
+  \newcommand*\GlsAddSortRule[2]{%
+    \expandafter\toks@\expandafter{\@xdysortrules}%
+    \protected@edef\@xdysortrules{\the\toks@ ^^J
+     (sort-rule \string"#1\string" \string"#2\string")}%
+  }
+\else
+  \newcommand*\GlsAddSortRule[2]{%
+    \glsnoxindywarning\GlsAddSortRule}
+\fi
+\ifglsxindy
+  \def\@xdyrequiredstyles{tex}
+\fi
+\ifglsxindy
+  \newcommand*\GlsAddXdyStyle[1]{%
+    \edef\@xdyrequiredstyles{\@xdyrequiredstyles,#1}}%
+\else
+  \newcommand*\GlsAddXdyStyle[1]{%
+    \glsnoxindywarning\GlsAddXdyStyle}
+\fi
+\ifglsxindy
+  \newcommand*\GlsSetXdyStyles[1]{%
+    \edef\@xdyrequiredstyles{#1}}
+\else
+  \newcommand*\GlsSetXdyStyles[1]{%
+    \glsnoxindywarning\GlsSetXdyStyles}
+\fi
+\newcommand*{\findrootlanguage}{}
+\def\@xdylanguage#1#2{}
+\ifglsxindy
+  \newcommand*\GlsSetXdyLanguage[2][\glsdefaulttype]{%
+  \ifglossaryexists{#1}{%
+    \expandafter\def\csname @xdy@#1@language\endcsname{#2}%
+  }{%
+    \PackageError{glossaries}{Can't set language type for
+    glossary type `#1' --- no such glossary}{%
+    You have specified a glossary type that doesn't exist}}}
+\else
+  \newcommand*\GlsSetXdyLanguage[2][]{%
+    \glsnoxindywarning\GlsSetXdyLanguage}
+\fi
+\def\@gls@codepage#1#2{}
+\ifglsxindy
+  \newcommand*{\GlsSetXdyCodePage}[1]{%
+    \renewcommand*{\gls@codepage}{#1}%
+  }
+  \AtBeginDocument{%
+    \ifx\gls@codepage\@empty
+      \@ifpackageloaded{fontspec}{\def\gls@codepage{utf8}}{}%
+    \fi
+  }
+\else
+  \newcommand*{\GlsSetXdyCodePage}[1]{%
+    \glsnoxindywarning\GlsSetXdyCodePage}
+\fi
+\ifglsxindy
+  \ifgls@xindy@glsnumbers
+    \def\@xdylettergroups{(define-letter-group
+       \string"glsnumbers\string"^^J\space\space\space
+       :prefixes (\string"0\string" \string"1\string"
+       \string"2\string" \string"3\string" \string"4\string"
+       \string"5\string" \string"6\string" \string"7\string"
+       \string"8\string" \string"9\string")^^J\space\space\space
+       \@xdynumbergrouporder)}
+  \else
+    \def\@xdylettergroups{}
+  \fi
+\fi
+  \newcommand*\GlsAddLetterGroup[2]{%
+    \expandafter\toks@\expandafter{\@xdylettergroups}%
+    \protected@edef\@xdylettergroups{\the\toks@^^J%
+    (define-letter-group \string"#1\string"^^J\space\space\space#2)}%
+  }%
+\newcommand*{\forallglossaries}[3][\@glo@types]{%
+  \@for#2:=#1\do{\ifx#2\@empty\else#3\fi}%
+}
+
+\newcommand*{\forallacronyms}[2]{%
+  \@for#1:=\@glsacronymlists\do{\ifx#1\@empty\else#2\fi}%
+}
+\newcommand*{\forglsentries}[3][\glsdefaulttype]{%
+  \edef\@@glo@list{\csname glolist@#1\endcsname}%
+  \@for#2:=\@@glo@list\do
+  {%
+    \ifdefempty{#2}{}{#3}%
+  }%
+}
+\newcommand*{\forallglsentries}[3][\@glo@types]{%
+  \expandafter\forallglossaries\expandafter[#1]{\@@this@glo@}%
+  {%
+    \forglsentries[\@@this@glo@]{#2}{#3}%
+  }%
+}
+\newcommand{\ifglossaryexists}{%
+  \@ifstar\s@ifglossaryexists\@ifglossaryexists
+}
+\newcommand{\@ifglossaryexists}[3]{%
+  \ifcsundef{@glotype@#1@out}{#3}{#2}%
+}
+\newcommand{\s@ifglossaryexists}[3]{%
+  \ifcsundef{glolist@#1}{#3}{#2}%
+}
+\newcommand*{\glsdetoklabel}[1]{#1}
+\newcommand{\ifglsentryexists}[3]{%
+  \ifcsundef{glo@\glsdetoklabel{#1}@name}{#3}{#2}%
+}
+\newcommand*{\ifglsused}[3]{%
+  \ifbool{glo@\glsdetoklabel{#1}@flag}{#2}{#3}%
+}
+\newcommand{\glsdoifexists}[2]{%
+  \ifglsentryexists{#1}{#2}{%
+    \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}'
+    has not been defined}{You need to define a glossary entry before you
+    can use it.}}%
+}
+\newcommand{\glsdoifnoexists}[2]{%
+  \ifglsentryexists{#1}{%
+    \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}' has already
+    been defined}{}}{#2}%
+}
+\newcommand{\glsdoifexistsorwarn}[2]{%
+  \ifglsentryexists{#1}{#2}{%
+    \GlossariesWarning{Glossary entry `\glsdetoklabel{#1}'
+      has not been defined}%
+  }%
+}
+\newcommand{\glsdoifexistsordo}[3]{%
+  \ifglsentryexists{#1}{#2}{%
+    \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}'
+    has not been defined}{You need to define a glossary entry before you
+    can use it.}%
+    #3%
+  }%
+}
+\newcommand{\doifglossarynoexistsordo}[3]{%
+  \ifglossaryexists*{#1}%
+  {%
+    \PackageError{glossaries}{Glossary type `#1' already exists}{}%
+    #3%
+  }%
+  {#2}%
+}
+\newrobustcmd{\ifglshaschildren}[3]{%
+  \glsdoifexists{#1}%
+  {%
+     \def\do@glshaschildren{#3}%
+     \edef\@gls@thislabel{\glsdetoklabel{#1}}%
+     \expandafter\forglsentries\expandafter
+       [\csname glo@\@gls@thislabel @type\endcsname]
+     {\glo@label}%
+     {%
+       \letcs\glo@parent{glo@\glo@label @parent}%
+       \ifdefequal\@gls@thislabel\glo@parent
+       {%
+         \def\do@glshaschildren{#2}%
+         \@endfortrue
+       }%
+       {}%
+     }%
+     \do@glshaschildren
+  }%
+}
+\newcommand{\ifglshasparent}[3]{%
+  \glsdoifexists{#1}%
+  {%
+    \ifcsempty{glo@\glsdetoklabel{#1}@parent}{#3}{#2}%
+  }%
+}
+\newcommand*{\ifglshasdesc}[3]{%
+  \ifcsempty{glo@\glsdetoklabel{#1}@desc}%
+  {#3}%
+  {#2}%
+}
+\newcommand*{\ifglsdescsuppressed}[3]{%
+  \ifcsequal{glo@\glsdetoklabel{#1}@desc}{@no@post@desc}%
+  {#2}%
+  {#3}%
+}
+\newrobustcmd*{\ifglshassymbol}[3]{%
+  \letcs{\@glo@symbol}{glo@\glsdetoklabel{#1}@symbol}%
+  \ifdefempty\@glo@symbol
+  {#3}%
+  {%
+    \ifdefequal\@glo@symbol\@gls@default@value
+    {#3}%
+    {#2}%
+  }%
+}
+\newrobustcmd*{\ifglshaslong}[3]{%
+  \letcs{\@glo@long}{glo@\glsdetoklabel{#1}@long}%
+  \ifdefempty\@glo@long
+  {#3}%
+  {%
+    \ifdefequal\@glo@long\@gls@default@value
+    {#3}%
+    {#2}%
+  }%
+}
+\newrobustcmd*{\ifglshasshort}[3]{%
+  \letcs{\@glo@short}{glo@\glsdetoklabel{#1}@short}%
+  \ifdefempty\@glo@short
+  {#3}%
+  {%
+    \ifdefequal\@glo@short\@gls@default@value
+    {#3}%
+    {#2}%
+  }%
+}
+\newrobustcmd*{\ifglshasfield}[4]{%
+  \glsdoifexists{#2}%
+  {%
+    \letcs{\@glo@thisvalue}{glo@\glsdetoklabel{#2}@#1}%
+    \ifdef\@glo@thisvalue
+    {%
+      \ifdefempty\@glo@thisvalue
+      {%
+        #4%
+      }%
+      {%
+        \ifdefequal\@glo@thisvalue\@gls@default@value
+        {%
+          #4%
+        }%
+        {%
+         \let\glscurrentfieldvalue\@glo@thisvalue
+         #3%
+        }%
+      }%
+    }%
+    {%
+       \@gls@fetchfield{\@gls@thisfield}{#1}%
+       \ifdef\@gls@thisfield
+       {%
+         \letcs{\@glo@thisvalue}{glo@\glsdetoklabel{#2}@\@gls@thisfield}%
+         \ifdefempty\@glo@thisvalue
+         {%
+           #4%
+         }%
+         {%
+           \ifdefequal\@glo@thisvalue\@gls@default@value
+           {%
+             #4%
+           }%
+           {%
+            \let\glscurrentfieldvalue\@glo@thisvalue
+            #3%
+           }%
+         }%
+       }%
+       {%
+         \GlossariesWarning{Unknown entry field `#1'}%
+         #4%
+       }%
+    }%
+  }%
+}
+\newcommand*{\glscurrentfieldvalue}{}
+\newcommand*{\@glo@types}{,}
+\newcommand*\@gls@provide@newglossary{%
+  \protected@write\@auxout{}{\string\providecommand\string\@newglossary[4]{}}%
+  \let\@gls@provide@newglossary\relax
+}
+\newcommand*{\defglsentryfmt}[2][\glsdefaulttype]{%
+  \csgdef{gls@#1@entryfmt}{#2}%
+}
+\newcommand*{\gls@doentryfmt}[1]{\csuse{gls@#1@entryfmt}}
+\newcommand*{\@gls@forbidtexext}[1]{%
+ \ifboolexpr{test {\ifdefstring{#1}{tex}}
+          or test {\ifdefstring{#1}{TEX}}}
+ {%
+   \def#1{nottex}%
+   \PackageError{glossaries}%
+    {Forbidden `.tex' extension replaced with `.nottex'}%
+    {I'm sorry, I can't allow you to do something so reckless.\MessageBreak
+     Don't use `.tex' as an extension for a temporary file.}%
+ }%
+ {%
+ }%
+}
+\newcommand*{\gls@gobbleopt}{\new@ifnextchar[{\@gls@gobbleopt}{}}
+\def\@gls@gobbleopt[#1]{}
+\newcommand*{\newglossary}{\@ifstar\s@newglossary\ns@newglossary}
+\newcommand*{\s@newglossary}[2]{%
+ \ns@newglossary[#1-glg]{#1}{#1-gls}{#1-glo}{#2}%
+}
+\newcommand*{\ns@newglossary}[5][glg]{%
+ \doifglossarynoexistsordo{#2}%
+ {%
+  \ifundef\glsdefaulttype
+  {%
+    \gdef\glsdefaulttype{#2}%
+  }{}%
+  \toks@{#2}\edef\@glo@types{\@glo@types\the\toks@,}%
+  \expandafter\gdef\csname glolist@#2\endcsname{,}%
+  \expandafter\edef\csname @glotype@#2@log\endcsname{#1}%
+  \expandafter\edef\csname @glotype@#2@in\endcsname{#3}%
+  \expandafter\edef\csname @glotype@#2@out\endcsname{#4}%
+  \expandafter\@gls@forbidtexext\csname @glotype@#2@log\endcsname
+  \expandafter\@gls@forbidtexext\csname @glotype@#2@in\endcsname
+  \expandafter\@gls@forbidtexext\csname @glotype@#2@out\endcsname
+  \expandafter\def\csname @glotype@#2@title\endcsname{#5}%
+  \@gls@provide@newglossary
+  \protected@write\@auxout{}{\string\@newglossary{#2}{#1}{#3}{#4}}%
+  \ifcsundef{gls@#2@entryfmt}%
+  {%
+    \defglsentryfmt[#2]{\glsentryfmt}%
+  }%
+  {}%
+  \@gls@defsortcount{#2}%
+  \@ifnextchar[{\@gls@setcounter{#2}}%
+    {\@gls@setcounter{#2}[\glscounter]}%
+ }%
+ {%
+   \gls@gobbleopt
+ }%
+}
+\newcommand*{\altnewglossary}[3]{%
+  \newglossary[#2-glg]{#1}{#2-gls}{#2-glo}{#3}%
+}
+\@onlypreamble{\newglossary}
+\@onlypremakeg\newglossary
+\newcommand*{\@newglossary}[4]{}
+\def\@gls@setcounter#1[#2]{%
+  \expandafter\def\csname @glotype@#1@counter\endcsname{#2}%
+  \ifglsxindy
+    \GlsAddXdyCounters{#2}%
+  \fi
+}
+\newcommand*{\@gls@getcounter}[1]{%
+ \csname @glotype@#1@counter\endcsname
+}
+\glsdefmain
+\@gls@do@acronymsdef
+\@gls@do@symbolsdef
+\@gls@do@numbersdef
+\@gls@do@indexdef
+\newcommand*{\newignoredglossary}[1]{%
+  \ifdefempty\@ignored@glossaries
+  {%
+    \edef\@ignored@glossaries{#1}%
+  }%
+  {%
+    \eappto\@ignored@glossaries{,#1}%
+  }%
+  \csgdef{glolist@#1}{,}%
+  \ifcsundef{gls@#1@entryfmt}%
+  {%
+    \defglsentryfmt[#1]{\glsentryfmt}%
+  }%
+  {}%
+  \ifdefempty\@gls@nohyperlist
+  {%
+     \renewcommand*{\@gls@nohyperlist}{#1}%
+  }%
+  {%
+     \eappto\@gls@nohyperlist{,#1}%
+  }%
+}
+\newcommand*{\@ignored@glossaries}{}
+\newcommand*{\ifignoredglossary}[3]{%
+  \edef\@gls@igtype{#1}%
+  \expandafter\DTLifinlist\expandafter
+    {\@gls@igtype}{\@ignored@glossaries}{#2}{#3}%
+}
+\define@key{glossentry}{name}{%
+\def\@glo@name{#1}%
+}
+\define@key{glossentry}{description}{%
+\def\@glo@desc{#1}%
+}
+\define@key{glossentry}{descriptionplural}{%
+\def\@glo@descplural{#1}%
+}
+\define@key{glossentry}{sort}{%
+\def\@glo@sort{#1}}
+\define@key{glossentry}{text}{%
+\def\@glo@text{#1}%
+}
+\define@key{glossentry}{plural}{%
+\def\@glo@plural{#1}%
+}
+\define@key{glossentry}{first}{%
+\def\@glo@first{#1}%
+}
+\define@key{glossentry}{firstplural}{%
+\def\@glo@firstplural{#1}%
+}
+\newcommand*{\@gls@default@value}{\relax}
+\define@key{glossentry}{symbol}{%
+\def\@glo@symbol{#1}%
+}
+\define@key{glossentry}{symbolplural}{%
+\def\@glo@symbolplural{#1}%
+}
+\define@key{glossentry}{type}{%
+\def\@glo@type{#1}}
+\define@key{glossentry}{counter}{%
+  \ifcsundef{c@#1}%
+  {%
+    \PackageError{glossaries}%
+    {There is no counter called `#1'}%
+    {%
+      The counter key should have the name of a valid counter
+      as its value%
+    }%
+  }%
+  {%
+    \def\@glo@counter{#1}%
+  }%
+}
+\define@key{glossentry}{see}{%
+  \gls@set@xr@key{see}{\@glo@see}{#1}%
+}
+\newcommand*{\gls@set@xr@key}[3]{%
+  \renewcommand*{\gls@xr@key}{#1}%
+  \gls@checkseeallowed
+  \def#2{#3}%
+  \@glo@seeautonumberlist
+}
+\newcommand*{\gls@xr@key}{see}
+\newcommand*{\gls@checkseeallowed}{%
+ \@gls@see@noindex
+}
+\newcommand*{\gls@checkseeallowed@preambleonly}{%
+  \GlossariesWarning{glossaries}%
+  {`\gls@xr@key' key doesn't have any effect when used in the document
+   environment. Move the definition to the preamble
+    after \string\makeglossaries\space
+   or \string\makenoidxglossaries}%
+}
+\define@key{glossentry}{parent}{%
+\def\@glo@parent{#1}}
+\define@choicekey{glossentry}{nonumberlist}%
+ [\gls@nonumberlist@val\gls@nonumberlist@nr]{true,false}[true]%
+{%
+  \ifcase\gls@nonumberlist@nr\relax
+    \def\@glo@prefix{\glsnonextpages}%
+    \@gls@savenonumberlist{true}%
+  \else
+    \def\@glo@prefix{\glsnextpages}%
+    \@gls@savenonumberlist{false}%
+  \fi
+}
+\newcommand*{\@gls@savenonumberlist}[1]{}
+\newcommand*{\@gls@initnonumberlist}{}%
+\newcommand*{\@gls@storenonumberlist}[1]{}
+\newcommand*{\@gls@enablesavenonumberlist}{%
+  \renewcommand*{\@gls@initnonumberlist}{%
+    \undef\@glo@nonumberlist
+  }%
+  \renewcommand*{\@gls@savenonumberlist}[1]{%
+    \def\@glo@nonumberlist{##1}%
+  }%
+  \renewcommand*{\@gls@storenonumberlist}[1]{%
+    \ifdef\@glo@nonumberlist
+    {%
+      \cslet{glo@\glsdetoklabel{##1}@nonumberlist}{\@glo@nonumberlist}%
+    }%
+    {}%
+  }%
+  \appto\@gls@keymap{,{nonumberlist}{nonumberlist}}%
+}
+\define@key{glossentry}{user1}{%
+  \def\@glo@useri{#1}%
+}
+\define@key{glossentry}{user2}{%
+  \def\@glo@userii{#1}%
+}
+\define@key{glossentry}{user3}{%
+  \def\@glo@useriii{#1}%
+}
+\define@key{glossentry}{user4}{%
+  \def\@glo@useriv{#1}%
+}
+\define@key{glossentry}{user5}{%
+  \def\@glo@userv{#1}%
+}
+\define@key{glossentry}{user6}{%
+  \def\@glo@uservi{#1}%
+}
+\define@key{glossentry}{short}{%
+  \def\@glo@short{#1}%
+}
+\define@key{glossentry}{shortplural}{%
+  \def\@glo@shortpl{#1}%
+}
+\define@key{glossentry}{long}{%
+  \def\@glo@long{#1}%
+}
+\define@key{glossentry}{longplural}{%
+  \def\@glo@longpl{#1}%
+}
+\newcommand*{\@glsnoname}{%
+  \PackageError{glossaries}{name key required in
+  \string\newglossaryentry\space for entry `\@glo@label'}{You
+  haven't specified the entry name}}
+\newcommand*\@glsnodesc{%
+  \PackageError{glossaries}
+  {%
+    description key required in \string\newglossaryentry\space
+    for entry `\@glo@label'%
+  }%
+  {%
+    You haven't specified the entry description%
+  }%
+}%
+\newcommand*{\@glsdefaultplural}{}
+\newcommand*{\@gls@missingnumberlist}[1]{%
+  ??%
+  \ifglssavenumberlist
+    \GlossariesWarning{Missing number list for entry `#1'.
+     Maybe makeglossaries + rerun required}%
+  \else
+    \PackageError{glossaries}%
+    {Package option `savenumberlist=true' required}%
+    {%
+      You must use the `savenumberlist' package option
+      to reference location lists.%
+    }%
+  \fi
+}
+\newcommand*{\@glsdefaultsort}{\@glo@name}
+\newcount\gls@level
+\newcommand{\@@gls@noexpand@field}[3]{%
+ \expandafter\global\expandafter
+    \let\csname glo@#1@#2\endcsname#3%
+}
+\newcommand{\@gls@noexpand@fields}[4]{%
+  \ifcsdef{gls@assign@#3@field}
+  {%
+     \ifdefequal{#4}{\@gls@default@value}%
+     {%
+       \edef\@gls@value{\expandonce{#1}}%
+       \csuse{gls@assign@#3@field}{#2}{\@gls@value}%
+     }%
+     {%
+       \csuse{gls@assign@#3@field}{#2}{#4}%
+     }%
+  }%
+  {%
+    \ifdefequal{#4}{\@gls@default@value}%
+    {%
+       \edef\@gls@value{\expandonce{#1}}%
+       \@@gls@noexpand@field{#2}{#3}{\@gls@value}%
+    }%
+    {%
+      \@@gls@noexpand@field{#2}{#3}{#4}%
+    }%
+  }%
+}
+\newcommand{\@@gls@expand@field}[3]{%
+ \expandafter
+   \protected@xdef\csname glo@#1@#2\endcsname{#3}%
+}
+\newcommand{\@gls@expand@fields}[4]{%
+  \ifcsdef{gls@assign@#3@field}
+  {%
+     \ifdefequal{#4}{\@gls@default@value}%
+     {%
+       \edef\@gls@value{\expandonce{#1}}%
+       \csuse{gls@assign@#3@field}{#2}{\@gls@value}%
+     }%
+     {%
+       \expandafter\@gls@startswithexpandonce#4\relax\relax\gls@endcheck
+       {%
+         \@@gls@expand@field{#2}{#3}{#4}%
+       }%
+       {%
+         \csuse{gls@assign@#3@field}{#2}{#4}%
+       }%
+     }%
+  }%
+  {%
+    \ifdefequal{#4}{\@gls@default@value}%
+    {%
+      \@@gls@expand@field{#2}{#3}{#1}%
+    }%
+    {%
+      \@@gls@expand@field{#2}{#3}{#4}%
+    }%
+  }%
+}
+\def\@gls@expandonce{\expandonce}
+\def\@gls@startswithexpandonce#1#2\gls@endcheck#3#4{%
+  \def\@gls@tmp{#1}%
+  \ifdefequal{\@gls@expandonce}{\@gls@tmp}{#3}{#4}%
+}
+\let\gls@assign@field\@gls@expand@fields
+\newcommand*{\glsexpandfields}{%
+  \let\gls@assign@field\@gls@expand@fields
+}
+\newcommand*{\glsnoexpandfields}{%
+  \let\gls@assign@field\@gls@noexpand@fields
+}
+\newrobustcmd{\newglossaryentry}[2]{%
+  \glsdoifnoexists{#1}%
+  {%
+     \gls@defglossaryentry{#1}{#2}%
+  }%
+}
+\newcommand*{\gls@defdocnewglossaryentry}{%
+  \let\gls@checkseeallowed\gls@checkseeallowed@preambleonly
+  \let\newglossaryentry\new@glossaryentry
+}
+\newrobustcmd{\provideglossaryentry}[2]{%
+  \ifglsentryexists{#1}%
+  {}%
+  {%
+    \gls@defglossaryentry{#1}{#2}%
+  }%
+}
+\@onlypreamble{\provideglossaryentry}
+\newrobustcmd{\new@glossaryentry}[2]{%
+  \ifundef\@gls@deffile
+  {%
+     \global\newwrite\@gls@deffile
+     \immediate\openout\@gls@deffile=\jobname.glsdefs
+  }%
+  {}%
+  \ifglsentryexists{#1}{}%
+  {%
+     \gls@defglossaryentry{#1}{#2}%
+  }%
+  \@gls@writedef{#1}%
+}
+\AtBeginDocument{\gls@begindocdefs}
+\AtEndDocument{\ifdef\@gls@deffile{\closeout\@gls@deffile}{}}
+\newcommand*{\gls@begindocdefs}{%
+  \@gls@enablesavenonumberlist
+  \edef\@gls@restoreat{\noexpand\catcode`\noexpand\@=\number\catcode`\@\relax}%
+  \makeatletter
+  \InputIfFileExists{\jobname.glsdefs}{}{}%
+  \@gls@restoreat
+  \undef\@gls@restoreat
+  \gls@defdocnewglossaryentry
+}
+\newcommand*{\@gls@writedef}[1]{%
+  \immediate\write\@gls@deffile
+  {%
+    \string\ifglsentryexists{#1}{}\glspercentchar^^J%
+    \expandafter\@gobble\string\{\glspercentchar^^J%
+      \string\gls@defglossaryentry{\glsdetoklabel{#1}}\glspercentchar^^J%
+      \expandafter\@gobble\string\{\glspercentchar%
+  }%
+  \@for\@gls@map:=\@gls@keymap\do
+  {%
+    \letcs\glo@value{glo@\glsdetoklabel{#1}@\expandafter\@secondoftwo\@gls@map}%
+    \ifdef\glo@value
+    {%
+      \@onelevel@sanitize\glo@value
+      \immediate\write\@gls@deffile
+      {%
+        \expandafter\@firstoftwo\@gls@map
+          =\expandafter\@gobble\string\{\glo@value\expandafter\@gobble\string\},%
+          \glspercentchar
+      }%
+    }%
+    {}%
+  }%
+  \glswritedefhook
+  \immediate\write\@gls@deffile
+  {%
+           \glspercentchar^^J%
+      \expandafter\@gobble\string\}\glspercentchar^^J%
+    \expandafter\@gobble\string\}\glspercentchar%
+  }%
+}
+\newcommand*{\@gls@keymap}{%
+  {name}{name},%
+  {sort}{sortvalue},% unescaped sort value
+  {type}{type},%
+  {first}{first},%
+  {firstplural}{firstpl},%
+  {text}{text},%
+  {plural}{plural},%
+  {description}{desc},%
+  {descriptionplural}{descplural},%
+  {symbol}{symbol},%
+  {symbolplural}{symbolplural},%
+  {user1}{useri},%
+  {user2}{userii},%
+  {user3}{useriii},%
+  {user4}{useriv},%
+  {user5}{userv},%
+  {user6}{uservi},%
+  {long}{long},%
+  {longplural}{longpl},%
+  {short}{short},%
+  {shortplural}{shortpl},%
+  {counter}{counter},%
+  {parent}{parent}%
+}
+\newcommand*{\@gls@fetchfield}[2]{%
+  \edef\@gls@thisval{#2}%
+  \@for\@gls@map:=\@gls@keymap\do{%
+   \edef\@this@key{\expandafter\@firstoftwo\@gls@map}%
+   \ifdefequal{\@this@key}{\@gls@thisval}%
+   {%
+     \edef#1{\expandafter\@secondoftwo\@gls@map}%
+     \@endfortrue
+   }%
+   {}%
+ }%
+}
+\newcommand*{\glsaddstoragekey}{\@ifstar\@sglsaddstoragekey\@glsaddstoragekey}
+\newcommand*{\@sglsaddstoragekey}[1]{%
+  \key@ifundefined{glossentry}{#1}%
+  {%
+    \expandafter\newcommand\expandafter*\expandafter
+     {\csname gls@assign@#1@field\endcsname}[2]{%
+       \@@gls@expand@field{##1}{#1}{##2}%
+     }%
+  }%
+  {}%
+  \@glsaddstoragekey{#1}%
+}
+\newcommand*{\@glsaddstoragekey}[3]{%
+  \key@ifundefined{glossentry}{#1}%
+  {%
+    \define@key{glossentry}{#1}{\csdef{@glo@#1}{##1}}%
+    \appto\@gls@keymap{,{#1}{#1}}%
+    \appto\@newglossaryentryprehook{\csdef{@glo@#1}{#2}}%
+    \appto\@newglossaryentryposthook{%
+      \letcs{\@glo@tmp}{@glo@#1}%
+      \gls@assign@field{#2}{\@glo@label}{#1}{\@glo@tmp}%
+    }%
+    \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}%
+  }%
+  {%
+    \PackageError{glossaries}{Key `#1' already exists}{}%
+  }%
+}
+\newcommand*{\glsaddkey}{\@ifstar\@sglsaddkey\@glsaddkey}
+\newcommand*{\@sglsaddkey}[1]{%
+  \key@ifundefined{glossentry}{#1}%
+  {%
+    \expandafter\newcommand\expandafter*\expandafter
+     {\csname gls@assign@#1@field\endcsname}[2]{%
+       \@@gls@expand@field{##1}{#1}{##2}%
+     }%
+  }%
+  {}%
+  \@glsaddkey{#1}%
+}
+\newcommand*{\@glsaddkey}[7]{%
+  \key@ifundefined{glossentry}{#1}%
+  {%
+    \define@key{glossentry}{#1}{\csdef{@glo@#1}{##1}}%
+    \appto\@gls@keymap{,{#1}{#1}}%
+    \appto\@newglossaryentryprehook{\csdef{@glo@#1}{#2}}%
+    \appto\@newglossaryentryposthook{%
+      \letcs{\@glo@tmp}{@glo@#1}%
+      \gls@assign@field{#2}{\@glo@label}{#1}{\@glo@tmp}%
+    }%
+    \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}%
+    \newcommand*{#4}[1]{\@Gls@entry@field{##1}{#1}}%
+    \ifcsdef{@gls@user@#1@}%
+    {%
+       \PackageError{glossaries}%
+       {Can't define `\string#5' as helper command
+        `\expandafter\string\csname @gls@user@#1@\endcsname' already exists}%
+       {}%
+    }%
+    {%
+      \expandafter\newcommand\expandafter*\expandafter
+        {\csname @gls@user@#1\endcsname}[2][]{%
+          \new@ifnextchar[%
+            {\csuse{@gls@user@#1@}{##1}{##2}}%
+            {\csuse{@gls@user@#1@}{##1}{##2}[]}}%
+      \csdef{@gls@user@#1@}##1##2[##3]{%
+        \@gls@field@link{##1}{##2}{#3{##2}##3}%
+      }%
+      \newrobustcmd*{#5}{%
+        \expandafter\@gls@hyp@opt\csname @gls@user@#1\endcsname}%
+    }%
+    \ifcsdef{@Gls@user@#1@}%
+    {%
+       \PackageError{glossaries}%
+       {Can't define `\string#6' as helper command
+        `\expandafter\string\csname @Gls@user@#1@\endcsname' already exists}%
+       {}%
+    }%
+    {%
+      \expandafter\newcommand\expandafter*\expandafter
+        {\csname @Gls@user@#1\endcsname}[2][]{%
+          \new@ifnextchar[%
+            {\csuse{@Gls@user@#1@}{##1}{##2}}%
+            {\csuse{@Gls@user@#1@}{##1}{##2}[]}}%
+      \csdef{@Gls@user@#1@}##1##2[##3]{%
+        \@gls@field@link{##1}{##2}{#4{##2}##3}%
+      }%
+      \newrobustcmd*{#6}{%
+        \expandafter\@gls@hyp@opt\csname @Gls@user@#1\endcsname}%
+    }%
+    \ifcsdef{@GLS@user@#1@}%
+    {%
+       \PackageError{glossaries}%
+       {Can't define `\string#7' as helper command
+        `\expandafter\string\csname @GLS@user@#1@\endcsname' already exists}%
+       {}%
+    }%
+    {%
+      \expandafter\newcommand\expandafter*\expandafter
+        {\csname @GLS@user@#1\endcsname}[2][]{%
+          \new@ifnextchar[%
+            {\csuse{@GLS@user@#1@}{##1}{##2}}%
+            {\csuse{@GLS@user@#1@}{##1}{##2}[]}}%
+      \csdef{@GLS@user@#1@}##1##2[##3]{%
+        \@gls@field@link{##1}{##2}{\mfirstucMakeUppercase{#3{##2}##3}}%
+      }%
+      \newrobustcmd*{#7}{%
+        \expandafter\@gls@hyp@opt\csname @GLS@user@#1\endcsname}%
+    }%
+  }%
+  {%
+    \PackageError{glossaries}{Key `#1' already exists}{}%
+  }%
+}
+\newcommand{\glsfieldxdef}[3]{%
+ \glsdoifexists{#1}%
+ {%
+   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \ifcsdef{glo@\@glo@label @#2}%
+   {%
+      \protected@csxdef{glo@\@glo@label @#2}{#3}%
+   }%
+   {%
+      \PackageError{glossaries}{Key `#2' doesn't exist}{}%
+   }%
+ }%
+}
+\newcommand{\glsfieldedef}[3]{%
+ \glsdoifexists{#1}%
+ {%
+   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \ifcsdef{glo@\@glo@label @#2}%
+   {%
+      \protected@csedef{glo@\@glo@label @#2}{#3}%
+   }%
+   {%
+      \PackageError{glossaries}{Key `#2' doesn't exist}{}%
+   }%
+ }%
+}
+\newcommand{\glsfieldgdef}[3]{%
+ \glsdoifexists{#1}%
+ {%
+   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \ifcsdef{glo@\@glo@label @#2}%
+   {%
+      \expandafter\gdef\csname glo@\@glo@label @#2\endcsname{#3}%
+   }%
+   {%
+      \PackageError{glossaries}{Key `#2' doesn't exist}{}%
+   }%
+ }%
+}
+\newcommand{\glsfielddef}[3]{%
+ \glsdoifexists{#1}%
+ {%
+   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \ifcsdef{glo@\@glo@label @#2}%
+   {%
+      \expandafter\def\csname glo@\@glo@label @#2\endcsname{#3}%
+   }%
+   {%
+      \PackageError{glossaries}{Key `#2' doesn't exist}{}%
+   }%
+ }%
+}
+\newcommand{\glsfieldfetch}[3]{%
+ \glsdoifexists{#1}%
+ {%
+   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \ifcsdef{glo@\@glo@label @#2}%
+   {%
+      \letcs#3{glo@\@glo@label @#2}%
+   }%
+   {%
+      \PackageError{glossaries}{Key `#2' doesn't exist}{}%
+   }%
+ }%
+}
+\newcommand{\ifglsfieldeq}[5]{%
+ \glsdoifexists{#1}%
+ {%
+   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \ifcsdef{glo@\@glo@label @#2}%
+   {%
+      \ifcsstring{glo@\@glo@label @#2}{#3}{#4}{#5}%
+   }%
+   {%
+      \PackageError{glossaries}{Key `#2' doesn't exist}{}%
+   }%
+ }%
+}
+\newcommand{\ifglsfielddefeq}[5]{%
+ \glsdoifexists{#1}%
+ {%
+   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \ifcsdef{glo@\@glo@label @#2}%
+   {%
+      \expandafter\ifdefstrequal
+       \csname glo@\@glo@label @#2\endcsname{#3}{#4}{#5}%
+   }%
+   {%
+      \PackageError{glossaries}{Key `#2' doesn't exist}{}%
+   }%
+ }%
+}
+\newcommand{\ifglsfieldcseq}[5]{%
+ \glsdoifexists{#1}%
+ {%
+   \edef\@glo@label{\glsdetoklabel{#1}}%
+   \ifcsdef{glo@\@glo@label @#2}%
+   {%
+      \ifcsstrequal{glo@\@glo@label @#2}{#3}{#4}{#5}%
+   }%
+   {%
+      \PackageError{glossaries}{Key `#2' doesn't exist}{}%
+   }%
+ }%
+}
+\newcommand*{\glswritedefhook}{}
+\newcommand*{\gls@assign@desc}[1]{%
+  \gls@assign@field{}{#1}{desc}{\@glo@desc}%
+  \gls@assign@field{\@glo@desc}{#1}{descplural}{\@glo@descplural}%
+}
+\newcommand{\longnewglossaryentry}[3]{%
+  \glsdoifnoexists{#1}%
+  {%
+     \bgroup
+       \let\@org@newglossaryentryprehook\@newglossaryentryprehook
+       \long\def\@newglossaryentryprehook{%
+         \long\def\@glo@desc{#3\leavevmode\unskip\nopostdesc}%
+         \@org@newglossaryentryprehook
+       }%
+       \renewcommand*{\gls@assign@desc}[1]{%
+          \global\cslet{glo@\glsdetoklabel{#1}@desc}{\@glo@desc}%
+          \global\cslet{glo@\glsdetoklabel{#1}@descplural}{\@glo@desc}%
+        }
+       \gls@defglossaryentry{#1}{#2}%
+     \egroup
+  }
+}
+\@onlypreamble{\longnewglossaryentry}
+\newcommand{\longprovideglossaryentry}[3]{%
+  \ifglsentryexists{#1}{}%
+  {\longnewglossaryentry{#1}{#2}{#3}}%
+}
+\@onlypreamble{\longprovideglossaryentry}
+\newcommand{\gls@defglossaryentry}[2]{%
+  \let\GlsSetQuote\gls@nosetquote
+  \edef\@glo@label{\glsdetoklabel{#1}}%
+  \let\glslabel\@glo@label
+  \let\@glo@name\@glsnoname
+  \let\@glo@desc\@glsnodesc
+  \let\@glo@descplural\@gls@default@value
+  \let\@glo@type\@gls@default@value
+  \let\@glo@symbol\@gls@default@value
+  \let\@glo@symbolplural\@gls@default@value
+  \let\@glo@text\@gls@default@value
+  \let\@glo@plural\@gls@default@value
+  \let\@glo@first\@gls@default@value
+  \let\@glo@firstplural\@gls@default@value
+  \let\@glo@sort\@gls@default@value
+  \let\@glo@counter\@gls@default@value
+  \def\@glo@see{}%
+  \def\@glo@parent{}%
+  \def\@glo@prefix{}%
+  \@gls@initnonumberlist
+  \def\@glo@useri{}%
+  \def\@glo@userii{}%
+  \def\@glo@useriii{}%
+  \def\@glo@useriv{}%
+  \def\@glo@userv{}%
+  \def\@glo@uservi{}%
+  \def\@glo@short{}%
+  \def\@glo@shortpl{}%
+  \def\@glo@long{}%
+  \def\@glo@longpl{}%
+  \@newglossaryentryprehook
+  \setkeys{glossentry}{#2}%
+  \ifundef\glsdefaulttype
+  {%
+     \PackageError{glossaries}%
+     {No default glossary type (have you used `nomain' by mistake?)}%
+     {If you use package option `nomain' you must define
+      a new glossary before you can define entries}%
+  }%
+  {}%
+  \gls@assign@field{\glsdefaulttype}{\@glo@label}{type}{\@glo@type}%
+  \edef\@glo@type{\glsentrytype{\@glo@label}}%
+  \ifcsundef{glolist@\@glo@type}%
+  {%
+      \PackageError{glossaries}%
+      {Glossary type `\@glo@type' has not been defined}%
+      {You need to define a new glossary type, before making entries
+       in it}%
+  }%
+  {%
+    \ifignoredglossary\@glo@type
+      {%
+      \ifx\@glo@desc\@glsnodesc
+        \let\@glo@desc\@empty
+      \fi
+    }%
+    {%
+    }%
+    \protected@edef\@glolist@{\csname glolist@\@glo@type\endcsname}%
+    \expandafter\xdef\csname glolist@\@glo@type\endcsname{%
+      \@glolist@{\@glo@label},}%
+  }%
+  \gls@level=0\relax
+  \ifx\@glo@parent\@empty
+    \expandafter\gdef\csname glo@\@glo@label @parent\endcsname{}%
+  \else
+    \ifdefequal\@glo@label\@glo@parent%
+    {%
+      \PackageError{glossaries}{Entry `\@glo@label' can't be its own parent}{}%
+      \def\@glo@parent{}%
+      \expandafter\gdef\csname glo@\@glo@label @parent\endcsname{}%
+    }%
+    {%
+      \ifglsentryexists{\@glo@parent}%
+      {%
+        \expandafter\xdef\csname glo@\@glo@label @parent\endcsname{%
+           \@glo@parent}%
+        \gls@level=\csname glo@\@glo@parent @level\endcsname\relax
+        \advance\gls@level by 1\relax
+        \ifx\@glo@name\@glsnoname
+          \expandafter\let\expandafter\@glo@name
+           \csname glo@\@glo@parent @name\endcsname
+          \ifx\@glo@plural\@gls@default@value
+            \expandafter\let\expandafter\@glo@plural
+               \csname glo@\@glo@parent @plural\endcsname
+          \fi
+        \fi
+      }%
+      {%
+        \PackageError{glossaries}%
+        {%
+          Invalid parent `\@glo@parent'
+          for entry `\@glo@label' - parent doesn't exist%
+        }%
+        {%
+          Parent entries must be defined before their children%
+        }%
+        \def\@glo@parent{}%
+        \expandafter\gdef\csname glo@\@glo@label @parent\endcsname{}%
+      }%
+    }%
+  \fi
+  \expandafter\xdef\csname glo@\@glo@label @level\endcsname{\number\gls@level}%
+  \gls@assign@field{\@glo@name}{\@glo@label}{sortvalue}{\@glo@sort}%
+  \letcs\@glo@sort{glo@\@glo@label @sortvalue}%
+  \gls@assign@field{\@glo@name}{\@glo@label}{text}{\@glo@text}%
+  \expandafter\gls@assign@field\expandafter
+     {\csname glo@\@glo@label @text\endcsname\glspluralsuffix}%
+     {\@glo@label}{plural}{\@glo@plural}%
+  \expandafter\gls@assign@field\expandafter
+     {\csname glo@\@glo@label @text\endcsname}%
+     {\@glo@label}{first}{\@glo@first}%
+  \ifx\@glo@first\@gls@default@value
+    \expandafter\gls@assign@field\expandafter
+       {\csname glo@\@glo@label @plural\endcsname}%
+       {\@glo@label}{firstpl}{\@glo@firstplural}%
+  \else
+    \expandafter\gls@assign@field\expandafter
+       {\csname glo@\@glo@label @first\endcsname\glspluralsuffix}%
+       {\@glo@label}{firstpl}{\@glo@firstplural}%
+  \fi
+  \ifcsundef{@glotype@\@glo@type @counter}%
+  {%
+    \def\@glo@defaultcounter{\glscounter}%
+  }%
+  {%
+    \letcs\@glo@defaultcounter{@glotype@\@glo@type @counter}%
+  }%
+  \gls@assign@field{\@glo@defaultcounter}{\@glo@label}{counter}{\@glo@counter}%
+  \gls@assign@field{}{\@glo@label}{useri}{\@glo@useri}%
+  \gls@assign@field{}{\@glo@label}{userii}{\@glo@userii}%
+  \gls@assign@field{}{\@glo@label}{useriii}{\@glo@useriii}%
+  \gls@assign@field{}{\@glo@label}{useriv}{\@glo@useriv}%
+  \gls@assign@field{}{\@glo@label}{userv}{\@glo@userv}%
+  \gls@assign@field{}{\@glo@label}{uservi}{\@glo@uservi}%
+  \gls@assign@field{}{\@glo@label}{short}{\@glo@short}%
+  \gls@assign@field{}{\@glo@label}{shortpl}{\@glo@shortpl}%
+  \gls@assign@field{}{\@glo@label}{long}{\@glo@long}%
+  \gls@assign@field{}{\@glo@label}{longpl}{\@glo@longpl}%
+  \ifx\@glo@name\@glsnoname
+    \@glsnoname
+    \let\@gloname\@gls@default@value
+  \fi
+  \gls@assign@field{}{\@glo@label}{name}{\@glo@name}%
+  \ifcsundef{glo@\@glo@label @numberlist}%
+  {%
+    \csxdef{glo@\@glo@label @numberlist}{%
+       \noexpand\@gls@missingnumberlist{\@glo@label}}%
+  }%
+  {}%
+  \@gls@storenonumberlist{\@glo@label}%
+  \def\@glo@@desc{\@glo@first}%
+  \ifx\@glo@desc\@glo@@desc
+    \let\@glo@desc\@glo@first
+  \fi
+  \ifx\@glo@desc\@glsnodesc
+    \@glsnodesc
+    \let\@glodesc\@gls@default@value
+  \fi
+  \gls@assign@desc{\@glo@label}%
+  \@gls@defsort{\@glo@type}{\@glo@label}%
+  \def\@glo@@symbol{\@glo@text}%
+  \ifx\@glo@symbol\@glo@@symbol
+    \let\@glo@symbol\@glo@text
+  \fi
+  \gls@assign@field{\relax}{\@glo@label}{symbol}{\@glo@symbol}%
+  \expandafter
+    \gls@assign@field\expandafter
+    {\csname glo@\@glo@label @symbol\endcsname}
+    {\@glo@label}{symbolplural}{\@glo@symbolplural}%
+  \expandafter\xdef\csname glo@\@glo@label @flagfalse\endcsname{%
+    \noexpand\global
+      \noexpand\let\expandafter\noexpand
+        \csname ifglo@\@glo@label @flag\endcsname\noexpand\iffalse
+  }%
+  \expandafter\xdef\csname glo@\@glo@label @flagtrue\endcsname{%
+    \noexpand\global
+      \noexpand\let\expandafter\noexpand
+        \csname ifglo@\@glo@label @flag\endcsname\noexpand\iftrue
+  }%
+  \csname glo@\@glo@label @flagfalse\endcsname
+  \@glo@autosee
+  \ifignoredglossary\@glo@type
+  {%
+    \csdef{glo@\@glo@label @index}{}%
+  }
+  {%
+    \do@glo@storeentry{\@glo@label}%
+  }%
+  \@newglossaryentry@defcounters
+  \@newglossaryentryposthook
+}
+\newcommand*{\@glo@autosee}{%
+  \ifdefvoid\@glo@see{}%
+  {%
+    \protected@edef\@do@glssee{%
+      \noexpand\@gls@fixbraces\noexpand\@glo@list\@glo@see\noexpand\@nil
+      \noexpand\expandafter\noexpand\@glssee\noexpand\@glo@list{\@glo@label}}%
+    \@do@glssee
+  }%
+  \@glo@autoseehook
+}%
+\newcommand*{\@glo@autoseehook}{}
+\newcommand*{\@newglossaryentryprehook}{}
+\newcommand*{\@newglossaryentryposthook}{}
+\newcommand*{\@newglossaryentry@defcounters}{}
+\newcommand*{\glsmoveentry}[2]{%
+  \edef\@glo@thislabel{\glsdetoklabel{#1}}%
+  \edef\glo@type{\csname glo@\@glo@thislabel @type\endcsname}%
+  \def\glo@list{,}%
+  \forglsentries[\glo@type]{\glo@label}%
+   {%
+     \ifdefequal\@glo@thislabel\glo@label
+       {}{\eappto\glo@list{\glo@label,}}%
+   }%
+  \cslet{glolist@\glo@type}{\glo@list}%
+  \csdef{glo@\@glo@thislabel @type}{#2}%
+}
+\ifglsxindy
+  \newcommand*{\@glossaryentryfield}{\string\\glossentry}
+\else
+  \newcommand*{\@glossaryentryfield}{\string\glossentry}
+\fi
+\ifglsxindy
+  \newcommand*{\@glossarysubentryfield}{%
+    \string\\subglossentry}
+\else
+  \newcommand*{\@glossarysubentryfield}{%
+    \string\subglossentry}
+\fi
+\newcommand{\@glo@storeentry}[1]{%
+  \edef\@glo@esclabel{#1}%
+  \@gls@checkmkidxchars\@glo@esclabel
+  \protected@edef\@glo@sort{\csname glo@#1@sort\endcsname}%
+  \@gls@checkmkidxchars\@glo@sort
+  \@gls@checkmkidxchars\@glo@prefix
+  \edef\@glo@parent{\csname glo@#1@parent\endcsname}%
+  \ifglsxindy
+    \ifx\@glo@parent\@empty
+      \expandafter\protected@xdef\csname glo@#1@index\endcsname{%
+       (\string"\@glo@sort\string" %
+       \string"\@glo@prefix\@glossaryentryfield{\@glo@esclabel}\string") %
+      }%
+    \else
+      \expandafter\protected@xdef\csname glo@#1@index\endcsname{%
+        \csname glo@\@glo@parent @index\endcsname
+        (\string"\@glo@sort\string" %
+        \string"\@glo@prefix\@glossarysubentryfield
+           {\csname glo@#1@level\endcsname}{\@glo@esclabel}\string") %
+       }%
+    \fi
+  \else
+    \ifx\@glo@parent\@empty
+      \@onelevel@sanitize\@glo@prefix
+      \expandafter\protected@xdef\csname glo@#1@index\endcsname{%
+        \@glo@sort\@gls@actualchar\@glo@prefix
+        \@glossaryentryfield{\@glo@esclabel}%
+      }%
+    \else
+      \expandafter\protected@xdef\csname glo@#1@index\endcsname{%
+        \csname glo@\@glo@parent @index\endcsname\@gls@levelchar
+        \@glo@sort\@gls@actualchar\@glo@prefix
+        \@glossarysubentryfield
+          {\csname glo@#1@level\endcsname}{\@glo@esclabel}%
+      }%
+    \fi
+  \fi
+}
+\AtBeginDocument{%
+  \@ifpackageloaded{amsmath}%
+  {\let\gls@ifnotmeasuring\@gls@ifnotmeasuring}%
+  {}%
+}
+\newcommand*{\@gls@ifnotmeasuring}[1]{%
+  \ifmeasuring@
+  \else
+    #1%
+  \fi
+}
+\newcommand*\gls@ifnotmeasuring[1]{#1}
+\def\@gls@patchtabularx#1\hbox#2#3!!{%
+  \def\TX@trial##1{#1\hbox{\let\glsunset\@gobble#2}#3}%
+}
+\newcommand*\glspatchtabularx{%
+ \ifdef\TX@trial
+ {%
+   \expandafter\@gls@patchtabularx\TX@trial{##1}!!%
+   \let\glspatchtabularx\relax
+ }%
+ {}%
+}
+\newcommand*{\glsreset}[1]{%
+  \gls@ifnotmeasuring
+  {%
+    \glsdoifexists{#1}%
+    {%
+       \@glsreset{#1}%
+    }%
+  }%
+}
+\newcommand*{\glslocalreset}[1]{%
+  \gls@ifnotmeasuring
+  {%
+    \glsdoifexists{#1}%
+    {%
+       \@glslocalreset{#1}%
+    }%
+  }%
+}
+\newcommand*{\glsunset}[1]{%
+  \gls@ifnotmeasuring
+  {%
+    \glsdoifexists{#1}%
+    {%
+      \@glsunset{#1}%
+    }%
+  }%
+}
+\newcommand*{\glslocalunset}[1]{%
+  \gls@ifnotmeasuring
+  {%
+    \glsdoifexists{#1}%
+    {%
+      \@glslocalunset{#1}%
+    }%
+  }%
+}
+\newcommand*{\@glslocalunset}{\@@glslocalunset}
+\newcommand*{\@@glslocalunset}[1]{%
+   \expandafter\let\csname ifglo@\glsdetoklabel{#1}@flag\endcsname\iftrue
+}
+\newcommand*{\@glsunset}{\@@glsunset}
+\newcommand*{\@@glsunset}[1]{%
+  \expandafter\global\csname glo@\glsdetoklabel{#1}@flagtrue\endcsname
+}
+\newcommand*{\@glslocalreset}{\@@glslocalreset}
+\newcommand*{\@@glslocalreset}[1]{%
+   \expandafter\let\csname ifglo@\glsdetoklabel{#1}@flag\endcsname\iffalse
+}
+\newcommand*{\@glsreset}{\@@glsreset}
+\newcommand*{\@@glsreset}[1]{%
+  \expandafter\global\csname glo@\glsdetoklabel{#1}@flagfalse\endcsname
+}
+\newcommand*{\glsresetall}[1][\@glo@types]{%
+  \forallglsentries[#1]{\@glsentry}%
+  {%
+     \glsreset{\@glsentry}%
+  }%
+}
+\newcommand*{\glslocalresetall}[1][\@glo@types]{%
+  \forallglsentries[#1]{\@glsentry}%
+  {%
+    \glslocalreset{\@glsentry}%
+  }%
+}
+\newcommand*{\glsunsetall}[1][\@glo@types]{%
+  \forallglsentries[#1]{\@glsentry}%
+  {%
+    \glsunset{\@glsentry}%
+  }%
+}
+\newcommand*{\glslocalunsetall}[1][\@glo@types]{%
+  \forallglsentries[#1]{\@glsentry}%
+  {%
+    \glslocalunset{\@glsentry}%
+  }%
+}
+\newcommand*{\@@newglossaryentry@defcounters}{%
+  \csdef{glo@\@glo@label @currcount}{0}%
+  \csdef{glo@\@glo@label @prevcount}{0}%
+}
+\newcommand*{\glsenableentrycount}{%
+  \let\@newglossaryentry@defcounters\@@newglossaryentry@defcounters
+  \renewcommand*{\gls@defdocnewglossaryentry}{%
+    \renewcommand*\newglossaryentry[2]{%
+      \PackageError{glossaries}{\string\newglossaryentry\space
+      may only be used in the preamble when entry counting has
+      been activated}{If you use \string\glsenableentrycount\space
+      you must place all entry definitions in the preamble not in
+      the document environment}%
+    }%
+  }%
+  \newcommand*{\glsentrycurrcount}[1]{%
+   \ifcsundef{glo@\glsdetoklabel{##1}@currcount}%
+   {0}{\@gls@entry@field{##1}{currcount}}%
+  }%
+  \newcommand*{\glsentryprevcount}[1]{%
+   \ifcsundef{glo@\glsdetoklabel{##1}@prevcount}%
+   {0}{\@gls@entry@field{##1}{prevcount}}%
+  }%
+  \renewcommand*{\@glsunset}[1]{%
+    \@@glsunset{##1}%
+    \@gls@increment@currcount{##1}%
+  }%
+  \renewcommand*{\@glslocalunset}[1]{%
+    \@@glslocalunset{##1}%
+    \@gls@local@increment@currcount{##1}%
+  }%
+  \renewcommand*{\@glsreset}[1]{%
+    \@@glsreset{##1}%
+    \csgdef{glo@\glsdetoklabel{##1}@currcount}{0}%
+  }%
+  \renewcommand*{\@glslocalreset}[1]{%
+    \@@glslocalreset{##1}%
+    \csdef{glo@\glsdetoklabel{##1}@currcount}{0}%
+  }%
+ \def\@cgls@##1##2[##3]{%
+   \ifnum\glsentryprevcount{##2}=1\relax
+     \cglsformat{##2}{##3}%
+     \glsunset{##2}%
+   \else
+     \@gls@{##1}{##2}[##3]%
+   \fi
+ }%
+ \def\@cglspl@##1##2[##3]{%
+   \ifnum\glsentryprevcount{##2}=1\relax
+     \cglsplformat{##2}{##3}%
+     \glsunset{##2}%
+   \else
+     \@glspl@{##1}{##2}[##3]%
+   \fi
+ }%
+ \def\@cGls@##1##2[##3]{%
+   \ifnum\glsentryprevcount{##2}=1\relax
+     \cGlsformat{##2}{##3}%
+     \glsunset{##2}%
+   \else
+     \@Gls@{##1}{##2}[##3]%
+   \fi
+ }%
+ \def\@cGlspl@##1##2[##3]{%
+   \ifnum\glsentryprevcount{##2}=1\relax
+     \cGlsplformat{##2}{##3}%
+     \glsunset{##2}%
+   \else
+     \@Glspl@{##1}{##2}[##3]%
+   \fi
+ }%
+  \AtEndDocument{\@gls@write@entrycounts}%
+  \renewcommand*{\@gls@entry@count}[2]{%
+    \csgdef{glo@\glsdetoklabel{##1}@prevcount}{##2}%
+  }%
+  \let\glsenableentrycount\relax
+}
+\@onlypreamble\glsenableentrycount
+\newcommand*{\@gls@increment@currcount}[1]{%
+  \csxdef{glo@\glsdetoklabel{#1}@currcount}{%
+   \number\numexpr\glsentrycurrcount{#1}+1}%
+}
+\newcommand*{\@gls@local@increment@currcount}[1]{%
+  \csedef{glo@\glsdetoklabel{#1}@currcount}{%
+   \number\numexpr\glsentrycurrcount{#1}+1}%
+}
+\newcommand*{\@gls@write@entrycounts}{%
+  \immediate\write\@auxout
+    {\string\providecommand*{\string\@gls@entry@count}[2]{}}%
+  \forallglsentries{\@glsentry}{%
+    \ifglsused{\@glsentry}%
+    {\immediate\write\@auxout
+      {\string\@gls@entry@count{\@glsentry}{\glsentrycurrcount{\@glsentry}}}}%
+    {}%
+  }%
+}
+\newcommand*{\@gls@entry@count}[2]{}
+\newrobustcmd*{\cgls}{\@gls@hyp@opt\@cgls}
+\newcommand*{\@cgls}[2][]{%
+  \new@ifnextchar[{\@cgls@{#1}{#2}}{\@cgls@{#1}{#2}[]}%
+}
+\def\@cgls@#1#2[#3]{%
+ \GlossariesWarning{\string\cgls\space is defaulting to
+   \string\gls\space since you haven't enabled entry counting}%
+ \@gls@{#1}{#2}[#3]%
+}
+\newcommand*{\cglsformat}[2]{%
+  \ifglshaslong{#1}{\glsentrylong{#1}}{\glsentryfirst{#1}}#2%
+}
+\newrobustcmd*{\cGls}{\@gls@hyp@opt\@cGls}
+\newcommand*{\@cGls}[2][]{%
+  \new@ifnextchar[{\@cGls@{#1}{#2}}{\@cGls@{#1}{#2}[]}%
+}
+\def\@cGls@#1#2[#3]{%
+ \GlossariesWarning{\string\cGls\space is defaulting to
+   \string\Gls\space since you haven't enabled entry counting}%
+ \@Gls@{#1}{#2}[#3]%
+}
+\newcommand*{\cGlsformat}[2]{%
+  \ifglshaslong{#1}{\Glsentrylong{#1}}{\Glsentryfirst{#1}}#2%
+}
+\newrobustcmd*{\cglspl}{\@gls@hyp@opt\@cglspl}
+\newcommand*{\@cglspl}[2][]{%
+  \new@ifnextchar[{\@cglspl@{#1}{#2}}{\@cglspl@{#1}{#2}[]}%
+}
+\def\@cglspl@#1#2[#3]{%
+ \GlossariesWarning{\string\cglspl\space is defaulting to
+   \string\glspl\space since you haven't enabled entry counting}%
+ \@glspl@{#1}{#2}[#3]%
+}
+\newcommand*{\cglsplformat}[2]{%
+  \ifglshaslong{#1}{\glsentrylongpl{#1}}{\glsentryfirstplural{#1}}#2%
+}
+\newrobustcmd*{\cGlspl}{\@gls@hyp@opt\@cGlspl}
+\newcommand*{\@cGlspl}[2][]{%
+  \new@ifnextchar[{\@cGlspl@{#1}{#2}}{\@cGlspl@{#1}{#2}[]}%
+}
+\def\@cGlspl@#1#2[#3]{%
+ \GlossariesWarning{\string\cGlspl\space is defaulting to
+   \string\Glspl\space since you haven't enabled entry counting}%
+ \@Glspl@{#1}{#2}[#3]%
+}
+\newcommand*{\cGlsplformat}[2]{%
+  \ifglshaslong{#1}{\Glsentrylongpl{#1}}{\Glsentryfirstplural{#1}}#2%
+}
+\newcommand*{\loadglsentries}[2][\@gls@default]{%
+  \let\@gls@default\glsdefaulttype
+  \def\glsdefaulttype{#1}\input{#2}%
+  \let\glsdefaulttype\@gls@default
+}
+\@onlypreamble{\loadglsentries}
+\newcommand*{\glstextformat}[1]{#1}
+\newcommand*{\glsentryfmt}{%
+  \@@gls@default@entryfmt\glsdisplayfirst\glsdisplay
+}
+\newcommand*{\@@gls@default@entryfmt}[2]{%
+  \ifdefempty\glscustomtext
+  {%
+    \glsifplural
+    {%
+      \glscapscase
+      {%
+        \ifglsused\glslabel
+        {%
+          #2{\glsentryplural{\glslabel}}%
+            {\glsentrydescplural{\glslabel}}%
+            {\glsentrysymbolplural{\glslabel}}{\glsinsert}%
+        }%
+        {%
+          #1{\glsentryfirstplural{\glslabel}}%
+            {\glsentrydescplural{\glslabel}}%
+            {\glsentrysymbolplural{\glslabel}}{\glsinsert}%
+        }%
+      }%
+      {%
+        \ifglsused\glslabel
+        {%
+          \ifbool{glscompatible-3.07}%
+          {%
+            \protected@edef\@glo@etext{%
+              #2{\glsentryplural{\glslabel}}%
+                {\glsentrydescplural{\glslabel}}%
+                {\glsentrysymbolplural{\glslabel}}{\glsinsert}}%
+            \xmakefirstuc\@glo@etext
+          }%
+          {%
+            #2{\Glsentryplural{\glslabel}}%
+              {\glsentrydescplural{\glslabel}}%
+              {\glsentrysymbolplural{\glslabel}}{\glsinsert}%
+          }%
+        }%
+        {%
+          \ifbool{glscompatible-3.07}%
+          {%
+            \protected@edef\@glo@etext{%
+              #1{\glsentryfirstplural{\glslabel}}%
+                {\glsentrydescplural{\glslabel}}%
+                {\glsentrysymbolplural{\glslabel}}{\glsinsert}}%
+            \xmakefirstuc\@glo@etext
+          }%
+          {%
+            #1{\Glsentryfirstplural{\glslabel}}%
+              {\glsentrydescplural{\glslabel}}%
+              {\glsentrysymbolplural{\glslabel}}{\glsinsert}%
+          }%
+        }%
+      }%
+      {%
+        \ifglsused\glslabel
+        {%
+          \mfirstucMakeUppercase{#2{\glsentryplural{\glslabel}}%
+            {\glsentrydescplural{\glslabel}}%
+            {\glsentrysymbolplural{\glslabel}}{\glsinsert}}%
+        }%
+        {%
+          \mfirstucMakeUppercase{#1{\glsentryfirstplural{\glslabel}}%
+            {\glsentrydescplural{\glslabel}}%
+            {\glsentrysymbolplural{\glslabel}}{\glsinsert}}%
+        }%
+      }%
+    }%
+    {%
+      \glscapscase
+      {%
+        \ifglsused\glslabel
+        {%
+          #2{\glsentrytext{\glslabel}}%
+            {\glsentrydesc{\glslabel}}%
+            {\glsentrysymbol{\glslabel}}{\glsinsert}%
+        }%
+        {%
+          #1{\glsentryfirst{\glslabel}}%
+            {\glsentrydesc{\glslabel}}%
+            {\glsentrysymbol{\glslabel}}{\glsinsert}%
+        }%
+      }%
+      {%
+        \ifglsused\glslabel
+        {%
+          \ifbool{glscompatible-3.07}%
+          {%
+            \protected@edef\@glo@etext{%
+              #2{\glsentrytext{\glslabel}}%
+                {\glsentrydesc{\glslabel}}%
+                {\glsentrysymbol{\glslabel}}{\glsinsert}}%
+            \xmakefirstuc\@glo@etext
+          }%
+          {%
+            #2{\Glsentrytext{\glslabel}}%
+              {\glsentrydesc{\glslabel}}%
+              {\glsentrysymbol{\glslabel}}{\glsinsert}%
+          }%
+        }%
+        {%
+          \ifbool{glscompatible-3.07}%
+          {%
+            \protected@edef\@glo@etext{%
+              #1{\glsentryfirst{\glslabel}}%
+                {\glsentrydesc{\glslabel}}%
+                {\glsentrysymbol{\glslabel}}{\glsinsert}}%
+              \xmakefirstuc\@glo@etext
+          }%
+          {%
+            #1{\Glsentryfirst{\glslabel}}%
+              {\glsentrydesc{\glslabel}}%
+              {\glsentrysymbol{\glslabel}}{\glsinsert}%
+          }%
+        }%
+      }%
+      {%
+        \ifglsused\glslabel
+        {%
+          \mfirstucMakeUppercase{#2{\glsentrytext{\glslabel}}%
+            {\glsentrydesc{\glslabel}}%
+            {\glsentrysymbol{\glslabel}}{\glsinsert}}%
+        }%
+        {%
+          \mfirstucMakeUppercase{#1{\glsentryfirst{\glslabel}}%
+            {\glsentrydesc{\glslabel}}%
+            {\glsentrysymbol{\glslabel}}{\glsinsert}}%
+        }%
+      }%
+    }%
+  }%
+  {%
+    \ifglsused{\glslabel}%
+    {%
+      #2{\glscustomtext}%
+        {\glsentrydesc{\glslabel}}%
+        {\glsentrysymbol{\glslabel}}{}%
+    }%
+    {%
+      #1{\glscustomtext}%
+        {\glsentrydesc{\glslabel}}%
+        {\glsentrysymbol{\glslabel}}{}%
+    }%
+  }%
+}
+\newcommand*{\glsgenentryfmt}{%
+  \ifdefempty\glscustomtext
+  {%
+    \glsifplural
+    {%
+      \glscapscase
+      {%
+        \ifglsused\glslabel
+        {%
+          \glsentryplural{\glslabel}\glsinsert
+        }%
+        {%
+          \glsentryfirstplural{\glslabel}\glsinsert
+        }%
+      }%
+      {%
+        \ifglsused\glslabel
+        {%
+           \Glsentryplural{\glslabel}\glsinsert
+        }%
+        {%
+           \Glsentryfirstplural{\glslabel}\glsinsert
+        }%
+      }%
+      {%
+        \ifglsused\glslabel
+        {%
+          \mfirstucMakeUppercase
+             {\glsentryplural{\glslabel}\glsinsert}%
+        }%
+        {%
+          \mfirstucMakeUppercase
+             {\glsentryfirstplural{\glslabel}\glsinsert}%
+        }%
+      }%
+    }%
+    {%
+      \glscapscase
+      {%
+        \ifglsused\glslabel
+        {%
+          \glsentrytext{\glslabel}\glsinsert
+        }%
+        {%
+          \glsentryfirst{\glslabel}\glsinsert
+        }%
+      }%
+      {%
+        \ifglsused\glslabel
+        {%
+           \Glsentrytext{\glslabel}\glsinsert
+        }%
+        {%
+          \Glsentryfirst{\glslabel}\glsinsert
+        }%
+      }%
+      {%
+        \ifglsused\glslabel
+        {%
+          \mfirstucMakeUppercase{\glsentrytext{\glslabel}\glsinsert}%
+        }%
+        {%
+          \mfirstucMakeUppercase{\glsentryfirst{\glslabel}\glsinsert}%
+        }%
+      }%
+    }%
+  }%
+  {%
+    \glscustomtext\glsinsert
+  }%
+}
+\newcommand*{\glsgenacfmt}{%
+  \ifdefempty\glscustomtext
+  {%
+    \ifglsused\glslabel
+    {%
+      \glsifplural
+      {%
+        \glscapscase
+        {%
+          \acronymfont{\glsentryshortpl{\glslabel}}\glsinsert
+        }%
+        {%
+          \acronymfont{\Glsentryshortpl{\glslabel}}\glsinsert
+        }%
+        {%
+          \mfirstucMakeUppercase
+            {\acronymfont{\glsentryshortpl{\glslabel}}\glsinsert}%
+        }%
+      }%
+      {%
+        \glscapscase
+        {%
+          \acronymfont{\glsentryshort{\glslabel}}\glsinsert
+        }%
+        {%
+          \acronymfont{\Glsentryshort{\glslabel}}\glsinsert
+        }%
+        {%
+          \mfirstucMakeUppercase
+            {\acronymfont{\glsentryshort{\glslabel}}\glsinsert}%
+        }%
+      }%
+    }%
+    {%
+      \glsifplural
+      {%
+        \glscapscase
+        {%
+          \genplacrfullformat{\glslabel}{\glsinsert}%
+        }%
+        {%
+          \Genplacrfullformat{\glslabel}{\glsinsert}%
+        }%
+        {%
+          \mfirstucMakeUppercase
+            {\genplacrfullformat{\glslabel}{\glsinsert}}%
+        }%
+      }%
+      {%
+        \glscapscase
+        {%
+          \genacrfullformat{\glslabel}{\glsinsert}%
+        }%
+        {%
+          \Genacrfullformat{\glslabel}{\glsinsert}%
+        }%
+        {%
+          \mfirstucMakeUppercase
+           {\genacrfullformat{\glslabel}{\glsinsert}}%
+        }%
+      }%
+    }%
+  }%
+  {%
+    \glscustomtext
+  }%
+}
+\newcommand*{\genacrfullformat}[2]{%
+   \glsentrylong{#1}#2\space
+   (\protect\firstacronymfont{\glsentryshort{#1}})%
+}
+\newcommand*{\Genacrfullformat}[2]{%
+  \protected@edef\gls@text{\genacrfullformat{#1}{#2}}%
+  \xmakefirstuc\gls@text
+}
+\newcommand*{\genplacrfullformat}[2]{%
+   \glsentrylongpl{#1}#2\space
+   (\protect\firstacronymfont{\glsentryshortpl{#1}})%
+}
+\newcommand*{\Genplacrfullformat}[2]{%
+  \protected@edef\gls@text{\genplacrfullformat{#1}{#2}}%
+  \xmakefirstuc\gls@text
+}
+\newcommand*{\glsdisplayfirst}[4]{#1#4}
+\newcommand*{\glsdisplay}[4]{#1#4}
+\newcommand*{\defglsdisplay}[2][\glsdefaulttype]{%
+  \GlossariesWarning{\string\defglsdisplay\space is now obsolete.^^J
+  Use \string\defglsentryfmt\space instead}%
+  \expandafter\def\csname gls@#1@display\endcsname##1##2##3##4{#2}%
+  \edef\@gls@doentrydef{%
+    \noexpand\defglsentryfmt[#1]{%
+      \noexpand\ifcsdef{gls@#1@displayfirst}%
+      {%
+        \noexpand\@@gls@default@entryfmt
+          {\noexpand\csuse{gls@#1@displayfirst}}%
+          {\noexpand\csuse{gls@#1@display}}%
+      }%
+      {%
+        \noexpand\@@gls@default@entryfmt
+          {\noexpand\glsdisplayfirst}%
+          {\noexpand\csuse{gls@#1@display}}%
+      }%
+    }%
+  }%
+  \@gls@doentrydef
+}
+\newcommand*{\defglsdisplayfirst}[2][\glsdefaulttype]{%
+  \GlossariesWarning{\string\defglsdisplayfirst\space is now obsolete.^^J
+  Use \string\defglsentryfmt\space instead}%
+  \expandafter\def\csname gls@#1@displayfirst\endcsname##1##2##3##4{#2}%
+  \edef\@gls@doentrydef{%
+    \noexpand\defglsentryfmt[#1]{%
+      \noexpand\ifcsdef{gls@#1@display}%
+      {%
+        \noexpand\@@gls@default@entryfmt
+          {\noexpand\csuse{gls@#1@displayfirst}}%
+          {\noexpand\csuse{gls@#1@display}}%
+      }%
+      {%
+        \noexpand\@@gls@default@entryfmt
+          {\noexpand\csuse{gls@#1@displayfirst}}%
+          {\noexpand\glsdisplay}%
+      }%
+    }%
+  }%
+  \@gls@doentrydef
+}
+\define@key{glslink}{counter}{%
+  \ifcsundef{c@#1}%
+  {%
+    \PackageError{glossaries}%
+    {There is no counter called `#1'}%
+    {%
+       The counter key should have the name of a valid counter
+       as its value%
+    }%
+  }%
+  {%
+    \def\@gls@counter{#1}%
+  }%
+}
+\define@key{glslink}{format}{%
+  \def\@glsnumberformat{#1}}
+\define@boolkey{glslink}{hyper}[true]{}
+\ifdef{\hyperlink}{\KV@glslink@hypertrue}{\KV@glslink@hyperfalse}
+\define@boolkey{glslink}{local}[true]{}
+\newcommand*{\glslinkvar}[3]{#1}
+\newcommand*{\glsifhyper}[2]{%
+ \glslinkvar{#1}{#2}{#1}%
+ \GlossariesWarning{\string\glsifhyper\space is deprecated. Did
+  you mean \string\glsifhyperon\space or \string\glslinkvar?}%
+}
+\newcommand*{\@gls@hyp@opt}[1]{%
+ \let\glslinkvar\@firstofthree
+ \let\@gls@hyp@opt@cs#1\relax
+ \@ifstar{\s@gls@hyp@opt}%
+ {\@ifnextchar+{\@firstoftwo{\p@gls@hyp@opt}}{#1}}%
+}
+\newcommand*{\s@gls@hyp@opt}[1][]{%
+ \let\glslinkvar\@secondofthree
+ \@gls@hyp@opt@cs[hyper=false,#1]}
+\newcommand*{\p@gls@hyp@opt}[1][]{%
+ \let\glslinkvar\@thirdofthree
+ \@gls@hyp@opt@cs[hyper=true,#1]}
+\newrobustcmd*{\glslink}{%
+ \@gls@hyp@opt\@gls@@link
+}
+\newcommand*{\@gls@@link}[3][]{%
+  \glsdoifexistsordo{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\relax
+    \@gls@link[#1]{#2}{#3}%
+  }{%
+    \glstextformat{#3}%
+  }%
+  \glspostlinkhook
+}
+\newcommand*{\glspostlinkhook}{}
+\newcommand*{\@gls@link@checkfirsthyper}{%
+  \ifglsused{\glslabel}%
+  {%
+  }%
+  {%
+    \gls@checkisacronymlist\glstype
+    \ifglshyperfirst
+      \if@glsisacronymlist
+        \ifglsacrfootnote
+           \KV@glslink@hyperfalse
+        \fi
+      \fi
+    \else
+       \KV@glslink@hyperfalse
+    \fi
+  }%
+  \glslinkcheckfirsthyperhook
+}
+\newcommand*{\glslinkcheckfirsthyperhook}{}
+\newcommand*{\glslinkpostsetkeys}{}
+\newcommand{\glsifhyperon}[2]{\ifKV@glslink@hyper#1\else#2\fi}
+\newcommand*{\do@glsdisablehyperinlist}{%
+  \expandafter\DTLifinlist\expandafter{\glstype}{\@gls@nohyperlist}%
+    {\KV@glslink@hyperfalse}{}%
+}
+\newcommand*{\@gls@setdefault@glslink@opts}{}
+\def\@gls@link[#1]#2#3{%
+    \leavevmode
+    \edef\glslabel{\glsdetoklabel{#2}}%
+    \def\@gls@link@opts{#1}%
+    \let\@gls@link@label\glslabel
+    \def\@glsnumberformat{glsnumberformat}%
+    \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}%
+    \edef\glstype{\csname glo@\glslabel @type\endcsname}%
+    \let\org@ifKV@glslink@hyper\ifKV@glslink@hyper
+    \@gls@setdefault@glslink@opts
+    \do@glsdisablehyperinlist
+    \do@gls@link@checkfirsthyper
+    \setkeys{glslink}{#1}%
+    \glslinkpostsetkeys
+    \@gls@saveentrycounter
+    \@gls@setsort{\glslabel}%
+    \@do@wrglossary{#2}%
+    \ifKV@glslink@hyper
+      \@glslink{\glolinkprefix\glslabel}{\glstextformat{#3}}%
+    \else
+      \glsdonohyperlink{\glolinkprefix\glslabel}{\glstextformat{#3}}%
+    \fi
+    \let\ifKV@glslink@hyper\org@ifKV@glslink@hyper
+}
+\newcommand*{\glolinkprefix}{glo:}
+\def\glsentrycounter{\glscounter}%
+\newcommand*{\@gls@saveentrycounter}{%
+  \def\@gls@Hcounter{}%
+  \ifthenelse{\equal{\@gls@counter}{equation}}%
+  {
+    \ifcsundef{xatlevel@}%
+    {%
+      \edef\theglsentrycounter{\expandafter\noexpand
+        \csname the\@gls@counter\endcsname}%
+    }%
+    {%
+      \ifx\xatlevel@\@empty
+        \edef\theglsentrycounter{\expandafter\noexpand
+          \csname the\@gls@counter\endcsname}%
+      \else
+        \savecounters@
+        \advance\c@equation by 1\relax
+          \edef\theglsentrycounter{\csname the\@gls@counter\endcsname}%
+        \ifcsundef{theH\@gls@counter}%
+        {%
+           \def\@gls@Hcounter{\theglsentrycounter}%
+        }%
+        {%
+          \def\@gls@Hcounter{\csname theH\@gls@counter\endcsname}%
+        }%
+        \protected@edef\theHglsentrycounter{\@gls@Hcounter}%
+        \restorecounters@
+      \fi
+    }%
+  }%
+  {%
+    \edef\theglsentrycounter{\expandafter\noexpand
+      \csname the\@gls@counter\endcsname}%
+  }%
+  \ifx\@gls@Hcounter\@empty
+    \ifcsundef{theH\@gls@counter}%
+    {%
+       \def\theHglsentrycounter{\theglsentrycounter}%
+    }%
+    {%
+      \protected@edef\theHglsentrycounter{\expandafter\noexpand
+        \csname theH\@gls@counter\endcsname}%
+    }%
+  \fi
+}
+\def\@set@glo@numformat#1#2#3#4{%
+  \expandafter\@glo@check@mkidxrangechar#3\@nil
+  \protected@edef#1{%
+    \@glo@prefix setentrycounter[#4]{#2}%
+    \expandafter\string\csname\@glo@suffix\endcsname
+  }%
+  \@gls@checkmkidxchars#1%
+}
+\def\@glo@check@mkidxrangechar#1#2\@nil{%
+\if#1(\relax
+  \def\@glo@prefix{(}%
+  \if\relax#2\relax
+    \def\@glo@suffix{glsnumberformat}%
+  \else
+    \def\@glo@suffix{#2}%
+  \fi
+\else
+  \if#1)\relax
+    \def\@glo@prefix{)}%
+    \if\relax#2\relax
+      \def\@glo@suffix{glsnumberformat}%
+    \else
+      \def\@glo@suffix{#2}%
+  \fi
+  \else
+    \def\@glo@prefix{}\def\@glo@suffix{#1#2}%
+  \fi
+\fi}
+\newcommand*{\@gls@escbsdq}[1]{%
+  \def\@gls@checkedmkidx{}%
+  \let\gls@xdystring=#1\relax
+  \@onelevel@sanitize\gls@xdystring
+  \edef\do@gls@xdycheckbackslash{%
+    \noexpand\@gls@xdycheckbackslash\gls@xdystring\noexpand\@nil
+    \@backslashchar\@backslashchar\noexpand\null}%
+  \do@gls@xdycheckbackslash
+  \expandafter\@gls@updatechecked\@gls@checkedmkidx{\gls@xdystring}%
+  \def\@gls@checkedmkidx{}%
+  \expandafter\@gls@xdycheckquote\gls@xdystring\@nil""\null
+  \expandafter\@gls@updatechecked\@gls@checkedmkidx{\gls@xdystring}%
+  \@for\@gls@tmp:=\gls@protected@pagefmts\do
+  {%
+    \edef\@gls@sanitized@tmp{\expandafter\@gobble\string\\\expandonce\@gls@tmp}%
+    \@onelevel@sanitize\@gls@sanitized@tmp
+    \edef\gls@dosubst{%
+      \noexpand\DTLsubstituteall\noexpand\gls@xdystring
+      {\@gls@sanitized@tmp}{\expandonce\@gls@tmp}%
+    }%
+    \gls@dosubst
+  }%
+  \let#1=\gls@xdystring
+}
+\newcommand{\@gls@checkmkidxchars}[1]{%
+  \ifglsxindy
+    \@gls@escbsdq{#1}%
+  \else
+    \def\@gls@checkedmkidx{}%
+    \expandafter\@gls@checkquote#1\@nil""\null
+    \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}%
+    \def\@gls@checkedmkidx{}%
+    \expandafter\@gls@checkescquote#1\@nil\"\"\null
+    \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}%
+    \def\@gls@checkedmkidx{}%
+    \expandafter\@gls@checkescactual#1\@nil\?\?\null
+    \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}%
+    \def\@gls@checkedmkidx{}%
+    \expandafter\@gls@checkactual#1\@nil??\null
+    \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}%
+    \def\@gls@checkedmkidx{}%
+    \expandafter\@gls@checkbar#1\@nil||\null
+    \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}%
+    \def\@gls@checkedmkidx{}%
+    \expandafter\@gls@checkescbar#1\@nil\|\|\null
+    \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}%
+    \def\@gls@checkedmkidx{}%
+    \expandafter\@gls@checklevel#1\@nil!!\null
+    \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}%
+  \fi
+}
+\def\@gls@updatechecked#1\@nil#2{\def#2{#1}}
+\newtoks\@gls@tmpb
+\def\@gls@checkquote#1"#2"#3\null{%
+  \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+  \toks@={#1}%
+  \ifx\null#2\null
+   \ifx\null#3\null
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+    \def\@@gls@checkquote{\relax}%
+   \else
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+      \@gls@quotechar\@gls@quotechar\@gls@quotechar\@gls@quotechar}%
+    \def\@@gls@checkquote{\@gls@checkquote#3\null}%
+   \fi
+  \else
+   \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+     \@gls@quotechar\@gls@quotechar}%
+   \ifx\null#3\null
+     \def\@@gls@checkquote{\@gls@checkquote#2""\null}%
+   \else
+     \def\@@gls@checkquote{\@gls@checkquote#2"#3\null}%
+   \fi
+  \fi
+  \@@gls@checkquote
+}
+\def\@gls@checkescquote#1\"#2\"#3\null{%
+  \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+  \toks@={#1}%
+  \ifx\null#2\null
+   \ifx\null#3\null
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+    \def\@@gls@checkescquote{\relax}%
+   \else
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+      \@gls@quotechar\string\"\@gls@quotechar
+      \@gls@quotechar\string\"\@gls@quotechar}%
+    \def\@@gls@checkescquote{\@gls@checkescquote#3\null}%
+   \fi
+  \else
+   \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+     \@gls@quotechar\string\"\@gls@quotechar}%
+   \ifx\null#3\null
+     \def\@@gls@checkescquote{\@gls@checkescquote#2\"\"\null}%
+   \else
+     \def\@@gls@checkescquote{\@gls@checkescquote#2\"#3\null}%
+   \fi
+  \fi
+\@@gls@checkescquote
+}
+\def\@gls@checkescactual#1\?#2\?#3\null{%
+ \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+ \toks@={#1}%
+ \ifx\null#2\null
+   \ifx\null#3\null
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+    \def\@@gls@checkescactual{\relax}%
+   \else
+     \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+     \@gls@quotechar\string\"\@gls@actualchar
+     \@gls@quotechar\string\"\@gls@actualchar}%
+     \def\@@gls@checkescactual{\@gls@checkescactual#3\null}%
+   \fi
+  \else
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+    \@gls@quotechar\string\"\@gls@actualchar}%
+    \ifx\null#3\null
+      \def\@@gls@checkescactual{\@gls@checkescactual#2\?\?\null}%
+    \else
+      \def\@@gls@checkescactual{\@gls@checkescactual#2\?#3\null}%
+   \fi
+  \fi
+\@@gls@checkescactual
+}
+\def\@gls@checkescbar#1\|#2\|#3\null{%
+  \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+  \toks@={#1}%
+  \ifx\null#2\null
+   \ifx\null#3\null
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+    \def\@@gls@checkescbar{\relax}%
+   \else
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+      \@gls@quotechar\string\"\@gls@encapchar
+      \@gls@quotechar\string\"\@gls@encapchar}%
+    \def\@@gls@checkescbar{\@gls@checkescbar#3\null}%
+   \fi
+  \else
+   \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+     \@gls@quotechar\string\"\@gls@encapchar}%
+   \ifx\null#3\null
+    \def\@@gls@checkescbar{\@gls@checkescbar#2\|\|\null}%
+   \else
+    \def\@@gls@checkescbar{\@gls@checkescbar#2\|#3\null}%
+   \fi
+  \fi
+\@@gls@checkescbar
+}
+\def\@gls@checkesclevel#1\!#2\!#3\null{%
+  \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+  \toks@={#1}%
+  \ifx\null#2\null
+   \ifx\null#3\null
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+    \def\@@gls@checkesclevel{\relax}%
+   \else
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+      \@gls@quotechar\string\"\@gls@levelchar
+      \@gls@quotechar\string\"\@gls@levelchar}%
+    \def\@@gls@checkesclevel{\@gls@checkesclevel#3\null}%
+   \fi
+  \else
+   \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+     \@gls@quotechar\string\"\@gls@levelchar}%
+   \ifx\null#3\null
+    \def\@@gls@checkesclevel{\@gls@checkesclevel#2\!\!\null}%
+   \else
+    \def\@@gls@checkesclevel{\@gls@checkesclevel#2\!#3\null}%
+   \fi
+  \fi
+\@@gls@checkesclevel
+}
+\def\@gls@checkbar#1|#2|#3\null{%
+  \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+  \toks@={#1}%
+  \ifx\null#2\null
+   \ifx\null#3\null
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+    \def\@@gls@checkbar{\relax}%
+   \else
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+      \@gls@quotechar\@gls@encapchar\@gls@quotechar\@gls@encapchar}%
+    \def\@@gls@checkbar{\@gls@checkbar#3\null}%
+   \fi
+  \else
+   \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+     \@gls@quotechar\@gls@encapchar}%
+   \ifx\null#3\null
+     \def\@@gls@checkbar{\@gls@checkbar#2||\null}%
+   \else
+     \def\@@gls@checkbar{\@gls@checkbar#2|#3\null}%
+   \fi
+  \fi
+  \@@gls@checkbar
+}
+\def\@gls@checklevel#1!#2!#3\null{%
+  \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+  \toks@={#1}%
+  \ifx\null#2\null
+    \ifx\null#3\null
+      \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+      \def\@@gls@checklevel{\relax}%
+    \else
+      \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+      \@gls@quotechar\@gls@levelchar\@gls@quotechar\@gls@levelchar}%
+      \def\@@gls@checklevel{\@gls@checklevel#3\null}%
+    \fi
+  \else
+    \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+    \@gls@quotechar\@gls@levelchar}%
+    \ifx\null#3\null
+      \def\@@gls@checklevel{\@gls@checklevel#2!!\null}%
+    \else
+      \def\@@gls@checklevel{\@gls@checklevel#2!#3\null}%
+    \fi
+  \fi
+  \@@gls@checklevel
+}
+\def\@gls@checkactual#1?#2?#3\null{%
+  \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+  \toks@={#1}%
+  \ifx\null#2\null
+    \ifx\null#3\null
+      \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+      \def\@@gls@checkactual{\relax}%
+     \else
+      \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+        \@gls@quotechar\@gls@actualchar\@gls@quotechar\@gls@actualchar}%
+      \def\@@gls@checkactual{\@gls@checkactual#3\null}%
+     \fi
+    \else
+     \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+       \@gls@quotechar\@gls@actualchar}%
+     \ifx\null#3\null
+       \def\@@gls@checkactual{\@gls@checkactual#2??\null}%
+     \else
+       \def\@@gls@checkactual{\@gls@checkactual#2?#3\null}%
+     \fi
+    \fi
+  \@@gls@checkactual
+}
+\def\@gls@xdycheckquote#1"#2"#3\null{%
+  \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+  \toks@={#1}%
+  \ifx\null#2\null
+    \ifx\null#3\null
+      \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+      \def\@@gls@xdycheckquote{\relax}%
+     \else
+      \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+        \string\"\string\"}%
+      \def\@@gls@xdycheckquote{\@gls@xdycheckquote#3\null}%
+     \fi
+    \else
+     \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+       \string\"}%
+     \ifx\null#3\null
+       \def\@@gls@xdycheckquote{\@gls@xdycheckquote#2""\null}%
+     \else
+       \def\@@gls@xdycheckquote{\@gls@xdycheckquote#2"#3\null}%
+     \fi
+    \fi
+  \@@gls@xdycheckquote
+}
+\edef\def@gls@xdycheckbackslash{%
+ \noexpand\def\noexpand\@gls@xdycheckbackslash##1\@backslashchar
+   ##2\@backslashchar##3\noexpand\null{%
+  \noexpand\@gls@tmpb=\noexpand\expandafter
+    {\noexpand\@gls@checkedmkidx}%
+  \noexpand\toks@={##1}%
+  \noexpand\ifx\noexpand\null##2\noexpand\null
+   \noexpand\ifx\noexpand\null##3\noexpand\null
+    \noexpand\edef\noexpand\@gls@checkedmkidx{%
+       \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@}%
+    \noexpand\def\noexpand\@@gls@xdycheckbackslash{\relax}%
+   \noexpand\else
+    \noexpand\edef\noexpand\@gls@checkedmkidx{%
+      \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@
+    \@backslashchar\@backslashchar\@backslashchar\@backslashchar}%
+  \noexpand\def\noexpand\@@gls@xdycheckbackslash{%
+     \noexpand\@gls@xdycheckbackslash##3\noexpand\null}%
+   \noexpand\fi
+  \noexpand\else
+   \noexpand\edef\noexpand\@gls@checkedmkidx{%
+     \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@
+   \@backslashchar\@backslashchar}%
+ \noexpand\ifx\noexpand\null##3\noexpand\null
+   \noexpand\def\noexpand\@@gls@xdycheckbackslash{%
+      \noexpand\@gls@xdycheckbackslash##2\@backslashchar
+      \@backslashchar\noexpand\null}%
+   \noexpand\else
+     \noexpand\def\noexpand\@@gls@xdycheckbackslash{%
+        \noexpand\@gls@xdycheckbackslash##2\@backslashchar
+           ##3\noexpand\null}%
+   \noexpand\fi
+  \noexpand\fi
+  \noexpand\@@gls@xdycheckbackslash
+ }%
+}
+\def@gls@xdycheckbackslash
+
+\newlength\gls@tmplen
+\newcommand*{\glsdohypertarget}[2]{%
+  \@glsshowtarget{#1}%
+  \settoheight{\gls@tmplen}{#2}%
+  \raisebox{\gls@tmplen}{\hypertarget{#1}{}}#2%
+}
+\newcommand*{\glsdohyperlink}[2]{%
+ \@glsshowtarget{#1}%
+ \hyperlink{#1}{#2}%
+}
+\newcommand*{\glsdonohyperlink}[2]{#2}
+\ifcsundef{hyperlink}%
+{%
+  \let\@glslink\glsdonohyperlink
+}%
+{%
+  \let\@glslink\glsdohyperlink
+}
+\ifcsundef{hypertarget}%
+{%
+  \let\@glstarget\@secondoftwo
+}%
+{%
+  \let\@glstarget\glsdohypertarget
+}
+\newcommand{\glsdisablehyper}{%
+  \KV@glslink@hyperfalse
+  \let\@glslink\glsdonohyperlink
+  \let\@glstarget\@secondoftwo
+}
+\newcommand{\glsenablehyper}{%
+ \KV@glslink@hypertrue
+ \let\@glslink\glsdohyperlink
+ \let\@glstarget\glsdohypertarget
+}
+\providecommand{\@firstofthree}[3]{#1}
+\providecommand{\@secondofthree}[3]{#2}
+\newrobustcmd*{\gls}{\@gls@hyp@opt\@gls}
+\newcommand*{\@gls}[2][]{%
+  \new@ifnextchar[{\@gls@{#1}{#2}}{\@gls@{#1}{#2}[]}%
+}
+\def\@gls@#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+    \let\glsifplural\@secondoftwo
+    \let\glscapscase\@firstofthree
+    \let\glscustomtext\@empty
+    \def\glsinsert{#3}%
+    \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+    \@gls@link[#1]{#2}{\@glo@text}%
+    \ifKV@glslink@local
+      \glslocalunset{#2}%
+    \else
+      \glsunset{#2}%
+    \fi
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\Gls}{\@gls@hyp@opt\@Gls}
+\newcommand*{\@Gls}[2][]{%
+  \new@ifnextchar[{\@Gls@{#1}{#2}}{\@Gls@{#1}{#2}[]}%
+}
+\def\@Gls@#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+    \let\glsifplural\@secondoftwo
+    \let\glscapscase\@secondofthree
+    \let\glscustomtext\@empty
+    \def\glsinsert{#3}%
+    \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+    \@gls@link[#1]{#2}{\@glo@text}%
+    \ifKV@glslink@local
+      \glslocalunset{#2}%
+    \else
+      \glsunset{#2}%
+    \fi
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\GLS}{\@gls@hyp@opt\@GLS}
+\newcommand*{\@GLS}[2][]{%
+  \new@ifnextchar[{\@GLS@{#1}{#2}}{\@GLS@{#1}{#2}[]}%
+}
+\def\@GLS@#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+    \let\glsifplural\@secondoftwo
+    \let\glscapscase\@thirdofthree
+    \let\glscustomtext\@empty
+    \def\glsinsert{#3}%
+    \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+    \@gls@link[#1]{#2}{\@glo@text}%
+    \ifKV@glslink@local
+      \glslocalunset{#2}%
+    \else
+      \glsunset{#2}%
+    \fi
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\glspl}{\@gls@hyp@opt\@glspl}
+\newcommand*{\@glspl}[2][]{%
+  \new@ifnextchar[{\@glspl@{#1}{#2}}{\@glspl@{#1}{#2}[]}%
+}
+\def\@glspl@#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+    \let\glsifplural\@firstoftwo
+    \let\glscapscase\@firstofthree
+    \let\glscustomtext\@empty
+    \def\glsinsert{#3}%
+    \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+    \@gls@link[#1]{#2}{\@glo@text}%
+    \ifKV@glslink@local
+      \glslocalunset{#2}%
+    \else
+      \glsunset{#2}%
+    \fi
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\Glspl}{\@gls@hyp@opt\@Glspl}
+\newcommand*{\@Glspl}[2][]{%
+  \new@ifnextchar[{\@Glspl@{#1}{#2}}{\@Glspl@{#1}{#2}[]}%
+}
+\def\@Glspl@#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+    \let\glsifplural\@firstoftwo
+    \let\glscapscase\@secondofthree
+    \let\glscustomtext\@empty
+    \def\glsinsert{#3}%
+    \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+    \@gls@link[#1]{#2}{\@glo@text}%
+    \ifKV@glslink@local
+      \glslocalunset{#2}%
+    \else
+      \glsunset{#2}%
+    \fi
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\GLSpl}{\@gls@hyp@opt\@GLSpl}
+\newcommand*{\@GLSpl}[2][]{%
+  \new@ifnextchar[{\@GLSpl@{#1}{#2}}{\@GLSpl@{#1}{#2}[]}%
+}
+\def\@GLSpl@#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+    \let\glsifplural\@firstoftwo
+    \let\glscapscase\@thirdofthree
+    \let\glscustomtext\@empty
+    \def\glsinsert{#3}%
+    \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+    \@gls@link[#1]{#2}{\@glo@text}%
+    \ifKV@glslink@local
+      \glslocalunset{#2}%
+    \else
+      \glsunset{#2}%
+    \fi
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\glsdisp}{\@gls@hyp@opt\@glsdisp}
+\newcommand*{\@glsdisp}[3][]{%
+  \glsdoifexists{#2}{%
+    \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+    \let\glsifplural\@secondoftwo
+    \let\glscapscase\@firstofthree
+    \def\glscustomtext{#3}%
+    \def\glsinsert{}%
+    \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+    \@gls@link[#1]{#2}{\@glo@text}%
+    \ifKV@glslink@local
+      \glslocalunset{#2}%
+    \else
+      \glsunset{#2}%
+    \fi
+  }%
+  \glspostlinkhook
+}
+\newcommand*{\@gls@link@nocheckfirsthyper}{}
+\newcommand{\@gls@field@link}[3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \@gls@link[#1]{#2}{#3}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\glstext}{\@gls@hyp@opt\@glstext}
+\newcommand*{\@glstext}[2][]{%
+  \new@ifnextchar[{\@glstext@{#1}{#2}}{\@glstext@{#1}{#2}[]}}
+\def\@glstext@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentrytext{#2}#3}%
+}
+\newrobustcmd*{\GLStext}{\@gls@hyp@opt\@GLStext}
+\newcommand*{\@GLStext}[2][]{%
+  \new@ifnextchar[{\@GLStext@{#1}{#2}}{\@GLStext@{#1}{#2}[]}}
+\def\@GLStext@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrytext{#2}#3}}%
+}
+\newrobustcmd*{\Glstext}{\@gls@hyp@opt\@Glstext}
+\newcommand*{\@Glstext}[2][]{%
+  \new@ifnextchar[{\@Glstext@{#1}{#2}}{\@Glstext@{#1}{#2}[]}}
+\def\@Glstext@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentrytext{#2}#3}%
+}
+\newrobustcmd*{\glsfirst}{\@gls@hyp@opt\@glsfirst}
+\newcommand*{\@glsfirst}[2][]{%
+  \new@ifnextchar[{\@glsfirst@{#1}{#2}}{\@glsfirst@{#1}{#2}[]}}
+\def\@glsfirst@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentryfirst{#2}#3}%
+}
+\newrobustcmd*{\Glsfirst}{\@gls@hyp@opt\@Glsfirst}
+\newcommand*{\@Glsfirst}[2][]{%
+  \new@ifnextchar[{\@Glsfirst@{#1}{#2}}{\@Glsfirst@{#1}{#2}[]}}
+\def\@Glsfirst@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentryfirst{#2}#3}%
+}
+\newrobustcmd*{\GLSfirst}{\@gls@hyp@opt\@GLSfirst}
+\newcommand*{\@GLSfirst}[2][]{%
+  \new@ifnextchar[{\@GLSfirst@{#1}{#2}}{\@GLSfirst@{#1}{#2}[]}}
+\def\@GLSfirst@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryfirst{#2}#3}}%
+}
+\newrobustcmd*{\glsplural}{\@gls@hyp@opt\@glsplural}
+\newcommand*{\@glsplural}[2][]{%
+  \new@ifnextchar[{\@glsplural@{#1}{#2}}{\@glsplural@{#1}{#2}[]}}
+\def\@glsplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentryplural{#2}#3}%
+}
+\newrobustcmd*{\Glsplural}{\@gls@hyp@opt\@Glsplural}
+\newcommand*{\@Glsplural}[2][]{%
+  \new@ifnextchar[{\@Glsplural@{#1}{#2}}{\@Glsplural@{#1}{#2}[]}}
+\def\@Glsplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentryplural{#2}#3}%
+}
+\newrobustcmd*{\GLSplural}{\@gls@hyp@opt\@GLSplural}
+\newcommand*{\@GLSplural}[2][]{%
+  \new@ifnextchar[{\@GLSplural@{#1}{#2}}{\@GLSplural@{#1}{#2}[]}}
+\def\@GLSplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryplural{#2}#3}}%
+}
+\newrobustcmd*{\glsfirstplural}{\@gls@hyp@opt\@glsfirstplural}
+\newcommand*{\@glsfirstplural}[2][]{%
+  \new@ifnextchar[{\@glsfirstplural@{#1}{#2}}{\@glsfirstplural@{#1}{#2}[]}}
+\def\@glsfirstplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentryfirstplural{#2}#3}%
+}
+\newrobustcmd*{\Glsfirstplural}{\@gls@hyp@opt\@Glsfirstplural}
+\newcommand*{\@Glsfirstplural}[2][]{%
+  \new@ifnextchar[{\@Glsfirstplural@{#1}{#2}}{\@Glsfirstplural@{#1}{#2}[]}}
+\def\@Glsfirstplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentryfirstplural{#2}#3}%
+}
+\newrobustcmd*{\GLSfirstplural}{\@gls@hyp@opt\@GLSfirstplural}
+\newcommand*{\@GLSfirstplural}[2][]{%
+  \new@ifnextchar[{\@GLSfirstplural@{#1}{#2}}{\@GLSfirstplural@{#1}{#2}[]}}
+\def\@GLSfirstplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryfirstplural{#2}#3}}%
+}
+\newrobustcmd*{\glsname}{\@gls@hyp@opt\@glsname}
+\newcommand*{\@glsname}[2][]{%
+  \new@ifnextchar[{\@glsname@{#1}{#2}}{\@glsname@{#1}{#2}[]}}
+\def\@glsname@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentryname{#2}#3}%
+}
+\newrobustcmd*{\Glsname}{\@gls@hyp@opt\@Glsname}
+\newcommand*{\@Glsname}[2][]{%
+  \new@ifnextchar[{\@Glsname@{#1}{#2}}{\@Glsname@{#1}{#2}[]}}
+\def\@Glsname@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentryname{#2}#3}%
+}
+\newrobustcmd*{\GLSname}{\@gls@hyp@opt\@GLSname}
+\newcommand*{\@GLSname}[2][]{%
+  \new@ifnextchar[{\@GLSname@{#1}{#2}}{\@GLSname@{#1}{#2}[]}}
+\def\@GLSname@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryname{#2}#3}}%
+}
+\newrobustcmd*{\glsdesc}{\@gls@hyp@opt\@glsdesc}
+\newcommand*{\@glsdesc}[2][]{%
+  \new@ifnextchar[{\@glsdesc@{#1}{#2}}{\@glsdesc@{#1}{#2}[]}}
+\def\@glsdesc@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentrydesc{#2}#3}%
+}
+\newrobustcmd*{\Glsdesc}{\@gls@hyp@opt\@Glsdesc}
+\newcommand*{\@Glsdesc}[2][]{%
+  \new@ifnextchar[{\@Glsdesc@{#1}{#2}}{\@Glsdesc@{#1}{#2}[]}}
+\def\@Glsdesc@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentrydesc{#2}#3}%
+}
+\newrobustcmd*{\GLSdesc}{\@gls@hyp@opt\@GLSdesc}
+\newcommand*{\@GLSdesc}[2][]{%
+  \new@ifnextchar[{\@GLSdesc@{#1}{#2}}{\@GLSdesc@{#1}{#2}[]}}
+\def\@GLSdesc@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrydesc{#2}#3}}%
+}
+\newrobustcmd*{\glsdescplural}{\@gls@hyp@opt\@glsdescplural}
+\newcommand*{\@glsdescplural}[2][]{%
+  \new@ifnextchar[{\@glsdescplural@{#1}{#2}}{\@glsdescplural@{#1}{#2}[]}}
+\def\@glsdescplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentrydescplural{#2}#3}%
+}
+\newrobustcmd*{\Glsdescplural}{\@gls@hyp@opt\@Glsdescplural}
+\newcommand*{\@Glsdescplural}[2][]{%
+  \new@ifnextchar[{\@Glsdescplural@{#1}{#2}}{\@Glsdescplural@{#1}{#2}[]}}
+\def\@Glsdescplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentrydescplural{#2}#3}%
+}
+\newrobustcmd*{\GLSdescplural}{\@gls@hyp@opt\@GLSdescplural}
+\newcommand*{\@GLSdescplural}[2][]{%
+  \new@ifnextchar[{\@GLSdescplural@{#1}{#2}}{\@GLSdescplural@{#1}{#2}[]}}
+\def\@GLSdescplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrydescplural{#2}#3}}%
+}
+\newrobustcmd*{\glssymbol}{\@gls@hyp@opt\@glssymbol}
+\newcommand*{\@glssymbol}[2][]{%
+  \new@ifnextchar[{\@glssymbol@{#1}{#2}}{\@glssymbol@{#1}{#2}[]}}
+\def\@glssymbol@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentrysymbol{#2}#3}%
+}
+\newrobustcmd*{\Glssymbol}{\@gls@hyp@opt\@Glssymbol}
+\newcommand*{\@Glssymbol}[2][]{%
+  \new@ifnextchar[{\@Glssymbol@{#1}{#2}}{\@Glssymbol@{#1}{#2}[]}}
+\def\@Glssymbol@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentrysymbol{#2}#3}%
+}
+\newrobustcmd*{\GLSsymbol}{\@gls@hyp@opt\@GLSsymbol}
+\newcommand*{\@GLSsymbol}[2][]{%
+  \new@ifnextchar[{\@GLSsymbol@{#1}{#2}}{\@GLSsymbol@{#1}{#2}[]}}
+\def\@GLSsymbol@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrysymbol{#2}#3}}%
+}
+\newrobustcmd*{\glssymbolplural}{\@gls@hyp@opt\@glssymbolplural}
+\newcommand*{\@glssymbolplural}[2][]{%
+  \new@ifnextchar[{\@glssymbolplural@{#1}{#2}}{\@glssymbolplural@{#1}{#2}[]}}
+\def\@glssymbolplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentrysymbolplural{#2}#3}%
+}
+\newrobustcmd*{\Glssymbolplural}{\@gls@hyp@opt\@Glssymbolplural}
+\newcommand*{\@Glssymbolplural}[2][]{%
+  \new@ifnextchar[{\@Glssymbolplural@{#1}{#2}}{\@Glssymbolplural@{#1}{#2}[]}}
+\def\@Glssymbolplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentrysymbolplural{#2}#3}%
+}
+\newrobustcmd*{\GLSsymbolplural}{\@gls@hyp@opt\@GLSsymbolplural}
+\newcommand*{\@GLSsymbolplural}[2][]{%
+  \new@ifnextchar[{\@GLSsymbolplural@{#1}{#2}}{\@GLSsymbolplural@{#1}{#2}[]}}
+\def\@GLSsymbolplural@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrysymbolplural{#2}#3}}%
+}
+\newrobustcmd*{\glsuseri}{\@gls@hyp@opt\@glsuseri}
+\newcommand*{\@glsuseri}[2][]{%
+  \new@ifnextchar[{\@glsuseri@{#1}{#2}}{\@glsuseri@{#1}{#2}[]}}
+\def\@glsuseri@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentryuseri{#2}#3}%
+}
+\newrobustcmd*{\Glsuseri}{\@gls@hyp@opt\@Glsuseri}
+\newcommand*{\@Glsuseri}[2][]{%
+  \new@ifnextchar[{\@Glsuseri@{#1}{#2}}{\@Glsuseri@{#1}{#2}[]}}
+\def\@Glsuseri@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentryuseri{#2}#3}%
+}
+\newrobustcmd*{\GLSuseri}{\@gls@hyp@opt\@GLSuseri}
+\newcommand*{\@GLSuseri}[2][]{%
+  \new@ifnextchar[{\@GLSuseri@{#1}{#2}}{\@GLSuseri@{#1}{#2}[]}}
+\def\@GLSuseri@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseri{#2}#3}}%
+}
+\newrobustcmd*{\glsuserii}{\@gls@hyp@opt\@glsuserii}
+\newcommand*{\@glsuserii}[2][]{%
+  \new@ifnextchar[{\@glsuserii@{#1}{#2}}{\@glsuserii@{#1}{#2}[]}}
+\def\@glsuserii@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentryuserii{#2}#3}%
+}
+\newrobustcmd*{\Glsuserii}{\@gls@hyp@opt\@Glsuserii}
+\newcommand*{\@Glsuserii}[2][]{%
+  \new@ifnextchar[{\@Glsuserii@{#1}{#2}}{\@Glsuserii@{#1}{#2}[]}}
+\def\@Glsuserii@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentryuserii{#2}#3}%
+}
+\newrobustcmd*{\GLSuserii}{\@gls@hyp@opt\@GLSuserii}
+\newcommand*{\@GLSuserii}[2][]{%
+  \new@ifnextchar[{\@GLSuserii@{#1}{#2}}{\@GLSuserii@{#1}{#2}[]}}
+\def\@GLSuserii@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuserii{#2}#3}}%
+}
+\newrobustcmd*{\glsuseriii}{\@gls@hyp@opt\@glsuseriii}
+\newcommand*{\@glsuseriii}[2][]{%
+  \new@ifnextchar[{\@glsuseriii@{#1}{#2}}{\@glsuseriii@{#1}{#2}[]}}
+\def\@glsuseriii@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentryuseriii{#2}#3}%
+}
+\newrobustcmd*{\Glsuseriii}{\@gls@hyp@opt\@Glsuseriii}
+\newcommand*{\@Glsuseriii}[2][]{%
+  \new@ifnextchar[{\@Glsuseriii@{#1}{#2}}{\@Glsuseriii@{#1}{#2}[]}}
+\def\@Glsuseriii@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentryuseriii{#2}#3}%
+}
+\newrobustcmd*{\GLSuseriii}{\@gls@hyp@opt\@GLSuseriii}
+\newcommand*{\@GLSuseriii}[2][]{%
+  \new@ifnextchar[{\@GLSuseriii@{#1}{#2}}{\@GLSuseriii@{#1}{#2}[]}}
+\def\@GLSuseriii@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseriii{#2}#3}}%
+}
+\newrobustcmd*{\glsuseriv}{\@gls@hyp@opt\@glsuseriv}
+\newcommand*{\@glsuseriv}[2][]{%
+  \new@ifnextchar[{\@glsuseriv@{#1}{#2}}{\@glsuseriv@{#1}{#2}[]}}
+\def\@glsuseriv@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentryuseriv{#2}#3}%
+}
+\newrobustcmd*{\Glsuseriv}{\@gls@hyp@opt\@Glsuseriv}
+\newcommand*{\@Glsuseriv}[2][]{%
+  \new@ifnextchar[{\@Glsuseriv@{#1}{#2}}{\@Glsuseriv@{#1}{#2}[]}}
+\def\@Glsuseriv@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentryuseriv{#2}#3}%
+}
+\newrobustcmd*{\GLSuseriv}{\@gls@hyp@opt\@GLSuseriv}
+\newcommand*{\@GLSuseriv}[2][]{%
+  \new@ifnextchar[{\@GLSuseriv@{#1}{#2}}{\@GLSuseriv@{#1}{#2}[]}}
+\def\@GLSuseriv@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseriv{#2}#3}}%
+}
+\newrobustcmd*{\glsuserv}{\@gls@hyp@opt\@glsuserv}
+\newcommand*{\@glsuserv}[2][]{%
+  \new@ifnextchar[{\@glsuserv@{#1}{#2}}{\@glsuserv@{#1}{#2}[]}}
+\def\@glsuserv@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentryuserv{#2}#3}%
+}
+\newrobustcmd*{\Glsuserv}{\@gls@hyp@opt\@Glsuserv}
+\newcommand*{\@Glsuserv}[2][]{%
+\new@ifnextchar[{\@Glsuserv@{#1}{#2}}{\@Glsuserv@{#1}{#2}[]}}
+\def\@Glsuserv@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentryuserv{#2}#3}%
+}
+\newrobustcmd*{\GLSuserv}{\@gls@hyp@opt\@GLSuserv}
+\newcommand*{\@GLSuserv}[2][]{%
+\new@ifnextchar[{\@GLSuserv@{#1}{#2}}{\@GLSuserv@{#1}{#2}[]}}
+\def\@GLSuserv@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuserv{#2}#3}}%
+}
+\newrobustcmd*{\glsuservi}{\@gls@hyp@opt\@glsuservi}
+\newcommand*{\@glsuservi}[2][]{%
+  \new@ifnextchar[{\@glsuservi@{#1}{#2}}{\@glsuservi@{#1}{#2}[]}}
+\def\@glsuservi@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\glsentryuservi{#2}#3}%
+}
+\newrobustcmd*{\Glsuservi}{\@gls@hyp@opt\@Glsuservi}
+\newcommand*{\@Glsuservi}[2][]{%
+  \new@ifnextchar[{\@Glsuservi@{#1}{#2}}{\@Glsuservi@{#1}{#2}[]}}
+\def\@Glsuservi@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\Glsentryuservi{#2}#3}%
+}
+\newrobustcmd*{\GLSuservi}{\@gls@hyp@opt\@GLSuservi}
+\newcommand*{\@GLSuservi}[2][]{%
+  \new@ifnextchar[{\@GLSuservi@{#1}{#2}}{\@GLSuservi@{#1}{#2}[]}}
+\def\@GLSuservi@#1#2[#3]{%
+  \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuservi{#2}#3}}%
+}
+\newrobustcmd*{\acrshort}{\@gls@hyp@opt\ns@acrshort}
+\newcommand*{\ns@acrshort}[2][]{%
+  \new@ifnextchar[{\@acrshort{#1}{#2}}{\@acrshort{#1}{#2}[]}%
+}
+\def\@acrshort#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \let\glsifplural\@secondoftwo
+    \let\glscapscase\@firstofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \acronymfont{\glsentryshort{#2}}#3%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\Acrshort}{\@gls@hyp@opt\ns@Acrshort}
+\newcommand*{\ns@Acrshort}[2][]{%
+  \new@ifnextchar[{\@Acrshort{#1}{#2}}{\@Acrshort{#1}{#2}[]}%
+}
+\def\@Acrshort#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@secondoftwo
+    \let\glscapscase\@secondofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \acronymfont{\Glsentryshort{#2}}#3%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\ACRshort}{\@gls@hyp@opt\ns@ACRshort}
+\newcommand*{\ns@ACRshort}[2][]{%
+  \new@ifnextchar[{\@ACRshort{#1}{#2}}{\@ACRshort{#1}{#2}[]}%
+}
+\def\@ACRshort#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@secondoftwo
+    \let\glscapscase\@thirdofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \mfirstucMakeUppercase{\acronymfont{\glsentryshort{#2}}#3}%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\acrshortpl}{\@gls@hyp@opt\ns@acrshortpl}
+\newcommand*{\ns@acrshortpl}[2][]{%
+  \new@ifnextchar[{\@acrshortpl{#1}{#2}}{\@acrshortpl{#1}{#2}[]}%
+}
+\def\@acrshortpl#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@firstoftwo
+    \let\glscapscase\@firstofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \acronymfont{\glsentryshortpl{#2}}#3%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\Acrshortpl}{\@gls@hyp@opt\ns@Acrshortpl}
+\newcommand*{\ns@Acrshortpl}[2][]{%
+  \new@ifnextchar[{\@Acrshortpl{#1}{#2}}{\@Acrshortpl{#1}{#2}[]}%
+}
+\def\@Acrshortpl#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@firstoftwo
+    \let\glscapscase\@secondofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \acronymfont{\Glsentryshortpl{#2}}#3%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\ACRshortpl}{\@gls@hyp@opt\ns@ACRshortpl}
+\newcommand*{\ns@ACRshortpl}[2][]{%
+  \new@ifnextchar[{\@ACRshortpl{#1}{#2}}{\@ACRshortpl{#1}{#2}[]}%
+}
+\def\@ACRshortpl#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@firstoftwo
+    \let\glscapscase\@thirdofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \mfirstucMakeUppercase{\acronymfont{\glsentryshortpl{#2}}#3}%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\acrlong}{\@gls@hyp@opt\ns@acrlong}
+\newcommand*{\ns@acrlong}[2][]{%
+  \new@ifnextchar[{\@acrlong{#1}{#2}}{\@acrlong{#1}{#2}[]}%
+}
+\def\@acrlong#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@secondoftwo
+    \let\glscapscase\@firstofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \glsentrylong{#2}#3%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\Acrlong}{\@gls@hyp@opt\ns@Acrlong}
+\newcommand*{\ns@Acrlong}[2][]{%
+  \new@ifnextchar[{\@Acrlong{#1}{#2}}{\@Acrlong{#1}{#2}[]}%
+}
+\def\@Acrlong#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@secondoftwo
+    \let\glscapscase\@secondofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \Glsentrylong{#2}#3%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\ACRlong}{\@gls@hyp@opt\ns@ACRlong}
+\newcommand*{\ns@ACRlong}[2][]{%
+  \new@ifnextchar[{\@ACRlong{#1}{#2}}{\@ACRlong{#1}{#2}[]}%
+}
+\def\@ACRlong#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@secondoftwo
+    \let\glscapscase\@thirdofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \mfirstucMakeUppercase{\glsentrylong{#2}#3}%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\acrlongpl}{\@gls@hyp@opt\ns@acrlongpl}
+\newcommand*{\ns@acrlongpl}[2][]{%
+  \new@ifnextchar[{\@acrlongpl{#1}{#2}}{\@acrlongpl{#1}{#2}[]}%
+}
+\def\@acrlongpl#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@firstoftwo
+    \let\glscapscase\@firstofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \glsentrylongpl{#2}#3%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\Acrlongpl}{\@gls@hyp@opt\ns@Acrlongpl}
+\newcommand*{\ns@Acrlongpl}[2][]{%
+  \new@ifnextchar[{\@Acrlongpl{#1}{#2}}{\@Acrlongpl{#1}{#2}[]}%
+}
+\def\@Acrlongpl#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@firstoftwo
+    \let\glscapscase\@secondofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \Glsentrylongpl{#2}#3%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newrobustcmd*{\ACRlongpl}{\@gls@hyp@opt\ns@ACRlongpl}
+\newcommand*{\ns@ACRlongpl}[2][]{%
+  \new@ifnextchar[{\@ACRlongpl{#1}{#2}}{\@ACRlongpl{#1}{#2}[]}%
+}
+\def\@ACRlongpl#1#2[#3]{%
+  \glsdoifexists{#2}%
+  {%
+    \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+    \def\glslabel{#2}%
+    \let\glsifplural\@firstoftwo
+    \let\glscapscase\@thirdofthree
+    \let\glsinsert\@empty
+    \def\glscustomtext{%
+      \mfirstucMakeUppercase{\glsentrylongpl{#2}#3}%
+    }%
+    \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+  }%
+  \glspostlinkhook
+}
+\newcommand*{\@gls@entry@field}[2]{%
+  \csname glo@\glsdetoklabel{#1}@#2\endcsname
+}
+\newcommand*{\glsletentryfield}[3]{%
+  \letcs{#1}{glo@\glsdetoklabel{#2}@#3}%
+}
+\newcommand*{\@Gls@entry@field}[2]{%
+  \glsdoifexistsordo{#1}%
+  {%
+    \letcs\@glo@text{glo@\glsdetoklabel{#1}@#2}%
+    \ifdef\@glo@text
+    {%
+      \xmakefirstuc{\@glo@text}%
+    }%
+    {%
+      ??\PackageError{glossaries}{The field `#2' doesn't exist for glossary
+      entry `\glsdetoklabel{#1}'}{Check you have correctly spelt the entry
+      label and the field name}%
+    }%
+  }%
+  {%
+    ??%
+  }%
+}
+\newcommand*{\glsentryname}[1]{\@gls@entry@field{#1}{name}}
+\newrobustcmd*{\Glsentryname}[1]{%
+  \@Gls@entryname{#1}%
+}
+\newcommand*{\@Gls@entryname}[1]{%
+  \@Gls@entry@field{#1}{name}%
+}
+\newcommand*{\@Gls@acrentryname}[1]{%
+  \ifglshaslong{#1}%
+  {%
+    \letcs\@glo@text{glo@\glsdetoklabel{#1}@name}%
+    \expandafter\@gls@getbody\@glo@text{}\@nil
+    \expandafter\ifx\@gls@body\glsentrylong\relax
+      \expandafter\Glsentrylong\@gls@rest
+    \else
+      \expandafter\ifx\@gls@body\glsentryshort\relax
+        \expandafter\Glsentryshort\@gls@rest
+      \else
+        \expandafter\ifx\@gls@body\acronymfont\relax
+         {%
+            \let\glsentryshort\Glsentryshort
+            \@glo@text
+         }%
+        \else
+          \expandafter\ifx\@gls@body\glsshortaccessdisplay\relax
+            {%
+              \let\glsentryshort\Glsentryshort
+              \@glo@text
+            }%
+          \else
+            \xmakefirstuc{\@glo@text}%
+          \fi
+        \fi
+      \fi
+    \fi
+  }%
+  {%
+    \@Gls@entry@field{#1}{name}%
+  }%
+}
+\newcommand*{\glsentrydesc}[1]{\@gls@entry@field{#1}{desc}}
+\newrobustcmd*{\Glsentrydesc}[1]{%
+  \@Gls@entry@field{#1}{desc}%
+}
+\newcommand*{\glsentrydescplural}[1]{%
+  \@gls@entry@field{#1}{descplural}%
+}
+\newrobustcmd*{\Glsentrydescplural}[1]{%
+  \@Gls@entry@field{#1}{descplural}%
+}
+\newcommand*{\glsentrytext}[1]{\@gls@entry@field{#1}{text}}
+\newrobustcmd*{\Glsentrytext}[1]{%
+  \@Gls@entry@field{#1}{text}%
+}
+\newcommand*{\glsentryplural}[1]{%
+  \@gls@entry@field{#1}{plural}%
+}
+\newrobustcmd*{\Glsentryplural}[1]{%
+  \@Gls@entry@field{#1}{plural}%
+}
+\newcommand*{\glsentrysymbol}[1]{%
+  \@gls@entry@field{#1}{symbol}%
+}
+\newrobustcmd*{\Glsentrysymbol}[1]{%
+  \@Gls@entry@field{#1}{symbol}%
+}
+\newcommand*{\glsentrysymbolplural}[1]{%
+  \@gls@entry@field{#1}{symbolplural}%
+}
+\newrobustcmd*{\Glsentrysymbolplural}[1]{%
+  \@Gls@entry@field{#1}{symbolplural}%
+}
+\newcommand*{\glsentryfirst}[1]{%
+  \@gls@entry@field{#1}{first}%
+}
+\newrobustcmd*{\Glsentryfirst}[1]{%
+  \@Gls@entry@field{#1}{first}%
+}
+\newcommand*{\glsentryfirstplural}[1]{%
+  \@gls@entry@field{#1}{firstpl}%
+}
+\newrobustcmd*{\Glsentryfirstplural}[1]{%
+  \@Gls@entry@field{#1}{firstpl}%
+}
+\newrobustcmd*{\@glsentrytitlecase}[2]{%
+  \glsdoifexists{#1}%
+  {%
+    \glsfieldfetch{#1}{#2}{\@gls@value}%
+    \xcapitalisewords{\@gls@value}%
+  }%
+}
+\ifdef\texorpdfstring
+{
+  \newcommand*{\glsentrytitlecase}[2]{%
+    \texorpdfstring
+      {\@glsentrytitlecase{#1}{#2}}%
+      {\@gls@entry@field{#1}{#2}}%
+  }
+}
+{
+  \newcommand*{\glsentrytitlecase}[2]{\@glsentrytitlecase{#1}{#2}}
+}
+\newcommand*{\glsentrytype}[1]{\@gls@entry@field{#1}{type}}
+\newcommand*{\glsentrysort}[1]{%
+  \@gls@entry@field{#1}{sort}%
+}
+\newcommand*{\glsentryparent}[1]{%
+  \@gls@entry@field{#1}{parent}%
+}
+\newcommand*{\glsentryuseri}[1]{%
+  \@gls@entry@field{#1}{useri}%
+}
+\newrobustcmd*{\Glsentryuseri}[1]{%
+  \@Gls@entry@field{#1}{useri}%
+}
+\newcommand*{\glsentryuserii}[1]{%
+  \@gls@entry@field{#1}{userii}%
+}
+\newrobustcmd*{\Glsentryuserii}[1]{%
+  \@Gls@entry@field{#1}{userii}%
+}
+\newcommand*{\glsentryuseriii}[1]{%
+  \@gls@entry@field{#1}{useriii}%
+}
+\newrobustcmd*{\Glsentryuseriii}[1]{%
+  \@Gls@entry@field{#1}{useriii}%
+}
+\newcommand*{\glsentryuseriv}[1]{%
+  \@gls@entry@field{#1}{useriv}%
+}
+\newrobustcmd*{\Glsentryuseriv}[1]{%
+  \@Gls@entry@field{#1}{useriv}%
+}
+\newcommand*{\glsentryuserv}[1]{%
+  \@gls@entry@field{#1}{userv}%
+}
+\newrobustcmd*{\Glsentryuserv}[1]{%
+  \@Gls@entry@field{#1}{userv}%
+}
+\newcommand*{\glsentryuservi}[1]{%
+  \@gls@entry@field{#1}{uservi}%
+}
+\newrobustcmd*{\Glsentryuservi}[1]{%
+  \@Gls@entry@field{#1}{uservi}%
+}
+\newcommand*{\glsentryshort}[1]{\@gls@entry@field{#1}{short}}
+\newrobustcmd*{\Glsentryshort}[1]{%
+  \@Gls@entry@field{#1}{short}%
+}
+\newcommand*{\glsentryshortpl}[1]{\@gls@entry@field{#1}{shortpl}}
+\newrobustcmd*{\Glsentryshortpl}[1]{%
+  \@Gls@entry@field{#1}{shortpl}%
+}
+\newcommand*{\glsentrylong}[1]{\@gls@entry@field{#1}{long}}
+\newrobustcmd*{\Glsentrylong}[1]{%
+  \@Gls@entry@field{#1}{long}%
+}
+\newcommand*{\glsentrylongpl}[1]{\@gls@entry@field{#1}{longpl}}
+\newrobustcmd*{\Glsentrylongpl}[1]{%
+  \@Gls@entry@field{#1}{longpl}%
+}
+\newcommand*{\glsentryfull}[1]{%
+  \acrfullformat{\glsentrylong{#1}}{\acronymfont{\glsentryshort{#1}}}%
+}
+\newrobustcmd*{\Glsentryfull}[1]{%
+  \acrfullformat{\Glsentrylong{#1}}{\acronymfont{\glsentryshort{#1}}}%
+}
+\newcommand*{\glsentryfullpl}[1]{%
+  \acrfullformat{\glsentrylongpl{#1}}{\acronymfont{\glsentryshortpl{#1}}}%
+}
+\newrobustcmd*{\Glsentryfullpl}[1]{%
+  \acrfullformat{\Glsentrylongpl{#1}}{\acronymfont{\glsentryshortpl{#1}}}%
+}
+\newcommand*{\glsentrynumberlist}[1]{%
+  \glsdoifexists{#1}%
+  {%
+    \@gls@entry@field{#1}{numberlist}%
+  }%
+}
+\@ifpackageloaded{hyperref} {%
+  \newcommand*{\glsdisplaynumberlist}[1]{%
+    \GlossariesWarning
+    {%
+      \string\glsdisplaynumberlist\space
+      doesn't work with hyperref.^^JUsing
+      \string\glsentrynumberlist\space instead%
+    }%
+    \glsentrynumberlist{#1}%
+  }%
+}%
+{%
+  \newcommand*{\glsdisplaynumberlist}[1]{%
+    \glsdoifexists{#1}%
+    {%
+      \bgroup
+         \edef\@glo@label{\glsdetoklabel{#1}}%
+         \let\@org@glsnumberformat\glsnumberformat
+         \def\glsnumberformat##1{##1}%
+         \protected@edef\the@numberlist{%
+           \csname glo@\@glo@label @numberlist\endcsname}%
+         \def\@gls@numlist@sep{}%
+         \def\@gls@numlist@nextsep{}%
+         \def\@gls@numlist@lastsep{}%
+         \def\@gls@thislist{}%
+         \def\@gls@donext@def{}%
+         \renewcommand\do[1]{%
+           \protected@edef\@gls@thislist{%
+             \@gls@thislist
+             \noexpand\@gls@numlist@sep
+             ##1%
+           }%
+           \let\@gls@numlist@sep\@gls@numlist@nextsep
+           \def\@gls@numlist@nextsep{\glsnumlistsep}%
+           \@gls@donext@def
+           \def\@gls@donext@def{%
+             \def\@gls@numlist@lastsep{\glsnumlistlastsep}%
+           }%
+         }%
+         \expandafter \glsnumlistparser \expandafter{\the@numberlist}%
+         \let\@gls@numlist@sep\@gls@numlist@lastsep
+         \@gls@thislist
+      \egroup
+    }%
+  }
+}
+\newcommand*{\glsnumlistsep}{, }
+\newcommand*{\glsnumlistlastsep}{ \& }
+\newcommand*{\glshyperlink}[2][\glsentrytext{\@glo@label}]{%
+ \def\@glo@label{#2}%
+ \@glslink{\glolinkprefix\glsdetoklabel{#2}}{#1}}
+\define@key{glossadd}{counter}{\def\@gls@counter{#1}}
+\define@key{glossadd}{format}{\def\@glsnumberformat{#1}}
+\define@key{glossadd}{types}{\def\@glo@type{#1}}
+\newrobustcmd*{\glsadd}[2][]{%
+  \@gls@adjustmode
+  \glsdoifexists{#2}%
+  {%
+    \def\@glsnumberformat{glsnumberformat}%
+    \edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}%
+    \setkeys{glossadd}{#1}%
+    \@gls@saveentrycounter
+    \@gls@setsort{#2}%
+    \@@do@wrglossary{#2}%
+  }%
+}
+\newcommand*{\@gls@adjustmode}{}
+\AtBeginDocument{\renewcommand*{\@gls@adjustmode}{\ifvmode\mbox{}\fi}}
+\newrobustcmd*{\glsaddall}[1][]{%
+  \edef\@glo@type{\@glo@types}%
+  \setkeys{glossadd}{#1}%
+  \forallglsentries[\@glo@type]{\@glo@entry}{%
+    \glsadd[#1]{\@glo@entry}%
+  }%
+}
+\newrobustcmd*{\glsaddallunused}[1][\@glo@types]{%
+ \forallglsentries[#1]{\@glo@entry}%
+ {%
+    \ifglsused{\@glo@entry}{}{\glsadd[format=glsignore]{\@glo@entry}}%
+ }%
+}
+\newcommand*{\glsignore}[1]{}
+\edef\glsopenbrace{\expandafter\@gobble\string\{}
+\edef\glsclosebrace{\expandafter\@gobble\string\}}
+\edef\glsbackslash{\expandafter\@gobble\string\\}
+\edef\glsquote#1{\string"#1\string"}
+\edef\glspercentchar{\expandafter\@gobble\string\%}
+\edef\glstildechar{\string~}
+\ifglsxindy
+  \newcommand*{\@glsfirstletter}{A}
+\fi
+\newcommand*{\GlsSetXdyFirstLetterAfterDigits}{%
+  \@ifstar\s@GlsSetXdyFirstLetterAfterDigits\@GlsSetXdyFirstLetterAfterDigits}
+\ifglsxindy
+  \newcommand*{\@GlsSetXdyFirstLetterAfterDigits}[1]{%
+    \renewcommand*{\@glsfirstletter}{#1}}
+  \newcommand*{\s@GlsSetXdyFirstLetterAfterDigits}[1]{%
+    \renewcommand*{\@glsfirstletter}{#1}%
+    \@onelevel@sanitize\@glsfirstletter
+  }
+\else
+  \newcommand*{\@GlsSetXdyFirstLetterAfterDigits}[1]{%
+    \glsnoxindywarning\GlsSetXdyFirstLetterAfterDigits}
+  \newcommand*{\s@GlsSetXdyFirstLetterAfterDigits}{%
+    \@GlsSetXdyFirstLetterAfterDigits
+  }
+\fi
+\ifglsxindy
+  \newcommand*{\@xdynumbergrouporder}{:before \string"\@glsfirstletter\string"}
+\fi
+\newcommand*{\GlsSetXdyNumberGroupOrder}[1]{%
+ \@ifstar\s@GlsSetXdyNumberGroupOrder\@GlsSetXdyNumberGroupOrder
+}
+\ifglsxindy
+  \newcommand*{\@GlsSetXdyNumberGroupOrder}[1]{%
+    \renewcommand*{\@xdynumbergrouporder}{#1}%
+  }
+  \newcommand*{\s@GlsSetXdyNumberGroupOrder}[1]{%
+    \renewcommand*{\@xdynumbergrouporder}{#1}%
+    \@onelevel@sanitize\@xdynumbergrouporder
+  }
+\else
+  \newcommand*{\@GlsSetXdyNumberGroupOrder}[1]{%
+    \glsnoxindywarning\GlsSetXdyNumberGroupOrder}
+  \newcommand*{\s@GlsSetXdyNumberGroupOrder}{%
+    \@GlsSetXdyNumberGroupOrder}
+\fi
+\newcommand*{\@glsminrange}{2}
+\ifglsxindy
+  \newcommand*{\GlsSetXdyMinRangeLength}[1]{%
+    \renewcommand*{\@glsminrange}{#1}}
+\else
+  \newcommand*{\GlsSetXdyMinRangeLength}[1]{%
+    \glsnoxindywarning\GlsSetXdyMinRangeLength}
+\fi
+
+\ifglsxindy
+  \def\writeist{%
+    \ifundef{\glswrite}{\newwrite\glswrite}{}%
+    \@gls@addpredefinedattributes
+    \openout\glswrite=\istfilename
+    \write\glswrite{;; xindy style file created by the glossaries
+        package}%
+    \write\glswrite{;; for document '\jobname' on
+       \the\year-\the\month-\the\day}%
+    \write\glswrite{^^J; required styles^^J}
+    \@for\@xdystyle:=\@xdyrequiredstyles\do{%
+         \ifx\@xdystyle\@empty
+         \else
+           \protected@write\glswrite{}{(require
+             \string"\@xdystyle.xdy\string")}%
+         \fi
+    }%
+    \write\glswrite{^^J%
+       ; list of allowed attributes (number formats)^^J}%
+    \write\glswrite{(define-attributes ((\@xdyattributes)))}%
+    \write\glswrite{^^J; user defined alphabets^^J}%
+    \write\glswrite{\@xdyuseralphabets}%
+    \write\glswrite{^^J; location class definitions^^J}%
+    \@for\@gls@classI:=\@gls@xdy@locationlist\do{%
+      \protected@write\glswrite{}{(define-location-class
+        \string"\@gls@classI\string"^^J\space\space\space
+        (
+          :sep "{}{"
+          \csname @gls@xdy@Lclass@\@gls@classI\endcsname\space
+          :sep "}"
+        )
+        ^^J\space\space\space
+        :min-range-length \@glsminrange^^J%
+        )
+      }%
+      {%
+        \@for\@gls@classII:=\@gls@xdy@locationlist\do{%
+          \protected@write\glswrite{}{(define-location-class
+            \string"\@gls@classII-\@gls@classI\string"
+              ^^J\space\space\space
+            (
+              :sep "{"
+              \csname @gls@xdy@Lclass@\@gls@classII\endcsname\space
+              :sep "}{"
+              \csname @gls@xdy@Lclass@\@gls@classI\endcsname\space
+              :sep "}"
+            )
+            ^^J\space\space\space
+            :min-range-length \@glsminrange^^J%
+            )
+          }%
+        }%
+      }%
+    }%
+    \write\glswrite{^^J; user defined location classes}%
+    \write\glswrite{\@xdyuserlocationdefs}%
+    \write\glswrite{^^J; define cross-reference class^^J}%
+    \write\glswrite{(define-crossref-class \string"see\string"
+        :unverified )}%
+    \write\glswrite{(markup-crossref-list
+         :class \string"see\string"^^J\space\space\space
+         :open \string"\string\glsseeformat\string"
+         :close \string"{}\string")}%
+    \@xdycrossrefhook
+    \write\glswrite{^^J; define the order of the location classes}%
+    \write\glswrite{(define-location-class-order
+         (\@xdylocationclassorder))}%
+    \write\glswrite{^^J; define the glossary markup^^J}%
+    \write\glswrite{(markup-index^^J\space\space\space
+        :open \string"\string
+        \glossarysection[\string\glossarytoctitle]{\string
+        \glossarytitle}\string\glossarypreamble}%
+    \@for\@this@ctr:=\@xdycounters\do{%
+      {%
+        \@for\@this@attr:=\@xdyattributelist\do{%
+           \protected@write\glswrite{}{\string\providecommand*%
+             \expandafter\string
+             \csname glsX\@this@ctr X\@this@attr\endcsname[2]%
+             {%
+                \string\setentrycounter
+                  [\expandafter\@gobble\string\#1]{\@this@ctr}%
+                \expandafter\string
+                \csname\@this@attr\endcsname
+                  {\expandafter\@gobble\string\#2}%
+             }%
+           }%
+        }%
+      }%
+    }%
+    \write\glswrite{%
+        \string\begin
+        {theglossary}\string\glossaryheader\glstildechar n\string" ^^J\space
+        \space\space:close \string"\glspercentchar\glstildechar n\string
+          \end{theglossary}\string\glossarypostamble
+          \glstildechar n\string" ^^J\space\space\space
+        :tree)}%
+    \write\glswrite{(markup-letter-group-list
+        :sep \string"\string\glsgroupskip\glstildechar n\string")}%
+    \write\glswrite{(markup-indexentry
+        :open \string"\string\relax \string\glsresetentrylist
+           \glstildechar n\string")}%
+    \write\glswrite{(markup-locclass-list :open
+       \string"\glsopenbrace\string\glossaryentrynumbers
+         \glsopenbrace\string\relax\space \string"^^J\space\space\space
+       :sep \string", \string"
+       :close \string"\glsclosebrace\glsclosebrace\string")}%
+    \write\glswrite{(markup-locref-list
+       :sep \string"\string\delimN\space\string")}%
+    \write\glswrite{(markup-range
+       :sep \string"\string\delimR\space\string")}%
+    \@onelevel@sanitize\gls@suffixF
+    \@onelevel@sanitize\gls@suffixFF
+    \ifx\gls@suffixF\@empty
+    \else
+      \write\glswrite{(markup-range
+        :close "\gls@suffixF" :length 1 :ignore-end)}%
+    \fi
+    \ifx\gls@suffixFF\@empty
+    \else
+      \write\glswrite{(markup-range
+        :close "\gls@suffixFF" :length 2 :ignore-end)}%
+    \fi
+    \write\glswrite{^^J; define format to use for locations^^J}%
+    \write\glswrite{\@xdylocref}%
+    \write\glswrite{^^J; define letter group list format^^J}%
+    \write\glswrite{(markup-letter-group-list
+       :sep \string"\string\glsgroupskip\glstildechar n\string")}%
+    \write\glswrite{^^J; letter group headings^^J}%
+    \write\glswrite{(markup-letter-group
+        :open-head \string"\string\glsgroupheading
+        \glsopenbrace\string"^^J\space\space\space
+        :close-head \string"\glsclosebrace\string")}%
+    \write\glswrite{^^J; additional letter groups^^J}%
+    \write\glswrite{\@xdylettergroups}%
+    \write\glswrite{^^J; additional sort rules^^J}
+    \write\glswrite{\@xdysortrules}%
+    \@gls@writeisthook
+    \closeout\glswrite
+    \let\writeist\relax
+  }
+\else
+  \edef\@gls@actualchar{\string?}
+  \edef\@gls@encapchar{\string|}
+  \edef\@gls@levelchar{\string!}
+  \edef\@gls@quotechar{\string"}%
+  \let\GlsSetQuote\gls@nosetquote
+  \def\writeist{\relax
+   \ifundef{\glswrite}{\newwrite\glswrite}{}\relax
+   \openout\glswrite=\istfilename
+    \write\glswrite{\glspercentchar\space makeindex style file
+      created by the glossaries package}
+    \write\glswrite{\glspercentchar\space for document
+      '\jobname' on \the\year-\the\month-\the\day}
+    \write\glswrite{actual '\@gls@actualchar'}
+    \write\glswrite{encap '\@gls@encapchar'}
+    \write\glswrite{level '\@gls@levelchar'}
+    \write\glswrite{quote '\@gls@quotechar'}
+    \write\glswrite{keyword \string"\string\\glossaryentry\string"}
+    \write\glswrite{preamble \string"\string\\glossarysection[\string
+      \\glossarytoctitle]{\string\\glossarytitle}\string
+      \\glossarypreamble\string\n\string\\begin{theglossary}\string
+      \\glossaryheader\string\n\string"}
+    \write\glswrite{postamble \string"\string\%\string\n\string
+      \\end{theglossary}\string\\glossarypostamble\string\n
+      \string"}
+    \write\glswrite{group_skip \string"\string\\glsgroupskip\string\n
+      \string"}
+    \write\glswrite{item_0 \string"\string\%\string\n\string"}
+    \write\glswrite{item_1 \string"\string\%\string\n\string"}
+    \write\glswrite{item_2 \string"\string\%\string\n\string"}
+    \write\glswrite{item_01 \string"\string\%\string\n\string"}
+    \write\glswrite{item_x1
+      \string"\string\\relax \string\\glsresetentrylist\string\n
+      \string"}
+    \write\glswrite{item_12 \string"\string\%\string\n\string"}
+    \write\glswrite{item_x2
+      \string"\string\\relax \string\\glsresetentrylist\string\n
+      \string"}
+    \write\glswrite{delim_0 \string"\string\{\string
+      \\glossaryentrynumbers\string\{\string\\relax \string"}
+    \write\glswrite{delim_1 \string"\string\{\string
+      \\glossaryentrynumbers\string\{\string\\relax \string"}
+    \write\glswrite{delim_2 \string"\string\{\string
+      \\glossaryentrynumbers\string\{\string\\relax \string"}
+    \write\glswrite{delim_t \string"\string\}\string\}\string"}
+    \write\glswrite{delim_n \string"\string\\delimN \string"}
+    \write\glswrite{delim_r \string"\string\\delimR \string"}
+    \write\glswrite{headings_flag 1}
+    \write\glswrite{heading_prefix
+       \string"\string\\glsgroupheading\string\{\string"}
+    \write\glswrite{heading_suffix
+       \string"\string\}\string\\relax
+       \string\\glsresetentrylist \string"}
+    \write\glswrite{symhead_positive \string"glssymbols\string"}
+    \write\glswrite{numhead_positive \string"glsnumbers\string"}
+    \write\glswrite{page_compositor \string"\glscompositor\string"}
+    \@gls@escbsdq\gls@suffixF
+    \@gls@escbsdq\gls@suffixFF
+    \ifx\gls@suffixF\@empty
+    \else
+      \write\glswrite{suffix_2p \string"\gls@suffixF\string"}
+    \fi
+    \ifx\gls@suffixFF\@empty
+    \else
+      \write\glswrite{suffix_3p \string"\gls@suffixFF\string"}
+    \fi
+    \@gls@writeisthook
+    \closeout\glswrite
+    \let\writeist\relax
+  }
+\fi
+\newcommand*{\GlsSetWriteIstHook}[1]{\renewcommand*{\@gls@writeisthook}{#1}}
+\@onlypremakeg\GlsSetWriteIstHook
+\newcommand*{\@gls@writeisthook}{}
+\ifglsxindy
+ \newcommand*{\GlsSetQuote}[1]{\glsnomakeindexwarning\GlsSetQuote}
+ \newcommand*{\gls@nosetquote}[1]{\glsnomakeindexwarning\GlsSetQuote}
+\else
+ \newcommand*{\GlsSetQuote}[1]{\edef\@gls@quotechar{\string#1}%
+    \@ifpackageloaded{tracklang}%
+    {%
+      \IfTrackedLanguage{german}%
+      {%
+        \def\@@gls@extramakeindexopts{-g}%
+      }%
+      {}%
+    }%
+    {}%
+   \edef\@gls@docheckquotedef{%
+     \noexpand\def\noexpand\@gls@checkquote####1#1####2#1####3\noexpand\null{%
+       \noexpand\@gls@tmpb=\noexpand\expandafter{\noexpand\@gls@checkedmkidx}%
+       \noexpand\toks@={####1}%
+       \noexpand\ifx\noexpand\null####2\noexpand\null
+        \noexpand\ifx\noexpand\null####3\noexpand\null
+         \noexpand\edef\noexpand\@gls@checkedmkidx{%
+           \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@}%
+         \noexpand\def\noexpand\@@gls@checkquote{\noexpand\relax}%
+        \noexpand\else
+         \noexpand\edef\noexpand\@gls@checkedmkidx{%
+           \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@
+           \noexpand\@gls@quotechar\noexpand\@gls@quotechar
+           \noexpand\@gls@quotechar\noexpand\@gls@quotechar}%
+         \noexpand\def\noexpand\@@gls@checkquote{%
+           \noexpand\@gls@checkquote####3\noexpand\null}%
+        \noexpand\fi
+       \noexpand\else
+        \noexpand\edef\noexpand\@gls@checkedmkidx{%
+          \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@
+          \noexpand\@gls@quotechar\noexpand\@gls@quotechar}%
+        \noexpand\ifx\noexpand\null####3\noexpand\null
+          \noexpand\def\noexpand\@@gls@checkquote{%
+            \noexpand\@gls@checkquote####2#1#1\noexpand\null}%
+        \noexpand\else
+          \noexpand\def\noexpand\@@gls@checkquote{%
+            \noexpand\@gls@checkquote####2#1####3\noexpand\null}%
+        \noexpand\fi
+       \noexpand\fi
+       \noexpand\@@gls@checkquote
+     }%
+   }%
+   \@gls@docheckquotedef
+   \edef\@gls@docheckquotedef{%
+     \noexpand\renewcommand{\noexpand\@gls@checkmkidxchars}[1]{%
+       \noexpand\def\noexpand\@gls@checkedmkidx{}%
+       \noexpand\expandafter\noexpand\@gls@checkquote####1\noexpand\@nil
+         #1#1\noexpand\null
+       \noexpand\expandafter\noexpand\@gls@updatechecked
+         \noexpand\@gls@checkedmkidx{####1}%
+       \noexpand\def\noexpand\@gls@checkedmkidx{}%
+       \noexpand\expandafter\noexpand\@gls@checkescquote####1\noexpand\@nil
+         \expandonce{\csname#1\endcsname}\expandonce{\csname#1\endcsname}%
+         \noexpand\null
+       \noexpand\expandafter\noexpand\@gls@updatechecked
+         \noexpand\@gls@checkedmkidx{####1}%
+       \noexpand\def\noexpand\@gls@checkedmkidx{}%
+       \noexpand\expandafter\noexpand\@gls@checkescactual####1\noexpand\@nil
+         \noexpand\?\noexpand\?\noexpand\null
+       \noexpand\expandafter\noexpand\@gls@updatechecked
+         \noexpand\@gls@checkedmkidx{####1}%
+       \noexpand\def\noexpand\@gls@checkedmkidx{}%
+       \noexpand\expandafter\noexpand\@gls@checkactual####1\noexpand\@nil
+         \noexpand?\noexpand?\noexpand\null
+       \noexpand\expandafter\noexpand\@gls@updatechecked
+         \noexpand\@gls@checkedmkidx{####1}%
+       \noexpand\def\noexpand\@gls@checkedmkidx{}%
+       \noexpand\expandafter\noexpand\@gls@checkbar####1\noexpand\@nil
+         \noexpand|\noexpand|\noexpand\null
+       \noexpand\expandafter\noexpand\@gls@updatechecked
+         \noexpand\@gls@checkedmkidx{####1}%
+       \noexpand\def\noexpand\@gls@checkedmkidx{}%
+       \noexpand\expandafter\noexpand\@gls@checkescbar####1\noexpand\@nil
+         \noexpand\|\noexpand\|\noexpand\null
+       \noexpand\expandafter\noexpand\@gls@updatechecked
+         \noexpand\@gls@checkedmkidx{####1}%
+       \noexpand\def\noexpand\@gls@checkedmkidx{}%
+       \noexpand\expandafter\noexpand\@gls@checklevel####1\noexpand\@nil
+         \noexpand!\noexpand!\noexpand\null
+       \noexpand\expandafter\noexpand\@gls@updatechecked
+         \noexpand\@gls@checkedmkidx{####1}%
+     }%
+   }%
+   \@gls@docheckquotedef
+   \edef\@gls@docheckquotedef{%
+     \noexpand\def\noexpand\@gls@checkescquote####1%
+       \expandonce{\csname#1\endcsname}####2\expandonce{\csname#1\endcsname}%
+       ####3\noexpand\null{%
+       \noexpand\@gls@tmpb=\noexpand\expandafter{\noexpand\@gls@checkedmkidx}%
+       \noexpand\toks@={####1}%
+       \noexpand\ifx\noexpand\null####2\noexpand\null
+        \noexpand\ifx\noexpand\null####3\noexpand\null
+         \noexpand\edef\noexpand\@gls@checkedmkidx{%
+           \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@}%
+         \noexpand\def\noexpand\@@gls@checkescquote{\noexpand\relax}%
+         \noexpand\else
+         \noexpand\edef\noexpand\@gls@checkedmkidx{%
+           \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@
+           \noexpand\@gls@quotechar\noexpand\string\expandonce{%
+             \csname#1\endcsname}\noexpand\@gls@quotechar
+           \noexpand\@gls@quotechar\noexpand\string\expandonce{%
+             \csname#1\endcsname}\noexpand\@gls@quotechar}%
+         \noexpand\def\noexpand\@@gls@checkescquote{%
+           \noexpand\@gls@checkescquote####3\noexpand\null}%
+        \noexpand\fi
+        \noexpand\else
+        \noexpand\edef\noexpand\@gls@checkedmkidx{%
+          \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@
+          \noexpand\@gls@quotechar\noexpand\string
+            \expandonce{\csname#1\endcsname}\noexpand\@gls@quotechar}%
+        \noexpand\ifx\noexpand\null####3\noexpand\null
+          \noexpand\def\noexpand\@@gls@checkescquote{%
+           \noexpand\@gls@checkescquote####2\expandonce{\csname#1\endcsname}%
+           \expandonce{\csname#1\endcsname}\noexpand\null}%
+        \noexpand\else
+          \noexpand\def\noexpand\@@gls@checkescquote{%
+            \noexpand\@gls@checkescquote####2\expandonce{\csname#1\endcsname}%
+            ####3\noexpand\null}%
+        \noexpand\fi
+       \noexpand\fi
+      \noexpand\@@gls@checkescquote
+     }%
+   }%
+   \@gls@docheckquotedef
+ }
+ \newcommand*{\gls@nosetquote}[1]{\PackageError{glossaries}%
+   {\string\GlsSetQuote\space not permitted here}%
+   {Move \string\GlsSetQuote\space earlier in the preamble, as
+    soon as possible after glossaries.sty has been loaded}}
+\fi
+\newcommand*{\@gls@extramakeindexopts}[1]{}
+\newcommand{\noist}{%
+  \@gls@addpredefinedattributes
+  \let\writeist\relax
+}
+\newcommand*{\@makeglossary}[1]{%
+  \ifglossaryexists{#1}%
+  {%
+    \ifglssavewrites
+      \expandafter\newtoks\csname glo@#1@filetok\endcsname
+    \else
+      \expandafter\newwrite\csname glo@#1@file\endcsname
+      \expandafter\@glsopenfile\csname glo@#1@file\endcsname{#1}%
+    \fi
+    \@gls@renewglossary
+    \writeist
+  }%
+  {%
+    \PackageError{glossaries}%
+    {Glossary type `#1' not defined}%
+    {New glossaries must be defined before using \string\makeglossaries}%
+  }%
+}
+\newcommand*{\@glsopenfile}[2]{%
+  \immediate\openout#1=\jobname.\csname @glotype@#2@out\endcsname
+  \PackageInfo{glossaries}{Writing glossary file
+     \jobname.\csname @glotype@#2@out\endcsname}%
+}
+\newcommand*{\@closegls}[1]{%
+  \closeout\csname glo@#1@file\endcsname
+}
+\ifglsxindy
+ \newcommand*{\@gls@automake}[1]{%
+   \ifglossaryexists{#1}
+   {%
+     \@closegls{#1}%
+     \ifdefstring{\glsorder}{letter}%
+      {\def\@gls@order{-M ord/letorder }}%
+      {\let\@gls@order\@empty}%
+     \ifcsundef{@xdy@#1@language}%
+      {\let\@gls@langmod\@xdy@main@language}%
+      {\letcs\@gls@langmod{@xdy@#1@language}}%
+     \edef\@gls@dothiswrite{\noexpand\write18{xindy
+       -I xindy
+       \@gls@order
+       -L \@gls@langmod\space
+       -M \gls@istfilebase\space
+       -C \gls@codepage\space
+       -t \jobname.\csuse{@glotype@#1@log}
+       -o \jobname.\csuse{@glotype@#1@in}
+       \jobname.\csuse{@glotype@#1@out}}%
+     }%
+     \@gls@dothiswrite
+   }%
+   {%
+     \GlossariesWarning{Can't make glossary `#1', it doesn't exist}%
+   }%
+ }
+\else
+ \newcommand*{\@gls@automake}[1]{%
+   \ifglossaryexists{#1}
+   {%
+     \@closegls{#1}%
+     \ifdefstring{\glsorder}{letter}%
+      {\def\@gls@order{-l }}%
+      {\let\@gls@order\@empty}%
+     \edef\@gls@dothiswrite{\noexpand\write18{makeindex \@gls@order
+       -s \istfilename\space
+       -t \jobname.\csuse{@glotype@#1@log}
+       -o \jobname.\csuse{@glotype@#1@in}
+       \jobname.\csuse{@glotype@#1@out}}%
+     }%
+     \@gls@dothiswrite
+   }%
+   {%
+     \GlossariesWarning{Can't make glossary `#1', it doesn't exist}%
+   }%
+ }
+\fi
+\ifglsxindy
+ \newcommand*{\@gls@automake@immediate}[1]{%
+   \ifglossaryexists{#1}
+   {%
+     \IfFileExists{\jobname.\csuse{@glotype@#1@out}}%
+     {%
+       \ifdefstring{\glsorder}{letter}%
+        {\def\@gls@order{-M ord/letorder }}%
+        {\let\@gls@order\@empty}%
+       \ifcsundef{@xdy@#1@language}%
+        {\let\@gls@langmod\@xdy@main@language}%
+        {\letcs\@gls@langmod{@xdy@#1@language}}%
+       \edef\@gls@dothiswrite{\noexpand\immediate\noexpand\write18{xindy
+         -I xindy
+         \@gls@order
+         -L \@gls@langmod\space
+         -M \gls@istfilebase\space
+         -C \gls@codepage\space
+         -t \jobname.\csuse{@glotype@#1@log}
+         -o \jobname.\csuse{@glotype@#1@in}
+         \jobname.\csuse{@glotype@#1@out}}%
+       }%
+       \@gls@dothiswrite
+     }%
+     {\GlossariesWarning{can't automake `#1': \jobname.\csuse{@glotype@#1@out}
+      doesn't exist. Rerun may be required}}%
+   }%
+   {%
+     \GlossariesWarning{Can't make glossary `#1', it doesn't exist}%
+   }%
+ }
+\else
+ \newcommand*{\@gls@automake@immediate}[1]{%
+   \ifglossaryexists{#1}
+   {%
+     \IfFileExists{\jobname.\csuse{@glotype@#1@out}}%
+     {%
+       \ifdefstring{\glsorder}{letter}%
+        {\def\@gls@order{-l }}%
+        {\let\@gls@order\@empty}%
+       \edef\@gls@dothiswrite{\noexpand\immediate\noexpand\write18{makeindex \@gls@order
+         -s \istfilename\space
+         -t \jobname.\csuse{@glotype@#1@log}
+         -o \jobname.\csuse{@glotype@#1@in}
+         \jobname.\csuse{@glotype@#1@out}}%
+       }%
+       \@gls@dothiswrite
+     }%
+     {\GlossariesWarning{can't automake `#1': \jobname.\csuse{@glotype@#1@out}
+      doesn't exist. Rerun may be required}}%
+   }%
+   {%
+     \GlossariesWarning{Can't make glossary `#1', it doesn't exist}%
+   }%
+ }
+\fi
+\newcommand*{\@warn@nomakeglossaries}{}
+\newcommand*{\warn@nomakeglossaries}{\@warn@nomakeglossaries}
+\newcommand{\@gls@@automake@immediate}{%
+ \ifnum\gls@automake@nr=2\relax
+   \@for\@gls@type:=\@glo@types\do{%
+      \ifdefempty{\@gls@type}{}%
+      {\@gls@automake@immediate{\@gls@type}}%
+   }%
+   \glsautomakefalse
+   \renewcommand*{\@gls@doautomake}{}%
+ \fi
+}
+\newcommand*{\makeglossaries}{%
+ \@domakeglossaries
+ {%
+   \@gls@@automake@immediate
+  \ifundef{\glswrite}{\newwrite\glswrite}{}%
+  \protected@write\@auxout{}{\string\providecommand\string\@glsorder[1]{}}
+  \protected@write\@auxout{}{\string\providecommand\string\@istfilename[1]{}}
+  \ifundef\@@gls@extramakeindexopts
+  {}%
+  {%
+    \protected@write\@auxout{}{\string\providecommand
+       \string\@gls@extramakeindexopts[1]{}}
+    \protected@write\@auxout{}{\string\@gls@extramakeindexopts
+      {\@@gls@extramakeindexopts}}%
+  }%
+  \protected@write\@auxout{}{\string\@istfilename{\istfilename}}%
+  \protected@write\@auxout{}{\string\@glsorder{\glsorder}}
+  \@for\@glo@type:=\@glo@types\do{%
+    \ifthenelse{\equal{\@glo@type}{}}{}{%
+    \@makeglossary{\@glo@type}}%
+  }%
+  \renewcommand*\newglossary[4][]{%
+  \PackageError{glossaries}{New glossaries
+  must be created before \string\makeglossaries}{You need
+  to move \string\makeglossaries\space after all your
+  \string\newglossary\space commands}}%
+  \let\@makeglossary\@gobble
+  \let\makeglossaries\relax
+  \@disable@onlypremakeg
+  \let\gls@checkseeallowed\relax
+  \let\warn@nomakeglossaries\relax
+  \def\warn@noprintglossary{%
+    \ifdefstring{\@glo@types}{,}%
+    {%
+      \GlossariesWarningNoLine{No glossaries have been defined}%
+    }%
+    {%
+      \GlossariesWarningNoLine{No \string\printglossary\space
+        or \string\printglossaries\space
+        found. ^^J(Remove \string\makeglossaries\space if you
+        don't want any glossaries.) ^^JThis document will not
+        have a glossary}%
+    }%
+  }%
+  \ifglssavenumberlist
+    \edef\@gls@dodeflistparser{\noexpand\DeclareListParser
+      {\noexpand\glsnumlistparser}{\delimN}}%
+    \@gls@dodeflistparser
+  \fi
+  \let\makenoidxglossaries\@no@makeglossaries
+  \renewcommand*{\@printgloss@setsort}{%
+    \let\@glo@assign@sortkey\@glo@no@assign@sortkey
+  }%
+  \ifglsautomake
+    \renewcommand*{\@gls@doautomake}{%
+      \@for\@gls@type:=\@glo@types\do{%
+        \ifdefempty{\@gls@type}{}%
+        {\@gls@automake{\@gls@type}}%
+      }%
+    }%
+  \fi
+  \@glo@check@sortallowed\makeglossaries
+ }%
+}
+\@onlypreamble{\makeglossaries}
+\AtEndDocument{%
+  \warn@nomakeglossaries
+  \warn@noprintglossary
+}
+\newcommand*{\makenoidxglossaries}{%
+ \@domakeglossaries
+ {%
+  \renewcommand{\@gls@noref@warn}[1]{%
+    \GlossariesWarning{Empty glossary for
+    \string\printnoidxglossary[type={##1}].
+    Rerun may be required (or you may have forgotten to use
+    commands like \string\gls)}%
+  }%
+  \let\@gls@checkmkidxchars\@gobble
+  \glsesclocationsfalse
+  \let\@@do@@wrglossary\gls@noidxglossary
+  \let\@gls@getgrouptitle\@gls@noidx@getgrouptitle
+  \let\gls@checkseeallowed\relax
+  \renewcommand{\@do@seeglossary}[2]{%
+    \edef\@gls@label{\glsdetoklabel{##1}}%
+    \protected@write\@auxout{}{%
+      \string\@gls@reference
+        {\csname glo@\@gls@label @type\endcsname}%
+        {\@gls@label}%
+        {%
+          \string\glsseeformat##2{}%
+        }%
+    }%
+  }%
+  \AtBeginDocument
+  {%
+    \write\@auxout{\string\providecommand\string\@gls@reference[3]{}}%
+  }%
+  \def\warn@noprintglossary{%
+    \GlossariesWarningNoLine{No \string\printnoidxglossary\space
+      or \string\printnoidxglossaries ^^J
+      found. (Remove \string\makenoidxglossaries\space if you
+      don't want any glossaries.)^^JThis document will not have a glossary}%
+  }%
+  \let\warn@nomakeglossaries\relax
+  \let\makeglossaries\@no@makeglossaries
+  \renewcommand*{\@printgloss@setsort}{%
+    \let\@glo@assign@sortkey\@@glo@assign@sortkey
+    \def\@glo@sorttype{\@glo@default@sorttype}%
+  }%
+  \renewcommand*\new@glossaryentry[2]{%
+    \PackageError{glossaries}{Glossary entries must be
+     defined in the preamble^^Jwhen you use
+     \string\makenoidxglossaries}%
+    {Either move your definitions to the preamble or use
+     \string\makeglossaries}%
+  }%
+  \renewcommand*{\glsentrynumberlist}[1]{%
+    \letcs{\@gls@loclist}{glo@\glsdetoklabel{##1}@loclist}%
+    \ifdef\@gls@loclist
+    {%
+      \glsnoidxloclist{\@gls@loclist}%
+    }%
+    {%
+      ??\glsdoifexists{##1}%
+      {%
+        \GlossariesWarning{Missing location list for `##1'. Either
+          a rerun is required or you haven't referenced the entry}%
+      }%
+    }%
+  }%
+  \renewcommand*{\glsdisplaynumberlist}[1]{%
+    \letcs{\@gls@loclist}{glo@\glsdetoklabel{##1}@loclist}%
+    \ifdef\@gls@loclist
+    {%
+      \def\@gls@noidxloclist@sep{%
+        \def\@gls@noidxloclist@sep{%
+          \def\@gls@noidxloclist@sep{%
+            \glsnumlistsep
+          }%
+          \def\@gls@noidxloclist@finalsep{\glsnumlistlastsep}%
+        }%
+      }%
+      \def\@gls@noidxloclist@finalsep{}%
+      \def\@gls@noidxloclist@prev{}%
+      \forlistloop{\glsnoidxdisplayloclisthandler}{\@gls@loclist}%
+      \@gls@noidxloclist@finalsep
+      \@gls@noidxloclist@prev
+    }%
+    {%
+      ??\glsdoifexists{##1}%
+      {%
+        \GlossariesWarning{Missing location list for `##1'. Either
+          a rerun is required or you haven't referenced the entry}%
+      }%
+    }%
+  }%
+  \renewcommand*{\glsnumberlistloop}[3]{%
+    \letcs{\@gls@loclist}{glo@\glsdetoklabel{##1}@loclist}%
+    \let\@gls@org@glsnoidxdisplayloc\glsnoidxdisplayloc
+    \let\@gls@org@glsseeformat\glsseeformat
+    \let\glsnoidxdisplayloc##2\relax
+    \let\glsseeformat##3\relax
+    \ifdef\@gls@loclist
+    {%
+      \forlistloop{\glsnoidxnumberlistloophandler}{\@gls@loclist}%
+    }%
+    {%
+      ??\glsdoifexists{##1}%
+      {%
+        \GlossariesWarning{Missing location list for `##1'. Either
+          a rerun is required or you haven't referenced the entry}%
+      }%
+    }%
+    \let\glsnoidxdisplayloc\@gls@org@glsnoidxdisplayloc
+    \let\glsseeformat\@gls@org@glsseeformat
+  }%
+  \let\@@gls@sanitizesort\@gls@noidx@sanitizesort
+  \let\@@gls@nosanitizesort\@@gls@noidx@nosanitizesort
+  \@gls@noidx@setsanitizesort
+  \@glo@check@sortallowed\makenoidxglossaries
+ }%
+}
+\@onlypreamble{\makenoidxglossaries}
+\newcommand*{\glsnumberlistloop}[2]{%
+   \PackageError{glossaries}{\string\glsnumberlistloop\space
+    only works with \string\makenoidxglossaries}{}%
+}
+\newcommand*{\glsnoidxnumberlistloophandler}[1]{%
+  #1%
+}
+\newcommand*{\@no@makeglossaries}{%
+  \PackageError{glossaries}{You can't use both
+  \string\makeglossaries\space and \string\makenoidxglossaries}%
+  {Either use one or other (or none) of those commands but not both
+  together.}%
+}
+\newcommand{\@gls@noref@warn}[1]{%
+  \GlossariesWarning{\string\makenoidxglossaries\space
+   is required to make \string\printnoidxglossary[type={#1}] work}%
+}
+\newcommand*{\gls@noidxglossary}{%
+  \protected@write\@auxout{}{%
+    \string\@gls@reference
+      {\csname glo@\@gls@label @type\endcsname}%
+      {\@gls@label}%
+      {\string\glsnoidxdisplayloc
+        {\@glo@counterprefix}%
+        {\@gls@counter}%
+        {\@glsnumberformat}%
+        {\@glslocref}%
+      }%
+  }%
+}
+\providecommand\istfile{\glswrite}
+\AtEndDocument{%
+  \glswritefiles
+}
+\newcommand*{\@glswritefiles}{%
+  \forallglossaries{\@glo@type}{%
+     \ifcsundef{glo@\@glo@type @filetok}%
+     {%
+        \def\gls@tmp{}%
+     }%
+     {%
+        \edef\gls@tmp{\expandafter\the
+           \csname glo@\@glo@type @filetok\endcsname}%
+     }%
+     \ifx\gls@tmp\@empty
+        \ifx\@glo@type\glsdefaulttype
+          \GlossariesWarningNoLine{Glossary `\@glo@type' has no
+             entries.^^JRemember to use package option `nomain' if
+you
+             don't want to^^Juse the main glossary}%
+        \else
+          \GlossariesWarningNoLine{Glossary `\@glo@type' has no
+             entries}%
+        \fi
+     \else
+        \@glsopenfile{\glswrite}{\@glo@type}%
+        \immediate\write\glswrite{%
+           \expandafter\the
+             \csname glo@\@glo@type @filetok\endcsname}%
+        \immediate\closeout\glswrite
+     \fi
+  }%
+}
+\newcommand*{\gls@glossary}[1]{%
+  \@gls@glossary{#1}%
+}
+\newcommand*{\@gls@glossary}[2]{%
+  \if@gls@debug
+    \PackageInfo{glossaries}{wrglossary(#1)(#2)}%
+  \fi
+}
+\newcommand{\@gls@renewglossary}{%
+  \gdef\@gls@glossary##1{\@bsphack\begingroup\gls@wrglossary{##1}}%
+  \let\@gls@renewglossary\@empty
+}
+\newcommand*{\gls@wrglossary}[2]{%
+  \ifglssavewrites
+    \protected@edef\@gls@tmp{\the\csname glo@#1@filetok\endcsname#2}%
+    \expandafter\global\expandafter\csname glo@#1@filetok\endcsname
+       \expandafter{\@gls@tmp^^J}%
+  \else
+    \ifcsdef{glo@#1@file}%
+    {%
+      \expandafter\protected@write\csname glo@#1@file\endcsname{%
+        \gls@disablepagerefexpansion}{#2}%
+    }%
+    {%
+       \ifignoredglossary{#1}{}%
+       {%
+          \GlossariesWarning{No file defined for glossary `#1'}%
+       }%
+    }%
+  \fi
+  \endgroup\@esphack
+}
+\newcommand*{\@do@wrglossary}[1]{%
+  \glswriteentry{#1}{\@@do@wrglossary{#1}}%
+}
+\newcommand*{\glswriteentry}[2]{%
+  \ifglsindexonlyfirst
+    \ifglsused{#1}{}{#2}%
+  \else
+    #2%
+  \fi
+}
+\newcommand{\gls@protected@pagefmts}{\gls@numberpage,\gls@alphpage,%
+ \gls@Alphpage,\gls@romanpage,\gls@Romanpage,\gls@arabicpage}
+\newcommand*{\gls@disablepagerefexpansion}{%
+  \@for\@gls@this:=\gls@protected@pagefmts\do
+  {%
+    \expandafter\let\@gls@this\relax
+  }%
+}
+\newcommand*{\gls@alphpage}{\@alph\c@page}
+\newcommand*{\gls@Alphpage}{\@Alph\c@page}
+\newcommand*{\gls@numberpage}{\number\c@page}
+\newcommand*{\gls@arabicpage}{\@arabic\c@page}
+\newcommand*{\gls@romanpage}{\romannumeral\c@page}
+\newcommand*{\gls@Romanpage}{\@Roman\c@page}
+\newcommand*{\glsaddprotectedpagefmt}[1]{%
+  \eappto\gls@protected@pagefmts{,\expandonce{\csname gls#1page\endcsname}}%
+  \csedef{gls#1page}{\expandonce{\csname#1\endcsname}\noexpand\c@page}%
+  \eappto\@wrglossarynumberhook{%
+    \noexpand\let\expandonce{\csname org@gls#1\endcsname}%
+      \expandonce{\csname#1\endcsname}%
+    \noexpand\def\expandonce{\csname#1\endcsname}{%
+      \noexpand\@wrglossary@pageformat
+         \expandonce{\csname gls#1page\endcsname}%
+         \expandonce{\csname org@gls#1\endcsname}%
+    }%
+  }%
+}
+\newcommand*\@wrglossarynumberhook{}
+\newcommand{\@wrglossary@pageformat}[3]{%
+  \ifx#3\c@page #1\else #2#3\fi
+}
+\newcommand*{\@@do@wrglossary}[1]{%
+  \ifglsesclocations
+    \@@do@esc@wrglossary{#1}%
+  \else
+    \@@do@noesc@wrglossary{#1}%
+  \fi
+}
+\newcommand*{\@@do@noesc@wrglossary}[1]{%
+  \expandafter\def\expandafter\@glslocref\expandafter{\theglsentrycounter}%
+  \expandafter\def\expandafter\@glsHlocref\expandafter{\theHglsentrycounter}%
+  \ifx\@glsHlocref\@glslocref
+    \def\@glo@counterprefix{}%
+  \else
+    \protected@edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix
+      {\@glslocref}{\@glsHlocref}%
+    }%
+    \@do@gls@getcounterprefix
+  \fi
+  \edef\@gls@label{\glsdetoklabel{#1}}%
+  \@@do@@wrglossary
+}
+\newif\ifglswrallowprimitivemods
+\glswrallowprimitivemodstrue
+\newcommand*{\@@do@esc@wrglossary}[1]{% please read documented code!
+  \begingroup
+    \let\gls@orgthe\the
+    \let\gls@orgnumber\number
+    \let\gls@orgarabic\@arabic
+    \let\gls@orgromannumeral\romannumeral
+    \let\gls@orgalph\@alph
+    \let\gls@orgAlph\@Alph
+    \let\gls@orgRoman\@Roman
+    \ifglswrallowprimitivemods
+      \def\gls@the##1{%
+        \ifx##1\c@page \gls@numberpage\else\gls@orgthe##1\fi}%
+      \def\the{\expandafter\gls@the}%
+      \def\gls@number##1{%
+        \ifx##1\c@page \gls@numberpage\else\gls@orgnumber##1\fi}%
+      \def\number{\expandafter\gls@number}%
+    \fi
+    \def\@arabic##1{%
+      \ifx##1\c@page \gls@arabicpage\else\gls@orgarabic##1\fi}%
+    \def\romannumeral##1{%
+      \ifx##1\c@page \gls@romanpage\else\gls@orgromannumeral##1\fi}%
+    \def\@Roman##1{%
+      \ifx##1\c@page \gls@Romanpage\else\gls@orgRoman##1\fi}%
+    \def\@alph##1{%
+      \ifx##1\c@page \gls@alphpage\else\gls@orgalph##1\fi}%
+    \def\@Alph##1{%
+      \ifx##1\c@page \gls@Alphpage\else\gls@orgAlph##1\fi}%
+   \@wrglossarynumberhook
+    \gls@disablepagerefexpansion
+    \protected@xdef\@glslocref{\theglsentrycounter}%
+  \endgroup
+  \@gls@checkmkidxchars\@glslocref
+  \expandafter\ifx\theHglsentrycounter\theglsentrycounter\relax
+    \def\@glo@counterprefix{}%
+  \else
+    \protected@edef\@glsHlocref{\theHglsentrycounter}%
+    \@gls@checkmkidxchars\@glsHlocref
+    \edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix
+      {\@glslocref}{\@glsHlocref}%
+    }%
+    \@do@gls@getcounterprefix
+  \fi
+  \edef\@gls@label{\glsdetoklabel{#1}}%
+  \@@do@@wrglossary
+}
+\newcommand*{\@@do@@wrglossary}{%
+  \ifglsxindy
+    \expandafter\@glo@check@mkidxrangechar\@glsnumberformat\@nil
+    \def\@glo@range{}%
+    \expandafter\if\@glo@prefix(\relax
+      \def\@glo@range{:open-range}%
+    \else
+      \expandafter\if\@glo@prefix)\relax
+        \def\@glo@range{:close-range}%
+      \fi
+    \fi
+    \gls@glossary{\csname glo@\@gls@label @type\endcsname}{%
+    (indexentry :tkey (\csname glo@\@gls@label @index\endcsname)
+      :locref \string"{\@glo@counterprefix}{\@glslocref}\string" %
+      :attr \string"\@gls@counter\@glo@suffix\string"
+      \@glo@range
+    )
+    }%
+  \else
+    \@set@glo@numformat{\@glo@numfmt}{\@gls@counter}{\@glsnumberformat}%
+      {\@glo@counterprefix}%
+    \gls@glossary{\csname glo@\@gls@label @type\endcsname}{%
+    \string\glossaryentry{\csname glo@\@gls@label @index\endcsname
+      \@gls@encapchar\@glo@numfmt}{\@glslocref}}%
+  \fi
+}
+\newcommand*\@gls@getcounterprefix[2]{%
+  \edef\@gls@thisloc{#1}\edef\@gls@thisHloc{#2}%
+  \ifx\@gls@thisloc\@gls@thisHloc
+    \def\@glo@counterprefix{}%
+  \else
+    \def\@gls@get@counterprefix##1.#1##2\end@getprefix{%
+      \def\@glo@tmp{##2}%
+      \ifx\@glo@tmp\@empty
+        \def\@glo@counterprefix{}%
+      \else
+        \def\@glo@counterprefix{##1}%
+      \fi
+    }%
+    \@gls@get@counterprefix#2.#1\end@getprefix
+    \ifx\@glo@counterprefix\@empty
+      \GlossariesWarning{Hyper target `#2' can't be formed by
+       prefixing^^Jlocation `#1'. You need to modify the
+       definition of \string\theH\@gls@counter^^Jotherwise you
+       will get the warning: "`name{\@gls@counter.#1}' has been^^J
+       referenced but does not exist"}%
+    \fi
+  \fi
+}
+\newcommand{\@do@seeglossary}[2]{%
+\def\@gls@xref{#2}%
+\@onelevel@sanitize\@gls@xref
+\@gls@checkmkidxchars\@gls@xref
+\ifglsxindy
+  \gls@glossary{\csname glo@#1@type\endcsname}{%
+    (indexentry
+      :tkey (\csname glo@#1@index\endcsname)
+      :xref (\string"\@gls@xref\string")
+      :attr \string"see\string"
+    )
+  }%
+\else
+  \gls@glossary{\csname glo@#1@type\endcsname}{%
+  \string\glossaryentry{\csname glo@#1@index\endcsname
+  \@gls@encapchar glsseeformat\@gls@xref}{Z}}%
+\fi
+}
+\def\@gls@fixbraces#1#2#3\@nil{%
+  \ifx#2[\relax
+   \@@gls@fixbraces#1#2#3\@end@fixbraces
+  \else
+    \def#1{{#2#3}}%
+  \fi
+}
+\def\@@gls@fixbraces#1[#2]#3\@end@fixbraces{%
+  \def#1{[#2]{#3}}%
+}
+\newrobustcmd*{\glssee}[3][\seename]{%
+  \@do@seeglossary{#2}{[#1]{#3}}}
+\newcommand*{\@glssee}[3][\seename]{%
+  \glssee[#1]{#3}{#2}}
+\newrobustcmd*{\glsseeformat}[3][\seename]{%
+  \emph{#1} \glsseelist{#2}}
+\newrobustcmd*{\glsseelist}[1]{%
+  \let\@gls@dolast\relax
+  \let\@gls@donext\relax
+  \@for\@gls@thislabel:=#1\do{%
+    \ifx\@xfor@nextelement\@nnil
+      \@gls@dolast
+    \else
+      \@gls@donext
+    \fi
+    \expandafter\glsseeitem\expandafter{\@gls@thislabel}%
+    \let\@gls@dolast\glsseelastsep
+    \let\@gls@donext\glsseesep
+  }%
+}
+\newcommand*{\glsseelastsep}{\space\andname\space}
+\newcommand*{\glsseesep}{, }
+\newrobustcmd*{\glsseeitem}[1]{\glshyperlink[\glsseeitemformat{#1}]{#1}}
+\newcommand*{\glsseeitemformat}[1]{\glsentrytext{#1}}
+\newcommand*{\gls@save@numberlist}[1]{%
+  \ifglssavenumberlist
+    \toks@{#1}%
+    \edef\@do@writeaux@info{%
+        \noexpand\csgdef{glo@\glscurrententrylabel @numberlist}{\the\toks@}%
+    }%
+    \@onelevel@sanitize\@do@writeaux@info
+    \protected@write\@auxout{}{\@do@writeaux@info}%
+  \fi
+}
+\newcommand*{\warn@noprintglossary}{}%
+\ifcsundef{printglossary}{}%
+{%
+  \@gls@warnonglossdefined
+  \undef\printglossary
+}
+\newcommand*{\@printgloss@checkexists@noignored}[2]{%
+  \@ifglossaryexists{#1}%
+  {#2}%
+  {%
+    \ifignoredglossary{#1}%
+    {\GlossariesWarning{Glossary `#1' is an ignored glossary}}%
+    {\GlossariesWarning{Glossary `#1' doesn't exist}}%
+  }%
+}
+\newcommand*{\@printgloss@checkexists@allowignored}[2]{%
+  \s@ifglossaryexists{#1}%
+  {#2}%
+  {\GlossariesWarning{Glossary `#1' doesn't exist}}%
+}
+\let\@printgloss@checkexists\@printgloss@checkexists@noignored
+\newcommand*{\printglossary}[1][type=\glsdefaulttype]{%
+  \let\@printgloss@checkexists\@printgloss@checkexists@noignored
+  \@printglossary{#1}{\@print@glossary}%
+}
+\newcommand*{\printglossaries}{%
+  \forallglossaries{\@@glo@type}{\printglossary[type=\@@glo@type]}%
+}
+\newcommand*{\printnoidxglossary}[1][type=\glsdefaulttype]{%
+  \let\@printgloss@checkexists\@printgloss@checkexists@noignored
+  \@printglossary{#1}{\@print@noidx@glossary}%
+}
+\newcommand*{\printnoidxglossaries}{%
+  \forallglossaries{\@@glo@type}{\printnoidxglossary[type=\@@glo@type]}%
+}
+\newcommand*{\@printgloss@setsort}{}
+\newcommand*{\@gls@preglossaryhook}{}
+\newcommand{\@printglossary}[2]{%
+  \def\@glo@type{\glsdefaulttype}%
+  \def\glossarytitle{\csname @glotype@\@glo@type @title\endcsname}%
+  \def\glossarytoctitle{\glossarytitle}%
+  \let\org@glossarytitle\glossarytitle
+  \def\@glossarystyle{%
+    \ifx\@glossary@default@style\relax
+      \GlossariesWarning{No default glossary style provided \MessageBreak
+        for the glossary `\@glo@type'. \MessageBreak
+        Using deprecated fallback. \MessageBreak
+        To fix this set the style with \MessageBreak
+        \string\setglossarystyle\space or use the \MessageBreak
+        style key=value option}%
+    \fi
+  }%
+  \def\gls@dotoctitle{\glssettoctitle{\@glo@type}}%
+  \let\@org@glossaryentrynumbers\glossaryentrynumbers
+  \bgroup
+   \@printgloss@setsort
+   \setkeys{printgloss}{#1}%
+   \@printgloss@checkexists{\@glo@type}%
+   {%
+    \ifx\glossarytitle\org@glossarytitle
+    \else
+      \expandafter\let\csname @glotype@\@glo@type @title\endcsname
+                    \glossarytitle
+    \fi
+    \let\currentglossary\@glo@type
+    \let\org@glossaryentrynumbers\glossaryentrynumbers
+    \let\glsnonextpages\@glsnonextpages
+    \let\glsnextpages\@glsnextpages
+    \let\nopostdesc\@nopostdesc
+    \gls@dotoctitle
+    \@glossarystyle
+    \let\gls@org@glossaryentryfield\glossentry
+    \let\gls@org@glossarysubentryfield\subglossentry
+    \renewcommand{\glossentry}[1]{%
+      \xdef\glscurrententrylabel{\glsdetoklabel{##1}}%
+      \gls@org@glossaryentryfield{##1}%
+    }%
+    \renewcommand{\subglossentry}[2]{%
+      \xdef\glscurrententrylabel{\glsdetoklabel{##2}}%
+      \gls@org@glossarysubentryfield{##1}{##2}%
+    }%
+    \@gls@preglossaryhook
+    #2%
+   }%
+  \egroup
+  \global\let\glossaryentrynumbers\@org@glossaryentrynumbers
+  \global\let\warn@noprintglossary\relax
+}
+\newcommand{\@print@glossary}{%
+  \makeatletter
+  \@input@{\jobname.\csname @glotype@\@glo@type @in\endcsname}%
+  \IfFileExists{\jobname.\csname @glotype@\@glo@type @in\endcsname}%
+  {}%
+  {\null}%
+  \ifglsxindy
+    \ifcsundef{@xdy@\@glo@type @language}%
+    {%
+      \edef\@do@auxoutstuff{%
+        \noexpand\AtEndDocument{%
+          \noexpand\immediate\noexpand\write\@auxout{%
+            \string\providecommand\string\@xdylanguage[2]{}}%
+          \noexpand\immediate\noexpand\write\@auxout{%
+            \string\@xdylanguage{\@glo@type}{\@xdy@main@language}}%
+        }%
+      }%
+    }%
+    {%
+      \edef\@do@auxoutstuff{%
+        \noexpand\AtEndDocument{%
+          \noexpand\immediate\noexpand\write\@auxout{%
+            \string\providecommand\string\@xdylanguage[2]{}}%
+          \noexpand\immediate\noexpand\write\@auxout{%
+            \string\@xdylanguage{\@glo@type}{\csname @xdy@\@glo@type
+              @language\endcsname}}%
+        }%
+      }%
+    }%
+    \@do@auxoutstuff
+    \edef\@do@auxoutstuff{%
+      \noexpand\AtEndDocument{%
+         \noexpand\immediate\noexpand\write\@auxout{%
+          \string\providecommand\string\@gls@codepage[2]{}}%
+         \noexpand\immediate\noexpand\write\@auxout{%
+          \string\@gls@codepage{\@glo@type}{\gls@codepage}}%
+      }%
+    }%
+    \@do@auxoutstuff
+  \fi
+  \renewcommand*{\@warn@nomakeglossaries}{%
+    \GlossariesWarningNoLine{\string\makeglossaries\space
+    hasn't been used,^^Jthe glossaries will not be updated}%
+  }%
+}
+\newcommand*{\@glo@sortentries}[2]{%
+  \glosortentrieswarning
+  \def\@glo@sortinglist{}%
+  \def\@glo@sortinghandler{#1}%
+  \edef\@glo@type{#2}%
+  \forlistcsloop{\@glo@do@sortentries}{@glsref@#2}%
+  \csdef{@glsref@#2}{}%
+  \@for\@this@label:=\@glo@sortinglist\do{%
+    \xifinlistcs{\@this@label}{@glsref@#2}%
+    {}%
+    {%
+      \listcsxadd{@glsref@#2}{\@this@label}%
+    }%
+    \ifcsdef{@glo@sortingchildren@\@this@label}%
+    {%
+      \@glo@addchildren{#2}{\@this@label}%
+    }%
+    {}%
+  }%
+}
+\newcommand*{\@glo@addchildren}[2]{%
+  \bgroup
+     \letcs{\@glo@childlist}{@glo@sortingchildren@#2}%
+     \@for\@this@childlabel:=\@glo@childlist\do
+     {%
+       \xifinlistcs{\@this@childlabel}{@glsref@#1}%
+       {}%
+       {%
+         \listcsxadd{@glsref@#1}{\@this@childlabel}%
+       }%
+       \ifcsdef{@glo@sortingchildren@\@this@childlabel}%
+       {%
+         \@glo@addchildren{#1}{\@this@childlabel}%
+       }%
+       {%
+       }%
+     }%
+  \egroup
+}
+\newcommand*{\@glo@do@sortentries}[1]{%
+  \ifglshasparent{#1}%
+  {%
+    \edef\@glo@parent{\csuse{glo@\glsdetoklabel{#1}@parent}}%
+    \ifcsundef{@glo@sortingchildren@\@glo@parent}%
+    {%
+      \csdef{@glo@sortingchildren@\@glo@parent}{}%
+    }%
+    {}%
+    \expandafter\@glo@sortedinsert
+      \csname @glo@sortingchildren@\@glo@parent\endcsname{#1}%
+    \xifinlistcs{\@glo@parent}{@glsref@\@glo@type}%
+    {%
+    }%
+    {%
+       \expandafter\@glo@do@sortentries\expandafter{\@glo@parent}%
+    }%
+  }%
+  {%
+    \@glo@sortedinsert{\@glo@sortinglist}{#1}%
+  }%
+}
+\newcommand*{\@glo@sortedinsert}[2]{%
+  \dtl@insertinto{#2}{#1}{\@glo@sortinghandler}%
+}%
+\newcommand*{\@glo@sorthandler@word}[2]{%
+  \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}%
+  \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}%
+  \edef\glo@do@compare{%
+    \noexpand\dtlwordindexcompare{\noexpand\dtl@sortresult}%
+    {\expandonce\@gls@sort@B}%
+    {\expandonce\@gls@sort@A}%
+  }%
+  \glo@do@compare
+}
+\newcommand*{\@glo@sorthandler@letter}[2]{%
+  \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}%
+  \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}%
+  \edef\glo@do@compare{%
+    \noexpand\dtlletterindexcompare{\noexpand\dtl@sortresult}%
+    {\expandonce\@gls@sort@B}%
+    {\expandonce\@gls@sort@A}%
+  }%
+  \glo@do@compare
+}
+\newcommand*{\@glo@sorthandler@case}[2]{%
+  \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}%
+  \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}%
+  \edef\glo@do@compare{%
+    \noexpand\dtlcompare{\noexpand\dtl@sortresult}%
+    {\expandonce\@gls@sort@B}%
+    {\expandonce\@gls@sort@A}%
+  }%
+  \glo@do@compare
+}
+\newcommand*{\@glo@sorthandler@nocase}[2]{%
+  \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}%
+  \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}%
+  \edef\glo@do@compare{%
+    \noexpand\dtlicompare{\noexpand\dtl@sortresult}%
+    {\expandonce\@gls@sort@B}%
+    {\expandonce\@gls@sort@A}%
+  }%
+  \glo@do@compare
+}
+\newcommand*{\@glo@sortmacro@word}[1]{%
+  \ifdefstring{\@glo@default@sorttype}{standard}%
+  {%
+    \@glo@sortentries{\@glo@sorthandler@word}{#1}%
+  }%
+  {%
+    \PackageError{glossaries}{Conflicting sort options:^^J
+     \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J
+     \string\printnoidxglossary[sort=word]}{}%
+  }%
+}
+\newcommand*{\@glo@sortmacro@letter}[1]{%
+  \ifdefstring{\@glo@default@sorttype}{standard}%
+  {%
+    \@glo@sortentries{\@glo@sorthandler@letter}{#1}%
+  }%
+  {%
+    \PackageError{glossaries}{Conflicting sort options:^^J
+     \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J
+     \string\printnoidxglossary[sort=letter]}{}%
+  }%
+}
+\newcommand*{\@glo@sortmacro@standard}[1]{%
+  \ifdefstring{\@glo@default@sorttype}{standard}%
+  {%
+    \ifcsdef{@glo@sorthandler@\glsorder}%
+    {%
+      \@glo@sortentries{\csuse{@glo@sorthandler@\glsorder}}{#1}%
+    }%
+    {%
+      \PackageError{glossaries}{Unknown sort handler `\glsorder'}{}%
+    }%
+  }%
+  {%
+    \PackageError{glossaries}{Conflicting sort options:^^J
+     \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J
+     \string\printnoidxglossary[sort=standard]}{}%
+  }%
+}
+\newcommand*{\@glo@sortmacro@case}[1]{%
+  \ifdefstring{\@glo@default@sorttype}{standard}%
+  {%
+    \@glo@sortentries{\@glo@sorthandler@case}{#1}%
+  }%
+  {%
+    \PackageError{glossaries}{Conflicting sort options:^^J
+     \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J
+     \string\printnoidxglossary[sort=case]}{}%
+  }%
+}
+\newcommand*{\@glo@sortmacro@nocase}[1]{%
+  \ifdefstring{\@glo@default@sorttype}{standard}%
+  {%
+    \@glo@sortentries{\@glo@sorthandler@nocase}{#1}%
+  }%
+  {%
+    \PackageError{glossaries}{Conflicting sort options:^^J
+     \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J
+     \string\printnoidxglossary[sort=nocase]}{}%
+  }%
+}
+\newcommand*{\@glo@sortmacro@def}[1]{%
+  \def\@glo@sortinglist{}%
+  \forglsentries[#1]{\@gls@thislabel}%
+  {%
+    \xifinlistcs{\@gls@thislabel}{@glsref@#1}%
+    {%
+      \listeadd{\@glo@sortinglist}{\@gls@thislabel}%
+    }%
+    {%
+    }%
+  }%
+  \cslet{@glsref@#1}{\@glo@sortinglist}%
+}
+\newcommand*{\@glo@sortmacro@def@do}[1]{%
+  \ifinlistcs{#1}{@glsref@\@glo@type}%
+  {}%
+  {%
+    \listcsadd{@glsref@\@glo@type}{#1}%
+  }%
+  \ifcsdef{@glo@sortingchildren@#1}%
+  {%
+    \@glo@addchildren{\@glo@type}{#1}%
+  }%
+  {}%
+}
+\newcommand*{\@glo@sortmacro@use}[1]{}
+\newcommand*{\@print@noidx@glossary}{%
+  \ifcsdef{@glsref@\@glo@type}%
+  {%
+    \ifcsdef{@glo@sortmacro@\@glo@sorttype}%
+    {%
+      \csuse{@glo@sortmacro@\@glo@sorttype}{\@glo@type}%
+    }%
+    {%
+       \PackageError{glossaries}{Unknown sort handler `\@glo@sorttype'}{}%
+    }%
+    \glossarysection[\glossarytoctitle]{\glossarytitle}%
+    \glossarypreamble
+    \def\@gls@currentlettergroup{}%
+    \begin{theglossary}%
+    \glossaryheader
+    \glsresetentrylist
+   \forlistcsloop{\@gls@noidx@do}{@glsref@\@glo@type}%
+    \end{theglossary}%
+    \glossarypostamble
+  }%
+  {%
+    \@gls@noref@warn{\@glo@type}%
+  }%
+}
+\def\glo@grabfirst#1#2\@nil{%
+  \def\@gls@firsttok{#1}%
+  \ifdefempty\@gls@firsttok
+  {%
+    \def\@glo@thislettergrp{0}%
+  }%
+  {%
+    \@onelevel@sanitize\@gls@firsttok
+    \expandafter\@glo@grabfirst\@gls@firsttok{}{}\@nil
+  }%
+}
+\def\@glo@grabfirst#1#2\@nil{%
+  \ifdefempty\@glo@thislettergrp
+  {%
+     \def\@glo@thislettergrp{glssymbols}%
+  }%
+  {%
+    \count@=\uccode`#1\relax
+    \ifnum\count@=0\relax
+      \def\@glo@thislettergrp{glssymbols}%
+    \else
+      \ifdefstring\@glo@sorttype{case}%
+      {%
+         \count@=`#1\relax
+      }%
+      {%
+      }%
+      \edef\@glo@thislettergrp{\the\count@}%
+    \fi
+  }%
+}
+\newcommand{\@gls@noidx@do}[1]{%
+  \global\letcs{\@gls@loclist}{glo@\glsdetoklabel{#1}@loclist}%
+  \ifglshasparent{#1}%
+  {%
+    \gls@level=\csuse{glo@\glsdetoklabel{#1}@level}\relax
+    \ifdefvoid{\@gls@loclist}
+    {%
+      \subglossentry{\gls@level}{#1}{}%
+    }%
+    {%
+      \subglossentry{\gls@level}{#1}%
+      {%
+        \glossaryentrynumbers{\glsnoidxloclist{\@gls@loclist}}%
+      }%
+    }%
+  }%
+  {%
+    \letcs{\@gls@sort}{glo@\glsdetoklabel{#1}@sort}%
+    \expandafter\glo@grabfirst\@gls@sort{}{}\@nil
+    \ifdefequal{\@glo@thislettergrp}{\@gls@currentlettergroup}%
+    {}%
+    {%
+      \ifdefempty{\@gls@currentlettergroup}{}%
+      {%
+        \global\let\@glo@thislettergrp\@glo@thislettergrp
+        \glsgroupskip
+      }%
+      \glsgroupheading{\@glo@thislettergrp}%
+    }%
+    \global\let\@gls@currentlettergroup\@glo@thislettergrp
+    \ifdefvoid{\@gls@loclist}
+    {%
+      \glossentry{#1}{}%
+    }%
+    {%
+      \glossentry{#1}%
+      {%
+        \glossaryentrynumbers{\glsnoidxloclist{\@gls@loclist}}%
+      }%
+    }%
+  }%
+}
+\newcommand*{\glsnoidxloclist}[1]{%
+  \def\@gls@noidxloclist@sep{}%
+  \def\@gls@noidxloclist@prev{}%
+  \forlistloop{\glsnoidxloclisthandler}{#1}%
+}
+\newcommand*{\glsnoidxloclisthandler}[1]{%
+  \ifdefstring{\@gls@noidxloclist@prev}{#1}%
+  {%
+  }%
+  {%
+    \@gls@noidxloclist@sep
+    #1%
+    \def\@gls@noidxloclist@sep{\delimN}%
+    \def\@gls@noidxloclist@prev{#1}%
+  }%
+}
+\newcommand*{\glsnoidxdisplayloclisthandler}[1]{%
+  \ifdefstring{\@gls@noidxloclist@prev}{#1}%
+  {%
+  }%
+  {%
+    \@gls@noidxloclist@sep
+    \@gls@noidxloclist@prev
+    \def\@gls@noidxloclist@prev{#1}%
+  }%
+}
+\newcommand*\glsnoidxdisplayloc[4]{%
+  \setentrycounter[#1]{#2}%
+  \csuse{#3}{#4}%
+}
+\newcommand*{\@gls@reference}[3]{%
+  \glsdoifexistsorwarn{#2}%
+  {%
+    \ifcsundef{@glsref@#1}{\csgdef{@glsref@#1}{}}{}%
+    \ifinlistcs{#2}{@glsref@#1}%
+    {}%
+    {\listcsgadd{@glsref@#1}{#2}}%
+    \ifcsundef{glo@\glsdetoklabel{#2}@loclist}%
+    {\csgdef{glo@\glsdetoklabel{#2}@loclist}{}}%
+    {}%
+    \listcsgadd{glo@\glsdetoklabel{#2}@loclist}{#3}%
+  }%
+}
+\define@key{printgloss}{type}{\def\@glo@type{#1}}
+\define@key{printgloss}{title}{%
+ \def\glossarytitle{#1}%
+ \let\gls@dotoctitle\relax
+}
+\define@key{printgloss}{toctitle}{%
+ \def\glossarytoctitle{#1}%
+ \let\gls@dotoctitle\relax
+}
+\define@key{printgloss}{style}{%
+  \ifcsundef{@glsstyle@#1}%
+  {%
+    \PackageError{glossaries}%
+    {Glossary style `#1' undefined}{}%
+  }%
+  {%
+    \def\@glossarystyle{\setglossentrycompatibility
+      \csname @glsstyle@#1\endcsname}%
+  }%
+}
+\define@choicekey{printgloss}{numberedsection}%
+ [\gls@numberedsection@val\gls@numberedsection@nr]%
+ {false,nolabel,autolabel,nameref}[nolabel]%
+{%
+  \ifcase\gls@numberedsection@nr\relax
+    \renewcommand*{\@@glossarysecstar}{*}%
+    \renewcommand*{\@@glossaryseclabel}{}%
+  \or
+    \renewcommand*{\@@glossarysecstar}{}%
+    \renewcommand*{\@@glossaryseclabel}{}%
+  \or
+    \renewcommand*{\@@glossarysecstar}{}%
+    \renewcommand*{\@@glossaryseclabel}{\label{\glsautoprefix\@glo@type}}%
+  \or
+    \renewcommand*{\@@glossarysecstar}{*}%
+    \renewcommand*{\@@glossaryseclabel}{%
+      \protected@edef\@currentlabelname{\glossarytoctitle}%
+      \label{\glsautoprefix\@glo@type}}%
+  \fi
+}
+\define@choicekey{printgloss}{nogroupskip}{true,false}[true]{%
+  \csuse{glsnogroupskip#1}%
+}
+\define@choicekey{printgloss}{nopostdot}{true,false}[true]{%
+  \csuse{glsnopostdot#1}%
+}
+\newcommand*{\GlsEntryCounterLabelPrefix}{glsentry-}
+\define@choicekey{printgloss}{entrycounter}{true,false}[true]{%
+  \csuse{glsentrycounter#1}%
+  \@gls@define@glossaryentrycounter
+}
+\define@choicekey{printgloss}{subentrycounter}{true,false}[true]{%
+  \csuse{glssubentrycounter#1}%
+  \@gls@define@glossarysubentrycounter
+}
+\define@boolkey{printgloss}[gls]{nonumberlist}[true]{%
+\ifglsnonumberlist
+   \def\glossaryentrynumbers##1{}%
+\else
+   \def\glossaryentrynumbers##1{##1}%
+\fi}
+\define@key{printgloss}{sort}{\@glo@assign@sortkey{#1}}
+\newcommand*{\@glo@no@assign@sortkey}[1]{%
+   \PackageError{glossaries}{`sort' key not permitted with
+   \string\printglossary}%
+   {The `sort' key may only be used with \string\printnoidxglossary}%
+}
+\newcommand*{\@@glo@assign@sortkey}[1]{%
+  \def\@glo@sorttype{#1}%
+}
+\newcommand*{\@glsnonextpages}{%
+  \gdef\glossaryentrynumbers##1{%
+     \glsresetentrylist
+  }%
+}
+\newcommand*{\@glsnextpages}{%
+  \gdef\glossaryentrynumbers##1{%
+     ##1\glsresetentrylist}}
+\newcommand*{\glsresetentrylist}{%
+  \global\let\glossaryentrynumbers\org@glossaryentrynumbers}
+\newcommand*{\glsnonextpages}{}
+\newcommand*{\glsnextpages}{}
+\@gls@define@glossaryentrycounter
+\@gls@define@glossarysubentrycounter
+\newcommand*{\glsresetsubentrycounter}{%
+  \ifglssubentrycounter
+    \setcounter{glossarysubentry}{0}%
+  \fi
+}
+\newcommand*{\glsresetentrycounter}{%
+  \ifglsentrycounter
+    \setcounter{glossaryentry}{0}%
+  \fi
+}
+\newcommand*{\glsstepentry}[1]{%
+  \ifglsentrycounter
+    \refstepcounter{glossaryentry}%
+    \label{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}%
+  \fi
+}
+\newcommand*{\glsstepsubentry}[1]{%
+  \ifglssubentrycounter
+    \edef\currentglssubentry{\glsdetoklabel{#1}}%
+    \refstepcounter{glossarysubentry}%
+    \label{\GlsEntryCounterLabelPrefix\currentglssubentry}%
+  \fi
+}
+\newcommand*{\glsrefentry}[1]{%
+ \ifglsentrycounter
+   \ref{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}%
+ \else
+   \ifglssubentrycounter
+     \ref{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}%
+   \else
+     \gls{#1}%
+   \fi
+ \fi
+}
+\newcommand*{\glsentrycounterlabel}{%
+ \ifglsentrycounter
+   \theglossaryentry.\space
+ \fi
+}
+\newcommand*{\glssubentrycounterlabel}{%
+ \ifglssubentrycounter
+   \theglossarysubentry)\space
+ \fi
+}
+\newcommand*{\glsentryitem}[1]{%
+  \ifglsentrycounter
+    \glsstepentry{#1}\glsentrycounterlabel
+  \else
+    \glsresetsubentrycounter
+  \fi
+}
+\newcommand*{\glssubentryitem}[1]{%
+  \ifglssubentrycounter
+    \glsstepsubentry{#1}\glssubentrycounterlabel
+  \fi
+}
+\ifcsundef{theglossary}%
+{%
+  \newenvironment{theglossary}{}{}%
+}%
+{%
+  \@gls@warnontheglossdefined
+  \renewenvironment{theglossary}{}{}%
+}
+\newcommand*{\glossaryheader}{}
+\newcommand*{\glstarget}[2]{\@glstarget{\glolinkprefix#1}{#2}}
+\providecommand*{\compatibleglossentry}[2]{%
+  \toks@{#2}%
+  \protected@edef\@do@glossentry{\noexpand\glossaryentryfield{#1}%
+    {\noexpand\glsnamefont
+       {\expandafter\expandonce\csname glo@#1@name\endcsname}}%
+    {\expandafter\expandonce\csname glo@#1@desc\endcsname}%
+    {\expandafter\expandonce\csname glo@#1@symbol\endcsname}%
+    {\the\toks@}%
+  }%
+  \@do@glossentry
+}
+\newcommand*{\glossentryname}[1]{%
+  \glsdoifexistsorwarn{#1}%
+  {%
+    \letcs{\glo@name}{glo@\glsdetoklabel{#1}@name}%
+    \expandafter\glsnamefont\expandafter{\glo@name}%
+  }%
+}
+\newcommand*{\Glossentryname}[1]{%
+  \glsdoifexistsorwarn{#1}%
+  {%
+    \glsnamefont{\Glsentryname{#1}}%
+  }%
+}
+\newcommand*{\glossentrydesc}[1]{%
+  \glsdoifexistsorwarn{#1}%
+  {%
+     \glsentrydesc{#1}%
+  }%
+}
+\newcommand*{\Glossentrydesc}[1]{%
+  \glsdoifexistsorwarn{#1}%
+  {%
+    \Glsentrydesc{#1}%
+  }%
+}
+\newcommand*{\glossentrysymbol}[1]{%
+  \glsdoifexistsorwarn{#1}%
+  {%
+     \glsentrysymbol{#1}%
+  }%
+}
+\newcommand*{\Glossentrysymbol}[1]{%
+  \glsdoifexistsorwarn{#1}%
+  {%
+     \Glsentrysymbol{#1}%
+  }%
+}
+\providecommand*{\compatiblesubglossentry}[3]{%
+  \toks@{#3}%
+  \protected@edef\@do@subglossentry{\noexpand\glossarysubentryfield{\number#1}%
+  {#2}%
+    {\noexpand\glsnamefont
+      {\expandafter\expandonce\csname glo@#2@name\endcsname}}%
+    {\expandafter\expandonce\csname glo@#2@desc\endcsname}%
+    {\expandafter\expandonce\csname glo@#2@symbol\endcsname}%
+    {\the\toks@}%
+  }%
+  \@do@subglossentry
+}
+\newcommand*{\setglossentrycompatibility}{%
+  \let\glossentry\compatibleglossentry
+  \let\subglossentry\compatiblesubglossentry
+}
+\setglossentrycompatibility
+\newcommand{\glossaryentryfield}[5]{%
+  \GlossariesWarning
+  {Deprecated use of \string\glossaryentryfield.^^J
+   I recommend you change to \string\glossentry.^^J
+   If you've just upgraded, try removing your gls auxiliary
+   files^^J and recompile}%
+  \noindent\textbf{\glstarget{#1}{#2}} #4 #3. #5\par}
+\newcommand*{\glossarysubentryfield}[6]{%
+  \GlossariesWarning
+  {Deprecated use of \string\glossarysubentryfield.^^J
+   I recommend you change to \string\subglossentry.^^J
+   If you've just upgraded, try removing your gls auxiliary
+   files^^J and recompile}%
+  \glstarget{#2}{\strut}#4. #6\par}
+\newcommand*{\glsgroupskip}{}
+\newcommand*{\glsgroupheading}[1]{}
+\newcommand*{\glsgetgrouptitle}[1]{%
+  \@gls@getgrouptitle{#1}{\@gls@grptitle}%
+  \@gls@grptitle
+}
+\newcommand*{\@gls@getgrouptitle}[2]{%
+ \dtl@ifsingle{#1}%
+ {%
+   \ifcsundef{#1groupname}{\def#2{#1}}{\letcs#2{#1groupname}}%
+ }%
+ {%
+   \ifboolexpr{test{\ifstrequal{#1}{glssymbols}}
+            or test{\ifstrequal{#1}{glsnumbers}}}%
+   {%
+     \ifcsundef{#1groupname}{\def#2{#1}}{\letcs#2{#1groupname}}%
+   }%
+   {%
+     \def#2{#1}%
+   }%
+ }%
+}
+\newcommand*{\@gls@noidx@getgrouptitle}[2]{%
+  \DTLifint{#1}%
+  {\edef#2{\char#1\relax}}%
+  {%
+    \ifcsundef{#1groupname}{\def#2{#1}}{\letcs#2{#1groupname}}%
+  }%
+}
+\newcommand*{\glsgetgrouplabel}[1]{%
+\ifthenelse{\equal{#1}{\glssymbolsgroupname}}{glssymbols}{%
+\ifthenelse{\equal{#1}{\glsnumbersgroupname}}{glsnumbers}{#1}}}
+\newcommand*{\setentrycounter}[2][]{%
+  \def\@glo@counterprefix{#1}%
+  \ifx\@glo@counterprefix\@empty
+    \def\@glo@counterprefix{.}%
+  \else
+    \def\@glo@counterprefix{.#1.}%
+  \fi
+  \def\glsentrycounter{#2}%
+}
+\newcommand*{\setglossarystyle}[1]{%
+  \ifcsundef{@glsstyle@#1}%
+  {%
+    \PackageError{glossaries}{Glossary style `#1' undefined}{}%
+  }%
+  {%
+    \csname @glsstyle@#1\endcsname
+  }%
+  \ifx\@glossary@default@style\relax
+    \protected@edef\@glossary@default@style{#1}%
+  \fi
+}
+\newcommand*{\glossarystyle}[1]{%
+  \ifcsundef{@glsstyle@#1}%
+  {%
+    \PackageError{glossaries}{Glossary style `#1' undefined}{}%
+  }%
+  {%
+    \GlossariesWarning
+    {Deprecated command \string\glossarystyle.^^J
+     I recommend you switch to \string\setglossarystyle\space unless
+     you want to maintain backward compatibility}%
+    \setglossentrycompatibility
+    \csname @glsstyle@#1\endcsname
+    \ifcsdef{@glscompstyle@#1}%
+    {\setglossentrycompatibility\csuse{@glscompstyle@#1}}%
+    {}%
+  }%
+  \ifx\@glossary@default@style\relax
+    \protected@edef\@glossary@default@style{#1}%
+  \fi
+}
+\newcommand{\newglossarystyle}[2]{%
+  \ifcsundef{@glsstyle@#1}%
+  {%
+    \expandafter\def\csname @glsstyle@#1\endcsname{#2}%
+  }%
+  {%
+    \PackageError{glossaries}{Glossary style `#1' is already defined}{}%
+  }%
+}
+\newcommand{\renewglossarystyle}[2]{%
+  \ifcsundef{@glsstyle@#1}%
+  {%
+    \PackageError{glossaries}{Glossary style `#1' isn't already defined}{}%
+  }%
+  {%
+    \csdef{@glsstyle@#1}{#2}%
+  }%
+}
+\newcommand*{\glsnamefont}[1]{#1}
+\ifcsundef{hyperlink}%
+{%
+  \def\glshypernumber#1{#1}%
+}%
+{%
+  \def\glshypernumber#1{\@glshypernumber#1\nohyperpage{}\@nil}
+}
+\def\@glshypernumber#1\nohyperpage#2#3\@nil{%
+  \ifx\\#1\\%
+  \else
+    \@delimR#1\delimR\delimR\\%
+  \fi
+  \ifx\\#2\\%
+  \else
+    #2%
+  \fi
+  \ifx\\#3\\%
+  \else
+    \@glshypernumber#3\@nil
+  \fi
+}
+\def\@delimR#1\delimR #2\delimR #3\\{%
+\ifx\\#2\\%
+  \@delimN{#1}%
+\else
+  \@gls@numberlink{#1}\delimR\@gls@numberlink{#2}%
+\fi}
+\def\@delimN#1{\@@delimN#1\delimN \delimN\\}
+\def\@@delimN#1\delimN #2\delimN#3\\{%
+\ifx\\#3\\%
+  \@gls@numberlink{#1}%
+\else
+  \@gls@numberlink{#1}\delimN\@gls@numberlink{#2}%
+\fi
+}
+\def\@gls@numberlink#1{%
+\begingroup
+ \toks@={}%
+ \@gls@removespaces#1 \@nil
+\endgroup}
+\def\@gls@removespaces#1 #2\@nil{%
+ \toks@=\expandafter{\the\toks@#1}%
+ \ifx\\#2\\%
+   \edef\x{\the\toks@}%
+   \ifx\x\empty
+   \else
+     \hyperlink{\glsentrycounter\@glo@counterprefix\the\toks@}%
+               {\the\toks@}%
+   \fi
+ \else
+   \@gls@ReturnAfterFi{%
+     \@gls@removespaces#2\@nil
+   }%
+ \fi
+}
+\long\def\@gls@ReturnAfterFi#1\fi{\fi#1}
+\newcommand*{\hyperrm}[1]{\textrm{\glshypernumber{#1}}}
+\newcommand*{\hypersf}[1]{\textsf{\glshypernumber{#1}}}
+\newcommand*{\hypertt}[1]{\texttt{\glshypernumber{#1}}}
+\newcommand*{\hyperbf}[1]{\textbf{\glshypernumber{#1}}}
+\newcommand*{\hypermd}[1]{\textmd{\glshypernumber{#1}}}
+\newcommand*{\hyperit}[1]{\textit{\glshypernumber{#1}}}
+\newcommand*{\hypersl}[1]{\textsl{\glshypernumber{#1}}}
+\newcommand*{\hyperup}[1]{\textup{\glshypernumber{#1}}}
+\newcommand*{\hypersc}[1]{\textsc{\glshypernumber{#1}}}
+\newcommand*{\hyperemph}[1]{\emph{\glshypernumber{#1}}}
+\newcommand{\oldacronym}[4][\gls@label]{%
+  \def\gls@label{#2}%
+  \newacronym[#4]{#1}{#2}{#3}%
+  \ifcsundef{xspace}%
+  {%
+    \expandafter\edef\csname#1\endcsname{%
+      \noexpand\@ifstar{\noexpand\Gls{#1}}{\noexpand\gls{#1}}%
+    }%
+  }%
+  {%
+    \expandafter\edef\csname#1\endcsname{%
+      \noexpand\@ifstar{\noexpand\Gls{#1}\noexpand\xspace}{%
+      \noexpand\gls{#1}\noexpand\xspace}%
+    }%
+  }%
+}
+  \newcommand{\newacronym}[4][]{}
+\newcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}
+\newrobustcmd*{\glstextup}[1]{\ifdef\textulc{\textulc{#1}}{\textup{#1}}}
+\newcommand*{\glsshortkey}{short}
+\newcommand*{\glsshortpluralkey}{shortplural}
+\newcommand*{\glslongkey}{long}
+\newcommand*{\glslongpluralkey}{longplural}
+\newrobustcmd*{\acrfull}{\@gls@hyp@opt\ns@acrfull}
+\newcommand*\ns@acrfull[2][]{%
+  \new@ifnextchar[{\@acrfull{#1}{#2}}%
+                  {\@acrfull{#1}{#2}[]}%
+}
+\def\@acrfull#1#2[#3]{%
+  \acrfullfmt{#1}{#2}{#3}%
+}
+\newcommand*{\acrfullfmt}[3]{%
+  \acrlinkfullformat{\@acrlong}{\@acrshort}{#1}{#2}{#3}%
+}
+\newcommand{\acrlinkfullformat}[5]{%
+  \acrfullformat{#1{#3}{#4}[#5]}{#2{#3}{#4}[]}%
+}
+\newcommand{\acrfullformat}[2]{#1\glsspace(#2)}
+\newrobustcmd{\glsspace}{\space}
+\newrobustcmd*{\Acrfull}{\@gls@hyp@opt\ns@Acrfull}
+\newcommand*\ns@Acrfull[2][]{%
+  \new@ifnextchar[{\@Acrfull{#1}{#2}}%
+                  {\@Acrfull{#1}{#2}[]}%
+}
+\def\@Acrfull#1#2[#3]{%
+  \Acrfullfmt{#1}{#2}{#3}%
+}
+\newcommand*{\Acrfullfmt}[3]{%
+  \acrlinkfullformat{\@Acrlong}{\@acrshort}{#1}{#2}{#3}%
+}
+\newrobustcmd*{\ACRfull}{\@gls@hyp@opt\ns@ACRfull}
+\newcommand*\ns@ACRfull[2][]{%
+  \new@ifnextchar[{\@ACRfull{#1}{#2}}%
+                  {\@ACRfull{#1}{#2}[]}%
+}
+\def\@ACRfull#1#2[#3]{%
+  \ACRfullfmt{#1}{#2}{#3}%
+}
+\newcommand*{\ACRfullfmt}[3]{%
+  \acrlinkfullformat{\@ACRlong}{\@ACRshort}{#1}{#2}{#3}%
+}
+\newrobustcmd*{\acrfullpl}{\@gls@hyp@opt\ns@acrfullpl}
+\newcommand*\ns@acrfullpl[2][]{%
+  \new@ifnextchar[{\@acrfullpl{#1}{#2}}%
+                  {\@acrfullpl{#1}{#2}[]}%
+}
+\def\@acrfullpl#1#2[#3]{%
+  \acrfullplfmt{#1}{#2}{#3}%
+}
+\newcommand*{\acrfullplfmt}[3]{%
+  \acrlinkfullformat{\@acrlongpl}{\@acrshortpl}{#1}{#2}{#3}%
+}
+\newrobustcmd*{\Acrfullpl}{\@gls@hyp@opt\ns@Acrfullpl}
+\newcommand*\ns@Acrfullpl[2][]{%
+  \new@ifnextchar[{\@Acrfullpl{#1}{#2}}%
+                  {\@Acrfullpl{#1}{#2}[]}%
+}
+\def\@Acrfullpl#1#2[#3]{%
+  \Acrfullplfmt{#1}{#2}{#3}%
+}
+\newcommand*{\Acrfullplfmt}[3]{%
+  \acrlinkfullformat{\@Acrlongpl}{\@acrshortpl}{#1}{#2}{#3}%
+}
+\newrobustcmd*{\ACRfullpl}{\@gls@hyp@opt\ns@ACRfullpl}
+\newcommand*\ns@ACRfullpl[2][]{%
+  \new@ifnextchar[{\@ACRfullpl{#1}{#2}}%
+                  {\@ACRfullpl{#1}{#2}[]}%
+}
+\def\@ACRfullpl#1#2[#3]{%
+  \ACRfullplfmt{#1}{#2}{#3}%
+}
+\newcommand*{\ACRfullplfmt}[3]{%
+  \acrlinkfullformat{\@ACRlongpl}{\@ACRshortpl}{#1}{#2}{#3}%
+}
+\newcommand{\acronymfont}[1]{#1}
+\newcommand{\firstacronymfont}[1]{\acronymfont{#1}}
+\newcommand*{\acrnameformat}[2]{\acronymfont{#1}}
+\newtoks\glskeylisttok
+\newtoks\glslabeltok
+\newtoks\glsshorttok
+\newtoks\glslongtok
+\newcommand*{\newacronymhook}{}
+\newcommand*{\SetGenericNewAcronym}{%
+  \let\@Gls@entryname\@Gls@acrentryname
+  \renewcommand{\newacronym}[4][]{%
+    \ifdefempty{\@glsacronymlists}%
+    {%
+      \def\@glo@type{\acronymtype}%
+      \setkeys{glossentry}{##1}%
+      \DeclareAcronymList{\@glo@type}%
+    }%
+    {}%
+    \glskeylisttok{##1}%
+    \glslabeltok{##2}%
+    \glsshorttok{##3}%
+    \glslongtok{##4}%
+    \newacronymhook
+    \protected@edef\@do@newglossaryentry{%
+      \noexpand\newglossaryentry{\the\glslabeltok}%
+      {%
+        type=\acronymtype,%
+        name={\expandonce{\acronymentry{##2}}},%
+        sort={\acronymsort{\the\glsshorttok}{\the\glslongtok}},%
+        text={\the\glsshorttok},%
+        short={\the\glsshorttok},%
+        shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+        long={\the\glslongtok},%
+        longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+        \GenericAcronymFields,%
+        \the\glskeylisttok
+      }%
+    }%
+    \@do@newglossaryentry
+  }%
+  \renewcommand*{\acrfullfmt}[3]{%
+    \glslink[##1]{##2}{\genacrfullformat{##2}{##3}}}%
+  \renewcommand*{\Acrfullfmt}[3]{%
+    \glslink[##1]{##2}{\Genacrfullformat{##2}{##3}}}%
+  \renewcommand*{\ACRfullfmt}[3]{%
+    \glslink[##1]{##2}{%
+      \mfirstucMakeUppercase{\genacrfullformat{##2}{##3}}}}%
+  \renewcommand*{\acrfullplfmt}[3]{%
+    \glslink[##1]{##2}{\genplacrfullformat{##2}{##3}}}%
+  \renewcommand*{\Acrfullplfmt}[3]{%
+    \glslink[##1]{##2}{\Genplacrfullformat{##2}{##3}}}%
+  \renewcommand*{\ACRfullplfmt}[3]{%
+    \glslink[##1]{##2}{%
+      \mfirstucMakeUppercase{\genplacrfullformat{##2}{##3}}}}%
+  \renewcommand*{\glsentryfull}[1]{\genacrfullformat{##1}{}}%
+  \renewcommand*{\Glsentryfull}[1]{\Genacrfullformat{##1}{}}%
+  \renewcommand*{\glsentryfullpl}[1]{\genplacrfullformat{##1}{}}%
+  \renewcommand*{\Glsentryfullpl}[1]{\Genplacrfullformat{##1}{}}%
+}
+\newcommand*{\GenericAcronymFields}{description={\the\glslongtok}}
+\newcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{#1}}}
+\newcommand*{\acronymsort}[2]{#1}
+\newcommand*{\setacronymstyle}[1]{%
+  \ifcsundef{@glsacr@dispstyle@#1}
+  {%
+    \PackageError{glossaries}{Undefined acronym style `#1'}{}%
+  }%
+  {%
+    \ifdefempty{\@glsacronymlists}%
+    {%
+      \DeclareAcronymList{\acronymtype}%
+    }%
+    {}%
+    \SetGenericNewAcronym
+    \GlsUseAcrStyleDefs{#1}%
+    \@for\@gls@type:=\@glsacronymlists\do{%
+      \defglsentryfmt[\@gls@type]{\GlsUseAcrEntryDispStyle{#1}}%
+    }%
+  }%
+}
+\newcommand*{\newacronymstyle}[3]{%
+  \ifcsdef{@glsacr@dispstyle@#1}%
+  {%
+    \PackageError{glossaries}{Acronym style `#1' already exists}{}%
+  }%
+  {%
+    \csdef{@glsacr@dispstyle@#1}{#2}%
+    \csdef{@glsacr@styledefs@#1}{#3}%
+  }%
+}
+\newcommand*{\renewacronymstyle}[3]{%
+  \ifcsdef{@glsacr@dispstyle@#1}%
+  {%
+    \csdef{@glsacr@dispstyle@#1}{#2}%
+    \csdef{@glsacr@styledefs@#1}{#3}%
+  }%
+  {%
+    \PackageError{glossaries}{Acronym style `#1' doesn't exist}{}%
+  }%
+}
+\newcommand*{\GlsUseAcrEntryDispStyle}[1]{\csuse{@glsacr@dispstyle@#1}}
+\newcommand*{\GlsUseAcrStyleDefs}[1]{\csuse{@glsacr@styledefs@#1}}
+\newacronymstyle{long-short}%
+{%
+  \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+}%
+{%
+  \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+  \renewcommand*{\genacrfullformat}[2]{%
+   \glsentrylong{##1}##2\space
+   (\protect\firstacronymfont{\glsentryshort{##1}})%
+  }%
+  \renewcommand*{\Genacrfullformat}[2]{%
+   \Glsentrylong{##1}##2\space
+   (\protect\firstacronymfont{\glsentryshort{##1}})%
+  }%
+  \renewcommand*{\genplacrfullformat}[2]{%
+   \glsentrylongpl{##1}##2\space
+   (\protect\firstacronymfont{\glsentryshortpl{##1}})%
+  }%
+  \renewcommand*{\Genplacrfullformat}[2]{%
+   \Glsentrylongpl{##1}##2\space
+   (\protect\firstacronymfont{\glsentryshortpl{##1}})%
+  }%
+  \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}%
+  \renewcommand*{\acronymsort}[2]{##1}%
+  \renewcommand*{\acronymfont}[1]{##1}%
+  \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}%
+  \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+}
+\newacronymstyle{long-sp-short}%
+{%
+  \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+}%
+{%
+  \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+  \renewcommand*{\genacrfullformat}[2]{%
+   \glsentrylong{##1}##2\glsacspace{##1}%
+   (\protect\firstacronymfont{\glsentryshort{##1}})%
+  }%
+  \renewcommand*{\Genacrfullformat}[2]{%
+   \Glsentrylong{##1}##2\glsacspace{##1}%
+   (\protect\firstacronymfont{\glsentryshort{##1}})%
+  }%
+  \renewcommand*{\genplacrfullformat}[2]{%
+   \glsentrylongpl{##1}##2\glsacspace{##1}%
+   (\protect\firstacronymfont{\glsentryshortpl{##1}})%
+  }%
+  \renewcommand*{\Genplacrfullformat}[2]{%
+   \Glsentrylongpl{##1}##2\glsacspace{##1}%
+   (\protect\firstacronymfont{\glsentryshortpl{##1}})%
+  }%
+  \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}%
+  \renewcommand*{\acronymsort}[2]{##1}%
+  \renewcommand*{\acronymfont}[1]{##1}%
+  \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}%
+  \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+}
+\newcommand*{\glsacspace}[1]{%
+  \settowidth{\dimen@}{(\firstacronymfont{\glsentryshort{#1}})}%
+  \ifdim\dimen@<3em~\else\space\fi
+}
+\newacronymstyle{short-long}%
+{%
+  \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+}%
+{%
+  \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+  \renewcommand*{\genacrfullformat}[2]{%
+   \protect\firstacronymfont{\glsentryshort{##1}}##2\space
+   (\glsentrylong{##1})%
+  }%
+  \renewcommand*{\Genacrfullformat}[2]{%
+   \protect\firstacronymfont{\Glsentryshort{##1}}##2\space
+   (\glsentrylong{##1})%
+  }%
+  \renewcommand*{\genplacrfullformat}[2]{%
+   \protect\firstacronymfont{\glsentryshortpl{##1}}##2\space
+   (\glsentrylongpl{##1})%
+  }%
+  \renewcommand*{\Genplacrfullformat}[2]{%
+   \protect\firstacronymfont{\Glsentryshortpl{##1}}##2\space
+   (\glsentrylongpl{##1})%
+  }%
+  \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}%
+  \renewcommand*{\acronymsort}[2]{##1}%
+  \renewcommand*{\acronymfont}[1]{##1}%
+  \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}%
+  \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+}
+\newacronymstyle{long-sc-short}%
+{%
+  \GlsUseAcrEntryDispStyle{long-short}%
+}%
+{%
+  \GlsUseAcrStyleDefs{long-short}%
+  \renewcommand{\acronymfont}[1]{\textsc{##1}}%
+  \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+}
+\newacronymstyle{long-sm-short}%
+{%
+  \GlsUseAcrEntryDispStyle{long-short}%
+}%
+{%
+  \GlsUseAcrStyleDefs{long-short}%
+  \renewcommand{\acronymfont}[1]{\textsmaller{##1}}%
+  \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}%
+}
+\newacronymstyle{sc-short-long}%
+{%
+  \GlsUseAcrEntryDispStyle{short-long}%
+}%
+{%
+  \GlsUseAcrStyleDefs{short-long}%
+  \renewcommand{\acronymfont}[1]{\textsc{##1}}%
+  \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+}
+\newacronymstyle{sm-short-long}%
+{%
+  \GlsUseAcrEntryDispStyle{short-long}%
+}%
+{%
+  \GlsUseAcrStyleDefs{short-long}%
+  \renewcommand{\acronymfont}[1]{\textsmaller{##1}}%
+  \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}%
+}
+\newacronymstyle{long-short-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{long-short}%
+}%
+{%
+  \GlsUseAcrStyleDefs{long-short}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+  \renewcommand*{\acronymentry}[1]{%
+    \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}%
+}
+\newacronymstyle{long-sp-short-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{long-sp-short}%
+}%
+{%
+  \GlsUseAcrStyleDefs{long-sp-short}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+  \renewcommand*{\acronymentry}[1]{%
+    \glsentrylong{##1}\glsacspace{##1}(\acronymfont{\glsentryshort{##1}})}%
+}
+\newacronymstyle{long-sc-short-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{long-sc-short}%
+}%
+{%
+  \GlsUseAcrStyleDefs{long-sc-short}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+  \renewcommand*{\acronymentry}[1]{%
+    \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}%
+}
+\newacronymstyle{long-sm-short-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{long-sm-short}%
+}%
+{%
+  \GlsUseAcrStyleDefs{long-sm-short}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+  \renewcommand*{\acronymentry}[1]{%
+    \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}%
+}
+\newacronymstyle{short-long-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{short-long}%
+}%
+{%
+  \GlsUseAcrStyleDefs{short-long}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+  \renewcommand*{\acronymentry}[1]{%
+    \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}%
+}
+\newacronymstyle{sc-short-long-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{sc-short-long}%
+}%
+{%
+  \GlsUseAcrStyleDefs{sc-short-long}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+  \renewcommand*{\acronymentry}[1]{%
+    \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}%
+}
+\newacronymstyle{sm-short-long-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{sm-short-long}%
+}%
+{%
+  \GlsUseAcrStyleDefs{sm-short-long}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+  \renewcommand*{\acronymentry}[1]{%
+    \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}%
+}
+\newacronymstyle{dua}%
+{%
+  \ifdefempty\glscustomtext
+  {%
+    \ifglshaslong{\glslabel}%
+    {%
+      \glsifplural
+      {%
+        \glscapscase
+        {%
+          \glsentrylongpl{\glslabel}\glsinsert
+        }%
+        {%
+          \Glsentrylongpl{\glslabel}\glsinsert
+        }%
+        {%
+          \mfirstucMakeUppercase
+            {\glsentrylongpl{\glslabel}\glsinsert}%
+        }%
+      }%
+      {%
+        \glscapscase
+        {%
+          \glsentrylong{\glslabel}\glsinsert
+        }%
+        {%
+          \Glsentrylong{\glslabel}\glsinsert
+        }%
+        {%
+          \mfirstucMakeUppercase
+            {\glsentrylong{\glslabel}\glsinsert}%
+        }%
+      }%
+    }%
+    {%
+      \glsgenentryfmt
+    }%
+  }%
+  {\glscustomtext\glsinsert}%
+}%
+{%
+  \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+  \renewcommand*{\acrfullfmt}[3]{%
+    \glslink[##1]{##2}{\glsentrylong{##2}##3\space
+      (\acronymfont{\glsentryshort{##2}})}}%
+  \renewcommand*{\Acrfullfmt}[3]{%
+    \glslink[##1]{##2}{\Glsentrylong{##2}##3\space
+      (\acronymfont{\glsentryshort{##2}})}}%
+  \renewcommand*{\ACRfullfmt}[3]{%
+    \glslink[##1]{##2}{%
+      \mfirstucMakeUppercase{\glsentrylong{##2}##3\space
+      (\acronymfont{\glsentryshort{##2}})}}}%
+  \renewcommand*{\acrfullplfmt}[3]{%
+    \glslink[##1]{##2}{\glsentrylongpl{##2}##3\space
+      (\acronymfont{\glsentryshortpl{##2}})}}%
+  \renewcommand*{\Acrfullplfmt}[3]{%
+    \glslink[##1]{##2}{\Glsentrylongpl{##2}##3\space
+      (\acronymfont{\glsentryshortpl{##2}})}}%
+  \renewcommand*{\ACRfullplfmt}[3]{%
+    \glslink[##1]{##2}{%
+      \mfirstucMakeUppercase{\glsentrylongpl{##2}##3\space
+      (\acronymfont{\glsentryshortpl{##2}})}}}%
+  \renewcommand*{\glsentryfull}[1]{%
+    \glsentrylong{##1}\space(\acronymfont{\glsentryshort{##1}})%
+  }%
+  \renewcommand*{\Glsentryfull}[1]{%
+    \Glsentrylong{##1}\space(\acronymfont{\glsentryshort{##1}})%
+  }%
+  \renewcommand*{\glsentryfullpl}[1]{%
+    \glsentrylongpl{##1}\space(\acronymfont{\glsentryshortpl{##1}})%
+  }%
+  \renewcommand*{\Glsentryfullpl}[1]{%
+    \Glsentrylongpl{##1}\space(\acronymfont{\glsentryshortpl{##1}})%
+  }%
+  \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}%
+  \renewcommand*{\acronymsort}[2]{##1}%
+  \renewcommand*{\acronymfont}[1]{##1}%
+  \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}%
+}
+\newacronymstyle{dua-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{dua}%
+}%
+{%
+  \GlsUseAcrStyleDefs{dua}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentrylong{##1}}}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+}%
+\newacronymstyle{footnote}%
+{%
+  \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+}%
+{%
+  \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+  \glshyperfirstfalse
+  \renewcommand*{\genacrfullformat}[2]{%
+   \protect\firstacronymfont{\glsentryshort{##1}}##2%
+   \protect\footnote{\glsentrylong{##1}}%
+  }%
+  \renewcommand*{\Genacrfullformat}[2]{%
+   \firstacronymfont{\Glsentryshort{##1}}##2%
+   \protect\footnote{\glsentrylong{##1}}%
+  }%
+  \renewcommand*{\genplacrfullformat}[2]{%
+   \protect\firstacronymfont{\glsentryshortpl{##1}}##2%
+   \protect\footnote{\glsentrylongpl{##1}}%
+  }%
+  \renewcommand*{\Genplacrfullformat}[2]{%
+   \protect\firstacronymfont{\Glsentryshortpl{##1}}##2%
+   \protect\footnote{\glsentrylongpl{##1}}%
+  }%
+  \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}%
+  \renewcommand*{\acronymsort}[2]{##1}%
+  \renewcommand*{\acronymfont}[1]{##1}%
+  \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}%
+  \renewcommand*{\acrfullfmt}[3]{%
+    \glslink[##1]{##2}{\acronymfont{\glsentryshort{##2}}##3\space
+      (\glsentrylong{##2})}}%
+  \renewcommand*{\Acrfullfmt}[3]{%
+    \glslink[##1]{##2}{\acronymfont{\Glsentryshort{##2}}##3\space
+      (\glsentrylong{##2})}}%
+  \renewcommand*{\ACRfullfmt}[3]{%
+    \glslink[##1]{##2}{%
+      \mfirstucMakeUppercase{\acronymfont{\glsentryshort{##2}}##3\space
+      (\glsentrylong{##2})}}}%
+  \renewcommand*{\acrfullplfmt}[3]{%
+    \glslink[##1]{##2}{\acronymfont{\glsentryshortpl{##2}}##3\space
+      (\glsentrylongpl{##2})}}%
+  \renewcommand*{\Acrfullplfmt}[3]{%
+    \glslink[##1]{##2}{\acronymfont{\Glsentryshortpl{##2}}##3\space
+      (\glsentrylongpl{##2})}}%
+  \renewcommand*{\ACRfullplfmt}[3]{%
+    \glslink[##1]{##2}{%
+      \mfirstucMakeUppercase{\acronymfont{\glsentryshortpl{##2}}##3\space
+      (\glsentrylongpl{##2})}}}%
+  \renewcommand*{\glsentryfull}[1]{%
+     \acronymfont{\glsentryshort{##1}}\space(\glsentrylong{##1})}%
+  \renewcommand*{\Glsentryfull}[1]{%
+     \acronymfont{\Glsentryshort{##1}}\space(\glsentrylong{##1})}%
+  \renewcommand*{\glsentryfullpl}[1]{%
+     \acronymfont{\glsentryshortpl{##1}}\space(\glsentrylongpl{##1})}%
+  \renewcommand*{\Glsentryfullpl}[1]{%
+     \acronymfont{\Glsentryshortpl{##1}}\space(\glsentrylongpl{##1})}%
+}
+\newacronymstyle{footnote-sc}%
+{%
+  \GlsUseAcrEntryDispStyle{footnote}%
+}%
+{%
+  \GlsUseAcrStyleDefs{footnote}%
+  \renewcommand{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}
+  \renewcommand{\acronymfont}[1]{\textsc{##1}}%
+  \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+}%
+\newacronymstyle{footnote-sm}%
+{%
+  \GlsUseAcrEntryDispStyle{footnote}%
+}%
+{%
+  \GlsUseAcrStyleDefs{footnote}%
+  \renewcommand{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}
+  \renewcommand{\acronymfont}[1]{\textsmaller{##1}}%
+  \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}%
+}%
+\newacronymstyle{footnote-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{footnote}%
+}%
+{%
+  \GlsUseAcrStyleDefs{footnote}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+  \renewcommand*{\acronymentry}[1]{%
+    \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}%
+}
+\newacronymstyle{footnote-sc-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{footnote-sc}%
+}%
+{%
+  \GlsUseAcrStyleDefs{footnote-sc}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+  \renewcommand*{\acronymentry}[1]{%
+    \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}%
+}
+\newacronymstyle{footnote-sm-desc}%
+{%
+  \GlsUseAcrEntryDispStyle{footnote-sm}%
+}%
+{%
+  \GlsUseAcrStyleDefs{footnote-sm}%
+  \renewcommand*{\GenericAcronymFields}{}%
+  \renewcommand*{\acronymsort}[2]{##2}%
+  \renewcommand*{\acronymentry}[1]{%
+    \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}%
+}
+\newcommand*{\DefineAcronymSynonyms}{%
+  \let\acs\acrshort
+  \let\Acs\Acrshort
+  \let\acsp\acrshortpl
+  \let\Acsp\Acrshortpl
+  \let\acl\acrlong
+  \let\aclp\acrlongpl
+  \let\Acl\Acrlong
+  \let\Aclp\Acrlongpl
+  \let\acf\acrfull
+  \let\acfp\acrfullpl
+  \let\Acf\Acrfull
+  \let\Acfp\Acrfullpl
+  \let\ac\gls
+  \let\Ac\Gls
+  \let\acp\glspl
+  \let\Acp\Glspl
+}
+\ifglsacrshortcuts
+  \DefineAcronymSynonyms
+\fi
+\newcommand*{\SetDefaultAcronymDisplayStyle}[1]{%
+  \defglsentryfmt[#1]{\glsgenentryfmt}%
+}
+\newcommand*{\DefaultNewAcronymDef}{%
+  \edef\@do@newglossaryentry{%
+    \noexpand\newglossaryentry{\the\glslabeltok}%
+    {%
+      type=\acronymtype,%
+      name={\the\glsshorttok},%
+      sort={\the\glsshorttok},%
+      text={\the\glsshorttok},%
+      first={\acrfullformat{\the\glslongtok}{\the\glsshorttok}},%
+      plural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      firstplural={\acrfullformat{\noexpand\expandonce\noexpand\@glo@longpl}%
+                                 {\noexpand\expandonce\noexpand\@glo@shortpl}},%
+      short={\the\glsshorttok},%
+      shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+      long={\the\glslongtok},%
+      longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+      description={\the\glslongtok},%
+      descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      \the\glskeylisttok
+    }%
+  }%
+  \let\@org@gls@assign@firstpl\gls@assign@firstpl
+  \let\@org@gls@assign@plural\gls@assign@plural
+  \let\@org@gls@assign@descplural\gls@assign@descplural
+  \def\gls@assign@firstpl##1##2{%
+    \@@gls@expand@field{##1}{firstpl}{##2}%
+  }%
+  \def\gls@assign@plural##1##2{%
+    \@@gls@expand@field{##1}{plural}{##2}%
+  }%
+  \def\gls@assign@descplural##1##2{%
+    \@@gls@expand@field{##1}{descplural}{##2}%
+  }%
+  \@do@newglossaryentry
+  \let\gls@assign@firstpl\@org@gls@assign@firstpl
+  \let\gls@assign@plural\@org@gls@assign@plural
+  \let\gls@assign@symbolplural\@org@gls@assign@symbolplural
+}
+\newcommand*{\SetDefaultAcronymStyle}{%
+  \@for\@gls@type:=\@glsacronymlists\do{%
+    \SetDefaultAcronymDisplayStyle{\@gls@type}%
+  }%
+  \renewcommand{\newacronym}[4][]{%
+    \ifx\@glsacronymlists\@empty
+      \def\@glo@type{\acronymtype}%
+      \setkeys{glossentry}{##1}%
+      \DeclareAcronymList{\@glo@type}%
+      \SetDefaultAcronymDisplayStyle{\@glo@type}%
+    \fi
+    \glskeylisttok{##1}%
+    \glslabeltok{##2}%
+    \glsshorttok{##3}%
+    \glslongtok{##4}%
+    \newacronymhook
+    \DefaultNewAcronymDef
+  }%
+  \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}%
+}
+\newcommand*{\acrfootnote}[3]{\acrlinkfootnote{#1}{#2}{#3}}
+\newcommand*{\acrlinkfootnote}[3]{%
+  \footnote{\glslink[#1]{#2}{#3}}%
+}
+\newcommand*{\acrnolinkfootnote}[3]{%
+  \footnote{#3}%
+}
+\newcommand*{\SetDescriptionFootnoteAcronymDisplayStyle}[1]{%
+  \defglsentryfmt[#1]{%
+    \ifdefempty\glscustomtext
+    {%
+      \ifglsused{\glslabel}%
+      {%
+        \acronymfont{\glsgenentryfmt}%
+      }%
+      {%
+        \firstacronymfont{\glsgenentryfmt}%
+        \ifglshassymbol{\glslabel}%
+        {%
+          \expandafter\protect\expandafter\acrfootnote\expandafter
+           {\@gls@link@opts}{\@gls@link@label}%
+           {%
+            \glsifplural
+              {\glsentrysymbolplural{\glslabel}}%
+              {\glsentrysymbol{\glslabel}}%
+           }%
+        }%
+      }%
+    }%
+    {\glscustomtext\glsinsert}%
+  }%
+}
+\newcommand*{\DescriptionFootnoteNewAcronymDef}{%
+  \edef\@do@newglossaryentry{%
+    \noexpand\newglossaryentry{\the\glslabeltok}%
+    {%
+      type=\acronymtype,%
+      name={\noexpand\acronymfont{\the\glsshorttok}},%
+      sort={\the\glsshorttok},%
+      first={\the\glsshorttok},%
+      firstplural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      text={\the\glsshorttok},%
+      plural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      short={\the\glsshorttok},%
+      shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+      long={\the\glslongtok},%
+      longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+      symbol={\the\glslongtok},%
+      symbolplural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      \the\glskeylisttok
+    }%
+  }%
+  \let\@org@gls@assign@firstpl\gls@assign@firstpl
+  \let\@org@gls@assign@plural\gls@assign@plural
+  \let\@org@gls@assign@symbolplural\gls@assign@symbolplural
+  \def\gls@assign@firstpl##1##2{%
+    \@@gls@expand@field{##1}{firstpl}{##2}%
+  }%
+  \def\gls@assign@plural##1##2{%
+    \@@gls@expand@field{##1}{plural}{##2}%
+  }%
+  \def\gls@assign@symbolplural##1##2{%
+    \@@gls@expand@field{##1}{symbolplural}{##2}%
+  }%
+  \@do@newglossaryentry
+  \let\gls@assign@plural\@org@gls@assign@plural
+  \let\gls@assign@firstpl\@org@gls@assign@firstpl
+  \let\gls@assign@symbolplural\@org@gls@assign@symbolplural
+}
+\newcommand*{\SetDescriptionFootnoteAcronymStyle}{%
+  \renewcommand{\newacronym}[4][]{%
+    \ifx\@glsacronymlists\@empty
+      \def\@glo@type{\acronymtype}%
+      \setkeys{glossentry}{##1}%
+      \DeclareAcronymList{\@glo@type}%
+      \SetDescriptionFootnoteAcronymDisplayStyle{\@glo@type}%
+    \fi
+    \glskeylisttok{##1}%
+    \glslabeltok{##2}%
+    \glsshorttok{##3}%
+    \glslongtok{##4}%
+    \newacronymhook
+    \DescriptionFootnoteNewAcronymDef
+  }%
+  \@for\@gls@type:=\@glsacronymlists\do{%
+    \SetDescriptionFootnoteAcronymDisplayStyle{\@gls@type}%
+  }%
+  \ifglsacrsmallcaps
+    \renewcommand*{\acronymfont}[1]{\textsc{##1}}%
+    \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+  \else
+    \ifglsacrsmaller
+      \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}%
+    \fi
+  \fi
+  \ifglsacrdua
+    \PackageError{glossaries}{Option clash: `footnote' and `dua'
+    can't both be set}{}%
+  \fi
+}%
+\newcommand*{\SetDescriptionDUAAcronymDisplayStyle}[1]{%
+  \defglsentryfmt[#1]{\glsgenentryfmt}%
+}
+\newcommand*{\DescriptionDUANewAcronymDef}{%
+  \edef\@do@newglossaryentry{%
+    \noexpand\newglossaryentry{\the\glslabeltok}%
+    {%
+      type=\acronymtype,%
+      name={\the\glslongtok},%
+      sort={\the\glslongtok},
+      text={\the\glslongtok},%
+      first={\the\glslongtok},%
+      plural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      firstplural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      short={\the\glsshorttok},%
+      shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+      long={\the\glslongtok},%
+      longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+      symbol={\the\glsshorttok},%
+      symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      \the\glskeylisttok
+    }%
+  }%
+  \let\@org@gls@assign@firstpl\gls@assign@firstpl
+  \let\@org@gls@assign@plural\gls@assign@plural
+  \let\@org@gls@assign@symbolplural\gls@assign@symbolplural
+  \def\gls@assign@firstpl##1##2{%
+    \@@gls@expand@field{##1}{firstpl}{##2}%
+  }%
+  \def\gls@assign@plural##1##2{%
+    \@@gls@expand@field{##1}{plural}{##2}%
+  }%
+  \def\gls@assign@symbolplural##1##2{%
+    \@@gls@expand@field{##1}{symbolplural}{##2}%
+  }%
+  \@do@newglossaryentry
+  \let\gls@assign@firstpl\@org@gls@assign@firstpl
+  \let\gls@assign@plural\@org@gls@assign@plural
+  \let\gls@assign@symbolplural\@org@gls@assign@symbolplural
+}
+\newcommand*{\SetDescriptionDUAAcronymStyle}{%
+  \ifglsacrsmallcaps
+    \PackageError{glossaries}{Option clash: `smallcaps' and `dua'
+    can't both be set}{}%
+  \else
+    \ifglsacrsmaller
+      \PackageError{glossaries}{Option clash: `smaller' and `dua'
+      can't both be set}{}%
+    \fi
+  \fi
+  \renewcommand{\newacronym}[4][]{%
+    \ifx\@glsacronymlists\@empty
+      \def\@glo@type{\acronymtype}%
+      \setkeys{glossentry}{##1}%
+      \DeclareAcronymList{\@glo@type}%
+      \SetDescriptionDUAAcronymDisplayStyle{\@glo@type}%
+    \fi
+    \glskeylisttok{##1}%
+    \glslabeltok{##2}%
+    \glsshorttok{##3}%
+    \glslongtok{##4}%
+    \newacronymhook
+    \DescriptionDUANewAcronymDef
+  }%
+  \@for\@gls@type:=\@glsacronymlists\do{%
+    \SetDescriptionDUAAcronymDisplayStyle{\@gls@type}%
+  }%
+}%
+\newcommand*{\SetDescriptionAcronymDisplayStyle}[1]{%
+  \defglsentryfmt[#1]{%
+    \ifdefempty\glscustomtext
+    {%
+      \ifglsused{\glslabel}%
+      {%
+        \let\gls@org@insert\glsinsert
+        \let\glsinsert\@empty
+        \acronymfont{\glsgenentryfmt}\gls@org@insert
+      }%
+      {%
+        \glsgenentryfmt
+        \ifglshassymbol{\glslabel}%
+          {%
+             \glsifplural
+             {%
+               \def\@glo@symbol{\glsentrysymbolplural{\glslabel}}%
+             }%
+             {%
+               \def\@glo@symbol{\glsentrysymbol{\glslabel}}%
+             }%
+             \space(\protect\firstacronymfont
+             {\glscapscase
+              {\@glo@symbol}
+              {\@glo@symbol}
+              {\mfirstucMakeUppercase{\@glo@symbol}}})%
+          }%
+          {}%
+      }%
+    }%
+    {\glscustomtext\glsinsert}%
+  }%
+}
+\newcommand*{\DescriptionNewAcronymDef}{%
+  \edef\@do@newglossaryentry{%
+    \noexpand\newglossaryentry{\the\glslabeltok}%
+    {%
+      type=\acronymtype,%
+      name={\noexpand
+        \acrnameformat{\the\glsshorttok}{\the\glslongtok}},%
+      sort={\the\glsshorttok},%
+      first={\the\glslongtok},%
+      firstplural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      text={\the\glsshorttok},%
+      plural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      short={\the\glsshorttok},%
+      shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+      long={\the\glslongtok},%
+      longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+      symbol={\noexpand\@glo@text},%
+      symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      \the\glskeylisttok}%
+  }%
+  \let\@org@gls@assign@firstpl\gls@assign@firstpl
+  \let\@org@gls@assign@plural\gls@assign@plural
+  \let\@org@gls@assign@symbolplural\gls@assign@symbolplural
+  \def\gls@assign@firstpl##1##2{%
+    \@@gls@expand@field{##1}{firstpl}{##2}%
+  }%
+  \def\gls@assign@plural##1##2{%
+    \@@gls@expand@field{##1}{plural}{##2}%
+  }%
+  \def\gls@assign@symbolplural##1##2{%
+    \@@gls@expand@field{##1}{symbolplural}{##2}%
+  }%
+  \@do@newglossaryentry
+  \let\gls@assign@firstpl\@org@gls@assign@firstpl
+  \let\gls@assign@plural\@org@gls@assign@plural
+  \let\gls@assign@symbolplural\@org@gls@assign@symbolplural
+}
+\newcommand*{\SetDescriptionAcronymStyle}{%
+  \renewcommand{\newacronym}[4][]{%
+    \ifx\@glsacronymlists\@empty
+      \def\@glo@type{\acronymtype}%
+      \setkeys{glossentry}{##1}%
+      \DeclareAcronymList{\@glo@type}%
+      \SetDescriptionAcronymDisplayStyle{\@glo@type}%
+    \fi
+    \glskeylisttok{##1}%
+    \glslabeltok{##2}%
+    \glsshorttok{##3}%
+    \glslongtok{##4}%
+    \newacronymhook
+    \DescriptionNewAcronymDef
+  }%
+  \@for\@gls@type:=\@glsacronymlists\do{%
+    \SetDescriptionAcronymDisplayStyle{\@gls@type}%
+  }%
+  \ifglsacrsmallcaps
+    \renewcommand{\acronymfont}[1]{\textsc{##1}}
+    \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+  \else
+    \ifglsacrsmaller
+      \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}%
+    \fi
+  \fi
+}%
+\newcommand*{\SetFootnoteAcronymDisplayStyle}[1]{%
+  \defglsentryfmt[#1]{%
+    \ifdefempty\glscustomtext
+    {%
+      \let\gls@org@insert\glsinsert
+      \let\glsinsert\@empty
+      \ifglsused{\glslabel}%
+      {%
+        \acronymfont{\glsgenentryfmt}\gls@org@insert
+      }%
+      {%
+        \firstacronymfont{\glsgenentryfmt}\gls@org@insert
+        \ifglshaslong{\glslabel}%
+        {%
+          \expandafter\protect\expandafter\acrfootnote\expandafter
+           {\@gls@link@opts}{\@gls@link@label}%
+           {%
+            \glsifplural
+              {\glsentrylongpl{\glslabel}}%
+              {\glsentrylong{\glslabel}}%
+           }%
+        }%
+        {}%
+      }%
+    }%
+    {\glscustomtext\glsinsert}%
+  }%
+}
+\newcommand*{\FootnoteNewAcronymDef}{%
+  \edef\@do@newglossaryentry{%
+    \noexpand\newglossaryentry{\the\glslabeltok}%
+    {%
+      type=\acronymtype,%
+      name={\noexpand\acronymfont{\the\glsshorttok}},%
+      sort={\the\glsshorttok},%
+      text={\the\glsshorttok},%
+      plural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      first={\the\glsshorttok},%
+      firstplural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      short={\the\glsshorttok},%
+      shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+      long={\the\glslongtok},%
+      longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+      description={\the\glslongtok},%
+      descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      \the\glskeylisttok
+    }%
+  }%
+  \let\@org@gls@assign@plural\gls@assign@plural
+  \let\@org@gls@assign@firstpl\gls@assign@firstpl
+  \let\@org@gls@assign@descplural\gls@assign@descplural
+  \def\gls@assign@firstpl##1##2{%
+    \@@gls@expand@field{##1}{firstpl}{##2}%
+  }%
+  \def\gls@assign@plural##1##2{%
+    \@@gls@expand@field{##1}{plural}{##2}%
+  }%
+  \def\gls@assign@descplural##1##2{%
+    \@@gls@expand@field{##1}{descplural}{##2}%
+  }%
+  \@do@newglossaryentry
+  \let\gls@assign@plural\@org@gls@assign@plural
+  \let\gls@assign@firstpl\@org@gls@assign@firstpl
+  \let\gls@assign@descplural\@org@gls@assign@descplural
+}
+\newcommand*{\SetFootnoteAcronymStyle}{%
+  \renewcommand{\newacronym}[4][]{%
+    \ifx\@glsacronymlists\@empty
+      \def\@glo@type{\acronymtype}%
+      \setkeys{glossentry}{##1}%
+      \DeclareAcronymList{\@glo@type}%
+      \SetFootnoteAcronymDisplayStyle{\@glo@type}%
+    \fi
+    \glskeylisttok{##1}%
+    \glslabeltok{##2}%
+    \glsshorttok{##3}%
+    \glslongtok{##4}%
+    \newacronymhook
+    \FootnoteNewAcronymDef
+  }%
+  \@for\@gls@type:=\@glsacronymlists\do{%
+    \SetFootnoteAcronymDisplayStyle{\@gls@type}%
+  }%
+  \ifglsacrsmallcaps
+     \renewcommand*{\acronymfont}[1]{\textsc{##1}}%
+     \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+  \else
+     \ifglsacrsmaller
+        \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}%
+     \fi
+  \fi
+  \ifglsacrdua
+     \PackageError{glossaries}{Option clash: `footnote' and `dua'
+     can't both be set}{}%
+  \fi
+}%
+\DeclareRobustCommand*{\glsdoparenifnotempty}[2]{%
+  \protected@edef\gls@tmp{#1}%
+  \ifdefempty\gls@tmp
+  {}%
+  {%
+    \ifx\gls@tmp\@gls@default@value
+    \else
+      \space (#2{#1})%
+    \fi
+  }%
+}
+\newcommand*{\SetSmallAcronymDisplayStyle}[1]{%
+  \defglsentryfmt[#1]{%
+    \ifdefempty\glscustomtext
+    {%
+      \let\gls@org@insert\glsinsert
+      \let\glsinsert\@empty
+      \ifglsused{\glslabel}%
+      {%
+        \acronymfont{\glsgenentryfmt}\gls@org@insert
+      }%
+      {%
+        \glsgenentryfmt
+        \ifglshassymbol{\glslabel}%
+        {%
+          \glsifplural
+          {%
+            \def\@glo@symbol{\glsentrysymbolplural{\glslabel}}%
+          }%
+          {%
+            \def\@glo@symbol{\glsentrysymbol{\glslabel}}%
+          }%
+          \space
+            (\glscapscase
+            {\firstacronymfont{\@glo@symbol}}%
+            {\firstacronymfont{\@glo@symbol}}%
+            {\firstacronymfont{\mfirstucMakeUppercase{\@glo@symbol}}})%
+        }%
+        {}%
+      }%
+    }%
+    {\glscustomtext\glsinsert}%
+  }%
+}
+\newcommand*{\SmallNewAcronymDef}{%
+  \edef\@do@newglossaryentry{%
+    \noexpand\newglossaryentry{\the\glslabeltok}%
+    {%
+      type=\acronymtype,%
+      name={\noexpand\acronymfont{\the\glsshorttok}},%
+      sort={\the\glsshorttok},%
+      text={\the\glsshorttok},%
+      plural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      first={\the\glslongtok},%
+      firstplural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      short={\the\glsshorttok},%
+      shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+      long={\the\glslongtok},%
+      longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+      description={\noexpand\@glo@first},%
+      descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      symbol={\the\glsshorttok},%
+      symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      \the\glskeylisttok
+    }%
+  }%
+  \let\@org@gls@assign@firstpl\gls@assign@firstpl
+  \let\@org@gls@assign@plural\gls@assign@plural
+  \let\@org@gls@assign@descplural\gls@assign@descplural
+  \let\@org@gls@assign@symbolplural\gls@assign@symbolplural
+  \def\gls@assign@firstpl##1##2{%
+    \@@gls@expand@field{##1}{firstpl}{##2}%
+  }%
+  \def\gls@assign@plural##1##2{%
+    \@@gls@expand@field{##1}{plural}{##2}%
+  }%
+  \def\gls@assign@descplural##1##2{%
+    \@@gls@expand@field{##1}{descplural}{##2}%
+  }%
+  \def\gls@assign@symbolplural##1##2{%
+    \@@gls@expand@field{##1}{symbolplural}{##2}%
+  }%
+  \@do@newglossaryentry
+  \let\gls@assign@firstpl\@org@gls@assign@firstpl
+  \let\gls@assign@plural\@org@gls@assign@plural
+  \let\gls@assign@descplural\@org@gls@assign@descplural
+  \let\gls@assign@symbolplural\@org@gls@assign@symbolplural
+}
+\newcommand*{\SetSmallAcronymStyle}{%
+  \renewcommand{\newacronym}[4][]{%
+    \ifx\@glsacronymlists\@empty
+      \def\@glo@type{\acronymtype}%
+      \setkeys{glossentry}{##1}%
+      \DeclareAcronymList{\@glo@type}%
+      \SetSmallAcronymDisplayStyle{\@glo@type}%
+    \fi
+    \glskeylisttok{##1}%
+    \glslabeltok{##2}%
+    \glsshorttok{##3}%
+    \glslongtok{##4}%
+    \newacronymhook
+    \SmallNewAcronymDef
+  }%
+  \@for\@gls@type:=\@glsacronymlists\do{%
+    \SetSmallAcronymDisplayStyle{\@gls@type}%
+  }%
+  \ifglsacrsmallcaps
+    \renewcommand*{\acronymfont}[1]{\textsc{##1}}
+    \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+  \else
+    \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}
+  \fi
+  \ifglsacrdua
+    \ifglsacrsmallcaps
+      \PackageError{glossaries}{Option clash: `smallcaps' and `dua'
+      can't both be set}{}%
+    \else
+      \PackageError{glossaries}{Option clash: `smaller' and `dua'
+      can't both be set}{}%
+    \fi
+  \fi
+}%
+\newcommand*{\SetDUADisplayStyle}[1]{%
+  \defglsentryfmt[#1]{\glsgenentryfmt}%
+}
+\newcommand*{\DUANewAcronymDef}{%
+  \edef\@do@newglossaryentry{%
+    \noexpand\newglossaryentry{\the\glslabeltok}%
+    {%
+      type=\acronymtype,%
+      name={\the\glsshorttok},%
+      text={\the\glslongtok},%
+      first={\the\glslongtok},%
+      plural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      firstplural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      short={\the\glsshorttok},%
+      shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+      long={\the\glslongtok},%
+      longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+      description={\the\glslongtok},%
+      descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},%
+      symbol={\the\glsshorttok},%
+      symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+      \the\glskeylisttok
+    }%
+  }%
+  \let\@org@gls@assign@firstpl\gls@assign@firstpl
+  \let\@org@gls@assign@plural\gls@assign@plural
+  \let\@org@gls@assign@symbolplural\gls@assign@symbolplural
+  \let\@org@gls@assign@descplural\gls@assign@descplural
+  \def\gls@assign@firstpl##1##2{%
+    \@@gls@expand@field{##1}{firstpl}{##2}%
+  }%
+  \def\gls@assign@plural##1##2{%
+    \@@gls@expand@field{##1}{plural}{##2}%
+  }%
+  \def\gls@assign@symbolplural##1##2{%
+    \@@gls@expand@field{##1}{symbolplural}{##2}%
+  }%
+  \def\gls@assign@descplural##1##2{%
+    \@@gls@expand@field{##1}{descplural}{##2}%
+  }%
+  \@do@newglossaryentry
+  \let\gls@assign@firstpl\@org@gls@assign@firstpl
+  \let\gls@assign@plural\@org@gls@assign@plural
+  \let\gls@assign@symbolplural\@org@gls@assign@symbolplural
+  \let\gls@assign@descplural\@org@gls@assign@descplural
+}
+\newcommand*{\SetDUAStyle}{%
+  \renewcommand{\newacronym}[4][]{%
+    \ifx\@glsacronymlists\@empty
+      \def\@glo@type{\acronymtype}%
+      \setkeys{glossentry}{##1}%
+      \DeclareAcronymList{\@glo@type}%
+      \SetDUADisplayStyle{\@glo@type}%
+    \fi
+    \glskeylisttok{##1}%
+    \glslabeltok{##2}%
+    \glsshorttok{##3}%
+    \glslongtok{##4}%
+    \newacronymhook
+    \DUANewAcronymDef
+  }%
+  \@for\@gls@type:=\@glsacronymlists\do{%
+    \SetDUADisplayStyle{\@gls@type}%
+  }%
+}
+\newcommand*{\SetAcronymStyle}{%
+  \SetDefaultAcronymStyle
+  \ifglsacrdescription
+    \ifglsacrfootnote
+      \SetDescriptionFootnoteAcronymStyle
+    \else
+      \ifglsacrdua
+        \SetDescriptionDUAAcronymStyle
+      \else
+        \SetDescriptionAcronymStyle
+      \fi
+    \fi
+  \else
+    \ifglsacrfootnote
+      \SetFootnoteAcronymStyle
+    \else
+      \ifthenelse{\boolean{glsacrsmallcaps}\OR
+        \boolean{glsacrsmaller}}%
+      {%
+        \SetSmallAcronymStyle
+      }%
+      {%
+        \ifglsacrdua
+          \SetDUAStyle
+        \fi
+      }%
+    \fi
+  \fi
+}
+\SetAcronymStyle
+\newcommand*{\SetCustomDisplayStyle}[1]{%
+  \defglsentryfmt[#1]{\glsgenentryfmt}%
+}
+\newcommand*{\CustomAcronymFields}{%
+  name={\the\glsshorttok},%
+  description={\the\glslongtok},%
+  first={\acrfullformat{\the\glslongtok}{\the\glsshorttok}},%
+  firstplural={\acrfullformat
+    {\noexpand\glsentrylongpl{\the\glslabeltok}}%
+    {\noexpand\glsentryshortpl{\the\glslabeltok}}},%
+  text={\the\glsshorttok},%
+  plural={\the\glsshorttok\noexpand\acrpluralsuffix}%
+}
+\newcommand*{\CustomNewAcronymDef}{%
+  \protected@edef\@do@newglossaryentry{%
+    \noexpand\newglossaryentry{\the\glslabeltok}%
+    {%
+      type=\acronymtype,%
+      short={\the\glsshorttok},%
+      shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+      long={\the\glslongtok},%
+      longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+      user1={\the\glsshorttok},%
+      user2={\the\glsshorttok\noexpand\acrpluralsuffix},%
+      user3={\the\glslongtok},%
+      user4={\the\glslongtok\noexpand\acrpluralsuffix},%
+      \CustomAcronymFields,%
+      \the\glskeylisttok
+    }%
+  }%
+  \@do@newglossaryentry
+}
+\newcommand*{\SetCustomStyle}{%
+  \renewcommand{\newacronym}[4][]{%
+    \ifx\@glsacronymlists\@empty
+      \def\@glo@type{\acronymtype}%
+      \setkeys{glossentry}{##1}%
+      \DeclareAcronymList{\@glo@type}%
+      \SetCustomDisplayStyle{\@glo@type}%
+    \fi
+    \glskeylisttok{##1}%
+    \glslabeltok{##2}%
+    \glsshorttok{##3}%
+    \glslongtok{##4}%
+    \newacronymhook
+    \CustomNewAcronymDef
+  }%
+  \@for\@gls@type:=\@glsacronymlists\do{%
+    \SetCustomDisplayStyle{\@gls@type}%
+  }%
+}
+\RequirePackage{glossary-hypernav}
+\@gls@loadlist
+\@gls@loadlong
+\@gls@loadsuper
+\@gls@loadtree
+\ifx\@glossary@default@style\relax
+\else
+  \setglossarystyle{\@glossary@default@style}
+\fi
+\newcommand*{\showgloparent}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@parent\endcsname
+}
+\newcommand*{\showglolevel}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@level\endcsname
+}
+\newcommand*{\showglotext}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@text\endcsname
+}
+\newcommand*{\showgloplural}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@plural\endcsname
+}
+\newcommand*{\showglofirst}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@first\endcsname
+}
+\newcommand*{\showglofirstpl}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@firstpl\endcsname
+}
+\newcommand*{\showglotype}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@type\endcsname
+}
+\newcommand*{\showglocounter}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@counter\endcsname
+}
+\newcommand*{\showglouseri}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@useri\endcsname
+}
+\newcommand*{\showglouserii}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@userii\endcsname
+}
+\newcommand*{\showglouseriii}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@useriii\endcsname
+}
+\newcommand*{\showglouseriv}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@useriv\endcsname
+}
+\newcommand*{\showglouserv}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@userv\endcsname
+}
+\newcommand*{\showglouservi}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@uservi\endcsname
+}
+\newcommand*{\showgloname}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@name\endcsname
+}
+\newcommand*{\showglodesc}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@desc\endcsname
+}
+\newcommand*{\showglodescplural}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@descplural\endcsname
+}
+\newcommand*{\showglosort}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@sort\endcsname
+}
+\newcommand*{\showglosymbol}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@symbol\endcsname
+}
+\newcommand*{\showglosymbolplural}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@symbolplural\endcsname
+}
+\newcommand*{\showgloshort}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@short\endcsname
+}
+\newcommand*{\showglolong}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@long\endcsname
+}
+\newcommand*{\showgloindex}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@index\endcsname
+}
+\newcommand*{\showgloflag}[1]{%
+  \expandafter\show\csname ifglo@\glsdetoklabel{#1}@flag\endcsname
+}
+\newcommand*{\showgloloclist}[1]{%
+  \expandafter\show\csname glo@\glsdetoklabel{#1}@loclist\endcsname
+}
+\newcommand*{\showglofield}[2]{%
+ \csshow{glo@\glsdetoklabel{#1}@#2}%
+}
+\newcommand*{\showacronymlists}{%
+   \show\@glsacronymlists
+}
+\newcommand*{\showglossaries}{%
+   \show\@glo@types
+}
+\newcommand*{\showglossaryin}[1]{%
+  \expandafter\show\csname @glotype@#1@in\endcsname
+}
+\newcommand*{\showglossaryout}[1]{%
+  \expandafter\show\csname @glotype@#1@out\endcsname
+}
+\newcommand*{\showglossarytitle}[1]{%
+  \expandafter\show\csname @glotype@#1@title\endcsname
+}
+\newcommand*{\showglossarycounter}[1]{%
+  \expandafter\show\csname @glotype@#1@counter\endcsname
+}
+\newcommand*{\showglossaryentries}[1]{%
+  \expandafter\show\csname glolist@#1\endcsname
+}
+\csname ifglscompatible-2.07\endcsname
+  \RequirePackage{glossaries-compatible-207}
+\fi
+%    \end{macrocode}
+%\iffalse
+%    \begin{macrocode}
+%</glossaries-2020-03-19.sty>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
 %<*glossaries.perl>
 %    \end{macrocode}
 %\fi
-- 
cgit v1.2.3

