%%
%% This is file `l3basics.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3basics.dtx  (with options: `package,trace')
%% 
%% 
%% EXPERIMENTAL CODE
%% 
%% Do not distribute this file without also distributing the
%% source files specified above.
%% 
%% Do not distribute a modified version of this file.
%% 
%% 
%% File: l3basics.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3names}
\GetIdInfo$Id: l3basics.dtx 583 2006-12-12 17:26:44Z morten $
       {L3 Experimental basic definitions}
\tex_let:D \let:NwN            \tex_let:D
\let:NwN   \if_true:           \tex_iftrue:D
\let:NwN   \if_false:          \tex_iffalse:D
\let:NwN   \else:              \tex_else:D
\let:NwN   \fi:                \tex_fi:D
\let:NwN   \reverse_if:N       \etex_unless:D
\let:NwN   \if:w               \tex_if:D
\let:NwN   \if_charcode:w     \tex_if:D
\let:NwN   \if_catcode:w      \tex_ifcat:D
\let:NwN   \if_meaning:NN      \tex_ifx:D
\let:NwN   \if_token_eq:NN     \tex_ifx:D
\let:NwN   \if_cs_meaning_eq:NN\tex_ifx:D
\let:NwN   \if_mode_math:      \tex_ifmmode:D
\let:NwN   \if_mode_horizontal:\tex_ifhmode:D
\let:NwN   \if_mode_vertical:  \tex_ifvmode:D
\let:NwN   \if_mode_inner:     \tex_ifinner:D
\let:NwN   \if_cs_exist:N      \etex_ifdefined:D
\let:NwN   \if_cs_exist:w      \etex_ifcsname:D
\let:NwN   \exp_after:NN       \tex_expandafter:D
\let:NwN   \exp_not:N          \tex_noexpand:D
\let:NwN   \exp_not:n          \etex_unexpanded:D
\let:NwN   \io_put_deferred:Nx \tex_write:D
\let:NwN   \token_to_meaning:N \tex_meaning:D
\let:NwN   \token_to_string:N  \tex_string:D
\let:NwN   \cs:w               \tex_csname:D
\let:NwN   \cs_end:            \tex_endcsname:D
\let:NwN   \cs_meaning:N       \tex_meaning:D
\tex_def:D \cs_meaning:c #1{\exp_after:NN\cs_meaning:N\cs:w #1\cs_end:}
\let:NwN   \cs_show:N          \tex_show:D
\tex_def:D \cs_show:c #1{\exp_after:NN\cs_show:N\cs:w #1\cs_end:}
\let:NwN   \scan_stop:         \tex_relax:D
\let:NwN   \group_begin:       \tex_begingroup:D
\let:NwN   \group_end:         \tex_endgroup:D
\let:NwN \group_execute_after:N \tex_aftergroup:D
\let:NwN   \the_internal:D     \tex_the:D
\let:NwN   \pref_global:D      \tex_global:D
\let:NwN   \pref_long:D        \tex_long:D
\let:NwN   \pref_protected:D   \etex_protected:D
\let:NwN   \def:Npn            \tex_def:D
\let:NwN   \def:Npx            \tex_edef:D
\pref_protected:D \def:Npn \def_long:Npn {\pref_long:D \def:Npn}
\pref_protected:D \def:Npn \def_long:Npx {\pref_long:D \def:Npx}
\pref_protected:D \def:Npn \def_protected:Npn {\pref_protected:D \def:Npn}
\pref_protected:D \def:Npn \def_protected:Npx {\pref_protected:D \def:Npx}
\def_protected:Npn \def_protected_long:Npn {
  \pref_protected:D \pref_long:D \def:Npn
}
\def_protected:Npn \def_protected_long:Npx {
  \pref_protected:D \pref_long:D \def:Npx
}
\let:NwN   \gdef:Npn           \tex_gdef:D
\let:NwN   \gdef:Npx           \tex_xdef:D
\def_protected:Npn \gdef_long:Npn {\pref_long:D \gdef:Npn}
\def_protected:Npn \gdef_long:Npx {\pref_long:D \gdef:Npx}
\def_protected:Npn \gdef_protected:Npn {\pref_protected:D \gdef:Npn}
\def_protected:Npn \gdef_protected:Npx {\pref_protected:D \gdef:Npx}
\def_protected:Npn \gdef_protected_long:Npn {
  \pref_protected:D \pref_long:D \gdef:Npn
}
\def_protected:Npn \gdef_protected_long:Npx {
  \pref_protected:D \pref_long:D \gdef:Npx
}
\def:Npn \c_true  {00}
\def:Npn \c_false {01}
\let:NwN \c_minus_one\m@ne
\tex_chardef:D \c_sixteen = 16\scan_stop:
\def:Npn \io_put_log:x{
      \tex_immediate:D\io_put_deferred:Nx \c_minus_one }
