%%
%% This is file `zref-base.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% zref.dtx  (with options: `base')
%% 
%% This is a generated file.
%% 
%% Project: zref
%% Version: 2026-03-07 v2.37
%% 
%% Copyright (C)
%%   2006-2012 Heiko Oberdiek
%%   2016-2026 Oberdiek Package Support Group
%% 
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3c of this license or (at your option) any later
%% version. This version of this license is in
%%    https://www.latex-project.org/lppl/lppl-1-3c.txt
%% and the latest version of this license is in
%%    https://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of
%% LaTeX version 2005/12/01 or later.
%% 
%% This work has the LPPL maintenance status "maintained".
%% 
%% The Current Maintainers of this work are
%% Heiko Oberdiek and the Oberdiek Package Support Group
%% https://github.com/ho-tex/zref/issues
%% 
%% This work consists of the main source file zref.dtx
%% and the derived files
%%    zref.sty, zref.pdf, zref.ins, zref.drv, zref-base.sty,
%%    zref-abspage.sty, zref-abspos.sty, zref-counter.sty,
%%    zref-dotfill.sty, zref-env.sty, zref-hyperref.sty,
%%    zref-lastpage.sty, zref-marks.sty, zref-nextpage.sty,
%%    zref-pageattr.sty, zref-pagelayout.sty, zref-perpage.sty,
%%    zref-runs.sty, zref-savepos.sty, zref-thepage.sty,
%%    zref-titleref.sty, zref-totpages.sty, zref-user.sty,
%%    zref-xr.sty, zref-example.tex, zref-example-lastpage.tex,
%%    zref-example-nextpage.tex, zref-test1.tex,
%%    zref-test-base.tex, zref-test-runs.tex,
%%    zref-test-titleref-memoir.tex.
%% 
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-base}%
  [2026-03-07 v2.37 Module base for zref (HO)]%
\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
\RequirePackage{ltxcmds}[2010/12/02]
\RequirePackage{infwarerr}[2010/04/08]
\RequirePackage{kvsetkeys}[2010/03/01]
\RequirePackage{kvdefinekeys}[2010/03/01]
\RequirePackage{pdftexcmds}[2010/04/01]
\def\ZREF@name{zref}
\ltx@IfUndefined{protected}{%
  \RequirePackage{makerobust}[2006/03/18]%
  \def\ZREF@Robust#1#2{%
    \def\ZREF@temp{\MakeRobustcommand#2}%
    \afterassignment\ZREF@temp
    #1#2%
  }%
}{%
  \def\ZREF@Robust#1{%
    \protected#1%
  }%
}
\def\ZREF@IfDefinable#1#2#3{%
  \@ifdefinable{#1}{%
    \ZREF@Robust{#2}#1#3%
  }%
}
\def\ZREF@UpdatePdfTeX{Update pdfTeX.}
\newif\ifZREF@found
\def\ZREF@patch#1{%
  \ltx@IfUndefined{#1}{%
    \ltx@gobble
  }{%
    \expandafter\let\csname ZREF@org@#1\expandafter\endcsname
    \csname #1\endcsname
    \ltx@firstofone
  }%
}
\ltx@IfUndefined{eTeXversion}{%
  \PackageError\ZREF@name{%
    Missing support for eTeX; package is abandoned%
  }{%
    Use a TeX compiler that support eTeX and enable eTeX %
    in the format.%
  }%
  \endinput
}{}%
\RequirePackage{etexcmds}[2007/09/09]
\ifetex@unexpanded
\else
  \PackageError\ZREF@name{%
    Missing e-TeX's \string\unexpanded.\MessageBreak
    Add \string\RequirePackage\string{etexcmds\string} before %
    \string\documentclass%
  }{%
    Probably you are using some package (e.g. ConTeXt) that %
    redefines \string\unexpanded%
  }%
  \expandafter\endinput
