%%
%% This is file `l3dvips.def',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3drivers.dtx  (with options: `package,dvips')
%% l3drivers-basics.dtx  (with options: `package,dvips')
%% l3drivers-color.dtx  (with options: `package,dvips')
%% l3drivers-box.dtx  (with options: `package,dvips')
%% l3drivers-draw.dtx  (with options: `package,dvips')
%% l3drivers-graphics.dtx  (with options: `package,dvips')
%% l3drivers-pdf.dtx  (with options: `package,dvips')
%% 
%% Copyright (C) 1990-2019 The 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:
%% 
%%    https://www.latex-project.org/lppl.txt
%% 
%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%% 
%% File: l3drivers.dtx
%% File: l3drivers-basics.dtx
\ProvidesExplFile
  {l3dvips.def}{2019-04-06}{}
  {L3 Experimental driver: dvips}
\cs_new_eq:NN \__driver_literal:e \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1
  { \__driver_literal:e { \exp_not:n {#1} } }
\cs_generate_variant:Nn \__driver_literal:n { x }
\box_new:N \l__driver_internal_box
\cs_new_protected:Npn \__driver_literal_postscript:n #1
  { \__driver_literal:n { ps:: #1 } }
\cs_generate_variant:Nn \__driver_literal_postscript:n { x }
\cs_new_protected:Npn \__driver_postscript:n #1
  { \__driver_literal:n { ps: SDict ~ begin ~ #1 ~ end } }
\cs_generate_variant:Nn \__driver_postscript:n { x }
\cs_new_protected:Npx \__driver_postscript_header:n #1
  {
    \cs_if_exist:NTF \AtBeginDvi
      { \exp_not:N \AtBeginDvi }
      { \use:n }
        { \__driver_literal:n { ! #1 } }
  }
\cs_new_protected:Npn \__driver_align_currentpoint_begin:
  {
    \__driver_literal:n { ps::[begin] }
    \__driver_literal_postscript:n { currentpoint }
    \__driver_literal_postscript:n { currentpoint~translate }
  }
\cs_new_protected:Npn \__driver_align_currentpoint_end:
  {
    \__driver_literal_postscript:n { neg~exch~neg~exch~translate }
    \__driver_literal:n { ps::[end] }
  }
\cs_new_protected:Npn \__driver_scope_begin:
  { \__driver_literal:n { ps:gsave } }
\cs_new_protected:Npn \__driver_scope_end:
  { \__driver_literal:n { ps:grestore } }
%% File: l3drivers-color.dtx
\cs_new_protected:Npn \driver_color_pickup:N #1 { }
\AtBeginDocument
  {
    \@ifpackageloaded { color }
      {
        \cs_set_protected:Npn \driver_color_pickup:N #1
          {
            \exp_args:NV \tl_if_head_is_space:nTF \current@color
              {
                \tl_set:Nx #1
                   {
                     spot ~
                     \exp_after:wN \use:n \current@color \c_space_tl 1
                   }
              }
              {
                \exp_last_unbraced:Nx \__driver_color_pickup:w
                  { \current@color } \q_stop #1
              }
          }
        \cs_new_protected:Npn \__driver_color_pickup:w #1 ~ #2 \q_stop #3
          { \tl_set:Nn #3 { #1 ~ #2 } }
      }
      { }
  }
\cs_new_protected:Npn \driver_color_cmyk:nnnn #1#2#3#4
  {
    \__driver_color_select:x
      {
        cmyk~
        \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
        \fp_eval:n {#3} ~ \fp_eval:n {#4}
      }
  }
\cs_new_protected:Npn \driver_color_gray:n #1
  { \__driver_color_select:x { gray~ \fp_eval:n {#1} } }
\cs_new_protected:Npn \driver_color_rgb:nnn #1#2#3
  {
    \__driver_color_select:x
      { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
  }
\cs_new_protected:Npn \driver_color_spot:nn #1#2
  { \__driver_color_select:n { #1 } }
\cs_new_protected:Npn \__driver_color_select:n #1
  {
    \__driver_literal:n { color~push~ #1 }
    \__driver_postscript:n { /driver.fc~{ }~def }
    \group_insert_after:N \__driver_color_reset:
  }
\cs_generate_variant:Nn \__driver_color_select:n { x }
\cs_new_protected:Npn \__driver_color_reset:
  { \__driver_literal:n { color~pop } }
%% File: l3drivers-box.dtx
\cs_new_protected:Npn \driver_box_use_clip:N #1
  {
    \__driver_scope_begin:
    \__driver_align_currentpoint_begin:
    \__driver_literal_postscript:n { matrix~currentmatrix }
    \__driver_literal_postscript:n
      { Resolution~72~div~VResolution~72~div~scale }
    \__driver_literal_postscript:n { DVImag~dup~scale }
    \__driver_literal_postscript:x
      {
        0 ~
        \dim_to_decimal_in_bp:n { \box_dp:N #1 } ~
        \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
        \dim_to_decimal_in_bp:n { -\box_ht:N #1 - \box_dp:N #1 } ~
        rectclip
      }
    \__driver_literal_postscript:n { setmatrix }
    \__driver_align_currentpoint_end:
    \hbox_overlap_right:n { \box_use:N #1 }
    \__driver_scope_end:
    \skip_horizontal:n { \box_wd:N #1 }
  }
\cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2
  { \exp_args:NNf \__driver_box_use_rotate:Nn #1 { \fp_eval:n {#2} } }
\cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2
  {
    \__driver_scope_begin:
    \__driver_align_currentpoint_begin:
    \__driver_literal_postscript:x
      {
        \fp_compare:nNnTF {#2} = \c_zero_fp
          { 0 }
          { \fp_eval:n { round ( -(#2) , 5 ) } } ~
        rotate
      }
   \__driver_align_currentpoint_end:
   \box_use:N #1
   \__driver_scope_end:
  }
\cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3
  {
    \__driver_scope_begin:
    \__driver_align_currentpoint_begin:
    \__driver_literal_postscript:x
      {
        \fp_eval:n { round ( #2 , 5 ) } ~
        \fp_eval:n { round ( #3 , 5 ) } ~
        scale
      }
    \__driver_align_currentpoint_end:
    \hbox_overlap_right:n { \box_use:N #1 }
    \__driver_scope_end:
  }
%% File: l3drivers-draw.dtx
\cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_postscript:n
\cs_generate_variant:Nn \__driver_draw_literal:n { x }
\cs_new_protected:Npn \driver_draw_begin:
  {
    \__driver_literal:n { ps::[begin] }
    \__driver_draw_literal:n { @beginspecial }
    \__driver_darw_literal:n { SDict ~ begin ~ /driver.fc ~ { } ~ def ~ end }
  }
\cs_new_protected:Npn \driver_draw_end:
  {
    \__driver_draw_literal:n { @endspecial }
    \__driver_literal:n { ps::[end] }
  }
\cs_new_protected:Npn \driver_draw_scope_begin:
  { \__driver_draw_literal:n { save } }
\cs_new_protected:Npn \driver_draw_scope_end:
  { \__driver_draw_literal:n { restore } }
\cs_new_protected:Npn \driver_draw_moveto:nn #1#2
  {
    \__driver_draw_literal:x
      {
        \dim_to_decimal_in_bp:n {#1} ~
        \dim_to_decimal_in_bp:n {#2} ~ moveto
      }
  }
\cs_new_protected:Npn \driver_draw_lineto:nn #1#2
  {
    \__driver_draw_literal:x
      {
        \dim_to_decimal_in_bp:n {#1} ~
        \dim_to_decimal_in_bp:n {#2} ~ lineto
      }
  }
\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4
  {
     \__driver_draw_literal:x
       {
         \dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#3} ~
         \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
         moveto~dup~0~rlineto~exch~0~exch~rlineto~neg~0~rlineto~closepath
      }
  }
\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6
  {
    \__driver_draw_literal:x
      {
        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
        \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
        curveto
      }
 }
\cs_new_protected:Npn \driver_draw_evenodd_rule:
  { \bool_gset_true:N \g__driver_draw_eor_bool }
\cs_new_protected:Npn \driver_draw_nonzero_rule:
  { \bool_gset_false:N \g__driver_draw_eor_bool }
\bool_new:N \g__driver_draw_eor_bool
\cs_new_protected:Npn \driver_draw_closepath:
  { \__driver_draw_literal:n { closepath } }
\cs_new_protected:Npn \driver_draw_stroke:
  {
    \__driver_draw_literal:n { stroke }
    \bool_if:NT \g__driver_draw_clip_bool
      {
        \__driver_draw_literal:x
          {
            \bool_if:NT \g__driver_draw_eor_bool { eo }
            clip
          }
      }
    \__driver_draw_literal:n { newpath }
    \bool_gset_false:N \g__driver_draw_clip_bool
  }
\cs_new_protected:Npn \driver_draw_closestroke:
  {
    \driver_draw_closepath:
    \driver_draw_stroke:
  }
\cs_new_protected:Npn \driver_draw_fill:
  {
    \__driver_draw_literal:n { gsave }
    \__driver_draw_literal:n { driver.fc }
    \__driver_draw_literal:x
      {
        \bool_if:NT \g__driver_draw_eor_bool { eo }
        fill
      }
    \__driver_draw_literal:n { grestore }
    \bool_if:NT \g__driver_draw_clip_bool
      {
        \__driver_draw_literal:x
          {
            \bool_if:NT \g__driver_draw_eor_bool { eo }
            clip
          }
      }
    \__driver_draw_literal:n { newpath }
    \bool_gset_false:N \g__driver_draw_clip_bool
  }
\cs_new_protected:Npn \driver_draw_fillstroke:
  {
    \__driver_draw_literal:n { gsave }
    \__driver_draw_literal:n { driver.fc }
    \__driver_draw_literal:x
      {
        \bool_if:NT \g__driver_draw_eor_bool { eo }
        fill
      }
    \__driver_draw_literal:n { grestore }
    \__driver_draw_literal:n { stroke }
    \bool_if:NT \g__driver_draw_clip_bool
      {
        \__driver_draw_literal:x
          {
            \bool_if:NT \g__driver_draw_eor_bool { eo }
            clip
          }
      }
    \__driver_draw_literal:n { newpath }
    \bool_gset_false:N \g__driver_draw_clip_bool
  }
\cs_new_protected:Npn \driver_draw_clip:
  { \bool_gset_true:N \g__driver_draw_clip_bool }
\bool_new:N \g__driver_draw_clip_bool
\cs_new_protected:Npn \driver_draw_discardpath:
  {
    \bool_if:NT \g__driver_draw_clip_bool
      {
        \__driver_draw_literal:x
          {
            \bool_if:NT \g__driver_draw_eor_bool { eo }
            clip
          }
      }
    \__driver_draw_literal:n { newpath }
    \bool_gset_false:N \g__driver_draw_clip_bool
  }
\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2
  {
    \__driver_draw_literal:x
      {
        [
          \exp_args:Nf \use:n
            { \clist_map_function:nN {#1} \__driver_draw_dash:n }
        ] ~
        \dim_to_decimal_in_bp:n {#2} ~ setdash
      }
  }
\cs_new:Npn \__driver_draw_dash:n #1
  { ~ \dim_to_decimal_in_bp:n {#1} }
\cs_new_protected:Npn \driver_draw_linewidth:n #1
  {
    \__driver_draw_literal:x
      { \dim_to_decimal_in_bp:n {#1} ~ setlinewidth }
  }
\cs_new_protected:Npn \driver_draw_miterlimit:n #1
  { \__driver_draw_literal:x { \fp_eval:n {#1} ~ setmiterlimit } }
\cs_new_protected:Npn \driver_draw_cap_butt:
  { \__driver_draw_literal:n { 0 ~ setlinecap } }
\cs_new_protected:Npn \driver_draw_cap_round:
  { \__driver_draw_literal:n { 1 ~ setlinecap } }
\cs_new_protected:Npn \driver_draw_cap_rectangle:
  { \__driver_draw_literal:n { 2 ~ setlinecap } }
\cs_new_protected:Npn \driver_draw_join_miter:
  { \__driver_draw_literal:n { 0 ~ setlinejoin } }
\cs_new_protected:Npn \driver_draw_join_round:
  { \__driver_draw_literal:n { 1 ~ setlinejoin } }
\cs_new_protected:Npn \driver_draw_join_bevel:
  { \__driver_draw_literal:n { 2 ~ setlinejoin } }
\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4
  {
    \__driver_draw_color_fill:x
      {
        \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
        \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
        setcmykcolor
      }
  }
\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4
  {
    \__driver_draw_color_stroke:x
      {
        cmyk ~
        \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
        \fp_eval:n {#3} ~ \fp_eval:n {#4}
      }
  }
\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1
  { \__driver_draw_color_fill:x { \fp_eval:n {#1} ~ setgray } }
\cs_new_protected:Npn \driver_draw_color_stroke_gray:n #1
  { \__driver_draw_color_stroke:x { gray ~ \fp_eval:n {#1} } }
\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3
  {
    \__driver_draw_color_fill:x
      { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ setrgbcolor }
  }
\cs_new_protected:Npn \driver_draw_color_stroke_rgb:nnn #1#2#3
  {
    \__driver_draw_color_stroke:x
      { rgb ~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
  }
\cs_new_protected:Npn \__driver_draw_color_fill:n #1
  { \__driver_postscript:n { SDict ~ begin ~ /driver.fc ~ { #1 } ~ def ~ end } }
\cs_generate_variant:Nn \__driver_draw_color_fill:n { x }
\cs_new_protected:Npn \__driver_draw_color_stroke:n #1
  {
    \__driver_literal:n { color~push~#1 }
    \group_insert_after:N \__driver_color_reset:
  }
\cs_generate_variant:Nn \__driver_draw_color_stroke:n { x }
\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
  {
    \__driver_draw_literal:n
      {
        [
          \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
          \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
          0 ~ 0
        ] ~
        concat
      }
  }
\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5
  {
    \__driver_draw_literal:n { @endspecial }
    \__driver_draw_literal:n { [end] }
    \__driver_draw_literal:n { [begin] }
    \__driver_draw_literal:n { save }
    \__driver_draw_literal:n { currentpoint }
    \__driver_draw_literal:n { currentpoint~translate }
    \driver_draw_cm:nnnn { 1 } { 0 } { 0 } { -1 }
    \driver_draw_cm:nnnn {#2} {#3} {#4} {#5}
    \driver_draw_cm:nnnn { 1 } { 0 } { 0 } { -1 }
    \__driver_draw_literal:n { neg~exch~neg~exch~translate }
    \__driver_draw_literal:n { [end] }
    \hbox_overlap_right:n { \box_use:N #1 }
    \__driver_draw_literal:n { [begin] }
    \__driver_draw_literal:n { restore }
    \__driver_draw_literal:n { [end] }
    \__driver_draw_literal:n { [begin] }
    \__driver_draw_literal:n { @beginspecial }
  }
%% File: l3drivers-graphics.dtx
\AtBeginDocument
  { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n }
\cs_new_protected:Npn \driver_graphics_include_eps:n #1
  {
    \__driver_literal:x
      {
        PSfile = #1 \c_space_tl
        llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
        lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
        urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
        ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
      }
  }
%% File: l3drivers-pdf.dtx
\cs_new_protected:Npn \__driver_pdfmark:n #1
  { \__driver_postscript:n { mark #1 ~ pdfmark } }
\cs_generate_variant:Nn \__driver_pdfmark:n { x }
\cs_new_protected:Npn \driver_pdf_catalog_gput:nn #1#2
  { \__driver_pdfmark:n { { Catalog } << /#1 ~ #2 >> /PUT } }
\cs_new_protected:Npn \driver_pdf_info_gput:nn #1#2
  { \__driver_pdfmark:n { /#1 ~ #2 /DOCINFO } }
\int_new:N \g__driver_pdf_object_int
\prop_new:N \g__driver_pdf_object_prop
\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2
  {
    \int_gincr:N \g__driver_pdf_object_int
    \int_const:cn
      { c__driver_pdf_object_ \tl_to_str:n {#1} _int }
      { \g__driver_pdf_object_int }
    \prop_gput:Nnn \g__driver_pdf_object_prop {#1} {#2}
  }
\cs_new:Npn \driver_pdf_object_ref:n #1
  { { driver.obj \int_use:c { c__driver_pdf_object_ \tl_to_str:n {#1} _int } } }
\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2
  {
    \__driver_pdfmark:x
      {
        /_objdef ~ \driver_pdf_object_ref:n {#1}
        /type
        \str_case_e:nn
          { \prop_item:Nn \g__driver_pdf_object_prop {#1} }
          {
            { array }   { /array }
            { dict }    { /dict }
            { fstream } { /stream }
            { stream }  { /stream }
          }
        /OBJ
      }
    \use:c
      { __driver_pdf_object_write_ \prop_item:Nn \g__driver_pdf_object_prop {#1} :nn }
      {#1} {#2}
  }
\cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2
  {
    \__driver_pdfmark:x
      {
        \driver_pdf_object_ref:n {#1}
          [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL
      }
  }
\cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2
  {
    \__driver_pdfmark:x
      {
        \driver_pdf_object_ref:n {#1}
          << \exp_not:n {#2} >> /PUT
      }
  }
\cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2
  {
    \exp_args:Nx
      \__driver_pdf_object_write_stream:nnn
        { \driver_pdf_object_ref:n {#1} }
        #2
  }
\cs_new_protected:Npn \__driver_pdf_object_write_stream:nnn #1#2#3
  {
    \__driver_postscript:n
      {
        [nobreak]
        mark ~ #1 ~ ( #3 ) /PUT ~ pdfmark ~
        mark ~ #1 ~ << #2 >> /PUT ~ pdfmark
      }
  }
\__driver_postscript_header:n
  {
    true ~ setglobal ~
    /driver.globaldict ~ 4 ~ dict ~ def ~
    false ~ setglobal
  }
\__driver_postscript_header:n
  {
    /driver.cvs { 65534 ~ string ~ cvs } def
    /driver.dvi.pt { 72.27 ~ mul ~ Resolution ~ div } def
    /driver.pt.dvi { 72.27 ~ div ~ Resolution ~ mul } def
    /driver.rect.ht { dup ~ 1 ~ get ~ neg ~ exch ~ 3 ~ get ~ add } def
  }
\__driver_postscript_header:n
  {
    /driver.linkmargin { 1 ~ driver.pt.dvi } def
    /driver.linkdp.pad { 0 } def
    /driver.linkht.pad { 0 } def
  }
\__driver_postscript_header:n
  {
    /driver.rect
      { /Rect [ driver.llx ~ driver.lly ~ driver.urx ~ driver.ury ] } def
    /driver.save.ll
      {
        currentpoint
        /driver.lly ~ exch ~ def
        /driver.llx ~ exch ~ def
      }
        def
    /driver.save.ur
      {
        currentpoint
        /driver.ury ~ exch ~ def
        /driver.urx ~ exch ~ def
      }
        def
    /driver.save.linkll
      {
        currentpoint ~
        driver.linkmargin ~ add ~
        driver.linkdp.pad ~ add
        /driver.lly ~ exch ~ def ~
        driver.linkmargin ~ sub
        /driver.llx ~ exch ~ def
      }
        def
    /driver.save.linkur
      {
        currentpoint ~
        driver.linkmargin ~ sub ~
        driver.linkht.pad ~ sub
        /driver.ury ~ exch ~ def ~
        driver.linkmargin ~ add
        /driver.urx ~ exch ~ def
      }
        def
  }
\__driver_postscript_header:n
  {
    /driver.dest.anchor
      {
        currentpoint ~ exch ~
        driver.dvi.pt ~ 72 ~ add ~
        /driver.dest.x ~ exch ~ def ~
        driver.dvi.pt ~
        vsize ~ 72 ~ sub ~ exch ~ sub ~
        /driver.dest.y ~ exch ~ def
      }
        def
    /driver.dest.point
      { driver.dest.x ~ driver.dest.y } def
   /driver.dest2device
     {
       /driver.dest.y ~ exch ~ def
       /driver.dest.x ~ exch ~ def ~
       matrix ~ currentmatrix ~
       matrix ~ defaultmatrix ~
       matrix ~ invertmatrix ~
       matrix ~ concatmatrix ~
       cvx ~ exec
       /driver.dev.y ~ exch ~ def
       /driver.dev.x ~ exch ~ def
       /driver.tmpd ~ exch ~ def
       /driver.tmpc ~ exch ~ def
       /driver.tmpb ~ exch ~ def
       /driver.tmpa ~ exch ~ def ~
       driver.dest.x ~ driver.tmpa ~ mul ~
         driver.dest.y ~ driver.tmpc ~ mul ~ add ~
         driver.dev.x ~ add ~
       driver.dest.x ~ driver.tmpb ~ mul ~
         driver.dest.y ~ driver.tmpd ~ mul ~ add ~
         driver.dev.y ~ add
     }
       def
  }
\__driver_postscript_header:n
  {
    /driver.bordertracking ~ false ~ def
    /driver.bordertracking.begin
      {
        SDict ~ /driver.bordertracking ~ true ~ put ~
        SDict ~ /driver.leftboundary ~ undef ~
        SDict ~ /driver.rightboundary ~ undef ~
        /a ~ where
          {
            /a
              {
                currentpoint ~ pop ~
                SDict /driver.rightboundary ~ known ~ dup
                  {
                    SDict /driver.rightboundary ~ get ~ 2 ~ index ~ lt
                      { not }
                    if
                  }
                if
                  { pop }
                  { SDict ~ exch /driver.rightboundary ~ exch ~ put }
                ifelse ~
                moveto ~
                currentpoint ~ pop ~
                SDict /driver.leftboundary ~ known ~ dup
                  {
                    SDict /driver.leftboundary ~ get ~ 2 ~ index ~ gt
                      { not }
                    if
                  }
                if
                  { pop }
                  { SDict ~ exch /driver.leftboundary ~ exch ~ put }
                ifelse
              }
            put
          }
        if
      }
        def
    /driver.bordertracking.end
      {
        /a ~ where { /a { moveto } put } if
        /x ~ where { /x { 0 ~ exch ~ rmoveto } put } if ~
        SDict /driver.leftboundary ~ known
          { driver.outerbox ~ 0 ~ driver.leftboundary ~ put }
        if ~
        SDict /driver.rightboundary ~ known
          { driver.outerbox ~ 2 ~ driver.rightboundary ~ put }
        if ~
        SDict /driver.bordertracking ~ false ~ put
      }
        def
  /driver.bordertracking.endpage
    {
      driver.bordertracking
        {
          driver.bordertracking.end ~
          true ~ setglobal ~
          driver.globaldict
            /driver.brokenlink.rect [ driver.outerbox ~ aload ~ pop ] put ~
          driver.globaldict
            /driver.brokenlink.skip ~ driver.baselineskip ~ put ~
          driver.globaldict
            /driver.brokenlink.dict ~
              driver.link.dict ~ driver.cvs ~ put ~
          false ~ setglobal ~
          mark ~ driver.link.dict ~ cvx ~ exec ~ /Rect
            [
              driver.llx ~
              driver.lly ~
              driver.outerbox ~ 2 ~ get ~ driver.linkmargin ~ add ~
              currentpoint ~ exch ~ pop ~
              driver.outerbox ~ driver.rect.ht ~ sub ~ driver.linkmargin ~ sub
            ]
          /ANN ~ driver.pdfmark
        }
      if
    }
      def
    /driver.bordertracking.continue
      {
        /driver.link.dict ~ driver.globaldict
          /driver.brokenlink.dict ~ get ~ def
        /driver.outerbox ~ driver.globaldict
          /driver.brokenlink.rect ~ get ~ def
        /driver.baselineskip ~ driver.globaldict
          /driver.brokenlink.skip ~ get ~ def ~
        driver.globaldict ~ dup ~ dup
        /driver.brokenlink.dict ~ undef
        /driver.brokenlink.skip ~ undef
        /driver.brokenlink.rect ~ undef ~
        currentpoint
        /driver.originy ~ exch ~ def
        /driver.originx ~ exch ~ def
        /a ~ where
          {
            /a
              {
                moveto ~
                SDict ~
                begin ~
                currentpoint ~ driver.originy ~ ne ~ exch ~
                  driver.originx ~ ne ~ or
                  {
                    driver.save.linkll
                    /driver.lly ~
                      driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~
                    driver.bordertracking.begin
                  }
                if ~
                end
              }
            put
          }
        if
        /x ~ where
          {
            /x
              {
                0 ~ exch ~ rmoveto ~
                SDict~
                begin ~
                currentpoint ~
                driver.originy ~ ne ~ exch ~ driver.originx ~ ne ~ or
                  {
                    driver.save.linkll
                    /driver.lly ~
                      driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~
                    driver.bordertracking.begin
                  }
                if ~
                end
              }
            put
          }
        if
      }
        def
  }
\__driver_postscript_header:n
  {
    /driver.breaklink
      {
        pop ~
        counttomark ~ 2 ~ mod ~ 0 ~ eq
          {
            counttomark /driver.count ~ exch ~ def
              {
               driver.count ~ 0 ~ eq { exit } if ~
               counttomark ~ 2 ~ roll ~
               1 ~ index ~ /Rect ~ eq
                 {
                   dup ~ 4 ~ array ~ copy ~
                   dup ~ dup ~
                     1 ~ get ~
                     driver.outerbox ~ driver.rect.ht ~
                     driver.linkmargin ~ 2 ~ mul ~ add ~ sub ~
                     3 ~ exch ~ put ~
                   dup ~
                     driver.outerbox ~ 2 ~ get ~
                     driver.linkmargin ~ add ~
                     2 ~ exch ~ put ~
                   dup ~ dup ~
                     3 ~ get ~
                     driver.outerbox ~ driver.rect.ht ~
                     driver.linkmargin ~ 2 ~ mul ~ add ~ add ~
                     1 ~ exch ~ put
                   /driver.currentrect ~ exch ~  def ~
                   driver.breaklink.write
                     {
                       driver.currentrect ~
                       dup ~
                         driver.outerbox ~ 0 ~ get ~
                         driver.linkmargin ~ sub ~
                         0 ~ exch ~ put ~
                       dup ~
                         driver.outerbox ~ 2 ~ get ~
                         driver.linkmargin ~ add ~
                         2 ~ exch ~ put ~
                       dup ~ dup ~
                         1 ~ get ~
                         driver.baselineskip ~ add ~
                         1 ~ exch ~ put ~
                       dup ~ dup ~
                         3 ~ get ~
                         driver.baselineskip ~ add ~
                         3 ~ exch ~ put ~
                       /driver.currentrect ~ exch ~ def ~
                       driver.breaklink.write
                      }
                    1 ~ index ~ 3 ~ get ~
                    driver.linkmargin ~ 2 ~ mul ~ add ~
                    driver.outerbox ~ driver.rect.ht ~ add ~
                    2 ~ index ~ 1 ~ get ~ sub ~
                    driver.baselineskip ~ div ~ round ~ cvi ~ 1 ~ sub ~
                    exch ~
                  repeat ~
                  driver.currentrect ~
                  dup ~
                    driver.outerbox ~ 0 ~ get ~
                    driver.linkmargin ~ sub ~
                    0 ~ exch ~ put ~
                  dup ~ dup ~
                    1 ~ get ~
                    driver.baselineskip ~ add ~
                    1 ~ exch ~ put ~
                  dup ~ dup ~
                    3 ~ get ~
                    driver.baselineskip ~ add ~
                    3 ~ exch ~ put ~
                  dup ~ 2 ~ index ~ 2 ~ get ~  2 ~ exch ~ put
                  /driver.currentrect ~ exch ~ def ~
                  driver.breaklink.write ~
                  SDict /driver.pdfmark.good ~ false ~ put ~
                  exit
                }
                { driver.count ~ 2 ~ sub /driver.count ~ exch ~ def }
              ifelse
            }
          loop
        }
      if
      /ANN
    }
      def
    /driver.breaklink.write
      {
        counttomark ~ 1 ~ sub ~
        index /_objdef ~ eq
          {
            counttomark ~ -2 ~ roll ~
            dup ~ wcheck ~
              {
                readonly ~
                counttomark ~ 2 ~ roll
              }
              { pop ~ pop }
            ifelse
          }
        if ~
        counttomark ~ 1 ~ add ~ copy ~
        pop ~ driver.currentrect
        /ANN ~ pdfmark
      }
        def
  }
\__driver_postscript_header:n
  {
    /driver.pdfmark
      {
        SDict /driver.pdfmark.good ~ true ~ put ~
        dup /ANN ~ eq
          {
            driver.pdfmark.store ~
            driver.pdfmark.dict ~
              begin ~
                Subtype /Link ~ eq ~
                currentdict /Rect ~ known ~ and ~
                SDict /driver.outerbox ~ known ~ and ~
                SDict /driver.baselineskip ~ known ~ and ~
                  {
                    Rect ~ 3 ~ get ~
                    driver.linkmargin ~ 2 ~ mul ~ add ~
                    driver.outerbox ~ driver.rect.ht ~ add ~
                    Rect ~ 1 ~ get ~ sub ~
                    driver.baselineskip ~ div ~ round ~ cvi ~ 0 ~ gt
                      { driver.breaklink }
                    if
                  }
                if ~
              end ~
            SDict /driver.outerbox ~ undef ~
            SDict /driver.baselineskip ~ undef ~
            currentdict /driver.pdfmark.dict ~ undef ~
          }
        if ~
        driver.pdfmark.good
          { pdfmark }
          { cleartomark }
        ifelse
      }
        def
    /driver.pdfmark.store
      {
        /driver.pdfmark.dict ~ 65534 ~ dict ~ def ~
        counttomark ~ 1 ~ add ~ copy ~
        pop
          {
            dup ~ mark ~ eq
              {
                pop ~
                exit
              }
              {
                driver.pdfmark.dict ~
                begin ~ def ~ end
              }
            ifelse
          }
        loop
    }
      def
  }
\box_new:N \l__driver_pdf_content_box
\box_new:N \l__driver_pdf_model_box
\int_new:N \g__driver_pdf_annotation_int
\cs_new_protected:Npn \driver_pdf_annotation:nnnn #1#2#3#4
  {
    \__driver_pdf_annotation:nnnn {#1} {#2} {#3} {#4}
    \int_gincr:N \g__driver_pdf_object_int
    \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int
    \__driver_pdfmark:x
      {

        /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int }
        driver.rect ~
        #4 ~
        /ANN
      }
  }
\cs_new_protected:Npn \__driver_pdf_annotation:nnnn #1#2#3#4
  {
    \box_move_down:nn {#3}
      { \hbox:n { \__driver_postscript:n { driver.save.ll } } }
    \hbox:n {#4}
    \box_move_up:nn {#2}
      {
        \hbox:n
          {
            \tex_kern:D \dim_eval:n {#1} \scan_stop:
            \__driver_postscript:n { driver.save.ur }
          }
      }
    \int_gincr:N \g__driver_pdf_object_int
    \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int
    \__driver_pdfmark:x
      {
        /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int }
        driver.rect
        /ANN
      }
  }
\cs_new:Npn \driver_pdf_annotation_last:
  { { driver.obj \int_use:N \g__driver_pdf_annotation_int } }
\int_new:N \g__driver_pdf_link_int
\tl_new:N \g__driver_pdf_link_dict_tl
\int_new:N \g__driver_pdf_link_sf_int
\bool_new:N \g__driver_pdf_link_math_bool
\bool_new:N \g__driver_pdf_link_bool
\tl_new:N \l__driver_breaklink_pdfmark_tl
\tl_set:Nn \l__driver_breaklink_pdfmark_tl { pdfmark }
\cs_new_protected:Npn \__driver_breaklink_postscript:n #1 { }
\cs_new_eq:NN \__driver_breaklink_usebox:N \box_use:N
\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2
  { \__driver_pdf_link_begin:nw { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2
  { \__driver_pdf_link_begin:nw {#1#2} }
\cs_new_protected:Npn \__driver_pdf_link_begin:nw #1
  {
    \bool_if:NF \g__driver_pdf_link_bool
      { \__driver_pdf_link_begin_aux:nw {#1} }
  }
\cs_new_protected:Npn \__driver_pdf_link_begin_aux:nw #1
  {
    \bool_gset_true:N \g__driver_pdf_link_bool
    \__driver_postscript:n
      { /driver.link.dict ( #1 ) def }
    \tl_gset:Nn \g__driver_pdf_link_dict_tl {#1}
    \__driver_pdf_link_sf_save:
    \mode_if_math:TF
      { \bool_gset_true:N \g__driver_pdf_link_math_bool }
      { \bool_gset_false:N \g__driver_pdf_link_math_bool }
    \hbox_set:Nw \l__driver_pdf_content_box
      \__driver_pdf_link_sf_restore:
      \bool_if:NT \g__driver_pdf_link_math_bool
        { \c_math_toggle_token }
  }
\cs_new_protected:Npn \driver_pdf_link_end:
  {
    \bool_if:NT \g__driver_pdf_link_bool
      { \__driver_pdf_link_end: }
  }
\cs_new_protected:Npn \__driver_pdf_link_end:
  {
      \bool_if:NT \g__driver_pdf_link_math_bool
        { \c_math_toggle_token }
      \__driver_pdf_link_sf_save:
    \hbox_set_end:
    \__driver_pdf_link_minima:
    \hbox_set:Nn \l__driver_pdf_model_box { Gg }
    \exp_args:Nx \__driver_driver_link_outerbox:n
      {
         \int_if_odd:nTF { \value { page } }
           { \oddsidemargin }
           { \evensidemargin }
      }
    \box_move_down:nn { \box_dp:N \l__driver_pdf_content_box }
      { \hbox:n { \__driver_postscript:n { driver.save.linkll } } }
    \__driver_breaklink_postscript:n { driver.bordertracking.begin }
    \__driver_breaklink_usebox:N \l__driver_pdf_content_box
    \__driver_breaklink_postscript:n { driver.bordertracking.end }
    \box_move_up:nn { \box_ht:N \l__driver_pdf_content_box }
      {
        \hbox:n
          { \__driver_postscript:n { driver.save.linkur } }
      }
    \int_gincr:N \g__driver_pdf_object_int
    \int_gset_eq:NN \g__driver_pdf_link_int \g__driver_pdf_object_int
    \__driver_postscript:x
      {
        mark
        /_objdef { driver.obj \int_use:N \g__driver_pdf_link_int }
        \g__driver_pdf_link_dict_tl \c_space_tl
        driver.rect
        /ANN ~ \l__driver_breaklink_pdfmark_tl
      }
    \__driver_pdf_link_sf_restore:
    \bool_gset_false:N \g__driver_pdf_link_bool
  }
\cs_new_protected:Npn \__driver_pdf_link_minima:
  {
    \hbox_set:Nn \l__driver_pdf_model_box { Gg }
    \__driver_postscript:x
      {
        /driver.linkdp.pad ~
          \dim_to_decimal:n
            {
              \dim_max:nn
                {
                    \box_dp:N \l__driver_pdf_model_box
                  - \box_dp:N \l__driver_pdf_content_box
                }
                { 0pt }
            } ~
              driver.pt.dvi ~ def
        /driver.linkht.pad ~
          \dim_to_decimal:n
            {
              \dim_max:nn
                {
                    \box_ht:N \l__driver_pdf_model_box
                  - \box_ht:N \l__driver_pdf_content_box
                }
                { 0pt }
            } ~
              driver.pt.dvi ~ def
      }
  }
\cs_new_protected:Npn \__driver_driver_link_outerbox:n #1
  {
    \__driver_postscript:x
      {
        /driver.outerbox
          [
            \dim_to_decimal:n {#1} ~
            \dim_to_decimal:n { -\box_dp:N \l__driver_pdf_model_box } ~
            \dim_to_decimal:n { #1 + \textwidth } ~
            \dim_to_decimal:n { \box_ht:N \l__driver_pdf_model_box }
          ]
          [ exch { driver.pt.dvi } forall ] def
        /driver.baselineskip ~
          \dim_to_decimal:n { \tex_baselineskip:D } ~ dup ~ 0 ~ gt
            { driver.pt.dvi ~ def }
            { pop ~ pop }
          ifelse
      }
  }
\cs_new_protected:Npn \__driver_pdf_link_sf_save:
  {
    \int_gset:Nn \g__driver_pdf_link_sf_int
      {
        \mode_if_horizontal:TF
          { \tex_spacefactor:D }
          { 0 }
      }
  }
\cs_new_protected:Npn \__driver_pdf_link_sf_restore:
  {
    \mode_if_horizontal:T
      {
        \int_compare:nNnT \g__driver_pdf_link_sf_int > { 0 }
          { \int_set_eq:NN \tex_spacefactor:D \g__driver_pdf_link_sf_int }
      }
  }
\use_none:n
  {
    \cs_if_exist:NT \@makecol@hook
      {
        \tl_put_right:Nn \@makecol@hook
          {
            \box_if_empty:NF \@cclv
              {
                \vbox_set:Nn \@cclv
                  {
                    \__driver_postscript:n
                      {
                        driver.globaldict /driver.brokenlink.rect ~ known
                          { driver.bordertracking.continue }
                        if
                      }
                    \vbox_unpack_drop:N \@cclv
                    \__driver_postscript:n
                      { driver.bordertracking.endpage }
                  }
              }
          }
        \tl_set:Nn \l__driver_breaklink_pdfmark_tl { driver.pdfmark }
        \cs_set_eq:NN \__driver_breaklink_postscript:n \__driver_postscript:n
        \cs_set_eq:NN \__driver_breaklink_usebox:N \hbox_unpack:N
      }
  }
\cs_new:Npn \driver_pdf_link_last:
  { { driver.obj \int_use:N \g__driver_pdf_link_int } }
\cs_new_protected:Npn \driver_pdf_link_margin:n #1
  {
    \__driver_postscript:x
      {
        /driver.linkmargin { \dim_to_decimal:n {#1} ~ driver.pt.dvi } def
      }
  }
\cs_new_protected:Npn \driver_pdf_destination:nn #1#2
  {
    \__driver_postscript:n { driver.dest.anchor }
    \__driver_pdfmark:x
      {
        /View
        [
          \str_case:nnF {#2}
            {
              { xyz }   { /XYZ ~ driver.dest.point ~ null }
              { fit }   { /Fit }
              { fitb }  { /FitB }
              { fitbh } { /FitBH ~ driver.dest.y }
              { fitbv } { /FitBV ~ driver.dest.x }
              { fith }  { /FitH ~ driver.dest.y }
              { fitv }  { /FitV ~ driver.dest.x }
            }
            {
              /XYZ ~ driver.dest.point ~ \fp_eval:n { (#2) / 100 }
            }
        ]
        /Dest ( \exp_not:n {#1} ) cvn
        /DEST
      }
  }
\cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2
  {
    \group_begin:
      \hbox_set:Nn \l__driver_internal_box {#2}
      \box_move_down:nn
        { \box_dp:N \l__driver_internal_box }
        { \hbox:n { \__driver_postscript:n { driver.save.ll } } }
      \box_use:N \l__driver_internal_box
      \box_move_up:nn
        { \box_ht:N \l__driver_internal_box }
        { \hbox:n { \__driver_postscript:n { driver.save.ur } } }
      \__driver_pdfmark:n
        {
          /View
          [
            /FitR ~
              driver.llx ~ driver.lly ~ driver.dest2device ~
              driver.urx ~ driver.ury ~ driver.dest2device
          ]
          /Dest ( #1 ) cvn
          /DEST
        }
    \group_end:
  }
\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 { }
\cs_new_protected:Npn \driver_pdf_compress_objects:n #1 { }
\cs_new_protected:Npn \driver_pdf_version_major_gset:n #1 { }
\cs_new_protected:Npn \driver_pdf_version_minor_gset:n #1 { }
\cs_new:Npn \driver_pdf_version_major: { -1 }
\cs_new:Npn \driver_pdf_version_minor: { -1 }
%% 
%%
%% End of file `l3dvips.def'.