\def:Npn \io_put_term:x{
      \tex_immediate:D\io_put_deferred:Nx \c_sixteen }
\def:Npn\err_latex_bug:x#1{
   \io_put_term:x{This~is~a~LaTeX~bug!~Check~coding!}\tex_errmessage:D{#1}}
\def:Npn \cs_record_meaning:N#1{}
\def_long:Npn \use_none:n  #1{}
\def_long:Npn \use_arg_i:n #1{#1}
\def:Npn \chk_new_cs:N #1{
  \if:w \cs_if_free_p:N #1
    \exp_after:NN \use_none:n
  \else:
    \exp_after:NN \use_arg_i:n
  \fi:
  {
    \err_latex_bug:x {Command~name~`\token_to_string:N #1'~
                      already~defined!~
                      Current~meaning:~\token_to_meaning:N #1
                    }
  }
  \cs_record_meaning:N#1
  \io_put_log:x{Defining~\token_to_string:N #1~on~
                line~\tex_the:D \tex_inputlineno:D}
}
\def:Npn \cs_if_exist_p:N #1{
  \if:w \cs_if_free_p:N #1
    \c_false
  \else:
    \c_true \fi:}
\def:Npn \chk_if_exist_cs:N #1 {
  \if:w \cs_if_exist_p:N #1
  \else:
    \err_latex_bug:x{Command~ `\token_to_string:N #1'~
                     not~ yet~ defined!}
  \fi:}
\def:Npn \chk_if_exist_cs:c #1 {
  \exp_after:NN \chk_if_exist_cs:N \cs:w #1\cs_end: }
\def:Npn \cs_if_free_p:N #1{
  \if_cs_exist:N #1
    \if_meaning:NN#1\scan_stop:
      \if:w\cs_if_eq_name_p:NN #1\scan_stop:
        \c_false \else: \c_true \fi:
    \else:
       \c_false
    \fi:
  \else:
    \if:w \cs_if_eq_name_p:NN #1\c_undefined
      \c_false \else: \c_true \fi:
  \fi:
}
\let:NwN \cs_free_p:N \cs_if_free_p:N
\def:Npn \str_if_eq_p:nn #1#2{
  \str_if_eq_p_aux:w #1\scan_stop:\\#2\scan_stop:\\
}
\def:Npn \str_if_eq_p_aux:w #1#2\\#3#4\\{
  \if_meaning:NN#1#3
    \if_meaning:NN#1\scan_stop:\c_true \else:
    \if_meaning:NN#3\scan_stop:\c_false \else:
    \str_if_eq_p_aux:w #2\\#4\\\fi:\fi:
  \else:\c_false \fi:}
\def_long:Npn \cs_if_eq_name_p:NN #1#2{
  \exp_after:NN\exp_after:NN
  \exp_after:NN\str_if_eq_p_aux:w
  \exp_after:NN\token_to_string:N
  \exp_after:NN#1
  \exp_after:NN\scan_stop:
  \exp_after:NN\\
  \token_to_string:N#2\scan_stop:\\}