\fi
\RequirePackage{auxhook}
\AddLineBeginAux{%
  \string\providecommand\string\zref@newlabel[2]{}%
}
\def\ZREF@RefPrefix{Z@R}
\ZREF@Robust\edef\zref@newlabel{%
  \noexpand\@newl@bel{\ZREF@RefPrefix}%
}
\ZREF@Robust\def\zref@newlist#1{%
  \zref@iflistundefined{#1}{%
    \@ifdefinable{Z@L@#1}{%
     \global\expandafter\let\csname Z@L@#1\endcsname\ltx@empty
     \PackageInfo\ZREF@name{New property list: #1}%
    }%
  }{%
    \PackageError\ZREF@name{%
      Property list `#1' already exists%
    }\@ehc
  }%
}
\def\zref@iflistundefined#1{%
  \ltx@ifundefined{Z@L@#1}%
}
\ZREF@Robust\def\zref@listexists#1{%
  \zref@iflistundefined{#1}{%
    \PackageError\ZREF@name{%
      Property list `#1' does not exist%
    }\@ehc
  }%
}
\ZREF@Robust\def\zref@iflistcontainsprop#1#2{%
  \zref@iflistundefined{#1}{%
    \ltx@secondoftwo
  }{%
    \begingroup\expandafter\endgroup
    \expandafter\in@
    \csname#2\expandafter\expandafter\expandafter\endcsname
    \expandafter\expandafter\expandafter{\csname Z@L@#1\endcsname}%
    \csname ltx@\ifin@ first\else second\fi oftwo\endcsname
  }%
}
\def\zref@listforloop#1#2{%
  \zref@listexists{#1}{%
    \expandafter\expandafter\expandafter\@tfor
    \expandafter\expandafter\expandafter\zref@prop
    \expandafter\expandafter\expandafter:%
    \expandafter\expandafter\expandafter=%
    \csname Z@L@#1\endcsname
    \do{%
      \begingroup
        \escapechar=-1 %
        \edef\x{\endgroup
          \def\noexpand\zref@prop{%
            \expandafter\string\zref@prop
          }%
        }%
      \x
      #2\zref@prop
    }%
  }%
}
\ZREF@Robust\def\zref@addprops#1#2{%
  \zref@listexists{#1}{%
    \comma@parse{#2}{%
      \zref@propexists\comma@entry{%
        \zref@iflistcontainsprop{#1}\comma@entry{%
          \PackageWarning\ZREF@name{%
            Property `\comma@entry' is already in list `#1'%
          }%
        }{%
          \begingroup\expandafter\endgroup
          \expandafter\g@addto@macro
          \csname Z@L@#1\expandafter\endcsname
          \expandafter{\csname\comma@entry\endcsname}%
        }%
      }%
      \ltx@gobble
    }%
  }%
}
\ZREF@Robust\def\zref@addprop#1#2{%
  \zref@listexists{#1}{%
    \zref@propexists{#2}{%
      \zref@iflistcontainsprop{#1}{#2}{%
        \PackageWarning\ZREF@name{%
          Property `#2' is already in list `#1'%
        }%
      }{%
        \begingroup\expandafter\endgroup
        \expandafter\g@addto@macro
        \csname Z@L@#1\expandafter\endcsname
        \expandafter{\csname#2\endcsname}%
      }%
    }%
  }%
}
\ZREF@Robust\def\zref@localaddprops#1#2{%
  \zref@listexists{#1}{%
    \comma@parse{#2}{%
      \zref@propexists\comma@entry{%
        \zref@iflistcontainsprop{#1}\comma@entry{%
          \PackageWarning\ZREF@name{%
            Property `\comma@entry' is already in list `#1'%
          }%
        }{%
          \begingroup\expandafter\endgroup
          \expandafter\ltx@LocalAppendToMacro
          \csname Z@L@#1\expandafter\endcsname
          \expandafter{\csname\comma@entry\endcsname}%
        }%
      }%
      \ltx@gobble
    }%
  }%
}
\ZREF@Robust\def\zref@localaddprop#1#2{%
  \zref@listexists{#1}{%
    \zref@propexists{#2}{%
      \zref@iflistcontainsprop{#1}{#2}{%
        \PackageWarning\ZREF@name{%
          Property `#2' is already in list `#1'%
        }%
      }{%
        \begingroup\expandafter\endgroup
        \expandafter\ltx@LocalAppendToMacro
        \csname Z@L@#1\expandafter\endcsname
        \expandafter{\csname#2\endcsname}%
      }%
    }%
  }%
}
\ltx@IfUndefined{pdf@strcmp}{%
  \ZREF@Robust\def\zref@delprop{%
    \ZREF@delprop\gdef
  }%
  \ZREF@Robust\def\zref@localdelprop{%
    \ZREF@delprop\def
  }%
  \def\ZREF@delprop#1#2#3{%
    \zref@listexists{#2}{%
      \begingroup
        \escapechar=-1 %
        \def\ZREF@param{#3}%
        \@onelevel@sanitize\ZREF@param
        \toks@{}%
        \expandafter\expandafter\expandafter\ZREF@@delprop
        \csname Z@L@#2\endcsname!%
      \expandafter\endgroup
      \expandafter#1\csname Z@L@#2\expandafter\endcsname
      \expandafter{%
        \the\toks@
      }%
    }%
  }%
  \def\ZREF@@delprop#1{%
    \expandafter\ZREF@@@delprop\expandafter{\string#1}#1%
  }%
  \def\ZREF@@@delprop#1#2{%
    \ifx#2!%
    \else
      \def\ZREF@temp{#1}%
      \@onelevel@sanitize\ZREF@temp
      \ifx\ZREF@param\ZREF@temp
      \else
        \toks@\expandafter{%
          \the\expandafter\toks@\csname#1\endcsname
        }%
      \fi
      \expandafter\ZREF@@delprop
    \fi
  }%
}{%
  \ZREF@Robust\def\zref@delprop{%
    \ZREF@delprop\xdef
  }%
  \ZREF@Robust\def\zref@localdelprop{%
    \ZREF@delprop\edef
  }%
  \def\ZREF@delprop#1#2#3{%
    \zref@listexists{#2}{%
      \def\ZREF@param{#3}%
      \edef\ZREF@SavedEscapechar{\the\escapechar}%
      \escapechar=-1 %
      \expandafter#1\csname Z@L@#2%
      \expandafter\expandafter\expandafter\endcsname{%
        \expandafter\expandafter\expandafter\ZREF@@delprop
        \csname Z@L@#2\endcsname!%
      }%
      \escapechar=\ZREF@SavedEscapechar\relax
    }%
  }%
  \def\ZREF@@delprop#1{%
    \expandafter\ZREF@@@delprop\expandafter{\string#1}#1%
  }%
  \def\ZREF@@@delprop#1#2{%
    \ifx#2!%
    \else
      \ifnum\pdf@strcmp{#1}{\ZREF@param}=\ltx@zero
      \else
        \expandafter\noexpand\csname#1\endcsname
      \fi
      \expandafter\ZREF@@delprop
    \fi
  }%
}
\def\zref@ifpropundefined#1{%
  \ltx@ifundefined{Z@E@#1}%
}
\ZREF@Robust\def\zref@propexists#1{%
  \zref@ifpropundefined{#1}{%
    \PackageError\ZREF@name{%
      Property `#1' does not exist%
    }\@ehc
  }%
}
\ZREF@Robust\def\zref@newprop{%
  \@ifstar{%
    \let\ZREF@X\noexpand
    \ZREF@newprop
  }{%
    \let\ZREF@X\ltx@empty
    \ZREF@newprop
  }%
}
\def\ZREF@newprop#1{%
  \edef\ZREF@P{#1}%
  \@onelevel@sanitize\ZREF@P
  \begingroup
  \ifx\ZREF@P\ZREF@par
    \@PackageError\ZREF@name{%
      Invalid property name `\ZREF@P'%
    }{%
      The property name `par' is not allowed %
      because of internal reasons.%
      \MessageBreak
      \@ehc
    }%
    \def\ZREF@@newprop[##1]##2{\endgroup}%
  \else
    \zref@ifpropundefined\ZREF@P{%
      \endgroup
      \PackageInfo\ZREF@name{%
        New property: \ZREF@P
      }%
    }{%
      \@PackageError\ZREF@name{%
        Property `\ZREF@P' already exists%
      }\@ehc
      \def\ZREF@@newprop[##1]##2{\endgroup}%
    }%
  \fi
  \@ifnextchar[\ZREF@@newprop{\ZREF@@newprop[\zref@default]}%
}
\def\ZREF@par{par}
\@onelevel@sanitize\ZREF@par
\def\ZREF@@newprop[#1]{%
  \global\@namedef{Z@D@\ZREF@P}{#1}%
  \global\expandafter\let\csname Z@X@\ZREF@P\endcsname\ZREF@X
  \begingroup\expandafter\endgroup
  \expandafter\ZREF@@@newprop\csname\ZREF@P\endcsname
  \expandafter\gdef\csname Z@C@\ZREF@P\endcsname{}%
  \zref@setcurrent\ZREF@P
}
\def\ZREF@@@newprop#1{%
  \expandafter
  \gdef\csname Z@E@\ZREF@P\endcsname##1#1##2##3\ZREF@nil{##2}%
}
\ZREF@Robust\def\zref@showprop#1{%
  \zref@ifpropundefined{#1}{%
    \@PackageInfoNoLine{\ZREF@name}{%
      Show property `#1': <undefined>%
    }%
  }{%
    \begingroup
      \toks@\expandafter\expandafter\expandafter{%
        \csname Z@C@#1\endcsname
      }%
      \edef\ZREF@value{\the\toks@}%
      \ltx@onelevel@sanitize\ZREF@value
      \toks@\expandafter\expandafter\expandafter{%
        \csname Z@D@#1\endcsname
      }%
      \edef\ZREF@default{\the\toks@}%
      \ltx@onelevel@sanitize\ZREF@default
      \@PackageInfoNoLine{\ZREF@name}{%
        Show property `#1':\MessageBreak
        \expandafter\ifx\csname Z@X@#1\endcsname\ltx@empty
          Immediate %
        \else
          Delayed %
        \fi
        value: [\ZREF@value]\MessageBreak
        Default: [\ZREF@default]%
      }%
    \endgroup
  }%
}
\ZREF@Robust\def\zref@setcurrent#1#2{%
  \zref@propexists{#1}{%
    \expandafter\def\csname Z@C@#1\endcsname{#2}%
  }%
}
\def\ZREF@getcurrent#1{%
  \romannumeral0%
  \ltx@ifundefined{Z@C@#1}{%
    \ltx@space
  }{%
    \expandafter\expandafter\expandafter\ltx@space
    \csname Z@C@#1\endcsname
  }%
}
\def\ZREF@wu@getcurrent#1{%
  \etex@unexpanded\expandafter\expandafter\expandafter{%
    \ZREF@getcurrent{#1}%
  }%
}
\let\zref@getcurrent\ZREF@getcurrent
\ZREF@Robust\def\zref@label#1{%
  \zref@labelbylist{#1}\ZREF@mainlist
}
\ZREF@Robust\def\zref@labelbylist#1#2{%
  \@bsphack
    \zref@listexists{#2}{%
      \expandafter\expandafter\expandafter\ZREF@label
      \expandafter\expandafter\expandafter{%
        \csname Z@L@#2\endcsname
      }{#1}%
    }%
  \@esphack
}
\ZREF@Robust\def\zref@labelbyprops#1#2{%
  \@bsphack
    \begingroup
      \toks@{}%
      \comma@parse{#2}{%
        \zref@ifpropundefined\comma@entry{%
          \PackageWarning\ZREF@name{%
            Property `\comma@entry' is not known%
          }%
        }{%
          \toks@\expandafter{%
            \the\expandafter\toks@\csname\comma@entry\endcsname
          }%
        }%
        \ltx@gobble
      }%
    \expandafter\endgroup
    \expandafter\ZREF@label\expandafter{\the\toks@}{#1}%
  \@esphack
}
\ZREF@Robust\def\zref@labelbykv#1#2{%
  \@bsphack
    \begingroup
      \let\Z@L@ZREF@temp\ltx@empty
      \kvsetkeys{ZREF@LABEL}{#1}%
      \ifZREF@immediate
        \expandafter\zref@wrapper@immediate\expandafter{%
          \expandafter\ZREF@label\expandafter{\Z@L@ZREF@temp}{#2}%
        }%
      \else
        \expandafter\ZREF@label\expandafter{\Z@L@ZREF@temp}{#2}%
      \fi
    \endgroup
  \@esphack
}
\kv@define@key{ZREF@LABEL}{prop}{%
  \edef\ZREF@param{#1}%
  \zref@propexists\ZREF@param{%
    \zref@iflistcontainsprop{ZREF@temp}\ZREF@param{}{%
      \begingroup\expandafter\endgroup
      \expandafter\ltx@LocalAppendToMacro
      \expandafter\Z@L@ZREF@temp
      \expandafter{\csname\ZREF@param\endcsname}%
    }%
  }%
}
\kv@define@key{ZREF@LABEL}{list}{%
  \zref@listforloop{#1}{%
    \zref@iflistcontainsprop{ZREF@temp}\zref@prop{}{%
      \begingroup\expandafter\endgroup
      \expandafter\ltx@LocalAppendToMacro
      \expandafter\Z@L@ZREF@temp
      \expandafter{\csname\zref@prop\endcsname}%
    }%
    \ltx@gobble
  }%
}
\kv@define@key{ZREF@LABEL}{delprop}{%
  \zref@propexists{#1}{%
    \zref@localdelprop{ZREF@temp}{#1}%
  }%
}
\kv@define@key{ZREF@LABEL}{immediate}[true]{%
  \edef\ZREF@param{#1}%
  \ifx\ZREF@param\ZREF@true
    \ZREF@immediatetrue
  \else
    \ifx\ZREF@param\ZREF@false
      \ZREF@immediatefalse
    \else
      \PackageWarning\ZREF@name{%
        Option `immediate' expects `true' or `false'.\MessageBreak
        Ignoring invalid value `\ZREF@param'%
      }%
    \fi
  \fi
}
\def\ZREF@false{false}
\def\ZREF@true{true}
\kv@define@key{ZREF@LABEL}{values}[]{%
  \kv@parse{#1}{%
    \ifx\kv@value\relax
      \@PackageWarning\ZREF@name{%
        Missing value for property `\kv@key'%
      }%
      \expandafter\ltx@gobbletwo
    \else
      \expandafter\zref@setcurrent
    \fi
  }%
}
\newif\ifZREF@immediate
\ZREF@Robust{\long\def}\zref@wrapper@immediate#1{%
  \begingroup
    \ZREF@immediatetrue
    \let\ZREF@org@write\write
    \def\write{\immediate\ZREF@org@write}%
    #1%
  \endgroup
}
\def\ZREF@label#1#2{%
  \if@filesw
    \begingroup
      \ifZREF@immediate
        \let\ZREF@org@thepage\thepage
      \fi
      \protected@write\@auxout{%
        \ifZREF@immediate
          \let\thepage\ZREF@org@thepage
        \fi
        \let\ZREF@temp\ltx@empty
        \@tfor\ZREF@P:=#1\do{%
          \begingroup
            \escapechar=-1 %
            \edef\x{\endgroup
              \def\noexpand\ZREF@P{%
                \expandafter\string\ZREF@P
              }%
            }%
          \x
          \expandafter\ifx
              \csname
                \ifZREF@immediate
                  relax%
                \else
                  Z@X@\ZREF@P%
                \fi
              \endcsname
              \noexpand
            \expandafter\let\csname Z@C@\ZREF@P\endcsname\relax
          \fi
          \toks@\expandafter{\ZREF@temp}%
          \edef\ZREF@temp{%
            \the\toks@
            \ltx@backslashchar\ZREF@P{%
              \expandafter\noexpand\csname Z@C@\ZREF@P\endcsname
            }%
          }%
        }%
      }{%
        \string\zref@newlabel{#2}{\ZREF@temp}%
      }%
    \endgroup
  \fi
}
\def\ZREF@addtoks#1{%
  \toks@\expandafter\expandafter\expandafter{%
    \expandafter\the\expandafter\toks@#1%
  }%
}
\def\zref@ifrefundefined#1{%
  \ltx@ifundefined{Z@R@#1}%
}
\ZREF@IfDefinable\zifrefundefined\def{%
  #1{%
    \zref@wrapper@babel\ZREF@ifrefundefined{#1}%
  }%
}
\def\ZREF@ifrefundefined#1{%
  \zref@refused{#1}%
  \zref@ifrefundefined{#1}%
}
\ZREF@Robust\def\zref@refused#1{%
  \zref@wrapper@babel\ZREF@refused{#1}%
}
\def\ZREF@refused#1{%
  \zref@ifrefundefined{#1}{%
    \protect\G@refundefinedtrue
    \@latex@warning{%
      Reference `#1' on page \thepage \space undefined%
    }%
  }{}%
}
\def\zref@ifrefcontainsprop#1#2{%
  \zref@ifrefundefined{#1}{%
    \ltx@secondoftwo
  }{%
    \expandafter\ZREF@ifrefcontainsprop
    \csname Z@E@#2\expandafter\endcsname
    \csname#2\expandafter\expandafter\expandafter\endcsname
    \expandafter\expandafter\expandafter{%
      \csname Z@R@#1\endcsname
    }%
  }%
}
\def\ZREF@ifrefcontainsprop#1#2#3{%
  \expandafter\ifx\expandafter\ZREF@novalue
  #1#3#2\ZREF@novalue\ZREF@nil\ltx@empty
    \expandafter\ltx@secondoftwo
  \else
    \expandafter\ltx@firstoftwo
  \fi
}
\def\ZREF@novalue{\ZREF@NOVALUE}
\def\ZREF@extract#1#2{%
  \romannumeral0%
  \ltx@ifundefined{Z@D@#2}{%
    \expandafter\ltx@space\zref@default
  }{%
    \expandafter\expandafter\expandafter\ZREF@@extract
    \expandafter\expandafter\expandafter{%
      \csname Z@D@#2\endcsname
    }{#1}{#2}%
  }%
}
\def\ZREF@@extract#1#2#3{%
  \expandafter\expandafter\expandafter\ltx@space
  \zref@extractdefault{#2}{#3}{#1}%
}
\def\ZREF@wu@extract#1#2{%
  \etex@unexpanded\expandafter\expandafter\expandafter{%
    \ZREF@extract{#1}{#2}%
  }%
}
\let\zref@extract\ZREF@extract
\def\ZREF@extractdefault#1#2#3{%
  \romannumeral0%
  \zref@ifrefundefined{#1}\ltx@firstoftwo{%
    \zref@ifpropundefined{#2}\ltx@firstoftwo\ltx@secondoftwo
  }{%
    \ltx@space
    #3%
  }{%
    \expandafter\expandafter\expandafter\ltx@space
    \csname Z@E@#2\expandafter\expandafter\expandafter\endcsname
    \csname Z@R@#1\expandafter\endcsname
    \csname#2\endcsname{#3}\ZREF@nil
  }%
}
\def\ZREF@wu@extractdefault#1#2#3{%
  \etex@unexpanded\expandafter\expandafter\expandafter{%
    \ZREF@extractdefault{#1}{#2}{#3}%
  }%
}
\let\zref@extractdefault\ZREF@extractdefault
\ZREF@Robust\def\zref@def@extract#1{%
  \zref@wrapper@babel{\ZREF@def@extract{#1}}%
}
\def\ZREF@def@extract#1#2#3{%
  \zref@refused{#2}%
  \expandafter\expandafter\expandafter\def
  \expandafter\expandafter\expandafter#1%
  \expandafter\expandafter\expandafter{%
    \zref@extract{#2}{#3}%
  }%
}
\ZREF@Robust\def\zref@def@extractdefault#1{%
  \zref@wrapper@babel{\ZREF@def@extractdefault{#1}}%
}
\def\ZREF@def@extractdefault#1#2#3#4{%
  \zref@refused{#2}%
  \expandafter\expandafter\expandafter\def
  \expandafter\expandafter\expandafter#1%
  \expandafter\expandafter\expandafter{%
    \zref@extractdefault{#2}{#3}{#4}%
  }%
}
\ZREF@Robust{\long\def}\ZREF@wrapper@unexpanded#1{%
  \let\zref@wrapper@unexpanded\ltx@firstofone
  \let\zref@getcurrent\ZREF@wu@getcurrent
  \let\zref@extractdefault\ZREF@wu@extractdefault
  \let\zref@extract\ZREF@wu@extract
  #1%
  \let\zref@wrapper@unexpanded\ZREF@wrapper@unexpanded
  \let\zref@getcurrent\ZREF@getcurrent
  \let\zref@extractdefault\ZREF@extractdefault
  \let\zref@extract\ZREF@extract
}
\ltx@IfUndefined{etex@unexpanded}{%
  \let\zref@wrapper@unexpanded\ltx@firstofone
}{%
  \let\zref@wrapper@unexpanded\ZREF@wrapper@unexpanded
}
\ZREF@Robust{\long\def}\zref@wrapper@babel#1#2{%
  \ifcsname if@safe@actives\endcsname
    \expandafter\ltx@firstofone
  \else
    \expandafter\ltx@secondoftwo
  \fi
  {%
    \if@safe@actives
      \expandafter\ltx@secondoftwo
    \else
      \expandafter\ltx@firstoftwo
    \fi
    {%
      \begingroup
        \csname @safe@activestrue\endcsname
        \edef\x{#2}%
      \expandafter\endgroup
      \expandafter\ZREF@wrapper@babel\expandafter{\x}{#1}%
    }%
  }{%
    #1{#2}%
  }%
}
\long\def\ZREF@wrapper@babel#1#2{%
  #2{#1}%
}
\ZREF@Robust\def\zref@require@unique{%
  \@ifundefined{c@zref@unique}{%
      \newcounter{zref@unique}%
    \renewcommand*{\thezref@unique}{%
      zref@\number\c@zref@unique
    }%
   \IfFormatAtLeastTF{2020/10/01}
    {%
     \AddToHook
       {include/after}
       {\setcounter{zref@unique}
         {\csname fp_to_int:n\endcsname{ceil(\c@zref@unique +100,-2)}}}
    }{}%
  }{}%
}
\ltx@IfUndefined{numexpr}{%
  \def\ZREF@number#1{\number#1}%
}{%
  \def\ZREF@number#1{\the\numexpr(#1)\relax}%
}
\ZREF@Robust\def\zref@setdefault#1{%
  \def\zref@default{#1}%
}
\zref@setdefault{%
  \nfss@text{\reset@font\bfseries ??}%
}
\ZREF@Robust\def\zref@setmainlist#1{%
  \def\ZREF@mainlist{#1}%
}
\zref@setmainlist{main}
\zref@newlist\ZREF@mainlist
\zref@newprop{default}{\@currentlabel}
\zref@newprop*{page}{\thepage}
\zref@addprops\ZREF@mainlist{default,page}
\def\ZREF@NewPropAnchor{%
  \zref@newprop{anchor}{%
    \ltx@ifundefined{@currentHref}{}{\@currentHref}%
  }%
  \global\let\ZREF@NewPropAnchor\relax
}
\def\ZREF@NewPropTitle{%
  \gdef\zref@titleref@current{}%
  \zref@newprop{title}{\zref@titleref@current}%
  \global\let\ZREF@NewPropTitle\relax
}
\def\ZREF@NewPropTheotype{%
  \zref@newprop{theotype}{}%
  \global\let\ZREF@NewPropTheotype\relax
}
\def\ZREF@NewPropPageValue{%
  \zref@newprop*{pagevalue}[0]{\number\c@page}%
  \global\let\ZREF@NewPropPageValue\relax
}
\let\ZREF@base@ok=Y
\endinput
%%
%% End of file `zref-base.sty'.