\def:Npn \str_if_eq_var_p:nf#1{
  \if:w \tex_number:D\str_if_eq_var_start:nnN{}{}#1\scan_stop:
}
\def:Npn\str_if_eq_var_start:nnN#1#2#3{
  \if:w#3\scan_stop:\exp_after:NN\str_if_eq_var_stop:w\fi:
  \str_if_eq_var_start:nnN{\if:w#3#1}{#2\fi:}
}
\def:Npn\str_if_eq_var_stop:w\str_if_eq_var_start:nnN#1#2#3{
  #1#3\scan_stop:'#213~\c_true\else:\c_false\fi:
}
\def_protected:Npn \def_new:Npn #1{\chk_new_cs:N #1
                         \def:Npn #1}
\def_protected:Npn \def_new:Npx #1{\chk_new_cs:N #1
                         \def:Npx #1}
\def_protected:Npn \def_long_new:Npn #1{\chk_new_cs:N #1
                                 \def_long:Npn #1}
\def_protected:Npn \def_long_new:Npx #1{\chk_new_cs:N #1
                                 \def_long:Npx #1}
\def_protected:Npn \def_protected_new:Npn #1{\chk_new_cs:N #1
                                 \def_protected:Npn #1}
\def_protected:Npn \def_protected_new:Npx #1{\chk_new_cs:N #1
                                 \def_protected:Npx #1}
\def_protected:Npn \def_protected_long_new:Npn #1{\chk_new_cs:N #1
                                 \def_protected_long:Npn #1}
\def_protected:Npn \def_protected_long_new:Npx #1{\chk_new_cs:N #1
                                 \def_protected_long:Npx #1}
\def_protected_new:Npn \gdef_new:Npn #1{\chk_new_cs:N #1
                         \gdef:Npn #1}
\def_protected_new:Npn \gdef_new:Npx #1{\chk_new_cs:N #1
                         \gdef:Npx #1}
\def_protected_new:Npn \gdef_long_new:Npn #1{\chk_new_cs:N #1
                                 \gdef_long:Npn #1}
\def_protected_new:Npn \gdef_long_new:Npx #1{\chk_new_cs:N #1
                                 \gdef_long:Npx #1}
\def_protected_new:Npn \gdef_protected_new:Npn #1{\chk_new_cs:N #1
                                 \gdef_protected:Npn #1}
\def_protected_new:Npn \gdef_protected_new:Npx #1{\chk_new_cs:N #1
                                 \gdef_protected:Npx #1}
\def_protected_new:Npn \gdef_protected_long_new:Npn #1{\chk_new_cs:N #1
                                 \gdef_protected_long:Npn #1}
\def_protected_new:Npn \gdef_protected_long_new:Npx #1{\chk_new_cs:N #1
                                 \gdef_protected_long:Npx #1}
\def_new:Npn \def:cpn #1{\exp_after:NN \def:Npn \cs:w #1\cs_end:}
\def_new:Npn \def:cpx #1{\exp_after:NN \def:Npx \cs:w #1\cs_end:}
\def_new:Npn \gdef:cpn #1{\exp_after:NN \gdef:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef:cpx #1{\exp_after:NN \gdef:Npx \cs:w #1\cs_end:}
\def_new:Npn \def_new:cpn #1{\exp_after:NN \def_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_new:cpx #1{\exp_after:NN \def_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \gdef_new:cpn #1{\exp_after:NN \gdef_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_new:cpx #1{\exp_after:NN \gdef_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \def_long:cpn #1{\exp_after:NN \def_long:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_long:cpx #1{
  \exp_after:NN\def_long:Npx\cs:w #1\cs_end:}
\def_new:Npn \gdef_long:cpn #1{
  \exp_after:NN \gdef_long:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_long:cpx #1{
  \exp_after:NN\gdef_long:Npx\cs:w #1\cs_end:}
\def_new:Npn \def_long_new:cpn #1{
  \exp_after:NN \def_long_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_long_new:cpx #1{
  \exp_after:NN \def_long_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \gdef_long_new:cpn #1{
  \exp_after:NN \gdef_long_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_long_new:cpx #1{
  \exp_after:NN \gdef_long_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \def_protected:cpn #1{
  \exp_after:NN \def_protected:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_protected:cpx #1{
  \exp_after:NN\def_protected:Npx\cs:w #1\cs_end:}
\def_new:Npn \gdef_protected:cpn #1{
  \exp_after:NN \gdef_protected:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected:cpx #1{
  \exp_after:NN\gdef_protected:Npx\cs:w #1\cs_end:}
\def_new:Npn \def_protected_new:cpn #1{
  \exp_after:NN \def_protected_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_protected_new:cpx #1{
  \exp_after:NN \def_protected_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_new:cpn #1{
  \exp_after:NN \gdef_protected_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_new:cpx #1{
  \exp_after:NN \gdef_protected_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \def_protected_long:cpn #1{
  \exp_after:NN \def_protected_long:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_protected_long:cpx #1{
  \exp_after:NN\def_protected_long:Npx\cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_long:cpn #1{
  \exp_after:NN \gdef_protected_long:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_long:cpx #1{
  \exp_after:NN\gdef_protected_long:Npx\cs:w #1\cs_end:}
\def_new:Npn \def_protected_long_new:cpn #1{
  \exp_after:NN \def_protected_long_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_protected_long_new:cpx #1{
  \exp_after:NN \def_protected_long_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_long_new:cpn #1{
  \exp_after:NN \gdef_protected_long_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_long_new:cpx #1{
  \exp_after:NN \gdef_protected_long_new:Npx \cs:w #1\cs_end:}
\def_new:cpn {def_aux_0:NNn} #1#2 {#1 #2 }
\def_new:cpn {def_aux_1:NNn} #1#2 {#1 #2 ##1 }
\def_new:cpn {def_aux_2:NNn} #1#2 {#1 #2 ##1##2 }
\def_new:cpn {def_aux_3:NNn} #1#2 {#1 #2 ##1##2##3 }
\def_new:cpn {def_aux_4:NNn} #1#2 {#1 #2 ##1##2##3##4 }
\def_new:cpn {def_aux_5:NNn} #1#2 {#1 #2 ##1##2##3##4##5 }
\def_new:cpn {def_aux_6:NNn} #1#2 {#1 #2 ##1##2##3##4##5##6 }
\def_new:cpn {def_aux_7:NNn} #1#2 {#1 #2 ##1##2##3##4##5##6##7 }
\def_new:cpn {def_aux_8:NNn} #1#2 {#1 #2 ##1##2##3##4##5##6##7##8 }
\def_new:cpn {def_aux_9:NNn} #1#2 {#1 #2 ##1##2##3##4##5##6##7##8##9 }
\def_protected_long_new:Npn \def_aux:NNnn #1#2#3#4 {
  \cs_if_really_exist:cTF {def_aux_\tex_the:D\etex_numexpr:D #3 :NNn}
  {
    \cs_use:c {def_aux_\tex_the:D\etex_numexpr:D #3 :NNn} #1 #2 {#4}
  }
  { \def_arg_number_error_msg:Nn #2{#3} }
}
\def_new:Npn \def_aux:Ncnn #1#2{
  \exp_after:NN \def_aux:NNnn \exp_after:NN #1 \cs:w #2\cs_end:}
\def_new:Npn \def_arg_number_error_msg:Nn #1#2 {
  \err_latex_bug:x{
    You're~ trying~ to~ define~ the~ command~ `\token_to_string:N #1'~
    with~ \use_arg_i:n{\tex_the:D\etex_numexpr:D #2\scan_stop:} ~
    arguments~ but~ I~ only~ allow~ 0-9~ arguments.~ I~ can~ probably~
    not~ help~ you~ here
  }
}
\def:cpn{def_aux_use_0_parameter:}{}
\def:cpn{def_aux_use_1_parameter:}{{##1}}
\def:cpn{def_aux_use_2_parameter:}{{##1}{##2}}
\def:cpn{def_aux_use_3_parameter:}{{##1}{##2}{##3}}
\def:cpn{def_aux_use_4_parameter:}{{##1}{##2}{##3}{##4}}
\def:cpn{def_aux_use_5_parameter:}{{##1}{##2}{##3}{##4}{##5}}
\def:cpn{def_aux_use_6_parameter:}{{##1}{##2}{##3}{##4}{##5}{##6}}
\def:cpn{def_aux_use_7_parameter:}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}
\def:cpn{def_aux_use_8_parameter:}{
  {##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}
\def:cpn{def_aux_use_9_parameter:}{
  {##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}
\def_new:Npn \def:NNn { \def_aux:NNnn \def:Npn }
\def_new:Npn \def:NNx { \def_aux:NNnn \def:Npx }
\def_new:Npn \def:cNn { \def_aux:Ncnn \def:Npn }
\def_new:Npn \def:cNx { \def_aux:Ncnn \def:Npx }
\def_new:Npn \gdef:NNn { \def_aux:NNnn \gdef:Npn }
\def_new:Npn \gdef:NNx { \def_aux:NNnn \gdef:Npx }
\def_new:Npn \gdef:cNn { \def_aux:Ncnn \gdef:Npn }
\def_new:Npn \gdef:cNx { \def_aux:Ncnn \gdef:Npx }
\def_new:Npn \def_new:NNn { \def_aux:NNnn \def_new:Npn }
\def_new:Npn \def_new:NNx { \def_aux:NNnn \def_new:Npx }
\def_new:Npn \def_new:cNn { \def_aux:Ncnn \def_new:Npn }
\def_new:Npn \def_new:cNx { \def_aux:Ncnn \def_new:Npx }
\def_new:Npn \gdef_new:NNn { \def_aux:NNnn \gdef_new:Npn }
\def_new:Npn \gdef_new:NNx { \def_aux:NNnn \gdef_new:Npx }
\def_new:Npn \gdef_new:cNn { \def_aux:Ncnn \gdef_new:Npn }
\def_new:Npn \gdef_new:cNx { \def_aux:Ncnn \gdef_new:Npx }
\def_new:Npn \def_long:NNn { \def_aux:NNnn \def_long:Npn }
\def_new:Npn \def_long:NNx { \def_aux:NNnn \def_long:Npx }
\def_new:Npn \def_long:cNn { \def_aux:Ncnn \def_long:Npn }
\def_new:Npn \def_long:cNx { \def_aux:Ncnn \def_long:Npx }
\def_new:Npn \gdef_long:NNn { \def_aux:NNnn \gdef_long:Npn }
\def_new:Npn \gdef_long:NNx { \def_aux:NNnn \gdef_long:Npx }
\def_new:Npn \gdef_long:cNn { \def_aux:Ncnn \gdef_long:Npn }
\def_new:Npn \gdef_long:cNx { \def_aux:Ncnn \gdef_long:Npx }
\def_new:Npn \def_long_new:NNn { \def_aux:NNnn \def_long_new:Npn }
\def_new:Npn \def_long_new:NNx { \def_aux:NNnn \def_long_new:Npx }
\def_new:Npn \def_long_new:cNn { \def_aux:Ncnn \def_long_new:Npn }
\def_new:Npn \def_long_new:cNx { \def_aux:Ncnn \def_long_new:Npx }
\def_new:Npn \gdef_long_new:NNn { \def_aux:NNnn \gdef_long_new:Npn }
\def_new:Npn \gdef_long_new:NNx { \def_aux:NNnn \gdef_long_new:Npx }
\def_new:Npn \gdef_long_new:cNn { \def_aux:Ncnn \gdef_long_new:Npn }
\def_new:Npn \gdef_long_new:cNx { \def_aux:Ncnn \gdef_long_new:Npx }
\def_new:Npn \def_protected:NNn { \def_aux:NNnn \def_protected:Npn }
\def_new:Npn \def_protected:NNx { \def_aux:NNnn \def_protected:Npx }
\def_new:Npn \def_protected:cNn { \def_aux:Ncnn \def_protected:Npn }
\def_new:Npn \def_protected:cNx { \def_aux:Ncnn \def_protected:Npx }
\def_new:Npn \gdef_protected:NNn { \def_aux:NNnn \gdef_protected:Npn }
\def_new:Npn \gdef_protected:NNx { \def_aux:NNnn \gdef_protected:Npx }
\def_new:Npn \gdef_protected:cNn { \def_aux:Ncnn \gdef_protected:Npn }
\def_new:Npn \gdef_protected:cNx { \def_aux:Ncnn \gdef_protected:Npx }
\def_new:Npn \def_protected_new:NNn { \def_aux:NNnn \def_protected_new:Npn }
\def_new:Npn \def_protected_new:NNx { \def_aux:NNnn \def_protected_new:Npx }
\def_new:Npn \def_protected_new:cNn { \def_aux:Ncnn \def_protected_new:Npn }
\def_new:Npn \def_protected_new:cNx { \def_aux:Ncnn \def_protected_new:Npx }
\def_new:Npn \gdef_protected_new:NNn { \def_aux:NNnn \gdef_protected_new:Npn }
\def_new:Npn \gdef_protected_new:NNx { \def_aux:NNnn \gdef_protected_new:Npx }
\def_new:Npn \gdef_protected_new:cNn { \def_aux:Ncnn \gdef_protected_new:Npn }
\def_new:Npn \gdef_protected_new:cNx { \def_aux:Ncnn \gdef_protected_new:Npx }
\def_new:Npn \def_protected_long:NNn { \def_aux:NNnn \def_protected_long:Npn }
\def_new:Npn \def_protected_long:NNx { \def_aux:NNnn \def_protected_long:Npx }
\def_new:Npn \def_protected_long:cNn { \def_aux:Ncnn \def_protected_long:Npn }
\def_new:Npn \def_protected_long:cNx { \def_aux:Ncnn \def_protected_long:Npx }
\def_new:Npn \gdef_protected_long:NNn { \def_aux:NNnn \gdef_protected_long:Npn }
\def_new:Npn \gdef_protected_long:NNx { \def_aux:NNnn \gdef_protected_long:Npx }
\def_new:Npn \gdef_protected_long:cNn { \def_aux:Ncnn \gdef_protected_long:Npn }
\def_new:Npn \gdef_protected_long:cNx { \def_aux:Ncnn \gdef_protected_long:Npx }
\def_new:Npn \def_protected_long_new:NNn {
  \def_aux:NNnn \def_protected_long_new:Npn }
\def_new:Npn \def_protected_long_new:NNx {
  \def_aux:NNnn \def_protected_long_new:Npx }
\def_new:Npn \def_protected_long_new:cNn {
  \def_aux:Ncnn \def_protected_long_new:Npn }
\def_new:Npn \def_protected_long_new:cNx {
  \def_aux:Ncnn \def_protected_long_new:Npx }
\def_new:Npn \gdef_protected_long_new:NNn {
  \def_aux:NNnn \gdef_protected_long_new:Npn }
\def_new:Npn \gdef_protected_long_new:NNx {
  \def_aux:NNnn \gdef_protected_long_new:Npx }
\def_new:Npn \gdef_protected_long_new:cNn {
  \def_aux:Ncnn \gdef_protected_long_new:Npn }
\def_new:Npn \gdef_protected_long_new:cNx {
  \def_aux:Ncnn \gdef_protected_long_new:Npx }
\def_protected_long_new:Npn \let:NN #1{
                              \let:NwN #1=~}
\def_new:Npn\let:cN #1 {\exp_after:NN\let:NN\cs:w#1\cs_end:}
\def_new:Npn\let:Nc{\exp_args:NNc\let:NN}
\def_new:Npn\let:cc{\exp_args:Ncc\let:NN}
\def_new:Npn \let_new:NN #1{\chk_new_cs:N #1
                              \let:NN #1}
\def_new:Npn \let_new:cN {\exp_args:Nc \let_new:NN}
\def_new:Npn \let_new:Nc {\exp_args:NNc \let_new:NN}
\def_new:Npn \let_new:cc {\exp_args:Ncc \let_new:NN}
\def_protected_new:Npn \glet:NN {\pref_global:D \let:NN}
\def_protected_new:Npn \glet:Nc {\exp_args:NNc \glet:NN}
\def_protected_new:Npn \glet:cN {\exp_args:Nc \glet:NN}
\def_new:Npn \glet:cc {\exp_args:Ncc \glet:NN}
\def_new:Npn \glet_new:NN #1{\chk_new_cs:N #1
                               \tex_global:D\let:NN #1}
\def_new:Npn \glet_new:cN {\exp_args:Nc \glet_new:NN}
\def_new:Npn \glet_new:Nc {\exp_args:NNc \glet_new:NN}
\def_new:Npn \glet_new:cc {\exp_args:Ncc \glet_new:NN}
\def_new:Npn \def:No{\exp_args:NNo\def:Npn}
\def_new:Npn \gdef:No  {\exp_args:NNo\gdef:Npn}
\def_long_new:Npn \def_test_function_aux:Nnnn #1#2#3#4{
  #1 {#2TF} #3 {#4
    \exp_after:NN\use_arg_i:nn\else:\exp_after:NN\use_arg_ii:nn\fi:}
  #1 {#2T} #3 {#4
    \else:\exp_after:NN\use_none:nn\fi:\use_arg_i:n}
  #1 {#2F} #3 {#4
    \exp_after:NN\use_none:nn\fi:\use_arg_i:n}}
\def_long_new:Npn \def_test_function_aux:Nnnx #1#2#3#4{
  #1 {#2TF} #3 {#4
    \exp_not:n{\exp_after:NN\use_arg_i:nn\else:\exp_after:NN\use_arg_ii:nn\fi:}}
  #1 {#2T} #3 {#4
    \exp_not:n{\else:\exp_after:NN\use_none:nn\fi:\use_arg_i:n}}
  #1 {#2F} #3 {#4
    \exp_not:n{\exp_after:NN\use_none:nn\fi:\use_arg_i:n}}}
\def_long_new:Npn \def_test_function:npn #1#2#{
  \def_test_function_aux:Nnnn \def:cpn {#1}{#2}
}
\def_long_new:Npn \def_test_function:npx #1#2#{
  \def_test_function_aux:Nnnx \def:cpx {#1}{#2}
}
\def_long_new:Npn \def_long_test_function:npn #1#2#{
  \def_test_function_aux:Nnnn \def_long:cpn {#1}{#2}
}
\def_long_new:Npn \def_long_test_function:npx #1#2#{
  \def_test_function_aux:Nnnx \def_long:cpx {#1}{#2}
}
\def_long_new:Npn \def_test_function_new:npn #1#2#{
  \def_test_function_aux:Nnnn \def_new:cpn {#1}{#2}
}
\def_long_new:Npn \def_long_test_function_new:npn #1#2#{
  \def_test_function_aux:Nnnn \def_long_new:cpn {#1}{#2}
}
\def_long_new:Npn \def_test_function_new:npx #1#2#{
  \def_test_function_aux:Nnnx \def_new:cpx {#1}{#2}
}
\def_long_new:Npn \def_long_test_function_new:npx #1#2#{
  \def_test_function_aux:Nnnx \def_long_new:cpx {#1}{#2}
}
\def_long_test_function_new:npn {cs_if_free:N}#1{\if:w\cs_if_free_p:N #1}
\let:NN \cs_free:NTF \cs_if_free:NTF
\let:NN \cs_free:NT \cs_if_free:NT
\let:NN \cs_free:NF \cs_if_free:NF
\def_long_test_function_new:npn {cs_if_free:c}#1{
  \exp_after:NN \if_meaning:NN \cs:w#1\cs_end: \scan_stop:}
\let:NN \cs_free:cTF \cs_if_free:cTF
\let:NN \cs_free:cT \cs_if_free:cT
\let:NN \cs_free:cF \cs_if_free:cF
\def_long_test_function_new:npn {cs_if_really_free:c}#1{
  \reverse_if:N\if_cs_exist:w #1\cs_end:}
\let:NN \cs_really_free:cTF \cs_if_really_free:cTF
\let:NN \cs_really_free:cT \cs_if_really_free:cT
\let:NN \cs_really_free:cF \cs_if_really_free:cF
\def_long_test_function_new:npn {cs_if_exist:N}#1{\if:w\cs_if_exist_p:N #1}
\def_long_test_function_new:npn {cs_if_exist:c}#1{
  \exp_after:NN\reverse_if:N
  \exp_after:NN \if_meaning:NN \cs:w#1\cs_end: \scan_stop:}
\def_long_test_function_new:npn {cs_if_really_exist:c}#1{
  \if_cs_exist:w #1\cs_end:}
\def_new:Npn \cs_gundefine:N #1{\glet:NN #1\c_undefined}
\def_test_function_new:npn {engine_aleph:}{\if_cs_exist:N \aleph_textdir:D}
\def_new:Npn \use:c #1{\cs:w #1\cs_end:}
\def_new:Npn \cs_use:c #1 { \cs:w#1\cs_end: }
\def_new:Npn \use:cc #1#2
  {\cs:w #1\exp_after:NN\cs_end:\cs:w #2\cs_end:}
\def_long_new:Npn \use_arg_i:nn #1#2{#1}
\def_long_new:Npn \use_arg_ii:nn #1#2{#2}
\def_long_new:NNn \use_arg_i:nnn    3{#1}
\def_long_new:NNn \use_arg_ii:nnn   3{#2}
\def_long_new:NNn \use_arg_iii:nnn  3{#3}
\def_long_new:NNn \use_arg_i:nnnn   4{#1}
\def_long_new:NNn \use_arg_ii:nnnn  4{#2}
\def_long_new:NNn \use_arg_iii:nnnn 4{#3}
\def_long_new:NNn \use_arg_iv:nnnn  4{#4}
\def_long_new:NNn\use_arg_i_ii:nn 2{#1#2}
\def_long_new:Npn \use_none_delimit_by_q_nil:w #1\q_nil{}
\def_long_new:Npn \use_none_delimit_by_q_stop:w #1\q_stop{}
\def_long_new:Npn \use_arg_i_delimit_by_q_nil:nw #1#2\q_nil{#1}
\def_long_new:Npn \use_arg_i_delimit_by_q_stop:nw #1#2\q_stop{#1}
\def_long_new:Npn \use_arg_i_after_fi:nw #1\fi:{\fi: #1}
\def_long_new:Npn \use_arg_i_after_else:nw #1\else:#2\fi:{\fi: #1}
\def_long_new:Npn \use_arg_i_after_or:nw #1\or: #2\fi: {\or:\fi:#1}
\def_long_new:NNn \use_none:nn 2{}
\def_long_new:NNn \use_none:nnn 3{}
\def_long_new:NNn \use_none:nnnn 4{}
\def_long_new:NNn \use_none:nnnnn 5{}
\def_long_new:NNn \use_none:nnnnnn 6{}
\def_long_new:NNn \use_none:nnnnnnn 7{}
\def_long_new:NNn \use_none:nnnnnnnn 8{}
\def_long_new:NNn \use_none:nnnnnnnnn 9{}
\def_new:Npn \gtmp:w {}
\def_new:Npn \tmp:w {}
\def_new:Npn \use_noop: {}
\def_new:Npn \cs_to_str:N {\exp_after:NN\use_none:n \token_to_string:N}
\def_test_function_new:npn {cs_if_eq:NN} #1#2{\if_meaning:NN #1#2}
\def_new:Npn \cs_if_eq:cNTF {\exp_args:Nc \cs_if_eq:NNTF}
\def_new:Npn \cs_if_eq:cNT {\exp_args:Nc \cs_if_eq:NNT}
\def_new:Npn \cs_if_eq:cNF {\exp_args:Nc \cs_if_eq:NNF}
\def_new:Npn \cs_if_eq:NcTF {\exp_args:NNc \cs_if_eq:NNTF}
\def_new:Npn \cs_if_eq:NcT {\exp_args:NNc \cs_if_eq:NNT}
\def_new:Npn \cs_if_eq:NcF {\exp_args:NNc \cs_if_eq:NNF}
\def_new:Npn \cs_if_eq:ccTF {\exp_args:Ncc \cs_if_eq:NNTF}
\def_new:Npn \cs_if_eq:ccT {\exp_args:Ncc \cs_if_eq:NNT}
\def_new:Npn \cs_if_eq:ccF {\exp_args:Ncc \cs_if_eq:NNF}
\def_new:Npn\file_not_found:nTF #1#2#3{\IfFileExists{#1}{#3}{#2}}
%% 
%%
%% End of file `l3basics.sty'.
